public class com.microsoft.azure.credentials.ApplicationTokenCredentials extends com.microsoft.azure.credentials.AzureTokenCredentials
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.microsoft.azure.credentials.ApplicationTokenCredentials
  super_class: com.microsoft.azure.credentials.AzureTokenCredentials
{
  private final java.util.concurrent.ConcurrentHashMap<java.lang.String, com.microsoft.aad.adal4j.AuthenticationResult> tokens;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Ljava/lang/String;Lcom/microsoft/aad/adal4j/AuthenticationResult;>;

  private final java.util.concurrent.ConcurrentHashMap<java.lang.String, java.util.concurrent.locks.ReentrantLock> authenticationLocks;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Ljava/lang/String;Ljava/util/concurrent/locks/ReentrantLock;>;

  private final java.lang.String clientId;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

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

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

  private long timeoutInSeconds;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  public void <init>(java.lang.String, java.lang.String, java.lang.String, com.microsoft.azure.AzureEnvironment);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/microsoft/azure/AzureEnvironment;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=5
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
        start local 1 // java.lang.String clientId
        start local 2 // java.lang.String domain
        start local 3 // java.lang.String secret
        start local 4 // com.microsoft.azure.AzureEnvironment environment
         0: .line 68
            aload 0 /* this */
            aload 4 /* environment */
            aload 2 /* domain */
            invokespecial com.microsoft.azure.credentials.AzureTokenCredentials.<init>:(Lcom/microsoft/azure/AzureEnvironment;Ljava/lang/String;)V
         1: .line 56
            aload 0 /* this */
            ldc 60
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.timeoutInSeconds:J
         2: .line 69
            aload 0 /* this */
            aload 1 /* clientId */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:Ljava/lang/String;
         3: .line 70
            aload 0 /* this */
            aload 3 /* secret */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientSecret:Ljava/lang/String;
         4: .line 71
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.tokens:Ljava/util/concurrent/ConcurrentHashMap;
         5: .line 72
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.authenticationLocks:Ljava/util/concurrent/ConcurrentHashMap;
         6: .line 73
            return
        end local 4 // com.microsoft.azure.AzureEnvironment environment
        end local 3 // java.lang.String secret
        end local 2 // java.lang.String domain
        end local 1 // java.lang.String clientId
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            0    7     1     clientId  Ljava/lang/String;
            0    7     2       domain  Ljava/lang/String;
            0    7     3       secret  Ljava/lang/String;
            0    7     4  environment  Lcom/microsoft/azure/AzureEnvironment;
    MethodParameters:
             Name  Flags
      clientId     
      domain       
      secret       
      environment  

  public void <init>(java.lang.String, java.lang.String, byte[], java.lang.String, com.microsoft.azure.AzureEnvironment);
    descriptor: (Ljava/lang/String;Ljava/lang/String;[BLjava/lang/String;Lcom/microsoft/azure/AzureEnvironment;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=6
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
        start local 1 // java.lang.String clientId
        start local 2 // java.lang.String domain
        start local 3 // byte[] certificate
        start local 4 // java.lang.String password
        start local 5 // com.microsoft.azure.AzureEnvironment environment
         0: .line 86
            aload 0 /* this */
            aload 5 /* environment */
            aload 2 /* domain */
            invokespecial com.microsoft.azure.credentials.AzureTokenCredentials.<init>:(Lcom/microsoft/azure/AzureEnvironment;Ljava/lang/String;)V
         1: .line 56
            aload 0 /* this */
            ldc 60
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.timeoutInSeconds:J
         2: .line 87
            aload 0 /* this */
            aload 1 /* clientId */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:Ljava/lang/String;
         3: .line 88
            aload 0 /* this */
            aload 3 /* certificate */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:[B
         4: .line 89
            aload 0 /* this */
            aload 4 /* password */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificatePassword:Ljava/lang/String;
         5: .line 90
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.tokens:Ljava/util/concurrent/ConcurrentHashMap;
         6: .line 91
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.authenticationLocks:Ljava/util/concurrent/ConcurrentHashMap;
         7: .line 92
            return
        end local 5 // com.microsoft.azure.AzureEnvironment environment
        end local 4 // java.lang.String password
        end local 3 // byte[] certificate
        end local 2 // java.lang.String domain
        end local 1 // java.lang.String clientId
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    8     0         this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            0    8     1     clientId  Ljava/lang/String;
            0    8     2       domain  Ljava/lang/String;
            0    8     3  certificate  [B
            0    8     4     password  Ljava/lang/String;
            0    8     5  environment  Lcom/microsoft/azure/AzureEnvironment;
    MethodParameters:
             Name  Flags
      clientId     
      domain       
      certificate  
      password     
      environment  

  public static com.microsoft.azure.credentials.ApplicationTokenCredentials fromFile(java.io.File);
    descriptor: (Ljava/io/File;)Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.File credentialsFile
         0: .line 119
            aload 0 /* credentialsFile */
            invokestatic com.microsoft.azure.credentials.AuthFile.parse:(Ljava/io/File;)Lcom/microsoft/azure/credentials/AuthFile;
            invokevirtual com.microsoft.azure.credentials.AuthFile.generateCredentials:()Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            areturn
        end local 0 // java.io.File credentialsFile
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0  credentialsFile  Ljava/io/File;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                 Name  Flags
      credentialsFile  

  public java.lang.String clientId();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
         0: .line 128
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:Ljava/lang/String;
            areturn
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;

  public java.lang.String clientSecret();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
         0: .line 132
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientSecret:Ljava/lang/String;
            areturn
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;

  public byte[] clientCertificate();
    descriptor: ()[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
         0: .line 136
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:[B
            areturn
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;

  public java.lang.String clientCertificatePassword();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
         0: .line 140
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificatePassword:Ljava/lang/String;
            areturn
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;

  public long timeoutInSeconds();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
         0: .line 149
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.timeoutInSeconds:J
            lreturn
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;

  public com.microsoft.azure.credentials.ApplicationTokenCredentials withTimeoutInSeconds(long);
    descriptor: (J)Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
        start local 1 // long timeoutInSeconds
         0: .line 159
            aload 0 /* this */
            lload 1 /* timeoutInSeconds */
            putfield com.microsoft.azure.credentials.ApplicationTokenCredentials.timeoutInSeconds:J
         1: .line 160
            aload 0 /* this */
            areturn
        end local 1 // long timeoutInSeconds
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0              this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            0    2     1  timeoutInSeconds  J
    MethodParameters:
                  Name  Flags
      timeoutInSeconds  

  public java.lang.String getToken(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
        start local 1 // java.lang.String resource
         0: .line 165
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.tokens:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* resource */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.microsoft.aad.adal4j.AuthenticationResult
            astore 2 /* authenticationResult */
        start local 2 // com.microsoft.aad.adal4j.AuthenticationResult authenticationResult
         1: .line 166
            aload 2 /* authenticationResult */
            ifnull 2
            aload 2 /* authenticationResult */
            invokevirtual com.microsoft.aad.adal4j.AuthenticationResult.getExpiresOnDate:()Ljava/util/Date;
            new java.util.Date
            dup
            invokespecial java.util.Date.<init>:()V
            invokevirtual java.util.Date.before:(Ljava/util/Date;)Z
            ifeq 29
         2: .line 168
      StackMap locals: com.microsoft.aad.adal4j.AuthenticationResult
      StackMap stack:
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.authenticationLocks:Ljava/util/concurrent/ConcurrentHashMap;
            dup
            astore 4
            monitorenter
         3: .line 169
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.authenticationLocks:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* resource */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.concurrent.locks.ReentrantLock
            astore 3 /* lock */
        start local 3 // java.util.concurrent.locks.ReentrantLock lock
         4: .line 170
            aload 3 /* lock */
            ifnonnull 7
         5: .line 171
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            astore 3 /* lock */
         6: .line 172
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.authenticationLocks:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* resource */
            aload 3 /* lock */
            invokevirtual java.util.concurrent.ConcurrentHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 168
      StackMap locals: java.util.concurrent.locks.ReentrantLock java.util.concurrent.ConcurrentHashMap
      StackMap stack:
            aload 4
            monitorexit
         8: goto 11
        end local 3 // java.util.concurrent.locks.ReentrantLock lock
      StackMap locals: com.microsoft.azure.credentials.ApplicationTokenCredentials java.lang.String com.microsoft.aad.adal4j.AuthenticationResult top java.util.concurrent.ConcurrentHashMap
      StackMap stack: java.lang.Throwable
         9: aload 4
            monitorexit
        10: athrow
        start local 3 // java.util.concurrent.locks.ReentrantLock lock
        11: .line 175
      StackMap locals: com.microsoft.azure.credentials.ApplicationTokenCredentials java.lang.String com.microsoft.aad.adal4j.AuthenticationResult java.util.concurrent.locks.ReentrantLock
      StackMap stack:
            aload 3 /* lock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
        12: .line 177
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.tokens:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* resource */
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.microsoft.aad.adal4j.AuthenticationResult
            astore 2 /* authenticationResult */
        13: .line 178
            aload 2 /* authenticationResult */
            ifnull 14
            aload 2 /* authenticationResult */
            invokevirtual com.microsoft.aad.adal4j.AuthenticationResult.getExpiresOnDate:()Ljava/util/Date;
            new java.util.Date
            dup
            invokespecial java.util.Date.<init>:()V
            invokevirtual java.util.Date.before:(Ljava/util/Date;)Z
            ifeq 28
        14: .line 179
      StackMap locals:
      StackMap stack:
            invokestatic java.util.concurrent.Executors.newSingleThreadExecutor:()Ljava/util/concurrent/ExecutorService;
            astore 4 /* executor */
        start local 4 // java.util.concurrent.ExecutorService executor
        15: .line 181
            aload 0 /* this */
            aload 1 /* resource */
            aload 4 /* executor */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.acquireAccessToken:(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/Future;
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.timeoutInSeconds:()J
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
            invokeinterface java.util.concurrent.Future.get:(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
            checkcast com.microsoft.aad.adal4j.AuthenticationResult
            astore 2 /* authenticationResult */
        16: .line 182
            aload 0 /* this */
            getfield com.microsoft.azure.credentials.ApplicationTokenCredentials.tokens:Ljava/util/concurrent/ConcurrentHashMap;
            aload 1 /* resource */
            aload 2 /* authenticationResult */
            invokevirtual java.util.concurrent.ConcurrentHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 183
            goto 21
      StackMap locals: com.microsoft.azure.credentials.ApplicationTokenCredentials java.lang.String com.microsoft.aad.adal4j.AuthenticationResult java.util.concurrent.locks.ReentrantLock java.util.concurrent.ExecutorService
      StackMap stack: java.lang.Throwable
        18: astore 5
        19: .line 184
            aload 4 /* executor */
            invokeinterface java.util.concurrent.ExecutorService.shutdown:()V
        20: .line 185
            aload 5
            athrow
        21: .line 184
      StackMap locals:
      StackMap stack:
            aload 4 /* executor */
            invokeinterface java.util.concurrent.ExecutorService.shutdown:()V
        end local 4 // java.util.concurrent.ExecutorService executor
        22: .line 187
            goto 28
      StackMap locals: com.microsoft.azure.credentials.ApplicationTokenCredentials java.lang.String com.microsoft.aad.adal4j.AuthenticationResult java.util.concurrent.locks.ReentrantLock
      StackMap stack: java.lang.Exception
        23: astore 4 /* e */
        start local 4 // java.lang.Exception e
        24: .line 188
            new java.io.IOException
            dup
            aload 4 /* e */
            invokevirtual java.lang.Exception.getMessage:()Ljava/lang/String;
            aload 4 /* e */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Exception e
        25: .line 189
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 6
        26: .line 190
            aload 3 /* lock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        27: .line 191
            aload 6
            athrow
        28: .line 190
      StackMap locals:
      StackMap stack:
            aload 3 /* lock */
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        end local 3 // java.util.concurrent.locks.ReentrantLock lock
        29: .line 193
      StackMap locals:
      StackMap stack:
            aload 2 /* authenticationResult */
            invokevirtual com.microsoft.aad.adal4j.AuthenticationResult.getAccessToken:()Ljava/lang/String;
            areturn
        end local 2 // com.microsoft.aad.adal4j.AuthenticationResult authenticationResult
        end local 1 // java.lang.String resource
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   30     0                  this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            0   30     1              resource  Ljava/lang/String;
            1   30     2  authenticationResult  Lcom/microsoft/aad/adal4j/AuthenticationResult;
            4    9     3                  lock  Ljava/util/concurrent/locks/ReentrantLock;
           11   29     3                  lock  Ljava/util/concurrent/locks/ReentrantLock;
           15   22     4              executor  Ljava/util/concurrent/ExecutorService;
           24   25     4                     e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           3     8       9  any
           9    10       9  any
          15    18      18  any
          12    22      23  Class java.lang.Exception
          12    25      25  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      resource  

  java.util.concurrent.Future<com.microsoft.aad.adal4j.AuthenticationResult> acquireAccessToken(java.lang.String, java.util.concurrent.ExecutorService);
    descriptor: (Ljava/lang/String;Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/Future;
    flags: (0x0000) 
    Code:
      stack=7, locals=6, args_size=3
        start local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
        start local 1 // java.lang.String resource
        start local 2 // java.util.concurrent.ExecutorService executor
         0: .line 197
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.environment:()Lcom/microsoft/azure/AzureEnvironment;
            invokevirtual com.microsoft.azure.AzureEnvironment.activeDirectoryEndpoint:()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 */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.domain:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 3 /* authorityUrl */
        start local 3 // java.lang.String authorityUrl
         1: .line 198
            new com.microsoft.aad.adal4j.AuthenticationContext
            dup
            aload 3 /* authorityUrl */
            iconst_0
            aload 2 /* executor */
            invokespecial com.microsoft.aad.adal4j.AuthenticationContext.<init>:(Ljava/lang/String;ZLjava/util/concurrent/ExecutorService;)V
            astore 4 /* context */
        start local 4 // com.microsoft.aad.adal4j.AuthenticationContext context
         2: .line 199
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.proxy:()Ljava/net/Proxy;
            ifnull 4
         3: .line 200
            aload 4 /* context */
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.proxy:()Ljava/net/Proxy;
            invokevirtual com.microsoft.aad.adal4j.AuthenticationContext.setProxy:(Ljava/net/Proxy;)V
         4: .line 202
      StackMap locals: java.lang.String com.microsoft.aad.adal4j.AuthenticationContext
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.sslSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            ifnull 6
         5: .line 203
            aload 4 /* context */
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.sslSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            invokevirtual com.microsoft.aad.adal4j.AuthenticationContext.setSslSocketFactory:(Ljavax/net/ssl/SSLSocketFactory;)V
         6: .line 206
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientSecret:()Ljava/lang/String;
            ifnull 13
         7: .line 207
            aload 4 /* context */
         8: .line 208
            aload 1 /* resource */
         9: .line 209
            new com.microsoft.aad.adal4j.ClientCredential
            dup
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:()Ljava/lang/String;
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientSecret:()Ljava/lang/String;
            invokespecial com.microsoft.aad.adal4j.ClientCredential.<init>:(Ljava/lang/String;Ljava/lang/String;)V
        10: .line 210
            aconst_null
        11: .line 207
            invokevirtual com.microsoft.aad.adal4j.AuthenticationContext.acquireToken:(Ljava/lang/String;Lcom/microsoft/aad/adal4j/ClientCredential;Lcom/microsoft/aad/adal4j/AuthenticationCallback;)Ljava/util/concurrent/Future;
        12: areturn
        13: .line 211
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:()[B
            ifnull 20
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificatePassword:()Ljava/lang/String;
            ifnull 20
        14: .line 212
            aload 4 /* context */
        15: .line 213
            aload 1 /* resource */
        16: .line 214
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:()Ljava/lang/String;
            new java.io.ByteArrayInputStream
            dup
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:()[B
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificatePassword:()Ljava/lang/String;
            invokestatic com.microsoft.aad.adal4j.AsymmetricKeyCredential.create:(Ljava/lang/String;Ljava/io/InputStream;Ljava/lang/String;)Lcom/microsoft/aad/adal4j/AsymmetricKeyCredential;
        17: .line 215
            aconst_null
        18: .line 212
            invokevirtual com.microsoft.aad.adal4j.AuthenticationContext.acquireToken:(Ljava/lang/String;Lcom/microsoft/aad/adal4j/AsymmetricKeyCredential;Lcom/microsoft/aad/adal4j/AuthenticationCallback;)Ljava/util/concurrent/Future;
        19: areturn
        20: .line 216
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:()[B
            ifnull 27
        21: .line 217
            aload 4 /* context */
        22: .line 218
            aload 1 /* resource */
        23: .line 219
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientId:()Ljava/lang/String;
            new java.lang.String
            dup
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:()[B
            invokespecial java.lang.String.<init>:([B)V
            invokestatic com.microsoft.azure.credentials.ApplicationTokenCredentials.privateKeyFromPem:(Ljava/lang/String;)Ljava/security/PrivateKey;
            new java.lang.String
            dup
            aload 0 /* this */
            invokevirtual com.microsoft.azure.credentials.ApplicationTokenCredentials.clientCertificate:()[B
            invokespecial java.lang.String.<init>:([B)V
            invokestatic com.microsoft.azure.credentials.ApplicationTokenCredentials.publicKeyFromPem:(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
            invokestatic com.microsoft.aad.adal4j.AsymmetricKeyCredential.create:(Ljava/lang/String;Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)Lcom/microsoft/aad/adal4j/AsymmetricKeyCredential;
        24: .line 220
            aconst_null
        25: .line 217
            invokevirtual com.microsoft.aad.adal4j.AuthenticationContext.acquireToken:(Ljava/lang/String;Lcom/microsoft/aad/adal4j/AsymmetricKeyCredential;Lcom/microsoft/aad/adal4j/AuthenticationCallback;)Ljava/util/concurrent/Future;
        26: areturn
        27: .line 222
      StackMap locals:
      StackMap stack:
            new com.microsoft.aad.adal4j.AuthenticationException
            dup
            ldc "Please provide either a non-null secret or a non-null certificate."
            invokespecial com.microsoft.aad.adal4j.AuthenticationException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 223
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
        29: .line 224
            new java.io.IOException
            dup
            aload 5 /* e */
            invokevirtual java.lang.Exception.getMessage:()Ljava/lang/String;
            aload 5 /* e */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.Exception e
        end local 4 // com.microsoft.aad.adal4j.AuthenticationContext context
        end local 3 // java.lang.String authorityUrl
        end local 2 // java.util.concurrent.ExecutorService executor
        end local 1 // java.lang.String resource
        end local 0 // com.microsoft.azure.credentials.ApplicationTokenCredentials this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   30     0          this  Lcom/microsoft/azure/credentials/ApplicationTokenCredentials;
            0   30     1      resource  Ljava/lang/String;
            0   30     2      executor  Ljava/util/concurrent/ExecutorService;
            1   30     3  authorityUrl  Ljava/lang/String;
            2   30     4       context  Lcom/microsoft/aad/adal4j/AuthenticationContext;
           29   30     5             e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           6    12      28  Class java.lang.Exception
          13    19      28  Class java.lang.Exception
          20    26      28  Class java.lang.Exception
          27    28      28  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    Signature: (Ljava/lang/String;Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/Future<Lcom/microsoft/aad/adal4j/AuthenticationResult;>;
    MethodParameters:
          Name  Flags
      resource  
      executor  

  static java.security.PrivateKey privateKeyFromPem(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/PrivateKey;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=7, args_size=1
        start local 0 // java.lang.String pem
         0: .line 229
            ldc "(?s)-----BEGIN PRIVATE KEY-----.*-----END PRIVATE KEY-----"
            invokestatic java.util.regex.Pattern.compile:(Ljava/lang/String;)Ljava/util/regex/Pattern;
            astore 1 /* pattern */
        start local 1 // java.util.regex.Pattern pattern
         1: .line 230
            aload 1 /* pattern */
            aload 0 /* pem */
            invokevirtual java.util.regex.Pattern.matcher:(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
            astore 2 /* matcher */
        start local 2 // java.util.regex.Matcher matcher
         2: .line 231
            aload 2 /* matcher */
            invokevirtual java.util.regex.Matcher.find:()Z
            pop
         3: .line 232
            aload 2 /* matcher */
            invokevirtual java.util.regex.Matcher.group:()Ljava/lang/String;
         4: .line 233
            ldc "-----BEGIN PRIVATE KEY-----"
            ldc ""
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
         5: .line 234
            ldc "-----END PRIVATE KEY-----"
            ldc ""
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
         6: .line 235
            ldc "\n"
            ldc ""
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
         7: .line 236
            ldc "\r"
            ldc ""
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
         8: .line 232
            astore 3 /* base64 */
        start local 3 // java.lang.String base64
         9: .line 237
            invokestatic com.google.common.io.BaseEncoding.base64:()Lcom/google/common/io/BaseEncoding;
            aload 3 /* base64 */
            invokevirtual com.google.common.io.BaseEncoding.decode:(Ljava/lang/CharSequence;)[B
            astore 4 /* key */
        start local 4 // byte[] key
        10: .line 238
            new java.security.spec.PKCS8EncodedKeySpec
            dup
            aload 4 /* key */
            invokespecial java.security.spec.PKCS8EncodedKeySpec.<init>:([B)V
            astore 5 /* spec */
        start local 5 // java.security.spec.PKCS8EncodedKeySpec spec
        11: .line 240
            ldc "RSA"
            invokestatic java.security.KeyFactory.getInstance:(Ljava/lang/String;)Ljava/security/KeyFactory;
            astore 6 /* kf */
        start local 6 // java.security.KeyFactory kf
        12: .line 241
            aload 6 /* kf */
            aload 5 /* spec */
            invokevirtual java.security.KeyFactory.generatePrivate:(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
        13: areturn
        end local 6 // java.security.KeyFactory kf
        14: .line 242
      StackMap locals: java.lang.String java.util.regex.Pattern java.util.regex.Matcher java.lang.String byte[] java.security.spec.PKCS8EncodedKeySpec
      StackMap stack: java.security.GeneralSecurityException
            astore 6 /* e */
        start local 6 // java.security.GeneralSecurityException e
        15: .line 243
            new java.lang.RuntimeException
            dup
            aload 6 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.security.GeneralSecurityException e
        end local 5 // java.security.spec.PKCS8EncodedKeySpec spec
        end local 4 // byte[] key
        end local 3 // java.lang.String base64
        end local 2 // java.util.regex.Matcher matcher
        end local 1 // java.util.regex.Pattern pattern
        end local 0 // java.lang.String pem
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   16     0      pem  Ljava/lang/String;
            1   16     1  pattern  Ljava/util/regex/Pattern;
            2   16     2  matcher  Ljava/util/regex/Matcher;
            9   16     3   base64  Ljava/lang/String;
           10   16     4      key  [B
           11   16     5     spec  Ljava/security/spec/PKCS8EncodedKeySpec;
           12   14     6       kf  Ljava/security/KeyFactory;
           15   16     6        e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
          11    13      14  Class java.security.NoSuchAlgorithmException
          11    13      14  Class java.security.spec.InvalidKeySpecException
    MethodParameters:
      Name  Flags
      pem   

  static java.security.cert.X509Certificate publicKeyFromPem(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/cert/X509Certificate;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=5, args_size=1
        start local 0 // java.lang.String pem
         0: .line 248
            ldc "(?s)-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----"
            invokestatic java.util.regex.Pattern.compile:(Ljava/lang/String;)Ljava/util/regex/Pattern;
            astore 1 /* pattern */
        start local 1 // java.util.regex.Pattern pattern
         1: .line 249
            aload 1 /* pattern */
            aload 0 /* pem */
            invokevirtual java.util.regex.Pattern.matcher:(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
            astore 2 /* matcher */
        start local 2 // java.util.regex.Matcher matcher
         2: .line 250
            aload 2 /* matcher */
            invokevirtual java.util.regex.Matcher.find:()Z
            pop
         3: .line 252
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 3 /* factory */
        start local 3 // java.security.cert.CertificateFactory factory
         4: .line 253
            new java.io.ByteArrayInputStream
            dup
            aload 2 /* matcher */
            invokevirtual java.util.regex.Matcher.group:()Ljava/lang/String;
            invokevirtual java.lang.String.getBytes:()[B
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            astore 4 /* stream */
        start local 4 // java.io.InputStream stream
         5: .line 254
            aload 3 /* factory */
            aload 4 /* stream */
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
         6: areturn
        end local 4 // java.io.InputStream stream
        end local 3 // java.security.cert.CertificateFactory factory
         7: .line 255
      StackMap locals: java.lang.String java.util.regex.Pattern java.util.regex.Matcher
      StackMap stack: java.security.cert.CertificateException
            astore 3 /* e */
        start local 3 // java.security.cert.CertificateException e
         8: .line 256
            new java.lang.RuntimeException
            dup
            aload 3 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.cert.CertificateException e
        end local 2 // java.util.regex.Matcher matcher
        end local 1 // java.util.regex.Pattern pattern
        end local 0 // java.lang.String pem
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0      pem  Ljava/lang/String;
            1    9     1  pattern  Ljava/util/regex/Pattern;
            2    9     2  matcher  Ljava/util/regex/Matcher;
            4    7     3  factory  Ljava/security/cert/CertificateFactory;
            5    7     4   stream  Ljava/io/InputStream;
            8    9     3        e  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
           3     6       7  Class java.security.cert.CertificateException
    MethodParameters:
      Name  Flags
      pem   
}
SourceFile: "ApplicationTokenCredentials.java"