(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:PERL) op:Equal rhs:{(SQ <'@@PERL@@'>)} spids:[13])]
      spids: [13]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OPTIONS_KEEPDASHDASH) op:Equal rhs:{(SQ )} spids:[18])]
      spids: [18]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OPTIONS_STUCKLONG) op:Equal rhs:{(SQ )} spids:[20])]
      spids: [20]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OPTIONS_SPEC)
          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]
        )
      ]
      spids: [22]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:SUBDIRECTORY_OK) op:Equal rhs:{(Yes)} spids:[39])]
      spids: [39]
    )
    (C {(.)} {(git-sh-setup)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:fqgitdir)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$GIT_DIR'))}
          spids: [47]
        )
      ]
      spids: [47]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:local)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(git)} {(config)} {(--bool)} {(--get)} {(instaweb.local)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [54 64]
                )
              )
            }
          spids: [52]
        )
      ]
      spids: [52]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:httpd)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(git)} {(config)} {(--get)} {(instaweb.httpd)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [69 77]
                )
              )
            }
          spids: [67]
        )
      ]
      spids: [67]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:root)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(git)} {(config)} {(--get)} {(instaweb.gitwebdir)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [82 90]
                )
              )
            }
          spids: [80]
        )
      ]
      spids: [80]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:port)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(git)} {(config)} {(--get)} {(instaweb.port)})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [94 102]
              )
            }
          spids: [93]
        )
      ]
      spids: [93]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:module_path)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(git)} {(config)} {(--get)} {(instaweb.modulepath)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [106 114]
                )
              )
            }
          spids: [104]
        )
      ]
      spids: [104]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:action) op:Equal rhs:{(DQ (browse))} spids:[117])]
      spids: [117]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:conf)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$GIT_DIR') (/gitweb/httpd.conf))}
          spids: [123]
        )
      ]
      spids: [123]
    )
    (AndOr
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_Name '$httpd'))})
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:httpd)
              op: Equal
              rhs: {(SQ <'lighttpd -f'>)}
              spids: [147]
            )
          ]
          spids: [147]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_Name '$root'))})
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:root)
              op: Equal
              rhs: {(SQ <'@@GITWEBDIR@@'>)}
              spids: [166]
            )
          ]
          spids: [166]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_Name '$port'))})
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:port) op:Equal rhs:{(1234)} spids:[185])]
          spids: [185]
        )
      ]
      op_id: Op_DAmp
    )
    (FuncDef
      name: resolve_full_httpd
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {(DQ ($ VSub_Name '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [
                    {(Lit_Other '*') (apache2) (Lit_Other '*')}
                    {(Lit_Other '*') (lighttpd) (Lit_Other '*')}
                    {(Lit_Other '*') (httpd) (Lit_Other '*')}
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Pipeline
                              children: [
                                (C {(echo)} {(DQ ($ VSub_Name '$httpd'))})
                                (SimpleCommand
                                  words: [{(sane_grep)} {(--)} {(SQ <'-f *$'>)}]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                      spids: [248]
                                    )
                                    (Redir
                                      op_id: Redir_GreatAnd
                                      fd: 2
                                      arg_word: {(1)}
                                      spids: [251]
                                    )
                                  ]
                                )
                              ]
                              negated: True
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:httpd)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$httpd') (' -f'))}
                                  spids: [258]
                                )
                              ]
                              spids: [258]
                            )
                          ]
                          spids: [-1 255]
                        )
                      ]
                      spids: [-1 265]
                    )
                  ]
                  spids: [206 217 268 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (plackup) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:full_httpd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb.psgi))}
                          spids: [281]
                        )
                      ]
                      spids: [281]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:httpd_only)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name httpd>
                                  suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(' *')})
                                  spids: [290 294]
                                )
                              )
                            }
                          spids: [288]
                        )
                      ]
                      spids: [288]
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [271 274 304 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (webrick) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:full_httpd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/webrick.rb))}
                          spids: [321]
                        )
                      ]
                      spids: [321]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:httpd_only)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name httpd>
                                  suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(' *')})
                                  spids: [330 334]
                                )
                              )
                            }
                          spids: [328]
                        )
                      ]
                      spids: [328]
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [307 310 344 -1]
                )
              ]
              spids: [197 203 347]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:httpd_only)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {($ VSub_Name '$httpd')})
                                    (C {(cut)} {(-f1)} {(-d) (SQ <' '>)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [353 368]
                        )
                      )
                    }
                  spids: [351]
                )
              ]
              spids: [351]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Case
                      to_match: {(DQ ($ VSub_Name '$httpd_only'))}
                      arms: [
                        (case_arm
                          pat_list: [{(/) (Lit_Other '*')}]
                          action: [(C {(Lit_Other ':')})]
                          spids: [382 384 388 -1]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (SimpleCommand
                              words: [{(which)} {($ VSub_Name '$httpd_only')}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [397]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [400]
                                )
                              ]
                            )
                          ]
                          spids: [390 391 402 -1]
                        )
                      ]
                      spids: [374 380 404]
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:full_httpd)
                          op: Equal
                          rhs: {($ VSub_Name '$httpd')}
                          spids: [410]
                        )
                      ]
                      spids: [410]
                    )
                  ]
                  spids: [-1 407]
                )
              ]
              else_action: [
                (ForEach
                  iter_name: i
                  iter_words: [
                    {(/usr/local/sbin)}
                    {(/usr/sbin)}
                    {(DQ ($ VSub_Name '$root'))}
                    {(DQ ($ VSub_Name '$fqgitdir') (/gitweb))}
                  ]
                  do_arg_iter: False
                  body: 
                    (DoGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (C {(test)} {(-x)} 
                                  {(DQ ($ VSub_Name '$i') (/) ($ VSub_Name '$httpd_only'))}
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:full_httpd)
                                      op: Equal
                                      rhs: {($ VSub_Name '$i') (/) ($ VSub_Name '$httpd')}
                                      spids: [472]
                                    )
                                  ]
                                  spids: [472]
                                )
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                )
                              ]
                              spids: [-1 469]
                            )
                          ]
                          spids: [-1 481]
                        )
                      ]
                      spids: [453 484]
                    )
                  spids: [438 -1]
                )
                (SimpleCommand
                  words: [
                    {(echo)}
                    {
                      (DQ ($ VSub_Name '$httpd_only') (' not found. Install ') 
                        ($ VSub_Name '$httpd_only') (' or use')
                      )
                    }
                    {(DQ ('--httpd to specify another httpd daemon.'))}
                  ]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[490])]
                )
                (C {(exit)} {(1)})
              ]
              spids: [414 512]
            )
          ]
          spids: [194]
        )
      spids: [189 193]
    )
    (FuncDef
      name: start_httpd
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-f)} {(DQ ($ VSub_Name '$fqgitdir') (/pid))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(say)} {(DQ ('Instance already running. Restarting...'))})
                    (C {(stop_httpd)})
                  ]
                  spids: [-1 537]
                )
              ]
              spids: [-1 550]
            )
            (C {(resolve_full_httpd)})
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only'))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:conf)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') (.conf))}
                  spids: [572]
                )
              ]
              spids: [572]
            )
            (AndOr
              children: [(C {(test)} {(-f)} {(DQ ($ VSub_Name '$conf'))}) (C {(configure_httpd)})]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(test)} {(-f)} {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb_config.perl))})
                (C {(gitweb_conf)})
              ]
              op_id: Op_DPipe
            )
            (Case
              to_match: {(DQ ($ VSub_Name '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [
                    {(Lit_Other '*') (mongoose) (Lit_Other '*')}
                    {(Lit_Other '*') (plackup) (Lit_Other '*')}
                  ]
                  action: [
                    (Sentence
                      child: (C {($ VSub_Name '$full_httpd')} {(DQ ($ VSub_Name '$conf'))})
                      terminator: <Op_Amp '&'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:pid)
                          op: Equal
                          rhs: {($ VSub_Bang '$!')}
                          spids: [654]
                        )
                      ]
                      spids: [654]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(test)} {($ VSub_QMark '$?')} {(KW_Bang '!') (Lit_Other '=')} {(0)})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {(DQ ('Could not execute http daemon ') ($ VSub_Name '$httpd') (.))}
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [-1 671]
                        )
                      ]
                      spids: [-1 688]
                    )
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(DQ ($ VSub_Name '$fqgitdir') (/pid))}
                          spids: [694]
                        )
                        (HereDoc
                          op_id: Redir_DLess
                          fd: -1
                          body: {(DQ ($ VSub_Name '$pid') ('\n'))}
                          do_expansion: True
                          here_end: EOF
                          was_filled: True
                          spids: [701]
                        )
                      ]
                    )
                  ]
                  spids: [627 634 708 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {($ VSub_Name '$full_httpd')} {(DQ ($ VSub_Name '$conf'))})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(test)} {($ VSub_QMark '$?')} {(KW_Bang '!') (Lit_Other '=')} {(0)})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {(DQ ('Could not execute http daemon ') ($ VSub_Name '$httpd') (.))}
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [-1 734]
                        )
                      ]
                      spids: [-1 751]
                    )
                  ]
                  spids: [711 712 754 -1]
                )
              ]
              spids: [618 624 757]
            )
          ]
          spids: [522]
        )
      spids: [517 521]
    )
    (FuncDef
      name: stop_httpd
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(test)} {(-f)} {(DQ ($ VSub_Name '$fqgitdir') (/pid))})
                (C {(kill)} 
                  {
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [(C {(cat)} {(DQ ($ VSub_Name '$fqgitdir') (/pid))})]
                        )
                      left_token: <Left_CommandSub '$('>
                      spids: [783 790]
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
            (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$fqgitdir') (/pid))})
          ]
          spids: [767]
        )
      spids: [762 766]
    )
    (FuncDef
      name: httpd_is_ready
      body: 
        (BraceGroup
          children: [
            (C {(DQ ($ VSub_Name '$PERL'))} 
              {(-MIO) (Lit_Other ':') (Lit_Other ':') (Socket) (Lit_Other ':') (Lit_Other ':') (INET)} {(-e)} 
              {
                (DQ ('\n') ('local ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                  ('| = 1; # turn on autoflush\n') ("exit if (IO::Socket::INET->new('127.0.0.1:") ($ VSub_Name '$port') ("'));\n") ("print 'Waiting for ") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) ($ VSub_Name '$httpd') (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (" to start ..';\n") 
                  ('do {\n') ("\tprint '.';\n") ('\tsleep(1);\n') ("} until (IO::Socket::INET->new('127.0.0.1:") 
                  ($ VSub_Name '$port') ("'));\n") ('print qq! (done)') (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>) ('!;\n')
                )
              }
            )
          ]
          spids: [810]
        )
      spids: [805 809]
    )
    (While
      cond: [(C {(test)} {($ VSub_Pound '$#')} {(KW_Bang '!') (Lit_Other '=')} {(0)})]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(DQ ($ VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(--stop)} {(stop)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:action)
                          op: Equal
                          rhs: {(DQ (stop))}
                          spids: [883]
                        )
                      ]
                      spids: [883]
                    )
                  ]
                  spids: [877 880 889 -1]
                )
                (case_arm
                  pat_list: [{(--start)} {(start)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:action)
                          op: Equal
                          rhs: {(DQ (start))}
                          spids: [898]
                        )
                      ]
                      spids: [898]
                    )
                  ]
                  spids: [892 895 904 -1]
                )
                (case_arm
                  pat_list: [{(--restart)} {(restart)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:action)
                          op: Equal
                          rhs: {(DQ (restart))}
                          spids: [913]
                        )
                      ]
                      spids: [913]
                    )
                  ]
                  spids: [907 910 919 -1]
                )
                (case_arm
                  pat_list: [{(-l)} {(--local)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:local)
                          op: Equal
                          rhs: {(true)}
                          spids: [928]
                        )
                      ]
                      spids: [928]
                    )
                  ]
                  spids: [922 925 932 -1]
                )
                (case_arm
                  pat_list: [{(-d)} {(--httpd)}]
                  action: [
                    (C {(shift)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:httpd)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$1'))}
                          spids: [944]
                        )
                      ]
                      spids: [944]
                    )
                  ]
                  spids: [935 938 950 -1]
                )
                (case_arm
                  pat_list: [{(-b)} {(--browser)}]
                  action: [
                    (C {(shift)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:browser)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$1'))}
                          spids: [962]
                        )
                      ]
                      spids: [962]
                    )
                  ]
                  spids: [953 956 968 -1]
                )
                (case_arm
                  pat_list: [{(-p)} {(--port)}]
                  action: [
                    (C {(shift)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:port)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$1'))}
                          spids: [980]
                        )
                      ]
                      spids: [980]
                    )
                  ]
                  spids: [971 974 986 -1]
                )
                (case_arm
                  pat_list: [{(-m)} {(--module-path)}]
                  action: [
                    (C {(shift)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:module_path)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$1'))}
                          spids: [998]
                        )
                      ]
                      spids: [998]
                    )
                  ]
                  spids: [989 992 1004 -1]
                )
                (case_arm pat_list:[{(--)}] spids:[100710081011-1])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(usage)})]
                  spids: [1014 1015 1021 -1]
                )
              ]
              spids: [868 874 1024]
            )
            (C {(shift)})
          ]
          spids: [865 1029]
        )
    )
    (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$GIT_DIR') (/gitweb/tmp))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GIT_EXEC_PATH)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(git)} {(--exec-path)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [1043 1047]
                )
              )
            }
          spids: [1041]
        )
      ]
      spids: [1041]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GIT_DIR)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$fqgitdir'))}
          spids: [1050]
        )
      ]
      spids: [1050]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GITWEB_CONFIG)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb_config.perl))}
          spids: [1055]
        )
      ]
      spids: [1055]
    )
    (C {(export)} {(GIT_EXEC_PATH)} {(GIT_DIR)} {(GITWEB_CONFIG)})
    (FuncDef
      name: webrick_conf
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:wrapper)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd') (/wrapper.sh))}
                  spids: [1090]
                )
              ]
              spids: [1090]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$wrapper'))}
                  spids: [1101]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('#!@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=') ($ VSub_Name '$GIT_EXEC_PATH') (' GIT_DIR=') ($ VSub_Name '$GIT_DIR') 
                        (' GITWEB_CONFIG=') ($ VSub_Name '$GITWEB_CONFIG') ('\n') ('export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n') ('exec ') 
                        ($ VSub_Name '$root') ('/gitweb.cgi\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1107]
                )
              ]
            )
            (C {(chmod)} {(Lit_Other '+') (x)} {(DQ ($ VSub_Name '$wrapper'))})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd') (.rb))}
                  spids: [1152]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('#!/usr/bin/env ruby\n') ("require 'webrick'\n") ("require 'logger'\n") 
                        ('options = {\n') ('  :Port => ') ($ VSub_Name '$port') (',\n') ('  :DocumentRoot => ') (Right_DoubleQuote '"') 
                        ($ VSub_Name '$root') (Right_DoubleQuote '"') (',\n') ("  :Logger => Logger.new('") ($ VSub_Name '$fqgitdir') 
                        ("/gitweb/error.log'),\n") ('  :AccessLog => [\n') ("    [ Logger.new('") ($ VSub_Name '$fqgitdir') ("/gitweb/access.log'),\n") 
                        ('      WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n') ('  ],\n') ('  :DirectoryIndex => [') (Right_DoubleQuote '"') (gitweb.cgi) (Right_DoubleQuote '"') 
                        ('],\n') ('  :CGIInterpreter => ') (Right_DoubleQuote '"') ($ VSub_Name '$wrapper') (Right_DoubleQuote '"') 
                        (',\n') ('  :StartCallback => lambda do\n') ('    File.open(') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') 
                        (/pid) (Right_DoubleQuote '"') (', ') (Right_DoubleQuote '"') (w) (Right_DoubleQuote '"') 
                        (') { |f| f.puts Process.pid }\n') ('  end,\n') ('  :ServerType => WEBrick::Daemon,\n') ('}\n') ("options[:BindAddress] = '127.0.0.1' if ") 
                        (Right_DoubleQuote '"') ($ VSub_Name '$local') (Right_DoubleQuote '"') (' == ') (Right_DoubleQuote '"') (true) 
                        (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')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1160]
                )
              ]
            )
            (C {(chmod)} {(Lit_Other '+') (x)} 
              {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd') (.rb))}
            )
            (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$conf'))})
          ]
          spids: [1075]
        )
      spids: [1070 1074]
    )
    (FuncDef
      name: lighttpd_conf
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                  spids: [1262]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('server.document-root = ') (Right_DoubleQuote '"') ($ VSub_Name '$root') 
                        (Right_DoubleQuote '"') ('\n') ('server.port = ') ($ VSub_Name '$port') ('\n') ('server.modules = ( ') (Right_DoubleQuote '"') 
                        (mod_setenv) (Right_DoubleQuote '"') (', ') (Right_DoubleQuote '"') (mod_cgi) (Right_DoubleQuote '"') (' )\n') 
                        ('server.indexfiles = ( ') (Right_DoubleQuote '"') (gitweb.cgi) (Right_DoubleQuote '"') (' )\n') ('server.pid-file = ') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/pid) (Right_DoubleQuote '"') ('\n') ('server.errorlog = ') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') (/error.log) (Right_DoubleQuote '"') 
                        ('\n') ('\n') ('# to enable, add ') (Right_DoubleQuote '"') (mod_access) (Right_DoubleQuote '"') (', ') 
                        (Right_DoubleQuote '"') (mod_accesslog) (Right_DoubleQuote '"') (' to server.modules\n') 
                        ('# variable above and uncomment this\n') ('#accesslog.filename = ') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/gitweb/) 
                        ($ VSub_Name '$httpd_only') (/access.log) (Right_DoubleQuote '"') ('\n') ('\n') ('setenv.add-environment = ( ') 
                        (Right_DoubleQuote '"') (PATH) (Right_DoubleQuote '"') (' => env.PATH, ') (Right_DoubleQuote '"') (GITWEB_CONFIG) 
                        (Right_DoubleQuote '"') (' => env.GITWEB_CONFIG )\n') ('\n') ('cgi.assign = ( ') (Right_DoubleQuote '"') (.cgi) 
                        (Right_DoubleQuote '"') (' => ') (Right_DoubleQuote '"') (Right_DoubleQuote '"') (' )\n') ('\n') ('# mimetype mapping\n') 
                        ('mimetype.assign             = (\n') ('  ') (Right_DoubleQuote '"') (.pdf) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/pdf) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.sig) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/pgp-signature) (Right_DoubleQuote '"') 
                        (',\n') ('  ') (Right_DoubleQuote '"') (.spl) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/futuresplash) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.class) 
                        (Right_DoubleQuote '"') ('        =>      ') (Right_DoubleQuote '"') (application/octet-stream) (Right_DoubleQuote '"') (',\n') 
                        ('  ') (Right_DoubleQuote '"') (.ps) (Right_DoubleQuote '"') ('           =>      ') (Right_DoubleQuote '"') 
                        (application/postscript) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.torrent) (Right_DoubleQuote '"') 
                        ('      =>      ') (Right_DoubleQuote '"') (application/x-bittorrent) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.dvi) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-dvi) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.gz) (Right_DoubleQuote '"') ('           =>      ') 
                        (Right_DoubleQuote '"') (application/x-gzip) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.pac) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-ns-proxy-autoconfig) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.swf) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-shockwave-flash) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.tar.gz) 
                        (Right_DoubleQuote '"') ('       =>      ') (Right_DoubleQuote '"') (application/x-tgz) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.tgz) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-tgz) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.tar) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-tar) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.zip) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/zip) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.mp3) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/mpeg) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.m3u) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (audio/x-mpegurl) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.wma) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/x-ms-wma) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.wax) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/x-ms-wax) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.ogg) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/ogg) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.wav) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/x-wav) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.gif) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/gif) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.jpg) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (image/jpeg) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.jpeg) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (image/jpeg) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.png) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/png) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.xbm) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/x-xbitmap) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.xpm) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (image/x-xpixmap) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.xwd) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/x-xwindowdump) (Right_DoubleQuote '"') (',\n') 
                        ('  ') (Right_DoubleQuote '"') (.css) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') 
                        (text/css) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.html) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (text/html) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.htm) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/html) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.js) (Right_DoubleQuote '"') ('           =>      ') (Right_DoubleQuote '"') (text/javascript) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.asc) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.c) (Right_DoubleQuote '"') 
                        ('            =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.cpp) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.log) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.conf) (Right_DoubleQuote '"') ('         =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.text) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.txt) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.dtd) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/xml) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.xml) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (text/xml) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.mpeg) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (video/mpeg) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.mpg) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/mpeg) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.mov) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/quicktime) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.qt) (Right_DoubleQuote '"') ('           =>      ') 
                        (Right_DoubleQuote '"') (video/quicktime) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.avi) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-msvideo) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.asf) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-ms-asf) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.asx) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (video/x-ms-asf) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.wmv) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-ms-wmv) (Right_DoubleQuote '"') (',\n') ('  ') 
                        (Right_DoubleQuote '"') (.bz2) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-bzip) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (.tbz) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-bzip-compressed-tar) (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') 
                        (.tar.bz2) (Right_DoubleQuote '"') ('      =>      ') (Right_DoubleQuote '"') (application/x-bzip-compressed-tar) 
                        (Right_DoubleQuote '"') (',\n') ('  ') (Right_DoubleQuote '"') (Right_DoubleQuote '"') ('              =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') ('\n') (' )\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1268]
                )
              ]
            )
            (AndOr
              children: [
                (C {(test)} {(x) (DQ ($ VSub_Name '$local'))} {(Lit_Other '=')} {(xtrue)})
                (SimpleCommand
                  words: [{(echo)} {(SQ <'server.bind = "127.0.0.1"'>)}]
                  redirects: [
                    (Redir
                      op_id: Redir_DGreat
                      fd: -1
                      arg_word: {(DQ ($ VSub_Name '$conf'))}
                      spids: [1837]
                    )
                  ]
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [1257]
        )
      spids: [1252 1256]
    )
    (FuncDef
      name: apache2_conf
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$module_path'))})]
                  action: [
                    (AndOr
                      children: [
                        (C {(test)} {(-d)} {(DQ (/usr/lib/httpd/modules))})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:module_path)
                              op: Equal
                              rhs: {(DQ (/usr/lib/httpd/modules))}
                              spids: [1879]
                            )
                          ]
                          spids: [1879]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                    (AndOr
                      children: [
                        (C {(test)} {(-d)} {(DQ (/usr/lib/apache2/modules))})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:module_path)
                              op: Equal
                              rhs: {(DQ (/usr/lib/apache2/modules))}
                              spids: [1896]
                            )
                          ]
                          spids: [1896]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [-1 1865]
                )
              ]
              spids: [-1 1902]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:bind) op:Equal rhs:{(SQ )} spids:[1905])]
              spids: [1905]
            )
            (AndOr
              children: [
                (C {(test)} {(x) (DQ ($ VSub_Name '$local'))} {(Lit_Other '=')} {(xtrue)})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:bind)
                      op: Equal
                      rhs: {(SQ <'127.0.0.1:'>)}
                      spids: [1921]
                    )
                  ]
                  spids: [1921]
                )
              ]
              op_id: Op_DAmp
            )
            (SimpleCommand
              words: [{(echo)} {(SQ <'text/css css'>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$fqgitdir') (/mime.types))}
                  spids: [1933]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                  spids: [1943]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('ServerName ') (Right_DoubleQuote '"') (git-instaweb) (Right_DoubleQuote '"') 
                        ('\n') ('ServerRoot ') (Right_DoubleQuote '"') ($ VSub_Name '$root') (Right_DoubleQuote '"') ('\n') 
                        ('DocumentRoot ') (Right_DoubleQuote '"') ($ VSub_Name '$root') (Right_DoubleQuote '"') ('\n') ('ErrorLog ') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') (/error.log) (Right_DoubleQuote '"') 
                        ('\n') ('CustomLog ') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') 
                        (/access.log) (Right_DoubleQuote '"') (' combined\n') ('PidFile ') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') 
                        (/pid) (Right_DoubleQuote '"') ('\n') ('Listen ') ($ VSub_Name '$bind') ($ VSub_Name '$port') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1949]
                )
              ]
            )
            (ForEach
              iter_name: mod
              iter_words: [{(mpm_event)} {(mpm_prefork)} {(mpm_worker)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(-e)} 
                              {($ VSub_Name '$module_path') (/mod_) (${ VSub_Name mod) (.so)}
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {(DQ ('LoadModule ') (${ VSub_Name mod) ('_module '))}
                                {(DQ ($ VSub_Name '$module_path') (/mod_) (${ VSub_Name mod) (.so))}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                                  spids: [2050]
                                )
                              ]
                            )
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                          spids: [-1 2026]
                        )
                      ]
                      spids: [-1 2064]
                    )
                  ]
                  spids: [2009 2067]
                )
              spids: [2001 -1]
            )
            (ForEach
              iter_name: mod
              iter_words: [{(mime)} {(dir)} {(env)} {(log_config)} {(authz_core)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(-e)} 
                              {($ VSub_Name '$module_path') (/mod_) (${ VSub_Name mod) (.so)}
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {(DQ ('LoadModule ') (${ VSub_Name mod) ('_module '))}
                                {(DQ ($ VSub_Name '$module_path') (/mod_) (${ VSub_Name mod) (.so))}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                                  spids: [2128]
                                )
                              ]
                            )
                          ]
                          spids: [-1 2104]
                        )
                      ]
                      spids: [-1 2135]
                    )
                  ]
                  spids: [2087 2138]
                )
              spids: [2075 -1]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                  spids: [2143]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('TypesConfig ') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') 
                        (/mime.types) (Right_DoubleQuote '"') ('\n') ('DirectoryIndex gitweb.cgi\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [2149]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-f)} {(DQ ($ VSub_Name '$module_path') (/mod_perl.so))})
                        (SimpleCommand
                          words: [
                            {(sane_grep)}
                            {(SQ <MOD_PERL>)}
                            {(DQ ($ VSub_Name '$root') (/gitweb.cgi))}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [2195]
                            )
                          ]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {(DQ ($ VSub_Name '$conf'))}
                          spids: [2208]
                        )
                        (HereDoc
                          op_id: Redir_DLess
                          fd: -1
                          body: 
                            {
                              (DQ ('LoadModule perl_module ') ($ VSub_Name '$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')
                              )
                            }
                          do_expansion: True
                          here_end: EOF
                          was_filled: True
                          spids: [2214]
                        )
                      ]
                    )
                  ]
                  spids: [-1 2199]
                )
              ]
              else_action: [
                (C {(resolve_full_httpd)})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:list_mods)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (Pipeline
                                    children: [
                                      (C {(echo)} {(DQ ($ VSub_Name '$full_httpd'))})
                                      (C {(sed)} {(SQ <'s/-f$/-l/'>)})
                                    ]
                                    negated: False
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [2242 2256]
                          )
                        }
                      spids: [2241]
                    )
                  ]
                  spids: [2241]
                )
                (AndOr
                  children: [
                    (Pipeline
                      children: [
                        (C {($ VSub_Name '$list_mods')})
                        (SimpleCommand
                          words: [{(sane_grep)} {(SQ <'mod_cgi\\.c'>)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [2269]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [2272]
                            )
                          ]
                        )
                      ]
                      negated: False
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-f)} {(DQ ($ VSub_Name '$module_path') (/mod_cgi.so))})]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {
                                  (DQ ('LoadModule cgi_module ') ($ VSub_Name '$module_path') 
                                    (/mod_cgi.so)
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                                  spids: [2302]
                                )
                              ]
                            )
                          ]
                          spids: [-1 2291]
                        )
                      ]
                      else_action: [
                        (AndOr
                          children: [
                            (Pipeline
                              children: [
                                (C {($ VSub_Name '$list_mods')})
                                (SimpleCommand
                                  words: [{(grep)} {(SQ <'mod_cgid\\.c'>)}]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                      spids: [2322]
                                    )
                                    (Redir
                                      op_id: Redir_GreatAnd
                                      fd: 2
                                      arg_word: {(1)}
                                      spids: [2325]
                                    )
                                  ]
                                )
                              ]
                              negated: False
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {(test)} {(-f)} {(DQ ($ VSub_Name '$module_path') (/mod_cgid.so))})
                                  ]
                                  action: [
                                    (SimpleCommand
                                      words: [
                                        {(echo)}
                                        {
                                          (DQ ('LoadModule cgid_module ') ($ VSub_Name '$module_path') 
                                            (/mod_cgid.so)
                                          )
                                        }
                                      ]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_DGreat
                                          fd: -1
                                          arg_word: {(DQ ($ VSub_Name '$conf'))}
                                          spids: [2357]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [-1 2344]
                                )
                              ]
                              else_action: [
                                (C {(echo)} {(DQ ('You have no CGI support!'))})
                                (C {(exit)} {(2)})
                              ]
                              spids: [2364 2379]
                            )
                          ]
                          op_id: Op_DPipe
                        )
                        (SimpleCommand
                          words: [{(echo)} {(DQ ('ScriptSock logs/gitweb.sock'))}]
                          redirects: [
                            (Redir
                              op_id: Redir_DGreat
                              fd: -1
                              arg_word: {(DQ ($ VSub_Name '$conf'))}
                              spids: [2388]
                            )
                          ]
                        )
                      ]
                      spids: [2309 2395]
                    )
                  ]
                  op_id: Op_DPipe
                )
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (Redir
                      op_id: Redir_DGreat
                      fd: -1
                      arg_word: {(DQ ($ VSub_Name '$conf'))}
                      spids: [2400]
                    )
                    (HereDoc
                      op_id: Redir_DLess
                      fd: -1
                      body: 
                        {
                          (DQ ('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')
                          )
                        }
                      do_expansion: True
                      here_end: EOF
                      was_filled: True
                      spids: [2406]
                    )
                  ]
                )
              ]
              spids: [2231 2418]
            )
          ]
          spids: [1851]
        )
      spids: [1846 1850]
    )
    (FuncDef
      name: mongoose_conf
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$conf'))}
                  spids: [2432]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('# 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') ($ VSub_Name '$root') ('\n') ('ports\t\t') ($ VSub_Name '$port') ('\n') 
                        ('index_files\tgitweb.cgi\n') ('#ssl_cert\t') ($ VSub_Name '$fqgitdir') ('/gitweb/ssl_cert.pem\n') ('error_log\t') 
                        ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') ('/error.log\n') ('access_log\t') ($ VSub_Name '$fqgitdir') 
                        (/gitweb/) ($ VSub_Name '$httpd_only') ('/access.log\n') ('\n') ('#cgi setup\n') ('cgi_env\t\tPATH=') 
                        ($ VSub_Name '$PATH') (',GIT_DIR=') ($ VSub_Name '$GIT_DIR') (',GIT_EXEC_PATH=') ($ VSub_Name '$GIT_EXEC_PATH') 
                        (',GITWEB_CONFIG=') ($ VSub_Name '$GITWEB_CONFIG') ('\n') ('cgi_interp\t') ($ VSub_Name '$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'
                        )
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [2438]
                )
              ]
            )
          ]
          spids: [2427]
        )
      spids: [2423 2426]
    )
    (FuncDef
      name: plackup_conf
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb.psgi))}
                  spids: [2506]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('#!') ($ VSub_Name '$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') 
                        (Right_DoubleQuote '"') (.pdf) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/pdf) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.sig) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/pgp-signature) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.spl) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/futuresplash) (Right_DoubleQuote '"') (',\n') 
                        ('\t') (Right_DoubleQuote '"') (.class) (Right_DoubleQuote '"') ('        =>      ') (Right_DoubleQuote '"') 
                        (application/octet-stream) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.ps) (Right_DoubleQuote '"') 
                        ('           =>      ') (Right_DoubleQuote '"') (application/postscript) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.torrent) (Right_DoubleQuote '"') ('      =>      ') (Right_DoubleQuote '"') (application/x-bittorrent) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.dvi) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-dvi) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.gz) 
                        (Right_DoubleQuote '"') ('           =>      ') (Right_DoubleQuote '"') (application/x-gzip) (Right_DoubleQuote '"') (',\n') 
                        ('\t') (Right_DoubleQuote '"') (.pac) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') 
                        (application/x-ns-proxy-autoconfig) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.swf) (Right_DoubleQuote '"') 
                        ('          =>      ') (Right_DoubleQuote '"') (application/x-shockwave-flash) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.tar.gz) (Right_DoubleQuote '"') ('       =>      ') (Right_DoubleQuote '"') (application/x-tgz) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.tgz) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-tgz) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.tar) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-tar) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.zip) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/zip) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.mp3) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (audio/mpeg) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.m3u) (Right_DoubleQuote '"') 
                        ('          =>      ') (Right_DoubleQuote '"') (audio/x-mpegurl) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') 
                        (.wma) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/x-ms-wma) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.wax) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (audio/x-ms-wax) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.ogg) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/ogg) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.wav) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (audio/x-wav) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.gif) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (image/gif) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.jpg) (Right_DoubleQuote '"') 
                        ('          =>      ') (Right_DoubleQuote '"') (image/jpeg) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.jpeg) 
                        (Right_DoubleQuote '"') ('         =>      ') (Right_DoubleQuote '"') (image/jpeg) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.png) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/png) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.xbm) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (image/x-xbitmap) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.xpm) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/x-xpixmap) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.xwd) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (image/x-xwindowdump) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.css) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (text/css) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.html) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (text/html) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.htm) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/html) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.js) (Right_DoubleQuote '"') ('           =>      ') (Right_DoubleQuote '"') (text/javascript) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.asc) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.c) (Right_DoubleQuote '"') 
                        ('            =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.cpp) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.log) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.conf) (Right_DoubleQuote '"') ('         =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.text) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.txt) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.dtd) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (text/xml) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.xml) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (text/xml) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.mpeg) (Right_DoubleQuote '"') 
                        ('         =>      ') (Right_DoubleQuote '"') (video/mpeg) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.mpg) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/mpeg) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.mov) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/quicktime) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.qt) (Right_DoubleQuote '"') ('           =>      ') 
                        (Right_DoubleQuote '"') (video/quicktime) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.avi) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-msvideo) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.asf) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-ms-asf) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.asx) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (video/x-ms-asf) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.wmv) 
                        (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (video/x-ms-wmv) (Right_DoubleQuote '"') (',\n') ('\t') 
                        (Right_DoubleQuote '"') (.bz2) (Right_DoubleQuote '"') ('          =>      ') (Right_DoubleQuote '"') (application/x-bzip) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (.tbz) (Right_DoubleQuote '"') ('          =>      ') 
                        (Right_DoubleQuote '"') (application/x-bzip-compressed-tar) (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') 
                        (.tar.bz2) (Right_DoubleQuote '"') ('      =>      ') (Right_DoubleQuote '"') (application/x-bzip-compressed-tar) 
                        (Right_DoubleQuote '"') (',\n') ('\t') (Right_DoubleQuote '"') (Right_DoubleQuote '"') ('              =>      ') 
                        (Right_DoubleQuote '"') (text/plain) (Right_DoubleQuote '"') ('\n') (');\n') ('\n') ('my ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app = builder {\n') ('\t# to be able to override ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('SIG{__WARN__} to log build time warnings\n') ('\tuse CGI::Carp; # it sets ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('SIG{__WARN__} itself\n') ('\n') ('\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('logdir = ') (Right_DoubleQuote '"') 
                        ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') (Right_DoubleQuote '"') (';\n') ('\topen my ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("access_log_fh, '>>', ") (Right_DoubleQuote '"') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        (logdir/access.log) (Right_DoubleQuote '"') ('\n') ('\t\tor die ') (Right_DoubleQuote '"') ("Couldn't open access log '") 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("logdir/access.log': ") (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('!') 
                        (Right_DoubleQuote '"') (';\n') ('\topen my ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("error_log_fh,  '>>', ") 
                        (Right_DoubleQuote '"') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (logdir/error.log) (Right_DoubleQuote '"') ('\n') 
                        ('\t\tor die ') (Right_DoubleQuote '"') ("Couldn't open error log '") (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ("logdir/error.log': ") (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('!') (Right_DoubleQuote '"') (';\n') ('\n') ('\t') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('access_log_fh->autoflush(1);\n') ('\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('error_log_fh->autoflush(1);\n') ('\n') ('\t# redirect build time warnings to error.log\n') ('\t') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("SIG{'__WARN__'} = sub {\n") ('\t\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('msg = shift;\n') ('\t\t# timestamp warning like in CGI::Carp::warn\n') ('\t\tmy ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('stamp = CGI::Carp::stamp();\n') ('\t\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('msg =~ s/^/') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('stamp/gm;\n') ('\t\tprint ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('error_log_fh ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('msg;\n') ('\t};\n') ('\n') 
                        ('\t# write errors to error.log, access to access.log\n') ("\tenable 'AccessLog',\n") ('\t\tformat => ') (Right_DoubleQuote '"') (combined) (Right_DoubleQuote '"') 
                        (',\n') ('\t\tlogger => sub { print ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('access_log_fh @_; };\n') ('\tenable sub {\n') ('\t\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app = shift;\n') 
                        ('\t\tsub {\n') ('\t\t\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('env = shift;\n') ('\t\t\t') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("env->{'psgi.errors'} = ") (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('error_log_fh;\n') 
                        ('\t\t\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app->(') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('env);\n') ('\t\t}\n') ('\t};\n') ("\t# gitweb currently doesn't work with ") ($ VSub_Name '$SIG') 
                        ("{CHLD} set to 'IGNORE',\n") ("\t# because it uses 'close ") ($ VSub_Name '$fd') (" or die...' on piped filehandle ") 
                        ($ VSub_Name '$fh') ('\n') ('\t# (which causes the parent process to wait for child to finish).\n') ('\tenable_if { ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("SIG{'CHLD'} eq 'IGNORE' } sub {\n") ('\t\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('app = shift;\n') ('\t\tsub {\n') ('\t\t\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('env = shift;\n') 
                        ('\t\t\tlocal ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("SIG{'CHLD'} = 'DEFAULT';\n") ('\t\t\tlocal ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("SIG{'CLD'}  = 'DEFAULT';\n") ('\t\t\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app->(') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('env);\n') ('\t\t}\n') ('\t};\n') ('\t# serve static files, i.e. stylesheet, images, script\n') 
                        ("\tenable 'Static',\n") ('\t\tpath => sub { m!') (EscapedLiteralPart token:<Lit_EscapedChar '\\.'>) ('(js|css|png)') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('! && s!^/gitweb/!! },\n') ('\t\troot => ') (Right_DoubleQuote '"') ($ VSub_Name '$root') (/) 
                        (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 => ') (Right_DoubleQuote '"') ($ VSub_Name '$root') (/gitweb.cgi) 
                        (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 ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app;\n') 
                        ('} else {\n') ('\trequire Plack::Runner;\n') ('\n') ('\tmy ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('runner = Plack::Runner->new();\n') ('\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('runner->parse_options(qw(--env deployment --port ') ($ VSub_Name '$port') ('),\n') ('\t\t\t\t') (Right_DoubleQuote '"') ($ VSub_Name '$local') 
                        (Right_DoubleQuote '"') (' ? qw(--host 127.0.0.1) : ());\n') ('\t') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('runner->run(') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('app);\n') ('}\n') ('__END__\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [2513]
                )
              ]
            )
            (C {(chmod)} {(a) (Lit_Other '+') (x)} {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb.psgi))})
            (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$conf'))})
          ]
          spids: [2493]
        )
      spids: [2488 2492]
    )
    (FuncDef
      name: gitweb_conf
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/gitweb_config.perl))}
                  spids: [3239]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('#!@@PERL@@\n') ('our ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('projectroot = ') (Right_DoubleQuote '"') 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {(DQ ($ VSub_Name '$fqgitdir'))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [3254 3260]
                        ) (Right_DoubleQuote '"') (';\n') ('our ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                        ('git_temp = ') (Right_DoubleQuote '"') ($ VSub_Name '$fqgitdir') (/gitweb/tmp) (Right_DoubleQuote '"') (';\n') ('our ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('projects_list = ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('projectroot;\n') ('\n') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ("feature{'remote_heads'}{'default'} = [1];\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3246]
                )
              ]
            )
          ]
          spids: [3234]
        )
      spids: [3230 3233]
    )
    (FuncDef
      name: configure_httpd
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {(DQ ($ VSub_Name '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (lighttpd) (Lit_Other '*')}]
                  action: [(C {(lighttpd_conf)})]
                  spids: [3299 3302 3308 -1]
                )
                (case_arm
                  pat_list: [
                    {(Lit_Other '*') (apache2) (Lit_Other '*')}
                    {(Lit_Other '*') (httpd) (Lit_Other '*')}
                  ]
                  action: [(C {(apache2_conf)})]
                  spids: [3311 3318 3324 -1]
                )
                (case_arm
                  pat_list: [{(webrick)}]
                  action: [(C {(webrick_conf)})]
                  spids: [3327 3328 3334 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (mongoose) (Lit_Other '*')}]
                  action: [(C {(mongoose_conf)})]
                  spids: [3337 3340 3346 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (plackup) (Lit_Other '*')}]
                  action: [(C {(plackup_conf)})]
                  spids: [3349 3352 3358 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(echo)} {(DQ ('Unknown httpd specified: ') ($ VSub_Name '$httpd'))})
                    (C {(exit)} {(1)})
                  ]
                  spids: [3361 3362 3378 -1]
                )
              ]
              spids: [3290 3296 3381]
            )
          ]
          spids: [3287]
        )
      spids: [3283 3286]
    )
    (Case
      to_match: {(DQ ($ VSub_Name '$action'))}
      arms: [
        (case_arm
          pat_list: [{(stop)}]
          action: [(C {(stop_httpd)}) (C {(exit)} {(0)})]
          spids: [3394 3395 3406 -1]
        )
        (case_arm
          pat_list: [{(start)}]
          action: [(C {(start_httpd)}) (C {(exit)} {(0)})]
          spids: [3408 3409 3420 -1]
        )
        (case_arm
          pat_list: [{(restart)}]
          action: [(C {(stop_httpd)}) (C {(start_httpd)}) (C {(exit)} {(0)})]
          spids: [3422 3423 3437 -1]
        )
      ]
      spids: [3386 3392 3439]
    )
    (C {(gitweb_conf)})
    (C {(resolve_full_httpd)})
    (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only'))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:conf)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$fqgitdir') (/gitweb/) ($ VSub_Name '$httpd_only') (.conf))}
          spids: [3457]
        )
      ]
      spids: [3457]
    )
    (C {(configure_httpd)})
    (C {(start_httpd)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:url)
          op: Equal
          rhs: {(http) (Lit_Other ':') (//127.0.0.1) (Lit_Other ':') ($ VSub_Name '$port')}
          spids: [3471]
        )
      ]
      spids: [3471]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-n)} {(DQ ($ VSub_Name '$browser'))})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (AndOr
              children: [
                (C {(httpd_is_ready)})
                (AndOr
                  children: [
                    (C {(git)} {(web--browse)} {(-b)} {(DQ ($ VSub_Name '$browser'))} 
                      {($ VSub_Name '$url')}
                    )
                    (C {(echo)} {($ VSub_Name '$url')})
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [-1 3490]
        )
      ]
      else_action: [
        (AndOr
          children: [
            (C {(httpd_is_ready)})
            (AndOr
              children: [
                (C {(git)} {(web--browse)} {(-c)} {(DQ (instaweb.browser))} {($ VSub_Name '$url')})
                (C {(echo)} {($ VSub_Name '$url')})
              ]
              op_id: Op_DPipe
            )
          ]
          op_id: Op_DAmp
        )
      ]
      spids: [3515 3540]
    )
  ]
)