public final class com.sun.security.sasl.ClientFactoryImpl implements javax.security.sasl.SaslClientFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.sun.security.sasl.ClientFactoryImpl
  super_class: java.lang.Object
{
  private static final java.lang.String[] myMechs;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final int[] mechPolicies;
    descriptor: [I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

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

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

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 50
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
         1: .line 51
            ldc "EXTERNAL"
            aastore
            dup
            iconst_1
         2: .line 52
            ldc "CRAM-MD5"
            aastore
            dup
            iconst_2
         3: .line 53
            ldc "PLAIN"
            aastore
         4: .line 50
            putstatic com.sun.security.sasl.ClientFactoryImpl.myMechs:[Ljava/lang/String;
         5: .line 56
            iconst_3
            newarray 10
            dup
            iconst_0
         6: .line 58
            bipush 7
            iastore
            dup
            iconst_1
         7: .line 59
            bipush 17
            iastore
            dup
            iconst_2
         8: .line 60
            bipush 16
            iastore
         9: .line 56
            putstatic com.sun.security.sasl.ClientFactoryImpl.mechPolicies:[I
        10: .line 65
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.security.sasl.ClientFactoryImpl this
         0: .line 67
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 68
            return
        end local 0 // com.sun.security.sasl.ClientFactoryImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/security/sasl/ClientFactoryImpl;

  public javax.security.sasl.SaslClient createSaslClient(java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.util.Map<java.lang.String, ?>, javax.security.auth.callback.CallbackHandler);
    descriptor: ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=7
        start local 0 // com.sun.security.sasl.ClientFactoryImpl this
        start local 1 // java.lang.String[] mechs
        start local 2 // java.lang.String authorizationId
        start local 3 // java.lang.String protocol
        start local 4 // java.lang.String serverName
        start local 5 // java.util.Map props
        start local 6 // javax.security.auth.callback.CallbackHandler cbh
         0: .line 77
            iconst_0
            istore 7 /* i */
        start local 7 // int i
         1: goto 18
         2: .line 78
      StackMap locals: int
      StackMap stack:
            aload 1 /* mechs */
            iload 7 /* i */
            aaload
            getstatic com.sun.security.sasl.ClientFactoryImpl.myMechs:[Ljava/lang/String;
            iconst_0
            aaload
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 5
         3: .line 79
            getstatic com.sun.security.sasl.ClientFactoryImpl.mechPolicies:[I
            iconst_0
            iaload
            aload 5 /* props */
            invokestatic com.sun.security.sasl.util.PolicyUtils.checkPolicy:(ILjava/util/Map;)Z
            ifeq 5
         4: .line 80
            new com.sun.security.sasl.ExternalClient
            dup
            aload 2 /* authorizationId */
            invokespecial com.sun.security.sasl.ExternalClient.<init>:(Ljava/lang/String;)V
            areturn
         5: .line 82
      StackMap locals:
      StackMap stack:
            aload 1 /* mechs */
            iload 7 /* i */
            aaload
            getstatic com.sun.security.sasl.ClientFactoryImpl.myMechs:[Ljava/lang/String;
            iconst_1
            aaload
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
         6: .line 83
            getstatic com.sun.security.sasl.ClientFactoryImpl.mechPolicies:[I
            iconst_1
            iaload
            aload 5 /* props */
            invokestatic com.sun.security.sasl.util.PolicyUtils.checkPolicy:(ILjava/util/Map;)Z
            ifeq 11
         7: .line 85
            aload 0 /* this */
            ldc "CRAM-MD5"
            aload 2 /* authorizationId */
            aload 6 /* cbh */
            invokevirtual com.sun.security.sasl.ClientFactoryImpl.getUserInfo:(Ljava/lang/String;Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)[Ljava/lang/Object;
            astore 8 /* uinfo */
        start local 8 // java.lang.Object[] uinfo
         8: .line 88
            new com.sun.security.sasl.CramMD5Client
            dup
            aload 8 /* uinfo */
            iconst_0
            aaload
            checkcast java.lang.String
         9: .line 89
            aload 8 /* uinfo */
            iconst_1
            aaload
            checkcast byte[]
        10: .line 88
            invokespecial com.sun.security.sasl.CramMD5Client.<init>:(Ljava/lang/String;[B)V
            areturn
        end local 8 // java.lang.Object[] uinfo
        11: .line 91
      StackMap locals:
      StackMap stack:
            aload 1 /* mechs */
            iload 7 /* i */
            aaload
            getstatic com.sun.security.sasl.ClientFactoryImpl.myMechs:[Ljava/lang/String;
            iconst_2
            aaload
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 17
        12: .line 92
            getstatic com.sun.security.sasl.ClientFactoryImpl.mechPolicies:[I
            iconst_2
            iaload
            aload 5 /* props */
            invokestatic com.sun.security.sasl.util.PolicyUtils.checkPolicy:(ILjava/util/Map;)Z
            ifeq 17
        13: .line 94
            aload 0 /* this */
            ldc "PLAIN"
            aload 2 /* authorizationId */
            aload 6 /* cbh */
            invokevirtual com.sun.security.sasl.ClientFactoryImpl.getUserInfo:(Ljava/lang/String;Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)[Ljava/lang/Object;
            astore 8 /* uinfo */
        start local 8 // java.lang.Object[] uinfo
        14: .line 97
            new com.sun.security.sasl.PlainClient
            dup
            aload 2 /* authorizationId */
        15: .line 98
            aload 8 /* uinfo */
            iconst_0
            aaload
            checkcast java.lang.String
            aload 8 /* uinfo */
            iconst_1
            aaload
            checkcast byte[]
        16: .line 97
            invokespecial com.sun.security.sasl.PlainClient.<init>:(Ljava/lang/String;Ljava/lang/String;[B)V
            areturn
        end local 8 // java.lang.Object[] uinfo
        17: .line 77
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        18: iload 7 /* i */
            aload 1 /* mechs */
            arraylength
            if_icmplt 2
        end local 7 // int i
        19: .line 101
            aconst_null
            areturn
        end local 6 // javax.security.auth.callback.CallbackHandler cbh
        end local 5 // java.util.Map props
        end local 4 // java.lang.String serverName
        end local 3 // java.lang.String protocol
        end local 2 // java.lang.String authorizationId
        end local 1 // java.lang.String[] mechs
        end local 0 // com.sun.security.sasl.ClientFactoryImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   20     0             this  Lcom/sun/security/sasl/ClientFactoryImpl;
            0   20     1            mechs  [Ljava/lang/String;
            0   20     2  authorizationId  Ljava/lang/String;
            0   20     3         protocol  Ljava/lang/String;
            0   20     4       serverName  Ljava/lang/String;
            0   20     5            props  Ljava/util/Map<Ljava/lang/String;*>;
            0   20     6              cbh  Ljavax/security/auth/callback/CallbackHandler;
            1   19     7                i  I
            8   11     8            uinfo  [Ljava/lang/Object;
           14   17     8            uinfo  [Ljava/lang/Object;
    Exceptions:
      throws javax.security.sasl.SaslException
    Signature: ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;*>;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient;
    MethodParameters:
                 Name  Flags
      mechs            
      authorizationId  
      protocol         
      serverName       
      props            
      cbh              

  public java.lang.String[] getMechanismNames(java.util.Map<java.lang.String, ?>);
    descriptor: (Ljava/util/Map;)[Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.sun.security.sasl.ClientFactoryImpl this
        start local 1 // java.util.Map props
         0: .line 105
            getstatic com.sun.security.sasl.ClientFactoryImpl.myMechs:[Ljava/lang/String;
            getstatic com.sun.security.sasl.ClientFactoryImpl.mechPolicies:[I
            aload 1 /* props */
            invokestatic com.sun.security.sasl.util.PolicyUtils.filterMechs:([Ljava/lang/String;[ILjava/util/Map;)[Ljava/lang/String;
            areturn
        end local 1 // java.util.Map props
        end local 0 // com.sun.security.sasl.ClientFactoryImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lcom/sun/security/sasl/ClientFactoryImpl;
            0    1     1  props  Ljava/util/Map<Ljava/lang/String;*>;
    Signature: (Ljava/util/Map<Ljava/lang/String;*>;)[Ljava/lang/String;
    MethodParameters:
       Name  Flags
      props  

  private java.lang.Object[] getUserInfo(java.lang.String, java.lang.String, javax.security.auth.callback.CallbackHandler);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljavax/security/auth/callback/CallbackHandler;)[Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=11, args_size=4
        start local 0 // com.sun.security.sasl.ClientFactoryImpl this
        start local 1 // java.lang.String prefix
        start local 2 // java.lang.String authorizationId
        start local 3 // javax.security.auth.callback.CallbackHandler cbh
         0: .line 122
            aload 3 /* cbh */
            ifnonnull 4
         1: .line 123
            new javax.security.sasl.SaslException
            dup
         2: .line 124
            ldc "Callback handler to get username/password required"
         3: .line 123
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 127
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 1 /* prefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " authentication id: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 4 /* userPrompt */
        start local 4 // java.lang.String userPrompt
         5: .line 128
            new java.lang.StringBuilder
            dup
            aload 1 /* prefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " password: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 5 /* passwdPrompt */
        start local 5 // java.lang.String passwdPrompt
         6: .line 130
            aload 2 /* authorizationId */
            ifnonnull 8
         7: .line 131
            new javax.security.auth.callback.NameCallback
            dup
            aload 4 /* userPrompt */
            invokespecial javax.security.auth.callback.NameCallback.<init>:(Ljava/lang/String;)V
            goto 9
         8: .line 132
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            new javax.security.auth.callback.NameCallback
            dup
            aload 4 /* userPrompt */
            aload 2 /* authorizationId */
            invokespecial javax.security.auth.callback.NameCallback.<init>:(Ljava/lang/String;Ljava/lang/String;)V
         9: .line 130
      StackMap locals:
      StackMap stack: javax.security.auth.callback.NameCallback
            astore 6 /* ncb */
        start local 6 // javax.security.auth.callback.NameCallback ncb
        10: .line 134
            new javax.security.auth.callback.PasswordCallback
            dup
            aload 5 /* passwdPrompt */
            iconst_0
            invokespecial javax.security.auth.callback.PasswordCallback.<init>:(Ljava/lang/String;Z)V
            astore 7 /* pcb */
        start local 7 // javax.security.auth.callback.PasswordCallback pcb
        11: .line 136
            aload 3 /* cbh */
            iconst_2
            anewarray javax.security.auth.callback.Callback
            dup
            iconst_0
            aload 6 /* ncb */
            aastore
            dup
            iconst_1
            aload 7 /* pcb */
            aastore
            invokeinterface javax.security.auth.callback.CallbackHandler.handle:([Ljavax/security/auth/callback/Callback;)V
        12: .line 138
            aload 7 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.getPassword:()[C
            astore 8 /* pw */
        start local 8 // char[] pw
        13: .line 143
            aload 8 /* pw */
            ifnull 17
        14: .line 144
            new java.lang.String
            dup
            aload 8 /* pw */
            invokespecial java.lang.String.<init>:([C)V
            ldc "UTF8"
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            astore 9 /* bytepw */
        start local 9 // byte[] bytepw
        15: .line 145
            aload 7 /* pcb */
            invokevirtual javax.security.auth.callback.PasswordCallback.clearPassword:()V
        16: .line 146
            goto 18
        end local 9 // byte[] bytepw
        17: .line 147
      StackMap locals: javax.security.auth.callback.NameCallback javax.security.auth.callback.PasswordCallback char[]
      StackMap stack:
            aconst_null
            astore 9 /* bytepw */
        start local 9 // byte[] bytepw
        18: .line 150
      StackMap locals: byte[]
      StackMap stack:
            aload 6 /* ncb */
            invokevirtual javax.security.auth.callback.NameCallback.getName:()Ljava/lang/String;
            astore 10 /* authId */
        start local 10 // java.lang.String authId
        19: .line 152
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 10 /* authId */
            aastore
            dup
            iconst_1
            aload 9 /* bytepw */
            aastore
        20: areturn
        end local 10 // java.lang.String authId
        end local 9 // byte[] bytepw
        end local 8 // char[] pw
        end local 7 // javax.security.auth.callback.PasswordCallback pcb
        end local 6 // javax.security.auth.callback.NameCallback ncb
        end local 5 // java.lang.String passwdPrompt
        end local 4 // java.lang.String userPrompt
        21: .line 154
      StackMap locals: com.sun.security.sasl.ClientFactoryImpl java.lang.String java.lang.String javax.security.auth.callback.CallbackHandler
      StackMap stack: java.io.IOException
            astore 4 /* e */
        start local 4 // java.io.IOException e
        22: .line 155
            new javax.security.sasl.SaslException
            dup
            ldc "Cannot get password"
            aload 4 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.IOException e
        23: .line 156
      StackMap locals:
      StackMap stack: javax.security.auth.callback.UnsupportedCallbackException
            astore 4 /* e */
        start local 4 // javax.security.auth.callback.UnsupportedCallbackException e
        24: .line 157
            new javax.security.sasl.SaslException
            dup
            ldc "Cannot get userid/password"
            aload 4 /* e */
            invokespecial javax.security.sasl.SaslException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // javax.security.auth.callback.UnsupportedCallbackException e
        end local 3 // javax.security.auth.callback.CallbackHandler cbh
        end local 2 // java.lang.String authorizationId
        end local 1 // java.lang.String prefix
        end local 0 // com.sun.security.sasl.ClientFactoryImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   25     0             this  Lcom/sun/security/sasl/ClientFactoryImpl;
            0   25     1           prefix  Ljava/lang/String;
            0   25     2  authorizationId  Ljava/lang/String;
            0   25     3              cbh  Ljavax/security/auth/callback/CallbackHandler;
            5   21     4       userPrompt  Ljava/lang/String;
            6   21     5     passwdPrompt  Ljava/lang/String;
           10   21     6              ncb  Ljavax/security/auth/callback/NameCallback;
           11   21     7              pcb  Ljavax/security/auth/callback/PasswordCallback;
           13   21     8               pw  [C
           15   17     9           bytepw  [B
           18   21     9           bytepw  [B
           19   21    10           authId  Ljava/lang/String;
           22   23     4                e  Ljava/io/IOException;
           24   25     4                e  Ljavax/security/auth/callback/UnsupportedCallbackException;
      Exception table:
        from    to  target  type
           4    20      21  Class java.io.IOException
           4    20      23  Class javax.security.auth.callback.UnsupportedCallbackException
    Exceptions:
      throws javax.security.sasl.SaslException
    MethodParameters:
                 Name  Flags
      prefix           
      authorizationId  
      cbh              
}
SourceFile: "ClientFactoryImpl.java"