(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:min_slab_name_size) op:Equal rhs:{(11)} spids:[82])]
      spids: [82]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:xmin) op:Equal rhs:{(0)} spids:[85])]
      spids: [85]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:xmax) op:Equal rhs:{(0)} spids:[88])]
      spids: [88]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:width) op:Equal rhs:{(1500)} spids:[91])]
      spids: [91]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:height) op:Equal rhs:{(700)} spids:[94])]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:mode) op:Equal rhs:{(preprocess)} spids:[97])]
      spids: [97]
    )
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ('Usage: [-s W,H] [-r MIN,MAX] [-t|-l] FILE1 [FILE2 ..]'))})
            (C {(echo)} {(DQ ("FILEs must contain 'slabinfo -X' samples"))})
            (C {(echo)} {(DQ ('-t \t\t\t- plot totals for FILE(s)'))})
            (C {(echo)} {(DQ ('-l \t\t\t- plot slabs stats for FILE(s)'))})
            (C {(echo)} {(DQ ('-s %d,%d\t\t- set image width and height'))})
            (C {(echo)} {(DQ ('-r %d,%d\t\t- use data samples from a given range'))})
          ]
          spids: [105]
        )
      spids: [101 104]
    )
    (FuncDef
      name: check_file_exist
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-f)} {(DQ ($ VSub_Number '$1'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("File '") ($ VSub_Number '$1') ("' does not exist"))})
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [16777215 174]
                )
              ]
              spids: [16777215 191]
            )
          ]
          spids: [156]
        )
      spids: [152 155]
    )
    (FuncDef
      name: do_slabs_plotting
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [205]
                )
              ]
              spids: [203]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:out_file) op:Equal spids:[211])]
              spids: [209]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:range)
                  op: Equal
                  rhs: {(DQ ('every ::') ($ VSub_Name '$xmin'))}
                  spids: [216]
                )
              ]
              spids: [214]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:xtic) op:Equal rhs:{(DQ )} spids:[225])]
              spids: [223]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:xtic_rotate)
                  op: Equal
                  rhs: {(DQ (norotate))}
                  spids: [232]
                )
              ]
              spids: [230]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:lines) op:Equal rhs:{(2000000)} spids:[240])]
              spids: [238]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:wc_lines) op:Equal spids:[246])]
              spids: [244]
            )
            (C {(check_file_exist)} {(DQ ($ VSub_Name '$file'))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_file)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name '$file'))})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [259 265]
                      )
                    }
                  spids: [258]
                )
              ]
              spids: [258]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$xmax')} {(-ne)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:range)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$range') ('::') ($ VSub_Name '$xmax'))}
                          spids: [284]
                        )
                      ]
                      spids: [284]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:lines)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithVarRef name:xmax)
                                    right: (ArithVarRef name:xmin)
                                  )
                                spids: [293 298]
                              )
                            }
                          spids: [292]
                        )
                      ]
                      spids: [292]
                    )
                  ]
                  spids: [16777215 281]
                )
              ]
              spids: [16777215 301]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:wc_lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [(C {(cat)} {(DQ ($ VSub_Name '$file'))}) (C {(wc)} {(-l)})]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [306 318]
                      )
                    }
                  spids: [305]
                )
              ]
              spids: [305]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          ops: [Op_DPipe]
                          children: [
                            (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-ne)} {(0)} {(Lit_Other ']')})
                            (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$wc_lines'))} {(-eq)} {(0)} 
                              {(Lit_Other ']')}
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:wc_lines)
                          op: Equal
                          rhs: {($ VSub_Name '$lines')}
                          spids: [352]
                        )
                      ]
                      spids: [352]
                    )
                  ]
                  spids: [16777215 349]
                )
              ]
              spids: [16777215 356]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$wc_lines'))} {(-lt)} 
                          {(DQ ($ VSub_Name '$lines'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:lines)
                          op: Equal
                          rhs: {($ VSub_Name '$wc_lines')}
                          spids: [380]
                        )
                      ]
                      spids: [380]
                    )
                  ]
                  spids: [16777215 377]
                )
              ]
              spids: [16777215 384]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (ArithSubPart
                              anode: 
                                (ArithBinary
                                  op_id: Arith_Slash
                                  left: (ArithVarRef name:width)
                                  right: (ArithVarRef name:lines)
                                )
                              spids: [392 399]
                            )
                          } {(-gt)} {($ VSub_Name '$min_slab_name_size')} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:xtic)
                          op: Equal
                          rhs: {(DQ (':xtic(1)'))}
                          spids: [411]
                        )
                      ]
                      spids: [411]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:xtic_rotate)
                          op: Equal
                          rhs: {(90)}
                          spids: [417]
                        )
                      ]
                      spids: [417]
                    )
                  ]
                  spids: [16777215 408]
                )
              ]
              spids: [16777215 421]
            )
            (SimpleCommand
              words: [{(gnuplot)} {(-p)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 466
                  stdin_parts: [
                    ('#!/usr/bin/env gnuplot\n')
                    ('\n')
                    ('set terminal png enhanced size ')
                    ($ VSub_Name '$width')
                    (',')
                    ($ VSub_Name '$height')
                    (' large\n')
                    ("set output '")
                    ($ VSub_Name '$out_file')
                    (".png'\n")
                    ('set autoscale xy\n')
                    ("set xlabel 'samples'\n")
                    ("set ylabel 'bytes'\n")
                    ('set style histogram columnstacked title textcolor lt -1\n')
                    ('set style fill solid 0.15\n')
                    ('set xtics rotate ')
                    ($ VSub_Name '$xtic_rotate')
                    ('\n')
                    ('set key left above Left title reverse\n')
                    ('\n')
                    ('plot ')
                    (Right_DoubleQuote '"')
                    ($ VSub_Name '$file')
                    (Right_DoubleQuote '"')
                    (' ')
                    ($ VSub_Name '$range')
                    (' u 2')
                    ($ VSub_Name '$xtic')
                    (" title 'SIZE' with boxes,")
                    ("\t'' ")
                    ($ VSub_Name '$range')
                    (" u 3 title 'LOSS' with boxes\n")
                  ]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ ($ VSub_Name '$out_file') (.png))})]
                  spids: [16777215 482]
                )
              ]
              spids: [16777215 493]
            )
          ]
          spids: [200]
        )
      spids: [196 199]
    )
    (FuncDef
      name: do_totals_plotting
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:gnuplot_cmd) op:Equal rhs:{(DQ )} spids:[507])]
              spids: [505]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:range)
                  op: Equal
                  rhs: {(DQ ('every ::') ($ VSub_Name '$xmin'))}
                  spids: [514]
                )
              ]
              spids: [512]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:file) op:Equal rhs:{(DQ )} spids:[523])]
              spids: [521]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$xmax')} {(-ne)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:range)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$range') ('::') ($ VSub_Name '$xmax'))}
                          spids: [545]
                        )
                      ]
                      spids: [545]
                    )
                  ]
                  spids: [16777215 542]
                )
              ]
              spids: [16777215 553]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name t_files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [564 569]
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(check_file_exist)} {(DQ ($ VSub_Name '$i'))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:file)
                          op: Equal
                          rhs: 
                            {(DQ ($ VSub_Name '$file')) 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(basename)} {(DQ ($ VSub_Name '$i'))})]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [588 594]
                              )
                            }
                          spids: [584]
                        )
                      ]
                      spids: [584]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:gnuplot_cmd)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name '$gnuplot_cmd') (" '") ($ VSub_Name '$i') ("' ") 
                                ($ VSub_Name '$range') (' using 1 title') ("\t\t\t'") ($ VSub_Name '$i') (" Memory usage' with lines,")
                              )
                            }
                          spids: [597]
                        )
                      ]
                      spids: [597]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:gnuplot_cmd)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name '$gnuplot_cmd') (" '' ") ($ VSub_Name '$range') 
                                (' using 2 title ') ("\t\t\t'") ($ VSub_Name '$i') (" Loss' with lines,")
                              )
                            }
                          spids: [612]
                        )
                      ]
                      spids: [612]
                    )
                  ]
                  spids: [573 625]
                )
              spids: [562 571]
            )
            (SimpleCommand
              words: [{(gnuplot)} {(-p)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 655
                  stdin_parts: [
                    ('#!/usr/bin/env gnuplot\n')
                    ('\n')
                    ('set terminal png enhanced size ')
                    ($ VSub_Name '$width')
                    (',')
                    ($ VSub_Name '$height')
                    (' large\n')
                    ('set autoscale xy\n')
                    ("set output '")
                    ($ VSub_Name '$file')
                    (".png'\n")
                    ("set xlabel 'samples'\n")
                    ("set ylabel 'bytes'\n")
                    ('set key left above Left title reverse\n')
                    ('\n')
                    ('plot ')
                    ($ VSub_Name '$gnuplot_cmd')
                    ('\n')
                  ]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ ($ VSub_Name '$file') (.png))})]
                  spids: [16777215 671]
                )
              ]
              spids: [16777215 682]
            )
          ]
          spids: [502]
        )
      spids: [498 501]
    )
    (FuncDef
      name: do_preprocess
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:out) op:Equal spids:[696])]
              spids: [694]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:lines) op:Equal spids:[701])]
              spids: [699]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [706]
                )
              ]
              spids: [704]
            )
            (C {(check_file_exist)} {(DQ ($ VSub_Name '$in'))})
            (C {(let)} {(Lit_VarLike 'lines=') (3)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name '$in'))})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [730 736]
                      ) (DQ (-slabs-by-loss))
                    }
                  spids: [729]
                )
              ]
              spids: [729]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name '$in'))})
                            (C {(grep)} {(-A)} {(DQ ($ VSub_Name '$lines'))} 
                              {(SQ <'Slabs sorted by loss'>)}
                            )
                            (C {(egrep)} {(-iv)} {(SQ <'\\-\\-|Name|Slabs'>)})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <'{print $1" "$4+$2*$3" "$4}'>)}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$out'))}
                                )
                              ]
                            )
                          ]
                          negated: F
                        )
                      ]
                    )
                  left_token: <Left_Backtick '`'>
                  spids: [742 788]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name '$out'))})]
                  spids: [16777215 804]
                )
              ]
              spids: [16777215 814]
            )
            (C {(let)} {(Lit_VarLike 'lines=') (3)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name '$in'))})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [825 831]
                      ) (DQ (-slabs-by-size))
                    }
                  spids: [824]
                )
              ]
              spids: [824]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name '$in'))})
                            (C {(grep)} {(-A)} {(DQ ($ VSub_Name '$lines'))} 
                              {(SQ <'Slabs sorted by size'>)}
                            )
                            (C {(egrep)} {(-iv)} {(SQ <'\\-\\-|Name|Slabs'>)})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <'{print $1" "$4" "$4-$2*$3}'>)}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$out'))}
                                )
                              ]
                            )
                          ]
                          negated: F
                        )
                      ]
                    )
                  left_token: <Left_Backtick '`'>
                  spids: [837 883]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name '$out'))})]
                  spids: [16777215 899]
                )
              ]
              spids: [16777215 909]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name '$in'))})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [914 920]
                      ) (DQ (-totals))
                    }
                  spids: [913]
                )
              ]
              spids: [913]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name '$in'))})
                            (C {(grep)} {(DQ ('Memory used'))})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <'{print $3" "$7}'>)}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$out'))}
                                )
                              ]
                            )
                          ]
                          negated: F
                        )
                      ]
                    )
                  left_token: <Left_Backtick '`'>
                  spids: [926 955]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(t_files) (Lit_Other '[') (0) (Lit_Other ']') (Lit_Other '=') 
                        ($ VSub_Name '$out')
                      }
                    )
                    (C {(do_totals_plotting)})
                  ]
                  spids: [16777215 971]
                )
              ]
              spids: [16777215 985]
            )
          ]
          spids: [691]
        )
      spids: [687 690]
    )
    (FuncDef
      name: parse_opts
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:opt) op:Equal spids:[999])]
              spids: [997]
            )
            (WhileUntil
              keyword: <KW_While while>
              cond: [
                (Sentence
                  child: (C {(getopts)} {(DQ ('tlr::s::h'))} {(opt)})
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {($ VSub_Name '$opt')}
                      arms: [
                        (case_arm
                          pat_list: [{(t)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:mode)
                                  op: Equal
                                  rhs: {(totals)}
                                  spids: [1028]
                                )
                              ]
                              spids: [1028]
                            )
                          ]
                          spids: [1024 1025 1032 16777215]
                        )
                        (case_arm
                          pat_list: [{(l)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:mode)
                                  op: Equal
                                  rhs: {(slabs)}
                                  spids: [1039]
                                )
                              ]
                              spids: [1039]
                            )
                          ]
                          spids: [1035 1036 1043 16777215]
                        )
                        (case_arm
                          pat_list: [{(s)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:array)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArrayLiteralPart
                                        words: [
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name OPTARG>
                                              suffix_op: 
                                                (PatSub
                                                  pat: {(',')}
                                                  replace: {(' ')}
                                                  do_all: T
                                                  do_prefix: F
                                                  do_suffix: F
                                                )
                                              spids: [1052 1059]
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [1050]
                                )
                              ]
                              spids: [1050]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:width)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [1064 1069]
                                      )
                                    }
                                  spids: [1063]
                                )
                              ]
                              spids: [1063]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:height)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                        spids: [1073 1078]
                                      )
                                    }
                                  spids: [1072]
                                )
                              ]
                              spids: [1072]
                            )
                          ]
                          spids: [1046 1047 1081 16777215]
                        )
                        (case_arm
                          pat_list: [{(r)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:array)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArrayLiteralPart
                                        words: [
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name OPTARG>
                                              suffix_op: 
                                                (PatSub
                                                  pat: {(',')}
                                                  replace: {(' ')}
                                                  do_all: T
                                                  do_prefix: F
                                                  do_suffix: F
                                                )
                                              spids: [1090 1097]
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [1088]
                                )
                              ]
                              spids: [1088]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:xmin)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [1102 1107]
                                      )
                                    }
                                  spids: [1101]
                                )
                              ]
                              spids: [1101]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:xmax)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                        spids: [1111 1116]
                                      )
                                    }
                                  spids: [1110]
                                )
                              ]
                              spids: [1110]
                            )
                          ]
                          spids: [1084 1085 1119 16777215]
                        )
                        (case_arm
                          pat_list: [{(h)}]
                          action: [
                            (C {(usage)})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [1122 1123 1134 16777215]
                        )
                        (case_arm
                          pat_list: [{(EscapedLiteralPart token:<Lit_EscapedChar '\\?'>)}]
                          action: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ('Invalid option: -') ($ VSub_Name '$OPTARG'))}]
                              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                            )
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1137 1138 1157 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other ':')}]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {(DQ (-) ($ VSub_Name '$OPTARG') (' requires an argument.'))}
                              ]
                              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                            )
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1160 1161 1181 16777215]
                        )
                      ]
                      spids: [1017 1021 1184]
                    )
                  ]
                  spids: [1014 1187]
                )
            )
            (ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {($ VSub_Name '$OPTIND')}
            )
          ]
          spids: [994]
        )
      spids: [990 993]
    )
    (FuncDef
      name: parse_args
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:idx) op:Equal rhs:{(0)} spids:[1207])]
              spids: [1205]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:p) op:Equal spids:[1213])]
              spids: [1211]
            )
            (ForEach
              iter_name: p
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {($ VSub_Name '$mode')}
                      arms: [
                        (case_arm
                          pat_list: [{(preprocess)}]
                          action: [
                            (C 
                              {(files) (Lit_Other '[') ($ VSub_Name '$idx') (Lit_Other ']') 
                                (Lit_Other '=') ($ VSub_Name '$p')
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name '$idx') (Lit_Other '+') (1)}
                                  spids: [1250]
                                )
                              ]
                              spids: [1250]
                            )
                          ]
                          spids: [1238 1239 1256 16777215]
                        )
                        (case_arm
                          pat_list: [{(totals)}]
                          action: [
                            (C 
                              {(t_files) (Lit_Other '[') ($ VSub_Name '$idx') (Lit_Other ']') 
                                (Lit_Other '=') ($ VSub_Name '$p')
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name '$idx') (Lit_Other '+') (1)}
                                  spids: [1271]
                                )
                              ]
                              spids: [1271]
                            )
                          ]
                          spids: [1259 1260 1277 16777215]
                        )
                        (case_arm
                          pat_list: [{(slabs)}]
                          action: [
                            (C 
                              {(files) (Lit_Other '[') ($ VSub_Name '$idx') (Lit_Other ']') 
                                (Lit_Other '=') ($ VSub_Name '$p')
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name '$idx') (Lit_Other '+') (1)}
                                  spids: [1292]
                                )
                              ]
                              spids: [1292]
                            )
                          ]
                          spids: [1280 1281 1298 16777215]
                        )
                      ]
                      spids: [1231 1235 1301]
                    )
                  ]
                  spids: [1228 1304]
                )
              spids: [1222 1226]
            )
          ]
          spids: [1202]
        )
      spids: [1198 1201]
    )
    (C {(parse_opts)} {(DQ ($ VSub_At '$@'))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:argstart)
          op: Equal
          rhs: {($ VSub_QMark '$?')}
          spids: [1315]
        )
      ]
      spids: [1315]
    )
    (C {(parse_args)} 
      {
        (DQ 
          (BracedVarSub
            token: <VSub_At '@'>
            suffix_op: (Slice begin:(ArithWord w:{($ VSub_Name '$argstart')}))
            spids: [1321 1325]
          )
        )
      }
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(Lit_Other '[')} 
                      {
                        (BracedVarSub
                          token: <VSub_Name files>
                          prefix_op: VSub_Pound
                          bracket_op: (WholeArray op_id:Lit_At)
                          spids: [1333 1339]
                        )
                      } {(-eq)} {(0)} {(Lit_Other ']')}
                    )
                    (C {(Lit_Other '[')} 
                      {
                        (BracedVarSub
                          token: <VSub_Name t_files>
                          prefix_op: VSub_Pound
                          bracket_op: (WholeArray op_id:Lit_At)
                          spids: [1351 1357]
                        )
                      } {(-eq)} {(0)} {(Lit_Other ']')}
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})]
          spids: [16777215 1366]
        )
      ]
      spids: [16777215 1376]
    )
    (Case
      to_match: {($ VSub_Name '$mode')}
      arms: [
        (case_arm
          pat_list: [{(preprocess)}]
          action: [
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1397 1402]
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [(C {(do_preprocess)} {(DQ ($ VSub_Name '$i'))})]
                  spids: [1406 1416]
                )
              spids: [1395 1404]
            )
          ]
          spids: [1386 1387 1419 16777215]
        )
        (case_arm
          pat_list: [{(totals)}]
          action: [(C {(do_totals_plotting)})]
          spids: [1422 1423 1429 16777215]
        )
        (case_arm
          pat_list: [{(slabs)}]
          action: [
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1443 1448]
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name '$i'))})]
                  spids: [1452 1462]
                )
              spids: [1441 1450]
            )
          ]
          spids: [1432 1433 1465 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (SimpleCommand
              words: [{(echo)} {(DQ ('Unknown mode ') ($ VSub_Name '$mode'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (C {(usage)})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [1468 1469 1491 16777215]
        )
      ]
      spids: [1379 1383 1493]
    )
  ]
)