(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:tracing)
          op: Equal
          rhs: {(/sys/kernel/debug/tracing)}
          spids: [187]
        )
      ]
      spids: [187]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:flock)
                  op: Equal
                  rhs: {(/var/tmp/.ftrace-lock)}
                  spids: [190]
                )
              ]
              spids: [190]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(0)} spids:[194])]
          spids: [194]
        )
      ]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_duration) op:Equal rhs:{(0)} spids:[197])]
              spids: [197]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:duration)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [201]
                )
              ]
              spids: [201]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_pid) op:Equal rhs:{(0)} spids:[204])]
              spids: [204]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:pid) op:Equal rhs:{(EmptyPart)} spids:[208])]
              spids: [208]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_tid) op:Equal rhs:{(0)} spids:[211])]
              spids: [211]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(EmptyPart)} spids:[215])]
          spids: [215]
        )
      ]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(0)} spids:[217])]
              spids: [217]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:filter) op:Equal rhs:{(EmptyPart)} spids:[221])]
              spids: [221]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_view) op:Equal rhs:{(0)} spids:[224])]
              spids: [224]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_headers) op:Equal rhs:{(0)} spids:[228])]
              spids: [228]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_stack) op:Equal rhs:{(0)} spids:[232])]
              spids: [232]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:dmesg) op:Equal rhs:{(2)} spids:[236])]
          spids: [236]
        )
      ]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:debug) op:Equal rhs:{(0)} spids:[239])]
              spids: [239]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_force) op:Equal rhs:{(0)} spids:[243])]
              spids: [243]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_list) op:Equal rhs:{(0)} spids:[247])]
              spids: [247]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:target) op:Equal rhs:{(EmptyPart)} spids:[251])]
          spids: [251]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PATH)
          op: Equal
          rhs: {($ VSub_Name '$PATH') (Lit_Other ':') (/usr/bin) (Lit_Other ':') (/sbin)}
          spids: [253]
        )
      ]
      spids: [253]
    )
    (C {(trap)} {(SQ <':'>)} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)})
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(END)}
                  here_end_span_id: 340
                  stdin_parts: [
                    ('USAGE: uprobe [-FhHsv] [-d secs] [-p PID] [-L TID] {-l target |\n')
                    ('              uprobe_definition [filter]}\n')
                    ('                 -F              # force. trace despite warnings.\n')
                    ('                 -d seconds      # trace duration, and use buffers\n')
                    ('                 -l target       # list functions from this executable\n')
                    ('                 -p PID          # PID to match on events\n')
                    ('                 -L TID          # thread id to match on events\n')
                    ("                 -v              # view format file (don't trace)\n")
                    ('                 -H              # include column headers\n')
                    ('                 -s              # show user stack traces\n')
                    ('                 -h              # this usage message\n')
                    ('\n')
                    ('Note that these examples may need modification to match your kernel\n')
                    ("version's function names and platform's register usage.\n")
                    ('   eg,\n')
                    ('       # trace readline() calls in all running ')
                    (Right_DoubleQuote '"')
                    (bash)
                    (Right_DoubleQuote '"')
                    (' executables:\n')
                    ('           uprobe p:bash:readline\n')
                    ('       # trace readline() with explicit executable path:\n')
                    ('           uprobe p:/bin/bash:readline\n')
                    ('       # trace the return of readline() with return value as a string:\n')
                    ("           uprobe 'r:bash:readline +0(")
                    (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>)
                    ("retval):string'\n")
                    ('       # trace sleep() calls in all running libc shared libraries:\n')
                    ('           uprobe p:libc:sleep\n')
                    ('       # trace sleep() with register %di (x86):\n')
                    ("           uprobe 'p:libc:sleep %di'\n")
                    ('       # trace this address (use caution: must be instruction aligned):\n')
                    ('           uprobe p:libc:0xbf130\n')
                    ('       # trace gettimeofday() for PID 1182 only:\n')
                    ('           uprobe -p 1182 p:libc:gettimeofday\n')
                    ('       # trace the return of fopen() only when it returns NULL:\n')
                    ("           uprobe 'r:libc:fopen file=")
                    (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>)
                    ("retval' 'file == 0'\n")
                    ('\n')
                    ('See the man page and example file for more info.\n')
                  ]
                )
                (Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})
              ]
            )
            (ControlFlow token:<ControlFlow_Exit exit>)
          ]
          spids: [287]
        )
      spids: [283 286]
    )
    (FuncDef
      name: warn
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (Pipeline children:[(C {(eval)} {(DQ ($ VSub_At '$@'))})] negated:T)
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ('WARNING: command failed ') 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar '\\"'>
                            ) ($ VSub_At '$@') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                  ]
                  spids: [16777215 365]
                )
              ]
              spids: [16777215 381]
            )
          ]
          spids: [351]
        )
      spids: [347 350]
    )
    (FuncDef
      name: end
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)}]
              redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('Ending tracing...'))}]
              redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
            )
            (C {(cd)} {($ VSub_Name '$tracing')})
            (C {(warn)} {(DQ ('echo 0 > events/uprobes/') ($ VSub_Name '$uname') (/enable))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DParen child:(ArithVarRef name:opt_filter) spids:[429 434])
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(warn)} {(DQ ('echo 0 > events/uprobes/') ($ VSub_Name '$uname') (/filter))})
                  ]
                  spids: [16777215 437]
                )
              ]
              spids: [16777215 449]
            )
            (C {(warn)} {(DQ ('echo -:') ($ VSub_Name '$uname') (' >> uprobe_events'))})
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DParen child:(ArithVarRef name:opt_stack) spids:[461 466])
                (C {(warn)} {(DQ ('echo 0 > options/userstacktrace'))})
              ]
            )
            (C {(warn)} {(DQ ('echo > trace'))})
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DParen child:(ArithVarRef name:wroteflock) spids:[484 489])
                (C {(warn)} {(DQ ('rm ') ($ VSub_Name '$flock'))})
              ]
            )
          ]
          spids: [390]
        )
      spids: [386 389]
    )
    (FuncDef
      name: die
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At '$@'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [507]
        )
      spids: [503 506]
    )
    (FuncDef
      name: edie
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At '$@'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (SimpleCommand
              words: [{(exec)}]
              redirects: [
                (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})
                (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
              ]
            )
            (C {(end)})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [531]
        )
      spids: [527 530]
    )
    (FuncDef
      name: set_path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [574]
                )
              ]
              spids: [574]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(which)} {($ VSub_Name '$name')})])
                        left_token: <Left_CommandSub '$('>
                        spids: [580 584]
                      )
                    }
                  spids: [579]
                )
              ]
              spids: [579]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name '$path'))}
                              right: {(DQ )}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (SimpleCommand
                                            words: [{(ldconfig)} {(-v)}]
                                            redirects: [
                                              (Redir
                                                op: <Redir_Great '2>'>
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                              )
                                            ]
                                          )
                                          (C {(awk)} {(-v)} {(Lit_VarLike 'lib=') ($ VSub_Name '$name')} 
                                            {
                                              (SQ <'\n'> 
                                                <
'\t\t    $1 ~ /:/ { sub(/:/, "", $1); path = $1 }\n'
                                                > <'\t\t    { sub(/\\..*/, "", $1); }\n'> <'\t\t    $1 == lib { print path "/" $3 }'>
                                              )
                                            }
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [607 630]
                              )
                            }
                          spids: [606]
                        )
                      ]
                      spids: [606]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ ($ VSub_Name '$path'))}
                                      right: {(DQ )}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(die)} 
                              {
                                (DQ ('ERROR: segment ') 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar '\\"'>
                                  ) ($ VSub_Name '$name') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ambiguous.')
                                )
                              } {(DQ ('Program or library? Try a full path.'))}
                            )
                          ]
                          spids: [16777215 649]
                        )
                      ]
                      spids: [16777215 669]
                    )
                  ]
                  spids: [16777215 603]
                )
              ]
              spids: [16777215 672]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: (BoolUnary op_id:BoolUnary_x child:{($ VSub_Name '$path')})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ('ERROR: resolved ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          ($ VSub_Name '$name') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' to ') 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_Name '$path') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', but file missing')
                        )
                      }
                    )
                  ]
                  spids: [16777215 689]
                )
              ]
              spids: [16777215 707]
            )
          ]
          spids: [571]
        )
      spids: [567 570]
    )
    (FuncDef
      name: set_addr
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [719]
                )
              ]
              spids: [719]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [723]
                )
              ]
              spids: [723]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sym)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [727]
                )
              ]
              spids: [727]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$path'))} right:{(DQ )})
                )
                (C {(die)} {(DQ ('ERROR: missing symbol path.'))})
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$sym'))} right:{(DQ )})
                )
                (C {(die)} {(DQ ('ERROR: missing symbol for ') ($ VSub_Name '$path'))})
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:addr)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(objdump)} {(-tT)} {($ VSub_Name '$path')})
                                  (C {(awk)} {(-v)} {(Lit_VarLike 'sym=') ($ VSub_Name '$sym')} 
                                    {
                                      (SQ <'\n'> 
                                        <'\t    $NF == sym && $4 == ".text"  { print $1; exit }'>
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [779 799]
                      )
                    }
                  spids: [778]
                )
              ]
              spids: [778]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$addr'))} right:{(DQ )})
                )
                (C {(die)} 
                  {
                    (DQ ('ERROR: missing symbol ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                      ($ VSub_Name '$sym') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' in ') ($ VSub_Name '$path')
                    )
                  }
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DParen
                  child: 
                    (ArithBinary
                      op_id: Arith_DEqual
                      left: (ArithWord w:{(Lit_Digits 0) (Lit_ArithVarLike x) ($ VSub_Name '$addr')})
                      right: (ArithWord w:{(Lit_Digits 0)})
                    )
                  spids: [829 840]
                )
                (C {(die)} 
                  {
                    (DQ ('ERROR: failed resolving ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                      ($ VSub_Name '$sym') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' in ') ($ VSub_Name '$path') (.)
                    )
                  } {(DQ ('Maybe it exists in a different target (eg, library)?'))}
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:addr)
                  op: Equal
                  rhs: 
                    {(0x) 
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(printf)} {(DQ ('%x'))} {(0x) ($ VSub_Name '$addr')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [865 876]
                      )
                    }
                  spids: [863]
                )
              ]
              spids: [863]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:type)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(file)} {($ VSub_Name '$path')})])
                        left_token: <Left_CommandSub '$('>
                        spids: [884 888]
                      )
                    }
                  spids: [883]
                )
              ]
              spids: [883]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ ($ VSub_Name '$type'))}
                              right: 
                                {(Lit_Other '*') (shared) (Lit_Other '?') (object) (Lit_Other '*')}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:base)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(objdump)} {(-x)} {($ VSub_Name '$path')})
                                          (C {(awk)} 
                                            {
                                              (SQ <'\n'> 
                                                <
'\t\t    $1 == "LOAD" && $3 ~ /^[0x]*$/ { print $5 }'
                                                >
                                              )
                                            }
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [922 937]
                              )
                            }
                          spids: [921]
                        )
                      ]
                      spids: [921]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ ($ VSub_Name '$base'))}
                              right: {(0x) (Lit_Other '*')}
                            )
                        )
                        (C {(die)} {(DQ ('ERROR: finding base load addr'))} 
                          {(DQ ('for ') ($ VSub_Name '$path') (.))}
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:addr)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithVarRef name:addr)
                                    right: (ArithVarRef name:base)
                                  )
                                spids: [970 979]
                              )
                            }
                          spids: [969]
                        )
                      ]
                      spids: [969]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_Less
                              left: (ArithVarRef name:addr)
                              right: (ArithWord w:{(Lit_Digits 0)})
                            )
                          spids: [982 991]
                        )
                        (C {(die)} {(DQ ('ERROR: transposed address for ') ($ VSub_Name '$sym'))} 
                          {(DQ ('became negative: ') ($ VSub_Name '$addr'))}
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:addr)
                          op: Equal
                          rhs: 
                            {(0x) 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(printf)} {(DQ ('%x'))} {($ VSub_Name '$addr')})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [1011 1020]
                              )
                            }
                          spids: [1009]
                        )
                      ]
                      spids: [1009]
                    )
                  ]
                  spids: [16777215 910]
                )
              ]
              spids: [16777215 1023]
            )
          ]
          spids: [716]
        )
      spids: [712 715]
    )
    (WhileUntil
      keyword: <KW_While while>
      cond: [
        (C {(getopts)} 
          {(Fd) (Lit_Other ':') (hHl) (Lit_Other ':') (p) (Lit_Other ':') (L) (Lit_Other ':') (sv)} {(opt)}
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$opt')}
              arms: [
                (case_arm
                  pat_list: [{(F)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_force)
                          op: Equal
                          rhs: {(1)}
                          spids: [1060]
                        )
                      ]
                      spids: [1060]
                    )
                  ]
                  spids: [1057 1058 1063 16777215]
                )
                (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: [1069]
                            )
                          ]
                          spids: [1069]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:duration)
                          op: Equal
                          rhs: {($ VSub_Name '$OPTARG')}
                          spids: [1073]
                        )
                      ]
                      spids: [1073]
                    )
                  ]
                  spids: [1066 1067 1076 16777215]
                )
                (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: [1082]
                            )
                          ]
                          spids: [1082]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:pid)
                          op: Equal
                          rhs: {($ VSub_Name '$OPTARG')}
                          spids: [1086]
                        )
                      ]
                      spids: [1086]
                    )
                  ]
                  spids: [1079 1080 1089 16777215]
                )
                (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: [1095]
                            )
                          ]
                          spids: [1095]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tid)
                          op: Equal
                          rhs: {($ VSub_Name '$OPTARG')}
                          spids: [1099]
                        )
                      ]
                      spids: [1099]
                    )
                  ]
                  spids: [1092 1093 1102 16777215]
                )
                (case_arm
                  pat_list: [{(l)}]
                  action: [
                    (Sentence
                      child: 
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opt_list)
                              op: Equal
                              rhs: {(1)}
                              spids: [1108]
                            )
                          ]
                          spids: [1108]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:target)
                          op: Equal
                          rhs: {($ VSub_Name '$OPTARG')}
                          spids: [1112]
                        )
                      ]
                      spids: [1112]
                    )
                  ]
                  spids: [1105 1106 1115 16777215]
                )
                (case_arm
                  pat_list: [{(H)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_headers)
                          op: Equal
                          rhs: {(1)}
                          spids: [1121]
                        )
                      ]
                      spids: [1121]
                    )
                  ]
                  spids: [1118 1119 1124 16777215]
                )
                (case_arm
                  pat_list: [{(s)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_stack)
                          op: Equal
                          rhs: {(1)}
                          spids: [1130]
                        )
                      ]
                      spids: [1130]
                    )
                  ]
                  spids: [1127 1128 1133 16777215]
                )
                (case_arm
                  pat_list: [{(v)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:opt_view)
                          op: Equal
                          rhs: {(1)}
                          spids: [1139]
                        )
                      ]
                      spids: [1139]
                    )
                  ]
                  spids: [1136 1137 1142 16777215]
                )
                (case_arm
                  pat_list: [{(h)} {(Lit_Other '?')}]
                  action: [(C {(usage)})]
                  spids: [1145 1148 1152 16777215]
                )
              ]
              spids: [1050 1054 1155]
            )
          ]
          spids: [1047 1157]
        )
    )
    (C {(shift)} 
      {
        (ArithSubPart
          anode: 
            (ArithBinary
              op_id: Arith_Minus
              left: (ArithWord w:{($ VSub_Name '$OPTIND')})
              right: (ArithWord w:{(Lit_Digits 1)})
            )
          spids: [1161 1170]
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:uprobe)
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [1172]
        )
      ]
      spids: [1172]
    )
    (C {(shift)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithWord w:{($ VSub_Pound '$#')}) spids:[1179 1184])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(1)} spids:[1190])]
              spids: [1190]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filter)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1194]
                )
              ]
              spids: [1194]
            )
          ]
          spids: [16777215 1187]
        )
      ]
      spids: [16777215 1197]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (DBracket
          expr: 
            (LogicalAnd
              left: 
                (BoolBinary
                  op_id: BoolBinary_GlobDEqual
                  left: {(DQ ($ VSub_Name '$opt_list'))}
                  right: {(1)}
                )
              right: (BoolBinary op_id:BoolBinary_GlobNEqual left:{(DQ ($ VSub_Name '$uprobe'))} right:{(DQ )})
            )
        )
        (C {(die)} {(DQ ('ERROR: -l takes a target only'))})
      ]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_list) spids:[1236 1241])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ ($ VSub_Name '$target'))}
                              right: {(Lit_Other '*') (/) (Lit_Other '*')}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(set_path)} {($ VSub_Name '$target')})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:target)
                          op: Equal
                          rhs: {($ VSub_Name '$path')}
                          spids: [1272]
                        )
                      ]
                      spids: [1272]
                    )
                  ]
                  spids: [16777215 1264]
                )
              ]
              spids: [16777215 1276]
            )
            (Pipeline
              children: [
                (C {(objdump)} {(-tT)} {($ VSub_Name '$target')})
                (C {(awk)} {(SQ <'$4 == ".text" { print $NF }'>)})
                (C {(sort)})
                (C {(uniq)})
              ]
              negated: F
            )
            (ControlFlow token:<ControlFlow_Exit exit>)
          ]
          spids: [16777215 1244]
        )
      ]
      spids: [16777215 1304]
    )
    (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: [1311 1315]
              )
            }
          spids: [1310]
        )
      ]
      spids: [1310]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:maj)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name ver>
                suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('.*')})
                spids: [1318 1322]
              )
            }
          spids: [1317]
        )
      ]
      spids: [1317]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DParen
                  child: 
                    (ArithBinary
                      op_id: Arith_DAmp
                      left: 
                        (ArithBinary
                          op_id: Arith_DEqual
                          left: (ArithVarRef name:opt_force)
                          right: (ArithWord w:{(Lit_Digits 0)})
                        )
                      right: 
                        (ArithBinary
                          op_id: Arith_Less
                          left: (ArithWord w:{($ VSub_Name '$maj')})
                          right: (ArithWord w:{(Lit_Digits 4)})
                        )
                    )
                  spids: [1326 1343]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(END)}
                  here_end_span_id: 1366
                  stdin_parts: [
                    ('ERROR: Kernel version >= 4.0 preferred (you have ')
                    ($ VSub_Name '$ver')
                    ('). Aborting.\n')
                    ('\n')
                    ("Background: uprobes were first added in 3.5. I've tested them on 3.13,\n")
                    ('and found them unsafe, as they can crash or lock up processes, which can\n')
                    ('effectively lock up the system. On 4.0, uprobes seem much safer. You\n')
                    ("can use -F to force tracing, but you've been warned.\n")
                  ]
                )
                (Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})
              ]
            )
            (ControlFlow token:<ControlFlow_Exit exit>)
          ]
          spids: [16777215 1346]
        )
      ]
      spids: [16777215 1370]
    )
    (ForEach
      iter_name: cmd
      iter_words: [{(file)} {(objdump)} {(ldconfig)} {(awk)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (SimpleCommand
              words: [{(which)} {($ VSub_Name '$cmd')}]
              redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DParen
                  child: 
                    (ArithBinary
                      op_id: Arith_NEqual
                      left: (ArithWord w:{($ VSub_QMark '$?')})
                      right: (ArithWord w:{(Lit_Digits 0)})
                    )
                  spids: [1403 1412]
                )
                (C {(die)} 
                  {
                    (DQ ('ERROR: missing ') ($ VSub_Name '$cmd') (' in ') 
                      (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('PATH. ') ($ VSub_Number '$0') (' needs')
                    )
                  } {(DQ ('to use this command. Exiting.'))}
                )
              ]
            )
          ]
          spids: [1391 1434]
        )
      spids: [1381 1389]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (DBracket
          expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$uprobe'))} right:{(DQ )})
        )
        (C {(usage)})
      ]
    )
    (AndOr
      ops: [Op_DAmp]
      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_filter)
                    )
                  right: (ArithVarRef name:opt_tid)
                )
              right: (ArithWord w:{(Lit_Digits 1)})
            )
          spids: [1457 1474]
        )
        (C {(die)} {(DQ ('ERROR: use at most one of -p, -L, or filter.'))})
      ]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (DParen
          child: 
            (ArithBinary
              op_id: Arith_DAmp
              left: (ArithVarRef name:opt_duration)
              right: (ArithVarRef name:opt_view)
            )
          spids: [1486 1495]
        )
        (C {(die)} {(DQ ('ERROR: use either -d or -v.'))})
      ]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_pid) spids:[1507 1512])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(1)} spids:[1522])]
              spids: [1522]
            )
            (ForEach
              iter_name: tid
              iter_words: [{(/proc/) ($ VSub_Name '$pid') (/task/) (Lit_Other '*')}]
              do_arg_iter: F
              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: [1549 1554]
                                )
                              )
                            }
                          spids: [1545]
                        )
                      ]
                      spids: [1545]
                    )
                  ]
                  spids: [1542 1558]
                )
              spids: [1535 1540]
            )
            (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: [1562 1566]
                      )
                    }
                  spids: [1561]
                )
              ]
              spids: [1561]
            )
          ]
          spids: [16777215 1515]
        )
      ]
      spids: [16777215 1571]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_tid) spids:[1575 1580])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:opt_filter) op:Equal rhs:{(1)} spids:[1586])]
              spids: [1586]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filter)
                  op: Equal
                  rhs: {(DQ ('common_pid == ') ($ VSub_Name '$tid'))}
                  spids: [1590]
                )
              ]
              spids: [1590]
            )
          ]
          spids: [16777215 1583]
        )
      ]
      spids: [16777215 1596]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalAnd
                      left: 
                        (BoolBinary
                          op_id: BoolBinary_GlobNEqual
                          left: {(DQ ($ VSub_Name '$uprobe'))}
                          right: {(p) (Lit_Other ':') (Lit_Other '*')}
                        )
                      right: 
                        (BoolBinary
                          op_id: BoolBinary_GlobNEqual
                          left: {(DQ ($ VSub_Name '$uprobe'))}
                          right: {(r) (Lit_Other ':') (Lit_Other '*')}
                        )
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [{(echo)} {(DQ ('ERROR: invalid uprobe definition (should start with p: or r:)'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (C {(usage)})
          ]
          spids: [16777215 1627]
        )
      ]
      spids: [16777215 1642]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:utype)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name uprobe>
                suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(':*')})
                spids: [1696 1700]
              )
            }
          spids: [1695]
        )
      ]
      spids: [1695]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:urest)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name uprobe>
                  suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*:')})
                  spids: [1704 1708]
                ) (' ')
              )
            }
          spids: [1702]
        )
      ]
      spids: [1702]
    )
    (C {(set)} {(--)} {($ VSub_Name '$urest')})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Number '$1')}
                      right: {(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:uname)
                      op: Equal
                      rhs: {(EmptyPart)}
                      spids: [1736]
                    )
                  ]
                  spids: [1736]
                )
              terminator: <Op_Semi ';'>
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:probe)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1739]
                    )
                  ]
                  spids: [1739]
                )
              terminator: <Op_Semi ';'>
            )
            (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uargs)
                  op: Equal
                  rhs: {(DQ ($ VSub_At '$@'))}
                  spids: [1746]
                )
              ]
              spids: [1746]
            )
          ]
          spids: [16777215 1733]
        )
      ]
      else_action: [
        (AndOr
          ops: [Op_DAmp]
          children: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Number '$2')}
                  right: {(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')}
                )
            )
            (C {(die)} {(DQ ('ERROR: invalid probe. See usage (-h).'))})
          ]
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uname)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1775]
                )
              ]
              spids: [1775]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:probe)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [1779]
                )
              ]
              spids: [1779]
            )
          terminator: <Op_Semi ';'>
        )
        (Sentence child:(C {(shift)} {(2)}) terminator:<Op_Semi ';'>)
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:uargs)
              op: Equal
              rhs: {(DQ ($ VSub_At '$@'))}
              spids: [1788]
            )
          ]
          spids: [1788]
        )
      ]
      spids: [1751 1793]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: {($ VSub_Name '$probe')}
                  spids: [1795]
                )
              ]
              spids: [1795]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:path)
              op: Equal
              rhs: 
                {
                  (BracedVarSub
                    token: <VSub_Name path>
                    suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(':*')})
                    spids: [1800 1804]
                  )
                }
              spids: [1799]
            )
          ]
          spids: [1799]
        )
      ]
    )
    (CommandList
      children: [
        (Sentence
          child: 
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:addr)
                  op: Equal
                  rhs: {($ VSub_Name '$probe')}
                  spids: [1806]
                )
              ]
              spids: [1806]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:addr)
              op: Equal
              rhs: 
                {
                  (BracedVarSub
                    token: <VSub_Name addr>
                    suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{('*:')})
                    spids: [1811 1815]
                  )
                }
              spids: [1810]
            )
          ]
          spids: [1810]
        )
      ]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Name '$path')}
                      right: {(Lit_Other '*') (/) (Lit_Other '*')}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:seg)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name path>
                        suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{('*') (Lit_Slash /)})
                        spids: [1840 1845]
                      )
                    }
                  spids: [1839]
                )
              ]
              spids: [1839]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:seg)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name seg>
                        suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('.*')})
                        spids: [1849 1853]
                      )
                    }
                  spids: [1848]
                )
              ]
              spids: [1848]
            )
          ]
          spids: [16777215 1836]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:seg)
              op: Equal
              rhs: {($ VSub_Name '$path')}
              spids: [1858]
            )
          ]
          spids: [1858]
        )
        (C {(set_path)} {($ VSub_Name '$path')})
      ]
      spids: [1855 1870]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ ($ VSub_Name '$addr'))}
                      right: {(0x) (Lit_Other '*')}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$uname'))} right:{(DQ )})
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:uname)
                      op: Equal
                      rhs: {(${ VSub_Name seg) (_) ($ VSub_Name '$addr')}
                      spids: [1914]
                    )
                  ]
                  spids: [1914]
                )
              ]
            )
          ]
          spids: [16777215 1892]
        )
      ]
      else_action: [
        (AndOr
          ops: [Op_DAmp]
          children: [
            (DBracket
              expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(DQ ($ VSub_Name '$uname'))} right:{(DQ )})
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uname)
                  op: Equal
                  rhs: {($ VSub_Name '$addr')}
                  spids: [1939]
                )
              ]
              spids: [1939]
            )
          ]
        )
        (C {(set_addr)} {($ VSub_Name '$path')} {($ VSub_Name '$seg')} {($ VSub_Name '$addr')})
      ]
      spids: [1921 1951]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:uprobe)
          op: Equal
          rhs: 
            {
              (DQ ($ VSub_Name '$utype') (':') ($ VSub_Name '$uname') (' ') ($ VSub_Name '$path') (':') 
                ($ VSub_Name '$addr')
              )
            }
          spids: [1957]
        )
      ]
      spids: [1957]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (DBracket
          expr: (BoolBinary op_id:BoolBinary_GlobNEqual left:{(DQ ($ VSub_Name '$uargs'))} right:{(DQ )})
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:uprobe)
              op: Equal
              rhs: {(DQ ($ VSub_Name '$uprobe') (' ') ($ VSub_Name '$uargs'))}
              spids: [1983]
            )
          ]
          spids: [1983]
        )
      ]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:debug) spids:[1993 1998])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ('uname: ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                  ($ VSub_Name '$uname') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', uprobe: ') 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_Name '$uprobe') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                )
              }
            )
          ]
          spids: [16777215 2001]
        )
      ]
      spids: [16777215 2017]
    )
    (AndOr
      ops: [Op_DPipe]
      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)')
            )
          }
        )
      ]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DParen
                  child: (ArithUnary op_id:Arith_Bang child:(ArithVarRef name:opt_view))
                  spids: [2039 2045]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DParen child:(ArithVarRef name:opt_duration) spids:[2053 2058])
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ('Tracing uprobe ') ($ VSub_Name '$uname') (' for ') 
                          ($ VSub_Name '$duration') (' seconds (buffered)...')
                        )
                      }
                    )
                  ]
                  spids: [16777215 2061]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ ('Tracing uprobe ') ($ VSub_Name '$uname') (' (') ($ VSub_Name '$uprobe') 
                      ('). Ctrl-C to end.')
                    )
                  }
                )
              ]
              spids: [2075 2089]
            )
          ]
          spids: [16777215 2048]
        )
      ]
      spids: [16777215 2091]
    )
    (AndOr
      ops: [Op_DAmp]
      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: [2111 2115]
              ) (' ') ($ VSub_Name '$flock')
            )
          }
        )
      ]
    )
    (AndOr
      ops: [Op_DPipe]
      children: [
        (SimpleCommand
          words: [{(echo)} {($ VSub_Dollar '$$')}]
          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{($ VSub_Name '$flock')})]
        )
        (C {(die)} {(DQ ('ERROR: unable to write ') ($ VSub_Name '$flock') (.))})
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(1)} spids:[2138])]
      spids: [2138]
    )
    (SimpleCommand
      words: [{(echo)} {(nop)}]
      redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(current_tracer)})]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ($ VSub_Name '$uprobe'))}]
                      redirects: [(Redir op:<Redir_DGreat '>>'> fd:16777215 arg_word:{(uprobe_events)})]
                    )
                  ]
                  negated: T
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('ERROR: adding uprobe ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                    ($ VSub_Name '$uprobe') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.)
                  )
                }
              ]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DParen child:(ArithVarRef name:dmesg) spids:[2187 2192])
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ('Last ') ($ VSub_Name '$dmesg') 
                            (' dmesg entries (might contain reason):')
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                    (Pipeline
                      children: [
                        (C {(dmesg)})
                        (C {(tail)} {(-) ($ VSub_Name '$dmesg')})
                        (C {(sed)} {(SQ <'s/^/    /'>)})
                      ]
                      negated: F
                    )
                  ]
                  spids: [16777215 2195]
                )
              ]
              spids: [16777215 2228]
            )
            (C {(edie)} {(DQ (Exiting.))})
          ]
          spids: [16777215 2168]
        )
      ]
      spids: [16777215 2237]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_view) spids:[2241 2246])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(cat)} {(events/uprobes/) ($ VSub_Name '$uname') (/format)}) (C {(edie)} {(DQ )})]
          spids: [16777215 2249]
        )
      ]
      spids: [16777215 2264]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_filter) spids:[2268 2273])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ($ VSub_Name '$filter'))}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(events/uprobes/) ($ VSub_Name '$uname') (/filter)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(edie)} {(DQ ('ERROR: setting filter or -p. Exiting.'))})]
                  spids: [16777215 2296]
                )
              ]
              spids: [16777215 2306]
            )
          ]
          spids: [16777215 2276]
        )
      ]
      spids: [16777215 2308]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_stack) spids:[2312 2317])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {(1)}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(options/userstacktrace)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(edie)} {(DQ ('ERROR: enabling stack traces (-s). Exiting'))})]
                  spids: [16777215 2336]
                )
              ]
              spids: [16777215 2346]
            )
          ]
          spids: [16777215 2320]
        )
      ]
      spids: [16777215 2348]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(1)}]
                      redirects: [
                        (Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(events/uprobes/) ($ VSub_Name '$uname') (/enable)}
                        )
                      ]
                    )
                  ]
                  negated: T
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(edie)} {(DQ ('ERROR: enabling uprobe ') ($ VSub_Name '$uname') ('. Exiting.'))})]
          spids: [16777215 2365]
        )
      ]
      spids: [16777215 2376]
    )
    (C {(warn)} {(DQ ('echo > trace'))})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DParen child:(ArithVarRef name:opt_duration) spids:[2390 2395])
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(sleep)} {($ VSub_Name '$duration')})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DParen child:(ArithVarRef name:opt_headers) spids:[2408 2413])
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(cat)} {(trace)})]
                  spids: [16777215 2416]
                )
              ]
              else_action: [(C {(grep)} {(-v)} {(SQ <'^#'>)} {(trace)})]
              spids: [2424 2438]
            )
          ]
          spids: [16777215 2398]
        )
      ]
      else_action: [
        (AndOr
          ops: [Op_DAmp]
          children: [
            (DParen child:(ArithVarRef name:opt_headers) spids:[2447 2452])
            (C {(cat)} {(trace)})
          ]
        )
        (C {(cat)} {(trace_pipe)})
      ]
      spids: [2440 2465]
    )
    (C {(end)})
  ]
)