(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(DQ (dhgex))} spids:[7])]
      spids: [7]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LOG)
          op: Equal
          rhs: {(${ VSub_Name TEST_SSH_LOGFILE)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(rm)} {(-f)} {(${ VSub_Name LOG)})
    (C {(cp)} {($ VSub_Name '$OBJ') (/sshd_proxy)} {($ VSub_Name '$OBJ') (/sshd_proxy_bak)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:kexs)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(${ VSub_Name SSH)} {(-Q)} {(kex)})
                          (C {(grep)} {(diffie-hellman-group-exchange)})
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_Backtick '`'>
                spids: [36 50]
              )
            }
          spids: [35]
        )
      ]
      spids: [35]
    )
    (FuncDef
      name: ssh_test_dhgex
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:bits)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [60]
                    )
                  ]
                  spids: [60]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:cipher)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [69]
                    )
                  ]
                  spids: [69]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:kex)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [78]
                    )
                  ]
                  spids: [78]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (C {(cp)} {($ VSub_Name '$OBJ') (/sshd_proxy_bak)} {($ VSub_Name '$OBJ') (/sshd_proxy)})
            (SimpleCommand
              words: [{(echo)} {(DQ ('KexAlgorithms=') ($ VSub_Name '$kex'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {($ VSub_Name '$OBJ') (/sshd_proxy)}
                  spids: [104]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('Ciphers=') ($ VSub_Name '$cipher'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {($ VSub_Name '$OBJ') (/sshd_proxy)}
                  spids: [117]
                )
              ]
            )
            (C {(rm)} {(-f)} {(${ VSub_Name LOG)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:opts)
                  op: Equal
                  rhs: 
                    {
                      (DQ ('-oKexAlgorithms=') ($ VSub_Name '$kex') (' -oCiphers=') 
                        ($ VSub_Name '$cipher')
                      )
                    }
                  spids: [132]
                )
              ]
              spids: [132]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:min) op:Equal rhs:{(2048)} spids:[141])]
              spids: [141]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:max) op:Equal rhs:{(8192)} spids:[145])]
              spids: [145]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:groupsz)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$min') ('<') ($ VSub_Name '$bits') ('<') ($ VSub_Name '$max'))
                    }
                  spids: [149]
                )
              ]
              spids: [149]
            )
            (C {(verbose)} 
              {
                (DQ ($ VSub_Name '$tid') (' bits ') ($ VSub_Name '$bits') (' ') ($ VSub_Name '$kex') (' ') 
                  ($ VSub_Name '$cipher')
                )
              }
            )
            (C {(${ VSub_Name SSH)} {(${ VSub_Name opts)} {($ VSub_At '$@')} {(-vvv)} {(-F)} 
              {(${ VSub_Name OBJ) (/ssh_proxy)} {(somehost)} {(true)}
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-ne)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(fail)} {(DQ ('ssh failed (') ($ VSub_At '$@') (')'))})]
                  spids: [-1 209]
                )
              ]
              spids: [-1 221]
            )
            (SimpleCommand
              words: [
                {(grep)}
                {(DQ ('SSH2_MSG_KEX_DH_GEX_REQUEST(') ($ VSub_Name '$groupsz') (') sent'))}
                {(${ VSub_Name LOG)}
              ]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[240])]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(KW_Bang '!') (Lit_Other '=')} {(0)} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:got)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(egrep)} {(DQ ('SSH2_MSG_KEX_DH_GEX_REQUEST(.*) sent'))} 
                                        {(${ VSub_Name LOG)}
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [262 272]
                              )
                            }
                          spids: [261]
                        )
                      ]
                      spids: [261]
                    )
                    (C {(fail)} 
                      {
                        (DQ ($ VSub_Name '$tid') (' unexpected GEX sizes, expected ') 
                          ($ VSub_Name '$groupsz') (', got ') ($ VSub_Name '$got')
                        )
                      }
                    )
                  ]
                  spids: [-1 258]
                )
              ]
              spids: [-1 286]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:gotbits)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(awk)} {(SQ <'/bits set:/{print $4}'>)} {(${ VSub_Name LOG)})
                                    (C {(head)} {(-1)})
                                    (C {(cut)} {(-f2)} {(-d/)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [295 319]
                        )
                      )
                    }
                  spids: [293]
                )
              ]
              spids: [293]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$gotbits'))} {(-lt)} 
                          {(DQ ($ VSub_Name '$bits'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(fatal)} 
                      {
                        (DQ ($ VSub_Name '$tid') (' expected ') ($ VSub_Name '$bits') 
                          (' bit group, got ') ($ VSub_Name '$gotbits')
                        )
                      }
                    )
                  ]
                  spids: [-1 340]
                )
              ]
              spids: [-1 354]
            )
          ]
          spids: [57]
        )
      spids: [53 56]
    )
    (FuncDef
      name: check
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:bits)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [366]
                    )
                  ]
                  spids: [366]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(shift)})
            (ForEach
              iter_name: c
              iter_words: [{($ VSub_At '$@')}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (ForEach
                      iter_name: k
                      iter_words: [{($ VSub_Name '$kexs')}]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (C {(ssh_test_dhgex)} {($ VSub_Name '$bits')} {($ VSub_Name '$c')} 
                              {($ VSub_Name '$k')}
                            )
                          ]
                          spids: [397 409]
                        )
                      spids: [393 395]
                    )
                  ]
                  spids: [385 412]
                )
              spids: [381 383]
            )
          ]
          spids: [363]
        )
      spids: [359 362]
    )
    (C {(check)} {(3072)} 
      {
        (CommandSubPart
          command_list: 
            (CommandList
              children: [
                (Pipeline
                  children: [(C {(${ VSub_Name SSH)} {(-Q)} {(cipher)}) (C {(grep)} {(128)})]
                  negated: False
                )
              ]
            )
          left_token: <Left_Backtick '`'>
          spids: [424 438]
        )
      }
    )
    (C {(check)} {(3072)} {(arcfour)} {(blowfish-cbc)})
    (C {(check)} {(7680)} 
      {
        (CommandSubPart
          command_list: 
            (CommandList
              children: [
                (Pipeline
                  children: [(C {(${ VSub_Name SSH)} {(-Q)} {(cipher)}) (C {(grep)} {(192)})]
                  negated: False
                )
              ]
            )
          left_token: <Left_Backtick '`'>
          spids: [452 466]
        )
      }
    )
    (C {(check)} {(8192)} 
      {
        (CommandSubPart
          command_list: 
            (CommandList
              children: [
                (Pipeline
                  children: [(C {(${ VSub_Name SSH)} {(-Q)} {(cipher)}) (C {(grep)} {(256)})]
                  negated: False
                )
              ]
            )
          left_token: <Left_Backtick '`'>
          spids: [472 486]
        )
      }
    )
    (C {(check)} {(8192)} {(rijndael-cbc) (Lit_Other '@') (lysator.liu.se)} 
      {(chacha20-poly1305) (Lit_Other '@') (openssh.com)}
    )
  ]
)