final class com.microsoft.sqlserver.jdbc.NTLMAuthentication extends com.microsoft.sqlserver.jdbc.SSPIAuthentication
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.microsoft.sqlserver.jdbc.NTLMAuthentication
  super_class: com.microsoft.sqlserver.jdbc.SSPIAuthentication
{
  private final java.util.logging.Logger logger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static final byte[] NTLM_HEADER_SIGNATURE;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

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

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

  private static final byte[] NTLM_CLIENT_CHALLENGE_RESPONSE_TYPE;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] NTLM_CLIENT_CHALLENGE_RESERVED1;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] NTLM_CLIENT_CHALLENGE_RESERVED2;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] NTLM_CLIENT_CHALLENGE_RESERVED3;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] NTLM_LMCHALLENAGERESPONSE;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] NTLMSSP_VERSION;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final long NTLMSSP_NEGOTIATE_UNICODE;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final long NTLMSSP_REQUEST_TARGET;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final long NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4096

  private static final long NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8192

  private static final long NTLMSSP_NEGOTIATE_TARGET_INFO;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8388608

  private static final long NTLMSSP_NEGOTIATE_ALWAYS_SIGN;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 32768

  private static final long NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 524288

  private static final short NTLM_AVID_MSVAVEOL;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final short NTLM_AVID_MSVAVNBCOMPUTERNAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final short NTLM_AVID_MSVAVNBDOMAINNAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final short NTLM_AVID_MSVAVDNSCOMPUTERNAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private static final short NTLM_AVID_MSVAVDNSDOMAINNAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final short NTLM_AVID_MSVAVDNSTREENAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final short NTLM_AVID_MSVAVFLAGS;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 6

  private static final short NTLM_AVID_MSVAVTIMESTAMP;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 7

  private static final short NTLM_AVID_MSVAVSINGLEHOST;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  private static final short NTLM_AVID_MSVAVTARGETNAME;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 9

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

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

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

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

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

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

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

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

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

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

  private static final long WINDOWS_EPOCH_DIFF;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 11644473600

  private com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext context;
    descriptor: Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 45
            bipush 8
            newarray 8
            dup
            iconst_0
            bipush 78
            bastore
            dup
            iconst_1
            bipush 84
            bastore
            dup
            iconst_2
            bipush 76
            bastore
            dup
            iconst_3
            bipush 77
            bastore
            dup
            iconst_4
            bipush 83
            bastore
            dup
            iconst_5
            bipush 83
            bastore
            dup
            bipush 6
            bipush 80
            bastore
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
         1: .line 60
            iconst_2
            newarray 8
            dup
            iconst_0
            iconst_1
            bastore
            dup
            iconst_1
            iconst_1
            bastore
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESPONSE_TYPE:[B
         2: .line 71
            iconst_2
            newarray 8
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED1:[B
         3: .line 72
            iconst_4
            newarray 8
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED2:[B
         4: .line 73
            iconst_4
            newarray 8
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED3:[B
         5: .line 91
            bipush 24
            newarray 8
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_LMCHALLENAGERESPONSE:[B
         6: .line 102
            bipush 8
            newarray 8
            putstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLMSSP_VERSION:[B
         7: .line 222
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.microsoft.sqlserver.jdbc.SQLServerConnection, java.lang.String, java.lang.String, byte[], java.lang.String);
    descriptor: (Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;Ljava/lang/String;Ljava/lang/String;[BLjava/lang/String;)V
    flags: (0x0000) 
    Code:
      stack=9, locals=6, args_size=6
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // com.microsoft.sqlserver.jdbc.SQLServerConnection con
        start local 2 // java.lang.String domainName
        start local 3 // java.lang.String userName
        start local 4 // byte[] passwordHash
        start local 5 // java.lang.String workstation
         0: .line 336
            aload 0 /* this */
            invokespecial com.microsoft.sqlserver.jdbc.SSPIAuthentication.<init>:()V
         1: .line 33
            aload 0 /* this */
         2: .line 34
            ldc "com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication"
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
         3: .line 318
            aload 0 /* this */
            aconst_null
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
         4: .line 338
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            ifnonnull 6
         5: .line 339
            aload 0 /* this */
            new com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext
            dup
            aload 0 /* this */
            aload 1 /* con */
            aload 2 /* domainName */
            aload 3 /* userName */
            aload 4 /* passwordHash */
            aload 5 /* workstation */
            invokespecial com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.<init>:(Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;Ljava/lang/String;Ljava/lang/String;[BLjava/lang/String;)V
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
         6: .line 341
      StackMap locals: com.microsoft.sqlserver.jdbc.NTLMAuthentication com.microsoft.sqlserver.jdbc.SQLServerConnection java.lang.String java.lang.String byte[] java.lang.String
      StackMap stack:
            return
        end local 5 // java.lang.String workstation
        end local 4 // byte[] passwordHash
        end local 3 // java.lang.String userName
        end local 2 // java.lang.String domainName
        end local 1 // com.microsoft.sqlserver.jdbc.SQLServerConnection con
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0          this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    7     1           con  Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
            0    7     2    domainName  Ljava/lang/String;
            0    7     3      userName  Ljava/lang/String;
            0    7     4  passwordHash  [B
            0    7     5   workstation  Ljava/lang/String;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
              Name  Flags
      con           final
      domainName    final
      userName      final
      passwordHash  final
      workstation   final

  byte[] generateClientContext(byte[], boolean[]);
    descriptor: ([B[Z)[B
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] inToken
        start local 2 // boolean[] done
         0: .line 356
            aload 0 /* this */
            aload 1 /* inToken */
            aload 2 /* done */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.initializeSecurityContext:([B[Z)[B
            areturn
        end local 2 // boolean[] done
        end local 1 // byte[] inToken
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    1     1  inToken  [B
            0    1     2     done  [Z
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
         Name  Flags
      inToken  final
      done     final

  void releaseClientContext();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
         0: .line 367
            aload 0 /* this */
            aconst_null
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
         1: .line 368
            return
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;

  private void parseNtlmChallenge(byte[]);
    descriptor: ([B)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=15, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] inToken
         0: .line 382
            aload 1 /* inToken */
            invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            astore 2 /* token */
        start local 2 // java.nio.ByteBuffer token
         1: .line 385
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            arraylength
            newarray 8
            astore 3 /* signature */
        start local 3 // byte[] signature
         2: .line 386
            aload 2 /* token */
            aload 3 /* signature */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
         3: .line 387
            aload 3 /* signature */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifne 7
         4: .line 388
            new java.text.MessageFormat
            dup
            ldc "R_ntlmSignatureError"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 4 /* form */
        start local 4 // java.text.MessageFormat form
         5: .line 389
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* signature */
            aastore
            astore 5 /* msgArgs */
        start local 5 // java.lang.Object[] msgArgs
         6: .line 390
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 4 /* form */
            aload 5 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.Object[] msgArgs
        end local 4 // java.text.MessageFormat form
         7: .line 394
      StackMap locals: java.nio.ByteBuffer byte[]
      StackMap stack:
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getInt:()I
            istore 4 /* messageType */
        start local 4 // int messageType
         8: .line 395
            iload 4 /* messageType */
            iconst_2
            if_icmpeq 12
         9: .line 396
            new java.text.MessageFormat
            dup
            ldc "R_ntlmMessageTypeError"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 5 /* form */
        start local 5 // java.text.MessageFormat form
        10: .line 397
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            iload 4 /* messageType */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            astore 6 /* msgArgs */
        start local 6 // java.lang.Object[] msgArgs
        11: .line 398
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 5 /* form */
            aload 6 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.lang.Object[] msgArgs
        end local 5 // java.text.MessageFormat form
        12: .line 402
      StackMap locals: int
      StackMap stack:
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            istore 5 /* targetNameLen */
        start local 5 // int targetNameLen
        13: .line 403
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            pop
        14: .line 404
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getInt:()I
            pop
        15: .line 407
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getInt:()I
            pop
        16: .line 410
            aload 2 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.serverChallenge:[B
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        17: .line 413
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getLong:()J
            pop2
        18: .line 416
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            istore 6 /* targetInfoLen */
        start local 6 // int targetInfoLen
        19: .line 417
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            pop
        20: .line 418
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getInt:()I
            pop
        21: .line 420
            aload 2 /* token */
            invokevirtual java.nio.ByteBuffer.getLong:()J
            pop2
        22: .line 423
            iload 5 /* targetNameLen */
            newarray 8
            astore 7 /* targetName */
        start local 7 // byte[] targetName
        23: .line 424
            aload 2 /* token */
            aload 7 /* targetName */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        24: .line 427
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            iload 6 /* targetInfoLen */
            newarray 8
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
        25: .line 428
            aload 2 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        26: .line 429
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            arraylength
            ifne 28
        27: .line 430
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_ntlmNoTargetInfo"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        28: .line 434
      StackMap locals: int int byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            astore 8 /* targetInfoBuf */
        start local 8 // java.nio.ByteBuffer targetInfoBuf
        29: .line 435
            iconst_0
            istore 9 /* done */
        start local 9 // boolean done
        30: .line 436
            iconst_0
            istore 10 /* i */
        start local 10 // int i
        31: goto 48
        32: .line 437
      StackMap locals: java.nio.ByteBuffer int int
      StackMap stack:
            aload 8 /* targetInfoBuf */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            istore 11 /* id */
        start local 11 // int id
        33: .line 438
            aload 8 /* targetInfoBuf */
            invokevirtual java.nio.ByteBuffer.getShort:()S
            newarray 8
            astore 12 /* value */
        start local 12 // byte[] value
        34: .line 439
            aload 8 /* targetInfoBuf */
            aload 12 /* value */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        35: .line 440
            iload 11 /* id */
            tableswitch { // 0 - 9
                    0: 40
                    1: 42
                    2: 42
                    3: 42
                    4: 42
                    5: 42
                    6: 42
                    7: 36
                    8: 42
                    9: 42
              default: 43
          }
        36: .line 442
      StackMap locals: int byte[]
      StackMap stack:
            aload 12 /* value */
            arraylength
            ifle 46
        37: .line 443
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            bipush 8
            newarray 8
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
        38: .line 444
            aload 12 /* value */
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        39: .line 446
            goto 46
        40: .line 448
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 9 /* done */
        41: .line 449
            goto 46
        42: .line 458
      StackMap locals:
      StackMap stack:
            goto 46
        43: .line 460
      StackMap locals:
      StackMap stack:
            new java.text.MessageFormat
            dup
            ldc "R_ntlmUnknownValue"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 13 /* form */
        start local 13 // java.text.MessageFormat form
        44: .line 461
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 12 /* value */
            aastore
            astore 14 /* msgArgs */
        start local 14 // java.lang.Object[] msgArgs
        45: .line 462
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 13 /* form */
            aload 14 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 14 // java.lang.Object[] msgArgs
        end local 13 // java.text.MessageFormat form
        46: .line 465
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINEST:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 48
        47: .line 466
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " NTLM Challenge Message target info: AvId "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 11 /* id */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.logging.Logger.finest:(Ljava/lang/String;)V
        end local 12 // byte[] value
        end local 11 // int id
        48: .line 436
      StackMap locals:
      StackMap stack:
            iload 10 /* i */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            arraylength
            if_icmpge 49
            iload 9 /* done */
            ifeq 32
        end local 10 // int i
        49: .line 478
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            ifnull 50
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            arraylength
            ifgt 53
        50: .line 480
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.WARNING:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 55
        51: .line 481
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " NTLM Challenge Message target info error: Missing timestamp."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.logging.Logger.warning:(Ljava/lang/String;)V
        52: .line 483
            goto 55
        53: .line 485
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            aload 1 /* inToken */
            arraylength
            newarray 8
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.challengeMsg:[B
        54: .line 486
            aload 1 /* inToken */
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.challengeMsg:[B
            iconst_0
            aload 1 /* inToken */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        55: .line 488
      StackMap locals:
      StackMap stack:
            return
        end local 9 // boolean done
        end local 8 // java.nio.ByteBuffer targetInfoBuf
        end local 7 // byte[] targetName
        end local 6 // int targetInfoLen
        end local 5 // int targetNameLen
        end local 4 // int messageType
        end local 3 // byte[] signature
        end local 2 // java.nio.ByteBuffer token
        end local 1 // byte[] inToken
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   56     0           this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0   56     1        inToken  [B
            1   56     2          token  Ljava/nio/ByteBuffer;
            2   56     3      signature  [B
            5    7     4           form  Ljava/text/MessageFormat;
            6    7     5        msgArgs  [Ljava/lang/Object;
            8   56     4    messageType  I
           10   12     5           form  Ljava/text/MessageFormat;
           11   12     6        msgArgs  [Ljava/lang/Object;
           13   56     5  targetNameLen  I
           19   56     6  targetInfoLen  I
           23   56     7     targetName  [B
           29   56     8  targetInfoBuf  Ljava/nio/ByteBuffer;
           30   56     9           done  Z
           31   49    10              i  I
           33   48    11             id  I
           34   48    12          value  [B
           44   46    13           form  Ljava/text/MessageFormat;
           45   46    14        msgArgs  [Ljava/lang/Object;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
         Name  Flags
      inToken  final

  private byte[] initializeSecurityContext(byte[], boolean[]);
    descriptor: ([B[Z)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] inToken
        start local 2 // boolean[] done
         0: .line 502
            aload 1 /* inToken */
            ifnull 1
            aload 1 /* inToken */
            arraylength
            ifne 2
         1: .line 503
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.generateNtlmNegotiate:()[B
            areturn
         2: .line 506
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* inToken */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.parseNtlmChallenge:([B)V
         3: .line 509
            aload 2 /* done */
            iconst_0
            iconst_1
            bastore
         4: .line 510
            aload 0 /* this */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.generateNtlmAuthenticate:()[B
            areturn
        end local 2 // boolean[] done
        end local 1 // byte[] inToken
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    5     1  inToken  [B
            0    5     2     done  [Z
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
         Name  Flags
      inToken  final
      done     final

  private byte[] generateClientChallengeBlob(byte[]);
    descriptor: ([B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] clientNonce
         0: .line 537
            bipush 8
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            astore 2 /* time */
        start local 2 // java.nio.ByteBuffer time
         1: .line 538
            aload 2 /* time */
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
            invokestatic java.time.Instant.now:()Ljava/time/Instant;
            invokevirtual java.time.Instant.getEpochSecond:()J
            ldc 11644473600
            ladd
            invokevirtual java.util.concurrent.TimeUnit.toNanos:(J)J
            ldc 100
            ldiv
            invokevirtual java.nio.ByteBuffer.putLong:(J)Ljava/nio/ByteBuffer;
            pop
         2: .line 539
            aload 2 /* time */
            invokevirtual java.nio.ByteBuffer.array:()[B
            astore 3 /* currentTime */
        start local 3 // byte[] currentTime
         3: .line 543
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESPONSE_TYPE:[B
            arraylength
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED1:[B
            arraylength
            iadd
         4: .line 544
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED2:[B
            arraylength
         5: .line 543
            iadd
         6: .line 544
            aload 3 /* currentTime */
            arraylength
         7: .line 543
            iadd
         8: .line 544
            bipush 8
         9: .line 543
            iadd
        10: .line 545
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED3:[B
            arraylength
        11: .line 543
            iadd
        12: .line 545
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            arraylength
        13: .line 543
            iadd
        14: .line 546
            iconst_2
        15: .line 543
            iadd
        16: .line 546
            iconst_2
        17: .line 543
            iadd
        18: .line 546
            iconst_4
        19: .line 543
            iadd
        20: .line 547
            iconst_2
        21: .line 543
            iadd
        22: .line 547
            iconst_2
        23: .line 543
            iadd
        24: .line 547
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.spnUbytes:[B
            arraylength
        25: .line 543
            iadd
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
        26: .line 548
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
        27: .line 542
            astore 4 /* token */
        start local 4 // java.nio.ByteBuffer token
        28: .line 550
            aload 4 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESPONSE_TYPE:[B
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        29: .line 551
            aload 4 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED1:[B
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        30: .line 552
            aload 4 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED2:[B
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        31: .line 554
            aload 4 /* token */
            aload 3 /* currentTime */
            iconst_0
            bipush 8
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        32: .line 555
            aload 4 /* token */
            aload 1 /* clientNonce */
            iconst_0
            bipush 8
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        33: .line 556
            aload 4 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_CLIENT_CHALLENGE_RESERVED3:[B
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        34: .line 563
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            ifnull 35
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            arraylength
            ifgt 41
        35: .line 564
      StackMap locals: java.nio.ByteBuffer byte[] java.nio.ByteBuffer
      StackMap stack:
            aload 4 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        36: .line 565
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.WARNING:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 45
        37: .line 566
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.logger:Ljava/util/logging/Logger;
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        38: .line 567
            ldc " MsvAvTimestamp not recieved from SQL Server in Challenge Message. MIC field will not be set."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        39: .line 566
            invokevirtual java.util.logging.Logger.warning:(Ljava/lang/String;)V
        40: .line 569
            goto 45
        41: .line 571
      StackMap locals:
      StackMap stack:
            aload 4 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.targetInfo:[B
            arraylength
            iconst_2
            isub
            iconst_2
            isub
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        42: .line 574
            aload 4 /* token */
            bipush 6
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        43: .line 575
            aload 4 /* token */
            iconst_4
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        44: .line 576
            aload 4 /* token */
            iconst_2
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        45: .line 580
      StackMap locals:
      StackMap stack:
            aload 4 /* token */
            bipush 9
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        46: .line 581
            aload 4 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.spnUbytes:[B
            arraylength
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        47: .line 582
            aload 4 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.spnUbytes:[B
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.spnUbytes:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        48: .line 585
            aload 4 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        49: .line 586
            aload 4 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        50: .line 588
            aload 4 /* token */
            invokevirtual java.nio.ByteBuffer.array:()[B
            areturn
        end local 4 // java.nio.ByteBuffer token
        end local 3 // byte[] currentTime
        end local 2 // java.nio.ByteBuffer time
        end local 1 // byte[] clientNonce
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   51     0         this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0   51     1  clientNonce  [B
            1   51     2         time  Ljava/nio/ByteBuffer;
            3   51     3  currentTime  [B
           28   51     4        token  Ljava/nio/ByteBuffer;
    MethodParameters:
             Name  Flags
      clientNonce  final

  private byte[] hmacMD5(byte[], byte[]);
    descriptor: ([B[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] key
        start local 2 // byte[] data
         0: .line 605
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 1 /* key */
            ldc "HmacMD5"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 3 /* keySpec */
        start local 3 // javax.crypto.spec.SecretKeySpec keySpec
         1: .line 606
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 3 /* keySpec */
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
         2: .line 607
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 2 /* data */
            invokevirtual javax.crypto.Mac.doFinal:([B)[B
            areturn
        end local 3 // javax.crypto.spec.SecretKeySpec keySpec
        end local 2 // byte[] data
        end local 1 // byte[] key
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    3     1      key  [B
            0    3     2     data  [B
            1    3     3  keySpec  Ljavax/crypto/spec/SecretKeySpec;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   final
      data  final

  private static byte[] md4(byte[]);
    descriptor: ([B)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // byte[] str
         0: .line 618
            new mssql.security.provider.MD4
            dup
            invokespecial mssql.security.provider.MD4.<init>:()V
            astore 1 /* md */
        start local 1 // mssql.security.provider.MD4 md
         1: .line 619
            aload 1 /* md */
            invokevirtual mssql.security.provider.MD4.reset:()V
         2: .line 620
            aload 1 /* md */
            aload 0 /* str */
            invokevirtual mssql.security.provider.MD4.update:([B)V
         3: .line 621
            aload 1 /* md */
            invokevirtual mssql.security.provider.MD4.digest:()[B
            areturn
        end local 1 // mssql.security.provider.MD4 md
        end local 0 // byte[] str
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0   str  [B
            1    4     1    md  Lmssql/security/provider/MD4;
    MethodParameters:
      Name  Flags
      str   final

  private static byte[] unicode(java.lang.String);
    descriptor: (Ljava/lang/String;)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String str
         0: .line 632
            aload 0 /* str */
            ifnull 1
            aload 0 /* str */
            getstatic java.nio.charset.StandardCharsets.UTF_16LE:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            goto 2
      StackMap locals:
      StackMap stack:
         1: aconst_null
      StackMap locals:
      StackMap stack: byte[]
         2: areturn
        end local 0 // java.lang.String str
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0   str  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      str   final

  private byte[] concat(byte[], byte[]);
    descriptor: ([B[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] arr1
        start local 2 // byte[] arr2
         0: .line 645
            aload 1 /* arr1 */
            ifnull 1
            aload 2 /* arr2 */
            ifnonnull 2
         1: .line 646
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         2: .line 649
      StackMap locals:
      StackMap stack:
            aload 1 /* arr1 */
            arraylength
            aload 2 /* arr2 */
            arraylength
            iadd
            newarray 8
            astore 3 /* temp */
        start local 3 // byte[] temp
         3: .line 650
            aload 1 /* arr1 */
            iconst_0
            aload 3 /* temp */
            iconst_0
            aload 1 /* arr1 */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 651
            aload 2 /* arr2 */
            iconst_0
            aload 3 /* temp */
            aload 1 /* arr1 */
            arraylength
            aload 2 /* arr2 */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 652
            aload 3 /* temp */
            areturn
        end local 3 // byte[] temp
        end local 2 // byte[] arr2
        end local 1 // byte[] arr1
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    6     1  arr1  [B
            0    6     2  arr2  [B
            3    6     3  temp  [B
    MethodParameters:
      Name  Flags
      arr1  final
      arr2  final

  private int getByteArrayLength(byte[]);
    descriptor: ([B)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] arr
         0: .line 663
            aload 1 /* arr */
            ifnonnull 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* arr */
            arraylength
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 1 // byte[] arr
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    3     1   arr  [B
    MethodParameters:
      Name  Flags
      arr   

  private byte[] ntowfv2();
    descriptor: ()[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
         0: .line 674
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.passwordHash:[B
         1: .line 675
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.upperUserName:Ljava/lang/String;
            ifnull 2
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.upperUserName:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainName:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.unicode:(Ljava/lang/String;)[B
            goto 3
         2: .line 676
      StackMap locals: com.microsoft.sqlserver.jdbc.NTLMAuthentication
      StackMap stack: com.microsoft.sqlserver.jdbc.NTLMAuthentication byte[]
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainName:Ljava/lang/String;
            invokestatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.unicode:(Ljava/lang/String;)[B
         3: .line 674
      StackMap locals: com.microsoft.sqlserver.jdbc.NTLMAuthentication
      StackMap stack: com.microsoft.sqlserver.jdbc.NTLMAuthentication byte[] byte[]
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.hmacMD5:([B[B)[B
            areturn
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
    Exceptions:
      throws java.security.InvalidKeyException

  private byte[] computeResponse(byte[]);
    descriptor: ([B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
        start local 1 // byte[] responseKeyNT
         0: .line 703
            bipush 8
            newarray 8
            astore 2 /* clientNonce */
        start local 2 // byte[] clientNonce
         1: .line 704
            invokestatic java.util.concurrent.ThreadLocalRandom.current:()Ljava/util/concurrent/ThreadLocalRandom;
            aload 2 /* clientNonce */
            invokevirtual java.util.concurrent.ThreadLocalRandom.nextBytes:([B)V
         2: .line 707
            aload 0 /* this */
            aload 2 /* clientNonce */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.generateClientChallengeBlob:([B)[B
            astore 3 /* temp */
        start local 3 // byte[] temp
         3: .line 709
            aload 0 /* this */
            aload 1 /* responseKeyNT */
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.serverChallenge:[B
            aload 3 /* temp */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.concat:([B[B)[B
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.hmacMD5:([B[B)[B
            astore 4 /* ntProofStr */
        start local 4 // byte[] ntProofStr
         4: .line 711
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            aload 0 /* this */
            aload 1 /* responseKeyNT */
            aload 4 /* ntProofStr */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.hmacMD5:([B[B)[B
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.sessionBaseKey:[B
         5: .line 713
            aload 0 /* this */
            aload 4 /* ntProofStr */
            aload 3 /* temp */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.concat:([B[B)[B
            areturn
        end local 4 // byte[] ntProofStr
        end local 3 // byte[] temp
        end local 2 // byte[] clientNonce
        end local 1 // byte[] responseKeyNT
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            0    6     1  responseKeyNT  [B
            1    6     2    clientNonce  [B
            3    6     3           temp  [B
            4    6     4     ntProofStr  [B
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
               Name  Flags
      responseKeyNT  final

  private byte[] getNtChallengeResp();
    descriptor: ()[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
         0: .line 726
            aload 0 /* this */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.ntowfv2:()[B
            astore 1 /* responseKeyNT */
        start local 1 // byte[] responseKeyNT
         1: .line 727
            aload 0 /* this */
            aload 1 /* responseKeyNT */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.computeResponse:([B)[B
            areturn
        end local 1 // byte[] responseKeyNT
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            1    2     1  responseKeyNT  [B
    Exceptions:
      throws java.security.InvalidKeyException

  private byte[] generateNtlmAuthenticate();
    descriptor: ()[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=13, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
         0: .line 740
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainUbytes:[B
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 1 /* domainNameLen */
        start local 1 // int domainNameLen
         1: .line 741
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.userNameUbytes:[B
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 2 /* userNameLen */
        start local 2 // int userNameLen
         2: .line 742
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.workstation:Ljava/lang/String;
            invokestatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.unicode:(Ljava/lang/String;)[B
            astore 3 /* workstationBytes */
        start local 3 // byte[] workstationBytes
         3: .line 743
            aload 0 /* this */
            aload 3 /* workstationBytes */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 4 /* workstationLen */
        start local 4 // int workstationLen
         4: .line 744
            aconst_null
            astore 5 /* msg */
        start local 5 // byte[] msg
         5: .line 748
            aload 0 /* this */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getNtChallengeResp:()[B
            astore 6 /* ntChallengeResp */
        start local 6 // byte[] ntChallengeResp
         6: .line 749
            aload 0 /* this */
            aload 6 /* ntChallengeResp */
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 7 /* ntChallengeLen */
        start local 7 // int ntChallengeLen
         7: .line 752
            bipush 88
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_LMCHALLENAGERESPONSE:[B
            arraylength
            iadd
         8: .line 753
            iload 7 /* ntChallengeLen */
         9: .line 752
            iadd
        10: .line 753
            iload 1 /* domainNameLen */
        11: .line 752
            iadd
        12: .line 753
            iload 2 /* userNameLen */
        13: .line 752
            iadd
        14: .line 753
            iload 4 /* workstationLen */
        15: .line 752
            iadd
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
        16: .line 753
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
        17: .line 752
            astore 8 /* token */
        start local 8 // java.nio.ByteBuffer token
        18: .line 756
            aload 8 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            iconst_0
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        19: .line 757
            aload 8 /* token */
            iconst_3
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        20: .line 760
            bipush 88
            istore 9 /* offset */
        start local 9 // int offset
        21: .line 763
            aload 8 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        22: .line 764
            aload 8 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        23: .line 765
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        24: .line 766
            iload 9 /* offset */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_LMCHALLENAGERESPONSE:[B
            arraylength
            iadd
            istore 9 /* offset */
        25: .line 769
            aload 8 /* token */
            iload 7 /* ntChallengeLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        26: .line 770
            aload 8 /* token */
            iload 7 /* ntChallengeLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        27: .line 771
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        28: .line 772
            iload 9 /* offset */
            iload 7 /* ntChallengeLen */
            iadd
            istore 9 /* offset */
        29: .line 775
            aload 8 /* token */
            iload 1 /* domainNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        30: .line 776
            aload 8 /* token */
            iload 1 /* domainNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        31: .line 777
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        32: .line 778
            iload 9 /* offset */
            iload 1 /* domainNameLen */
            iadd
            istore 9 /* offset */
        33: .line 781
            aload 8 /* token */
            iload 2 /* userNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        34: .line 782
            aload 8 /* token */
            iload 2 /* userNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        35: .line 783
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        36: .line 784
            iload 9 /* offset */
            iload 2 /* userNameLen */
            iadd
            istore 9 /* offset */
        37: .line 787
            aload 8 /* token */
            iload 4 /* workstationLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        38: .line 788
            aload 8 /* token */
            iload 4 /* workstationLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        39: .line 789
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        40: .line 790
            iload 9 /* offset */
            iload 4 /* workstationLen */
            iadd
            istore 9 /* offset */
        41: .line 793
            aload 8 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        42: .line 794
            aload 8 /* token */
            iconst_0
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        43: .line 795
            aload 8 /* token */
            iload 9 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        44: .line 798
            aload 8 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateFlags:J
            l2i
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        45: .line 801
            aload 8 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLMSSP_VERSION:[B
            iconst_0
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLMSSP_VERSION:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        46: .line 804
            bipush 16
            newarray 8
            astore 10 /* mic */
        start local 10 // byte[] mic
        47: .line 805
            aload 8 /* token */
            invokevirtual java.nio.ByteBuffer.position:()I
            istore 11 /* micPosition */
        start local 11 // int micPosition
        48: .line 806
            aload 8 /* token */
            aload 10 /* mic */
            iconst_0
            bipush 16
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        49: .line 809
            aload 8 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_LMCHALLENAGERESPONSE:[B
            iconst_0
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_LMCHALLENAGERESPONSE:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        50: .line 810
            aload 8 /* token */
            aload 6 /* ntChallengeResp */
            iconst_0
            iload 7 /* ntChallengeLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        51: .line 811
            aload 8 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainUbytes:[B
            iconst_0
            iload 1 /* domainNameLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        52: .line 812
            aload 8 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.userNameUbytes:[B
            iconst_0
            iload 2 /* userNameLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        53: .line 813
            aload 8 /* token */
            aload 3 /* workstationBytes */
            iconst_0
            iload 4 /* workstationLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        54: .line 815
            aload 8 /* token */
            invokevirtual java.nio.ByteBuffer.array:()[B
            astore 5 /* msg */
        55: .line 822
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            ifnull 67
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.timestamp:[B
            arraylength
            ifle 67
        56: .line 823
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.sessionBaseKey:[B
            ldc "HmacMD5"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 12 /* keySpec */
        start local 12 // javax.crypto.spec.SecretKeySpec keySpec
        57: .line 824
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 12 /* keySpec */
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
        58: .line 825
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateMsg:[B
            invokevirtual javax.crypto.Mac.update:([B)V
        59: .line 826
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.challengeMsg:[B
            invokevirtual javax.crypto.Mac.update:([B)V
        60: .line 827
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.mac:Ljavax/crypto/Mac;
            aload 5 /* msg */
            invokevirtual javax.crypto.Mac.doFinal:([B)[B
            astore 10 /* mic */
        61: .line 830
            aload 10 /* mic */
            iconst_0
            aload 5 /* msg */
            iload 11 /* micPosition */
            bipush 16
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        end local 12 // javax.crypto.spec.SecretKeySpec keySpec
        end local 11 // int micPosition
        end local 10 // byte[] mic
        end local 9 // int offset
        end local 8 // java.nio.ByteBuffer token
        end local 7 // int ntChallengeLen
        end local 6 // byte[] ntChallengeResp
        62: .line 832
            goto 67
      StackMap locals: com.microsoft.sqlserver.jdbc.NTLMAuthentication int int byte[] int byte[]
      StackMap stack: java.security.InvalidKeyException
        63: astore 6 /* e */
        start local 6 // java.security.InvalidKeyException e
        64: .line 833
            new java.text.MessageFormat
            dup
            ldc "R_ntlmAuthenticateError"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 7 /* form */
        start local 7 // java.text.MessageFormat form
        65: .line 834
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* e */
            invokevirtual java.security.InvalidKeyException.getMessage:()Ljava/lang/String;
            aastore
            astore 8 /* msgArgs */
        start local 8 // java.lang.Object[] msgArgs
        66: .line 835
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 7 /* form */
            aload 8 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aload 6 /* e */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 8 // java.lang.Object[] msgArgs
        end local 7 // java.text.MessageFormat form
        end local 6 // java.security.InvalidKeyException e
        67: .line 838
      StackMap locals:
      StackMap stack:
            aload 5 /* msg */
            areturn
        end local 5 // byte[] msg
        end local 4 // int workstationLen
        end local 3 // byte[] workstationBytes
        end local 2 // int userNameLen
        end local 1 // int domainNameLen
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   68     0              this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            1   68     1     domainNameLen  I
            2   68     2       userNameLen  I
            3   68     3  workstationBytes  [B
            4   68     4    workstationLen  I
            5   68     5               msg  [B
            6   62     6   ntChallengeResp  [B
            7   62     7    ntChallengeLen  I
           18   62     8             token  Ljava/nio/ByteBuffer;
           21   62     9            offset  I
           47   62    10               mic  [B
           48   62    11       micPosition  I
           57   62    12           keySpec  Ljavax/crypto/spec/SecretKeySpec;
           64   67     6                 e  Ljava/security/InvalidKeyException;
           65   67     7              form  Ljava/text/MessageFormat;
           66   67     8           msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           5    62      63  Class java.security.InvalidKeyException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException

  private byte[] generateNtlmNegotiate();
    descriptor: ()[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
         0: .line 849
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainUbytes:[B
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 1 /* domainNameLen */
        start local 1 // int domainNameLen
         1: .line 850
            aload 0 /* this */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.workstation:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:()[B
            invokevirtual com.microsoft.sqlserver.jdbc.NTLMAuthentication.getByteArrayLength:([B)I
            istore 2 /* workstationLen */
        start local 2 // int workstationLen
         2: .line 852
            aconst_null
            astore 3 /* token */
        start local 3 // java.nio.ByteBuffer token
         3: .line 853
            bipush 32
            iload 1 /* domainNameLen */
            iadd
            iload 2 /* workstationLen */
            iadd
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
         4: .line 854
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
         5: .line 853
            astore 3 /* token */
         6: .line 857
            aload 3 /* token */
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            iconst_0
            getstatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.NTLM_HEADER_SIGNATURE:[B
            arraylength
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
         7: .line 858
            aload 3 /* token */
            iconst_1
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
         8: .line 861
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            ldc 8957957
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateFlags:J
         9: .line 864
            aload 3 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateFlags:J
            l2i
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        10: .line 866
            bipush 32
            istore 4 /* offset */
        start local 4 // int offset
        11: .line 869
            aload 3 /* token */
            iload 1 /* domainNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        12: .line 870
            aload 3 /* token */
            iload 1 /* domainNameLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        13: .line 871
            aload 3 /* token */
            iload 4 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        14: .line 872
            iload 4 /* offset */
            iload 1 /* domainNameLen */
            iadd
            istore 4 /* offset */
        15: .line 875
            aload 3 /* token */
            iload 2 /* workstationLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        16: .line 876
            aload 3 /* token */
            iload 2 /* workstationLen */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        17: .line 877
            aload 3 /* token */
            iload 4 /* offset */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        18: .line 878
            iload 4 /* offset */
            iload 2 /* workstationLen */
            iadd
            istore 4 /* offset */
        19: .line 883
            aload 3 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.domainUbytes:[B
            iconst_0
            iload 1 /* domainNameLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        20: .line 884
            aload 3 /* token */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.workstation:Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:()[B
            iconst_0
            iload 2 /* workstationLen */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        21: .line 887
            aload 3 /* token */
            invokevirtual java.nio.ByteBuffer.array:()[B
            astore 5 /* msg */
        start local 5 // byte[] msg
        22: .line 888
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            aload 5 /* msg */
            arraylength
            newarray 8
            putfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateMsg:[B
        23: .line 889
            aload 5 /* msg */
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication.context:Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication$NTLMContext;
            getfield com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext.negotiateMsg:[B
            iconst_0
            aload 5 /* msg */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        24: .line 891
            aload 5 /* msg */
            areturn
        end local 5 // byte[] msg
        end local 4 // int offset
        end local 3 // java.nio.ByteBuffer token
        end local 2 // int workstationLen
        end local 1 // int domainNameLen
        end local 0 // com.microsoft.sqlserver.jdbc.NTLMAuthentication this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   25     0            this  Lcom/microsoft/sqlserver/jdbc/NTLMAuthentication;
            1   25     1   domainNameLen  I
            2   25     2  workstationLen  I
            3   25     3           token  Ljava/nio/ByteBuffer;
           11   25     4          offset  I
           22   25     5             msg  [B

  public static byte[] getNtlmPasswordHash(java.lang.String);
    descriptor: (Ljava/lang/String;)[B
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // java.lang.String password
         0: .line 895
            aload 0 /* password */
            ifnonnull 2
         1: .line 896
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_NtlmNoUserPasswordDomain"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
         2: .line 899
      StackMap locals:
      StackMap stack:
            aload 0 /* password */
            invokestatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.unicode:(Ljava/lang/String;)[B
            invokestatic com.microsoft.sqlserver.jdbc.NTLMAuthentication.md4:([B)[B
            areturn
        end local 0 // java.lang.String password
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0  password  Ljava/lang/String;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
          Name  Flags
      password  
}
SourceFile: "NTLMAuthentication.java"
NestMembers:
  com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext
InnerClasses:
  private NTLMContext = com.microsoft.sqlserver.jdbc.NTLMAuthentication$NTLMContext of com.microsoft.sqlserver.jdbc.NTLMAuthentication