(command.CommandList
  children: [
    (C {<source>} {<'./virtualbox_env.sh'>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: (bool_expr.Unary op_id:Id.BoolUnary_f child:{<'./vbox_override.sh'>})
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<source>} {<'./vbox_override.sh'>})]
          spids: [18 29]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.LogicalOr
                          left: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$OSTYPE'))}
                              right: {<msys>}
                            )
                          right: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$OSTYPE'))}
                              right: {<cygwin>}
                            )
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WIN)
                  op: assign_op.Equal
                  rhs: {<TRUE>}
                  spids: [67]
                )
              ]
            )
          ]
          spids: [39 64]
        )
      ]
    )
    (C {<set>} {<-x>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: (bool_expr.Unary op_id:Id.BoolUnary_f child:{<'./proxy_setup.sh'>})
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<.>} {<'./proxy_setup.sh'>})]
          spids: [78 89]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_z
                          child: {(DQ ($ Id.VSub_DollarName '$CURL'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'CURL is not defined'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
          ]
          spids: [98 111]
        )
      ]
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'BOOTSTRAP_APT_MIRROR='> 
        (braced_var_sub
          token: <Id.VSub_Name BOOTSTRAP_APT_MIRROR>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'BOOTSTRAP_VM_MEM='> 
        (braced_var_sub
          token: <Id.VSub_Name BOOTSTRAP_VM_MEM>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<2048>})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'BOOTSTRAP_VM_CPUS='> 
        (braced_var_sub
          token: <Id.VSub_Name BOOTSTRAP_VM_CPUS>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<1>})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'BOOTSTRAP_VM_DRIVE_SIZE='> 
        (braced_var_sub
          token: <Id.VSub_Name BOOTSTRAP_VM_DRIVE_SIZE>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<20480>})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'CLUSTER_VM_MEM='> 
        (braced_var_sub
          token: <Id.VSub_Name CLUSTER_VM_MEM>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<2560>})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'CLUSTER_VM_CPUS='> 
        (braced_var_sub
          token: <Id.VSub_Name CLUSTER_VM_CPUS>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<2>})
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'CLUSTER_VM_DRIVE_SIZE='> 
        (braced_var_sub
          token: <Id.VSub_Name CLUSTER_VM_DRIVE_SIZE>
          suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<20480>})
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BASE_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (C {<dirname>} 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name BASH_SOURCE>
                        bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                      )
                    }
                  )
              )
            }
          spids: [195]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VBOX_DIR)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$BASE_DIR') <'/vbox'>)}
          spids: [209]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:P)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ 
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.CommandList
                          children: [
                            (command.Sentence
                              child: (C {<cd>} {($ Id.VSub_DollarName '$VBOX_DIR')})
                              terminator: <Id.Op_Semi _>
                            )
                            (C {<'/bin/pwd'>})
                          ]
                        )
                    )
                  )
                }
              spids: [215]
            )
          ]
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
      ]
    )
    (command.ShFunction
      name: vbm_import
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<-r>} {<Id.Lit_VarLike 'image_name='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} {<-r>} {<Id.Lit_VarLike 'vm_name='> (DQ ($ Id.VSub_Number '$2'))})
            (C {<shift>} {<2>})
            (C {(DQ ($ Id.VSub_DollarName '$VBM'))} {<Id.KW_Import import>} 
              {(DQ ($ Id.VSub_DollarName '$image_name'))} {<--vsys>} {<0>} {<--vmname>} {(DQ ($ Id.VSub_DollarName '$vm_name'))} {(DQ ($ Id.VSub_At '$@'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: download_VM_files
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {($ Id.VSub_DollarName '$P')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ROM)
                  op: assign_op.Equal
                  rhs: {<gpxe-1.0.1-80861004.rom>}
                  spids: [321]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CACHEDIR)
                  op: assign_op.Equal
                  rhs: {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/bcpc-cache'>}
                  spids: [325]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalNot
                                  child: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_f
                                      child: {($ Id.VSub_DollarName '$ROM')}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_f
                                          child: 
                                            {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                              ($ Id.VSub_DollarName '$ROM')
                                            }
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<cp>} 
                              {($ Id.VSub_DollarName '$CACHEDIR') <'/'> ($ Id.VSub_DollarName '$ROM')} {<.>}
                            )
                          ]
                          spids: [347 360]
                        )
                      ]
                      else_action: [
                        (C {($ Id.VSub_DollarName '$CURL')} {<-o>} {<gpxe-1.0.1-80861004.rom>} 
                          {
                            (DQ 
                              <
'http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php'
                              >
                            )
                          } {<-H>} {(DQ <'Origin: http://rom-o-matic.net'>)} {<-H>} {(DQ <'Host: rom-o-matic.net'>)} {<-H>} 
                          {(DQ <'Content-Type: application/x-www-form-urlencoded'>)} {<-H>} {(DQ <'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'>)} {<-H>} 
                          {
                            (DQ 
                              <
'Referer: http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php'
                              >
                            )
                          } {<-H>} {(DQ <'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3'>)} {<--data>} 
                          {
                            (DQ 
                              <
'version=1.0.1&use_flags=1&ofmt=ROM+binary+%28flashable%29+image+%28.rom%29&nic=all-drivers&pci_vendor_code=8086&pci_device_code=1004&PRODUCT_NAME=&PRODUCT_SHORT_NAME=gPXE&CONSOLE_PCBIOS=on&BANNER_TIMEOUT=20&NET_PROTO_IPV4=on&COMCONSOLE=0x3F8&COMSPEED=115200&COMDATA=8&COMPARITY=0&COMSTOP=1&DOWNLOAD_PROTO_TFTP=on&DNS_RESOLVER=on&NMB_RESOLVER=off&IMAGE_ELF=on&IMAGE_NBI=on&IMAGE_MULTIBOOT=on&IMAGE_PXE=on&IMAGE_SCRIPT=on&IMAGE_BZIMAGE=on&IMAGE_COMBOOT=on&AUTOBOOT_CMD=on&NVO_CMD=on&CONFIG_CMD=on&IFMGMT_CMD=on&IWMGMT_CMD=on&ROUTE_CMD=on&IMAGE_CMD=on&DHCP_CMD=on&SANBOOT_CMD=on&LOGIN_CMD=on&embedded_script=&A=Get+Image'
                              >
                            )
                          }
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.LogicalAnd
                                          left: 
                                            (bool_expr.Unary
                                              op_id: Id.BoolUnary_d
                                              child: {($ Id.VSub_DollarName '$CACHEDIR')}
                                            )
                                          right: 
                                            (bool_expr.LogicalNot
                                              child: 
                                                (bool_expr.Unary
                                                  op_id: Id.BoolUnary_f
                                                  child: 
                                                    {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                                      ($ Id.VSub_DollarName '$ROM')
                                                    }
                                                )
                                            )
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<cp>} {($ Id.VSub_DollarName '$ROM')} 
                              {($ Id.VSub_DollarName '$CACHEDIR') <'/'> ($ Id.VSub_DollarName '$ROM')}
                            )
                          ]
                          spids: [433 454]
                        )
                      ]
                    )
                  ]
                  spids: [331 344]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ISO)
                  op: assign_op.Equal
                  rhs: {<ubuntu-14.04-mini.iso>}
                  spids: [473]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalNot
                                  child: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_f
                                      child: {($ Id.VSub_DollarName '$ISO')}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_f
                                          child: 
                                            {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                              ($ Id.VSub_DollarName '$ISO')
                                            }
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<cp>} 
                              {($ Id.VSub_DollarName '$CACHEDIR') <'/'> ($ Id.VSub_DollarName '$ISO')} {<.>}
                            )
                          ]
                          spids: [498 511]
                        )
                      ]
                      else_action: [
                        (C {($ Id.VSub_DollarName '$CURL')} {<-o>} {($ Id.VSub_DollarName '$ISO')} 
                          {<http> <Id.Lit_Colon ':'> 
                            <
'//archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-amd64/current/images/netboot/mini.iso'
                            >
                          }
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.LogicalAnd
                                          left: 
                                            (bool_expr.Unary
                                              op_id: Id.BoolUnary_d
                                              child: {($ Id.VSub_DollarName '$CACHEDIR')}
                                            )
                                          right: 
                                            (bool_expr.LogicalNot
                                              child: 
                                                (bool_expr.Unary
                                                  op_id: Id.BoolUnary_f
                                                  child: 
                                                    {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                                      ($ Id.VSub_DollarName '$ISO')
                                                    }
                                                )
                                            )
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<cp>} {($ Id.VSub_DollarName '$ISO')} 
                              {($ Id.VSub_DollarName '$CACHEDIR')}
                            )
                          ]
                          spids: [544 565]
                        )
                      ]
                    )
                  ]
                  spids: [482 495]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BOX)
                  op: assign_op.Equal
                  rhs: {(SQ <trusty-server-cloudimg-amd64-vagrant-disk1.box>)}
                  spids: [582]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<hash>} {<vagrant>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '2>'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {(DQ <'Vagrant detected - downloading Vagrant box for bcpc-bootstrap VM'>)}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.LogicalNot
                                          child: 
                                            (bool_expr.Unary
                                              op_id: Id.BoolUnary_f
                                              child: {($ Id.VSub_DollarName '$BOX')}
                                            )
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.Unary
                                                  op_id: Id.BoolUnary_f
                                                  child: 
                                                    {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                                      ($ Id.VSub_DollarName '$BOX')
                                                    }
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<cp>} 
                                      {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                        ($ Id.VSub_DollarName '$BOX')
                                      } {<.>}
                                    )
                                  ]
                                  spids: [631 644]
                                )
                              ]
                              else_action: [
                                (C {($ Id.VSub_DollarName '$CURL')} {<-o>} 
                                  {($ Id.VSub_DollarName '$BOX')} 
                                  {<http> <Id.Lit_Colon ':'> 
                                    <'//cloud-images.ubuntu.com/vagrant/trusty/current/'> ($ Id.VSub_DollarName '$BOX')
                                  }
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.LogicalAnd
                                                  left: 
                                                    (bool_expr.Unary
                                                      op_id: Id.BoolUnary_d
                                                      child: {($ Id.VSub_DollarName '$CACHEDIR')}
                                                    )
                                                  right: 
                                                    (bool_expr.LogicalNot
                                                      child: 
                                                        (bool_expr.Unary
                                                          op_id: Id.BoolUnary_f
                                                          child: 
                                                            {($ Id.VSub_DollarName '$CACHEDIR') <'/'> 
                                                              ($ Id.VSub_DollarName '$BOX')
                                                            }
                                                        )
                                                    )
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<cp>} {($ Id.VSub_DollarName '$BOX')} 
                                      {($ Id.VSub_DollarName '$CACHEDIR')}
                                    )
                                  ]
                                  spids: [674 695]
                                )
                              ]
                            )
                          ]
                          spids: [615 628]
                        )
                      ]
                    )
                  ]
                  spids: [593 605]
                )
              ]
            )
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: remove_DHCPservers
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'network_name='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{})
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {(DQ ($ Id.VSub_DollarName '$network_name'))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'vms='> 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (C {($ Id.VSub_DollarName '$VBM')} {<list>} {<vms>})
                                (C {<sed>} {(SQ <'s/^.*{\\([0-9a-f-]*\\)}/\\1/'>)})
                              ]
                              negated: F
                            )
                        )
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'vm_networks='> 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (command.ForEach
                                  iter_names: [vm]
                                  iterable: (for_iter.Words words:[{($ Id.VSub_DollarName '$vms')}])
                                  body: 
                                    (command.DoGroup
                                      children: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              children: [
                                                (C {($ Id.VSub_DollarName '$VBM')} {<showvminfo>} 
                                                  {<--details>} {<--machinereadable>} {($ Id.VSub_DollarName '$vm')}
                                                )
                                                (C {<grep>} {<-i>} {(SQ <'^hostonlyadapter[2-9]='>)})
                                                (C {<sed>} {<-e>} {(SQ <'s/^.*=//'>)} {<-e>} 
                                                  {(SQ <'s/"//g'>)}
                                                )
                                              ]
                                              negated: F
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                )
                                (C {<sort>} {<-u>})
                              ]
                              negated: F
                            )
                        )
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'existing_nets_reg_ex='> 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              words: [
                                {<sed>}
                                {<-e>}
                                {(SQ <'s/^/^/'>)}
                                {<-e>}
                                {(SQ <'/$/$/'>)}
                                {<-e>}
                                {(SQ <'s/ /$|^/g'>)}
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_TLess '<<<'>
                                  loc: (redir_loc.Fd fd:0)
                                  arg: {(DQ ($ Id.VSub_DollarName '$vm_networks'))}
                                )
                              ]
                              do_fork: T
                            )
                        )
                      }
                    )
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$VBM')} {<list>} {<dhcpservers>})
                        (C {<grep>} {<-E>} 
                          {
                            (DQ <'^NetworkName:'> <Id.Lit_BadBackslash '\\'> 
                              <'s+HostInterfaceNetworking'>
                            )
                          }
                        )
                        (C {<awk>} {(SQ <'{print $2}'>)})
                        (command.WhileUntil
                          keyword: <Id.KW_While while>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: (C {<read>} {<-r>} {<network_name>})
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          body: 
                            (command.DoGroup
                              children: [
                                (command.AndOr
                                  ops: [Id.Op_DAmp Id.Op_DAmp]
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_n
                                          child: {($ Id.VSub_DollarName '$existing_nets_reg_ex')}
                                        )
                                    )
                                    (command.Pipeline
                                      children: [
                                        (command.Simple
                                          words: [
                                            {<egrep>}
                                            {<-q>}
                                            {($ Id.VSub_DollarName '$existing_nets_reg_ex')}
                                          ]
                                          redirects: [
                                            (redir
                                              op: <Id.Redir_TLess '<<<'>
                                              loc: (redir_loc.Fd fd:0)
                                              arg: {($ Id.VSub_DollarName '$network_name')}
                                            )
                                          ]
                                          do_fork: T
                                        )
                                      ]
                                      negated: T
                                    )
                                    (command.ControlFlow
                                      token: <Id.ControlFlow_Continue continue>
                                    )
                                  ]
                                )
                                (C {<remove_DHCPservers>} {($ Id.VSub_DollarName '$network_name')})
                              ]
                            )
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [757 770]
                )
              ]
              else_action: [
                (command.AndOr
                  ops: [Id.Op_DAmp Id.Op_DPipe]
                  children: [
                    (C {($ Id.VSub_DollarName '$VBM')} {<dhcpserver>} {<remove>} {<--netname>} 
                      {(DQ ($ Id.VSub_DollarName '$network_name'))}
                    )
                    (C {<local>} {<Id.Lit_VarLike 'return='> <0>})
                    (C {<local>} {<Id.Lit_VarLike 'return='> ($ Id.VSub_QMark '$?')})
                  ]
                )
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {($ Id.VSub_DollarName '$return')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: create_bootstrap_VM
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {($ Id.VSub_DollarName '$P')})
            (C {<remove_DHCPservers>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<hash>} {<vagrant>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '2>'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {(DQ <'Vagrant detected - using Vagrant to initialize bcpc-bootstrap VM'>)}
                    )
                    (C {<cp>} {<'../Vagrantfile'>} {<.>})
                    (C {<vagrant>} {<up>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:keyfile)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {<vagrant>} {<ssh-config>} {<bootstrap>})
                                        (C {<awk>} 
                                          {
                                            (SQ 
                                              <
'/Host bootstrap/,/^$/{ if ($0 ~ /^ +IdentityFile/) print $2}'
                                              >
                                            )
                                          }
                                        )
                                      ]
                                      negated: F
                                    )
                                )
                              )
                            }
                          spids: [1089]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_f
                                          child: {(DQ ($ Id.VSub_DollarName '$keyfile'))}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<cp>} {(DQ ($ Id.VSub_DollarName '$keyfile'))} {<insecure_private_key>})
                          ]
                          spids: [1109 1122]
                        )
                      ]
                    )
                  ]
                  spids: [1055 1067]
                )
              ]
              else_action: [
                (C {<echo>} {(DQ <'Vagrant not detected - using raw VirtualBox for bcpc-bootstrap'>)})
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$WIN'))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.ForEach
                          iter_names: [i]
                          iterable: 
                            (for_iter.Words
                              words: [{<0>} {<1>} {<2>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>}]
                            )
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: 
                                        (condition.Shell
                                          commands: [
                                            (command.Sentence
                                              child: 
                                                (command.DBracket
                                                  expr: 
                                                    (bool_expr.LogicalNot
                                                      child: 
                                                        (bool_expr.Unary
                                                          op_id: Id.BoolUnary_z
                                                          child: 
                                                            {
                                                              (command_sub
                                                                left_token: <Id.Left_Backtick '`'>
                                                                child: 
                                                                  (command.Pipeline
                                                                    children: [
                                                                      (C 
                                                                        {
                                                                          ($ Id.VSub_DollarName 
'$VBM'
                                                                          )
                                                                        } {<list>} {<hostonlyifs>}
                                                                      )
                                                                      (C {<grep>} 
                                                                        {<vboxnet> 
                                                                          ($ Id.VSub_DollarName '$i')
                                                                        }
                                                                      )
                                                                      (C {<cut>} {<-f2>} 
                                                                        {<-d> (DQ <' '>)}
                                                                      )
                                                                    ]
                                                                    negated: F
                                                                  )
                                                              )
                                                            }
                                                        )
                                                    )
                                                )
                                              terminator: <Id.Op_Semi _>
                                            )
                                          ]
                                        )
                                      action: [
                                        (command.AndOr
                                          ops: [Id.Op_DPipe]
                                          children: [
                                            (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<remove>} 
                                              {<vboxnet> ($ Id.VSub_DollarName '$i')}
                                            )
                                            (C {<true>})
                                          ]
                                        )
                                      ]
                                      spids: [1197 1236]
                                    )
                                  ]
                                )
                              ]
                            )
                        )
                      ]
                      spids: [1147 1160]
                    )
                  ]
                  else_action: [
                    (command.ForEach
                      iter_names: [i]
                      iterable: 
                        (for_iter.Words
                          words: [{<10>} {<9>} {<8>} {<7>} {<6>} {<5>} {<4>} {<3>} {<2>} {<1>}]
                        )
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.Binary
                                                  op_id: Id.BoolBinary_gt
                                                  left: {<i>}
                                                  right: {<1>}
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (command.Sentence
                                      child: 
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:IF)
                                              op: assign_op.Equal
                                              rhs: 
                                                {
                                                  (DQ <'VirtualBox Host-Only Ethernet Adapter #'> 
                                                    ($ Id.VSub_DollarName '$i')
                                                  )
                                                }
                                              spids: [1321]
                                            )
                                          ]
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  spids: [1305 1318]
                                )
                              ]
                              else_action: [
                                (command.Sentence
                                  child: 
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:IF)
                                          op: assign_op.Equal
                                          rhs: {(DQ <'VirtualBox Host-Only Ethernet Adapter'>)}
                                          spids: [1332]
                                        )
                                      ]
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.LogicalNot
                                                  child: 
                                                    (bool_expr.Unary
                                                      op_id: Id.BoolUnary_z
                                                      child: 
                                                        {
                                                          (command_sub
                                                            left_token: <Id.Left_Backtick '`'>
                                                            child: 
                                                              (command.Pipeline
                                                                children: [
                                                                  (C {($ Id.VSub_DollarName '$VBM')} 
                                                                    {<list>} {<hostonlyifs>}
                                                                  )
                                                                  (C {<grep>} 
                                                                    {
                                                                      (DQ 
                                                                        ($ Id.VSub_DollarName '$IF')
                                                                      )
                                                                    }
                                                                  )
                                                                ]
                                                                negated: F
                                                              )
                                                          )
                                                        }
                                                    )
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<remove>} 
                                      {(DQ ($ Id.VSub_DollarName '$IF'))}
                                    )
                                  ]
                                  spids: [1342 1371]
                                )
                              ]
                            )
                          ]
                        )
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<create>})
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<create>})
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<create>})
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$WIN'))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [(C {<remove_DHCPservers>} {<vboxnet0>}) (C {<true>})]
                        )
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [(C {<remove_DHCPservers>} {<vboxnet1>}) (C {<true>})]
                        )
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [(C {<remove_DHCPservers>} {<vboxnet2>}) (C {<true>})]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:VBN0)
                              op: assign_op.Equal
                              rhs: {<vboxnet0>}
                              spids: [1474]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:VBN1)
                              op: assign_op.Equal
                              rhs: {<vboxnet1>}
                              spids: [1478]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:VBN2)
                              op: assign_op.Equal
                              rhs: {<vboxnet2>}
                              spids: [1482]
                            )
                          ]
                        )
                      ]
                      spids: [1419 1432]
                    )
                  ]
                  else_action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:VBN0)
                          op: assign_op.Equal
                          rhs: {(DQ <'VirtualBox Host-Only Ethernet Adapter'>)}
                          spids: [1493]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:VBN1)
                          op: assign_op.Equal
                          rhs: {(DQ <'VirtualBox Host-Only Ethernet Adapter #2'>)}
                          spids: [1499]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:VBN2)
                          op: assign_op.Equal
                          rhs: {(DQ <'VirtualBox Host-Only Ethernet Adapter #3'>)}
                          spids: [1505]
                        )
                      ]
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<ipconfig>} 
                  {(DQ ($ Id.VSub_DollarName '$VBN0'))} {<--ip>} {<10.0.100.2>} {<--netmask>} {<255.255.255.0>}
                )
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<ipconfig>} 
                  {(DQ ($ Id.VSub_DollarName '$VBN1'))} {<--ip>} {<172.16.100.2>} {<--netmask>} {<255.255.255.0>}
                )
                (C {($ Id.VSub_DollarName '$VBM')} {<hostonlyif>} {<ipconfig>} 
                  {(DQ ($ Id.VSub_DollarName '$VBN2'))} {<--ip>} {<192.168.100.2>} {<--netmask>} {<255.255.255.0>}
                )
                (command.ForEach
                  iter_names: [vm]
                  iterable: (for_iter.Words words:[{<bcpc-bootstrap>}])
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {($ Id.VSub_DollarName '$VBM')} {<list>} {<vms>})
                                            (C {<grep>} 
                                              {
                                                (DQ <'^'> 
                                                  (word_part.EscapedLiteral
                                                    token: <Id.Lit_EscapedChar '\\"'>
                                                  ) (${ Id.VSub_Name vm) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                                )
                                              }
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:ARCHIVED_BOOTSTRAP)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          <
'../images/build/virtualbox/bcpc-bootstrap/packer-bcpc-bootstrap_ubuntu-14.04.2-amd64.ova'
                                          >
                                        }
                                      spids: [1638]
                                    )
                                  ]
                                )
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: 
                                        (condition.Shell
                                          commands: [
                                            (command.Sentence
                                              child: 
                                                (command.DBracket
                                                  expr: 
                                                    (bool_expr.LogicalAnd
                                                      left: 
                                                        (bool_expr.Unary
                                                          op_id: Id.BoolUnary_n
                                                          child: 
                                                            {
                                                              (DQ 
                                                                ($ Id.VSub_DollarName 
'$ARCHIVED_BOOTSTRAP'
                                                                )
                                                              )
                                                            }
                                                        )
                                                      right: 
                                                        (bool_expr.Unary
                                                          op_id: Id.BoolUnary_f
                                                          child: 
                                                            {
                                                              (DQ 
                                                                ($ Id.VSub_DollarName 
'$ARCHIVED_BOOTSTRAP'
                                                                )
                                                              )
                                                            }
                                                        )
                                                    )
                                                )
                                              terminator: <Id.Op_Semi _>
                                            )
                                          ]
                                        )
                                      action: [
                                        (C {<vbm_import>} 
                                          {(DQ ($ Id.VSub_DollarName '$ARCHIVED_BOOTSTRAP'))} {<bcpc-bootstrap>}
                                        )
                                      ]
                                      spids: [1643 1664]
                                    )
                                  ]
                                  else_action: [
                                    (command.ControlFlow
                                      token: <Id.ControlFlow_Exit exit>
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<createvm>} {<--name>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--ostype>} {<Ubuntu_64>} {<--basefolder>} {($ Id.VSub_DollarName '$P')} {<--register>}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--memory>} {($ Id.VSub_DollarName '$BOOTSTRAP_VM_MEM')}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--cpus>} {($ Id.VSub_DollarName '$BOOTSTRAP_VM_CPUS')}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--vram>} {<16>}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<storagectl>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--name>} {(DQ <'SATA Controller'>)} {<--add>} {<sata>}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<storagectl>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--name>} {(DQ <'IDE Controller'>)} {<--add>} {<ide>}
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:port)
                                          op: assign_op.Equal
                                          rhs: {<0>}
                                          spids: [1771]
                                        )
                                      ]
                                    )
                                    (command.ForEach
                                      iter_names: [disk]
                                      iterable: (for_iter.Words words:[{<a>}])
                                      body: 
                                        (command.DoGroup
                                          children: [
                                            (C {($ Id.VSub_DollarName '$VBM')} {<createhd>} 
                                              {<--filename>} 
                                              {($ Id.VSub_DollarName '$P') <'/'> 
                                                ($ Id.VSub_DollarName '$vm') <'/'> ($ Id.VSub_DollarName '$vm') <-> ($ Id.VSub_DollarName '$disk') <.vdi>
                                              } {<--size>} {($ Id.VSub_DollarName '$BOOTSTRAP_VM_DRIVE_SIZE')}
                                            )
                                            (C {($ Id.VSub_DollarName '$VBM')} {<storageattach>} 
                                              {($ Id.VSub_DollarName '$vm')} {<--storagectl>} {(DQ <'SATA Controller'>)} {<--device>} {<0>} {<--port>} {($ Id.VSub_DollarName '$port')} 
                                              {<--type>} {<hdd>} {<--medium>} 
                                              {($ Id.VSub_DollarName '$P') <'/'> 
                                                ($ Id.VSub_DollarName '$vm') <'/'> ($ Id.VSub_DollarName '$vm') <-> ($ Id.VSub_DollarName '$disk') <.vdi>
                                              }
                                            )
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:port)
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (word_part.ArithSub
                                                        anode: 
                                                          (arith_expr.Binary
                                                            op_id: Id.Arith_Plus
                                                            left: <Id.Lit_ArithVarLike port>
                                                            right: {<Id.Lit_Digits 1>}
                                                          )
                                                      )
                                                    }
                                                  spids: [1843]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<storageattach>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--storagectl>} {(DQ <'IDE Controller'>)} {<--device>} {<0>} {<--port>} {<0>} {<--type>} {<dvddrive>} 
                                      {<--medium>} {($ Id.VSub_DollarName '$ISO')}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--boot1>} {<disk>}
                                    )
                                  ]
                                )
                                (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                  {($ Id.VSub_DollarName '$vm')} {<--nic1>} {<nat>}
                                )
                                (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                  {($ Id.VSub_DollarName '$vm')} {<--nic2>} {<hostonly>} {<--hostonlyadapter2>} {(DQ ($ Id.VSub_DollarName '$VBN0'))}
                                )
                                (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                  {($ Id.VSub_DollarName '$vm')} {<--nic3>} {<hostonly>} {<--hostonlyadapter3>} {(DQ ($ Id.VSub_DollarName '$VBN1'))}
                                )
                                (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                                  {($ Id.VSub_DollarName '$vm')} {<--nic4>} {<hostonly>} {<--hostonlyadapter4>} {(DQ ($ Id.VSub_DollarName '$VBN2'))}
                                )
                              ]
                              spids: [1593 1618]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: create_cluster_VMs
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:oifs)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$IFS'))}
                  spids: [2002]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (single_quoted
                        left: <Id.Left_DollarSingleQuote '$\''>
                        tokens: [<Id.Char_OneChar '\\n'>]
                        multiline: F
                      )
                    }
                  spids: [2008]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:bootstrap_interfaces)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [
                          {
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {($ Id.VSub_DollarName '$VBM')} {<showvminfo>} {<bcpc-bootstrap>} 
                                      {<--machinereadable>}
                                    )
                                    (C {<egrep>} {(SQ <'^hostonlyadapter[0-9]='>)})
                                    (C {<sort>})
                                    (C {<sed>} {<-e>} {(SQ <'s/.*=//'>)} {<-e>} {(SQ <'s/"//g'>)})
                                  ]
                                  negated: F
                                )
                            )
                          }
                        ]
                      )
                    }
                  spids: [2014]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$oifs'))}
                  spids: [2051]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VBN0)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name bootstrap_interfaces>
                          bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                        )
                      )
                    }
                  spids: [2057]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VBN1)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name bootstrap_interfaces>
                          bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 1>})
                        )
                      )
                    }
                  spids: [2068]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VBN2)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name bootstrap_interfaces>
                          bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 2>})
                        )
                      )
                    }
                  spids: [2079]
                )
              ]
            )
            (command.ForEach
              iter_names: [vm]
              iterable: (for_iter.Words words:[{<bcpc-vm1>} {<bcpc-vm2>} {<bcpc-vm3>}])
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {($ Id.VSub_DollarName '$VBM')} {<list>} {<vms>})
                                        (C {<grep>} 
                                          {
                                            (DQ <'^'> 
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\"'>
                                              ) (${ Id.VSub_Name vm) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                            )
                                          }
                                        )
                                      ]
                                      negated: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {($ Id.VSub_DollarName '$VBM')} {<createvm>} {<--name>} 
                              {($ Id.VSub_DollarName '$vm')} {<--ostype>} {<Ubuntu_64>} {<--basefolder>} {($ Id.VSub_DollarName '$P')} {<--register>}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--memory>} {($ Id.VSub_DollarName '$CLUSTER_VM_MEM')}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--cpus>} {($ Id.VSub_DollarName '$CLUSTER_VM_CPUS')}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--vram>} {<16>}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<storagectl>} 
                              {($ Id.VSub_DollarName '$vm')} {<--name>} {(DQ <'SATA Controller'>)} {<--add>} {<sata>}
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:port)
                                  op: assign_op.Equal
                                  rhs: {<0>}
                                  spids: [2216]
                                )
                              ]
                            )
                            (command.ForEach
                              iter_names: [disk]
                              iterable: (for_iter.Words words:[{<a>} {<b>} {<c>} {<d>} {<e>}])
                              body: 
                                (command.DoGroup
                                  children: [
                                    (C {($ Id.VSub_DollarName '$VBM')} {<createhd>} {<--filename>} 
                                      {($ Id.VSub_DollarName '$P') <'/'> ($ Id.VSub_DollarName '$vm') 
                                        <'/'> ($ Id.VSub_DollarName '$vm') <-> ($ Id.VSub_DollarName '$disk') <.vdi>
                                      } {<--size>} {($ Id.VSub_DollarName '$CLUSTER_VM_DRIVE_SIZE')}
                                    )
                                    (C {($ Id.VSub_DollarName '$VBM')} {<storageattach>} 
                                      {($ Id.VSub_DollarName '$vm')} {<--storagectl>} {(DQ <'SATA Controller'>)} {<--device>} {<0>} {<--port>} {($ Id.VSub_DollarName '$port')} 
                                      {<--type>} {<hdd>} {<--medium>} 
                                      {($ Id.VSub_DollarName '$P') <'/'> ($ Id.VSub_DollarName '$vm') 
                                        <'/'> ($ Id.VSub_DollarName '$vm') <-> ($ Id.VSub_DollarName '$disk') <.vdi>
                                      }
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:port)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (word_part.ArithSub
                                                anode: 
                                                  (arith_expr.Binary
                                                    op_id: Id.Arith_Plus
                                                    left: <Id.Lit_ArithVarLike port>
                                                    right: {<Id.Lit_Digits 1>}
                                                  )
                                              )
                                            }
                                          spids: [2296]
                                        )
                                      ]
                                    )
                                  ]
                                )
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--nic1>} {<hostonly>} {<--hostonlyadapter1>} {(DQ ($ Id.VSub_DollarName '$VBN0'))} {<--nictype1>} 
                              {<82543GC>}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<setextradata>} 
                              {($ Id.VSub_DollarName '$vm')} {<'VBoxInternal/Devices/pcbios/0/Config/LanBootRom'>} 
                              {($ Id.VSub_DollarName '$P') <'/gpxe-1.0.1-80861004.rom'>}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--nic2>} {<hostonly>} {<--hostonlyadapter2>} {(DQ ($ Id.VSub_DollarName '$VBN1'))}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--nic3>} {<hostonly>} {<--hostonlyadapter3>} {(DQ ($ Id.VSub_DollarName '$VBN2'))}
                            )
                            (C {($ Id.VSub_DollarName '$VBM')} {<modifyvm>} 
                              {($ Id.VSub_DollarName '$vm')} {<--largepages>} {<on>} {<--vtxvpid>} {<on>} {<--hwvirtex>} {<on>} {<--nestedpaging>} {<on>} {<--ioapic>} 
                              {<off>}
                            )
                          ]
                          spids: [2115 2140]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: install_cluster
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:environment)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Number 1>
                        suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<Test-Laptop>})
                      )
                    }
                  spids: [2425]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ip)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Number 2>
                        suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<10.0.100.3>})
                      )
                    }
                  spids: [2432]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<hash>} {<vagrant>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '2>'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<vagrant>} {<ssh>} {<-c>} 
                          {
                            (DQ 
                              <
'test -f /etc/default/grub.ucf-dist && sudo mv /etc/default/grub.ucf-dist /etc/default/grub'
                              >
                            )
                          }
                        )
                        (C {<true>})
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {<-n>} 
                                      {(DQ ($ Id.VSub_DollarName '$http_proxy'))} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              children: [
                                                (C {<vagrant>} {<ssh>} {<-c>} 
                                                  {
                                                    (DQ 
                                                      <
'grep -z \'^Acquire::http::Proxy \' /etc/apt/apt.conf'
                                                      >
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'echo \'Acquire::http::Proxy '> 
                                          (word_part.EscapedLiteral
                                            token: <Id.Lit_EscapedChar '\\"'>
                                          ) ($ Id.VSub_DollarName '$http_proxy') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                                          <';\' | sudo tee -a /etc/apt/apt.conf'>
                                        )
                                      }
                                    )
                                  ]
                                  spids: [2510 2525]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:PROXY_INFO_SH)
                                  op: assign_op.Equal
                                  rhs: {(DQ <'/home/vagrant/proxy_info.sh'>)}
                                  spids: [2551]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              children: [
                                                (C {<vagrant>} {<ssh>} {<-c>} 
                                                  {
                                                    (DQ <'test -f '> 
                                                      ($ Id.VSub_DollarName '$PROXY_INFO_SH')
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'echo -e \'export http_proxy='> 
                                          ($ Id.VSub_DollarName '$http_proxy') <Id.Lit_BadBackslash '\\'> <'nexport https_proxy='> ($ Id.VSub_DollarName '$https_proxy') 
                                          <'\' | sudo tee -a '> ($ Id.VSub_DollarName '$PROXY_INFO_SH')
                                        )
                                      }
                                    )
                                  ]
                                  spids: [2557 2573]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CURLRC)
                                  op: assign_op.Equal
                                  rhs: {(DQ <'/home/vagrant/.curlrc'>)}
                                  spids: [2596]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              children: [
                                                (C {<vagrant>} {<ssh>} {<-c>} 
                                                  {(DQ <'test -f '> ($ Id.VSub_DollarName '$CURLRC'))}
                                                )
                                              ]
                                              negated: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'echo -e \'proxy = '> 
                                          ($ Id.VSub_DollarName '$http_proxy') <'\' | sudo tee -a '> ($ Id.VSub_DollarName '$CURLRC')
                                        )
                                      }
                                    )
                                  ]
                                  spids: [2602 2618]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:GITCONFIG)
                                  op: assign_op.Equal
                                  rhs: {(DQ <'/home/vagrant/.gitconfig'>)}
                                  spids: [2638]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              children: [
                                                (C {<vagrant>} {<ssh>} {<-c>} 
                                                  {
                                                    (DQ <'test -f '> 
                                                      ($ Id.VSub_DollarName '$GITCONFIG')
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'echo -e \'[http]'> <Id.Lit_BadBackslash '\\'> 
                                          <'nproxy = '> ($ Id.VSub_DollarName '$http_proxy') <'\' | sudo tee -a '> ($ Id.VSub_DollarName '$GITCONFIG')
                                        )
                                      }
                                    )
                                  ]
                                  spids: [2644 2660]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CUSTOM_BASE)
                                  op: assign_op.Equal
                                  rhs: {(DQ <custom>)}
                                  spids: [2691]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CUSTOM_CA_DIR)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ <'/usr/share/ca-certificates/'> 
                                        ($ Id.VSub_DollarName '$CUSTOM_BASE')
                                      )
                                    }
                                  spids: [2697]
                                )
                              ]
                            )
                            (command.ForEach
                              iter_names: [CERT]
                              iterable: 
                                (for_iter.Words
                                  words: [
                                    {
                                      (command_sub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (C {<ls>} {<-1>} 
                                            {($ Id.VSub_DollarName '$BASE_DIR') <'/cacerts'>}
                                          )
                                      )
                                    }
                                  ]
                                )
                              body: 
                                (command.DoGroup
                                  children: [
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'sudo mkdir -p '> ($ Id.VSub_DollarName '$CUSTOM_CA_DIR'))
                                      }
                                    )
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'if [[ ! -f '> ($ Id.VSub_DollarName '$CUSTOM_CA_DIR') 
                                          <'/'> ($ Id.VSub_DollarName '$CERT') <' ]]; then sudo cp /chef-bcpc-host/cacerts/'> 
                                          ($ Id.VSub_DollarName '$CERT') <' '> ($ Id.VSub_DollarName '$CUSTOM_CA_DIR') <'/'> ($ Id.VSub_DollarName '$CERT') <'; fi'>
                                        )
                                      }
                                    )
                                    (C {<vagrant>} {<ssh>} {<-c>} 
                                      {
                                        (DQ <'echo '> ($ Id.VSub_DollarName '$CUSTOM_BASE') <'/'> 
                                          ($ Id.VSub_DollarName '$CERT') <' | sudo tee -a /etc/ca-certificates.conf'>
                                        )
                                      }
                                    )
                                  ]
                                )
                            )
                            (C {<vagrant>} {<ssh>} {<-c>} {(DQ <'sudo /usr/sbin/update-ca-certificates'>)})
                          ]
                          spids: [2494 2507]
                        )
                      ]
                    )
                    (C {<echo>} {(DQ <'Bootstrap complete - setting up Chef server'>)})
                    (C {<echo>} {(DQ <'N.B. This may take approximately 30-45 minutes to complete.'>)})
                    (C {<'./bootstrap_chef.sh'>} {<--vagrant-remote>} {($ Id.VSub_DollarName '$ip')} 
                      {($ Id.VSub_DollarName '$environment')}
                    )
                    (C {<'./enroll_cobbler.sh'>})
                  ]
                  spids: [2444 2456]
                )
              ]
              else_action: [(C {<'./non_vagrant_boot.sh'>})]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name BASH_SOURCE>
                                  bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                                )
                              )
                            }
                          right: {(DQ (${ Id.VSub_Number 0))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<download_VM_files>})
            (C {<create_bootstrap_VM>})
            (C {<create_cluster_VMs>})
            (C {<install_cluster>} {($ Id.VSub_Star '$*')})
          ]
          spids: [2828 2852]
        )
      ]
    )
  ]
)