(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:tracing)
          op: Equal
          rhs: {(/sys/kernel/debug/tracing)}
          spids: [142]
        )
      ]
      spids: [142]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:flock)
              op: Equal
              rhs: {(/var/tmp/.ftrace-lock)}
              spids: [145]
            )
          ]
          spids: [145]
        )
      terminator: <Op_Semi ";">
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(0)} spids:[149])]
      spids: [149]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_duration) op:Equal rhs:{(0)} spids:[152])]
          spids: [152]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:duration) op:Equal rhs:{(SQ )} spids:[156])]
          spids: [156]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_name) op:Equal rhs:{(0)} spids:[159])]
          spids: [159]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(SQ )} spids:[163])]
          spids: [163]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_pid) op:Equal rhs:{(0)} spids:[166])]
          spids: [166]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:pid) op:Equal rhs:{(SQ )} spids:[170])]
          spids: [170]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_tid) op:Equal rhs:{(0)} spids:[173])]
          spids: [173]
        )
      terminator: <Op_Semi ";">
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(SQ )} spids:[177])]
      spids: [177]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:ftext) op:Equal rhs:{(SQ )} spids:[179])]
          spids: [179]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_time) op:Equal rhs:{(0)} spids:[182])]
          spids: [182]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_fail) op:Equal rhs:{(0)} spids:[186])]
          spids: [186]
        )
      terminator: <Op_Semi ";">
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:opt_file) op:Equal rhs:{(0)} spids:[190])]
          spids: [190]
        )
      terminator: <Op_Semi ";">
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:file) op:Equal rhs:{(SQ )} spids:[194])]
      spids: [194]
    )
    (C {(trap)} {(SQ <":">)} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)})
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ 
                        (
"USAGE: opensnoop [-htx] [-d secs] [-p PID] [-L TID] [-n name] [filename]\n"
                        ) ("                 -d seconds      # trace duration, and use buffers\n") 
                        ("                 -n name         # process name to match on open\n") ("                 -p PID          # PID to match on open\n") 
                        ("                 -L TID          # PID to match on open\n") ("                 -t              # include time (seconds)\n") 
                        ("                 -x              # only show failed opens\n") ("                 -h              # this usage message\n") 
                        ("                 filename        # match filename (partials, REs, ok)\n") ("  eg,\n") ("       opensnoop                 # watch open()s live (unbuffered)\n") 
                        ("       opensnoop -d 1            # trace 1 sec (buffered)\n") ("       opensnoop -p 181          # trace I/O issued by PID 181 only\n") 
                        ("       opensnoop conf            # trace filenames containing ") (Right_DoubleQuote "\"") (conf) (Right_DoubleQuote "\"") ("\n") ("       opensnoop 'log") (Lit_Other "$") 
                        ("'          # filenames ending in ") (Right_DoubleQuote "\"") (log) (Right_DoubleQuote "\"") ("\n") ("\n") 
                        ("See the man page and example file for more info.\n")
                      )
                    }
                  do_expansion: True
                  here_end: END
                  was_filled: True
                  spids: [225]
                )
                (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[228])
              ]
            )
            (C {(exit)})
          ]
          spids: [220]
        )
      spids: [216 219]
    )
    (FuncDef
      name: warn
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (Pipeline children:[(C {(eval)} {(DQ ($ VSub_At "$@"))})] negated:True)
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("WARNING: command failed ") 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar "\\\"">
                            ) ($ VSub_At "$@") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[287])]
                    )
                  ]
                  spids: [-1 282]
                )
              ]
              spids: [-1 298]
            )
          ]
          spids: [268]
        )
      spids: [264 267]
    )
    (FuncDef
      name: end
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)}]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[316])]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ("Ending tracing..."))}]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[326])]
            )
            (C {(cd)} {($ VSub_Name "$tracing")})
            (C {(warn)} {(DQ ("echo 0 > events/kprobes/getnameprobe/enable"))})
            (C {(warn)} {(DQ ("echo 0 > events/syscalls/sys_exit_open/enable"))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_DPipe
                              left: (ArithVarRef name:opt_pid)
                              right: (ArithVarRef name:opt_tid)
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(warn)} {(DQ ("echo 0 > events/kprobes/getnameprobe/filter"))})
                    (C {(warn)} {(DQ ("echo 0 > events/syscalls/sys_exit_open/filter"))})
                  ]
                  spids: [-1 363]
                )
              ]
              spids: [-1 380]
            )
            (C {(warn)} {(DQ ("echo -:getnameprobe >> kprobe_events"))})
            (C {(warn)} {(DQ ("echo > trace"))})
            (AndOr
              children: [
                (DParen child:(ArithVarRef name:wroteflock))
                (C {(warn)} {(DQ ("rm ") ($ VSub_Name "$flock"))})
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [307]
        )
      spids: [303 306]
    )
    (FuncDef
      name: die
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At "$@"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[425])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [420]
        )
      spids: [416 419]
    )
    (FuncDef
      name: edie
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At "$@"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[453])]
            )
            (SimpleCommand
              words: [{(exec)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[463])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[466])
              ]
            )
            (C {(end)})
            (C {(exit)} {(1)})
          ]
          spids: [444]
        )
      spids: [440 443]
    )
    (While
      cond: [
        (C {(getopts)} 
          {(d) (Lit_Other ":") (hn) (Lit_Other ":") (p) (Lit_Other ":") (L) (Lit_Other ":") (tx)} {(opt)}
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name "$opt")}
              arms: [
                (case_arm
                  pat_list: [{(d)}]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opt_duration)
                              op: Equal
                              rhs: {(1)}
                              spids: [512]
                            )
                          ]
                          spids: [512]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:duration)
                          op: Equal
                          rhs: {($ VSub_Name "$OPTARG")}
                          spids: [516]
                        )
                      ]
                      spids: [516]
                    )
                  ]
                  spids: [509 510 519 -1]
                )
                (case_arm
                  pat_list: [{(n)}]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opt_name)
                              op: Equal
                              rhs: {(1)}
                              spids: [525]
                            )
                          ]
                          spids: [525]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: {($ VSub_Name "$OPTARG")}
                          spids: [529]
                        )
                      ]
                      spids: [529]
                    )
                  ]
                  spids: [522 523 532 -1]
                )
                (case_arm
                  pat_list: [{(p)}]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opt_pid)
                              op: Equal
                              rhs: {(1)}
                              spids: [538]
                            )
                          ]
                          spids: [538]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:pid)
                          op: Equal
                          rhs: {($ VSub_Name "$OPTARG")}
                          spids: [542]
                        )
                      ]
                      spids: [542]
                    )
                  ]
                  spids: [535 536 545 -1]
                )
                (case_arm
                  pat_list: [{(L)}]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opt_tid)
                              op: Equal
                              rhs: {(1)}
                              spids: [551]
                            )
                          ]
                          spids: [551]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tid)
                          op: Equal
                          rhs: {($ VSub_Name "$OPTARG")}
                          spids: [555]
                        )
                      ]
                      spids: [555]
                    )
                  ]
                  spids: [548 549 558 -1]
                )
                (case_arm
                  pat_list: [{(t)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_time)
                          op: Equal
                          rhs: {(1)}
                          spids: [564]
                        )
                      ]
                      spids: [564]
                    )
                  ]
                  spids: [561 562 567 -1]
                )
                (case_arm
                  pat_list: [{(x)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_fail)
                          op: Equal
                          rhs: {(1)}
                          spids: [573]
                        )
                      ]
                      spids: [573]
                    )
                  ]
                  spids: [570 571 576 -1]
                )
                (case_arm
                  pat_list: [{(h)} {(Lit_Other "?")}]
                  action: [(C {(usage)})]
                  spids: [579 582 586 -1]
                )
              ]
              spids: [502 506 589]
            )
          ]
          spids: [499 591]
        )
    )
    (C {(shift)} 
      {
        (ArithSubPart
          anode: 
            (ArithBinary
              op_id: Arith_Minus
              left: (ArithWord w:{($ VSub_Name "$OPTIND")})
              right: (ArithWord w:{(Lit_Digits 1)})
            )
          spids: [595 604]
        )
      }
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithWord w:{($ VSub_Pound "$#")}))
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_file) op:Equal rhs:{(1)} spids:[619])]
              spids: [619]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [623]
                )
              ]
              spids: [623]
            )
            (C {(shift)})
          ]
          spids: [-1 616]
        )
      ]
      spids: [-1 629]
    )
    (AndOr
      children: [(DParen child:(ArithWord w:{($ VSub_Pound "$#")})) (C {(usage)})]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DParen
          child: 
            (ArithBinary
              op_id: Arith_Great
              left: 
                (ArithBinary
                  op_id: Arith_Plus
                  left: 
                    (ArithBinary
                      op_id: Arith_Plus
                      left: (ArithVarRef name:opt_pid)
                      right: (ArithVarRef name:opt_name)
                    )
                  right: (ArithVarRef name:opt_tid)
                )
              right: (ArithWord w:{(Lit_Digits 1)})
            )
        )
        (C {(die)} {(DQ ("ERROR: use at most one of -p, -n, -L."))})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_pid))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ftext)
              op: Equal
              rhs: {(DQ (" issued by PID ") ($ VSub_Name "$pid"))}
              spids: [684]
            )
          ]
          spids: [684]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_tid))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ftext)
              op: Equal
              rhs: {(DQ (" issued by TID ") ($ VSub_Name "$tid"))}
              spids: [699]
            )
          ]
          spids: [699]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_name))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ftext)
              op: Equal
              rhs: 
                {
                  (DQ (" issued by process name ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                    ($ VSub_Name "$name") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                  )
                }
              spids: [714]
            )
          ]
          spids: [714]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_file))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ftext)
              op: Equal
              rhs: 
                {
                  (DQ ($ VSub_Name "$ftext") (" for filenames containing ") 
                    (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$file") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                  )
                }
              spids: [731]
            )
          ]
          spids: [731]
        )
      ]
      op_id: Op_DAmp
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_duration))
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ("Tracing open()s") ($ VSub_Name "$ftext") (" for ") ($ VSub_Name "$duration") 
                  (" seconds (buffered)...")
                )
              }
            )
          ]
          spids: [-1 750]
        )
      ]
      else_action: [(C {(echo)} {(DQ ("Tracing open()s") ($ VSub_Name "$ftext") (". Ctrl-C to end."))})]
      spids: [763 774]
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_duration))
        (AndOr
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:use) op:Equal rhs:{(mawk)} spids:[789])]
              spids: [789]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:use) op:Equal rhs:{(gawk)} spids:[794])]
              spids: [794]
            )
          ]
          op_id: Op_DPipe
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_x child:{(/usr/bin/) ($ VSub_Name "$use")}))
        (AndOr
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:awk)
                  op: Equal
                  rhs: {($ VSub_Name "$use")}
                  spids: [811]
                )
              ]
              spids: [811]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:awk) op:Equal rhs:{(awk)} spids:[816])]
              spids: [816]
            )
          ]
          op_id: Op_DPipe
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (C {(cd)} {($ VSub_Name "$tracing")})
        (C {(die)} 
          {
            (DQ ("ERROR: accessing tracing. Root user? Kernel has FTRACE?\n") 
              ("    debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)")
            )
          }
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_e child:{($ VSub_Name "$flock")}))
        (C {(die)} 
          {
            (DQ ("ERROR: ftrace may be in use by PID ") 
              (CommandSubPart
                command_list: (CommandList children:[(C {(cat)} {($ VSub_Name "$flock")})])
                left_token: <Left_CommandSub "$(">
                spids: [854 858]
              ) (" ") ($ VSub_Name "$flock")
            )
          }
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (SimpleCommand
          words: [{(echo)} {($ VSub_Dollar "$$")}]
          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$flock")} spids:[867])]
        )
        (C {(die)} {(DQ ("ERROR: unable to write ") ($ VSub_Name "$flock") (.))})
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(1)} spids:[881])]
      spids: [881]
    )
    (SimpleCommand
      words: [{(echo)} {(nop)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(current_tracer)} spids:[892])]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ver)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(uname)} {(-r)})])
                left_token: <Left_CommandSub "$(">
                spids: [897 901]
              )
            }
          spids: [896]
        )
      ]
      spids: [896]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalOr
                      left: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ ($ VSub_Name "$ver"))}
                          right: {(2.) (Lit_Other "*")}
                        )
                      right: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ ($ VSub_Name "$ver"))}
                          right: {(3.) (Lit_Other "[") (1-6) (Lit_Other "]") (.) (Lit_Other "*")}
                        )
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:kprobe)
                  op: Equal
                  rhs: {(SQ <"r:getnameprobe getname +0($retval):string">)}
                  spids: [941]
                )
              ]
              spids: [941]
            )
          ]
          spids: [-1 934]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:kprobe)
              op: Equal
              rhs: {(SQ <"r:getnameprobe getname +0(+0($retval)):string">)}
              spids: [953]
            )
          ]
          spids: [953]
        )
      ]
      spids: [946 958]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {($ VSub_Name "$kprobe")}]
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {(kprobe_events)}
                          spids: [968]
                        )
                      ]
                    )
                  ]
                  negated: True
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(edie)} {(DQ ("ERROR: adding a kprobe for getname(). Exiting."))})]
          spids: [-1 973]
        )
      ]
      spids: [-1 982]
    )
    (If
      arms: [
        (if_arm
          cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_pid)) terminator:<Op_Semi ";">)]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:filter) op:Equal rhs:{(SQ )} spids:[997])]
              spids: [997]
            )
            (ForEach
              iter_name: tid
              iter_words: [{(/proc/) ($ VSub_Name "$pid") (/task/) (Lit_Other "*")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:filter)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$filter") (" || common_pid == ") 
                                (BracedVarSub
                                  token: <VSub_Name tid>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VOp1_DPound
                                      arg_word: {("*") (Lit_Slash /)}
                                    )
                                  spids: [1019 1024]
                                )
                              )
                            }
                          spids: [1015]
                        )
                      ]
                      spids: [1015]
                    )
                  ]
                  spids: [1012 1028]
                )
              spids: [1005 1010]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filter)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name filter>
                        suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 3)}))
                        spids: [1032 1036]
                      )
                    }
                  spids: [1031]
                )
              ]
              spids: [1031]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {($ VSub_Name "$filter")}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(events/kprobes/getnameprobe/filter)}
                                  spids: [1050]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {($ VSub_Name "$filter")}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(events/syscalls/sys_exit_open/filter)}
                                  spids: [1064]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  action: [
                    (C {(edie)} {(DQ ("ERROR: setting -p ") ($ VSub_Name "$pid") (". Exiting."))})
                  ]
                  spids: [-1 1069]
                )
              ]
              spids: [-1 1081]
            )
          ]
          spids: [-1 994]
        )
      ]
      spids: [-1 1083]
    )
    (If
      arms: [
        (if_arm
          cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_tid)) terminator:<Op_Semi ";">)]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ("common_pid == ") ($ VSub_Name "$tid"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(events/kprobes/getnameprobe/filter)}
                                  spids: [1109]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ("common_pid == ") ($ VSub_Name "$tid"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(events/syscalls/sys_exit_open/filter)}
                                  spids: [1126]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  action: [
                    (C {(edie)} {(DQ ("ERROR: setting -L ") ($ VSub_Name "$tid") (". Exiting."))})
                  ]
                  spids: [-1 1131]
                )
              ]
              spids: [-1 1143]
            )
          ]
          spids: [-1 1095]
        )
      ]
      spids: [-1 1145]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(1)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(events/kprobes/getnameprobe/enable)}
                          spids: [1155]
                        )
                      ]
                    )
                  ]
                  negated: True
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(edie)} {(DQ ("ERROR: enabling kprobe for getname(). Exiting."))})]
          spids: [-1 1160]
        )
      ]
      spids: [-1 1169]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(1)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(events/syscalls/sys_exit_open/enable)}
                          spids: [1179]
                        )
                      ]
                    )
                  ]
                  negated: True
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(edie)} {(DQ ("ERROR: enabling open() exit tracepoint. Exiting."))})]
          spids: [-1 1184]
        )
      ]
      spids: [-1 1193]
    )
    (AndOr
      children: [
        (DParen child:(ArithVarRef name:opt_time))
        (C {(printf)} {(DQ ("%-16s "))} {(DQ (TIMEs))})
      ]
      op_id: Op_DAmp
    )
    (C {(printf)} {(DQ ("%-16.16s %-6s %4s %s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
      {(DQ (COMM))} {(DQ (PID))} {(DQ (FD))} {(DQ (FILE))}
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:offset)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {($ VSub_Name "$awk")} 
                        {
                          (SQ <"BEGIN { o = 0; }\n"> 
                            <"\t$1 == \"#\" && $2 ~ /TASK/ && NF == 6 { o = 1; }\n"> <"\t$2 ~ /TASK/ { print o; exit }">
                          )
                        } {(trace)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [1260 1270]
              )
            }
          spids: [1259]
        )
      ]
      spids: [1259]
    )
    (C {(warn)} {(DQ ("echo > trace"))})
    (Pipeline
      children: [
        (Subshell
          child: 
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DParen child:(ArithVarRef name:opt_duration))
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(sleep)} {($ VSub_Name "$duration")}) (C {(cat)} {(trace)})]
                  spids: [-1 1294]
                )
              ]
              else_action: [(C {(cat)} {(trace_pipe)})]
              spids: [1310 1321]
            )
          spids: [1282 1323]
        )
        (C {($ VSub_Name "$awk")} {(-v)} {(Lit_VarLike "o=") ($ VSub_Name "$offset")} {(-v)} 
          {(Lit_VarLike "opt_name=") ($ VSub_Name "$opt_name")} {(-v)} {(Lit_VarLike "name=") ($ VSub_Name "$name")} {(-v)} 
          {(Lit_VarLike "opt_duration=") ($ VSub_Name "$opt_duration")} {(-v)} {(Lit_VarLike "opt_time=") ($ VSub_Name "$opt_time")} {(-v)} 
          {(Lit_VarLike "opt_fail=") ($ VSub_Name "$opt_fail")} {(-v)} {(Lit_VarLike "opt_file=") ($ VSub_Name "$opt_file")} {(-v)} 
          {(Lit_VarLike "file=") ($ VSub_Name "$file")} 
          {
            (SQ <"\n"> <"\t# common fields\n"> <"\t$1 != \"#\" {\n"> 
              <"\t\t# task name can contain dashes and space\n"> <"\t\tsplit($0, line, \"-\")\n"> <"\t\tsub(/^[ \\t\\r\\n]+/, \"\", line[1])\n"> 
              <"\t\tcomm = line[1]\n"> <"\t\tif (opt_name && match(comm, name) == 0)\n"> <"\t\t\tnext\n"> <"\t\tsub(/ .*$/, \"\", line[2])\n"> 
              <"\t\tpid = line[2]\n"> <"\t}\n"> <"\n"> <"\t# do_sys_open()\n"> <"\t$1 != \"#\" && $(5+o) ~ /do_sys_open/ {\n"> <"\t\t#\n"> 
              <"\t\t# eg: ... (do_sys_open+0xc3/0x220 <- getname) arg1=\"file1\"\n"> <"\t\t#\n"> <"\t\tfilename = $NF\n"> <"\t\tsub(/\"$/, \"\", filename)\n"> 
              <"\t\tsub(/.*\"/, \"\", filename)\n"> <"\t\tlastfile[pid] = filename\n"> <"\t}\n"> <"\n"> <"\t# sys_open()\n"> 
              <"\t$1 != \"#\" && $(4+o) == \"sys_open\" {\n"> <"\t\tfilename = lastfile[pid]\n"> <"\t\tdelete lastfile[pid]\n"> 
              <"\t\tif (opt_file && filename !~ file)\n"> <"\t\t\tnext\n"> <"\t\trval = $NF\n"> <"\t\t# matched failed as beginning with 0xfffff\n"> 
              <"\t\tif (opt_fail && rval !~ /0xfffff/)\n"> <"\t\t\tnext\n"> <"\t\tif (rval ~ /0xfffff/)\n"> <"\t\t\trval = -1\n"> <"\n"> <"\t\tif (opt_time) {\n"> 
              <"\t\t\ttime = $(3+o); sub(\":\", \"\", time)\n"> <"\t\t\tprintf \"%-16s \", time\n"> <"\t\t}\n"> 
              <"\t\tprintf \"%-16.16s %-6s %4s %s\\n\", comm, pid, rval, filename\n"> <"\t}\n"> <"\n"> <"\t$0 ~ /LOST.*EVENTS/ { print \"WARNING: \" $0 > \"/dev/stderr\" }\n">
            )
          }
        )
      ]
      negated: False
    )
    (C {(end)})
  ]
)