class com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility
  super_class: java.lang.Object
{
  private static final java.util.logging.Logger connectionlogger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static final int GONE;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 410

  static final int TOO_MANY_RESQUESTS;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 429

  static final int NOT_FOUND;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 404

  static final int INTERNAL_SERVER_ERROR;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 500

  static final int NETWORK_CONNECT_TIMEOUT_ERROR;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 599

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 37
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerSecurityUtility;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
         3: .line 39
            ldc "com.microsoft.sqlserver.jdbc.internals.SQLServerConnection"
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
         4: .line 38
            putstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
         5: .line 45
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility this
         0: .line 37
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/sqlserver/jdbc/SQLServerSecurityUtility;

  static byte[] getHMACWithSHA256(byte[], byte[], int);
    descriptor: ([B[BI)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // byte[] plainText
        start local 1 // byte[] key
        start local 2 // int length
         0: .line 60
            iload 2 /* length */
            newarray 8
            astore 4 /* hash */
        start local 4 // byte[] hash
         1: .line 61
            ldc "HmacSHA256"
            invokestatic javax.crypto.Mac.getInstance:(Ljava/lang/String;)Ljavax/crypto/Mac;
            astore 5 /* mac */
        start local 5 // javax.crypto.Mac mac
         2: .line 62
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 1 /* key */
            ldc "HmacSHA256"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* ivkeySpec */
        start local 6 // javax.crypto.spec.SecretKeySpec ivkeySpec
         3: .line 63
            aload 5 /* mac */
            aload 6 /* ivkeySpec */
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
         4: .line 64
            aload 5 /* mac */
            aload 0 /* plainText */
            invokevirtual javax.crypto.Mac.doFinal:([B)[B
            astore 3 /* computedHash */
        start local 3 // byte[] computedHash
         5: .line 66
            aload 3 /* computedHash */
            iconst_0
            aload 4 /* hash */
            iconst_0
            aload 4 /* hash */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         6: .line 67
            aload 4 /* hash */
            areturn
        end local 6 // javax.crypto.spec.SecretKeySpec ivkeySpec
        end local 5 // javax.crypto.Mac mac
        end local 4 // byte[] hash
        end local 3 // byte[] computedHash
        end local 2 // int length
        end local 1 // byte[] key
        end local 0 // byte[] plainText
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0     plainText  [B
            0    7     1           key  [B
            0    7     2        length  I
            5    7     3  computedHash  [B
            1    7     4          hash  [B
            2    7     5           mac  Ljavax/crypto/Mac;
            3    7     6     ivkeySpec  Ljavax/crypto/spec/SecretKeySpec;
    Exceptions:
      throws java.security.NoSuchAlgorithmException, java.security.InvalidKeyException
    MethodParameters:
           Name  Flags
      plainText  
      key        
      length     

  static boolean compareBytes(byte[], byte[], int, int);
    descriptor: ([B[BII)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // byte[] buffer1
        start local 1 // byte[] buffer2
        start local 2 // int buffer2Index
        start local 3 // int lengthToCompare
         0: .line 82
            aload 0 /* buffer1 */
            ifnull 1
            aload 1 /* buffer2 */
            ifnonnull 2
         1: .line 83
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 86
      StackMap locals:
      StackMap stack:
            aload 1 /* buffer2 */
            arraylength
            iload 2 /* buffer2Index */
            isub
            iload 3 /* lengthToCompare */
            if_icmpge 4
         3: .line 87
            iconst_0
            ireturn
         4: .line 90
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 4 /* index */
        start local 4 // int index
         5: goto 9
         6: .line 91
      StackMap locals: int
      StackMap stack:
            aload 0 /* buffer1 */
            iload 4 /* index */
            baload
            aload 1 /* buffer2 */
            iload 2 /* buffer2Index */
            iload 4 /* index */
            iadd
            baload
            if_icmpeq 8
         7: .line 92
            iconst_0
            ireturn
         8: .line 90
      StackMap locals:
      StackMap stack:
            iinc 4 /* index */ 1
      StackMap locals:
      StackMap stack:
         9: iload 4 /* index */
            aload 0 /* buffer1 */
            arraylength
            if_icmpge 10
            iload 4 /* index */
            iload 3 /* lengthToCompare */
            if_icmplt 6
        end local 4 // int index
        10: .line 95
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 3 // int lengthToCompare
        end local 2 // int buffer2Index
        end local 1 // byte[] buffer2
        end local 0 // byte[] buffer1
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   11     0          buffer1  [B
            0   11     1          buffer2  [B
            0   11     2     buffer2Index  I
            0   11     3  lengthToCompare  I
            5   10     4            index  I
    MethodParameters:
                 Name  Flags
      buffer1          
      buffer2          
      buffer2Index     
      lengthToCompare  

  static byte[] encryptWithKey(byte[], com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
    descriptor: ([BLcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=5, args_size=3
        start local 0 // byte[] plainText
        start local 1 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
        start local 2 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
         0: .line 104
            aload 2 /* connection */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getTrustedServerNameAE:()Ljava/lang/String;
            astore 3 /* serverName */
        start local 3 // java.lang.String serverName
         1: .line 105
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 2
            aload 3 /* serverName */
            ifnonnull 2
            new java.lang.AssertionError
            dup
            ldc "Server name should npt be null in EncryptWithKey"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         2: .line 108
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* md */
            invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
            ifne 4
         3: .line 109
            aload 1 /* md */
            aload 2 /* connection */
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.decryptSymmetricKey:(Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
         4: .line 112
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 5
            aload 1 /* md */
            invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
            ifne 5
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         5: .line 113
      StackMap locals:
      StackMap stack:
            aload 1 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
            aload 0 /* plainText */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm.encryptData:([B)[B
            astore 4 /* cipherText */
        start local 4 // byte[] cipherText
         6: .line 114
            aload 4 /* cipherText */
            ifnull 7
            aload 4 /* cipherText */
            arraylength
            ifne 8
         7: .line 115
      StackMap locals: byte[]
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_NullCipherTextAE"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
         8: .line 117
      StackMap locals:
      StackMap stack:
            aload 4 /* cipherText */
            areturn
        end local 4 // byte[] cipherText
        end local 3 // java.lang.String serverName
        end local 2 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
        end local 1 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
        end local 0 // byte[] plainText
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0   plainText  [B
            0    9     1          md  Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
            0    9     2  connection  Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
            1    9     3  serverName  Ljava/lang/String;
            6    9     4  cipherText  [B
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
            Name  Flags
      plainText   
      md          
      connection  

  private static java.lang.String ValidateAndGetEncryptionAlgorithmName(byte, java.lang.String);
    descriptor: (BLjava/lang/String;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=2, args_size=2
        start local 0 // byte cipherAlgorithmId
        start local 1 // java.lang.String cipherAlgorithmName
         0: .line 132
            iconst_2
            iload 0 /* cipherAlgorithmId */
            if_icmpeq 4
         1: .line 133
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_CustomCipherAlgorithmNotSupportedAE"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
         2: .line 134
            aconst_null
            iconst_0
            iconst_0
         3: .line 133
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
         4: .line 136
      StackMap locals:
      StackMap stack:
            ldc "AEAD_AES_256_CBC_HMAC_SHA256"
            areturn
        end local 1 // java.lang.String cipherAlgorithmName
        end local 0 // byte cipherAlgorithmId
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    5     0    cipherAlgorithmId  B
            0    5     1  cipherAlgorithmName  Ljava/lang/String;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                     Name  Flags
      cipherAlgorithmId    
      cipherAlgorithmName  

  static void decryptSymmetricKey(com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
    descriptor: (Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=9, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
        start local 1 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
         0: .line 149
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 1
            aload 0 /* md */
            ifnonnull 1
            new java.lang.AssertionError
            dup
            ldc "md should not be null in DecryptSymmetricKey."
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         1: .line 150
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 2
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
            ifnonnull 2
            new java.lang.AssertionError
            dup
            ldc "md.EncryptionInfo should not be null in DecryptSymmetricKey."
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         2: .line 151
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 3
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
            getfield com.microsoft.sqlserver.jdbc.CekTableEntry.columnEncryptionKeyValues:Ljava/util/List;
            ifnonnull 3
            new java.lang.AssertionError
            dup
            ldc "md.EncryptionInfo.ColumnEncryptionKeyValues should not be null in DecryptSymmetricKey."
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         3: .line 153
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 2 /* symKey */
        start local 2 // com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey symKey
         4: .line 154
            aconst_null
            astore 3 /* encryptionkeyInfoChosen */
        start local 3 // com.microsoft.sqlserver.jdbc.EncryptionKeyInfo encryptionkeyInfoChosen
         5: .line 155
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache.getInstance:()Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKeyCache;
            astore 4 /* cache */
        start local 4 // com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache cache
         6: .line 156
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
            getfield com.microsoft.sqlserver.jdbc.CekTableEntry.columnEncryptionKeyValues:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5 /* it */
        start local 5 // java.util.Iterator it
         7: .line 157
            aconst_null
            astore 6 /* lastException */
        start local 6 // com.microsoft.sqlserver.jdbc.SQLServerException lastException
         8: .line 158
            goto 16
         9: .line 159
      StackMap locals: com.microsoft.sqlserver.jdbc.CryptoMetadata com.microsoft.sqlserver.jdbc.SQLServerConnection com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey com.microsoft.sqlserver.jdbc.EncryptionKeyInfo com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache java.util.Iterator com.microsoft.sqlserver.jdbc.SQLServerException
      StackMap stack:
            aload 5 /* it */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.microsoft.sqlserver.jdbc.EncryptionKeyInfo
            astore 7 /* keyInfo */
        start local 7 // com.microsoft.sqlserver.jdbc.EncryptionKeyInfo keyInfo
        10: .line 161
            aload 4 /* cache */
            aload 7 /* keyInfo */
            aload 1 /* connection */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache.getKey:(Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;
            astore 2 /* symKey */
        11: .line 162
            aload 2 /* symKey */
            ifnull 16
        12: .line 163
            aload 7 /* keyInfo */
            astore 3 /* encryptionkeyInfoChosen */
        13: .line 164
            goto 17
        14: .line 166
      StackMap locals: com.microsoft.sqlserver.jdbc.CryptoMetadata com.microsoft.sqlserver.jdbc.SQLServerConnection com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey com.microsoft.sqlserver.jdbc.EncryptionKeyInfo com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache java.util.Iterator com.microsoft.sqlserver.jdbc.SQLServerException com.microsoft.sqlserver.jdbc.EncryptionKeyInfo
      StackMap stack: com.microsoft.sqlserver.jdbc.SQLServerException
            astore 8 /* e */
        start local 8 // com.microsoft.sqlserver.jdbc.SQLServerException e
        15: .line 167
            aload 8 /* e */
            astore 6 /* lastException */
        end local 8 // com.microsoft.sqlserver.jdbc.SQLServerException e
        end local 7 // com.microsoft.sqlserver.jdbc.EncryptionKeyInfo keyInfo
        16: .line 158
      StackMap locals:
      StackMap stack:
            aload 5 /* it */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        17: .line 171
      StackMap locals:
      StackMap stack:
            aload 2 /* symKey */
            ifnonnull 23
        18: .line 172
            aload 6 /* lastException */
            ifnull 20
        19: .line 173
            aload 6 /* lastException */
            athrow
        20: .line 175
      StackMap locals:
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_CEKDecryptionFailed"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
        21: .line 176
            iconst_0
        22: .line 175
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        23: .line 181
      StackMap locals:
      StackMap stack:
            aload 0 /* md */
            aconst_null
            putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
        24: .line 182
            aconst_null
            astore 7 /* cipherAlgorithm */
        start local 7 // com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm cipherAlgorithm
        25: .line 183
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithmId:B
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithmName:Ljava/lang/String;
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.ValidateAndGetEncryptionAlgorithmName:(BLjava/lang/String;)Ljava/lang/String;
            astore 8 /* algorithmName */
        start local 8 // java.lang.String algorithmName
        26: .line 185
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithmFactoryList.getInstance:()Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithmFactoryList;
            aload 2 /* symKey */
            aload 0 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.encryptionType:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionType;
        27: .line 186
            aload 8 /* algorithmName */
        28: .line 185
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithmFactoryList.getAlgorithm:(Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionType;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
            astore 7 /* cipherAlgorithm */
        29: .line 191
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 30
            aload 7 /* cipherAlgorithm */
            ifnonnull 30
            new java.lang.AssertionError
            dup
            ldc "Cipher algorithm cannot be null in DecryptSymmetricKey"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        30: .line 192
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm java.lang.String
      StackMap stack:
            aload 0 /* md */
            aload 7 /* cipherAlgorithm */
            putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
        31: .line 193
            aload 0 /* md */
            aload 3 /* encryptionkeyInfoChosen */
            putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.encryptionKeyInfo:Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
        32: .line 194
            return
        end local 8 // java.lang.String algorithmName
        end local 7 // com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm cipherAlgorithm
        end local 6 // com.microsoft.sqlserver.jdbc.SQLServerException lastException
        end local 5 // java.util.Iterator it
        end local 4 // com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache cache
        end local 3 // com.microsoft.sqlserver.jdbc.EncryptionKeyInfo encryptionkeyInfoChosen
        end local 2 // com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey symKey
        end local 1 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
        end local 0 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   33     0                       md  Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
            0   33     1               connection  Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
            4   33     2                   symKey  Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;
            5   33     3  encryptionkeyInfoChosen  Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
            6   33     4                    cache  Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKeyCache;
            7   33     5                       it  Ljava/util/Iterator<Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;>;
            8   33     6            lastException  Lcom/microsoft/sqlserver/jdbc/SQLServerException;
           10   16     7                  keyInfo  Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
           15   16     8                        e  Lcom/microsoft/sqlserver/jdbc/SQLServerException;
           25   33     7          cipherAlgorithm  Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
           26   33     8            algorithmName  Ljava/lang/String;
      Exception table:
        from    to  target  type
          10    13      14  Class com.microsoft.sqlserver.jdbc.SQLServerException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
            Name  Flags
      md          
      connection  

  static byte[] decryptWithKey(byte[], com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
    descriptor: ([BLcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=5, args_size=3
        start local 0 // byte[] cipherText
        start local 1 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
        start local 2 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
         0: .line 201
            aload 2 /* connection */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getTrustedServerNameAE:()Ljava/lang/String;
            astore 3 /* serverName */
        start local 3 // java.lang.String serverName
         1: .line 202
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 2
            aload 3 /* serverName */
            ifnonnull 2
            new java.lang.AssertionError
            dup
            ldc "serverName should not be null in DecryptWithKey."
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         2: .line 205
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* md */
            invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
            ifne 4
         3: .line 206
            aload 1 /* md */
            aload 2 /* connection */
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.decryptSymmetricKey:(Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
         4: .line 209
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
            ifne 5
            aload 1 /* md */
            invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
            ifne 5
            new java.lang.AssertionError
            dup
            ldc "Decryption Algorithm is not initialized"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         5: .line 210
      StackMap locals:
      StackMap stack:
            aload 1 /* md */
            getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
            aload 0 /* cipherText */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm.decryptData:([B)[B
            astore 4 /* plainText */
        start local 4 // byte[] plainText
         6: .line 211
            aload 4 /* plainText */
            ifnonnull 8
         7: .line 212
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_PlainTextNullAE"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
         8: .line 215
      StackMap locals: byte[]
      StackMap stack:
            aload 4 /* plainText */
            areturn
        end local 4 // byte[] plainText
        end local 3 // java.lang.String serverName
        end local 2 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
        end local 1 // com.microsoft.sqlserver.jdbc.CryptoMetadata md
        end local 0 // byte[] cipherText
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0  cipherText  [B
            0    9     1          md  Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
            0    9     2  connection  Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
            1    9     3  serverName  Ljava/lang/String;
            6    9     4   plainText  [B
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
            Name  Flags
      cipherText  
      md          
      connection  

  static void verifyColumnMasterKeyMetadata(com.microsoft.sqlserver.jdbc.SQLServerConnection, java.lang.String, java.lang.String, java.lang.String, boolean, byte[]);
    descriptor: (Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[B)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=10, args_size=6
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
        start local 1 // java.lang.String keyStoreName
        start local 2 // java.lang.String keyPath
        start local 3 // java.lang.String serverName
        start local 4 // boolean isEnclaveEnabled
        start local 5 // byte[] CMKSignature
         0: .line 225
            iconst_1
            anewarray java.lang.Boolean
            astore 6 /* hasEntry */
        start local 6 // java.lang.Boolean[] hasEntry
         1: .line 226
            aload 3 /* serverName */
         2: .line 227
            aload 6 /* hasEntry */
         3: .line 226
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerConnection.getColumnEncryptionTrustedMasterKeyPaths:(Ljava/lang/String;[Ljava/lang/Boolean;)Ljava/util/List;
            astore 7 /* trustedKeyPaths */
        start local 7 // java.util.List trustedKeyPaths
         4: .line 228
            aload 6 /* hasEntry */
            iconst_0
            aaload
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 9
         5: .line 229
            aload 7 /* trustedKeyPaths */
            ifnull 6
            aload 7 /* trustedKeyPaths */
            invokeinterface java.util.List.size:()I
            ifeq 6
            aload 7 /* trustedKeyPaths */
            aload 2 /* keyPath */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 9
         6: .line 230
      StackMap locals: java.lang.Boolean[] java.util.List
      StackMap stack:
            new java.text.MessageFormat
            dup
            ldc "R_UntrustedKeyPath"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 8 /* form */
        start local 8 // java.text.MessageFormat form
         7: .line 231
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* keyPath */
            aastore
            dup
            iconst_1
            aload 3 /* serverName */
            aastore
            astore 9 /* msgArgs */
        start local 9 // java.lang.Object[] msgArgs
         8: .line 232
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 8 /* form */
            aload 9 /* 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 9 // java.lang.Object[] msgArgs
        end local 8 // java.text.MessageFormat form
         9: .line 236
      StackMap locals:
      StackMap stack:
            aload 0 /* connection */
            aload 1 /* keyStoreName */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getColumnEncryptionKeyStoreProvider:(Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionKeyStoreProvider;
            aload 2 /* keyPath */
        10: .line 237
            iload 4 /* isEnclaveEnabled */
            aload 5 /* CMKSignature */
        11: .line 236
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionKeyStoreProvider.verifyColumnMasterKeyMetadata:(Ljava/lang/String;Z[B)Z
        12: .line 237
            ifne 14
        13: .line 238
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_VerifySignature"
            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
        14: .line 240
      StackMap locals:
      StackMap stack:
            return
        end local 7 // java.util.List trustedKeyPaths
        end local 6 // java.lang.Boolean[] hasEntry
        end local 5 // byte[] CMKSignature
        end local 4 // boolean isEnclaveEnabled
        end local 3 // java.lang.String serverName
        end local 2 // java.lang.String keyPath
        end local 1 // java.lang.String keyStoreName
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerConnection connection
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   15     0        connection  Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
            0   15     1      keyStoreName  Ljava/lang/String;
            0   15     2           keyPath  Ljava/lang/String;
            0   15     3        serverName  Ljava/lang/String;
            0   15     4  isEnclaveEnabled  Z
            0   15     5      CMKSignature  [B
            1   15     6          hasEntry  [Ljava/lang/Boolean;
            4   15     7   trustedKeyPaths  Ljava/util/List<Ljava/lang/String;>;
            7    9     8              form  Ljava/text/MessageFormat;
            8    9     9           msgArgs  [Ljava/lang/Object;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                  Name  Flags
      connection        
      keyStoreName      
      keyPath           
      serverName        
      isEnclaveEnabled  
      CMKSignature      

  static com.microsoft.sqlserver.jdbc.SqlFedAuthToken getMSIAuthToken(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SqlFedAuthToken;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=22, args_size=2
        start local 0 // java.lang.String resource
        start local 1 // java.lang.String msiClientId
         0: .line 255
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* retrySlots */
        start local 2 // java.util.List retrySlots
         1: .line 257
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 3 /* urlString */
        start local 3 // java.lang.StringBuilder urlString
         2: .line 258
            iconst_1
            istore 4 /* retry */
        start local 4 // int retry
         3: iconst_1
            istore 5 /* maxRetry */
        start local 5 // int maxRetry
         4: .line 261
            ldc "IDENTITY_ENDPOINT"
            invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* identityEndpoint */
        start local 6 // java.lang.String identityEndpoint
         5: .line 262
            aload 6 /* identityEndpoint */
            ifnull 6
            aload 6 /* identityEndpoint */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 7
         6: .line 263
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String
      StackMap stack:
            ldc "MSI_ENDPOINT"
            invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
            astore 6 /* identityEndpoint */
         7: .line 266
      StackMap locals:
      StackMap stack:
            ldc "IDENTITY_HEADER"
            invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* identityHeader */
        start local 7 // java.lang.String identityHeader
         8: .line 267
            aload 7 /* identityHeader */
            ifnull 9
            aload 7 /* identityHeader */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 10
         9: .line 268
      StackMap locals: java.lang.String
      StackMap stack:
            ldc "MSI_SECRET"
            invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* identityHeader */
        10: .line 276
      StackMap locals:
      StackMap stack:
            aload 6 /* identityEndpoint */
            ifnull 13
            aload 6 /* identityEndpoint */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 13
            aload 7 /* identityHeader */
            ifnull 13
        11: .line 277
            aload 7 /* identityHeader */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 13
        12: .line 276
            iconst_1
            goto 14
      StackMap locals:
      StackMap stack:
        13: iconst_0
      StackMap locals:
      StackMap stack: int
        14: istore 8 /* isAzureFunction */
        start local 8 // boolean isAzureFunction
        15: .line 279
            iload 8 /* isAzureFunction */
            ifeq 18
        16: .line 280
            aload 3 /* urlString */
            aload 6 /* identityEndpoint */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "?api-version=2019-08-01&resource="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* resource */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        17: .line 281
            goto 25
        18: .line 282
      StackMap locals: int
      StackMap stack:
            aload 3 /* urlString */
            ldc "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "&resource="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* resource */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        19: .line 284
            bipush 20
            istore 5 /* maxRetry */
        20: .line 286
            iconst_0
            istore 9 /* x */
        start local 9 // int x
        21: goto 24
        22: .line 287
      StackMap locals: int
      StackMap stack:
            aload 2 /* retrySlots */
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        23: .line 286
            iinc 9 /* x */ 1
      StackMap locals:
      StackMap stack:
        24: iload 9 /* x */
            iload 5 /* maxRetry */
            if_icmplt 22
        end local 9 // int x
        25: .line 292
      StackMap locals:
      StackMap stack:
            aload 1 /* msiClientId */
            ifnull 110
            aload 1 /* msiClientId */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 110
        26: .line 293
            aload 3 /* urlString */
            ldc "&client_id="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* msiClientId */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        27: .line 297
            goto 110
        28: .line 298
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 9 /* connection */
        start local 9 // java.net.HttpURLConnection connection
        29: .line 301
            new java.net.URL
            dup
            aload 3 /* urlString */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.net.URL.<init>:(Ljava/lang/String;)V
            invokevirtual java.net.URL.openConnection:()Ljava/net/URLConnection;
            checkcast java.net.HttpURLConnection
            astore 9 /* connection */
        30: .line 302
            aload 9 /* connection */
            ldc "GET"
            invokevirtual java.net.HttpURLConnection.setRequestMethod:(Ljava/lang/String;)V
        31: .line 304
            iload 8 /* isAzureFunction */
            ifeq 36
        32: .line 305
            aload 9 /* connection */
            ldc "X-IDENTITY-HEADER"
            aload 7 /* identityHeader */
            invokevirtual java.net.HttpURLConnection.setRequestProperty:(Ljava/lang/String;Ljava/lang/String;)V
        33: .line 306
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 39
        34: .line 307
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Using Azure Function/App Service Managed Identity auth: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* urlString */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.logging.Logger.finer:(Ljava/lang/String;)V
        35: .line 309
            goto 39
        36: .line 310
      StackMap locals: java.net.HttpURLConnection
      StackMap stack:
            aload 9 /* connection */
            ldc "Metadata"
            ldc "true"
            invokevirtual java.net.HttpURLConnection.setRequestProperty:(Ljava/lang/String;Ljava/lang/String;)V
        37: .line 311
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 39
        38: .line 312
            getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Using Azure Managed Identity auth: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* urlString */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.logging.Logger.finer:(Ljava/lang/String;)V
        39: .line 316
      StackMap locals:
      StackMap stack:
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.connect:()V
        40: .line 318
            aconst_null
            astore 10
            aconst_null
            astore 11
        41: aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.getInputStream:()Ljava/io/InputStream;
            astore 12 /* stream */
        start local 12 // java.io.InputStream stream
        42: .line 320
            new java.io.BufferedReader
            dup
            new java.io.InputStreamReader
            dup
            aload 12 /* stream */
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
            bipush 100
            invokespecial java.io.BufferedReader.<init>:(Ljava/io/Reader;I)V
            astore 13 /* reader */
        start local 13 // java.io.BufferedReader reader
        43: .line 321
            new java.lang.StringBuilder
            dup
            aload 13 /* reader */
            invokevirtual java.io.BufferedReader.readLine:()Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 14 /* result */
        start local 14 // java.lang.StringBuilder result
        44: .line 323
            aload 14 /* result */
            ldc "\"access_token\":\""
            invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
        45: .line 324
            ldc "\"access_token\":\""
            invokevirtual java.lang.String.length:()I
        46: .line 323
            iadd
            istore 15 /* startIndex_AT */
        start local 15 // int startIndex_AT
        47: .line 326
            aload 14 /* result */
            iload 15 /* startIndex_AT */
            aload 14 /* result */
            ldc "\""
            iload 15 /* startIndex_AT */
            iconst_1
            iadd
            invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;I)I
            invokevirtual java.lang.StringBuilder.substring:(II)Ljava/lang/String;
            astore 16 /* accessToken */
        start local 16 // java.lang.String accessToken
        48: .line 328
            new java.util.Calendar$Builder
            dup
            invokespecial java.util.Calendar$Builder.<init>:()V
            new java.util.Date
            dup
            invokespecial java.util.Date.<init>:()V
            invokevirtual java.util.Calendar$Builder.setInstant:(Ljava/util/Date;)Ljava/util/Calendar$Builder;
            invokevirtual java.util.Calendar$Builder.build:()Ljava/util/Calendar;
            astore 17 /* cal */
        start local 17 // java.util.Calendar cal
        49: .line 333
            iload 8 /* isAzureFunction */
            ifeq 55
        50: .line 334
            aload 14 /* result */
        51: .line 335
            ldc "\"expires_on\":\""
            invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
        52: .line 336
            ldc "\"expires_on\":\""
            invokevirtual java.lang.String.length:()I
        53: .line 334
            iadd
            istore 18 /* startIndex_ATX */
        start local 18 // int startIndex_ATX
        54: .line 337
            goto 59
        end local 18 // int startIndex_ATX
        55: .line 338
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream java.io.BufferedReader java.lang.StringBuilder int java.lang.String java.util.Calendar
      StackMap stack:
            aload 14 /* result */
        56: .line 339
            ldc "\"expires_in\":\""
            invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
        57: .line 340
            ldc "\"expires_in\":\""
            invokevirtual java.lang.String.length:()I
        58: .line 338
            iadd
            istore 18 /* startIndex_ATX */
        start local 18 // int startIndex_ATX
        59: .line 343
      StackMap locals: int
      StackMap stack:
            aload 14 /* result */
            iload 18 /* startIndex_ATX */
        60: .line 344
            aload 14 /* result */
            ldc "\""
            iload 18 /* startIndex_ATX */
            iconst_1
            iadd
            invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;I)I
        61: .line 343
            invokevirtual java.lang.StringBuilder.substring:(II)Ljava/lang/String;
            astore 19 /* accessTokenExpiry */
        start local 19 // java.lang.String accessTokenExpiry
        62: .line 345
            aload 17 /* cal */
            bipush 13
            aload 19 /* accessTokenExpiry */
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            invokevirtual java.util.Calendar.add:(II)V
        63: .line 347
            new com.microsoft.sqlserver.jdbc.SqlFedAuthToken
            dup
            aload 16 /* accessToken */
            aload 17 /* cal */
            invokevirtual java.util.Calendar.getTime:()Ljava/util/Date;
            invokespecial com.microsoft.sqlserver.jdbc.SqlFedAuthToken.<init>:(Ljava/lang/String;Ljava/util/Date;)V
            astore 21
        64: .line 348
            aload 12 /* stream */
            ifnull 65
            aload 12 /* stream */
            invokevirtual java.io.InputStream.close:()V
        65: .line 389
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream java.io.BufferedReader java.lang.StringBuilder int java.lang.String java.util.Calendar int java.lang.String top com.microsoft.sqlserver.jdbc.SqlFedAuthToken
      StackMap stack:
            aload 9 /* connection */
            ifnull 67
        66: .line 390
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.disconnect:()V
        67: .line 347
      StackMap locals:
      StackMap stack:
            aload 21
            areturn
        end local 19 // java.lang.String accessTokenExpiry
        end local 18 // int startIndex_ATX
        end local 17 // java.util.Calendar cal
        end local 16 // java.lang.String accessToken
        end local 15 // int startIndex_AT
        end local 14 // java.lang.StringBuilder result
        end local 13 // java.io.BufferedReader reader
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream
      StackMap stack: java.lang.Throwable
        68: astore 10
        69: .line 348
            aload 12 /* stream */
            ifnull 70
            aload 12 /* stream */
            invokevirtual java.io.InputStream.close:()V
        end local 12 // java.io.InputStream stream
      StackMap locals:
      StackMap stack:
        70: aload 10
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        71: astore 11
            aload 10
            ifnonnull 72
            aload 11
            astore 10
            goto 73
      StackMap locals:
      StackMap stack:
        72: aload 10
            aload 11
            if_acmpeq 73
            aload 10
            aload 11
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        73: aload 10
            athrow
        74: .line 349
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection
      StackMap stack: java.lang.Exception
            pop
        75: .line 350
            iinc 4 /* retry */ 1
        76: .line 352
            iload 4 /* retry */
            iload 5 /* maxRetry */
            if_icmple 80
        77: .line 389
            aload 9 /* connection */
            ifnull 111
        78: .line 390
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.disconnect:()V
        79: .line 354
            goto 111
        80: .line 357
      StackMap locals:
      StackMap stack:
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.getResponseCode:()I
            istore 10 /* responseCode */
        start local 10 // int responseCode
        81: .line 359
            sipush 410
            iload 10 /* responseCode */
            if_icmpeq 84
            sipush 429
            iload 10 /* responseCode */
            if_icmpeq 84
            sipush 404
            iload 10 /* responseCode */
            if_icmpeq 84
        82: .line 360
            sipush 500
            iload 10 /* responseCode */
            if_icmpgt 93
        83: .line 361
            sipush 599
            iload 10 /* responseCode */
            if_icmplt 93
        84: .line 363
      StackMap locals: int
      StackMap stack:
            aload 2 /* retrySlots */
            invokestatic java.util.concurrent.ThreadLocalRandom.current:()Ljava/util/concurrent/ThreadLocalRandom;
            iload 4 /* retry */
            iconst_1
            isub
            invokevirtual java.util.concurrent.ThreadLocalRandom.nextInt:(I)I
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            istore 11 /* retryTimeoutInMs */
        start local 11 // int retryTimeoutInMs
        85: .line 365
            iload 10 /* responseCode */
            sipush 410
            if_icmpne 87
        86: .line 366
            iload 11 /* retryTimeoutInMs */
            ldc 70000
            if_icmpge 87
            ldc 70000
            goto 88
        87: .line 367
      StackMap locals: int
      StackMap stack:
            iload 11 /* retryTimeoutInMs */
        88: .line 365
      StackMap locals:
      StackMap stack: int
            istore 11 /* retryTimeoutInMs */
        89: .line 368
            iload 11 /* retryTimeoutInMs */
            i2l
            invokestatic java.lang.Thread.sleep:(J)V
        end local 11 // int retryTimeoutInMs
        90: .line 369
            goto 104
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection int
      StackMap stack: java.lang.InterruptedException
        91: astore 11 /* ex */
        start local 11 // java.lang.InterruptedException ex
        92: .line 371
            new java.lang.RuntimeException
            dup
            aload 11 /* ex */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 11 // java.lang.InterruptedException ex
        93: .line 374
      StackMap locals:
      StackMap stack:
            aload 1 /* msiClientId */
            ifnull 97
            aload 1 /* msiClientId */
            invokevirtual java.lang.String.isEmpty:()Z
            ifne 97
        94: .line 375
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
        95: .line 376
            ldc "R_MSITokenFailureImdsClientId"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
        96: .line 375
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        97: .line 378
      StackMap locals:
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_MSITokenFailureImds"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
        98: .line 379
            aconst_null
        99: .line 378
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 10 // int responseCode
       100: .line 382
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection
      StackMap stack: java.io.IOException
            pop
       101: .line 384
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_MSITokenFailureUnexpected"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
       102: .line 385
            aconst_null
       103: .line 384
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
       104: .line 389
      StackMap locals:
      StackMap stack:
            aload 9 /* connection */
            ifnull 110
       105: .line 390
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.disconnect:()V
            goto 110
       106: .line 388
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 20
       107: .line 389
            aload 9 /* connection */
            ifnull 109
       108: .line 390
            aload 9 /* connection */
            invokevirtual java.net.HttpURLConnection.disconnect:()V
       109: .line 392
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection top top top top top top top top top top java.lang.Throwable
      StackMap stack:
            aload 20
            athrow
        end local 9 // java.net.HttpURLConnection connection
       110: .line 297
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
      StackMap stack:
            iload 4 /* retry */
            iload 5 /* maxRetry */
            if_icmple 28
       111: .line 394
      StackMap locals:
      StackMap stack:
            iload 4 /* retry */
            iload 5 /* maxRetry */
            if_icmple 117
       112: .line 395
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
       113: .line 396
            iload 8 /* isAzureFunction */
            ifeq 114
            ldc "R_MSITokenFailureEndpoint"
            goto 115
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
      StackMap stack: new 112 new 112
       114: ldc "R_MSITokenFailureImds"
      StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
      StackMap stack: new 112 new 112 java.lang.String
       115: invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
       116: .line 395
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
       117: .line 398
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 8 // boolean isAzureFunction
        end local 7 // java.lang.String identityHeader
        end local 6 // java.lang.String identityEndpoint
        end local 5 // int maxRetry
        end local 4 // int retry
        end local 3 // java.lang.StringBuilder urlString
        end local 2 // java.util.List retrySlots
        end local 1 // java.lang.String msiClientId
        end local 0 // java.lang.String resource
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0  118     0           resource  Ljava/lang/String;
            0  118     1        msiClientId  Ljava/lang/String;
            1  118     2         retrySlots  Ljava/util/List<Ljava/lang/Integer;>;
            2  118     3          urlString  Ljava/lang/StringBuilder;
            3  118     4              retry  I
            4  118     5           maxRetry  I
            5  118     6   identityEndpoint  Ljava/lang/String;
            8  118     7     identityHeader  Ljava/lang/String;
           15  118     8    isAzureFunction  Z
           21   25     9                  x  I
           29  110     9         connection  Ljava/net/HttpURLConnection;
           42   70    12             stream  Ljava/io/InputStream;
           43   68    13             reader  Ljava/io/BufferedReader;
           44   68    14             result  Ljava/lang/StringBuilder;
           47   68    15      startIndex_AT  I
           48   68    16        accessToken  Ljava/lang/String;
           49   68    17                cal  Ljava/util/Calendar;
           54   55    18     startIndex_ATX  I
           59   68    18     startIndex_ATX  I
           62   68    19  accessTokenExpiry  Ljava/lang/String;
           81  100    10       responseCode  I
           85   90    11   retryTimeoutInMs  I
           92   93    11                 ex  Ljava/lang/InterruptedException;
      Exception table:
        from    to  target  type
          42    64      68  any
          41    65      71  any
          68    71      71  any
          29    65      74  Class java.lang.Exception
          68    74      74  Class java.lang.Exception
          84    90      91  Class java.lang.InterruptedException
          80   100     100  Class java.io.IOException
          29    65     106  any
          68    77     106  any
          80   104     106  any
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
             Name  Flags
      resource     
      msiClientId  
}
SourceFile: "SQLServerSecurityUtility.java"
InnerClasses:
  public Builder = java.util.Calendar$Builder of java.util.Calendar