(command.CommandList
  children: [
    (command.ShFunction
      name: get
      body: (BraceGroup children:[(C {<route>} {(DQ <GET>)} {($ Id.VSub_At '$@')})])
    )
    (command.ShFunction
      name: post
      body: (BraceGroup children:[(C {<route>} {(DQ <POST>)} {($ Id.VSub_At '$@')})])
    )
    (command.ShFunction
      name: delete
      body: (BraceGroup children:[(C {<route>} {(DQ <DELETE>)} {($ Id.VSub_At '$@')})])
    )
    (command.ShFunction
      name: status
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:martin_response_status)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [66]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: header
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:martin_response_headers)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$martin_response_headers') ($ Id.VSub_Number '$1') 
                        <': '> ($ Id.VSub_Number '$2') ($ Id.VSub_DollarName '$LF')
                      )
                    }
                  spids: [82]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: not_found
      body: 
        (BraceGroup
          children: [
            (C {<status>} {(DQ <404>)})
            (C {<header>} {(DQ <Content-type>)} {(DQ <'text/plain'>)})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<echo>} {(DQ ($ Id.VSub_At '$@'))})]
                  spids: [120 133]
                )
              ]
              else_action: [(C {<echo>} {(DQ <'Not Found: '> ($ Id.VSub_DollarName '$PATH_INFO'))})]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LF)
          op: assign_op.Equal
          rhs: 
            {
              (single_quoted
                left: <Id.Left_CSingleQuote '$\''>
                tokens: [<Id.Char_OneChar '\\n'>]
                multiline: F
              )
            }
          spids: [159]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:martin_routes)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [168]
        )
      ]
    )
    (command.ShFunction
      name: route
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:martin_routes)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$martin_routes') ($ Id.VSub_Number '$1') <','> 
                        ($ Id.VSub_Number '$2') <','> ($ Id.VSub_Number '$3') ($ Id.VSub_DollarName '$LF')
                      )
                    }
                  spids: [181]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: martin_find_route
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<echo>} {(DQ ($ Id.VSub_DollarName '$martin_routes'))})
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<read>} {<-r>} {<method>} {<path>} {<action>}]
                              more_env: [(env_pair name:IFS val:{(DQ <','>)} spids:[213])]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DAmp]
                                          children: [
                                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} 
                                              {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$method'))} {<Id.Lit_RBracket ']'>}
                                            )
                                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$2'))} 
                                              {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$path'))} {<Id.Lit_RBracket ']'>}
                                            )
                                          ]
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              action: [
                                (C {<echo>} {($ Id.VSub_DollarName '$action')})
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Return return>
                                )
                              ]
                              spids: [232 265]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:martin_response_headers)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [284]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:martin_response_status)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [288]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:martin_response_file)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TMPDIR') <'/martin_response'> ($ Id.VSub_Dollar '$$'))}
          spids: [292]
        )
      ]
    )
    (command.ShFunction
      name: martin_reset_response
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:martin_response_status)
                  op: assign_op.Equal
                  rhs: {(DQ <'200 OK'>)}
                  spids: [308]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:martin_response_headers)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [314]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: martin_dispatch
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'action='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (C {<martin_find_route>} {(DQ ($ Id.VSub_DollarName '$REQUEST_METHOD'))} 
                        {(DQ ($ Id.VSub_DollarName '$PATH_INFO'))}
                      )
                  )
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {(DQ ($ Id.VSub_DollarName '$action'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:action)
                      op: assign_op.Equal
                      rhs: {(DQ <not_found>)}
                      spids: [360]
                    )
                  ]
                )
              ]
            )
            (C {<martin_reset_response>})
            (command.Simple
              words: [{(DQ ($ Id.VSub_DollarName '$action'))}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName '$martin_response_file'))}
                )
              ]
              do_fork: T
            )
            (C {<header>} {(DQ <Status>)} {(DQ ($ Id.VSub_DollarName '$martin_response_status'))})
            (C {<header>} {(DQ <Content-Length>)} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Pipeline
                        children: [
                          (C {<wc>} {<-c>} {(DQ ($ Id.VSub_DollarName '$martin_response_file'))})
                          (C {<awk>} {(SQ <'{ print $1 }'>)})
                        ]
                        negated: F
                      )
                  )
                )
              }
            )
            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$martin_response_headers'))})
            (C {<cat>} {(DQ ($ Id.VSub_DollarName '$martin_response_file'))})
          ]
        )
    )
    (command.ShFunction
      name: martin
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$REQUEST_METHOD')} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<martin_dispatch>})]
                  spids: [458 467]
                )
              ]
              else_action: [
                (C {<.>} {<'./wwwoosh.sh'>})
                (C {<wwwoosh>} {<martin_dispatch>} {($ Id.VSub_DollarName '$PORT')})
              ]
            )
          ]
        )
    )
  ]
)