(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PERL='> name:PERL)
          op: assign_op.Equal
          rhs: {(SQ <'@@PERL@@'>)}
          spids: [13]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'OPTIONS_KEEPDASHDASH='>
              name: OPTIONS_KEEPDASHDASH
            )
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [18]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_STUCKLONG='> name:OPTIONS_STUCKLONG)
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [20]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_SPEC='> name:OPTIONS_SPEC)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'git instaweb [options] (--start | --stop | --restart)\n'> <'--\n'> 
                <'l,local        only bind on 127.0.0.1\n'> <'p,port=        the port to bind to\n'> <'d,httpd=       the command to launch\n'> 
                <'b,browser=     the browser to launch\n'> <'m,module-path= the module path (only needed for apache2)\n'> <' Action\n'> 
                <'stop           stop the web server\n'> <'start          start the web server\n'> <'restart        restart the web server\n'>
              )
            }
          spids: [22]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SUBDIRECTORY_OK='> name:SUBDIRECTORY_OK)
          op: assign_op.Equal
          rhs: {<Yes>}
          spids: [39]
        )
      ]
      redirects: []
    )
    (C {<.>} {<git-sh-setup>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fqgitdir='> name:fqgitdir)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName GIT_DIR))}
          spids: [47]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'local='> name:local)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<config>} {<--bool>} {<--get>} {<instaweb.local>})
                  right: <Id.Eof_RParen _>
                )
              )
            }
          spids: [52]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<config>} {<--get>} {<instaweb.httpd>})
                  right: <Id.Eof_RParen _>
                )
              )
            }
          spids: [67]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'root='> name:root)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<config>} {<--get>} {<instaweb.gitwebdir>})
                  right: <Id.Eof_RParen _>
                )
              )
            }
          spids: [80]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<git>} {<config>} {<--get>} {<instaweb.port>})
                right: <Id.Eof_RParen _>
              )
            }
          spids: [93]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'module_path='> name:module_path)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<config>} {<--get>} {<instaweb.modulepath>})
                  right: <Id.Eof_RParen _>
                )
              )
            }
          spids: [104]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
          op: assign_op.Equal
          rhs: {(DQ <browse>)}
          spids: [117]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/gitweb/httpd.conf'>)}
          spids: [123]
        )
      ]
      redirects: []
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName httpd))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
              op: assign_op.Equal
              rhs: {(SQ <'lighttpd -f'>)}
              spids: [147]
            )
          ]
          redirects: []
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName root))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'root='> name:root)
              op: assign_op.Equal
              rhs: {(SQ <'@@GITWEBDIR@@'>)}
              spids: [166]
            )
          ]
          redirects: []
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName port))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
              op: assign_op.Equal
              rhs: {<1234>}
              spids: [185]
            )
          ]
          redirects: []
        )
      ]
    )
    (command.ShFunction
      name: resolve_full_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName httpd))}
              arms: [
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Pipeline
                                  children: [
                                    (C {<echo>} {(DQ ($ Id.VSub_DollarName httpd))})
                                    (command.Simple
                                      words: [{<sane_grep>} {<-->} {(SQ <'-f *$'>)}]
                                      redirects: [
                                        (redir
                                          op: <Id.Redir_Great '>'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<'/dev/null'>}
                                        )
                                        (redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      more_env: []
                                      do_fork: T
                                    )
                                  ]
                                  negated: T
                                  stderr_indices: []
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName httpd) <' -f'>)}
                                  spids: [258]
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [228 255]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                  spids: [206 217 268 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
                          spids: [281]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name httpd>
                                  var_name: httpd
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VOp1_DPercent '%%'>
                                      arg_word: {<' '> <Id.Lit_Other '*'>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                          spids: [288]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Return return>)
                  ]
                  spids: [271 274 305 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <webrick> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/webrick.rb'>)}
                          spids: [322]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name httpd>
                                  var_name: httpd
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VOp1_DPercent '%%'>
                                      arg_word: {<' '> <Id.Lit_Other '*'>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                          spids: [329]
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Return return>)
                  ]
                  spids: [308 311 346 -1]
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<echo>} {($ Id.VSub_DollarName httpd)})
                                (C {<cut>} {<-f1>} {<-d> (SQ <' '>)})
                              ]
                              negated: F
                              stderr_indices: []
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  spids: [353]
                )
              ]
              redirects: []
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Case
                          to_match: {(DQ ($ Id.VSub_DollarName httpd_only))}
                          arms: [
                            (case_arm
                              pat_list: [{<'/'> <Id.Lit_Star '*'>}]
                              action: [(C {<Id.Lit_Colon ':'>})]
                              spids: [384 386 390 -1]
                            )
                            (case_arm
                              pat_list: [{<Id.Lit_Star '*'>}]
                              action: [
                                (command.Simple
                                  words: [{<which>} {($ Id.VSub_DollarName httpd_only)}]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  more_env: []
                                  do_fork: T
                                )
                              ]
                              spids: [392 393 404 -1]
                            )
                          ]
                          redirects: []
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName httpd)}
                          spids: [412]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [374 409]
                )
              ]
              else_action: [
                (command.ForEach
                  iter_names: [i]
                  iterable: 
                    (for_iter.Words
                      words: [
                        {<'/usr/local/sbin'>}
                        {<'/usr/sbin'>}
                        {(DQ ($ Id.VSub_DollarName root))}
                        {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb'>)}
                      ]
                    )
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (C {<test>} {<-x>} 
                                      {
                                        (DQ ($ Id.VSub_DollarName i) <'/'> 
                                          ($ Id.VSub_DollarName httpd_only)
                                        )
                                      }
                                    )
                                  ]
                                )
                              action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'full_httpd='>
                                          name: full_httpd
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {($ Id.VSub_DollarName i) <'/'> ($ Id.VSub_DollarName httpd)}
                                      spids: [474]
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Return return>
                                )
                              ]
                              spids: [458 471]
                            )
                          ]
                          else_action: []
                          redirects: []
                        )
                      ]
                    )
                  redirects: []
                )
                (command.Simple
                  words: [
                    {<echo>}
                    {
                      (DQ ($ Id.VSub_DollarName httpd_only) <' not found. Install '> 
                        ($ Id.VSub_DollarName httpd_only) <' or use'>
                      )
                    }
                    {(DQ <'--httpd to specify another httpd daemon.'>)}
                  ]
                  redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  more_env: []
                  do_fork: T
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: start_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)})
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<say>} {(DQ <'Instance already running. Restarting...'>)})
                    (C {<stop_httpd>})
                  ]
                  spids: [527 539]
                )
              ]
              else_action: []
              redirects: []
            )
            (C {<resolve_full_httpd>})
            (C {<mkdir>} {<-p>} 
              {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> 
                        ($ Id.VSub_DollarName httpd_only) <.conf>
                      )
                    }
                  spids: [574]
                )
              ]
              redirects: []
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))}) (C {<configure_httpd>})]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)})
                (C {<gitweb_conf>})
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName httpd))}
              arms: [
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}
                  ]
                  action: [
                    (command.Sentence
                      child: (C {($ Id.VSub_DollarName full_httpd)} {(DQ ($ Id.VSub_DollarName conf))})
                      terminator: <Id.Op_Amp _>
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Bang '!')}
                          spids: [656]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<test>} {($ Id.VSub_QMark '?')} 
                                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName httpd) <.>)
                              }
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [661 673]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                    (command.Simple
                      words: [{<cat>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}
                        )
                        (redir
                          op: <Id.Redir_DLess '<<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: 
                            (redir_param.HereDoc
                              here_begin: {<EOF>}
                              here_end_span_id: 709
                              stdin_parts: [($ Id.VSub_DollarName pid) <'\n'>]
                            )
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                  ]
                  spids: [629 636 711 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {($ Id.VSub_DollarName full_httpd)} {(DQ ($ Id.VSub_DollarName conf))})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<test>} {($ Id.VSub_QMark '?')} 
                                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName httpd) <.>)
                              }
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [725 737]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                  spids: [714 715 757 -1]
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: stop_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)})
                (C {<kill>} 
                  {
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      child: (C {<cat>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)})
                      right: <Id.Eof_RParen _>
                    )
                  }
                )
              ]
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: httpd_is_ready
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {(DQ ($ Id.VSub_DollarName PERL))} 
              {<-MIO> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Socket> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <INET>
              } {<-e>} 
              {
                (DQ <'\n'> <'local '> 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\$'>
                    ch: '$'
                  ) <'| = 1; # turn on autoflush\n'> <'exit if (IO::Socket::INET->new(\'127.0.0.1:'> 
                  ($ Id.VSub_DollarName port) <'\'));\n'> <'print \'Waiting for '> <Id.Lit_BadBackslash '\\'> <'\''> ($ Id.VSub_DollarName httpd) 
                  <Id.Lit_BadBackslash '\\'> <'\' to start ..\';\n'> <'do {\n'> <'\tprint \'.\';\n'> <'\tsleep(1);\n'> 
                  <'} until (IO::Socket::INET->new(\'127.0.0.1:'> ($ Id.VSub_DollarName port) <'\'));\n'> <'print qq! (done)'> <Id.Lit_BadBackslash '\\'> <'n!;\n'>
                )
              }
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [(C {<test>} {($ Id.VSub_Pound '#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>})]
        )
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number 1))}
              arms: [
                (case_arm
                  pat_list: [{<--stop>} {<stop>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <stop>)}
                          spids: [887]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [881 884 893 -1]
                )
                (case_arm
                  pat_list: [{<--start>} {<start>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <start>)}
                          spids: [902]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [896 899 908 -1]
                )
                (case_arm
                  pat_list: [{<--restart>} {<restart>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <restart>)}
                          spids: [917]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [911 914 923 -1]
                )
                (case_arm
                  pat_list: [{<-l>} {<--local>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'local='> name:local)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [932]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [926 929 936 -1]
                )
                (case_arm
                  pat_list: [{<-d>} {<--httpd>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                          spids: [948]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [939 942 954 -1]
                )
                (case_arm
                  pat_list: [{<-b>} {<--browser>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'browser='> name:browser)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                          spids: [966]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [957 960 972 -1]
                )
                (case_arm
                  pat_list: [{<-p>} {<--port>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                          spids: [984]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [975 978 990 -1]
                )
                (case_arm
                  pat_list: [{<-m>} {<--module-path>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'module_path='>
                              name: module_path
                            )
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                          spids: [1002]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [993 996 1008 -1]
                )
                (case_arm pat_list:[{<-->}] action:[] spids:[1011 1012 1015 -1])
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(C {<usage>})]
                  spids: [1018 1019 1025 -1]
                )
              ]
              redirects: []
            )
            (C {<shift>})
          ]
        )
      redirects: []
    )
    (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/gitweb/tmp'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_EXEC_PATH='> name:GIT_EXEC_PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<git>} {<--exec-path>})
                  right: <Id.Eof_RParen _>
                )
              )
            }
          spids: [1045]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_DIR='> name:GIT_DIR)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir))}
          spids: [1054]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GITWEB_CONFIG='> name:GITWEB_CONFIG)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)}
          spids: [1059]
        )
      ]
      redirects: []
    )
    (C {<export>} {<GIT_EXEC_PATH>} {<GIT_DIR>} {<GITWEB_CONFIG>})
    (command.ShFunction
      name: webrick_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'wrapper='> name:wrapper)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) 
                        <'/wrapper.sh'>
                      )
                    }
                  spids: [1094]
                )
              ]
              redirects: []
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName wrapper))}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1130
                      stdin_parts: [
                        <'#!@SHELL_PATH@\n'>
                        <'# we use this shell script wrapper around the real gitweb.cgi since\n'>
                        <
'# there appears to be no other way to pass arbitrary environment variables\n'
                        >
                        <'# into the CGI process\n'>
                        <'GIT_EXEC_PATH='>
                        ($ Id.VSub_DollarName GIT_EXEC_PATH)
                        <' GIT_DIR='>
                        ($ Id.VSub_DollarName GIT_DIR)
                        <' GITWEB_CONFIG='>
                        ($ Id.VSub_DollarName GITWEB_CONFIG)
                        <'\n'>
                        <'export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n'>
                        <'exec '>
                        ($ Id.VSub_DollarName root)
                        <'/gitweb.cgi\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName wrapper))})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) 
                        <.rb>
                      )
                    }
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1228
                      stdin_parts: [
                        <'#!/usr/bin/env ruby\n'>
                        <'require \'webrick\'\n'>
                        <'require \'logger\'\n'>
                        <'options = {\n'>
                        <'  :Port => '>
                        ($ Id.VSub_DollarName port)
                        <',\n'>
                        <'  :DocumentRoot => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  :Logger => Logger.new(\''>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/error.log\'),\n'>
                        <'  :AccessLog => [\n'>
                        <'    [ Logger.new(\''>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/access.log\'),\n'>
                        <'      WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n'>
                        <'  ],\n'>
                        <'  :DirectoryIndex => ['>
                        <Id.Right_DoubleQuote '"'>
                        <gitweb.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <'],\n'>
                        <'  :CGIInterpreter => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName wrapper)
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  :StartCallback => lambda do\n'>
                        <'    File.open('>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <w>
                        <Id.Right_DoubleQuote '"'>
                        <') { |f| f.puts Process.pid }\n'>
                        <'  end,\n'>
                        <'  :ServerType => WEBrick::Daemon,\n'>
                        <'}\n'>
                        <'options[:BindAddress] = \'127.0.0.1\' if '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName local)
                        <Id.Right_DoubleQuote '"'>
                        <' == '>
                        <Id.Right_DoubleQuote '"'>
                        <true>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server = WEBrick::HTTPServer.new(options)\n'>
                        <'[\'INT\', \'TERM\'].each do |signal|\n'>
                        <'  trap(signal) {server.shutdown}\n'>
                        <'end\n'>
                        <'server.start\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} 
              {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) <.rb>)}
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: lighttpd_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1823
                      stdin_parts: [
                        <'server.document-root = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server.port = '>
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                        <'server.modules = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_setenv>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'server.indexfiles = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <gitweb.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'server.pid-file = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server.errorlog = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\n'>
                        <'# to enable, add '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_access>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_accesslog>
                        <Id.Right_DoubleQuote '"'>
                        <' to server.modules\n'>
                        <'# variable above and uncomment this\n'>
                        <'#accesslog.filename = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\n'>
                        <'setenv.add-environment = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <PATH>
                        <Id.Right_DoubleQuote '"'>
                        <' => env.PATH, '>
                        <Id.Right_DoubleQuote '"'>
                        <GITWEB_CONFIG>
                        <Id.Right_DoubleQuote '"'>
                        <' => env.GITWEB_CONFIG )\n'>
                        <'\n'>
                        <'cgi.assign = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' => '>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'\n'>
                        <'# mimetype mapping\n'>
                        <'mimetype.assign             = (\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.pdf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pdf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.sig>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pgp-signature'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.spl>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/futuresplash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.class>
                        <Id.Right_DoubleQuote '"'>
                        <'        =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/octet-stream'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.ps>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/postscript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.torrent>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bittorrent'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.dvi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-dvi'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-gzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.pac>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-ns-proxy-autoconfig'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.swf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-shockwave-flash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'       =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tgz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.zip>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/zip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mp3>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.m3u>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-mpegurl'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wma>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wma'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wax>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wax'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.ogg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/ogg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wav>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-wav'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.gif>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/gif'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.jpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.jpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.png>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/png'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xbm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xbitmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xpm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xpixmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xwd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xwindowdump'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.css>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.html>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.htm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.js>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asc>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.c>
                        <Id.Right_DoubleQuote '"'>
                        <'            =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.cpp>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.log>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.conf>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.text>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.txt>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.dtd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xml>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mov>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.qt>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.avi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-msvideo'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asx>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wmv>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-wmv'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tbz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <'              =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <' )\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<x> (DQ ($ Id.VSub_DollarName local))} {<Id.Lit_Equals '='>} {<xtrue>})
                (command.Simple
                  words: [{<echo>} {(SQ <'server.bind = "127.0.0.1"'>)}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName conf))}
                    )
                  ]
                  more_env: []
                  do_fork: T
                )
              ]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: apache2_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName module_path))})]
                    )
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<test>} {<-d>} {(DQ <'/usr/lib/httpd/modules'>)})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'module_path='>
                                  name: module_path
                                )
                              op: assign_op.Equal
                              rhs: {(DQ <'/usr/lib/httpd/modules'>)}
                              spids: [1886]
                            )
                          ]
                          redirects: []
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<test>} {<-d>} {(DQ <'/usr/lib/apache2/modules'>)})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'module_path='>
                                  name: module_path
                                )
                              op: assign_op.Equal
                              rhs: {(DQ <'/usr/lib/apache2/modules'>)}
                              spids: [1903]
                            )
                          ]
                          redirects: []
                        )
                      ]
                    )
                  ]
                  spids: [1861 1872]
                )
              ]
              else_action: []
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bind='> name:bind)
                  op: assign_op.Equal
                  rhs: (rhs_word.Empty)
                  spids: [1912]
                )
              ]
              redirects: []
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<x> (DQ ($ Id.VSub_DollarName local))} {<Id.Lit_Equals '='>} {<xtrue>})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bind='> name:bind)
                      op: assign_op.Equal
                      rhs: {(SQ <'127.0.0.1:'>)}
                      spids: [1928]
                    )
                  ]
                  redirects: []
                )
              ]
            )
            (command.Simple
              words: [{<echo>} {(SQ <'text/css css'>)}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/mime.types'>)}
                )
              ]
              more_env: []
              do_fork: T
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 2001
                      stdin_parts: [
                        <'ServerName '>
                        <Id.Right_DoubleQuote '"'>
                        <git-instaweb>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'ServerRoot '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'DocumentRoot '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'ErrorLog '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'CustomLog '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <' combined\n'>
                        <'PidFile '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'Listen '>
                        ($ Id.VSub_DollarName bind)
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (command.ForEach
              iter_names: [mod]
              iterable: (for_iter.Words words:[{<mpm_event>} {<mpm_prefork>} {<mpm_worker>}])
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (C {<test>} {<-e>} 
                                  {($ Id.VSub_DollarName module_path) <'/mod_'> (${ Id.VSub_Name mod) 
                                    <.so>
                                  }
                                )
                              ]
                            )
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName module_path) <'/mod_'> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Break break>
                            )
                          ]
                          spids: [2020 2034]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
            (command.ForEach
              iter_names: [mod]
              iterable: 
                (for_iter.Words
                  words: [{<mime>} {<dir>} {<env>} {<log_config>} {<authz_core>}]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (C {<test>} {<-e>} 
                                  {($ Id.VSub_DollarName module_path) <'/mod_'> (${ Id.VSub_Name mod) 
                                    <.so>
                                  }
                                )
                              ]
                            )
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName module_path) <'/mod_'> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                          ]
                          spids: [2098 2112]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 2168
                      stdin_parts: [
                        <'TypesConfig '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/mime.types'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'DirectoryIndex gitweb.cgi\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName module_path) <'/mod_perl.so'>)})
                            (command.Simple
                              words: [
                                {<sane_grep>}
                                {(SQ <MOD_PERL>)}
                                {(DQ ($ Id.VSub_DollarName root) <'/gitweb.cgi'>)}
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                          ]
                        )
                      ]
                    )
                  action: [
                    (command.Simple
                      words: [{<cat>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName conf))}
                        )
                        (redir
                          op: <Id.Redir_DLess '<<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: 
                            (redir_param.HereDoc
                              here_begin: {<EOF>}
                              here_end_span_id: 2239
                              stdin_parts: [
                                <'LoadModule perl_module '>
                                ($ Id.VSub_DollarName module_path)
                                <'/mod_perl.so\n'>
                                <'PerlPassEnv GIT_DIR\n'>
                                <'PerlPassEnv GIT_EXEC_PATH\n'>
                                <'PerlPassEnv GITWEB_CONFIG\n'>
                                <'<Location /gitweb.cgi>\n'>
                                <'\tSetHandler perl-script\n'>
                                <'\tPerlResponseHandler ModPerl::Registry\n'>
                                <'\tPerlOptions +ParseHeaders\n'>
                                <'\tOptions +ExecCGI\n'>
                                <'</Location>\n'>
                              ]
                            )
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                  ]
                  spids: [2179 2208]
                )
              ]
              else_action: [
                (C {<resolve_full_httpd>})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'list_mods='> name:list_mods)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Pipeline
                                children: [
                                  (C {<echo>} {(DQ ($ Id.VSub_DollarName full_httpd))})
                                  (C {<sed>} {(SQ <'s/-f$/-l/'>)})
                                ]
                                negated: F
                                stderr_indices: []
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                      spids: [2251]
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName list_mods)})
                        (command.Simple
                          words: [{<sane_grep>} {(SQ <'mod_cgi\\.c'>)}]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<'/dev/null'>}
                            )
                            (redir
                              op: <Id.Redir_GreatAnd '2>&'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<1>}
                            )
                          ]
                          more_env: []
                          do_fork: T
                        )
                      ]
                      negated: F
                      stderr_indices: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (C {<test>} {<-f>} 
                                  {(DQ ($ Id.VSub_DollarName module_path) <'/mod_cgi.so'>)}
                                )
                              ]
                            )
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {
                                  (DQ <'LoadModule cgi_module '> ($ Id.VSub_DollarName module_path) 
                                    <'/mod_cgi.so'>
                                  )
                                }
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                          ]
                          spids: [2289 2301]
                        )
                      ]
                      else_action: [
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {($ Id.VSub_DollarName list_mods)})
                                (command.Simple
                                  words: [{<grep>} {(SQ <'mod_cgid\\.c'>)}]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  more_env: []
                                  do_fork: T
                                )
                              ]
                              negated: F
                              stderr_indices: []
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (C {<test>} {<-f>} 
                                          {(DQ ($ Id.VSub_DollarName module_path) <'/mod_cgid.so'>)}
                                        )
                                      ]
                                    )
                                  action: [
                                    (command.Simple
                                      words: [
                                        {<echo>}
                                        {
                                          (DQ <'LoadModule cgid_module '> 
                                            ($ Id.VSub_DollarName module_path) <'/mod_cgid.so'>
                                          )
                                        }
                                      ]
                                      redirects: [
                                        (redir
                                          op: <Id.Redir_DGreat '>>'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {(DQ ($ Id.VSub_DollarName conf))}
                                        )
                                      ]
                                      more_env: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [2342 2354]
                                )
                              ]
                              else_action: [
                                (C {<echo>} {(DQ <'You have no CGI support!'>)})
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Exit exit>
                                  arg_word: {<2>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                        )
                        (command.Simple
                          words: [{<echo>} {(DQ <'ScriptSock logs/gitweb.sock'>)}]
                          redirects: [
                            (redir
                              op: <Id.Redir_DGreat '>>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {(DQ ($ Id.VSub_DollarName conf))}
                            )
                          ]
                          more_env: []
                          do_fork: T
                        )
                      ]
                      redirects: []
                    )
                  ]
                )
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName conf))}
                    )
                    (redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {<EOF>}
                          here_end_span_id: 2427
                          stdin_parts: [
                            <'PassEnv GIT_DIR\n'>
                            <'PassEnv GIT_EXEC_PATH\n'>
                            <'PassEnv GITWEB_CONFIG\n'>
                            <'AddHandler cgi-script .cgi\n'>
                            <'<Location /gitweb.cgi>\n'>
                            <'\tOptions +ExecCGI\n'>
                            <'</Location>\n'>
                          ]
                        )
                    )
                  ]
                  more_env: []
                  do_fork: T
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: mongoose_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 2496
                      stdin_parts: [
                        <'# Mongoose web server configuration file.\n'>
                        <'# Lines starting with \'#\' and empty lines are ignored.\n'>
                        <'# For detailed description of every option, visit\n'>
                        <'# http://code.google.com/p/mongoose/wiki/MongooseManual\n'>
                        <'\n'>
                        <'root\t\t'>
                        ($ Id.VSub_DollarName root)
                        <'\n'>
                        <'ports\t\t'>
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                        <'index_files\tgitweb.cgi\n'>
                        <'#ssl_cert\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/ssl_cert.pem\n'>
                        <'error_log\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log\n'>
                        <'access_log\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log\n'>
                        <'\n'>
                        <'#cgi setup\n'>
                        <'cgi_env\t\tPATH='>
                        ($ Id.VSub_DollarName PATH)
                        <',GIT_DIR='>
                        ($ Id.VSub_DollarName GIT_DIR)
                        <',GIT_EXEC_PATH='>
                        ($ Id.VSub_DollarName GIT_EXEC_PATH)
                        <',GITWEB_CONFIG='>
                        ($ Id.VSub_DollarName GITWEB_CONFIG)
                        <'\n'>
                        <'cgi_interp\t'>
                        ($ Id.VSub_DollarName PERL)
                        <'\n'>
                        <'cgi_ext\t\tcgi,pl\n'>
                        <'\n'>
                        <'# mimetype mapping\n'>
                        <
'mime_types\t.gz=application/x-gzip,.tar.gz=application/x-tgz,.tgz=application/x-tgz,.tar=application/x-tar,.zip=application/zip,.gif=image/gif,.jpg=image/jpeg,.jpeg=image/jpeg,.png=image/png,.css=text/css,.html=text/html,.htm=text/html,.js=text/javascript,.c=text/plain,.cpp=text/plain,.log=text/plain,.conf=text/plain,.text=text/plain,.txt=text/plain,.dtd=text/xml,.bz2=application/x-bzip,.tbz=application/x-bzip-compressed-tar,.tar.bz2=application/x-bzip-compressed-tar\n'
                        >
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: plackup_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 3213
                      stdin_parts: [
                        <'#!'>
                        ($ Id.VSub_DollarName PERL)
                        <'\n'>
                        <'\n'>
                        <'# gitweb - simple web interface to track changes in git repositories\n'>
                        <'#          PSGI wrapper and server starter (see http://plackperl.org)\n'>
                        <'\n'>
                        <'use strict;\n'>
                        <'\n'>
                        <'use IO::Handle;\n'>
                        <'use Plack::MIME;\n'>
                        <'use Plack::Builder;\n'>
                        <'use Plack::App::WrapCGI;\n'>
                        <
'use CGI::Emulate::PSGI 0.07; # minimum version required to work with gitweb\n'
                        >
                        <'\n'>
                        <'# mimetype mapping (from lighttpd_conf)\n'>
                        <'Plack::MIME->add_type(\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.pdf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pdf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.sig>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pgp-signature'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.spl>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/futuresplash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.class>
                        <Id.Right_DoubleQuote '"'>
                        <'        =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/octet-stream'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.ps>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/postscript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.torrent>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bittorrent'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.dvi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-dvi'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-gzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.pac>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-ns-proxy-autoconfig'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.swf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-shockwave-flash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'       =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tgz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.zip>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/zip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mp3>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.m3u>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-mpegurl'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wma>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wma'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wax>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wax'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.ogg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/ogg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wav>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-wav'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.gif>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/gif'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.jpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.jpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.png>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/png'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xbm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xbitmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xpm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xpixmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xwd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xwindowdump'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.css>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.html>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.htm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.js>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asc>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.c>
                        <Id.Right_DoubleQuote '"'>
                        <'            =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.cpp>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.log>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.conf>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.text>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.txt>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.dtd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xml>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mov>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.qt>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.avi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-msvideo'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asx>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wmv>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-wmv'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tbz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <'              =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <');\n'>
                        <'\n'>
                        <'my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = builder {\n'>
                        <'\t# to be able to override '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{__WARN__} to log build time warnings\n'>
                        <'\tuse CGI::Carp; # it sets '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{__WARN__} itself\n'>
                        <'\n'>
                        <'\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\topen my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh, \'>>\', '>
                        <Id.Right_DoubleQuote '"'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\t\tor die '>
                        <Id.Right_DoubleQuote '"'>
                        <'Couldn\'t open access log \''>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/access.log\': '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'!'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\topen my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh,  \'>>\', '>
                        <Id.Right_DoubleQuote '"'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\t\tor die '>
                        <Id.Right_DoubleQuote '"'>
                        <'Couldn\'t open error log \''>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/error.log\': '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'!'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh->autoflush(1);\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh->autoflush(1);\n'>
                        <'\n'>
                        <'\t# redirect build time warnings to error.log\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'__WARN__\'} = sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg = shift;\n'>
                        <'\t\t# timestamp warning like in CGI::Carp::warn\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'stamp = CGI::Carp::stamp();\n'>
                        <'\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg =~ s/^/'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'stamp/gm;\n'>
                        <'\t\tprint '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg;\n'>
                        <'\t};\n'>
                        <'\n'>
                        <'\t# write errors to error.log, access to access.log\n'>
                        <'\tenable \'AccessLog\',\n'>
                        <'\t\tformat => '>
                        <Id.Right_DoubleQuote '"'>
                        <combined>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t\tlogger => sub { print '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh @_; };\n'>
                        <'\tenable sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = shift;\n'>
                        <'\t\tsub {\n'>
                        <'\t\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env = shift;\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env->{\'psgi.errors\'} = '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh;\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app->('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env);\n'>
                        <'\t\t}\n'>
                        <'\t};\n'>
                        <'\t# gitweb currently doesn\'t work with '>
                        ($ Id.VSub_DollarName SIG)
                        <'{CHLD} set to \'IGNORE\',\n'>
                        <'\t# because it uses \'close '>
                        ($ Id.VSub_DollarName fd)
                        <' or die...\' on piped filehandle '>
                        ($ Id.VSub_DollarName fh)
                        <'\n'>
                        <'\t# (which causes the parent process to wait for child to finish).\n'>
                        <'\tenable_if { '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CHLD\'} eq \'IGNORE\' } sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = shift;\n'>
                        <'\t\tsub {\n'>
                        <'\t\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env = shift;\n'>
                        <'\t\t\tlocal '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CHLD\'} = \'DEFAULT\';\n'>
                        <'\t\t\tlocal '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CLD\'}  = \'DEFAULT\';\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app->('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env);\n'>
                        <'\t\t}\n'>
                        <'\t};\n'>
                        <'\t# serve static files, i.e. stylesheet, images, script\n'>
                        <'\tenable \'Static\',\n'>
                        <'\t\tpath => sub { m!'>
                        <Id.Lit_BadBackslash '\\'>
                        <'.(js|css|png)'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'! && s!^/gitweb/!! },\n'>
                        <'\t\troot => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <'/'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t\tencoding => \'utf-8\'; # encoding for \'text/plain\' files\n'>
                        <'\t# convert CGI application to PSGI app\n'>
                        <'\tPlack::App::WrapCGI->new(script => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <'/gitweb.cgi'>
                        <Id.Right_DoubleQuote '"'>
                        <')->to_app;\n'>
                        <'};\n'>
                        <'\n'>
                        <'# make it runnable as standalone app,\n'>
                        <'# like it would be run via \'plackup\' utility\n'>
                        <'if (caller) {\n'>
                        <'\treturn '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app;\n'>
                        <'} else {\n'>
                        <'\trequire Plack::Runner;\n'>
                        <'\n'>
                        <'\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner = Plack::Runner->new();\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner->parse_options(qw(--env deployment --port '>
                        ($ Id.VSub_DollarName port)
                        <'),\n'>
                        <'\t\t\t\t'>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName local)
                        <Id.Right_DoubleQuote '"'>
                        <' ? qw(--host 127.0.0.1) : ());\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner->run('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app);\n'>
                        <'}\n'>
                        <'__END__\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (C {<chmod>} {<a> <Id.Lit_Other '+'> <x>} 
              {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: gitweb_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 3293
                      stdin_parts: [
                        <'#!@@PERL@@\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projectroot = '>
                        <Id.Right_DoubleQuote '"'>
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: (C {<dirname>} {(DQ ($ Id.VSub_DollarName fqgitdir))})
                          right: <Id.Eof_RParen _>
                        )
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'git_temp = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/tmp'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projects_list = '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projectroot;\n'>
                        <'\n'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'feature{\'remote_heads\'}{\'default\'} = [1];\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: configure_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName httpd))}
              arms: [
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}]
                  action: [(C {<lighttpd_conf>})]
                  spids: [3313 3316 3322 -1]
                )
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                  ]
                  action: [(C {<apache2_conf>})]
                  spids: [3325 3332 3338 -1]
                )
                (case_arm
                  pat_list: [{<webrick>}]
                  action: [(C {<webrick_conf>})]
                  spids: [3341 3342 3348 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}]
                  action: [(C {<mongoose_conf>})]
                  spids: [3351 3354 3360 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}]
                  action: [(C {<plackup_conf>})]
                  spids: [3363 3366 3372 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<echo>} {(DQ <'Unknown httpd specified: '> ($ Id.VSub_DollarName httpd))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [3375 3376 3392 -1]
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName action))}
      arms: [
        (case_arm
          pat_list: [{<stop>}]
          action: [
            (C {<stop_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3408 3409 3420 -1]
        )
        (case_arm
          pat_list: [{<start>}]
          action: [
            (C {<start_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3422 3423 3434 -1]
        )
        (case_arm
          pat_list: [{<restart>}]
          action: [
            (C {<stop_httpd>})
            (C {<start_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3436 3437 3451 -1]
        )
      ]
      redirects: []
    )
    (C {<gitweb_conf>})
    (C {<resolve_full_httpd>})
    (C {<mkdir>} {<-p>} 
      {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only) <.conf>)
            }
          spids: [3471]
        )
      ]
      redirects: []
    )
    (C {<configure_httpd>})
    (C {<start_httpd>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'url='> name:url)
          op: assign_op.Equal
          rhs: 
            {<http> <Id.Lit_Colon ':'> <'//127.0.0.1'> <Id.Lit_Colon ':'> ($ Id.VSub_DollarName port)}
          spids: [3485]
        )
      ]
      redirects: []
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName browser))})
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<httpd_is_ready>})
                (C {<git>} {<web--browse>} {<-b>} {(DQ ($ Id.VSub_DollarName browser))} 
                  {($ Id.VSub_DollarName url)}
                )
                (C {<echo>} {($ Id.VSub_DollarName url)})
              ]
            )
          ]
          spids: [3493 3504]
        )
      ]
      else_action: [
        (command.AndOr
          ops: [Id.Op_DAmp Id.Op_DPipe]
          children: [
            (C {<httpd_is_ready>})
            (C {<git>} {<web--browse>} {<-c>} {(DQ <instaweb.browser>)} {($ Id.VSub_DollarName url)})
            (C {<echo>} {($ Id.VSub_DollarName url)})
          ]
        )
      ]
      redirects: []
    )
  ]
)