final class com.sun.security.sasl.digest.DigestMD5Server extends com.sun.security.sasl.digest.DigestMD5Base implements javax.security.sasl.SaslServer
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.security.sasl.digest.DigestMD5Server
  super_class: com.sun.security.sasl.digest.DigestMD5Base
{
  private static final java.lang.String MY_CLASS_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.String UTF8_DIRECTIVE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "charset=utf-8,"

  private static final java.lang.String ALGORITHM_DIRECTIVE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "algorithm=md5-sess"

  private static final int NONCE_COUNT_VALUE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final java.lang.String UTF8_PROPERTY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.sun.security.sasl.digest.utf8"

  private static final java.lang.String REALM_PROPERTY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.sun.security.sasl.digest.realm"

  private static final java.lang.String[] DIRECTIVE_KEY;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final int USERNAME;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int REALM;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int NONCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int CNONCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private static final int NONCE_COUNT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final int QOP;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final int DIGEST_URI;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 6

  private static final int RESPONSE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 7

  private static final int MAXBUF;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  private static final int CHARSET;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 9

  private static final int CIPHER;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 10

  private static final int AUTHZID;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 11

  private static final int AUTH_PARAM;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 12

  private java.lang.String specifiedQops;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private byte[] myCiphers;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<java.lang.String> serverRealms;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljava/lang/String;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 87
            ldc Lcom/sun/security/sasl/digest/DigestMD5Server;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            putstatic com.sun.security.sasl.digest.DigestMD5Server.MY_CLASS_NAME:Ljava/lang/String;
         1: .line 107
            bipush 13
            anewarray java.lang.String
            dup
            iconst_0
         2: .line 108
            ldc "username"
            aastore
            dup
            iconst_1
         3: .line 109
            ldc "realm"
            aastore
            dup
            iconst_2
         4: .line 110
            ldc "nonce"
            aastore
            dup
            iconst_3
         5: .line 111
            ldc "cnonce"
            aastore
            dup
            iconst_4
         6: .line 112
            ldc "nonce-count"
            aastore
            dup
            iconst_5
         7: .line 113
            ldc "qop"
            aastore
            dup
            bipush 6
         8: .line 114
            ldc "digest-uri"
            aastore
            dup
            bipush 7
         9: .line 115
            ldc "response"
            aastore
            dup
            bipush 8
        10: .line 116
            ldc "maxbuf"
            aastore
            dup
            bipush 9
        11: .line 117
            ldc "charset"
            aastore
            dup
            bipush 10
        12: .line 118
            ldc "cipher"
            aastore
            dup
            bipush 11
        13: .line 119
            ldc "authzid"
            aastore
            dup
            bipush 12
        14: .line 120
            ldc "auth-param"
            aastore
        15: .line 107
            putstatic com.sun.security.sasl.digest.DigestMD5Server.DIRECTIVE_KEY:[Ljava/lang/String;
        16: .line 136
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(java.lang.String, java.lang.String, java.util.Map<java.lang.String, ?>, javax.security.auth.callback.CallbackHandler);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)V
    flags: (0x0000) 
    Code:
      stack=7, locals=10, args_size=5
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.lang.String protocol
        start local 2 // java.lang.String serverName
        start local 3 // java.util.Map props
        start local 4 // javax.security.auth.callback.CallbackHandler cbh
         0: .line 145
            aload 0 /* this */
            aload 3 /* props */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.MY_CLASS_NAME:Ljava/lang/String;
            iconst_1
            new java.lang.StringBuilder
            dup
            aload 1 /* protocol */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "/"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* serverName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 4 /* cbh */
            invokespecial com.sun.security.sasl.digest.DigestMD5Base.<init>:(Ljava/util/Map;Ljava/lang/String;ILjava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)V
         1: .line 147
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
         2: .line 149
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
         3: .line 151
            aload 3 /* props */
            ifnull 22
         4: .line 152
            aload 0 /* this */
            aload 3 /* props */
            ldc "javax.security.sasl.qop"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.specifiedQops:Ljava/lang/String;
         5: .line 153
            ldc "false"
            aload 3 /* props */
            ldc "com.sun.security.sasl.digest.utf8"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 8
         6: .line 154
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
         7: .line 155
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST80:Server supports ISO-Latin-1"
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;)V
         8: .line 158
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack:
            aload 3 /* props */
            ldc "com.sun.security.sasl.digest.realm"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 5 /* realms */
        start local 5 // java.lang.String realms
         9: .line 159
            aload 5 /* realms */
            ifnull 22
        10: .line 160
            new java.util.StringTokenizer
            dup
            aload 5 /* realms */
            ldc ", \t\n"
            invokespecial java.util.StringTokenizer.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 6 /* parser */
        start local 6 // java.util.StringTokenizer parser
        11: .line 161
            aload 6 /* parser */
            invokevirtual java.util.StringTokenizer.countTokens:()I
            istore 7 /* tokenCount */
        start local 7 // int tokenCount
        12: .line 162
            aconst_null
            astore 8 /* token */
        start local 8 // java.lang.String token
        13: .line 163
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        14: goto 21
        15: .line 164
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler java.lang.String java.util.StringTokenizer int java.lang.String int
      StackMap stack:
            aload 6 /* parser */
            invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
            astore 8 /* token */
        16: .line 165
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST81:Server supports realm {0}"
        17: .line 166
            aload 8 /* token */
        18: .line 165
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        19: .line 167
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 8 /* token */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        20: .line 163
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        21: iload 9 /* i */
            iload 7 /* tokenCount */
            if_icmplt 15
        end local 9 // int i
        end local 8 // java.lang.String token
        end local 7 // int tokenCount
        end local 6 // java.util.StringTokenizer parser
        end local 5 // java.lang.String realms
        22: .line 172
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 23
            ldc "UTF8"
            goto 24
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        23: ldc "8859_1"
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server java.lang.String java.lang.String java.util.Map javax.security.auth.callback.CallbackHandler
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
        24: putfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
        25: .line 175
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 27
        26: .line 176
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 2 /* serverName */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        27: .line 178
      StackMap locals:
      StackMap stack:
            return
        end local 4 // javax.security.auth.callback.CallbackHandler cbh
        end local 3 // java.util.Map props
        end local 2 // java.lang.String serverName
        end local 1 // java.lang.String protocol
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   28     0        this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   28     1    protocol  Ljava/lang/String;
            0   28     2  serverName  Ljava/lang/String;
            0   28     3       props  Ljava/util/Map<Ljava/lang/String;*>;
            0   28     4         cbh  Ljavax/security/auth/callback/CallbackHandler;
            9   22     5      realms  Ljava/lang/String;
           11   22     6      parser  Ljava/util/StringTokenizer;
           12   22     7  tokenCount  I
           13   22     8       token  Ljava/lang/String;
           14   22     9           i  I
    Exceptions:
      throws javax.security.sasl.SaslException
    Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;*>;Ljavax/security/auth/callback/CallbackHandler;)V
    MethodParameters:
            Name  Flags
      protocol    
      serverName  
      props       
      cbh         

  public byte[] evaluateResponse(byte[]);
    descriptor: ([B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // byte[] response
         0: .line 181
            aload 1 /* response */
            arraylength
            sipush 4096
            if_icmple 6
         1: .line 182
            new javax.security.sasl.SaslException
            dup
         2: .line 183
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: Invalid digest response length. Got:  "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 184
            aload 1 /* response */
            arraylength
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " Expected < "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            sipush 4096
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         4: .line 183
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 182
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 188
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.step:I
            tableswitch { // 1 - 3
                    1: 7
                    2: 60
                    3: 38
              default: 60
          }
         7: .line 190
      StackMap locals:
      StackMap stack:
            aload 1 /* response */
            arraylength
            ifeq 11
         8: .line 191
            new javax.security.sasl.SaslException
            dup
         9: .line 192
            ldc "DIGEST-MD5 must not have an initial response"
        10: .line 191
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 196
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* supportedCiphers */
        start local 3 // java.lang.String supportedCiphers
        12: .line 197
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.allQop:B
            iconst_4
            iand
            ifeq 24
        13: .line 198
            aload 0 /* this */
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.getPlatformCiphers:()[B
            putfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
        14: .line 199
            new java.lang.StringBuffer
            dup
            invokespecial java.lang.StringBuffer.<init>:()V
            astore 4 /* buf */
        start local 4 // java.lang.StringBuffer buf
        15: .line 203
            iconst_0
            istore 5 /* i */
        start local 5 // int i
        16: goto 22
        17: .line 204
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[] top java.lang.String java.lang.StringBuffer int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
            iload 5 /* i */
            baload
            ifeq 21
        18: .line 205
            aload 4 /* buf */
            invokevirtual java.lang.StringBuffer.length:()I
            ifle 20
        19: .line 206
            aload 4 /* buf */
            bipush 44
            invokevirtual java.lang.StringBuffer.append:(C)Ljava/lang/StringBuffer;
            pop
        20: .line 208
      StackMap locals:
      StackMap stack:
            aload 4 /* buf */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            iload 5 /* i */
            aaload
            invokevirtual java.lang.StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
            pop
        21: .line 203
      StackMap locals:
      StackMap stack:
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        22: iload 5 /* i */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            arraylength
            if_icmplt 17
        end local 5 // int i
        23: .line 211
            aload 4 /* buf */
            invokevirtual java.lang.StringBuffer.toString:()Ljava/lang/String;
            astore 3 /* supportedCiphers */
        end local 4 // java.lang.StringBuffer buf
        24: .line 215
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.specifiedQops:Ljava/lang/String;
        25: .line 216
            aload 3 /* supportedCiphers */
        26: .line 215
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateChallenge:(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)[B
            astore 2 /* challenge */
        start local 2 // byte[] challenge
        27: .line 218
            aload 0 /* this */
            iconst_3
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        28: .line 219
            aload 2 /* challenge */
        29: areturn
        end local 2 // byte[] challenge
        30: .line 220
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 4 /* e */
        start local 4 // java.io.UnsupportedEncodingException e
        31: .line 221
            new javax.security.sasl.SaslException
            dup
        32: .line 222
            ldc "DIGEST-MD5: Error encoding challenge"
            aload 4 /* e */
        33: .line 221
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.UnsupportedEncodingException e
        34: .line 223
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 4 /* e */
        start local 4 // java.io.IOException e
        35: .line 224
            new javax.security.sasl.SaslException
            dup
        36: .line 225
            ldc "DIGEST-MD5: Error generating challenge"
            aload 4 /* e */
        37: .line 224
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.IOException e
        end local 3 // java.lang.String supportedCiphers
        38: .line 235
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[]
      StackMap stack:
            aload 1 /* response */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.DIRECTIVE_KEY:[Ljava/lang/String;
        39: .line 236
            aconst_null
            iconst_1
        40: .line 235
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.parseDirectives:([B[Ljava/lang/String;Ljava/util/List;I)[[B
            astore 4 /* responseVal */
        start local 4 // byte[][] responseVal
        41: .line 237
            aload 0 /* this */
            aload 4 /* responseVal */
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.validateClientResponse:([[B)[B
            astore 2 /* challenge */
        end local 4 // byte[][] responseVal
        start local 2 // byte[] challenge
        42: .line 238
            goto 52
        end local 2 // byte[] challenge
      StackMap locals:
      StackMap stack: javax.security.sasl.SaslException
        43: astore 4 /* e */
        start local 4 // javax.security.sasl.SaslException e
        44: .line 239
            aload 4 /* e */
            athrow
        end local 4 // javax.security.sasl.SaslException e
        45: .line 240
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 4 /* e */
        start local 4 // java.io.UnsupportedEncodingException e
        46: .line 241
            new javax.security.sasl.SaslException
            dup
        47: .line 242
            ldc "DIGEST-MD5: Error validating client response"
            aload 4 /* e */
        48: .line 241
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.UnsupportedEncodingException e
        49: .line 243
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 5
        50: .line 244
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        51: .line 245
            aload 5
            athrow
        start local 2 // byte[] challenge
        52: .line 244
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.security.sasl.digest.DigestMD5Server.step:I
        53: .line 247
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.completed:Z
        54: .line 250
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
            ifeq 57
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            ifeq 57
        55: .line 251
            aload 0 /* this */
            new com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy
            dup
            aload 0 /* this */
            iconst_0
            invokespecial com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy.<init>:(Lcom/sun/security/sasl/digest/DigestMD5Base;Z)V
            putfield com.sun.security.sasl.digest.DigestMD5Server.secCtx:Lcom/sun/security/sasl/digest/SecurityCtx;
        56: .line 252
            goto 59
      StackMap locals:
      StackMap stack:
        57: aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
            ifeq 59
        58: .line 253
            aload 0 /* this */
            new com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity
            dup
            aload 0 /* this */
            iconst_0
            invokespecial com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity.<init>:(Lcom/sun/security/sasl/digest/DigestMD5Base;Z)V
            putfield com.sun.security.sasl.digest.DigestMD5Server.secCtx:Lcom/sun/security/sasl/digest/SecurityCtx;
        59: .line 256
      StackMap locals:
      StackMap stack:
            aload 2 /* challenge */
            areturn
        end local 2 // byte[] challenge
        60: .line 260
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: Server at illegal state"
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // byte[] response
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   61     0              this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   61     1          response  [B
           27   30     2         challenge  [B
           42   43     2         challenge  [B
           52   60     2         challenge  [B
           12   38     3  supportedCiphers  Ljava/lang/String;
           15   24     4               buf  Ljava/lang/StringBuffer;
           16   23     5                 i  I
           31   34     4                 e  Ljava/io/UnsupportedEncodingException;
           35   38     4                 e  Ljava/io/IOException;
           41   42     4       responseVal  [[B
           44   45     4                 e  Ljavax/security/sasl/SaslException;
           46   49     4                 e  Ljava/io/UnsupportedEncodingException;
      Exception table:
        from    to  target  type
          24    29      30  Class java.io.UnsupportedEncodingException
          24    29      34  Class java.io.IOException
          38    42      43  Class javax.security.sasl.SaslException
          38    42      45  Class java.io.UnsupportedEncodingException
          38    49      49  any
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
          Name  Flags
      response  

  private byte[] generateChallenge(java.util.List<java.lang.String>, java.lang.String, java.lang.String);
    descriptor: (Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.util.List realms
        start local 2 // java.lang.String qopStr
        start local 3 // java.lang.String cipherStr
         0: .line 290
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            astore 4 /* out */
        start local 4 // java.io.ByteArrayOutputStream out
         1: .line 293
            iconst_0
            istore 5 /* i */
        start local 5 // int i
         2: goto 8
         3: .line 294
      StackMap locals: java.io.ByteArrayOutputStream int
      StackMap stack:
            aload 4 /* out */
            ldc "realm=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
         4: .line 295
            aload 4 /* out */
            aload 1 /* realms */
            iload 5 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
         5: .line 296
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
         6: .line 297
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
         7: .line 293
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: aload 1 /* realms */
            ifnull 9
            iload 5 /* i */
            aload 1 /* realms */
            invokeinterface java.util.List.size:()I
            if_icmplt 3
        end local 5 // int i
         9: .line 301
      StackMap locals:
      StackMap stack:
            aload 4 /* out */
            ldc "nonce=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        10: .line 302
            aload 0 /* this */
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.generateNonce:()[B
            putfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
        11: .line 303
            aload 4 /* out */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        12: .line 304
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        13: .line 305
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        14: .line 309
            aload 2 /* qopStr */
            ifnull 19
        15: .line 310
            aload 4 /* out */
            ldc "qop=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        16: .line 312
            aload 4 /* out */
            aload 2 /* qopStr */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        17: .line 313
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        18: .line 314
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        19: .line 318
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.recvMaxBufSize:I
            ldc 65536
            if_icmpeq 21
        20: .line 319
            aload 4 /* out */
            new java.lang.StringBuilder
            dup
            ldc "maxbuf=\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.recvMaxBufSize:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "\","
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        21: .line 323
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 23
        22: .line 324
            aload 4 /* out */
            ldc "charset=utf-8,"
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        23: .line 327
      StackMap locals:
      StackMap stack:
            aload 3 /* cipherStr */
            ifnull 28
        24: .line 328
            aload 4 /* out */
            ldc "cipher=\""
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        25: .line 330
            aload 4 /* out */
            aload 3 /* cipherStr */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokestatic com.sun.security.sasl.digest.DigestMD5Server.writeQuotedStringValue:(Ljava/io/ByteArrayOutputStream;[B)V
        26: .line 331
            aload 4 /* out */
            bipush 34
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        27: .line 332
            aload 4 /* out */
            bipush 44
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        28: .line 336
      StackMap locals:
      StackMap stack:
            aload 4 /* out */
            ldc "algorithm=md5-sess"
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        29: .line 338
            aload 4 /* out */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 4 // java.io.ByteArrayOutputStream out
        end local 3 // java.lang.String cipherStr
        end local 2 // java.lang.String qopStr
        end local 1 // java.util.List realms
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   30     0       this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   30     1     realms  Ljava/util/List<Ljava/lang/String;>;
            0   30     2     qopStr  Ljava/lang/String;
            0   30     3  cipherStr  Ljava/lang/String;
            1   30     4        out  Ljava/io/ByteArrayOutputStream;
            2    9     5          i  I
    Exceptions:
      throws java.io.UnsupportedEncodingException, java.io.IOException
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;Ljava/lang/String;)[B
    MethodParameters:
           Name  Flags
      realms     
      qopStr     
      cipherStr  

  private byte[] validateClientResponse(byte[][]);
    descriptor: ([[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=18, args_size=2
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // byte[][] responseVal
         0: .line 383
            aload 1 /* responseVal */
            bipush 9
            aaload
            ifnull 6
         1: .line 386
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.useUTF8:Z
            ifeq 3
         2: .line 387
            ldc "utf-8"
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 9
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
         3: .line 388
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Incompatible charset value: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         4: .line 390
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 9
            aaload
            invokespecial java.lang.String.<init>:([B)V
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 388
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 396
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            bipush 8
            aaload
            ifnonnull 7
            ldc 65536
            goto 8
         7: .line 397
      StackMap locals:
      StackMap stack:
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 8
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
         8: .line 395
      StackMap locals:
      StackMap stack: int
            istore 2 /* clntMaxBufSize */
        start local 2 // int clntMaxBufSize
         9: .line 401
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            ifne 10
            iload 2 /* clntMaxBufSize */
            goto 11
        10: .line 402
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            iload 2 /* clntMaxBufSize */
            invokestatic java.lang.Math.min:(II)I
        11: .line 401
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server int
            putfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
        12: .line 406
            aload 1 /* responseVal */
            iconst_0
            aaload
            ifnull 16
        13: .line 407
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_0
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            astore 3 /* username */
        start local 3 // java.lang.String username
        14: .line 408
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST82:Username: {0}"
            aload 3 /* username */
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        15: .line 409
            goto 17
        end local 3 // java.lang.String username
        16: .line 410
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing username."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        start local 3 // java.lang.String username
        17: .line 415
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 1 /* responseVal */
            iconst_1
            aaload
            ifnull 19
        18: .line 416
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_1
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 20
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        19: ldc ""
        20: .line 415
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
        21: .line 417
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST83:Client negotiated realm: {0}"
        22: .line 418
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
        23: .line 417
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        24: .line 420
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.serverRealms:Ljava/util/List;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 28
        25: .line 423
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Nonexistent realm: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        26: .line 424
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        27: .line 423
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 429
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_2
            aaload
            ifnonnull 30
        29: .line 430
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing nonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 433
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_2
            aaload
            astore 4 /* nonceFromClient */
        start local 4 // byte[] nonceFromClient
        31: .line 434
            aload 4 /* nonceFromClient */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifne 33
        32: .line 435
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched nonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        33: .line 440
      StackMap locals: byte[]
      StackMap stack:
            aload 1 /* responseVal */
            iconst_3
            aaload
            ifnonnull 35
        34: .line 441
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Missing cnonce."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        35: .line 444
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            iconst_3
            aaload
            astore 5 /* cnonce */
        start local 5 // byte[] cnonce
        36: .line 447
            aload 1 /* responseVal */
            iconst_4
            aaload
            ifnull 43
        37: .line 448
            iconst_1
        38: .line 449
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_4
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            bipush 16
        39: .line 448
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;I)I
            if_icmpeq 43
        40: .line 450
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Nonce count does not match: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        41: .line 452
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_4
            aaload
            invokespecial java.lang.String.<init>:([B)V
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        42: .line 450
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        43: .line 456
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            aload 1 /* responseVal */
            iconst_5
            aaload
            ifnull 45
        44: .line 457
            new java.lang.String
            dup
            aload 1 /* responseVal */
            iconst_5
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 46
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        45: ldc "auth"
        46: .line 456
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[]
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
        47: .line 459
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST84:Client negotiated qop: {0}"
        48: .line 460
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
        49: .line 459
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        50: .line 464
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            dup
            astore 7
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 3
              3005864: 51
           1414216745: 52
           1431098954: 53
              default: 64
          }
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] top java.lang.String
      StackMap stack:
        51: aload 7
            ldc "auth"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 54
            goto 64
      StackMap locals:
      StackMap stack:
        52: aload 7
            ldc "auth-conf"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 60
            goto 64
      StackMap locals:
      StackMap stack:
        53: aload 7
            ldc "auth-int"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 56
            goto 64
        54: .line 466
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 6 /* cQop */
        start local 6 // byte cQop
        55: .line 467
            goto 67
        end local 6 // byte cQop
        56: .line 469
      StackMap locals:
      StackMap stack:
            iconst_2
            istore 6 /* cQop */
        start local 6 // byte cQop
        57: .line 470
            aload 0 /* this */
            iconst_1
            putfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
        58: .line 471
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            bipush 16
            isub
            putfield com.sun.security.sasl.digest.DigestMD5Server.rawSendSize:I
        59: .line 472
            goto 67
        end local 6 // byte cQop
        60: .line 474
      StackMap locals:
      StackMap stack:
            iconst_4
            istore 6 /* cQop */
        start local 6 // byte cQop
        61: .line 475
            aload 0 /* this */
            aload 0 /* this */
            iconst_1
            dup_x1
            putfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            putfield com.sun.security.sasl.digest.DigestMD5Server.integrity:Z
        62: .line 476
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.sendMaxBufSize:I
            bipush 26
            isub
            putfield com.sun.security.sasl.digest.DigestMD5Server.rawSendSize:I
        63: .line 477
            goto 67
        end local 6 // byte cQop
        64: .line 479
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Invalid QOP: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        65: .line 480
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        66: .line 479
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        start local 6 // byte cQop
        67: .line 482
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack:
            iload 6 /* cQop */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.allQop:B
            iand
            ifne 71
        68: .line 483
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: server does not support  qop: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        69: .line 484
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        70: .line 483
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        71: .line 487
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.privacy:Z
            ifeq 104
        72: .line 488
            aload 0 /* this */
            aload 1 /* responseVal */
            bipush 10
            aaload
            ifnull 74
        73: .line 489
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 10
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 75
      StackMap locals:
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server
        74: aconst_null
        75: .line 488
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack: com.sun.security.sasl.digest.DigestMD5Server java.lang.String
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
        76: .line 490
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            ifnonnull 78
        77: .line 491
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. No cipher specified."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        78: .line 495
      StackMap locals:
      StackMap stack:
            iconst_m1
            istore 8 /* foundCipher */
        start local 8 // int foundCipher
        79: .line 496
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST85:Client negotiated cipher: {0}"
        80: .line 497
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
        81: .line 496
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        82: .line 500
            iconst_0
            istore 9 /* j */
        start local 9 // int j
        83: goto 89
        84: .line 501
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top int int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            iload 9 /* j */
            aaload
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 88
        85: .line 502
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.myCiphers:[B
            iload 9 /* j */
            baload
            ifeq 88
        86: .line 503
            iload 9 /* j */
            istore 8 /* foundCipher */
        87: .line 504
            goto 90
        88: .line 500
      StackMap locals:
      StackMap stack:
            iinc 9 /* j */ 1
      StackMap locals:
      StackMap stack:
        89: iload 9 /* j */
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_TOKENS:[Ljava/lang/String;
            arraylength
            if_icmplt 84
        end local 9 // int j
        90: .line 507
      StackMap locals:
      StackMap stack:
            iload 8 /* foundCipher */
            iconst_m1
            if_icmpne 94
        91: .line 508
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: server does not support cipher: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        92: .line 509
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedCipher:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        93: .line 508
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        94: .line 512
      StackMap locals:
      StackMap stack:
            getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_MASKS:[B
            iload 8 /* foundCipher */
            baload
            iconst_4
            iand
            ifeq 97
        95: .line 513
            aload 0 /* this */
            ldc "high"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
        96: .line 514
            goto 101
      StackMap locals:
      StackMap stack:
        97: getstatic com.sun.security.sasl.digest.DigestMD5Server.CIPHER_MASKS:[B
            iload 8 /* foundCipher */
            baload
            iconst_2
            iand
            ifeq 100
        98: .line 515
            aload 0 /* this */
            ldc "medium"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
        99: .line 516
            goto 101
       100: .line 518
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc "low"
            putfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
       101: .line 521
      StackMap locals:
      StackMap stack:
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST86:Negotiated strength: {0}"
       102: .line 522
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedStrength:Ljava/lang/String;
       103: .line 521
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
        end local 8 // int foundCipher
       104: .line 526
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int
      StackMap stack:
            aload 1 /* responseVal */
            bipush 6
            aaload
            ifnull 106
       105: .line 527
            new java.lang.String
            dup
            aload 1 /* responseVal */
            bipush 6
            aaload
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 107
      StackMap locals:
      StackMap stack:
       106: aconst_null
       107: .line 526
      StackMap locals:
      StackMap stack: java.lang.String
            astore 8 /* digestUriFromResponse */
        start local 8 // java.lang.String digestUriFromResponse
       108: .line 529
            aload 8 /* digestUriFromResponse */
            ifnull 112
       109: .line 530
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST87:digest URI: {0}"
       110: .line 531
            aload 8 /* digestUriFromResponse */
       111: .line 530
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
       112: .line 542
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 8 /* digestUriFromResponse */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 115
       113: .line 543
            aload 0 /* this */
            aload 8 /* digestUriFromResponse */
            putfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
       114: .line 544
            goto 119
       115: .line 545
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched URI: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
       116: .line 546
            aload 8 /* digestUriFromResponse */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       117: .line 547
            ldc "; expecting: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       118: .line 545
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       119: .line 551
      StackMap locals:
      StackMap stack:
            aload 1 /* responseVal */
            bipush 7
            aaload
            astore 9 /* responseFromClient */
        start local 9 // byte[] responseFromClient
       120: .line 552
            aload 9 /* responseFromClient */
            ifnonnull 122
       121: .line 553
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format  violation. Missing response."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       122: .line 559
      StackMap locals: byte[]
      StackMap stack:
            aload 1 /* responseVal */
            bipush 11
            aaload
            dup
            astore 10 /* authzidBytes */
        start local 10 // byte[] authzidBytes
       123: ifnull 125
       124: .line 560
            new java.lang.String
            dup
            aload 10 /* authzidBytes */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokespecial java.lang.String.<init>:([BLjava/lang/String;)V
            goto 126
      StackMap locals: byte[]
      StackMap stack:
       125: aload 3 /* username */
       126: .line 559
      StackMap locals:
      StackMap stack: java.lang.String
            astore 11 /* authzidFromClient */
        start local 11 // java.lang.String authzidFromClient
       127: .line 562
            aload 10 /* authzidBytes */
            ifnull 131
       128: .line 563
            getstatic com.sun.security.sasl.digest.DigestMD5Server.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            ldc "DIGEST88:Authzid: {0}"
       129: .line 564
            new java.lang.String
            dup
            aload 10 /* authzidBytes */
            invokespecial java.lang.String.<init>:([B)V
       130: .line 563
            invokevirtual java.util.logging.Logger.log:(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V
       131: .line 573
      StackMap locals: java.lang.String
      StackMap stack:
            new javax.security.sasl.RealmCallback
            dup
            ldc "DIGEST-MD5 realm: "
       132: .line 574
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
       133: .line 573
            invokespecial javax.security.sasl.RealmCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 13 /* rcb */
        start local 13 // javax.security.sasl.RealmCallback rcb
       134: .line 575
            new javax.security.auth.callback.NameCallback
            dup
            ldc "DIGEST-MD5 authentication ID: "
       135: .line 576
            aload 3 /* username */
       136: .line 575
            invokespecial javax.security.auth.callback.NameCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 14 /* ncb */
        start local 14 // javax.security.auth.callback.NameCallback ncb
       137: .line 580
            new javax.security.auth.callback.PasswordCallback
            dup
            ldc "DIGEST-MD5 password: "
            iconst_0
            invokespecial javax.security.auth.callback.PasswordCallback.<init>:(Ljava/lang/String;Z)V
       138: .line 579
            astore 15 /* pcb */
        start local 15 // javax.security.auth.callback.PasswordCallback pcb
       139: .line 582
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.cbh:Ljavax/security/auth/callback/CallbackHandler;
            iconst_3
            anewarray javax.security.auth.callback.Callback
            dup
            iconst_0
            aload 13 /* rcb */
            aastore
            dup
            iconst_1
            aload 14 /* ncb */
            aastore
            dup
            iconst_2
            aload 15 /* pcb */
            aastore
            invokeinterface javax.security.auth.callback.CallbackHandler.handle:([Ljavax/security/auth/callback/Callback;)V
       140: .line 583
            aload 15 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.getPassword:()[C
            astore 12 /* passwd */
        start local 12 // char[] passwd
       141: .line 584
            aload 15 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.clearPassword:()V
        end local 15 // javax.security.auth.callback.PasswordCallback pcb
        end local 14 // javax.security.auth.callback.NameCallback ncb
        end local 13 // javax.security.sasl.RealmCallback rcb
       142: .line 586
            goto 151
        end local 12 // char[] passwd
      StackMap locals:
      StackMap stack: javax.security.auth.callback.UnsupportedCallbackException
       143: astore 13 /* e */
        start local 13 // javax.security.auth.callback.UnsupportedCallbackException e
       144: .line 587
            new javax.security.sasl.SaslException
            dup
       145: .line 588
            ldc "DIGEST-MD5: Cannot perform callback to acquire password"
            aload 13 /* e */
       146: .line 587
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 13 // javax.security.auth.callback.UnsupportedCallbackException e
       147: .line 590
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 13 /* e */
        start local 13 // java.io.IOException e
       148: .line 591
            new javax.security.sasl.SaslException
            dup
       149: .line 592
            ldc "DIGEST-MD5: IO error acquiring password"
            aload 13 /* e */
       150: .line 591
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 13 // java.io.IOException e
        start local 12 // char[] passwd
       151: .line 595
      StackMap locals: char[]
      StackMap stack:
            aload 12 /* passwd */
            ifnonnull 157
       152: .line 596
            new javax.security.sasl.SaslException
            dup
       153: .line 597
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: cannot acquire password for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       154: .line 598
            ldc " in realm : "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       155: .line 597
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       156: .line 596
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       157: .line 606
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc "AUTHENTICATE"
       158: .line 607
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            aload 3 /* username */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
       159: .line 608
            aload 12 /* passwd */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
       160: .line 609
            aload 5 /* cnonce */
            iconst_1
            aload 10 /* authzidBytes */
       161: .line 606
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseValue:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[C[B[BI[B)[B
            astore 13 /* expectedResponse */
        start local 13 // byte[] expectedResponse
       162: .line 611
            goto 171
        end local 13 // byte[] expectedResponse
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
       163: astore 14 /* e */
        start local 14 // java.security.NoSuchAlgorithmException e
       164: .line 612
            new javax.security.sasl.SaslException
            dup
       165: .line 613
            ldc "DIGEST-MD5: problem duplicating client response"
            aload 14 /* e */
       166: .line 612
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.security.NoSuchAlgorithmException e
       167: .line 614
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 14 /* e */
        start local 14 // java.io.IOException e
       168: .line 615
            new javax.security.sasl.SaslException
            dup
       169: .line 616
            ldc "DIGEST-MD5: problem duplicating client response"
            aload 14 /* e */
       170: .line 615
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.io.IOException e
        start local 13 // byte[] expectedResponse
       171: .line 619
      StackMap locals: byte[]
      StackMap stack:
            aload 9 /* responseFromClient */
            aload 13 /* expectedResponse */
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifne 173
       172: .line 620
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: digest response format violation. Mismatched response."
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
       173: .line 627
      StackMap locals:
      StackMap stack:
            new javax.security.sasl.AuthorizeCallback
            dup
            aload 3 /* username */
            aload 11 /* authzidFromClient */
            invokespecial javax.security.sasl.AuthorizeCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
       174: .line 626
            astore 14 /* acb */
        start local 14 // javax.security.sasl.AuthorizeCallback acb
       175: .line 628
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.cbh:Ljavax/security/auth/callback/CallbackHandler;
            iconst_1
            anewarray javax.security.auth.callback.Callback
            dup
            iconst_0
            aload 14 /* acb */
            aastore
            invokeinterface javax.security.auth.callback.CallbackHandler.handle:([Ljavax/security/auth/callback/Callback;)V
       176: .line 630
            aload 14 /* acb */
            invokevirtual javax.security.sasl.AuthorizeCallback.isAuthorized:()Z
            ifeq 179
       177: .line 631
            aload 0 /* this */
            aload 14 /* acb */
            invokevirtual javax.security.sasl.AuthorizeCallback.getAuthorizedID:()Ljava/lang/String;
            putfield com.sun.security.sasl.digest.DigestMD5Server.authzid:Ljava/lang/String;
       178: .line 632
            goto 192
       179: .line 633
      StackMap locals: javax.security.sasl.AuthorizeCallback
      StackMap stack:
            new javax.security.sasl.SaslException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DIGEST-MD5: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       180: .line 634
            ldc " is not authorized to act as "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 11 /* authzidFromClient */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
       181: .line 633
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
        end local 14 // javax.security.sasl.AuthorizeCallback acb
       182: .line 636
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] byte[]
      StackMap stack: javax.security.sasl.SaslException
            astore 14 /* e */
        start local 14 // javax.security.sasl.SaslException e
       183: .line 637
            aload 14 /* e */
            athrow
        end local 14 // javax.security.sasl.SaslException e
       184: .line 638
      StackMap locals:
      StackMap stack: javax.security.auth.callback.UnsupportedCallbackException
            astore 14 /* e */
        start local 14 // javax.security.auth.callback.UnsupportedCallbackException e
       185: .line 639
            new javax.security.sasl.SaslException
            dup
       186: .line 640
            ldc "DIGEST-MD5: Cannot perform callback to check authzid"
            aload 14 /* e */
       187: .line 639
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // javax.security.auth.callback.UnsupportedCallbackException e
       188: .line 641
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 14 /* e */
        start local 14 // java.io.IOException e
       189: .line 642
            new javax.security.sasl.SaslException
            dup
       190: .line 643
            ldc "DIGEST-MD5: IO error checking authzid"
            aload 14 /* e */
       191: .line 642
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.io.IOException e
       192: .line 646
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* username */
            aload 12 /* passwd */
            aload 5 /* cnonce */
       193: .line 647
            iconst_1
            aload 10 /* authzidBytes */
       194: .line 646
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseAuth:(Ljava/lang/String;[C[BI[B)[B
            astore 16
       195: .line 650
            iconst_0
            istore 17 /* i */
        start local 17 // int i
       196: goto 199
       197: .line 651
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] byte[] top top byte[] int
      StackMap stack:
            aload 12 /* passwd */
            iload 17 /* i */
            iconst_0
            castore
       198: .line 650
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
       199: iload 17 /* i */
            aload 12 /* passwd */
            arraylength
            if_icmplt 197
        end local 17 // int i
       200: .line 646
            aload 16
            areturn
        end local 13 // byte[] expectedResponse
       201: .line 648
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[]
      StackMap stack: java.lang.Throwable
            astore 15
       202: .line 650
            iconst_0
            istore 17 /* i */
        start local 17 // int i
       203: goto 206
       204: .line 651
      StackMap locals: com.sun.security.sasl.digest.DigestMD5Server byte[][] int java.lang.String byte[] byte[] int top java.lang.String byte[] byte[] java.lang.String char[] top top java.lang.Throwable top int
      StackMap stack:
            aload 12 /* passwd */
            iload 17 /* i */
            iconst_0
            castore
       205: .line 650
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
       206: iload 17 /* i */
            aload 12 /* passwd */
            arraylength
            if_icmplt 204
        end local 17 // int i
       207: .line 653
            aload 15
            athrow
        end local 12 // char[] passwd
        end local 11 // java.lang.String authzidFromClient
        end local 10 // byte[] authzidBytes
        end local 9 // byte[] responseFromClient
        end local 8 // java.lang.String digestUriFromResponse
        end local 6 // byte cQop
        end local 5 // byte[] cnonce
        end local 4 // byte[] nonceFromClient
        end local 3 // java.lang.String username
        end local 2 // int clntMaxBufSize
        end local 1 // byte[][] responseVal
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0  208     0                   this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0  208     1            responseVal  [[B
            9  208     2         clntMaxBufSize  I
           14   16     3               username  Ljava/lang/String;
           17  208     3               username  Ljava/lang/String;
           31  208     4        nonceFromClient  [B
           36  208     5                 cnonce  [B
           55   56     6                   cQop  B
           57   60     6                   cQop  B
           61   64     6                   cQop  B
           67  208     6                   cQop  B
           79  104     8            foundCipher  I
           83   90     9                      j  I
          108  208     8  digestUriFromResponse  Ljava/lang/String;
          120  208     9     responseFromClient  [B
          123  208    10           authzidBytes  [B
          127  208    11      authzidFromClient  Ljava/lang/String;
          141  143    12                 passwd  [C
          151  208    12                 passwd  [C
          134  142    13                    rcb  Ljavax/security/sasl/RealmCallback;
          137  142    14                    ncb  Ljavax/security/auth/callback/NameCallback;
          139  142    15                    pcb  Ljavax/security/auth/callback/PasswordCallback;
          144  147    13                      e  Ljavax/security/auth/callback/UnsupportedCallbackException;
          148  151    13                      e  Ljava/io/IOException;
          162  163    13       expectedResponse  [B
          171  201    13       expectedResponse  [B
          164  167    14                      e  Ljava/security/NoSuchAlgorithmException;
          168  171    14                      e  Ljava/io/IOException;
          175  182    14                    acb  Ljavax/security/sasl/AuthorizeCallback;
          183  184    14                      e  Ljavax/security/sasl/SaslException;
          185  188    14                      e  Ljavax/security/auth/callback/UnsupportedCallbackException;
          189  192    14                      e  Ljava/io/IOException;
          196  200    17                      i  I
          203  207    17                      i  I
      Exception table:
        from    to  target  type
         131   142     143  Class javax.security.auth.callback.UnsupportedCallbackException
         131   142     147  Class java.io.IOException
         157   162     163  Class java.security.NoSuchAlgorithmException
         157   162     167  Class java.io.IOException
         173   182     182  Class javax.security.sasl.SaslException
         173   182     184  Class javax.security.auth.callback.UnsupportedCallbackException
         173   182     188  Class java.io.IOException
         157   195     201  any
    Exceptions:
      throws javax.security.sasl.SaslException, java.io.UnsupportedEncodingException
    MethodParameters:
             Name  Flags
      responseVal  

  private byte[] generateResponseAuth(java.lang.String, char[], byte[], int, byte[]);
    descriptor: (Ljava/lang/String;[C[BI[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=8, args_size=6
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
        start local 1 // java.lang.String username
        start local 2 // char[] passwd
        start local 3 // byte[] cnonce
        start local 4 // int nonceCount
        start local 5 // byte[] authzidBytes
         0: .line 676
            aload 0 /* this */
            ldc ""
         1: .line 677
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.digestUri:Ljava/lang/String;
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedQop:Ljava/lang/String;
            aload 1 /* username */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.negotiatedRealm:Ljava/lang/String;
         2: .line 678
            aload 2 /* passwd */
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.nonce:[B
            aload 3 /* cnonce */
            iload 4 /* nonceCount */
            aload 5 /* authzidBytes */
         3: .line 676
            invokevirtual com.sun.security.sasl.digest.DigestMD5Server.generateResponseValue:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[C[B[BI[B)[B
            astore 6 /* responseValue */
        start local 6 // byte[] responseValue
         4: .line 680
            aload 6 /* responseValue */
            arraylength
            bipush 8
            iadd
            newarray 8
            astore 7 /* challenge */
        start local 7 // byte[] challenge
         5: .line 681
            ldc "rspauth="
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.encoding:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            iconst_0
            aload 7 /* challenge */
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         6: .line 682
            aload 6 /* responseValue */
            iconst_0
            aload 7 /* challenge */
            bipush 8
         7: .line 683
            aload 6 /* responseValue */
            arraylength
         8: .line 682
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         9: .line 685
            aload 7 /* challenge */
        10: areturn
        end local 7 // byte[] challenge
        end local 6 // byte[] responseValue
        11: .line 687
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 6 /* e */
        start local 6 // java.security.NoSuchAlgorithmException e
        12: .line 688
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: problem generating response"
            aload 6 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.security.NoSuchAlgorithmException e
        13: .line 689
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 6 /* e */
        start local 6 // java.io.IOException e
        14: .line 690
            new javax.security.sasl.SaslException
            dup
            ldc "DIGEST-MD5: problem generating response"
            aload 6 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.io.IOException e
        end local 5 // byte[] authzidBytes
        end local 4 // int nonceCount
        end local 3 // byte[] cnonce
        end local 2 // char[] passwd
        end local 1 // java.lang.String username
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   15     0           this  Lcom/sun/security/sasl/digest/DigestMD5Server;
            0   15     1       username  Ljava/lang/String;
            0   15     2         passwd  [C
            0   15     3         cnonce  [B
            0   15     4     nonceCount  I
            0   15     5   authzidBytes  [B
            4   11     6  responseValue  [B
            5   11     7      challenge  [B
           12   13     6              e  Ljava/security/NoSuchAlgorithmException;
           14   15     6              e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0    10      11  Class java.security.NoSuchAlgorithmException
           0    10      13  Class java.io.IOException
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
              Name  Flags
      username      
      passwd        
      cnonce        
      nonceCount    
      authzidBytes  

  public java.lang.String getAuthorizationID();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.security.sasl.digest.DigestMD5Server this
         0: .line 695
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.completed:Z
            ifeq 2
         1: .line 696
            aload 0 /* this */
            getfield com.sun.security.sasl.digest.DigestMD5Server.authzid:Ljava/lang/String;
            areturn
         2: .line 698
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         3: .line 699
            ldc "DIGEST-MD5 server negotiation not complete"
         4: .line 698
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.sun.security.sasl.digest.DigestMD5Server this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/sun/security/sasl/digest/DigestMD5Server;
}
SourceFile: "DigestMD5Server.java"
InnerClasses:
  DigestIntegrity = com.sun.security.sasl.digest.DigestMD5Base$DigestIntegrity of com.sun.security.sasl.digest.DigestMD5Base
  final DigestPrivacy = com.sun.security.sasl.digest.DigestMD5Base$DigestPrivacy of com.sun.security.sasl.digest.DigestMD5Base