(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'CRLF conversion all combinations' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(EXPENSIVE)})] negated:T)]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ ('EXPENSIVE not set'))}
                  spids: [26]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [15 23]
        )
      ]
    )
    (command.ShFunction
      name: compare_files
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\015\\000' span_id:48))} {(QN)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:53)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$1'))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:58)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$1')) (.expect)}
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (command.Simple
                      words: [{(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\015\\000' span_id:70))} {(QN)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:75)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_Number '$2'))}
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:Z span_id:87))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:90)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_Number '$2')) (.actual)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$1')) (.expect)} 
                  {(DQ ($ Id.VSub_Number '$2')) (.actual)}
                )
                (C {(rm)} {(DQ ($ Id.VSub_Number '$1')) (.expect)} 
                  {(DQ ($ Id.VSub_Number '$2')) (.actual)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: compare_ws_file
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pfx)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [137]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:exp)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2') (.expect)}
                  spids: [141]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:act)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$pfx') (.actual.) ($ Id.VSub_Number '$3')}
                  spids: [146]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(tr)}
                    {(SQ (Token id:Id.Lit_Chars val:'\\015\\000abcdef0123456789' span_id:155))}
                    {(QN00000000000000000)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:160)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$2'))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:165)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$exp'))}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(tr)}
                    {(SQ (Token id:Id.Lit_Chars val:'\\015\\000abcdef0123456789' span_id:176))}
                    {(QN00000000000000000)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:181)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$3'))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:186)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$act'))}
                    )
                  ]
                )
                (C {(test_cmp)} {(DQ ($ Id.VSub_DollarName '$exp'))} {(DQ ($ Id.VSub_DollarName '$act'))})
                (C {(rm)} {(DQ ($ Id.VSub_DollarName '$exp'))} {(DQ ($ Id.VSub_DollarName '$act'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: create_gitattributes
      body: 
        (command.BraceGroup
          children: [
            (command.BraceGroup
              children: [
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:231)
                  cond: [
                    (C {(test)} {(DQ ($ Id.VSub_Pound '$#'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                      {(0)}
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.Case
                              to_match: {(DQ ($ Id.VSub_Number '$1'))}
                              arms: [
                                (case_arm
                                  pat_list: [{(auto)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt text=auto' span_id:263))}
                                    )
                                  ]
                                  spids: [257 258 266 -1]
                                )
                                (case_arm
                                  pat_list: [{(ident)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt ident' span_id:275))}
                                    )
                                  ]
                                  spids: [269 270 278 -1]
                                )
                                (case_arm
                                  pat_list: [{(text)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt text' span_id:287))}
                                    )
                                  ]
                                  spids: [281 282 290 -1]
                                )
                                (case_arm
                                  pat_list: [{(-text)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt -text' span_id:299))}
                                    )
                                  ]
                                  spids: [293 294 302 -1]
                                )
                                (case_arm
                                  pat_list: [{(crlf)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt eol=crlf' span_id:311))}
                                    )
                                  ]
                                  spids: [305 306 314 -1]
                                )
                                (case_arm
                                  pat_list: [{(lf)}]
                                  action: [
                                    (C {(echo)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'*.txt eol=lf' span_id:323))}
                                    )
                                  ]
                                  spids: [317 318 326 -1]
                                )
                                (case_arm
                                  pat_list: [{(DQ )}]
                                  spids: [329 331 333 -1]
                                )
                                (case_arm
                                  pat_list: [{(Id.Lit_Star '*')}]
                                  action: [
                                    (command.Simple
                                      words: [
                                        {(echo)}
                                        {(invalid)}
                                        {(attribute) (Id.Lit_Other ':')}
                                        {(DQ ($ Id.VSub_Number '$1'))}
                                      ]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:342)
                                          fd: -1
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:355)
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [336 337 360 -1]
                                )
                              ]
                            )
                            (C {(shift)})
                          ]
                        )
                      ]
                    )
                )
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:376)
                  fd: -1
                  arg_word: {(.gitattributes)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: create_NNO_files
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: crlf
              iter_words: [{(false)} {(true)} {(input)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ForEach
                      iter_name: attr
                      iter_words: [{(DQ )} {(auto)} {(text)} {(-text)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ForEach
                              iter_name: aeol
                              iter_words: [{(DQ )} {(lf)} {(crlf)}]
                              do_arg_iter: F
                              body: 
                                (command.DoGroup
                                  children: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:pfx)
                                          op: assign_op.Equal
                                          rhs: 
                                            {(NNO_attr_) (${ Id.VSub_Name attr) (_aeol_) 
                                              (${ Id.VSub_Name aeol) (_) (${ Id.VSub_Name crlf)
                                            }
                                          spids: [442]
                                        )
                                      ]
                                    )
                                    (command.AndOr
                                      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                                      children: [
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ Id.VSub_Name pfx) (_LF.txt)})
                                        (C {(cp)} {(CRLF_mix_LF)} {(${ Id.VSub_Name pfx) (_CRLF.txt)})
                                        (C {(cp)} {(CRLF_mix_LF)} 
                                          {(${ Id.VSub_Name pfx) (_CRLF_mix_LF.txt)}
                                        )
                                        (C {(cp)} {(CRLF_mix_LF)} 
                                          {(${ Id.VSub_Name pfx) (_LF_mix_CR.txt)}
                                        )
                                        (C {(cp)} {(CRLF_mix_LF)} 
                                          {(${ Id.VSub_Name pfx) (_CRLF_nul.txt)}
                                        )
                                      ]
                                    )
                                  ]
                                )
                            )
                          ]
                        )
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: check_warning
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(LF_CRLF)}]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('warning: LF will be replaced by CRLF'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:552)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [543 544 558 -1]
                )
                (case_arm
                  pat_list: [{(CRLF_LF)}]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('warning: CRLF will be replaced by LF'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:570)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [561 562 576 -1]
                )
                (case_arm
                  pat_list: [{(SQ )}]
                  action: [
                    (command.Simple
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:583)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_Number '$2')) (.expect)}
                        )
                      ]
                    )
                  ]
                  spids: [579 581 589 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          words: [
                            {(echo)}
                            {(DQ ('Illegal 1')) (Id.Lit_Other ':')}
                            {(DQ ($ Id.VSub_Number '$1'))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:597)
                              fd: -1
                              arg_word: {(2)}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:609)
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:611)
                      arg_word: {(false)}
                    )
                  ]
                  spids: [592 593 615 -1]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(DQ ('will be replaced by'))} {(DQ ($ Id.VSub_Number '$2'))})
                (C {(sed)} {(-e)} 
                  {
                    (DQ (s/) (Id.Lit_Other '\\') ('(.*') (Id.Lit_Other '\\') (') in [^ ]*') 
                      (Id.Lit_Other '$') (/) (Id.Lit_Other '\\') (1/)
                    )
                  }
                )
                (command.Simple
                  words: [{(uniq)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:653)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$2')) (.actual)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$2')) (.expect)} 
              {(DQ ($ Id.VSub_Number '$2')) (.actual)}
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_check_warn
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlf)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [683]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:attr)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [687]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfname)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [691]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlfname)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [695]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfmixcrlf)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$5')}
                  spids: [699]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfmixcr)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$6')}
                  spids: [703]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlfnul)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$7')}
                  spids: [707]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pfx)
                  op: assign_op.Equal
                  rhs: {(crlf_) (${ Id.VSub_Name crlf) (_attr_) (${ Id.VSub_Name attr)}
                  spids: [711]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ Id.VSub_DollarName '$attr'))})
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(LF_mix_CR)} {(CRLF_mix_LF)} {(LF_nul)} {(CRLF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:fname)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name pfx) (_) ($ Id.VSub_DollarName '$f') (.txt)}
                                  spids: [753]
                                )
                              ]
                            )
                            (C {(cp)} {($ Id.VSub_DollarName '$f')} {($ Id.VSub_DollarName '$fname')})
                            (command.Simple
                              words: [
                                {(git)}
                                {(-c)}
                                {(core.autocrlf) (Id.Lit_Equals '=') ($ Id.VSub_DollarName '$crlf')}
                                {(add)}
                                {($ Id.VSub_DollarName '$fname')}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'2>' span_id:785)
                                  fd: 2
                                  arg_word: 
                                    {
                                      (DQ (${ Id.VSub_Name pfx) (_) ($ Id.VSub_DollarName '$f') (.err))
                                    }
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                )
                (C {(git)} {(commit)} {(-m)} {(DQ ('core.autocrlf ') ($ Id.VSub_DollarName '$crlf'))})
                (C {(check_warning)} {(DQ ($ Id.VSub_DollarName '$lfname'))} 
                  {(${ Id.VSub_Name pfx) (_LF.err)}
                )
                (C {(check_warning)} {(DQ ($ Id.VSub_DollarName '$crlfname'))} 
                  {(${ Id.VSub_Name pfx) (_CRLF.err)}
                )
                (C {(check_warning)} {(DQ ($ Id.VSub_DollarName '$lfmixcrlf'))} 
                  {(${ Id.VSub_Name pfx) (_CRLF_mix_LF.err)}
                )
                (C {(check_warning)} {(DQ ($ Id.VSub_DollarName '$lfmixcr'))} 
                  {(${ Id.VSub_Name pfx) (_LF_mix_CR.err)}
                )
                (C {(check_warning)} {(DQ ($ Id.VSub_DollarName '$crlfnul'))} 
                  {(${ Id.VSub_Name pfx) (_CRLF_nul.err)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_chk_wrnNNO
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:attr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [893]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:896)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:aeol)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [901]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:904)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [909]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:912)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfwarn)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [917]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:920)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfwarn)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [925]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:928)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcrlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [933]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:936)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [941]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:944)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfnul)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [949]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:952)
            )
            (C {(shift)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pfx)
                  op: assign_op.Equal
                  rhs: 
                    {(NNO_attr_) (${ Id.VSub_Name attr) (_aeol_) (${ Id.VSub_Name aeol) (_) 
                      (${ Id.VSub_Name crlf)
                    }
                  spids: [957]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ Id.VSub_DollarName '$attr'))} 
                  {($ Id.VSub_DollarName '$aeol')}
                )
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:fname)
                                  op: assign_op.Equal
                                  rhs: {(${ Id.VSub_Name pfx) (_) ($ Id.VSub_DollarName '$f') (.txt)}
                                  spids: [1007]
                                )
                              ]
                            )
                            (C {(cp)} {($ Id.VSub_DollarName '$f')} {($ Id.VSub_DollarName '$fname')})
                            (command.Simple
                              words: [{(printf)} {(Z)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:1031)
                                  fd: -1
                                  arg_word: {(DQ ($ Id.VSub_DollarName '$fname'))}
                                )
                              ]
                            )
                            (command.Simple
                              words: [
                                {(git)}
                                {(-c)}
                                {(core.autocrlf) (Id.Lit_Equals '=') ($ Id.VSub_DollarName '$crlf')}
                                {(add)}
                                {($ Id.VSub_DollarName '$fname')}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'2>' span_id:1051)
                                  fd: 2
                                  arg_word: 
                                    {
                                      (DQ (${ Id.VSub_Name pfx) (_) ($ Id.VSub_DollarName '$f') (.err))
                                    }
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files crlf=') ($ Id.VSub_DollarName '$crlf') (' attr=') 
                  ($ Id.VSub_DollarName '$attr') (' LF')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1077) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcheck_warning "$lfwarn" ${pfx}_LF.err\n'
                    span_id: 1078
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1079)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ Id.VSub_DollarName '$attr') (' aeol=') 
                  ($ Id.VSub_DollarName '$aeol') (' crlf=') ($ Id.VSub_DollarName '$crlf') (' CRLF')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1096) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcheck_warning "$crlfwarn" ${pfx}_CRLF.err\n'
                    span_id: 1097
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1098)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ Id.VSub_DollarName '$attr') (' aeol=') 
                  ($ Id.VSub_DollarName '$aeol') (' crlf=') ($ Id.VSub_DollarName '$crlf') (' CRLF_mix_LF')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1116) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcheck_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err\n'
                    span_id: 1117
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1118)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ Id.VSub_DollarName '$attr') (' aeol=') 
                  ($ Id.VSub_DollarName '$aeol') (' crlf=') ($ Id.VSub_DollarName '$crlf') (' LF_mix_cr')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1136) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcheck_warning "$lfmixcr" ${pfx}_LF_mix_CR.err\n'
                    span_id: 1137
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1138)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('commit NNO files attr=') ($ Id.VSub_DollarName '$attr') (' aeol=') 
                  ($ Id.VSub_DollarName '$aeol') (' crlf=') ($ Id.VSub_DollarName '$crlf') (' CRLF_nul')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1156) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcheck_warning "$crlfnul" ${pfx}_CRLF_nul.err\n'
                    span_id: 1157
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1158)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: stats_ascii
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(LF)}]
                  action: [(C {(echo)} {(lf)})]
                  spids: [1181 1182 1190 -1]
                )
                (case_arm
                  pat_list: [{(CRLF)}]
                  action: [(C {(echo)} {(crlf)})]
                  spids: [1193 1194 1202 -1]
                )
                (case_arm
                  pat_list: [{(CRLF_mix_LF)}]
                  action: [(C {(echo)} {(mixed)})]
                  spids: [1205 1206 1214 -1]
                )
                (case_arm
                  pat_list: [{(LF_mix_CR)} {(CRLF_nul)} {(LF_nul)} {(CRLF_mix_CR)}]
                  action: [(C {(echo)} {(DQ (-text))})]
                  spids: [1217 1224 1234 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [(C {(echo)} {(error_invalid)} {($ Id.VSub_Number '$1')})]
                  spids: [1237 1238 1248 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: attr_ascii
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_Number '$1') (Id.Lit_Comma ',') ($ Id.VSub_Number '$2')}
              arms: [
                (case_arm
                  pat_list: [{(-text) (Id.Lit_Comma ',') (Id.Lit_Star '*')}]
                  action: [(C {(echo)} {(DQ (-text))})]
                  spids: [1284 1287 1295 -1]
                )
                (case_arm
                  pat_list: [{(text) (Id.Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ (text))})]
                  spids: [1298 1300 1308 -1]
                )
                (case_arm
                  pat_list: [{(text) (Id.Lit_Comma ',') (lf)}]
                  action: [(C {(echo)} {(DQ ('text eol=lf'))})]
                  spids: [1311 1314 1322 -1]
                )
                (case_arm
                  pat_list: [{(text) (Id.Lit_Comma ',') (crlf)}]
                  action: [(C {(echo)} {(DQ ('text eol=crlf'))})]
                  spids: [1325 1328 1336 -1]
                )
                (case_arm
                  pat_list: [{(auto) (Id.Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text=auto'))})]
                  spids: [1339 1341 1349 -1]
                )
                (case_arm
                  pat_list: [{(auto) (Id.Lit_Comma ',') (lf)}]
                  action: [(C {(echo)} {(DQ ('text=auto eol=lf'))})]
                  spids: [1352 1355 1363 -1]
                )
                (case_arm
                  pat_list: [{(auto) (Id.Lit_Comma ',') (crlf)}]
                  action: [(C {(echo)} {(DQ ('text=auto eol=crlf'))})]
                  spids: [1366 1369 1377 -1]
                )
                (case_arm
                  pat_list: [{(lf) (Id.Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text eol=lf'))})]
                  spids: [1380 1382 1390 -1]
                )
                (case_arm
                  pat_list: [{(crlf) (Id.Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ ('text eol=crlf'))})]
                  spids: [1393 1395 1403 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Comma ',')}]
                  action: [(C {(echo)} {(DQ )})]
                  spids: [1406 1407 1414 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (C {(echo)} {(invalid_attr)} 
                      {(DQ ($ Id.VSub_Number '$1') (',') ($ Id.VSub_Number '$2'))}
                    )
                  ]
                  spids: [1417 1418 1430 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_files_in_repo
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlf)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1446]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:attr)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [1450]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfname)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [1454]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlfname)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [1458]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfmixcrlf)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$5')}
                  spids: [1462]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lfmixcr)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$6')}
                  spids: [1466]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:crlfnul)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$7')}
                  spids: [1470]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:pfx)
                      op: assign_op.Equal
                      rhs: {(crlf_) (${ Id.VSub_Name crlf) (_attr_) (${ Id.VSub_Name attr) (_)}
                      spids: [1474]
                    )
                  ]
                )
                (C {(compare_files)} {($ Id.VSub_DollarName '$lfname')} {(${ Id.VSub_Name pfx) (LF.txt)})
                (C {(compare_files)} {($ Id.VSub_DollarName '$crlfname')} 
                  {(${ Id.VSub_Name pfx) (CRLF.txt)}
                )
                (C {(compare_files)} {($ Id.VSub_DollarName '$lfmixcrlf')} 
                  {(${ Id.VSub_Name pfx) (CRLF_mix_LF.txt)}
                )
                (C {(compare_files)} {($ Id.VSub_DollarName '$lfmixcr')} 
                  {(${ Id.VSub_Name pfx) (LF_mix_CR.txt)}
                )
                (C {(compare_files)} {($ Id.VSub_DollarName '$crlfnul')} 
                  {(${ Id.VSub_Name pfx) (CRLF_nul.txt)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_in_repo_NNO
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:attr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1556]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1559)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:aeol)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1564]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1567)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1572]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1575)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfname)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1580]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1583)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfname)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1588]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1591)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcrlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1596]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1599)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1604]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1607)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfnul)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1612]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1615)
            )
            (C {(shift)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pfx)
                  op: assign_op.Equal
                  rhs: 
                    {(NNO_attr_) (${ Id.VSub_Name attr) (_aeol_) (${ Id.VSub_Name aeol) (_) 
                      (${ Id.VSub_Name crlf)
                    }
                  spids: [1620]
                )
              ]
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ Id.VSub_DollarName '$lfname') (' ') (${ Id.VSub_Name pfx) 
                  (_LF.txt)
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1648) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcompare_files $lfname ${pfx}_LF.txt\n'
                    span_id: 1649
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1650)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ Id.VSub_DollarName '$crlfname') (' ') (${ Id.VSub_Name pfx) 
                  (_CRLF.txt)
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1667) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcompare_files $crlfname ${pfx}_CRLF.txt\n'
                    span_id: 1668
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1669)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ Id.VSub_DollarName '$lfmixcrlf') (' ') (${ Id.VSub_Name pfx) 
                  (_CRLF_mix_LF.txt)
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1686) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcompare_files $lfmixcrlf ${pfx}_CRLF_mix_LF.txt\n'
                    span_id: 1687
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1688)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ Id.VSub_DollarName '$lfmixcr') (' ') (${ Id.VSub_Name pfx) 
                  (_LF_mix_CR.txt)
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1705) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcompare_files $lfmixcr ${pfx}_LF_mix_CR.txt\n'
                    span_id: 1706
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1707)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('compare_files ') ($ Id.VSub_DollarName '$crlfnul') (' ') (${ Id.VSub_Name pfx) 
                  (_CRLF_nul.txt)
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1724) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcompare_files $crlfnul ${pfx}_CRLF_nul.txt\n'
                    span_id: 1725
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:1726)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: checkout_files
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:attr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1740]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1743)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:ident)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1748]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1750)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:aeol)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1755]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1758)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1763]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1766)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:ceol)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1771]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1774)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfname)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1779]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1782)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfname)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1787]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1790)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcrlf)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1795]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1798)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:lfmixcr)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1803]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1806)
            )
            (C {(shift)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:crlfnul)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1811]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1814)
            )
            (C {(shift)})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(create_gitattributes)} {(DQ ($ Id.VSub_DollarName '$attr'))} 
                  {($ Id.VSub_DollarName '$ident')} {($ Id.VSub_DollarName '$aeol')}
                )
                (C {(git)} {(config)} {(core.autocrlf)} {($ Id.VSub_DollarName '$crlf')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:pfx)
                      op: assign_op.Equal
                      rhs: 
                        {(eol_) (${ Id.VSub_Name ceol) (_crlf_) (${ Id.VSub_Name crlf) (_attr_) 
                          (${ Id.VSub_Name attr) (_)
                        }
                      spids: [1843]
                    )
                  ]
                )
                (command.ForEach
                  iter_name: f
                  iter_words: [{(LF)} {(CRLF)} {(LF_mix_CR)} {(CRLF_mix_LF)} {(LF_nul)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(rm)} {(crlf_false_attr__) ($ Id.VSub_DollarName '$f') (.txt)})
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$ceol'))})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:1899)
                                    )
                                  ]
                                  action: [
                                    (C {(git)} {(checkout)} 
                                      {(crlf_false_attr__) ($ Id.VSub_DollarName '$f') (.txt)}
                                    )
                                  ]
                                  spids: [1890 1901]
                                )
                              ]
                              else_action: [
                                (C {(git)} {(-c)} 
                                  {(core.eol) (Id.Lit_Equals '=') ($ Id.VSub_DollarName '$ceol')} {(checkout)} {(crlf_false_attr__) ($ Id.VSub_DollarName '$f') (.txt)}
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
            (C {(test_expect_success)} 
              {
                (DQ ('ls-files --eol attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1954) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_when_finished "rm expect actual" &&\n'
                    span_id: 1955
                  ) (Token id:Id.Lit_Chars val:'\t\tsort <<-EOF >expect &&\n' span_id:1956) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt\n'
                    span_id: 1957
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt\n'
                    span_id: 1958
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt\n'
                    span_id: 1959
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt\n'
                    span_id: 1960
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt\n'
                    span_id: 1961
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\ti/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt\n'
                    span_id: 1962
                  ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:1963) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit ls-files --eol crlf_false_attr__* |\n'
                    span_id: 1964
                  ) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/\t/ /g" -e "s/  */ /g" |\n' span_id:1965) 
                  (Token id:Id.Lit_Chars val:'\t\tsort >actual &&\n' span_id:1966) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:1967) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:1968)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol') (' file=LF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ Id.VSub_DollarName '$pfx') (' ') 
                  ($ Id.VSub_DollarName '$lfname') ('    crlf_false_attr__LF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol') (' file=CRLF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ Id.VSub_DollarName '$pfx') (' ') 
                  ($ Id.VSub_DollarName '$crlfname') ('  crlf_false_attr__CRLF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol') (' file=CRLF_mix_LF')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ Id.VSub_DollarName '$pfx') (' ') 
                  ($ Id.VSub_DollarName '$lfmixcrlf') (' crlf_false_attr__CRLF_mix_LF.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol') (' file=LF_mix_CR')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ Id.VSub_DollarName '$pfx') (' ') 
                  ($ Id.VSub_DollarName '$lfmixcr') ('   crlf_false_attr__LF_mix_CR.txt\n') ('\t')
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('checkout attr=') ($ Id.VSub_DollarName '$attr') (' ') 
                  ($ Id.VSub_DollarName '$ident') (' aeol=') ($ Id.VSub_DollarName '$aeol') (' core.autocrlf=') ($ Id.VSub_DollarName '$crlf') 
                  (' core.eol=') ($ Id.VSub_DollarName '$ceol') (' file=LF_nul')
                )
              } 
              {
                (DQ ('\n') ('\t\tcompare_ws_file ') ($ Id.VSub_DollarName '$pfx') (' ') 
                  ($ Id.VSub_DollarName '$crlfnul') ('   crlf_false_attr__LF_nul.txt\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ls-files --eol -o Text/Binary' span_id:2118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2122) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm expect actual TeBi_*" &&\n'
            span_id: 2123
          ) (Token id:Id.Lit_Chars val:'\tSTRT=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA &&\n' span_id:2124) 
          (Token id:Id.Lit_Chars val:'\tSTR=$STRT$STRT$STRT$STRT &&\n' span_id:2125) (Token id:Id.Lit_Chars val:'\tprintf "${STR}BBB\\001" >TeBi_127_S &&\n' span_id:2126) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "${STR}BBBB\\001">TeBi_128_S &&\n'
            span_id: 2127
          ) (Token id:Id.Lit_Chars val:'\tprintf "${STR}BBB\\032" >TeBi_127_E &&\n' span_id:2128) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "\\032${STR}BBB" >TeBi_E_127 &&\n'
            span_id: 2129
          ) (Token id:Id.Lit_Chars val:'\tprintf "${STR}BBBB\\000">TeBi_128_N &&\n' span_id:2130) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "${STR}BBB\\012">TeBi_128_L &&\n'
            span_id: 2131
          ) (Token id:Id.Lit_Chars val:'\tprintf "${STR}BBB\\015">TeBi_127_C &&\n' span_id:2132) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "${STR}BB\\015\\012" >TeBi_126_CL &&\n'
            span_id: 2133
          ) (Token id:Id.Lit_Chars val:'\tprintf "${STR}BB\\015\\012\\015" >TeBi_126_CLC &&\n' span_id:2134) 
          (Token id:Id.Lit_Chars val:'\tsort <<-\\EOF >expect &&\n' span_id:2135) (Token id:Id.Lit_Chars val:'\ti/ w/-text TeBi_127_S\n' span_id:2136) 
          (Token id:Id.Lit_Chars val:'\ti/ w/none TeBi_128_S\n' span_id:2137) (Token id:Id.Lit_Chars val:'\ti/ w/none TeBi_127_E\n' span_id:2138) 
          (Token id:Id.Lit_Chars val:'\ti/ w/-text TeBi_E_127\n' span_id:2139) (Token id:Id.Lit_Chars val:'\ti/ w/-text TeBi_128_N\n' span_id:2140) 
          (Token id:Id.Lit_Chars val:'\ti/ w/lf TeBi_128_L\n' span_id:2141) (Token id:Id.Lit_Chars val:'\ti/ w/-text TeBi_127_C\n' span_id:2142) 
          (Token id:Id.Lit_Chars val:'\ti/ w/crlf TeBi_126_CL\n' span_id:2143) (Token id:Id.Lit_Chars val:'\ti/ w/-text TeBi_126_CLC\n' span_id:2144) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2145) (Token id:Id.Lit_Chars val:'\tgit ls-files --eol -o |\n' span_id:2146) 
          (Token id:Id.Lit_Chars val:'\tsed -n -e "/TeBi_/{s!attr/[\t]*!!g\n' span_id:2147) (Token id:Id.Lit_Chars val:'\ts!\t! !g\n' span_id:2148) 
          (Token id:Id.Lit_Chars val:'\ts!  *! !g\n' span_id:2149) (Token id:Id.Lit_Chars val:'\tp\n' span_id:2150) 
          (Token id:Id.Lit_Chars val:'\t}" | sort >actual &&\n' span_id:2151) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2152)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup master' span_id:2159))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2163) 
          (Token id:Id.Lit_Chars val:'\techo >.gitattributes &&\n' span_id:2164) (Token id:Id.Lit_Chars val:'\tgit checkout -b master &&\n' span_id:2165) 
          (Token id:Id.Lit_Chars val:'\tgit add .gitattributes &&\n' span_id:2166) (Token id:Id.Lit_Chars val:'\tgit commit -m "add .gitattributes" "" &&\n' span_id:2167) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\nLINETWO\\nLINETHREE"     >LF &&\n'
            span_id: 2168
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONE\\r\\nLINETWO\\r\\nLINETHREE" >CRLF &&\n'
            span_id: 2169
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\r\\nLINETWO\\nLINETHREE"   >CRLF_mix_LF &&\n'
            span_id: 2170
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONE\\nLINETWO\\rLINETHREE"     >LF_mix_CR &&\n'
            span_id: 2171
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONE\\r\\nLINETWO\\rLINETHREE"   >CRLF_mix_CR &&\n'
            span_id: 2172
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\r\\nLINEONEQ\\r\\nLINETWO\\r\\nLINETHREE" | q_to_nul >CRLF_nul &&\n'
            span_id: 2173
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf "\\$Id: 0000000000000000000000000000000000000000 \\$\\nLINEONEQ\\nLINETWO\\nLINETHREE" | q_to_nul >LF_nul &&\n'
            span_id: 2174
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcreate_NNO_files CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF &&\n'
            span_id: 2175
          ) (Token id:Id.Lit_Chars val:'\tgit -c core.autocrlf=false add NNO_*.txt &&\n' span_id:2176) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "mixed line endings" &&\n'
            span_id: 2177
          ) (Token id:Id.Lit_Chars val:'\ttest_tick\n' span_id:2178)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:warn_LF_CRLF)
          op: assign_op.Equal
          rhs: {(DQ ('LF will be replaced by CRLF'))}
          spids: [2184]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:warn_CRLF_LF)
          op: assign_op.Equal
          rhs: {(DQ ('CRLF will be replaced by LF'))}
          spids: [2189]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(NATIVE_CRLF)})]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WILC)
                  op: assign_op.Equal
                  rhs: {(LF_CRLF)}
                  spids: [2213]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WICL)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [2217]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WAMIX)
                  op: assign_op.Equal
                  rhs: {(LF_CRLF)}
                  spids: [2220]
                )
              ]
            )
          ]
          spids: [2204 2210]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:WILC)
              op: assign_op.Equal
              rhs: (word.Empty)
              spids: [2226]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:WICL)
              op: assign_op.Equal
              rhs: {(CRLF_LF)}
              spids: [2229]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:WAMIX)
              op: assign_op.Equal
              rhs: {(CRLF_LF)}
              spids: [2233]
            )
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files empty attr' span_id:2245))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2249) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn false ""     ""        ""        ""        ""        "" &&\n'
            span_id: 2250
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn true  ""     "LF_CRLF" ""        "LF_CRLF" ""        "" &&\n'
            span_id: 2251
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn input ""     ""        "CRLF_LF" "CRLF_LF" ""        ""\n'
            span_id: 2252
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files attr=auto' span_id:2259))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2263) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn false "auto" "$WILC"   "$WICL"   "$WAMIX"  ""        "" &&\n'
            span_id: 2264
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn true  "auto" "LF_CRLF" ""        "LF_CRLF" ""        "" &&\n'
            span_id: 2265
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn input "auto" ""        "CRLF_LF" "CRLF_LF" ""        ""\n'
            span_id: 2266
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files attr=text' span_id:2273))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2277) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn false "text" "$WILC"   "$WICL"   "$WAMIX"  "$WILC"   "$WICL"   &&\n'
            span_id: 2278
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn true  "text" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""        &&\n'
            span_id: 2279
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn input "text" ""        "CRLF_LF" "CRLF_LF" ""        "CRLF_LF"\n'
            span_id: 2280
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files attr=-text' span_id:2287))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2291) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn false "-text" ""       ""        ""        ""        "" &&\n'
            span_id: 2292
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn true  "-text" ""       ""        ""        ""        "" &&\n'
            span_id: 2293
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn input "-text" ""       ""        ""        ""        ""\n'
            span_id: 2294
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files attr=lf' span_id:2301))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2305) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn false "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&\n'
            span_id: 2306
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn true  "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF" &&\n'
            span_id: 2307
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcommit_check_warn input "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF"\n'
            span_id: 2308
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit files attr=crlf' span_id:2315))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2319) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn false "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&\n'
            span_id: 2320
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn true  "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&\n'
            span_id: 2321
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_check_warn input "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""\n'
            span_id: 2322
          )
        )
      }
    )
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(false)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ )} {(DQ )} {(input)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(false)} {(DQ ($ Id.VSub_DollarName '$WILC'))} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (auto))} {(DQ )} {(input)} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
    (command.ForEach
      iter_name: crlf
      iter_words: [{(true)} {(false)} {(input)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(commit_chk_wrnNNO)} {(-text)} {(DQ )} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(-text)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(-text)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(DQ )} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(CRLF_LF)} 
              {(CRLF_LF)} {(DQ )} {(CRLF_LF)}
            )
            (C {(commit_chk_wrnNNO)} {(DQ )} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF_CRLF)} {(DQ )} 
              {(LF_CRLF)} {(LF_CRLF)} {(DQ )}
            )
            (C {(commit_chk_wrnNNO)} {(auto)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(auto)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF_CRLF)} {(DQ )} {(DQ )} {(DQ )} {(DQ )})
            (C {(commit_chk_wrnNNO)} {(text)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(DQ )} {(CRLF_LF)} 
              {(CRLF_LF)} {(DQ )} {(CRLF_LF)}
            )
            (C {(commit_chk_wrnNNO)} {(text)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF_CRLF)} {(DQ )} 
              {(LF_CRLF)} {(LF_CRLF)} {(DQ )}
            )
          ]
        )
    )
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(false)} {(DQ ($ Id.VSub_DollarName '$WILC'))} 
      {(DQ ($ Id.VSub_DollarName '$WICL'))} {(DQ ($ Id.VSub_DollarName '$WAMIX'))} {(DQ ($ Id.VSub_DollarName '$WILC'))} 
      {(DQ ($ Id.VSub_DollarName '$WICL'))}
    )
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(true)} {(LF_CRLF)} {(DQ )} {(LF_CRLF)} {(LF_CRLF)} {(DQ )})
    (C {(commit_chk_wrnNNO)} {(DQ (text))} {(DQ )} {(input)} {(DQ )} {(CRLF_LF)} {(CRLF_LF)} {(DQ )} 
      {(CRLF_LF)}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit NNO and cleanup' span_id:2786))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2790) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "commit files on top of NNO" &&\n'
            span_id: 2791
          ) (Token id:Id.Lit_Chars val:'\trm -f *.txt &&\n' span_id:2792) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c core.autocrlf=false reset --hard\n'
            span_id: 2793
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit empty gitattribues' span_id:2800))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2804) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo false ""      LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'
            span_id: 2805
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo true  ""      LF LF   LF          LF_mix_CR CRLF_nul &&\n'
            span_id: 2806
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo input ""      LF LF   LF          LF_mix_CR CRLF_nul\n'
            span_id: 2807
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit text=auto' span_id:2814))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2818) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo false "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&\n'
            span_id: 2819
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo true  "auto"  LF LF   LF          LF_mix_CR CRLF_nul &&\n'
            span_id: 2820
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo input "auto"  LF LF   LF          LF_mix_CR CRLF_nul\n'
            span_id: 2821
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit text' span_id:2828))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2832) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo false "text"  LF LF   LF          LF_mix_CR LF_nul &&\n'
            span_id: 2833
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo true  "text"  LF LF   LF          LF_mix_CR LF_nul &&\n'
            span_id: 2834
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo input "text"  LF LF   LF          LF_mix_CR LF_nul\n'
            span_id: 2835
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit -text' span_id:2842))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2846) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'
            span_id: 2847
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo true  "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&\n'
            span_id: 2848
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_files_in_repo input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul\n'
            span_id: 2849
          )
        )
      }
    )
    (command.ForEach
      iter_name: crlf
      iter_words: [{(true)} {(false)} {(input)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(check_in_repo_NNO)} {(DQ )} {(DQ )} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(DQ )} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(-text)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(DQ )} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(auto)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(CRLF)} 
              {(CRLF_mix_LF)} {(LF_mix_CR)} {(CRLF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(DQ )} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(lf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(check_in_repo_NNO)} {(text)} {(crlf)} {($ Id.VSub_DollarName '$crlf')} {(LF)} {(LF)} {(LF)} 
              {(LF_mix_CR)} {(LF_nul)}
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(NATIVE_CRLF)})]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MIX_CRLF_LF)
                  op: assign_op.Equal
                  rhs: {(CRLF)}
                  spids: [3125]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MIX_LF_CR)
                  op: assign_op.Equal
                  rhs: {(CRLF_mix_CR)}
                  spids: [3128]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NL)
                  op: assign_op.Equal
                  rhs: {(CRLF)}
                  spids: [3131]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LFNUL)
                  op: assign_op.Equal
                  rhs: {(CRLF_nul)}
                  spids: [3134]
                )
              ]
            )
          ]
          spids: [3117 3123]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:MIX_CRLF_LF)
              op: assign_op.Equal
              rhs: {(CRLF_mix_LF)}
              spids: [3139]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:MIX_LF_CR)
              op: assign_op.Equal
              rhs: {(LF_mix_CR)}
              spids: [3142]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:NL)
              op: assign_op.Equal
              rhs: {(LF)}
              spids: [3145]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:LFNUL)
              op: assign_op.Equal
              rhs: {(LF_nul)}
              spids: [3148]
            )
          ]
        )
      ]
    )
    (C {(export)} {(CRLF_MIX_LF_CR)} {(MIX)} {(NL)})
    (command.ForEach
      iter_name: id
      iter_words: [{(DQ )} {(ident)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ForEach
              iter_name: ceol
              iter_words: [{(lf)} {(crlf)} {(native)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ForEach
                      iter_name: crlf
                      iter_words: [{(true)} {(false)} {(input)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (C {(checkout_files)} {(-text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} 
                              {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(-text)} {(DQ ($ Id.VSub_DollarName '$id'))} 
                              {(DQ (lf))} {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} 
                              {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(-text)} {(DQ ($ Id.VSub_DollarName '$id'))} 
                              {(DQ (crlf))} {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} 
                              {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ (lf))} 
                              {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} 
                              {(DQ (crlf))} {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF)} 
                              {(CRLF_mix_CR)} {(CRLF_nul)}
                            )
                            (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ (lf))} 
                              {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                            (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} 
                              {(DQ (crlf))} {(DQ ($ Id.VSub_DollarName '$crlf'))} {(DQ ($ Id.VSub_DollarName '$ceol'))} {(CRLF)} {(CRLF)} 
                              {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                            )
                          ]
                        )
                    )
                    (C {(checkout_files)} {(DQ )} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(DQ )} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(true)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(CRLF)} {(CRLF)} {(CRLF)} {(CRLF_mix_CR)} {(CRLF_nul)}
                    )
                    (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(input)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                    (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(input)} 
                      {(DQ ($ Id.VSub_DollarName '$ceol'))} {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
                    )
                  ]
                )
            )
            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(crlf)} 
              {(CRLF)} {(CRLF)} {(CRLF)} {(CRLF_mix_CR)} {(CRLF_nul)}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(lf)} 
              {(LF)} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(DQ )} 
              {($ Id.VSub_DollarName '$NL')} {(CRLF)} {($ Id.VSub_DollarName '$MIX_CRLF_LF')} {($ Id.VSub_DollarName '$MIX_LF_CR')} 
              {($ Id.VSub_DollarName '$LFNUL')}
            )
            (C {(checkout_files)} {(text)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(native)} 
              {($ Id.VSub_DollarName '$NL')} {(CRLF)} {($ Id.VSub_DollarName '$MIX_CRLF_LF')} {($ Id.VSub_DollarName '$MIX_LF_CR')} 
              {($ Id.VSub_DollarName '$LFNUL')}
            )
            (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(DQ )} 
              {($ Id.VSub_DollarName '$NL')} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
            (C {(checkout_files)} {(auto)} {(DQ ($ Id.VSub_DollarName '$id'))} {(DQ )} {(false)} {(native)} 
              {($ Id.VSub_DollarName '$NL')} {(CRLF)} {(CRLF_mix_LF)} {(LF_mix_CR)} {(LF_nul)}
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ls-files --eol -d -z' span_id:3818))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3822) 
          (Token
            id: Id.Lit_Chars
            val: 
'\trm crlf_false_attr__CRLF.txt crlf_false_attr__CRLF_mix_LF.txt crlf_false_attr__LF.txt .gitattributes &&\n'
            span_id: 3823
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:3824) 
          (Token
            id: Id.Lit_Chars
            val: '\ti/crlf w/ crlf_false_attr__CRLF.txt\n'
            span_id: 3825
          ) (Token id:Id.Lit_Chars val:'\ti/lf w/ .gitattributes\n' span_id:3826) 
          (Token id:Id.Lit_Chars val:'\ti/lf w/ crlf_false_attr__LF.txt\n' span_id:3827) (Token id:Id.Lit_Chars val:'\ti/mixed w/ crlf_false_attr__CRLF_mix_LF.txt\n' span_id:3828) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3829) (Token id:Id.Lit_Chars val:'\tgit ls-files --eol -d |\n' span_id:3830) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s!attr/[^\t]*!!g" -e "s/\t/ /g" -e "s/  */ /g" |\n'
            span_id: 3831
          ) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:3832) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3833)
        )
      }
    )
    (C {(test_done)})
  ]
)