(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tid)
          op: assign_op.Equal
          rhs: {(DQ <'sshd version with different protocol combinations'>)}
          spids: [7]
        )
      ]
    )
    (command.ShFunction
      name: check_version
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:version)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [24]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expect)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [28]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:banner)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<printf>} {(SQ )})
                              (C {(${ Id.VSub_Name SSHD)} {<-o>} 
                                {(DQ <'Protocol='> (${ Id.VSub_Name version))} {<-i>} {<-f>} {(${ Id.VSub_Name OBJ) <'/sshd_proxy'>}
                              )
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [32]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name banner)}
              arms: [
                (case_arm
                  pat_list: [{<SSH-1.99-> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:proto)
                          op: assign_op.Equal
                          rhs: {<199>}
                          spids: [81]
                        )
                      ]
                    )
                  ]
                  spids: [76 78 85 -1]
                )
                (case_arm
                  pat_list: [{<SSH-2.0-> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:proto)
                          op: assign_op.Equal
                          rhs: {<20>}
                          spids: [93]
                        )
                      ]
                    )
                  ]
                  spids: [88 90 97 -1]
                )
                (case_arm
                  pat_list: [{<SSH-1.5-> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:proto)
                          op: assign_op.Equal
                          rhs: {<15>}
                          spids: [105]
                        )
                      ]
                    )
                  ]
                  spids: [100 102 109 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:proto)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [116]
                        )
                      ]
                    )
                  ]
                  spids: [112 113 120 -1]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name expect)} {<-ne>} 
                              {(${ Id.VSub_Name proto)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<fail>} 
                      {
                        (DQ <'wrong protocol version '> (${ Id.VSub_Name banner) <' for '> 
                          (${ Id.VSub_Name version)
                        )
                      }
                    )
                  ]
                  spids: [126 143]
                )
              ]
            )
          ]
        )
    )
    (C {<check_version>} {<2>} {<20>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [(command.Sentence child:(C {<ssh_version>} {<1>}) terminator:<Id.Op_Semi _>)]
            )
          action: [
            (C {<check_version>} {<2> <Id.Lit_Comma ','> <1>} {<199>})
            (C {<check_version>} {<1> <Id.Lit_Comma ','> <2>} {<199>})
            (C {<check_version>} {<1>} {<15>})
          ]
          spids: [171 178]
        )
      ]
    )
  ]
)