(command.CommandList
  children: [
    (command.ShFunction
      name: _cryptsetup_name
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:12)
                        words: [
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:14)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(compgen)} {(-X)} {(control)} {(-W)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '$( command ls /dev/mapper )'
                                            span_id: 25
                                          )
                                        )
                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                    )
                                  ]
                                )
                            )
                          }
                        ]
                      )
                    }
                  spids: [11]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _cryptsetup_device
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:cur)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:cur span_id:52)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VTest_ColonEquals
                            arg_word: {(Id.Lit_Slash /) (dev) (Id.Lit_Slash /)}
                          )
                      )
                    }
                  spids: [50]
                )
              ]
            )
            (C {(_filedir)})
          ]
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShFunction
          name: _cryptsetup
          body: 
            (command.BraceGroup
              children: [
                (C {(local)} {(cur)} {(prev)} {(words)} {(cword)} {(split)})
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (C {(_init_completion)} {(-s)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:91)
                    )
                  ]
                )
                (command.Case
                  to_match: {($ Id.VSub_DollarName '$prev')}
                  arms: [
                    (case_arm
                      pat_list: [{(--key-file)} {(--master-key-file)} {(--header-backup-file)} {(-d)}]
                      action: [
                        (C {(_filedir)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:115)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [102 109 120 -1]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {($ Id.VSub_DollarName '$split')})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:131)
                    )
                  ]
                )
                (C {(local)} {(arg)})
                (C {(_get_first_arg)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {($ Id.VSub_DollarName '$arg')}
                                )
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:152)
                        )
                      ]
                      action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$cur'))}
                                          right: {(-) (Id.Lit_Other '*')}
                                        )
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:171)
                                )
                              ]
                              action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (sh_array_literal
                                            left: (Token id:Id.Op_LParen val:'(' span_id:177)
                                            words: [
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_DollarParen
                                                      val: '$('
                                                      span_id: 179
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(compgen)} {(-W)} 
                                                          {
                                                            (SQ 
                                                              (Token
                                                                id: Id.Lit_Chars
                                                                val: '$( _parse_help "$1" )'
                                                                span_id: 186
                                                              )
                                                            )
                                                          } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                        )
                                                      ]
                                                    )
                                                )
                                              }
                                            ]
                                          )
                                        }
                                      spids: [176]
                                    )
                                  ]
                                )
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {($ Id.VSub_DollarName '$COMPREPLY')}
                                          right: {(Id.Lit_Other '*') (Id.BoolBinary_GlobEqual '=')}
                                        )
                                    )
                                    (C {(compopt)} {(-o)} {(nospace)})
                                  ]
                                )
                              ]
                              spids: [157 173]
                            )
                          ]
                          else_action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:224)
                                        words: [
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 226
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (C {(compgen)} {(-W)} 
                                                      {
                                                        (SQ 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 
'create remove status resize luksFormat\n'
                                                            span_id: 233
                                                          ) 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 
'                luksOpen luksClose luksSuspend luksResume luksAddKey\n'
                                                            span_id: 234
                                                          ) 
                                                          (Token
                                                            id: Id.Lit_Chars
                                                            val: 
'                luksRemoveKey luksKillSlot luksDelKey luksUUID isLuks\n'
                                                            span_id: 235
                                                          ) (Token id:Id.Lit_Chars val:'                luksDump luksHeaderBackup luksHeaderRestore' span_id:236)
                                                        )
                                                      } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [223]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                      spids: [143 154]
                    )
                  ]
                  else_action: [
                    (C {(local)} {(args)})
                    (C {(_count_args)})
                    (command.Case
                      to_match: {($ Id.VSub_DollarName '$arg')}
                      arms: [
                        (case_arm
                          pat_list: [{(create)}]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_name)})]
                                  spids: [282 283 289 -1]
                                )
                                (case_arm
                                  pat_list: [{(3)}]
                                  action: [(C {(_cryptsetup_device)})]
                                  spids: [292 293 299 -1]
                                )
                              ]
                            )
                          ]
                          spids: [271 272 305 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(remove)}
                            {(status)}
                            {(resize)}
                            {(luksClose)}
                            {(luksSuspend)}
                            {(luksResume)}
                          ]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_name)})]
                                  spids: [329 330 336 -1]
                                )
                              ]
                            )
                          ]
                          spids: [308 319 342 -1]
                        )
                        (case_arm
                          pat_list: [{(luksFormat)} {(luksAddKey)} {(luksRemoveKey)}]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_device)})]
                                  spids: [360 361 367 -1]
                                )
                                (case_arm
                                  pat_list: [{(3)}]
                                  action: [(C {(_filedir)})]
                                  spids: [370 371 377 -1]
                                )
                              ]
                            )
                          ]
                          spids: [345 350 383 -1]
                        )
                        (case_arm
                          pat_list: [{(luksOpen)}]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_device)})]
                                  spids: [397 398 404 -1]
                                )
                                (case_arm
                                  pat_list: [{(3)}]
                                  action: [(C {(_cryptsetup_name)})]
                                  spids: [407 408 414 -1]
                                )
                              ]
                            )
                          ]
                          spids: [386 387 420 -1]
                        )
                        (case_arm
                          pat_list: [{(luksKillSlot)} {(luksDelKey)} {(luksUUID)} {(isLuks)} {(luksDump)}]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_device)})]
                                  spids: [442 443 449 -1]
                                )
                              ]
                            )
                          ]
                          spids: [423 432 455 -1]
                        )
                        (case_arm
                          pat_list: [{(luksHeaderBackup)} {(luksHeaderRestore)}]
                          action: [
                            (command.Case
                              to_match: {($ Id.VSub_DollarName '$args')}
                              arms: [
                                (case_arm
                                  pat_list: [{(2)}]
                                  action: [(C {(_cryptsetup_device)})]
                                  spids: [471 472 478 -1]
                                )
                                (case_arm
                                  pat_list: [{(3)}]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:COMPREPLY)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (sh_array_literal
                                                left: (Token id:Id.Op_LParen val:'(' span_id:486)
                                                words: [
                                                  {
                                                    (SQ 
                                                      (Token
                                                        id: Id.Lit_Chars
                                                        val: --header-backup-file
                                                        span_id: 489
                                                      )
                                                    )
                                                  }
                                                ]
                                              )
                                            }
                                          spids: [485]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [481 482 495 -1]
                                )
                              ]
                            )
                          ]
                          spids: [458 461 501 -1]
                        )
                      ]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:511)
                  arg_word: {(0)}
                )
              ]
            )
        )
        (C {(complete)} {(-F)} {(_cryptsetup)} {(cryptsetup)})
      ]
    )
  ]
)