(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:append) op:Equal rhs:{(DQ (NO))} spids:[82])]
      spids: [82]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:delete) op:Equal rhs:{(DQ (NO))} spids:[87])]
      spids: [87]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:kenv) op:Equal rhs:{(EmptyPart)} spids:[92])]
      spids: [92]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:force) op:Equal rhs:{(DQ (NO))} spids:[94])]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:nextboot_file)
          op: Equal
          rhs: {(DQ (/boot/nextboot.conf))}
          spids: [99]
        )
      ]
      spids: [99]
    )
    (FuncDef
      name: add_kenv
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair lhs:(LhsName name:var) op:Equal spids:[114])
                (assign_pair lhs:(LhsName name:value) op:Equal spids:[116])
              ]
              spids: [112]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:var)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [120]
                )
              ]
              spids: [120]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:value)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VOp1_Percent
                            arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('*')}
                          )
                        spids: [129 134]
                      )
                    }
                  spids: [128]
                )
              ]
              spids: [128]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:value)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name value>
                        suffix_op: 
                          (StringUnary
                            op_id: VOp1_Pound
                            arg_word: {('*') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)}
                          )
                        spids: [138 143]
                      )
                    }
                  spids: [137]
                )
              ]
              spids: [137]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name kenv))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:kenv)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name kenv) ('\n'))}
                          spids: [165]
                        )
                      ]
                      spids: [165]
                    )
                  ]
                  spids: [16777215 162]
                )
              ]
              spids: [16777215 174]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:kenv)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name kenv) (${ VSub_Name var) ('=') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name value) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                      )
                    }
                  spids: [177]
                )
              ]
              spids: [177]
            )
          ]
          spids: [109]
        )
      spids: [105 108]
    )
    (FuncDef
      name: display_usage
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 211
                  stdin_parts: [
                    ('Usage: nextboot [-af] [-e variable=value] [-k kernel] [-o options]\n')
                    ('       nextboot -D\n')
                  ]
                )
              ]
            )
          ]
          spids: [200]
        )
      spids: [196 199]
    )
    (WhileUntil
      keyword: <KW_While while>
      cond: [
        (Sentence
          child: (C {(getopts)} {(DQ ('aDe:fk:o:'))} {(argument)})
          terminator: <Op_Semi ';'>
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(DQ (${ VSub_Name argument))}
              arms: [
                (case_arm
                  pat_list: [{(a)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:append)
                          op: Equal
                          rhs: {(DQ (YES))}
                          spids: [245]
                        )
                      ]
                      spids: [245]
                    )
                  ]
                  spids: [241 242 251 16777215]
                )
                (case_arm
                  pat_list: [{(D)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:delete)
                          op: Equal
                          rhs: {(DQ (YES))}
                          spids: [258]
                        )
                      ]
                      spids: [258]
                    )
                  ]
                  spids: [254 255 264 16777215]
                )
                (case_arm
                  pat_list: [{(e)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:var)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name OPTARG>
                                suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('=*')})
                                spids: [272 276]
                              )
                            }
                          spids: [271]
                        )
                      ]
                      spids: [271]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:value)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name OPTARG>
                                suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*=')})
                                spids: [280 284]
                              )
                            }
                          spids: [279]
                        )
                      ]
                      spids: [279]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$var'))} {(-o)} {(-z)} 
                                  {(DQ ($ VSub_Name '$value'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(display_usage)})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [16777215 308]
                        )
                      ]
                      spids: [16777215 319]
                    )
                    (C {(add_kenv)} {(DQ ($ VSub_Name '$var'))} {(DQ ($ VSub_Name '$value'))})
                  ]
                  spids: [267 268 333 16777215]
                )
                (case_arm
                  pat_list: [{(f)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:force)
                          op: Equal
                          rhs: {(DQ (YES))}
                          spids: [340]
                        )
                      ]
                      spids: [340]
                    )
                  ]
                  spids: [336 337 346 16777215]
                )
                (case_arm
                  pat_list: [{(k)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:kernel)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name OPTARG))}
                          spids: [353]
                        )
                      ]
                      spids: [353]
                    )
                    (C {(add_kenv)} {(kernel)} {(DQ ($ VSub_Name '$kernel'))})
                  ]
                  spids: [349 350 370 16777215]
                )
                (case_arm
                  pat_list: [{(o)}]
                  action: [(C {(add_kenv)} {(kernel_options)} {(DQ (${ VSub_Name OPTARG))})]
                  spids: [373 374 388 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(display_usage)})
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [391 392 403 16777215]
                )
              ]
              spids: [230 238 406]
            )
          ]
          spids: [227 408]
        )
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(${ VSub_Name delete)} {(Lit_Other '=')} {(DQ (YES))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(rm)} {(-f)} {(${ VSub_Name nextboot_file)})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})
          ]
          spids: [16777215 428]
        )
      ]
      spids: [16777215 444]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name kenv))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(display_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})]
          spids: [16777215 462]
        )
      ]
      spids: [16777215 472]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name kernel))} {(-a)} {(${ VSub_Name force)} 
                  {(Lit_Other '=')} {(DQ (NO))} {(-a)} {(KW_Bang '!')} {(-d)} {(/boot/) (${ VSub_Name kernel)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} 
              {(DQ ('Error: /boot/') (${ VSub_Name kernel) (" doesn't exist. Use -f to override."))}
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 513]
        )
      ]
      spids: [16777215 531]
    )
    (Pipeline
      children: [
        (SimpleCommand
          words: [{(df)} {(-Tn)} {(DQ (/boot/))}]
          redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
        )
        (WhileUntil
          keyword: <KW_While while>
          cond: [(Sentence child:(C {(read)} {(_fs)} {(_type)} {(_other)}) terminator:<Op_Semi ';'>)]
          body: 
            (DoGroup
              children: [
                (AndOr
                  ops: [Op_DPipe]
                  children: [
                    (C {(Lit_Other '[')} {(DQ (zfs))} {(Lit_Other '=')} {(DQ (${ VSub_Name _type))} 
                      {(Lit_Other ']')}
                    )
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                )
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})
                    (HereDoc
                      op: <Redir_DLessDash '<<-'>
                      fd: 16777215
                      here_begin: {(EOF)}
                      here_end_span_id: 594
                      stdin_parts: [
                        ('WARNING: loader(8) has only R/O support for ZFS\n')
                        ('nextboot.conf will NOT be reset in case of kernel boot failure\n')
                      ]
                    )
                  ]
                )
              ]
              spids: [559 595]
            )
        )
      ]
      negated: F
    )
    (C {(set)} {(-e)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:nextboot_tmp)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(mktemp)} 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(dirname)} {(${ VSub_Name nextboot_file)})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [607 613]
                          ) (/nextboot.XXXXXX)
                        }
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [604 615]
              )
            }
          spids: [603]
        )
      ]
      spids: [603]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(${ VSub_Name append)} {(Lit_Other '=')} {(DQ (YES))} {(-a)} {(-f)} 
                  {(${ VSub_Name nextboot_file)} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(cp)} {(-f)} {(${ VSub_Name nextboot_file)} {(${ VSub_Name nextboot_tmp)})]
          spids: [16777215 643]
        )
      ]
      spids: [16777215 658]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op:<Redir_DGreat '>>'> fd:16777215 arg_word:{(${ VSub_Name nextboot_tmp)})
        (HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(EOF)}
          here_end_span_id: 681
          stdin_parts: [
            ('nextboot_enable=')
            (Right_DoubleQuote '"')
            (YES)
            (Right_DoubleQuote '"')
            ('\n')
            ($ VSub_Name '$kenv')
            ('\n')
          ]
        )
      ]
    )
    (C {(fsync)} {(${ VSub_Name nextboot_tmp)})
    (C {(mv)} {(${ VSub_Name nextboot_tmp)} {(${ VSub_Name nextboot_file)})
  ]
)