(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PATH='> name:PATH)
          op: assign_op.Equal
          rhs: {<'/bin'>}
          spids: [98]
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name: analyze
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              to_match: 
                {
                  (DQ 
                    (command_sub
                      left_token: <Id.Left_Backtick '`'>
                      child: (C {<ls>} {<-Lldn>} {($ Id.VSub_Number 1)})
                      right: <Id.Backtick_Right '`'>
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [
                    {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> 
                      <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_Star '*'>
                    }
                  ]
                  action: [
                    (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} 
                      {<group>} {<and>} {<world>} {<writable>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [163]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [130 141 166 -1]
                )
                (case_arm
                  pat_list: [
                    {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> 
                      <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_Star '*'>
                    }
                  ]
                  action: [
                    (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} 
                      {<world>} {<writable>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [198]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [169 180 201 -1]
                )
                (case_arm
                  pat_list: [
                    {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> 
                      <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_Star '*'>
                    }
                  ]
                  action: [
                    (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} 
                      {<group>} {<writable>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [233]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [204 215 236 -1]
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: break_down
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ForEach
              iter_names: [j]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<echo>} {($ Id.VSub_Number 1)})
                              (C {<awk>} 
                                {
                                  (SQ <'{\n'> <'\t\t\tn = split($0, parts, "/");\n'> 
                                    <'\t\t\tfor (i = n; i >= 2; i--){\n'> <'\t\t\t\tstring = "";\n'> <'\t\t\t\tfor (j = 2; j <= i; j++){\n'> 
                                    <'\t\t\t\t\tstring = sprintf("%s/%s", string, parts[j]);\n'> <'\t\t\t\t}\n'> <'\t\t\t\tprint string\n'> <'\t\t\t}\n'> <'\t\t}'>
                                  )
                                }
                              )
                            ]
                            negated: F
                            stderr_indices: []
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                    {(DQ <'/'>)}
                  ]
                )
              body: 
                (command.DoGroup
                  children: [(C {<analyze>} {($ Id.VSub_DollarName j)} {($ Id.VSub_Number 1)})]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'config='> name:config)
          op: assign_op.Equal
          rhs: {<'/etc/mail/sendmail.cf'>}
          spids: [338]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs)
          op: assign_op.Equal
          rhs: {<false>}
          spids: [341]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'afl1='> name:afl1)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<grep>} {(DQ <'^OA'>)} {($ Id.VSub_DollarName config)})
                      (C {<sed>} {(SQ <'s/^OA//'>)})
                      (C {<sed>} {(SQ <'s/,/ /g'>)})
                      (C {<sed>} {(SQ <'s/.*://'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [345]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'afl2='> name:afl2)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<grep>} {(DQ <'^O AliasFile='>)} {($ Id.VSub_DollarName config)})
                      (C {<sed>} {(SQ <'s/^O AliasFile=//'>)})
                      (C {<sed>} {(SQ <'s/,/ /g'>)})
                      (C {<sed>} {(SQ <'s/.*://'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [382]
        )
      ]
      redirects: []
    )
    (C {<break_down>} {($ Id.VSub_DollarName afl1)} {($ Id.VSub_DollarName afl2)})
    (command.ForEach
      iter_names: [i]
      iterable: 
        (for_iter.Words
          words: [
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<sed>} {(SQ <'s/^[#].*$//'>)} {($ Id.VSub_DollarName afl1)} 
                        {($ Id.VSub_DollarName afl2)}
                      )
                      (C {<grep>} {<Id.Lit_Colon ':'> <include> <Id.Lit_Colon ':'>})
                      (C {<sed>} {(SQ <'s/.*:include://'>)})
                      (C {<sed>} {(SQ <'s/,.*$//'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
          ]
        )
      body: (command.DoGroup children:[(C {<break_down>} {($ Id.VSub_DollarName i)})])
      redirects: []
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-eq>} {<0>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<id>})
                              (C {<nawk>} {<-F> (SQ <'('>)} 
                                {(SQ <'{n = split($2,id,")"); print id[1]}'>)}
                              )
                            ]
                            negated: F
                            stderr_indices: []
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [542]
                )
              ]
              redirects: []
            )
          ]
          spids: [525 539]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Number 1)} {<Id.Lit_Equals '='>} {(DQ <ALL>)} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [581]
                )
              ]
              redirects: []
            )
          ]
          spids: [562 578]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_Star '*'))}
              spids: [588]
            )
          ]
          redirects: []
        )
      ]
      redirects: []
    )
    (command.ForEach
      iter_names: [i]
      iterable: 
        (for_iter.Words
          words: [
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<getent>} {<passwd>} {($ Id.VSub_DollarName arg)})
                      (C {<nawk>} {<-F> <Id.Lit_Colon ':'>} {(SQ <'{print $6}'>)})
                    ]
                    negated: F
                    stderr_indices: []
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName i) <'/.forward'>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<break_down>} {($ Id.VSub_DollarName i) <'/.forward'>})]
                  spids: [626 639]
                )
              ]
              else_action: []
              redirects: []
            )
          ]
        )
      redirects: []
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {($ Id.VSub_DollarName bogus_dirs)})
        (C {<echo>} {(DQ <'No unsafe directories found.'>)})
      ]
    )
  ]
)