public class org.apache.catalina.realm.JNDIRealm extends org.apache.catalina.realm.RealmBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.realm.JNDIRealm
  super_class: org.apache.catalina.realm.RealmBase
{
  protected java.lang.String authentication;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String connectionName;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String connectionPassword;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String connectionURL;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String contextFactory;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String derefAliases;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  public static final java.lang.String DEREF_ALIASES;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "java.naming.ldap.derefAliases"

  protected java.lang.String protocol;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected boolean adCompat;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String referrals;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userBase;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userSearch;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  private boolean userSearchAsUser;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  protected boolean userSubtree;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userPassword;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userRoleAttribute;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String[] userPatternArray;
    descriptor: [Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userPattern;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String roleBase;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userRoleName;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String roleName;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String roleSearch;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected boolean roleSubtree;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected boolean roleNested;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected boolean roleSearchAsUser;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String alternateURL;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected int connectionAttempt;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String commonRole;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String connectionTimeout;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String readTimeout;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected long sizeLimit;
    descriptor: J
    flags: (0x0004) ACC_PROTECTED

  protected int timeLimit;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected boolean useDelegatedCredential;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String spnegoDelegationQop;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  private boolean useStartTls;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private javax.naming.ldap.StartTlsResponse tls;
    descriptor: Ljavax/naming/ldap/StartTlsResponse;
    flags: (0x0002) ACC_PRIVATE

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

  private javax.net.ssl.HostnameVerifier hostnameVerifier;
    descriptor: Ljavax/net/ssl/HostnameVerifier;
    flags: (0x0002) ACC_PRIVATE

  private javax.net.ssl.SSLSocketFactory sslSocketFactory;
    descriptor: Ljavax/net/ssl/SSLSocketFactory;
    flags: (0x0002) ACC_PRIVATE

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

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

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

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

  private boolean forceDnHexEscape;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  protected org.apache.catalina.realm.JNDIRealm$JNDIConnection singleConnection;
    descriptor: Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
    flags: (0x0004) ACC_PROTECTED

  protected final java.util.concurrent.locks.Lock singleConnectionLock;
    descriptor: Ljava/util/concurrent/locks/Lock;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected org.apache.tomcat.util.collections.SynchronizedStack<org.apache.catalina.realm.JNDIRealm$JNDIConnection> connectionPool;
    descriptor: Lorg/apache/tomcat/util/collections/SynchronizedStack;
    flags: (0x0004) ACC_PROTECTED
    Signature: Lorg/apache/tomcat/util/collections/SynchronizedStack<Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;>;

  protected int connectionPoolSize;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected boolean useContextClassLoader;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 182
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.<init>:()V
         1: .line 190
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.authentication:Ljava/lang/String;
         2: .line 195
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
         3: .line 201
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
         4: .line 207
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
         5: .line 215
            aload 0 /* this */
            ldc "com.sun.jndi.ldap.LdapCtxFactory"
            putfield org.apache.catalina.realm.JNDIRealm.contextFactory:Ljava/lang/String;
         6: .line 221
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.derefAliases:Ljava/lang/String;
         7: .line 234
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.protocol:Ljava/lang/String;
         8: .line 244
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
         9: .line 253
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.referrals:Ljava/lang/String;
        10: .line 259
            aload 0 /* this */
            ldc ""
            putfield org.apache.catalina.realm.JNDIRealm.userBase:Ljava/lang/String;
        11: .line 266
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userSearch:Ljava/lang/String;
        12: .line 275
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.userSearchAsUser:Z
        13: .line 281
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.userSubtree:Z
        14: .line 287
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
        15: .line 295
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
        16: .line 306
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
        17: .line 314
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userPattern:Ljava/lang/String;
        18: .line 320
            aload 0 /* this */
            ldc ""
            putfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
        19: .line 327
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
        20: .line 333
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
        21: .line 341
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.roleSearch:Ljava/lang/String;
        22: .line 347
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.roleSubtree:Z
        23: .line 352
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.roleNested:Z
        24: .line 360
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.roleSearchAsUser:Z
        25: .line 371
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
        26: .line 376
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.commonRole:Ljava/lang/String;
        27: .line 383
            aload 0 /* this */
            ldc "5000"
            putfield org.apache.catalina.realm.JNDIRealm.connectionTimeout:Ljava/lang/String;
        28: .line 389
            aload 0 /* this */
            ldc "5000"
            putfield org.apache.catalina.realm.JNDIRealm.readTimeout:Ljava/lang/String;
        29: .line 395
            aload 0 /* this */
            lconst_0
            putfield org.apache.catalina.realm.JNDIRealm.sizeLimit:J
        30: .line 401
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.timeLimit:I
        31: .line 408
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JNDIRealm.useDelegatedCredential:Z
        32: .line 417
            aload 0 /* this */
            ldc "auth-conf"
            putfield org.apache.catalina.realm.JNDIRealm.spnegoDelegationQop:Ljava/lang/String;
        33: .line 422
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.useStartTls:Z
        34: .line 424
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
        35: .line 430
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
        36: .line 436
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
        37: .line 441
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.sslSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
        38: .line 466
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.forceDnHexEscape:Z
        39: .line 472
            aload 0 /* this */
            new org.apache.catalina.realm.JNDIRealm$JNDIConnection
            dup
            invokespecial org.apache.catalina.realm.JNDIRealm$JNDIConnection.<init>:()V
            putfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
        40: .line 478
            aload 0 /* this */
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            putfield org.apache.catalina.realm.JNDIRealm.singleConnectionLock:Ljava/util/concurrent/locks/Lock;
        41: .line 484
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
        42: .line 490
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JNDIRealm.connectionPoolSize:I
        43: .line 498
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JNDIRealm.useContextClassLoader:Z
        44: .line 182
            return
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   45     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public boolean getForceDnHexEscape();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 504
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.forceDnHexEscape:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setForceDnHexEscape(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean forceDnHexEscape
         0: .line 508
            aload 0 /* this */
            iload 1 /* forceDnHexEscape */
            putfield org.apache.catalina.realm.JNDIRealm.forceDnHexEscape:Z
         1: .line 509
            return
        end local 1 // boolean forceDnHexEscape
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0              this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  forceDnHexEscape  Z
    MethodParameters:
                  Name  Flags
      forceDnHexEscape  

  public java.lang.String getAuthentication();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 516
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.authentication:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setAuthentication(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String authentication
         0: .line 527
            aload 0 /* this */
            aload 1 /* authentication */
            putfield org.apache.catalina.realm.JNDIRealm.authentication:Ljava/lang/String;
         1: .line 529
            return
        end local 1 // java.lang.String authentication
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  authentication  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      authentication  

  public java.lang.String getConnectionName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 536
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setConnectionName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String connectionName
         0: .line 548
            aload 0 /* this */
            aload 1 /* connectionName */
            putfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
         1: .line 550
            return
        end local 1 // java.lang.String connectionName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  connectionName  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      connectionName  

  public java.lang.String getConnectionPassword();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 558
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setConnectionPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String connectionPassword
         0: .line 570
            aload 0 /* this */
            aload 1 /* connectionPassword */
            putfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
         1: .line 572
            return
        end local 1 // java.lang.String connectionPassword
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    2     0                this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  connectionPassword  Ljava/lang/String;
    MethodParameters:
                    Name  Flags
      connectionPassword  

  public java.lang.String getConnectionURL();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 580
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setConnectionURL(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String connectionURL
         0: .line 592
            aload 0 /* this */
            aload 1 /* connectionURL */
            putfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
         1: .line 594
            return
        end local 1 // java.lang.String connectionURL
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  connectionURL  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      connectionURL  

  public java.lang.String getContextFactory();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 602
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.contextFactory:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setContextFactory(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String contextFactory
         0: .line 614
            aload 0 /* this */
            aload 1 /* contextFactory */
            putfield org.apache.catalina.realm.JNDIRealm.contextFactory:Ljava/lang/String;
         1: .line 616
            return
        end local 1 // java.lang.String contextFactory
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  contextFactory  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      contextFactory  

  public java.lang.String getDerefAliases();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 622
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.derefAliases:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setDerefAliases(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String derefAliases
         0: .line 631
            aload 0 /* this */
            aload 1 /* derefAliases */
            putfield org.apache.catalina.realm.JNDIRealm.derefAliases:Ljava/lang/String;
         1: .line 632
            return
        end local 1 // java.lang.String derefAliases
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  derefAliases  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      derefAliases  

  public java.lang.String getProtocol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 639
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.protocol:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setProtocol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String protocol
         0: .line 650
            aload 0 /* this */
            aload 1 /* protocol */
            putfield org.apache.catalina.realm.JNDIRealm.protocol:Ljava/lang/String;
         1: .line 652
            return
        end local 1 // java.lang.String protocol
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  protocol  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      protocol  

  public boolean getAdCompat();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 659
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setAdCompat(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean adCompat
         0: .line 669
            aload 0 /* this */
            iload 1 /* adCompat */
            putfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
         1: .line 670
            return
        end local 1 // boolean adCompat
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  adCompat  Z
    MethodParameters:
          Name  Flags
      adCompat  

  public java.lang.String getReferrals();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 677
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.referrals:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setReferrals(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String referrals
         0: .line 687
            aload 0 /* this */
            aload 1 /* referrals */
            putfield org.apache.catalina.realm.JNDIRealm.referrals:Ljava/lang/String;
         1: .line 688
            return
        end local 1 // java.lang.String referrals
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  referrals  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      referrals  

  public java.lang.String getUserBase();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 696
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userBase:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserBase(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userBase
         0: .line 708
            aload 0 /* this */
            aload 1 /* userBase */
            putfield org.apache.catalina.realm.JNDIRealm.userBase:Ljava/lang/String;
         1: .line 710
            return
        end local 1 // java.lang.String userBase
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userBase  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      userBase  

  public java.lang.String getUserSearch();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 718
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSearch:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserSearch(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userSearch
         0: .line 729
            aload 0 /* this */
            aload 1 /* userSearch */
            putfield org.apache.catalina.realm.JNDIRealm.userSearch:Ljava/lang/String;
         1: .line 730
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.create:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            putfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
         2: .line 731
            return
        end local 1 // java.lang.String userSearch
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    3     1  userSearch  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      userSearch  

  public boolean isUserSearchAsUser();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 735
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSearchAsUser:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserSearchAsUser(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean userSearchAsUser
         0: .line 740
            aload 0 /* this */
            iload 1 /* userSearchAsUser */
            putfield org.apache.catalina.realm.JNDIRealm.userSearchAsUser:Z
         1: .line 741
            return
        end local 1 // boolean userSearchAsUser
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0              this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userSearchAsUser  Z
    MethodParameters:
                  Name  Flags
      userSearchAsUser  

  public boolean getUserSubtree();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 749
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSubtree:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserSubtree(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean userSubtree
         0: .line 761
            aload 0 /* this */
            iload 1 /* userSubtree */
            putfield org.apache.catalina.realm.JNDIRealm.userSubtree:Z
         1: .line 763
            return
        end local 1 // boolean userSubtree
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userSubtree  Z
    MethodParameters:
             Name  Flags
      userSubtree  

  public java.lang.String getUserRoleName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 771
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserRoleName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userRoleName
         0: .line 782
            aload 0 /* this */
            aload 1 /* userRoleName */
            putfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
         1: .line 784
            return
        end local 1 // java.lang.String userRoleName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userRoleName  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      userRoleName  

  public java.lang.String getRoleBase();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 792
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleBase(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String roleBase
         0: .line 803
            aload 0 /* this */
            aload 1 /* roleBase */
            putfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
         1: .line 804
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.create:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            putfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
         2: .line 805
            return
        end local 1 // java.lang.String roleBase
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    3     1  roleBase  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      roleBase  

  public java.lang.String getRoleName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 813
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String roleName
         0: .line 825
            aload 0 /* this */
            aload 1 /* roleName */
            putfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
         1: .line 827
            return
        end local 1 // java.lang.String roleName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  roleName  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      roleName  

  public java.lang.String getRoleSearch();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 835
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSearch:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleSearch(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String roleSearch
         0: .line 846
            aload 0 /* this */
            aload 1 /* roleSearch */
            putfield org.apache.catalina.realm.JNDIRealm.roleSearch:Ljava/lang/String;
         1: .line 847
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.create:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            putfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
         2: .line 848
            return
        end local 1 // java.lang.String roleSearch
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    3     1  roleSearch  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      roleSearch  

  public boolean isRoleSearchAsUser();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 852
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSearchAsUser:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleSearchAsUser(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean roleSearchAsUser
         0: .line 857
            aload 0 /* this */
            iload 1 /* roleSearchAsUser */
            putfield org.apache.catalina.realm.JNDIRealm.roleSearchAsUser:Z
         1: .line 858
            return
        end local 1 // boolean roleSearchAsUser
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0              this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  roleSearchAsUser  Z
    MethodParameters:
                  Name  Flags
      roleSearchAsUser  

  public boolean getRoleSubtree();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 866
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSubtree:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleSubtree(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean roleSubtree
         0: .line 878
            aload 0 /* this */
            iload 1 /* roleSubtree */
            putfield org.apache.catalina.realm.JNDIRealm.roleSubtree:Z
         1: .line 880
            return
        end local 1 // boolean roleSubtree
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  roleSubtree  Z
    MethodParameters:
             Name  Flags
      roleSubtree  

  public boolean getRoleNested();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 887
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleNested:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setRoleNested(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean roleNested
         0: .line 899
            aload 0 /* this */
            iload 1 /* roleNested */
            putfield org.apache.catalina.realm.JNDIRealm.roleNested:Z
         1: .line 901
            return
        end local 1 // boolean roleNested
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  roleNested  Z
    MethodParameters:
            Name  Flags
      roleNested  

  public java.lang.String getUserPassword();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 909
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userPassword
         0: .line 921
            aload 0 /* this */
            aload 1 /* userPassword */
            putfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
         1: .line 923
            return
        end local 1 // java.lang.String userPassword
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userPassword  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      userPassword  

  public java.lang.String getUserRoleAttribute();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 927
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserRoleAttribute(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userRoleAttribute
         0: .line 931
            aload 0 /* this */
            aload 1 /* userRoleAttribute */
            putfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
         1: .line 932
            return
        end local 1 // java.lang.String userRoleAttribute
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    2     0               this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  userRoleAttribute  Ljava/lang/String;
    MethodParameters:
                   Name  Flags
      userRoleAttribute  

  public java.lang.String getUserPattern();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 939
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPattern:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUserPattern(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userPattern
         0: .line 957
            aload 0 /* this */
            aload 1 /* userPattern */
            putfield org.apache.catalina.realm.JNDIRealm.userPattern:Ljava/lang/String;
         1: .line 958
            aload 1 /* userPattern */
            ifnonnull 4
         2: .line 959
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
         3: .line 960
            goto 6
         4: .line 961
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* userPattern */
            invokevirtual org.apache.catalina.realm.JNDIRealm.parseUserPatternString:(Ljava/lang/String;)[Ljava/lang/String;
            putfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
         5: .line 962
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.create:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            putfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
         6: .line 964
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.String userPattern
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    7     1  userPattern  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      userPattern  

  public java.lang.String getAlternateURL();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 974
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setAlternateURL(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String alternateURL
         0: .line 986
            aload 0 /* this */
            aload 1 /* alternateURL */
            putfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
         1: .line 988
            return
        end local 1 // java.lang.String alternateURL
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  alternateURL  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      alternateURL  

  public java.lang.String getCommonRole();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 996
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.commonRole:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setCommonRole(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String commonRole
         0: .line 1008
            aload 0 /* this */
            aload 1 /* commonRole */
            putfield org.apache.catalina.realm.JNDIRealm.commonRole:Ljava/lang/String;
         1: .line 1010
            return
        end local 1 // java.lang.String commonRole
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  commonRole  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      commonRole  

  public java.lang.String getConnectionTimeout();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1018
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionTimeout:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setConnectionTimeout(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String timeout
         0: .line 1030
            aload 0 /* this */
            aload 1 /* timeout */
            putfield org.apache.catalina.realm.JNDIRealm.connectionTimeout:Ljava/lang/String;
         1: .line 1032
            return
        end local 1 // java.lang.String timeout
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  timeout  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      timeout  

  public java.lang.String getReadTimeout();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1039
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.readTimeout:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setReadTimeout(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String timeout
         0: .line 1051
            aload 0 /* this */
            aload 1 /* timeout */
            putfield org.apache.catalina.realm.JNDIRealm.readTimeout:Ljava/lang/String;
         1: .line 1053
            return
        end local 1 // java.lang.String timeout
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  timeout  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      timeout  

  public long getSizeLimit();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1057
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sizeLimit:J
            lreturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setSizeLimit(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // long sizeLimit
         0: .line 1062
            aload 0 /* this */
            lload 1 /* sizeLimit */
            putfield org.apache.catalina.realm.JNDIRealm.sizeLimit:J
         1: .line 1063
            return
        end local 1 // long sizeLimit
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  sizeLimit  J
    MethodParameters:
           Name  Flags
      sizeLimit  

  public int getTimeLimit();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1067
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.timeLimit:I
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setTimeLimit(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // int timeLimit
         0: .line 1072
            aload 0 /* this */
            iload 1 /* timeLimit */
            putfield org.apache.catalina.realm.JNDIRealm.timeLimit:I
         1: .line 1073
            return
        end local 1 // int timeLimit
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  timeLimit  I
    MethodParameters:
           Name  Flags
      timeLimit  

  public boolean isUseDelegatedCredential();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1077
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.useDelegatedCredential:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUseDelegatedCredential(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean useDelegatedCredential
         0: .line 1081
            aload 0 /* this */
            iload 1 /* useDelegatedCredential */
            putfield org.apache.catalina.realm.JNDIRealm.useDelegatedCredential:Z
         1: .line 1082
            return
        end local 1 // boolean useDelegatedCredential
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0    2     0                    this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  useDelegatedCredential  Z
    MethodParameters:
                        Name  Flags
      useDelegatedCredential  

  public java.lang.String getSpnegoDelegationQop();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1086
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.spnegoDelegationQop:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setSpnegoDelegationQop(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String spnegoDelegationQop
         0: .line 1090
            aload 0 /* this */
            aload 1 /* spnegoDelegationQop */
            putfield org.apache.catalina.realm.JNDIRealm.spnegoDelegationQop:Ljava/lang/String;
         1: .line 1091
            return
        end local 1 // java.lang.String spnegoDelegationQop
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    2     0                 this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  spnegoDelegationQop  Ljava/lang/String;
    MethodParameters:
                     Name  Flags
      spnegoDelegationQop  

  public boolean getUseStartTls();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1098
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.useStartTls:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setUseStartTls(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean useStartTls
         0: .line 1109
            aload 0 /* this */
            iload 1 /* useStartTls */
            putfield org.apache.catalina.realm.JNDIRealm.useStartTls:Z
         1: .line 1110
            return
        end local 1 // boolean useStartTls
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  useStartTls  Z
    MethodParameters:
             Name  Flags
      useStartTls  

  private java.lang.String[] getCipherSuitesArray();
    descriptor: ()[Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1117
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuites:Ljava/lang/String;
            ifnull 1
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
            ifnull 2
         1: .line 1118
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
            areturn
         2: .line 1120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuites:Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 6
         3: .line 1121
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.emptyCipherSuites"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
         4: .line 1122
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
         5: .line 1123
            goto 10
         6: .line 1124
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuites:Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            ldc "\\s*,\\s*"
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            putfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
         7: .line 1125
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.cipherSuites"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         8: .line 1126
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
            invokestatic java.util.Arrays.toString:([Ljava/lang/Object;)Ljava/lang/String;
            aastore
         9: .line 1125
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        10: .line 1128
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.cipherSuitesArray:[Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setCipherSuites(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String suites
         0: .line 1139
            aload 0 /* this */
            aload 1 /* suites */
            putfield org.apache.catalina.realm.JNDIRealm.cipherSuites:Ljava/lang/String;
         1: .line 1140
            return
        end local 1 // java.lang.String suites
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  suites  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      suites  

  public int getConnectionPoolSize();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1147
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPoolSize:I
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setConnectionPoolSize(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // int connectionPoolSize
         0: .line 1155
            aload 0 /* this */
            iload 1 /* connectionPoolSize */
            putfield org.apache.catalina.realm.JNDIRealm.connectionPoolSize:I
         1: .line 1156
            return
        end local 1 // int connectionPoolSize
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    2     0                this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  connectionPoolSize  I
    MethodParameters:
                    Name  Flags
      connectionPoolSize  

  public java.lang.String getHostnameVerifierClassName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1164
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
            ifnonnull 2
         1: .line 1165
            ldc ""
            areturn
         2: .line 1167
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getCanonicalName:()Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public void setHostnameVerifierClassName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String verifierClassName
         0: .line 1179
            aload 1 /* verifierClassName */
            ifnull 3
         1: .line 1180
            aload 0 /* this */
            aload 1 /* verifierClassName */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            putfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
         2: .line 1181
            goto 4
         3: .line 1182
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
         4: .line 1184
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.String verifierClassName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    5     0               this  Lorg/apache/catalina/realm/JNDIRealm;
            0    5     1  verifierClassName  Ljava/lang/String;
    MethodParameters:
                   Name  Flags
      verifierClassName  

  public javax.net.ssl.HostnameVerifier getHostnameVerifier();
    descriptor: ()Ljavax/net/ssl/HostnameVerifier;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1191
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
            ifnull 2
         1: .line 1192
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
            areturn
         2: .line 1194
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
            ifnull 4
         3: .line 1195
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
            ldc ""
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 5
         4: .line 1196
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         5: .line 1199
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
            invokevirtual org.apache.catalina.realm.JNDIRealm.constructInstance:(Ljava/lang/String;)Ljava/lang/Object;
            astore 1 /* o */
        start local 1 // java.lang.Object o
         6: .line 1200
            aload 1 /* o */
            instanceof javax.net.ssl.HostnameVerifier
            ifeq 10
         7: .line 1201
            aload 0 /* this */
            aload 1 /* o */
            checkcast javax.net.ssl.HostnameVerifier
            putfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
         8: .line 1202
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostnameVerifier:Ljavax/net/ssl/HostnameVerifier;
         9: areturn
        10: .line 1204
      StackMap locals: java.lang.Object
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
        11: .line 1205
            ldc "jndiRealm.invalidHostnameVerifier"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        12: .line 1206
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
            aastore
        13: .line 1204
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.Object o
        14: .line 1208
      StackMap locals: org.apache.catalina.realm.JNDIRealm
      StackMap stack: java.lang.Exception
            astore 1 /* e */
        start local 1 // java.lang.Exception e
        15: .line 1209
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
        16: .line 1210
            ldc "jndiRealm.invalidHostnameVerifier"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        17: .line 1211
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.hostNameVerifierClassName:Ljava/lang/String;
            aastore
        18: .line 1209
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        19: .line 1211
            aload 1 /* e */
        20: .line 1209
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.lang.Exception e
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   21     0  this  Lorg/apache/catalina/realm/JNDIRealm;
            6   14     1     o  Ljava/lang/Object;
           15   21     1     e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           5     9      14  Class java.lang.ReflectiveOperationException
          10    14      14  Class java.lang.ReflectiveOperationException
           5     9      14  Class java.lang.SecurityException
          10    14      14  Class java.lang.SecurityException

  public void setSslSocketFactoryClassName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String factoryClassName
         0: .line 1225
            aload 0 /* this */
            aload 1 /* factoryClassName */
            putfield org.apache.catalina.realm.JNDIRealm.sslSocketFactoryClassName:Ljava/lang/String;
         1: .line 1226
            return
        end local 1 // java.lang.String factoryClassName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    2     0              this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  factoryClassName  Ljava/lang/String;
    MethodParameters:
                  Name  Flags
      factoryClassName  

  public void setSslProtocol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String protocol
         0: .line 1235
            aload 0 /* this */
            aload 1 /* protocol */
            putfield org.apache.catalina.realm.JNDIRealm.sslProtocol:Ljava/lang/String;
         1: .line 1236
            return
        end local 1 // java.lang.String protocol
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  protocol  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      protocol  

  private java.lang.String[] getSupportedSslProtocols();
    descriptor: ()[Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1244
            invokestatic javax.net.ssl.SSLContext.getDefault:()Ljavax/net/ssl/SSLContext;
            astore 1 /* sslContext */
        start local 1 // javax.net.ssl.SSLContext sslContext
         1: .line 1245
            aload 1 /* sslContext */
            invokevirtual javax.net.ssl.SSLContext.getSupportedSSLParameters:()Ljavax/net/ssl/SSLParameters;
            invokevirtual javax.net.ssl.SSLParameters.getProtocols:()[Ljava/lang/String;
         2: areturn
        end local 1 // javax.net.ssl.SSLContext sslContext
         3: .line 1246
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 1 /* e */
        start local 1 // java.security.NoSuchAlgorithmException e
         4: .line 1247
            new java.lang.RuntimeException
            dup
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 1 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.security.NoSuchAlgorithmException e
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            1    3     1  sslContext  Ljavax/net/ssl/SSLContext;
            4    5     1           e  Ljava/security/NoSuchAlgorithmException;
      Exception table:
        from    to  target  type
           0     2       3  Class java.security.NoSuchAlgorithmException

  private java.lang.Object constructInstance(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String className
         0: .line 1253
            aload 1 /* className */
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            astore 2 /* clazz */
        start local 2 // java.lang.Class clazz
         1: .line 1254
            aload 2 /* clazz */
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getConstructor:([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String className
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  className  Ljava/lang/String;
            1    2     2      clazz  Ljava/lang/Class<*>;
    Exceptions:
      throws java.lang.ReflectiveOperationException
    MethodParameters:
           Name  Flags
      className  

  public void setUseContextClassLoader(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // boolean useContext
         0: .line 1264
            aload 0 /* this */
            iload 1 /* useContext */
            putfield org.apache.catalina.realm.JNDIRealm.useContextClassLoader:Z
         1: .line 1265
            return
        end local 1 // boolean useContext
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    2     1  useContext  Z
    MethodParameters:
            Name  Flags
      useContext  

  public boolean isUseContextClassLoader();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 1274
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.useContextClassLoader:Z
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  public java.security.Principal authenticate(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String credentials
         0: .line 1296
            aconst_null
            astore 3 /* connection */
        start local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         1: .line 1297
            aconst_null
            astore 4 /* principal */
        start local 4 // java.security.Principal principal
         2: .line 1302
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
         3: .line 1309
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aload 2 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.authenticate:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
            astore 4 /* principal */
         4: .line 1311
            goto 11
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.lang.String java.lang.String org.apache.catalina.realm.JNDIRealm$JNDIConnection java.security.Principal
      StackMap stack: java.lang.Exception
         5: astore 5 /* e */
        start local 5 // java.lang.Exception e
         6: .line 1328
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception.retry"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;Ljava/lang/Throwable;)V
         7: .line 1331
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
         8: .line 1332
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.closePooledConnections:()V
         9: .line 1335
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
        10: .line 1338
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aload 2 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.authenticate:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
            astore 4 /* principal */
        end local 5 // java.lang.Exception e
        11: .line 1343
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        12: .line 1346
            aload 4 /* principal */
        13: areturn
        14: .line 1348
      StackMap locals:
      StackMap stack: javax.naming.NamingException
            astore 5 /* e */
        start local 5 // javax.naming.NamingException e
        15: .line 1351
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        16: .line 1354
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 18
        17: .line 1355
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "Returning null principal."
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        18: .line 1356
      StackMap locals: javax.naming.NamingException
      StackMap stack:
            aconst_null
            areturn
        end local 5 // javax.naming.NamingException e
        end local 4 // java.security.Principal principal
        end local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 2 // java.lang.String credentials
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   19     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0   19     1     username  Ljava/lang/String;
            0   19     2  credentials  Ljava/lang/String;
            1   19     3   connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            2   19     4    principal  Ljava/security/Principal;
            6   11     5            e  Ljava/lang/Exception;
           15   19     5            e  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.NullPointerException
           3     4       5  Class javax.naming.NamingException
           2    13      14  Class javax.naming.NamingException
    MethodParameters:
             Name  Flags
      username     
      credentials  

  public java.security.Principal authenticate(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, java.lang.String);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String credentials
         0: .line 1386
            aload 2 /* username */
            ifnull 2
            aload 2 /* username */
            ldc ""
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 2
         1: .line 1387
            aload 3 /* credentials */
            ifnull 2
            aload 3 /* credentials */
            ldc ""
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 5
         2: .line 1388
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 4
         3: .line 1389
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "username null or empty: returning null principal."
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         4: .line 1390
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         5: .line 1393
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            ifnull 22
         6: .line 1394
            iconst_0
            istore 4 /* curUserPattern */
        start local 4 // int curUserPattern
         7: .line 1395
            goto 19
         8: .line 1398
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aload 3 /* credentials */
            iload 4 /* curUserPattern */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 5 /* user */
        start local 5 // org.apache.catalina.realm.JNDIRealm$User user
         9: .line 1399
            aload 5 /* user */
            ifnull 18
        10: .line 1402
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 5 /* user */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.checkCredentials:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
            ifeq 18
        11: .line 1404
            aload 0 /* this */
            aload 1 /* connection */
            aload 5 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getRoles:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Lorg/apache/catalina/realm/JNDIRealm$User;)Ljava/util/List;
            astore 6 /* roles */
        start local 6 // java.util.List roles
        12: .line 1405
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 14
        13: .line 1406
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Found roles: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* roles */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        14: .line 1408
      StackMap locals: org.apache.catalina.realm.JNDIRealm$User java.util.List
      StackMap stack:
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 2 /* username */
            aload 6 /* roles */
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;)V
        15: areturn
        end local 6 // java.util.List roles
        16: .line 1410
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String java.lang.String int org.apache.catalina.realm.JNDIRealm$User
      StackMap stack: javax.naming.InvalidNameException
            astore 6 /* ine */
        start local 6 // javax.naming.InvalidNameException ine
        17: .line 1412
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 6 /* ine */
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 6 // javax.naming.InvalidNameException ine
        end local 5 // org.apache.catalina.realm.JNDIRealm$User user
        18: .line 1396
      StackMap locals:
      StackMap stack:
            iinc 4 /* curUserPattern */ 1
        19: .line 1395
      StackMap locals:
      StackMap stack:
            iload 4 /* curUserPattern */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            arraylength
        20: .line 1394
            if_icmplt 8
        end local 4 // int curUserPattern
        21: .line 1420
            aconst_null
            areturn
        22: .line 1423
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 4 /* user */
        start local 4 // org.apache.catalina.realm.JNDIRealm$User user
        23: .line 1424
            aload 4 /* user */
            ifnonnull 25
        24: .line 1425
            aconst_null
            areturn
        25: .line 1428
      StackMap locals: org.apache.catalina.realm.JNDIRealm$User
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 4 /* user */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.checkCredentials:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
            ifne 27
        26: .line 1429
            aconst_null
            areturn
        27: .line 1432
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            aload 4 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getRoles:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Lorg/apache/catalina/realm/JNDIRealm$User;)Ljava/util/List;
            astore 5 /* roles */
        start local 5 // java.util.List roles
        28: .line 1433
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 30
        29: .line 1434
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Found roles: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* roles */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        30: .line 1438
      StackMap locals: java.util.List
      StackMap stack:
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 2 /* username */
            aload 5 /* roles */
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;)V
            areturn
        end local 5 // java.util.List roles
        end local 4 // org.apache.catalina.realm.JNDIRealm$User user
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   31     0            this  Lorg/apache/catalina/realm/JNDIRealm;
            0   31     1      connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0   31     2        username  Ljava/lang/String;
            0   31     3     credentials  Ljava/lang/String;
            7   21     4  curUserPattern  I
            9   18     5            user  Lorg/apache/catalina/realm/JNDIRealm$User;
           12   16     6           roles  Ljava/util/List<Ljava/lang/String;>;
           17   18     6             ine  Ljavax/naming/InvalidNameException;
           23   31     4            user  Lorg/apache/catalina/realm/JNDIRealm$User;
           28   31     5           roles  Ljava/util/List<Ljava/lang/String;>;
      Exception table:
        from    to  target  type
          10    15      16  Class javax.naming.InvalidNameException
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      connection   
      username     
      credentials  

  protected org.apache.catalina.realm.JNDIRealm$User getUser(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
         0: .line 1458
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aconst_null
            iconst_m1
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
            areturn
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    1     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0    1     2    username  Ljava/lang/String;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
            Name  Flags
      connection  
      username    

  protected org.apache.catalina.realm.JNDIRealm$User getUser(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, java.lang.String);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String credentials
         0: .line 1478
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aload 3 /* credentials */
            iconst_m1
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
            areturn
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    1     1   connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0    1     2     username  Ljava/lang/String;
            0    1     3  credentials  Ljava/lang/String;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      connection   
      username     
      credentials  

  protected org.apache.catalina.realm.JNDIRealm$User getUser(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, java.lang.String, int);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=10, args_size=5
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String credentials
        start local 4 // int curUserPattern
         0: .line 1504
            aconst_null
            astore 5 /* user */
        start local 5 // org.apache.catalina.realm.JNDIRealm$User user
         1: .line 1507
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 6 /* list */
        start local 6 // java.util.List list
         2: .line 1508
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            ifnull 4
         3: .line 1509
            aload 6 /* list */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         4: .line 1510
      StackMap locals: org.apache.catalina.realm.JNDIRealm$User java.util.List
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            ifnull 6
         5: .line 1511
            aload 6 /* list */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         6: .line 1512
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            ifnull 8
         7: .line 1513
            aload 6 /* list */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         8: .line 1515
      StackMap locals:
      StackMap stack:
            aload 6 /* list */
            invokeinterface java.util.List.size:()I
            anewarray java.lang.String
            astore 7 /* attrIds */
        start local 7 // java.lang.String[] attrIds
         9: .line 1516
            aload 6 /* list */
            aload 7 /* attrIds */
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            pop
        10: .line 1519
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            ifnull 15
            iload 4 /* curUserPattern */
            iflt 15
        11: .line 1520
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aload 3 /* credentials */
            aload 7 /* attrIds */
            iload 4 /* curUserPattern */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUserByPattern:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 5 /* user */
        12: .line 1521
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 28
        13: .line 1522
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Found user by pattern ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* user */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        14: .line 1524
            goto 28
        15: .line 1525
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUserSearchAsUser:()Z
            istore 8 /* thisUserSearchAsUser */
        start local 8 // boolean thisUserSearchAsUser
        16: .line 1527
            iload 8 /* thisUserSearchAsUser */
            ifeq 18
        17: .line 1528
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 2 /* username */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsAdd:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/lang/String;)V
        18: .line 1530
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            aload 7 /* attrIds */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUserBySearch:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;[Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 5 /* user */
        19: .line 1531
            goto 24
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: astore 9
        21: .line 1532
            iload 8 /* thisUserSearchAsUser */
            ifeq 23
        22: .line 1533
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        23: .line 1535
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 9
            athrow
        24: .line 1532
      StackMap locals:
      StackMap stack:
            iload 8 /* thisUserSearchAsUser */
            ifeq 26
        25: .line 1533
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        26: .line 1536
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 28
        27: .line 1537
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Found user by search ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* user */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        end local 8 // boolean thisUserSearchAsUser
        28: .line 1540
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            ifnonnull 32
            aload 3 /* credentials */
            ifnull 32
            aload 5 /* user */
            ifnull 32
        29: .line 1543
            new org.apache.catalina.realm.JNDIRealm$User
            dup
            aload 5 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserName:()Ljava/lang/String;
            aload 5 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getDN:()Ljava/lang/String;
            aload 3 /* credentials */
        30: .line 1544
            aload 5 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getRoles:()Ljava/util/List;
            aload 5 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserRoleId:()Ljava/lang/String;
        31: .line 1543
            invokespecial org.apache.catalina.realm.JNDIRealm$User.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
            areturn
        32: .line 1547
      StackMap locals:
      StackMap stack:
            aload 5 /* user */
            areturn
        end local 7 // java.lang.String[] attrIds
        end local 6 // java.util.List list
        end local 5 // org.apache.catalina.realm.JNDIRealm$User user
        end local 4 // int curUserPattern
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   33     0                  this  Lorg/apache/catalina/realm/JNDIRealm;
            0   33     1            connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0   33     2              username  Ljava/lang/String;
            0   33     3           credentials  Ljava/lang/String;
            0   33     4        curUserPattern  I
            1   33     5                  user  Lorg/apache/catalina/realm/JNDIRealm$User;
            2   33     6                  list  Ljava/util/List<Ljava/lang/String;>;
            9   33     7               attrIds  [Ljava/lang/String;
           16   28     8  thisUserSearchAsUser  Z
      Exception table:
        from    to  target  type
          16    20      20  any
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
                Name  Flags
      connection      
      username        
      credentials     
      curUserPattern  

  protected org.apache.catalina.realm.JNDIRealm$User getUserByPattern(javax.naming.directory.DirContext, java.lang.String, java.lang.String[], java.lang.String);
    descriptor: (Ljavax/naming/directory/DirContext;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=9, args_size=5
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // java.lang.String username
        start local 3 // java.lang.String[] attrIds
        start local 4 // java.lang.String dn
         0: .line 1571
            aload 3 /* attrIds */
            ifnull 1
            aload 3 /* attrIds */
            arraylength
            ifne 2
         1: .line 1572
      StackMap locals:
      StackMap stack:
            new org.apache.catalina.realm.JNDIRealm$User
            dup
            aload 2 /* username */
            aload 4 /* dn */
            aconst_null
            aconst_null
            aconst_null
            invokespecial org.apache.catalina.realm.JNDIRealm$User.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
            areturn
         2: .line 1576
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* attrs */
        start local 5 // javax.naming.directory.Attributes attrs
         3: .line 1578
            aload 1 /* context */
            aload 4 /* dn */
            aload 3 /* attrIds */
            invokeinterface javax.naming.directory.DirContext.getAttributes:(Ljava/lang/String;[Ljava/lang/String;)Ljavax/naming/directory/Attributes;
            astore 5 /* attrs */
         4: .line 1579
            goto 7
      StackMap locals: org.apache.catalina.realm.JNDIRealm javax.naming.directory.DirContext java.lang.String java.lang.String[] java.lang.String javax.naming.directory.Attributes
      StackMap stack: javax.naming.NameNotFoundException
         5: pop
         6: .line 1580
            aconst_null
            areturn
         7: .line 1582
      StackMap locals:
      StackMap stack:
            aload 5 /* attrs */
            ifnonnull 9
         8: .line 1583
            aconst_null
            areturn
         9: .line 1586
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 6 /* password */
        start local 6 // java.lang.String password
        10: .line 1587
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            ifnull 12
        11: .line 1588
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            aload 5 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 6 /* password */
        12: .line 1590
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            astore 7 /* userRoleAttrValue */
        start local 7 // java.lang.String userRoleAttrValue
        13: .line 1591
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            ifnull 15
        14: .line 1592
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            aload 5 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 7 /* userRoleAttrValue */
        15: .line 1596
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            astore 8 /* roles */
        start local 8 // java.util.ArrayList roles
        16: .line 1597
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            ifnull 18
        17: .line 1598
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            aload 5 /* attrs */
            aload 8 /* roles */
            invokevirtual org.apache.catalina.realm.JNDIRealm.addAttributeValues:(Ljava/lang/String;Ljavax/naming/directory/Attributes;Ljava/util/ArrayList;)Ljava/util/ArrayList;
            astore 8 /* roles */
        18: .line 1600
      StackMap locals: java.util.ArrayList
      StackMap stack:
            new org.apache.catalina.realm.JNDIRealm$User
            dup
            aload 2 /* username */
            aload 4 /* dn */
            aload 6 /* password */
            aload 8 /* roles */
            aload 7 /* userRoleAttrValue */
            invokespecial org.apache.catalina.realm.JNDIRealm$User.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
            areturn
        end local 8 // java.util.ArrayList roles
        end local 7 // java.lang.String userRoleAttrValue
        end local 6 // java.lang.String password
        end local 5 // javax.naming.directory.Attributes attrs
        end local 4 // java.lang.String dn
        end local 3 // java.lang.String[] attrIds
        end local 2 // java.lang.String username
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   19     0               this  Lorg/apache/catalina/realm/JNDIRealm;
            0   19     1            context  Ljavax/naming/directory/DirContext;
            0   19     2           username  Ljava/lang/String;
            0   19     3            attrIds  [Ljava/lang/String;
            0   19     4                 dn  Ljava/lang/String;
            3   19     5              attrs  Ljavax/naming/directory/Attributes;
           10   19     6           password  Ljava/lang/String;
           13   19     7  userRoleAttrValue  Ljava/lang/String;
           16   19     8              roles  Ljava/util/ArrayList<Ljava/lang/String;>;
      Exception table:
        from    to  target  type
           3     4       5  Class javax.naming.NameNotFoundException
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
          Name  Flags
      context   
      username  
      attrIds   
      dn        

  protected org.apache.catalina.realm.JNDIRealm$User getUserByPattern(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, java.lang.String, java.lang.String[], int);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=9, args_size=6
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String credentials
        start local 4 // java.lang.String[] attrIds
        start local 5 // int curUserPattern
         0: .line 1626
            aconst_null
            astore 6 /* user */
        start local 6 // org.apache.catalina.realm.JNDIRealm$User user
         1: .line 1628
            aload 2 /* username */
            ifnull 2
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            iload 5 /* curUserPattern */
            aaload
            ifnonnull 3
         2: .line 1629
      StackMap locals: org.apache.catalina.realm.JNDIRealm$User
      StackMap stack:
            aconst_null
            areturn
         3: .line 1632
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userPatternFormatArray:[Ljava/text/MessageFormat;
            iload 5 /* curUserPattern */
            aaload
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            aload 2 /* username */
            aastore
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            astore 7 /* dn */
        start local 7 // java.lang.String dn
         4: .line 1635
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 2 /* username */
            aload 4 /* attrIds */
            aload 7 /* dn */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUserByPattern:(Ljavax/naming/directory/DirContext;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 6 /* user */
         5: .line 1636
            goto 16
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String java.lang.String java.lang.String[] int org.apache.catalina.realm.JNDIRealm$User java.lang.String
      StackMap stack: javax.naming.NameNotFoundException
         6: pop
         7: .line 1637
            aconst_null
            areturn
         8: .line 1638
      StackMap locals:
      StackMap stack: javax.naming.NamingException
            pop
         9: .line 1642
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 7 /* dn */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsAdd:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/lang/String;)V
        10: .line 1644
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 2 /* username */
            aload 4 /* attrIds */
            aload 7 /* dn */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUserByPattern:(Ljavax/naming/directory/DirContext;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 6 /* user */
        11: .line 1645
            goto 15
      StackMap locals:
      StackMap stack: java.lang.Throwable
        12: astore 8
        13: .line 1646
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        14: .line 1647
            aload 8
            athrow
        15: .line 1646
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        16: .line 1649
      StackMap locals:
      StackMap stack:
            aload 6 /* user */
            areturn
        end local 7 // java.lang.String dn
        end local 6 // org.apache.catalina.realm.JNDIRealm$User user
        end local 5 // int curUserPattern
        end local 4 // java.lang.String[] attrIds
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   17     0            this  Lorg/apache/catalina/realm/JNDIRealm;
            0   17     1      connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0   17     2        username  Ljava/lang/String;
            0   17     3     credentials  Ljava/lang/String;
            0   17     4         attrIds  [Ljava/lang/String;
            0   17     5  curUserPattern  I
            1   17     6            user  Lorg/apache/catalina/realm/JNDIRealm$User;
            4   17     7              dn  Ljava/lang/String;
      Exception table:
        from    to  target  type
           4     5       6  Class javax.naming.NameNotFoundException
           4     5       8  Class javax.naming.NamingException
           9    12      12  any
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
                Name  Flags
      connection      
      username        
      credentials     
      attrIds         
      curUserPattern  

  protected org.apache.catalina.realm.JNDIRealm$User getUserBySearch(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, java.lang.String[]);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;[Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=15, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String[] attrIds
         0: .line 1669
            aload 2 /* username */
            ifnull 1
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userSearchFormat:Ljava/text/MessageFormat;
            ifnonnull 2
         1: .line 1670
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         2: .line 1673
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userSearchFormat:Ljava/text/MessageFormat;
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            aload 2 /* username */
            aastore
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            astore 4 /* filter */
        start local 4 // java.lang.String filter
         3: .line 1676
            new javax.naming.directory.SearchControls
            dup
            invokespecial javax.naming.directory.SearchControls.<init>:()V
            astore 5 /* constraints */
        start local 5 // javax.naming.directory.SearchControls constraints
         4: .line 1678
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSubtree:Z
            ifeq 7
         5: .line 1679
            aload 5 /* constraints */
            iconst_2
            invokevirtual javax.naming.directory.SearchControls.setSearchScope:(I)V
         6: .line 1680
            goto 8
         7: .line 1681
      StackMap locals: java.lang.String javax.naming.directory.SearchControls
      StackMap stack:
            aload 5 /* constraints */
            iconst_1
            invokevirtual javax.naming.directory.SearchControls.setSearchScope:(I)V
         8: .line 1684
      StackMap locals:
      StackMap stack:
            aload 5 /* constraints */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sizeLimit:J
            invokevirtual javax.naming.directory.SearchControls.setCountLimit:(J)V
         9: .line 1685
            aload 5 /* constraints */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.timeLimit:I
            invokevirtual javax.naming.directory.SearchControls.setTimeLimit:(I)V
        10: .line 1688
            aload 3 /* attrIds */
            ifnonnull 12
        11: .line 1689
            iconst_0
            anewarray java.lang.String
            astore 3 /* attrIds */
        12: .line 1690
      StackMap locals:
      StackMap stack:
            aload 5 /* constraints */
            aload 3 /* attrIds */
            invokevirtual javax.naming.directory.SearchControls.setReturningAttributes:([Ljava/lang/String;)V
        13: .line 1693
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userBase:Ljava/lang/String;
            aload 4 /* filter */
            aload 5 /* constraints */
            invokeinterface javax.naming.directory.DirContext.search:(Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;)Ljavax/naming/NamingEnumeration;
        14: .line 1692
            astore 6 /* results */
        start local 6 // javax.naming.NamingEnumeration results
        15: .line 1698
            aload 6 /* results */
            ifnull 16
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.hasMore:()Z
            ifne 25
        16: .line 1751
      StackMap locals: javax.naming.NamingEnumeration
      StackMap stack:
            aload 6 /* results */
            ifnull 18
        17: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        18: .line 1699
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        19: .line 1701
      StackMap locals:
      StackMap stack: javax.naming.PartialResultException
            astore 7 /* ex */
        start local 7 // javax.naming.PartialResultException ex
        20: .line 1702
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ifne 22
        21: .line 1703
            aload 7 /* ex */
            athrow
        22: .line 1751
      StackMap locals: javax.naming.PartialResultException
      StackMap stack:
            aload 6 /* results */
            ifnull 24
        23: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        24: .line 1705
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 7 // javax.naming.PartialResultException ex
        25: .line 1709
      StackMap locals:
      StackMap stack:
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.next:()Ljava/lang/Object;
            checkcast javax.naming.directory.SearchResult
            astore 7 /* result */
        start local 7 // javax.naming.directory.SearchResult result
        26: .line 1713
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.hasMore:()Z
            ifeq 35
        27: .line 1714
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isInfoEnabled:()Z
            ifeq 29
        28: .line 1715
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.multipleEntries"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;)V
        29: .line 1751
      StackMap locals: javax.naming.directory.SearchResult
      StackMap stack:
            aload 6 /* results */
            ifnull 31
        30: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        31: .line 1717
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        32: .line 1719
      StackMap locals:
      StackMap stack: javax.naming.PartialResultException
            astore 8 /* ex */
        start local 8 // javax.naming.PartialResultException ex
        33: .line 1720
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ifne 35
        34: .line 1721
            aload 8 /* ex */
            athrow
        end local 8 // javax.naming.PartialResultException ex
        35: .line 1724
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userBase:Ljava/lang/String;
            aload 7 /* result */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getDistinguishedName:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljavax/naming/directory/SearchResult;)Ljava/lang/String;
            astore 8 /* dn */
        start local 8 // java.lang.String dn
        36: .line 1726
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 38
        37: .line 1727
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  entry found for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* username */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " with dn "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 8 /* dn */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        38: .line 1730
      StackMap locals: java.lang.String
      StackMap stack:
            aload 7 /* result */
            invokevirtual javax.naming.directory.SearchResult.getAttributes:()Ljavax/naming/directory/Attributes;
            astore 9 /* attrs */
        start local 9 // javax.naming.directory.Attributes attrs
        39: .line 1731
            aload 9 /* attrs */
            ifnonnull 43
        40: .line 1751
            aload 6 /* results */
            ifnull 42
        41: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        42: .line 1732
      StackMap locals: javax.naming.directory.Attributes
      StackMap stack:
            aconst_null
            areturn
        43: .line 1735
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 10 /* password */
        start local 10 // java.lang.String password
        44: .line 1736
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            ifnull 46
        45: .line 1737
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            aload 9 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 10 /* password */
        46: .line 1739
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            astore 11 /* userRoleAttrValue */
        start local 11 // java.lang.String userRoleAttrValue
        47: .line 1740
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            ifnull 49
        48: .line 1741
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleAttribute:Ljava/lang/String;
            aload 9 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 11 /* userRoleAttrValue */
        49: .line 1745
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            astore 12 /* roles */
        start local 12 // java.util.ArrayList roles
        50: .line 1746
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            ifnull 52
        51: .line 1747
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userRoleName:Ljava/lang/String;
            aload 9 /* attrs */
            aload 12 /* roles */
            invokevirtual org.apache.catalina.realm.JNDIRealm.addAttributeValues:(Ljava/lang/String;Ljavax/naming/directory/Attributes;Ljava/util/ArrayList;)Ljava/util/ArrayList;
            astore 12 /* roles */
        52: .line 1749
      StackMap locals: java.util.ArrayList
      StackMap stack:
            new org.apache.catalina.realm.JNDIRealm$User
            dup
            aload 2 /* username */
            aload 8 /* dn */
            aload 10 /* password */
            aload 12 /* roles */
            aload 11 /* userRoleAttrValue */
            invokespecial org.apache.catalina.realm.JNDIRealm$User.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
            astore 14
        53: .line 1751
            aload 6 /* results */
            ifnull 55
        54: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        55: .line 1749
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String java.lang.String[] java.lang.String javax.naming.directory.SearchControls javax.naming.NamingEnumeration javax.naming.directory.SearchResult java.lang.String javax.naming.directory.Attributes java.lang.String java.lang.String java.util.ArrayList top org.apache.catalina.realm.JNDIRealm$User
      StackMap stack:
            aload 14
            areturn
        end local 12 // java.util.ArrayList roles
        end local 11 // java.lang.String userRoleAttrValue
        end local 10 // java.lang.String password
        end local 9 // javax.naming.directory.Attributes attrs
        end local 8 // java.lang.String dn
        end local 7 // javax.naming.directory.SearchResult result
        56: .line 1750
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String java.lang.String[] java.lang.String javax.naming.directory.SearchControls javax.naming.NamingEnumeration
      StackMap stack: java.lang.Throwable
            astore 13
        57: .line 1751
            aload 6 /* results */
            ifnull 59
        58: .line 1752
            aload 6 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        59: .line 1754
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String java.lang.String[] java.lang.String javax.naming.directory.SearchControls javax.naming.NamingEnumeration top top top top top top java.lang.Throwable
      StackMap stack:
            aload 13
            athrow
        end local 6 // javax.naming.NamingEnumeration results
        end local 5 // javax.naming.directory.SearchControls constraints
        end local 4 // java.lang.String filter
        end local 3 // java.lang.String[] attrIds
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   60     0               this  Lorg/apache/catalina/realm/JNDIRealm;
            0   60     1         connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0   60     2           username  Ljava/lang/String;
            0   60     3            attrIds  [Ljava/lang/String;
            3   60     4             filter  Ljava/lang/String;
            4   60     5        constraints  Ljavax/naming/directory/SearchControls;
           15   60     6            results  Ljavax/naming/NamingEnumeration<Ljavax/naming/directory/SearchResult;>;
           20   25     7                 ex  Ljavax/naming/PartialResultException;
           26   56     7             result  Ljavax/naming/directory/SearchResult;
           33   35     8                 ex  Ljavax/naming/PartialResultException;
           36   56     8                 dn  Ljava/lang/String;
           39   56     9              attrs  Ljavax/naming/directory/Attributes;
           44   56    10           password  Ljava/lang/String;
           47   56    11  userRoleAttrValue  Ljava/lang/String;
           50   56    12              roles  Ljava/util/ArrayList<Ljava/lang/String;>;
      Exception table:
        from    to  target  type
          15    16      19  Class javax.naming.PartialResultException
          26    29      32  Class javax.naming.PartialResultException
          15    16      56  any
          19    22      56  any
          25    29      56  any
          32    40      56  any
          43    53      56  any
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
            Name  Flags
      connection  
      username    
      attrIds     

  protected boolean checkCredentials(javax.naming.directory.DirContext, org.apache.catalina.realm.JNDIRealm$User, java.lang.String);
    descriptor: (Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=5, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // org.apache.catalina.realm.JNDIRealm$User user
        start local 3 // java.lang.String credentials
         0: .line 1778
            iconst_0
            istore 4 /* validated */
        start local 4 // boolean validated
         1: .line 1780
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPassword:Ljava/lang/String;
            ifnonnull 4
         2: .line 1781
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* user */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.bindAsUser:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
            istore 4 /* validated */
         3: .line 1782
            goto 5
         4: .line 1783
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* user */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.compareCredentials:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
            istore 4 /* validated */
         5: .line 1786
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 14
         6: .line 1787
            iload 4 /* validated */
            ifeq 11
         7: .line 1788
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.authenticateSuccess"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         8: .line 1789
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserName:()Ljava/lang/String;
            aastore
         9: .line 1788
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        10: .line 1790
            goto 14
        11: .line 1791
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.authenticateFailure"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        12: .line 1792
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserName:()Ljava/lang/String;
            aastore
        13: .line 1791
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        14: .line 1795
      StackMap locals:
      StackMap stack:
            iload 4 /* validated */
            ireturn
        end local 4 // boolean validated
        end local 3 // java.lang.String credentials
        end local 2 // org.apache.catalina.realm.JNDIRealm$User user
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0   15     1      context  Ljavax/naming/directory/DirContext;
            0   15     2         user  Lorg/apache/catalina/realm/JNDIRealm$User;
            0   15     3  credentials  Ljava/lang/String;
            1   15     4    validated  Z
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      context      
      user         
      credentials  

  protected boolean compareCredentials(javax.naming.directory.DirContext, org.apache.catalina.realm.JNDIRealm$User, java.lang.String);
    descriptor: (Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // org.apache.catalina.realm.JNDIRealm$User info
        start local 3 // java.lang.String credentials
         0: .line 1815
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 1816
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "  validating credentials"
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 1818
      StackMap locals:
      StackMap stack:
            aload 2 /* info */
            ifnull 3
            aload 3 /* credentials */
            ifnonnull 4
         3: .line 1819
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         4: .line 1821
      StackMap locals:
      StackMap stack:
            aload 2 /* info */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getPassword:()Ljava/lang/String;
            astore 4 /* password */
        start local 4 // java.lang.String password
         5: .line 1823
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getCredentialHandler:()Lorg/apache/catalina/CredentialHandler;
            aload 3 /* credentials */
            aload 4 /* password */
            invokeinterface org.apache.catalina.CredentialHandler.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ireturn
        end local 4 // java.lang.String password
        end local 3 // java.lang.String credentials
        end local 2 // org.apache.catalina.realm.JNDIRealm$User info
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    6     1      context  Ljavax/naming/directory/DirContext;
            0    6     2         info  Lorg/apache/catalina/realm/JNDIRealm$User;
            0    6     3  credentials  Ljava/lang/String;
            5    6     4     password  Ljava/lang/String;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      context      
      info         
      credentials  

  protected boolean bindAsUser(javax.naming.directory.DirContext, org.apache.catalina.realm.JNDIRealm$User, java.lang.String);
    descriptor: (Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // org.apache.catalina.realm.JNDIRealm$User user
        start local 3 // java.lang.String credentials
         0: .line 1841
            aload 3 /* credentials */
            ifnull 1
            aload 2 /* user */
            ifnonnull 2
         1: .line 1842
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 1844
      StackMap locals:
      StackMap stack:
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getDN:()Ljava/lang/String;
            astore 4 /* dn */
        start local 4 // java.lang.String dn
         3: .line 1845
            aload 4 /* dn */
            ifnonnull 5
         4: .line 1846
            iconst_0
            ireturn
         5: .line 1849
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 7
         6: .line 1850
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "  validating credentials by binding as the user"
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         7: .line 1853
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            aload 4 /* dn */
            aload 3 /* credentials */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsAdd:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/lang/String;)V
         8: .line 1856
            iconst_0
            istore 5 /* validated */
        start local 5 // boolean validated
         9: .line 1858
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 11
        10: .line 1859
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  binding as "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* dn */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        11: .line 1861
      StackMap locals: int
      StackMap stack:
            aload 1 /* context */
            ldc ""
            aconst_null
            invokeinterface javax.naming.directory.DirContext.getAttributes:(Ljava/lang/String;[Ljava/lang/String;)Ljavax/naming/directory/Attributes;
            pop
        12: .line 1862
            iconst_1
            istore 5 /* validated */
        13: .line 1863
            goto 17
        14: .line 1864
      StackMap locals:
      StackMap stack: javax.naming.AuthenticationException
            pop
        15: .line 1865
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 17
        16: .line 1866
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "  bind attempt failed"
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        17: .line 1870
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        18: .line 1872
            iload 5 /* validated */
            ireturn
        end local 5 // boolean validated
        end local 4 // java.lang.String dn
        end local 3 // java.lang.String credentials
        end local 2 // org.apache.catalina.realm.JNDIRealm$User user
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   19     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0   19     1      context  Ljavax/naming/directory/DirContext;
            0   19     2         user  Lorg/apache/catalina/realm/JNDIRealm$User;
            0   19     3  credentials  Ljava/lang/String;
            3   19     4           dn  Ljava/lang/String;
            9   19     5    validated  Z
      Exception table:
        from    to  target  type
           9    13      14  Class javax.naming.AuthenticationException
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      context      
      user         
      credentials  

  private void userCredentialsAdd(javax.naming.directory.DirContext, java.lang.String, java.lang.String);
    descriptor: (Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // java.lang.String dn
        start local 3 // java.lang.String credentials
         0: .line 1887
            aload 1 /* context */
            ldc "java.naming.security.principal"
            aload 2 /* dn */
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 1888
            aload 1 /* context */
            ldc "java.naming.security.credentials"
            aload 3 /* credentials */
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 1889
            return
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String dn
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0    3     1      context  Ljavax/naming/directory/DirContext;
            0    3     2           dn  Ljava/lang/String;
            0    3     3  credentials  Ljava/lang/String;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
             Name  Flags
      context      
      dn           
      credentials  

  private void userCredentialsRemove(javax.naming.directory.DirContext);
    descriptor: (Ljavax/naming/directory/DirContext;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
         0: .line 1902
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
            ifnull 5
         1: .line 1903
            aload 1 /* context */
            ldc "java.naming.security.principal"
         2: .line 1904
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
         3: .line 1903
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 1905
            goto 6
         5: .line 1906
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            ldc "java.naming.security.principal"
            invokeinterface javax.naming.directory.DirContext.removeFromEnvironment:(Ljava/lang/String;)Ljava/lang/Object;
            pop
         6: .line 1909
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
            ifnull 11
         7: .line 1910
            aload 1 /* context */
            ldc "java.naming.security.credentials"
         8: .line 1911
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
         9: .line 1910
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        10: .line 1912
            goto 12
        11: .line 1913
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            ldc "java.naming.security.credentials"
            invokeinterface javax.naming.directory.DirContext.removeFromEnvironment:(Ljava/lang/String;)Ljava/lang/Object;
            pop
        12: .line 1915
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   13     0     this  Lorg/apache/catalina/realm/JNDIRealm;
            0   13     1  context  Ljavax/naming/directory/DirContext;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
         Name  Flags
      context  

  protected java.util.List<java.lang.String> getRoles(org.apache.catalina.realm.JNDIRealm$JNDIConnection, org.apache.catalina.realm.JNDIRealm$User);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Lorg/apache/catalina/realm/JNDIRealm$User;)Ljava/util/List;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=22, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // org.apache.catalina.realm.JNDIRealm$User user
         0: .line 1931
            aload 2 /* user */
            ifnonnull 2
         1: .line 1932
            aconst_null
            areturn
         2: .line 1934
      StackMap locals:
      StackMap stack:
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getDN:()Ljava/lang/String;
            astore 3 /* dn */
        start local 3 // java.lang.String dn
         3: .line 1935
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserName:()Ljava/lang/String;
            astore 4 /* username */
        start local 4 // java.lang.String username
         4: .line 1936
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserRoleId:()Ljava/lang/String;
            astore 5 /* userRoleId */
        start local 5 // java.lang.String userRoleId
         5: .line 1938
            aload 3 /* dn */
            ifnull 6
            aload 4 /* username */
            ifnonnull 7
         6: .line 1939
      StackMap locals: java.lang.String java.lang.String java.lang.String
      StackMap stack:
            aconst_null
            areturn
         7: .line 1941
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 9
         8: .line 1942
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  getRoles("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* dn */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         9: .line 1945
      StackMap locals:
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 6 /* list */
        start local 6 // java.util.List list
        10: .line 1946
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getRoles:()Ljava/util/List;
            astore 7 /* userRoles */
        start local 7 // java.util.List userRoles
        11: .line 1947
            aload 7 /* userRoles */
            ifnull 13
        12: .line 1948
            aload 6 /* list */
            aload 7 /* userRoles */
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
        13: .line 1950
      StackMap locals: java.util.List java.util.List
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.commonRole:Ljava/lang/String;
            ifnull 15
        14: .line 1951
            aload 6 /* list */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.commonRole:Ljava/lang/String;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        15: .line 1953
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 18
        16: .line 1954
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  Found "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* list */
            invokeinterface java.util.List.size:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " user internal roles"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        17: .line 1955
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  Found user internal roles "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* list */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        18: .line 1959
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleFormat:Ljava/text/MessageFormat;
            ifnull 19
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
            ifnonnull 20
        19: .line 1960
      StackMap locals:
      StackMap stack:
            aload 6 /* list */
            areturn
        20: .line 1963
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleFormat:Ljava/text/MessageFormat;
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
            aload 0 /* this */
            aload 3 /* dn */
            invokevirtual org.apache.catalina.realm.JNDIRealm.doRFC2254Encoding:(Ljava/lang/String;)Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* username */
            aastore
            dup
            iconst_2
            aload 5 /* userRoleId */
            aastore
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            astore 8 /* filter */
        start local 8 // java.lang.String filter
        21: .line 1964
            new javax.naming.directory.SearchControls
            dup
            invokespecial javax.naming.directory.SearchControls.<init>:()V
            astore 9 /* controls */
        start local 9 // javax.naming.directory.SearchControls controls
        22: .line 1965
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSubtree:Z
            ifeq 24
        23: .line 1966
            aload 9 /* controls */
            iconst_2
            invokevirtual javax.naming.directory.SearchControls.setSearchScope:(I)V
            goto 25
        24: .line 1968
      StackMap locals: java.lang.String javax.naming.directory.SearchControls
      StackMap stack:
            aload 9 /* controls */
            iconst_1
            invokevirtual javax.naming.directory.SearchControls.setSearchScope:(I)V
        25: .line 1969
      StackMap locals:
      StackMap stack:
            aload 9 /* controls */
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
            aastore
            invokevirtual javax.naming.directory.SearchControls.setReturningAttributes:([Ljava/lang/String;)V
        26: .line 1971
            aconst_null
            astore 10 /* base */
        start local 10 // java.lang.String base
        27: .line 1972
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleBaseFormat:Ljava/text/MessageFormat;
            ifnull 38
        28: .line 1973
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            ldc ""
            invokeinterface javax.naming.directory.DirContext.getNameParser:(Ljava/lang/String;)Ljavax/naming/NameParser;
            astore 11 /* np */
        start local 11 // javax.naming.NameParser np
        29: .line 1974
            aload 11 /* np */
            aload 3 /* dn */
            invokeinterface javax.naming.NameParser.parse:(Ljava/lang/String;)Ljavax/naming/Name;
            astore 12 /* name */
        start local 12 // javax.naming.Name name
        30: .line 1975
            aload 12 /* name */
            invokeinterface javax.naming.Name.size:()I
            anewarray java.lang.String
            astore 13 /* nameParts */
        start local 13 // java.lang.String[] nameParts
        31: .line 1976
            iconst_0
            istore 14 /* i */
        start local 14 // int i
        32: goto 35
        33: .line 1977
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NameParser javax.naming.Name java.lang.String[] int
      StackMap stack:
            aload 13 /* nameParts */
            iload 14 /* i */
            aload 12 /* name */
            iload 14 /* i */
            invokeinterface javax.naming.Name.get:(I)Ljava/lang/String;
            aastore
        34: .line 1976
            iinc 14 /* i */ 1
      StackMap locals:
      StackMap stack:
        35: iload 14 /* i */
            aload 12 /* name */
            invokeinterface javax.naming.Name.size:()I
            if_icmplt 33
        end local 14 // int i
        36: .line 1979
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleBaseFormat:Ljava/text/MessageFormat;
            aload 13 /* nameParts */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            astore 10 /* base */
        end local 13 // java.lang.String[] nameParts
        end local 12 // javax.naming.Name name
        end local 11 // javax.naming.NameParser np
        37: .line 1980
            goto 39
        38: .line 1981
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String
      StackMap stack:
            ldc ""
            astore 10 /* base */
        39: .line 1985
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 2 /* user */
            aload 10 /* base */
            aload 8 /* filter */
            aload 9 /* controls */
        40: .line 1986
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isRoleSearchAsUser:()Z
        41: .line 1985
            invokevirtual org.apache.catalina.realm.JNDIRealm.searchAsUser:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;Z)Ljavax/naming/NamingEnumeration;
            astore 11 /* results */
        start local 11 // javax.naming.NamingEnumeration results
        42: .line 1988
            aload 11 /* results */
            ifnonnull 44
        43: .line 1989
            aload 6 /* list */
            areturn
        44: .line 1991
      StackMap locals: javax.naming.NamingEnumeration
      StackMap stack:
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 12 /* groupMap */
        start local 12 // java.util.Map groupMap
        45: .line 1993
            goto 54
        46: .line 1994
      StackMap locals: java.util.Map
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.next:()Ljava/lang/Object;
            checkcast javax.naming.directory.SearchResult
            astore 13 /* result */
        start local 13 // javax.naming.directory.SearchResult result
        47: .line 1995
            aload 13 /* result */
            invokevirtual javax.naming.directory.SearchResult.getAttributes:()Ljavax/naming/directory/Attributes;
            astore 14 /* attrs */
        start local 14 // javax.naming.directory.Attributes attrs
        48: .line 1996
            aload 14 /* attrs */
            ifnonnull 50
        49: .line 1997
            goto 54
        50: .line 1998
      StackMap locals: javax.naming.directory.SearchResult javax.naming.directory.Attributes
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            aload 13 /* result */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getDistinguishedName:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljavax/naming/directory/SearchResult;)Ljava/lang/String;
            astore 15 /* dname */
        start local 15 // java.lang.String dname
        51: .line 1999
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
            aload 14 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 16 /* name */
        start local 16 // java.lang.String name
        52: .line 2000
            aload 16 /* name */
            ifnull 54
            aload 15 /* dname */
            ifnull 54
        53: .line 2001
            aload 12 /* groupMap */
            aload 15 /* dname */
            aload 16 /* name */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 16 // java.lang.String name
        end local 15 // java.lang.String dname
        end local 14 // javax.naming.directory.Attributes attrs
        end local 13 // javax.naming.directory.SearchResult result
        54: .line 1993
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.hasMore:()Z
            ifne 46
        55: .line 2004
            goto 63
      StackMap locals:
      StackMap stack: javax.naming.PartialResultException
        56: astore 13 /* ex */
        start local 13 // javax.naming.PartialResultException ex
        57: .line 2005
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ifne 59
        58: .line 2006
            aload 13 /* ex */
            athrow
        end local 13 // javax.naming.PartialResultException ex
        59: .line 2008
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
            goto 64
        60: .line 2007
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 17
        61: .line 2008
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        62: .line 2009
            aload 17
            athrow
        63: .line 2008
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        64: .line 2011
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 71
        65: .line 2012
            aload 12 /* groupMap */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            astore 13 /* entries */
        start local 13 // java.util.Set entries
        66: .line 2013
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  Found "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 13 /* entries */
            invokeinterface java.util.Set.size:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " direct roles"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        67: .line 2014
            aload 13 /* entries */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 15
            goto 70
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map java.util.Set top java.util.Iterator
      StackMap stack:
        68: aload 15
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 14 /* entry */
        start local 14 // java.util.Map$Entry entry
        69: .line 2015
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  Found direct role "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 14 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " -> "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 14 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        end local 14 // java.util.Map$Entry entry
        70: .line 2014
      StackMap locals:
      StackMap stack:
            aload 15
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 68
        end local 13 // java.util.Set entries
        71: .line 2020
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getRoleNested:()Z
            ifeq 110
        72: .line 2026
            new java.util.HashMap
            dup
            aload 12 /* groupMap */
            invokespecial java.util.HashMap.<init>:(Ljava/util/Map;)V
            astore 13 /* newGroups */
        start local 13 // java.util.Map newGroups
        73: .line 2027
            goto 109
        74: .line 2028
      StackMap locals: java.util.Map
      StackMap stack:
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 14 /* newThisRound */
        start local 14 // java.util.Map newThisRound
        75: .line 2030
            aload 13 /* newGroups */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 16
            goto 107
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map java.util.Map java.util.Map top java.util.Iterator
      StackMap stack:
        76: aload 16
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 15 /* group */
        start local 15 // java.util.Map$Entry group
        77: .line 2031
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleFormat:Ljava/text/MessageFormat;
            iconst_3
            anewarray java.lang.String
            dup
            iconst_0
            aload 0 /* this */
            aload 15 /* group */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual org.apache.catalina.realm.JNDIRealm.doRFC2254Encoding:(Ljava/lang/String;)Ljava/lang/String;
            aastore
            dup
            iconst_1
        78: .line 2032
            aload 15 /* group */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.String
            aastore
            dup
            iconst_2
            aload 15 /* group */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.String
            aastore
        79: .line 2031
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            astore 8 /* filter */
        80: .line 2034
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 82
        81: .line 2035
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Perform a nested group search with base "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " and filter "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 8 /* filter */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        82: .line 2038
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map java.util.Map java.util.Map java.util.Map$Entry java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 2 /* user */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            aload 8 /* filter */
            aload 9 /* controls */
        83: .line 2039
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isRoleSearchAsUser:()Z
        84: .line 2038
            invokevirtual org.apache.catalina.realm.JNDIRealm.searchAsUser:(Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;Z)Ljavax/naming/NamingEnumeration;
            astore 11 /* results */
        85: .line 2042
            goto 97
        86: .line 2043
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.next:()Ljava/lang/Object;
            checkcast javax.naming.directory.SearchResult
            astore 17 /* result */
        start local 17 // javax.naming.directory.SearchResult result
        87: .line 2044
            aload 17 /* result */
            invokevirtual javax.naming.directory.SearchResult.getAttributes:()Ljavax/naming/directory/Attributes;
            astore 18 /* attrs */
        start local 18 // javax.naming.directory.Attributes attrs
        88: .line 2045
            aload 18 /* attrs */
            ifnonnull 90
        89: .line 2046
            goto 97
        90: .line 2047
      StackMap locals: javax.naming.directory.SearchResult javax.naming.directory.Attributes
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            aload 17 /* result */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getDistinguishedName:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljavax/naming/directory/SearchResult;)Ljava/lang/String;
            astore 19 /* dname */
        start local 19 // java.lang.String dname
        91: .line 2048
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleName:Ljava/lang/String;
            aload 18 /* attrs */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getAttributeValue:(Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
            astore 20 /* name */
        start local 20 // java.lang.String name
        92: .line 2049
            aload 20 /* name */
            ifnull 97
            aload 19 /* dname */
            ifnull 97
            aload 12 /* groupMap */
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            aload 19 /* dname */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifne 97
        93: .line 2050
            aload 12 /* groupMap */
            aload 19 /* dname */
            aload 20 /* name */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        94: .line 2051
            aload 14 /* newThisRound */
            aload 19 /* dname */
            aload 20 /* name */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        95: .line 2053
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 97
        96: .line 2054
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  Found nested role "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 19 /* dname */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " -> "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 20 /* name */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        end local 20 // java.lang.String name
        end local 19 // java.lang.String dname
        end local 18 // javax.naming.directory.Attributes attrs
        end local 17 // javax.naming.directory.SearchResult result
        97: .line 2042
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.hasMore:()Z
            ifne 86
        98: .line 2059
            goto 106
      StackMap locals:
      StackMap stack: javax.naming.PartialResultException
        99: astore 17 /* ex */
        start local 17 // javax.naming.PartialResultException ex
       100: .line 2060
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ifne 102
       101: .line 2061
            aload 17 /* ex */
            athrow
        end local 17 // javax.naming.PartialResultException ex
       102: .line 2063
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
            goto 107
       103: .line 2062
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 21
       104: .line 2063
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
       105: .line 2064
            aload 21
            athrow
       106: .line 2063
      StackMap locals:
      StackMap stack:
            aload 11 /* results */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        end local 15 // java.util.Map$Entry group
       107: .line 2030
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map java.util.Map java.util.Map top java.util.Iterator
      StackMap stack:
            aload 16
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 76
       108: .line 2067
            aload 14 /* newThisRound */
            astore 13 /* newGroups */
        end local 14 // java.util.Map newThisRound
       109: .line 2027
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String java.lang.String java.util.List java.util.List java.lang.String javax.naming.directory.SearchControls java.lang.String javax.naming.NamingEnumeration java.util.Map java.util.Map
      StackMap stack:
            aload 13 /* newGroups */
            invokeinterface java.util.Map.isEmpty:()Z
            ifeq 74
        end local 13 // java.util.Map newGroups
       110: .line 2071
      StackMap locals:
      StackMap stack:
            aload 6 /* list */
            aload 12 /* groupMap */
            invokeinterface java.util.Map.values:()Ljava/util/Collection;
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
       111: .line 2072
            aload 6 /* list */
            areturn
        end local 12 // java.util.Map groupMap
        end local 11 // javax.naming.NamingEnumeration results
        end local 10 // java.lang.String base
        end local 9 // javax.naming.directory.SearchControls controls
        end local 8 // java.lang.String filter
        end local 7 // java.util.List userRoles
        end local 6 // java.util.List list
        end local 5 // java.lang.String userRoleId
        end local 4 // java.lang.String username
        end local 3 // java.lang.String dn
        end local 2 // org.apache.catalina.realm.JNDIRealm$User user
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0  112     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0  112     1    connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0  112     2          user  Lorg/apache/catalina/realm/JNDIRealm$User;
            3  112     3            dn  Ljava/lang/String;
            4  112     4      username  Ljava/lang/String;
            5  112     5    userRoleId  Ljava/lang/String;
           10  112     6          list  Ljava/util/List<Ljava/lang/String;>;
           11  112     7     userRoles  Ljava/util/List<Ljava/lang/String;>;
           21  112     8        filter  Ljava/lang/String;
           22  112     9      controls  Ljavax/naming/directory/SearchControls;
           27  112    10          base  Ljava/lang/String;
           29   37    11            np  Ljavax/naming/NameParser;
           30   37    12          name  Ljavax/naming/Name;
           31   37    13     nameParts  [Ljava/lang/String;
           32   36    14             i  I
           42  112    11       results  Ljavax/naming/NamingEnumeration<Ljavax/naming/directory/SearchResult;>;
           45  112    12      groupMap  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
           47   54    13        result  Ljavax/naming/directory/SearchResult;
           48   54    14         attrs  Ljavax/naming/directory/Attributes;
           51   54    15         dname  Ljava/lang/String;
           52   54    16          name  Ljava/lang/String;
           57   59    13            ex  Ljavax/naming/PartialResultException;
           66   71    13       entries  Ljava/util/Set<Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;>;
           69   70    14         entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;
           73  110    13     newGroups  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
           75  109    14  newThisRound  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
           77  107    15         group  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;
           87   97    17        result  Ljavax/naming/directory/SearchResult;
           88   97    18         attrs  Ljavax/naming/directory/Attributes;
           91   97    19         dname  Ljava/lang/String;
           92   97    20          name  Ljava/lang/String;
          100  102    17            ex  Ljavax/naming/PartialResultException;
      Exception table:
        from    to  target  type
          45    55      56  Class javax.naming.PartialResultException
          45    59      60  any
          85    98      99  Class javax.naming.PartialResultException
          85   102     103  any
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Lorg/apache/catalina/realm/JNDIRealm$User;)Ljava/util/List<Ljava/lang/String;>;
    MethodParameters:
            Name  Flags
      connection  
      user        

  private javax.naming.NamingEnumeration<javax.naming.directory.SearchResult> searchAsUser(javax.naming.directory.DirContext, org.apache.catalina.realm.JNDIRealm$User, java.lang.String, java.lang.String, javax.naming.directory.SearchControls, boolean);
    descriptor: (Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;Z)Ljavax/naming/NamingEnumeration;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=9, args_size=7
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // org.apache.catalina.realm.JNDIRealm$User user
        start local 3 // java.lang.String base
        start local 4 // java.lang.String filter
        start local 5 // javax.naming.directory.SearchControls controls
        start local 6 // boolean searchAsUser
         0: .line 2102
            iload 6 /* searchAsUser */
            ifeq 2
         1: .line 2103
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getDN:()Ljava/lang/String;
            aload 2 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getPassword:()Ljava/lang/String;
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsAdd:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/lang/String;)V
         2: .line 2105
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            aload 3 /* base */
            aload 4 /* filter */
            aload 5 /* controls */
            invokeinterface javax.naming.directory.DirContext.search:(Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;)Ljavax/naming/NamingEnumeration;
            astore 7 /* results */
        start local 7 // javax.naming.NamingEnumeration results
         3: .line 2106
            goto 8
        end local 7 // javax.naming.NamingEnumeration results
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 8
         5: .line 2107
            iload 6 /* searchAsUser */
            ifeq 7
         6: .line 2108
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
         7: .line 2110
      StackMap locals: org.apache.catalina.realm.JNDIRealm javax.naming.directory.DirContext org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String javax.naming.directory.SearchControls int top java.lang.Throwable
      StackMap stack:
            aload 8
            athrow
        start local 7 // javax.naming.NamingEnumeration results
         8: .line 2107
      StackMap locals: org.apache.catalina.realm.JNDIRealm javax.naming.directory.DirContext org.apache.catalina.realm.JNDIRealm$User java.lang.String java.lang.String javax.naming.directory.SearchControls int javax.naming.NamingEnumeration
      StackMap stack:
            iload 6 /* searchAsUser */
            ifeq 10
         9: .line 2108
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.apache.catalina.realm.JNDIRealm.userCredentialsRemove:(Ljavax/naming/directory/DirContext;)V
        10: .line 2111
      StackMap locals:
      StackMap stack:
            aload 7 /* results */
            areturn
        end local 7 // javax.naming.NamingEnumeration results
        end local 6 // boolean searchAsUser
        end local 5 // javax.naming.directory.SearchControls controls
        end local 4 // java.lang.String filter
        end local 3 // java.lang.String base
        end local 2 // org.apache.catalina.realm.JNDIRealm$User user
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   11     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0   11     1       context  Ljavax/naming/directory/DirContext;
            0   11     2          user  Lorg/apache/catalina/realm/JNDIRealm$User;
            0   11     3          base  Ljava/lang/String;
            0   11     4        filter  Ljava/lang/String;
            0   11     5      controls  Ljavax/naming/directory/SearchControls;
            0   11     6  searchAsUser  Z
            3    4     7       results  Ljavax/naming/NamingEnumeration<Ljavax/naming/directory/SearchResult;>;
            8   11     7       results  Ljavax/naming/NamingEnumeration<Ljavax/naming/directory/SearchResult;>;
      Exception table:
        from    to  target  type
           0     4       4  any
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Ljavax/naming/directory/DirContext;Lorg/apache/catalina/realm/JNDIRealm$User;Ljava/lang/String;Ljava/lang/String;Ljavax/naming/directory/SearchControls;Z)Ljavax/naming/NamingEnumeration<Ljavax/naming/directory/SearchResult;>;
    MethodParameters:
              Name  Flags
      context       
      user          
      base          
      filter        
      controls      
      searchAsUser  

  private java.lang.String getAttributeValue(java.lang.String, javax.naming.directory.Attributes);
    descriptor: (Ljava/lang/String;Ljavax/naming/directory/Attributes;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String attrId
        start local 2 // javax.naming.directory.Attributes attrs
         0: .line 2126
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 2127
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  retrieving attribute "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* attrId */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 2129
      StackMap locals:
      StackMap stack:
            aload 1 /* attrId */
            ifnull 3
            aload 2 /* attrs */
            ifnonnull 4
         3: .line 2130
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         4: .line 2132
      StackMap locals:
      StackMap stack:
            aload 2 /* attrs */
            aload 1 /* attrId */
            invokeinterface javax.naming.directory.Attributes.get:(Ljava/lang/String;)Ljavax/naming/directory/Attribute;
            astore 3 /* attr */
        start local 3 // javax.naming.directory.Attribute attr
         5: .line 2133
            aload 3 /* attr */
            ifnonnull 7
         6: .line 2134
            aconst_null
            areturn
         7: .line 2135
      StackMap locals: javax.naming.directory.Attribute
      StackMap stack:
            aload 3 /* attr */
            invokeinterface javax.naming.directory.Attribute.get:()Ljava/lang/Object;
            astore 4 /* value */
        start local 4 // java.lang.Object value
         8: .line 2136
            aload 4 /* value */
            ifnonnull 10
         9: .line 2137
            aconst_null
            areturn
        10: .line 2138
      StackMap locals: java.lang.Object
      StackMap stack:
            aconst_null
            astore 5 /* valueString */
        start local 5 // java.lang.String valueString
        11: .line 2139
            aload 4 /* value */
            instanceof byte[]
            ifeq 13
        12: .line 2140
            new java.lang.String
            dup
            aload 4 /* value */
            checkcast byte[]
            invokespecial java.lang.String.<init>:([B)V
            astore 5 /* valueString */
            goto 14
        13: .line 2142
      StackMap locals: java.lang.String
      StackMap stack:
            aload 4 /* value */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            astore 5 /* valueString */
        14: .line 2144
      StackMap locals:
      StackMap stack:
            aload 5 /* valueString */
            areturn
        end local 5 // java.lang.String valueString
        end local 4 // java.lang.Object value
        end local 3 // javax.naming.directory.Attribute attr
        end local 2 // javax.naming.directory.Attributes attrs
        end local 1 // java.lang.String attrId
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Lorg/apache/catalina/realm/JNDIRealm;
            0   15     1       attrId  Ljava/lang/String;
            0   15     2        attrs  Ljavax/naming/directory/Attributes;
            5   15     3         attr  Ljavax/naming/directory/Attribute;
            8   15     4        value  Ljava/lang/Object;
           11   15     5  valueString  Ljava/lang/String;
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
        Name  Flags
      attrId  
      attrs   

  private java.util.ArrayList<java.lang.String> addAttributeValues(java.lang.String, javax.naming.directory.Attributes, java.util.ArrayList<java.lang.String>);
    descriptor: (Ljava/lang/String;Ljavax/naming/directory/Attributes;Ljava/util/ArrayList;)Ljava/util/ArrayList;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=8, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String attrId
        start local 2 // javax.naming.directory.Attributes attrs
        start local 3 // java.util.ArrayList values
         0: .line 2162
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 2
         1: .line 2163
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  retrieving values for attribute "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* attrId */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         2: .line 2164
      StackMap locals:
      StackMap stack:
            aload 1 /* attrId */
            ifnull 3
            aload 2 /* attrs */
            ifnonnull 4
         3: .line 2165
      StackMap locals:
      StackMap stack:
            aload 3 /* values */
            areturn
         4: .line 2166
      StackMap locals:
      StackMap stack:
            aload 3 /* values */
            ifnonnull 6
         5: .line 2167
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* values */
         6: .line 2168
      StackMap locals:
      StackMap stack:
            aload 2 /* attrs */
            aload 1 /* attrId */
            invokeinterface javax.naming.directory.Attributes.get:(Ljava/lang/String;)Ljavax/naming/directory/Attribute;
            astore 4 /* attr */
        start local 4 // javax.naming.directory.Attribute attr
         7: .line 2169
            aload 4 /* attr */
            ifnonnull 9
         8: .line 2170
            aload 3 /* values */
            areturn
         9: .line 2171
      StackMap locals: javax.naming.directory.Attribute
      StackMap stack:
            aload 4 /* attr */
            invokeinterface javax.naming.directory.Attribute.getAll:()Ljavax/naming/NamingEnumeration;
            astore 5 /* e */
        start local 5 // javax.naming.NamingEnumeration e
        10: .line 2173
            goto 13
        11: .line 2174
      StackMap locals: javax.naming.NamingEnumeration
      StackMap stack:
            aload 5 /* e */
            invokeinterface javax.naming.NamingEnumeration.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* value */
        start local 6 // java.lang.String value
        12: .line 2175
            aload 3 /* values */
            aload 6 /* value */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // java.lang.String value
        13: .line 2173
      StackMap locals:
      StackMap stack:
            aload 5 /* e */
            invokeinterface javax.naming.NamingEnumeration.hasMore:()Z
            ifne 11
        14: .line 2177
            goto 22
      StackMap locals:
      StackMap stack: javax.naming.PartialResultException
        15: astore 6 /* ex */
        start local 6 // javax.naming.PartialResultException ex
        16: .line 2178
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.adCompat:Z
            ifne 18
        17: .line 2179
            aload 6 /* ex */
            athrow
        end local 6 // javax.naming.PartialResultException ex
        18: .line 2181
      StackMap locals:
      StackMap stack:
            aload 5 /* e */
            invokeinterface javax.naming.NamingEnumeration.close:()V
            goto 23
        19: .line 2180
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 7
        20: .line 2181
            aload 5 /* e */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        21: .line 2182
            aload 7
            athrow
        22: .line 2181
      StackMap locals:
      StackMap stack:
            aload 5 /* e */
            invokeinterface javax.naming.NamingEnumeration.close:()V
        23: .line 2183
      StackMap locals:
      StackMap stack:
            aload 3 /* values */
            areturn
        end local 5 // javax.naming.NamingEnumeration e
        end local 4 // javax.naming.directory.Attribute attr
        end local 3 // java.util.ArrayList values
        end local 2 // javax.naming.directory.Attributes attrs
        end local 1 // java.lang.String attrId
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   24     0    this  Lorg/apache/catalina/realm/JNDIRealm;
            0   24     1  attrId  Ljava/lang/String;
            0   24     2   attrs  Ljavax/naming/directory/Attributes;
            0   24     3  values  Ljava/util/ArrayList<Ljava/lang/String;>;
            7   24     4    attr  Ljavax/naming/directory/Attribute;
           10   24     5       e  Ljavax/naming/NamingEnumeration<*>;
           12   13     6   value  Ljava/lang/String;
           16   18     6      ex  Ljavax/naming/PartialResultException;
      Exception table:
        from    to  target  type
          10    14      15  Class javax.naming.PartialResultException
          10    18      19  any
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Ljava/lang/String;Ljavax/naming/directory/Attributes;Ljava/util/ArrayList<Ljava/lang/String;>;)Ljava/util/ArrayList<Ljava/lang/String;>;
    MethodParameters:
        Name  Flags
      attrId  
      attrs   
      values  

  protected void close(org.apache.catalina.realm.JNDIRealm$JNDIConnection);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         0: .line 2195
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            ifnonnull 2
         1: .line 2196
            return
         2: .line 2199
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
            ifnull 7
         3: .line 2201
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
            invokevirtual javax.naming.ldap.StartTlsResponse.close:()V
         4: .line 2202
            goto 7
      StackMap locals:
      StackMap stack: java.io.IOException
         5: astore 2 /* e */
        start local 2 // java.io.IOException e
         6: .line 2203
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.tlsClose"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 2 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.io.IOException e
         7: .line 2208
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 9
         8: .line 2209
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "Closing directory context"
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         9: .line 2210
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            invokeinterface javax.naming.directory.DirContext.close:()V
        10: .line 2211
            goto 13
      StackMap locals:
      StackMap stack: javax.naming.NamingException
        11: astore 2 /* e */
        start local 2 // javax.naming.NamingException e
        12: .line 2212
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.close"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 2 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // javax.naming.NamingException e
        13: .line 2214
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
        14: .line 2216
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnonnull 16
        15: .line 2217
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnectionLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        16: .line 2220
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   17     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0   17     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            6    7     2           e  Ljava/io/IOException;
           12   13     2           e  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           3     4       5  Class java.io.IOException
           7    10      11  Class javax.naming.NamingException
    MethodParameters:
            Name  Flags
      connection  

  protected void closePooledConnections();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2226
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnull 10
         1: .line 2228
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            dup
            astore 1
            monitorenter
         2: .line 2229
            aconst_null
            astore 2 /* connection */
        start local 2 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         3: .line 2230
            goto 5
         4: .line 2231
      StackMap locals: org.apache.tomcat.util.collections.SynchronizedStack org.apache.catalina.realm.JNDIRealm$JNDIConnection
      StackMap stack:
            aload 0 /* this */
            aload 2 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
         5: .line 2230
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            invokevirtual org.apache.tomcat.util.collections.SynchronizedStack.pop:()Ljava/lang/Object;
            checkcast org.apache.catalina.realm.JNDIRealm$JNDIConnection
            dup
            astore 2 /* connection */
            ifnonnull 4
        end local 2 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         6: .line 2228
            aload 1
            monitorexit
         7: goto 10
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.tomcat.util.collections.SynchronizedStack
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 2235
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            3    6     2  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
      Exception table:
        from    to  target  type
           2     7       8  any
           8     9       8  any

  protected java.lang.String getPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String username
         0: .line 2244
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUserPassword:()Ljava/lang/String;
            astore 2 /* userPassword */
        start local 2 // java.lang.String userPassword
         1: .line 2245
            aload 2 /* userPassword */
            ifnull 2
            aload 2 /* userPassword */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 3
         2: .line 2246
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            areturn
         3: .line 2249
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* connection */
        start local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         4: .line 2250
            aconst_null
            astore 4 /* user */
        start local 4 // org.apache.catalina.realm.JNDIRealm$User user
         5: .line 2254
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
         6: .line 2259
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aconst_null
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 4 /* user */
         7: .line 2260
            goto 14
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.lang.String java.lang.String org.apache.catalina.realm.JNDIRealm$JNDIConnection org.apache.catalina.realm.JNDIRealm$User
      StackMap stack: java.lang.Exception
         8: astore 5 /* e */
        start local 5 // java.lang.Exception e
         9: .line 2262
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception.retry"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        10: .line 2265
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        11: .line 2266
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.closePooledConnections:()V
        12: .line 2269
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
        13: .line 2272
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aconst_null
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 4 /* user */
        end local 5 // java.lang.Exception e
        14: .line 2277
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        15: .line 2279
            aload 4 /* user */
            ifnonnull 17
        16: .line 2281
            aconst_null
            areturn
        17: .line 2284
      StackMap locals:
      StackMap stack:
            aload 4 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getPassword:()Ljava/lang/String;
        18: areturn
        19: .line 2287
      StackMap locals:
      StackMap stack: javax.naming.NamingException
            astore 5 /* e */
        start local 5 // javax.naming.NamingException e
        20: .line 2289
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        21: .line 2290
            aconst_null
            areturn
        end local 5 // javax.naming.NamingException e
        end local 4 // org.apache.catalina.realm.JNDIRealm$User user
        end local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 2 // java.lang.String userPassword
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   22     0          this  Lorg/apache/catalina/realm/JNDIRealm;
            0   22     1      username  Ljava/lang/String;
            1   22     2  userPassword  Ljava/lang/String;
            4   22     3    connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            5   22     4          user  Lorg/apache/catalina/realm/JNDIRealm$User;
            9   14     5             e  Ljava/lang/Exception;
           20   22     5             e  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           6     7       8  Class java.lang.NullPointerException
           6     7       8  Class javax.naming.NamingException
           5    16      19  Class javax.naming.NamingException
          17    18      19  Class javax.naming.NamingException
    MethodParameters:
          Name  Flags
      username  

  protected java.security.Principal getPrincipal(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String username
         0: .line 2302
            aload 0 /* this */
            aload 1 /* username */
            aconst_null
            invokevirtual org.apache.catalina.realm.JNDIRealm.getPrincipal:(Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
            areturn
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0    1     1  username  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      username  

  protected java.security.Principal getPrincipal(org.ietf.jgss.GSSName, org.ietf.jgss.GSSCredential);
    descriptor: (Lorg/ietf/jgss/GSSName;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.ietf.jgss.GSSName gssName
        start local 2 // org.ietf.jgss.GSSCredential gssCredential
         0: .line 2308
            aload 1 /* gssName */
            invokeinterface org.ietf.jgss.GSSName.toString:()Ljava/lang/String;
            astore 3 /* name */
        start local 3 // java.lang.String name
         1: .line 2310
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isStripRealmForGss:()Z
            ifeq 5
         2: .line 2311
            aload 3 /* name */
            bipush 64
            invokevirtual java.lang.String.indexOf:(I)I
            istore 4 /* i */
        start local 4 // int i
         3: .line 2312
            iload 4 /* i */
            ifle 5
         4: .line 2314
            aload 3 /* name */
            iconst_0
            iload 4 /* i */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 3 /* name */
        end local 4 // int i
         5: .line 2318
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 3 /* name */
            aload 2 /* gssCredential */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getPrincipal:(Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
            areturn
        end local 3 // java.lang.String name
        end local 2 // org.ietf.jgss.GSSCredential gssCredential
        end local 1 // org.ietf.jgss.GSSName gssName
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lorg/apache/catalina/realm/JNDIRealm;
            0    6     1        gssName  Lorg/ietf/jgss/GSSName;
            0    6     2  gssCredential  Lorg/ietf/jgss/GSSCredential;
            1    6     3           name  Ljava/lang/String;
            3    5     4              i  I
    MethodParameters:
               Name  Flags
      gssName        
      gssCredential  

  protected java.security.Principal getPrincipal(java.lang.String, org.ietf.jgss.GSSCredential);
    descriptor: (Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String username
        start local 2 // org.ietf.jgss.GSSCredential gssCredential
         0: .line 2324
            aconst_null
            astore 3 /* connection */
        start local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         1: .line 2325
            aconst_null
            astore 4 /* principal */
        start local 4 // java.security.Principal principal
         2: .line 2330
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
         3: .line 2337
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aload 2 /* gssCredential */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getPrincipal:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
            astore 4 /* principal */
         4: .line 2339
            goto 11
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.lang.String org.ietf.jgss.GSSCredential org.apache.catalina.realm.JNDIRealm$JNDIConnection java.security.Principal
      StackMap stack: javax.naming.NamingException
         5: astore 5 /* e */
        start local 5 // javax.naming.NamingException e
         6: .line 2342
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception.retry"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;Ljava/lang/Throwable;)V
         7: .line 2345
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
         8: .line 2346
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.closePooledConnections:()V
         9: .line 2349
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 3 /* connection */
        10: .line 2352
            aload 0 /* this */
            aload 3 /* connection */
            aload 1 /* username */
            aload 2 /* gssCredential */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getPrincipal:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
            astore 4 /* principal */
        end local 5 // javax.naming.NamingException e
        11: .line 2358
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        12: .line 2361
            aload 4 /* principal */
        13: areturn
        14: .line 2363
      StackMap locals:
      StackMap stack: javax.naming.NamingException
            astore 5 /* e */
        start local 5 // javax.naming.NamingException e
        15: .line 2366
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        16: .line 2369
            aconst_null
            areturn
        end local 5 // javax.naming.NamingException e
        end local 4 // java.security.Principal principal
        end local 3 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 2 // org.ietf.jgss.GSSCredential gssCredential
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   17     0           this  Lorg/apache/catalina/realm/JNDIRealm;
            0   17     1       username  Ljava/lang/String;
            0   17     2  gssCredential  Lorg/ietf/jgss/GSSCredential;
            1   17     3     connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            2   17     4      principal  Ljava/security/Principal;
            6   11     5              e  Ljavax/naming/NamingException;
           15   17     5              e  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           3     4       5  Class javax.naming.CommunicationException
           3     4       5  Class javax.naming.ServiceUnavailableException
           2    13      14  Class javax.naming.NamingException
    MethodParameters:
               Name  Flags
      username       
      gssCredential  

  protected java.security.Principal getPrincipal(org.apache.catalina.realm.JNDIRealm$JNDIConnection, java.lang.String, org.ietf.jgss.GSSCredential);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;Lorg/ietf/jgss/GSSCredential;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=9, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        start local 2 // java.lang.String username
        start local 3 // org.ietf.jgss.GSSCredential gssCredential
         0: .line 2389
            aconst_null
            astore 4 /* user */
        start local 4 // org.apache.catalina.realm.JNDIRealm$User user
         1: .line 2390
            aconst_null
            astore 5 /* roles */
        start local 5 // java.util.List roles
         2: .line 2391
            aconst_null
            astore 6 /* preservedEnvironment */
        start local 6 // java.util.Hashtable preservedEnvironment
         3: .line 2392
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            astore 7 /* context */
        start local 7 // javax.naming.directory.DirContext context
         4: .line 2395
            aload 3 /* gssCredential */
            ifnull 15
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseDelegatedCredential:()Z
            ifeq 15
         5: .line 2397
            aload 7 /* context */
            invokeinterface javax.naming.directory.DirContext.getEnvironment:()Ljava/util/Hashtable;
            astore 6 /* preservedEnvironment */
         6: .line 2399
            aload 7 /* context */
         7: .line 2400
            ldc "java.naming.security.authentication"
            ldc "GSSAPI"
         8: .line 2399
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         9: .line 2401
            aload 7 /* context */
        10: .line 2402
            ldc "javax.security.sasl.server.authentication"
            ldc "true"
        11: .line 2401
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        12: .line 2403
            aload 7 /* context */
        13: .line 2404
            ldc "javax.security.sasl.qop"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.spnegoDelegationQop:Ljava/lang/String;
        14: .line 2403
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        15: .line 2408
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.String org.ietf.jgss.GSSCredential org.apache.catalina.realm.JNDIRealm$User java.util.List java.util.Hashtable javax.naming.directory.DirContext
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* username */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getUser:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Ljava/lang/String;)Lorg/apache/catalina/realm/JNDIRealm$User;
            astore 4 /* user */
        16: .line 2409
            aload 4 /* user */
            ifnull 31
        17: .line 2410
            aload 0 /* this */
            aload 1 /* connection */
            aload 4 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getRoles:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;Lorg/apache/catalina/realm/JNDIRealm$User;)Ljava/util/List;
            astore 5 /* roles */
        18: .line 2412
            goto 31
      StackMap locals:
      StackMap stack: java.lang.Throwable
        19: astore 8
        20: .line 2413
            aload 3 /* gssCredential */
            ifnull 30
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseDelegatedCredential:()Z
            ifeq 30
        21: .line 2414
            aload 0 /* this */
            aload 7 /* context */
        22: .line 2415
            ldc "java.naming.security.authentication"
            aload 6 /* preservedEnvironment */
        23: .line 2414
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        24: .line 2416
            aload 0 /* this */
            aload 7 /* context */
        25: .line 2417
            ldc "javax.security.sasl.server.authentication"
            aload 6 /* preservedEnvironment */
        26: .line 2416
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        27: .line 2418
            aload 0 /* this */
            aload 7 /* context */
            ldc "javax.security.sasl.qop"
        28: .line 2419
            aload 6 /* preservedEnvironment */
        29: .line 2418
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        30: .line 2421
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 8
            athrow
        31: .line 2413
      StackMap locals:
      StackMap stack:
            aload 3 /* gssCredential */
            ifnull 41
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseDelegatedCredential:()Z
            ifeq 41
        32: .line 2414
            aload 0 /* this */
            aload 7 /* context */
        33: .line 2415
            ldc "java.naming.security.authentication"
            aload 6 /* preservedEnvironment */
        34: .line 2414
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        35: .line 2416
            aload 0 /* this */
            aload 7 /* context */
        36: .line 2417
            ldc "javax.security.sasl.server.authentication"
            aload 6 /* preservedEnvironment */
        37: .line 2416
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        38: .line 2418
            aload 0 /* this */
            aload 7 /* context */
            ldc "javax.security.sasl.qop"
        39: .line 2419
            aload 6 /* preservedEnvironment */
        40: .line 2418
            invokevirtual org.apache.catalina.realm.JNDIRealm.restoreEnvironmentParameter:(Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
        41: .line 2423
      StackMap locals:
      StackMap stack:
            aload 4 /* user */
            ifnull 45
        42: .line 2424
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 4 /* user */
            invokevirtual org.apache.catalina.realm.JNDIRealm$User.getUserName:()Ljava/lang/String;
        43: .line 2425
            aload 5 /* roles */
            aconst_null
            aconst_null
            aload 3 /* gssCredential */
        44: .line 2424
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;Ljava/security/Principal;Ljavax/security/auth/login/LoginContext;Lorg/ietf/jgss/GSSCredential;)V
            areturn
        45: .line 2428
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 7 // javax.naming.directory.DirContext context
        end local 6 // java.util.Hashtable preservedEnvironment
        end local 5 // java.util.List roles
        end local 4 // org.apache.catalina.realm.JNDIRealm$User user
        end local 3 // org.ietf.jgss.GSSCredential gssCredential
        end local 2 // java.lang.String username
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   46     0                  this  Lorg/apache/catalina/realm/JNDIRealm;
            0   46     1            connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            0   46     2              username  Ljava/lang/String;
            0   46     3         gssCredential  Lorg/ietf/jgss/GSSCredential;
            1   46     4                  user  Lorg/apache/catalina/realm/JNDIRealm$User;
            2   46     5                 roles  Ljava/util/List<Ljava/lang/String;>;
            3   46     6  preservedEnvironment  Ljava/util/Hashtable<**>;
            4   46     7               context  Ljavax/naming/directory/DirContext;
      Exception table:
        from    to  target  type
           4    19      19  any
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
               Name  Flags
      connection     
      username       
      gssCredential  

  private void restoreEnvironmentParameter(javax.naming.directory.DirContext, java.lang.String, java.util.Hashtable<?, ?>);
    descriptor: (Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // java.lang.String parameterName
        start local 3 // java.util.Hashtable preservedEnvironment
         0: .line 2434
            aload 1 /* context */
            aload 2 /* parameterName */
            invokeinterface javax.naming.directory.DirContext.removeFromEnvironment:(Ljava/lang/String;)Ljava/lang/Object;
            pop
         1: .line 2435
            aload 3 /* preservedEnvironment */
            ifnull 7
            aload 3 /* preservedEnvironment */
            aload 2 /* parameterName */
            invokevirtual java.util.Hashtable.containsKey:(Ljava/lang/Object;)Z
            ifeq 7
         2: .line 2436
            aload 1 /* context */
            aload 2 /* parameterName */
         3: .line 2437
            aload 3 /* preservedEnvironment */
            aload 2 /* parameterName */
            invokevirtual java.util.Hashtable.get:(Ljava/lang/Object;)Ljava/lang/Object;
         4: .line 2436
            invokeinterface javax.naming.directory.DirContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 2439
            goto 7
      StackMap locals:
      StackMap stack: javax.naming.NamingException
         6: pop
         7: .line 2442
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.util.Hashtable preservedEnvironment
        end local 2 // java.lang.String parameterName
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    8     0                  this  Lorg/apache/catalina/realm/JNDIRealm;
            0    8     1               context  Ljavax/naming/directory/DirContext;
            0    8     2         parameterName  Ljava/lang/String;
            0    8     3  preservedEnvironment  Ljava/util/Hashtable<**>;
      Exception table:
        from    to  target  type
           0     5       6  Class javax.naming.NamingException
    Signature: (Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljava/util/Hashtable<**>;)V
    MethodParameters:
                      Name  Flags
      context               
      parameterName         
      preservedEnvironment  

  protected org.apache.catalina.realm.JNDIRealm$JNDIConnection get();
    descriptor: ()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2451
            aconst_null
            astore 1 /* connection */
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         1: .line 2453
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnull 6
         2: .line 2454
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            invokevirtual org.apache.tomcat.util.collections.SynchronizedStack.pop:()Ljava/lang/Object;
            checkcast org.apache.catalina.realm.JNDIRealm$JNDIConnection
            astore 1 /* connection */
         3: .line 2455
            aload 1 /* connection */
            ifnonnull 8
         4: .line 2456
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.create:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 1 /* connection */
         5: .line 2458
            goto 8
         6: .line 2459
      StackMap locals: org.apache.catalina.realm.JNDIRealm$JNDIConnection
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnectionLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
         7: .line 2460
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 1 /* connection */
         8: .line 2462
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            ifnonnull 10
         9: .line 2463
            aload 0 /* this */
            aload 1 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.open:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        10: .line 2465
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            areturn
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            1   11     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
    Exceptions:
      throws javax.naming.NamingException

  protected void release(org.apache.catalina.realm.JNDIRealm$JNDIConnection);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         0: .line 2474
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnull 4
         1: .line 2475
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            aload 1 /* connection */
            invokevirtual org.apache.tomcat.util.collections.SynchronizedStack.push:(Ljava/lang/Object;)Z
            ifne 5
         2: .line 2477
            aload 0 /* this */
            aload 1 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
         3: .line 2479
            goto 5
         4: .line 2480
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnectionLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
         5: .line 2482
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0    6     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
    MethodParameters:
            Name  Flags
      connection  

  protected org.apache.catalina.realm.JNDIRealm$JNDIConnection create();
    descriptor: ()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=4, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2490
            new org.apache.catalina.realm.JNDIRealm$JNDIConnection
            dup
            invokespecial org.apache.catalina.realm.JNDIRealm$JNDIConnection.<init>:()V
            astore 1 /* connection */
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         1: .line 2491
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSearch:Ljava/lang/String;
            ifnull 3
         2: .line 2492
            aload 1 /* connection */
            new java.text.MessageFormat
            dup
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userSearch:Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userSearchFormat:Ljava/text/MessageFormat;
         3: .line 2494
      StackMap locals: org.apache.catalina.realm.JNDIRealm$JNDIConnection
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPattern:Ljava/lang/String;
            ifnull 13
         4: .line 2495
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            arraylength
            istore 2 /* len */
        start local 2 // int len
         5: .line 2496
            aload 1 /* connection */
            iload 2 /* len */
            anewarray java.text.MessageFormat
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userPatternFormatArray:[Ljava/text/MessageFormat;
         6: .line 2497
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         7: goto 12
         8: .line 2498
      StackMap locals: int int
      StackMap stack:
            aload 1 /* connection */
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.userPatternFormatArray:[Ljava/text/MessageFormat;
            iload 3 /* i */
         9: .line 2499
            new java.text.MessageFormat
            dup
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.userPatternArray:[Ljava/lang/String;
            iload 3 /* i */
            aaload
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
        10: .line 2498
            aastore
        11: .line 2497
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        12: iload 3 /* i */
            iload 2 /* len */
            if_icmplt 8
        end local 3 // int i
        end local 2 // int len
        13: .line 2502
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            ifnull 15
        14: .line 2503
            aload 1 /* connection */
            new java.text.MessageFormat
            dup
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleBase:Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleBaseFormat:Ljava/text/MessageFormat;
        15: .line 2505
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSearch:Ljava/lang/String;
            ifnull 17
        16: .line 2506
            aload 1 /* connection */
            new java.text.MessageFormat
            dup
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.roleSearch:Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.roleFormat:Ljava/text/MessageFormat;
        17: .line 2508
      StackMap locals:
      StackMap stack:
            aload 1 /* connection */
            areturn
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   18     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            1   18     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            5   13     2         len  I
            7   13     3           i  I

  protected void open(org.apache.catalina.realm.JNDIRealm$JNDIConnection);
    descriptor: (Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         0: .line 2517
            aconst_null
            astore 2 /* ocl */
        start local 2 // java.lang.ClassLoader ocl
         1: .line 2519
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseContextClassLoader:()Z
            ifne 4
         2: .line 2520
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 2 /* ocl */
         3: .line 2521
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getClassLoader:()Ljava/lang/ClassLoader;
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
         4: .line 2524
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            aload 1 /* connection */
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getDirectoryContextEnvironment:()Ljava/util/Hashtable;
            invokevirtual org.apache.catalina.realm.JNDIRealm.createDirContext:(Ljava/util/Hashtable;)Ljavax/naming/directory/DirContext;
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
         5: .line 2525
            goto 20
      StackMap locals:
      StackMap stack: java.lang.Exception
         6: astore 3 /* e */
        start local 3 // java.lang.Exception e
         7: .line 2526
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            ifnull 8
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            ifne 9
         8: .line 2528
      StackMap locals: java.lang.Exception
      StackMap stack:
            aload 3 /* e */
            athrow
         9: .line 2530
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
        10: .line 2532
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.exception.retry"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 3 /* e */
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        11: .line 2534
            aload 1 /* connection */
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getDirectoryContextEnvironment:()Ljava/util/Hashtable;
            invokevirtual org.apache.catalina.realm.JNDIRealm.createDirContext:(Ljava/util/Hashtable;)Ljavax/naming/directory/DirContext;
            putfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
        end local 3 // java.lang.Exception e
        12: .line 2538
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
        13: .line 2539
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseContextClassLoader:()Z
            ifne 23
        14: .line 2540
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 2 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
            goto 23
        15: .line 2535
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.ClassLoader
      StackMap stack: java.lang.Throwable
            astore 4
        16: .line 2538
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
        17: .line 2539
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseContextClassLoader:()Z
            ifne 19
        18: .line 2540
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 2 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        19: .line 2542
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.ClassLoader top java.lang.Throwable
      StackMap stack:
            aload 4
            athrow
        20: .line 2538
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection java.lang.ClassLoader
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
        21: .line 2539
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.isUseContextClassLoader:()Z
            ifne 23
        22: .line 2540
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 2 /* ocl */
            invokevirtual java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
        23: .line 2543
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.ClassLoader ocl
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   24     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0   24     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            1   24     2         ocl  Ljava/lang/ClassLoader;
            7   12     3           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           1     5       6  Class java.lang.Exception
           1    12      15  any
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
            Name  Flags
      connection  

  public boolean isAvailable();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2548
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnonnull 1
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            getfield org.apache.catalina.realm.JNDIRealm$JNDIConnection.context:Ljavax/naming/directory/DirContext;
            ifnonnull 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/realm/JNDIRealm;

  private javax.naming.directory.DirContext createDirContext(java.util.Hashtable<java.lang.String, java.lang.String>);
    descriptor: (Ljava/util/Hashtable;)Ljavax/naming/directory/DirContext;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.util.Hashtable env
         0: .line 2552
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.useStartTls:Z
            ifeq 2
         1: .line 2553
            aload 0 /* this */
            aload 1 /* env */
            invokevirtual org.apache.catalina.realm.JNDIRealm.createTlsDirContext:(Ljava/util/Hashtable;)Ljavax/naming/directory/DirContext;
            areturn
         2: .line 2555
      StackMap locals:
      StackMap stack:
            new javax.naming.directory.InitialDirContext
            dup
            aload 1 /* env */
            invokespecial javax.naming.directory.InitialDirContext.<init>:(Ljava/util/Hashtable;)V
            areturn
        end local 1 // java.util.Hashtable env
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/catalina/realm/JNDIRealm;
            0    3     1   env  Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)Ljavax/naming/directory/DirContext;
    MethodParameters:
      Name  Flags
      env   

  private javax.net.ssl.SSLSocketFactory getSSLSocketFactory();
    descriptor: ()Ljavax/net/ssl/SSLSocketFactory;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2560
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
            ifnull 2
         1: .line 2561
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
            areturn
         2: .line 2564
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactoryClassName:Ljava/lang/String;
            ifnull 6
         3: .line 2565
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactoryClassName:Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            ldc ""
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
         4: .line 2566
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactoryClassName:Ljava/lang/String;
            invokevirtual org.apache.catalina.realm.JNDIRealm.createSSLSocketFactoryFromClassName:(Ljava/lang/String;)Ljavax/net/ssl/SSLSocketFactory;
            astore 1 /* result */
        start local 1 // javax.net.ssl.SSLSocketFactory result
         5: .line 2567
            goto 7
        end local 1 // javax.net.ssl.SSLSocketFactory result
         6: .line 2568
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslProtocol:Ljava/lang/String;
            invokevirtual org.apache.catalina.realm.JNDIRealm.createSSLContextFactoryFromProtocol:(Ljava/lang/String;)Ljavax/net/ssl/SSLSocketFactory;
            astore 1 /* result */
        start local 1 // javax.net.ssl.SSLSocketFactory result
         7: .line 2570
      StackMap locals: javax.net.ssl.SSLSocketFactory
      StackMap stack:
            aload 0 /* this */
            aload 1 /* result */
            putfield org.apache.catalina.realm.JNDIRealm.sslSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
         8: .line 2571
            aload 1 /* result */
            areturn
        end local 1 // javax.net.ssl.SSLSocketFactory result
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Lorg/apache/catalina/realm/JNDIRealm;
            5    6     1  result  Ljavax/net/ssl/SSLSocketFactory;
            7    9     1  result  Ljavax/net/ssl/SSLSocketFactory;

  private javax.net.ssl.SSLSocketFactory createSSLSocketFactoryFromClassName(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljavax/net/ssl/SSLSocketFactory;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String className
         0: .line 2576
            aload 0 /* this */
            aload 1 /* className */
            invokevirtual org.apache.catalina.realm.JNDIRealm.constructInstance:(Ljava/lang/String;)Ljava/lang/Object;
            astore 2 /* o */
        start local 2 // java.lang.Object o
         1: .line 2577
            aload 2 /* o */
            instanceof javax.net.ssl.SSLSocketFactory
            ifeq 4
         2: .line 2578
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.sslSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
         3: areturn
         4: .line 2580
      StackMap locals: java.lang.Object
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
         5: .line 2581
            ldc "jndiRealm.invalidSslSocketFactory"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         6: .line 2582
            aload 1 /* className */
            aastore
         7: .line 2580
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.lang.Object o
         8: .line 2584
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.lang.String
      StackMap stack: java.lang.Exception
            astore 2 /* e */
        start local 2 // java.lang.Exception e
         9: .line 2585
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
        10: .line 2586
            ldc "jndiRealm.invalidSslSocketFactory"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        11: .line 2587
            aload 1 /* className */
            aastore
        12: .line 2585
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        13: .line 2587
            aload 2 /* e */
        14: .line 2585
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.Exception e
        end local 1 // java.lang.String className
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   15     0       this  Lorg/apache/catalina/realm/JNDIRealm;
            0   15     1  className  Ljava/lang/String;
            1    8     2          o  Ljava/lang/Object;
            9   15     2          e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0     3       8  Class java.lang.ReflectiveOperationException
           4     8       8  Class java.lang.ReflectiveOperationException
           0     3       8  Class java.lang.SecurityException
           4     8       8  Class java.lang.SecurityException
    MethodParameters:
           Name  Flags
      className  

  private javax.net.ssl.SSLSocketFactory createSSLContextFactoryFromProtocol(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljavax/net/ssl/SSLSocketFactory;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=4, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String protocol
         0: .line 2594
            aload 1 /* protocol */
            ifnull 4
         1: .line 2595
            aload 1 /* protocol */
            invokestatic javax.net.ssl.SSLContext.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
            astore 2 /* sslContext */
        start local 2 // javax.net.ssl.SSLContext sslContext
         2: .line 2596
            aload 2 /* sslContext */
            aconst_null
            aconst_null
            aconst_null
            invokevirtual javax.net.ssl.SSLContext.init:([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
         3: .line 2597
            goto 5
        end local 2 // javax.net.ssl.SSLContext sslContext
         4: .line 2598
      StackMap locals:
      StackMap stack:
            invokestatic javax.net.ssl.SSLContext.getDefault:()Ljavax/net/ssl/SSLContext;
            astore 2 /* sslContext */
        start local 2 // javax.net.ssl.SSLContext sslContext
         5: .line 2600
      StackMap locals: javax.net.ssl.SSLContext
      StackMap stack:
            aload 2 /* sslContext */
            invokevirtual javax.net.ssl.SSLContext.getSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
         6: areturn
        end local 2 // javax.net.ssl.SSLContext sslContext
         7: .line 2601
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.lang.String
      StackMap stack: java.security.GeneralSecurityException
            astore 2 /* e */
        start local 2 // java.security.GeneralSecurityException e
         8: .line 2603
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getSupportedSslProtocols:()[Ljava/lang/String;
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
         9: .line 2602
            astore 3 /* allowedProtocols */
        start local 3 // java.util.List allowedProtocols
        10: .line 2604
            new java.lang.IllegalArgumentException
            dup
        11: .line 2605
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.invalidSslProtocol"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* protocol */
            aastore
            dup
            iconst_1
        12: .line 2606
            aload 3 /* allowedProtocols */
            aastore
        13: .line 2605
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        14: .line 2606
            aload 2 /* e */
        15: .line 2604
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.util.List allowedProtocols
        end local 2 // java.security.GeneralSecurityException e
        end local 1 // java.lang.String protocol
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   16     0              this  Lorg/apache/catalina/realm/JNDIRealm;
            0   16     1          protocol  Ljava/lang/String;
            2    4     2        sslContext  Ljavax/net/ssl/SSLContext;
            5    7     2        sslContext  Ljavax/net/ssl/SSLContext;
            8   16     2                 e  Ljava/security/GeneralSecurityException;
           10   16     3  allowedProtocols  Ljava/util/List<Ljava/lang/String;>;
      Exception table:
        from    to  target  type
           0     6       7  Class java.security.NoSuchAlgorithmException
           0     6       7  Class java.security.KeyManagementException
    MethodParameters:
          Name  Flags
      protocol  

  private javax.naming.directory.DirContext createTlsDirContext(java.util.Hashtable<java.lang.String, java.lang.String>);
    descriptor: (Ljava/util/Hashtable;)Ljavax/naming/directory/DirContext;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=8, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.util.Hashtable env
         0: .line 2622
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 2 /* savedEnv */
        start local 2 // java.util.Map savedEnv
         1: .line 2623
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
            ldc "java.naming.security.authentication"
            aastore
            dup
            iconst_1
         2: .line 2624
            ldc "java.naming.security.credentials"
            aastore
            dup
            iconst_2
            ldc "java.naming.security.principal"
            aastore
            dup
            iconst_3
         3: .line 2625
            ldc "java.naming.security.protocol"
            aastore
         4: .line 2623
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 9
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map top java.util.Iterator
      StackMap stack:
         5: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* key */
        start local 3 // java.lang.String key
         6: .line 2626
            aload 1 /* env */
            aload 3 /* key */
            invokevirtual java.util.Hashtable.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* entry */
        start local 5 // java.lang.Object entry
         7: .line 2627
            aload 5 /* entry */
            ifnull 9
         8: .line 2628
            aload 2 /* savedEnv */
            aload 3 /* key */
            aload 5 /* entry */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 5 // java.lang.Object entry
        end local 3 // java.lang.String key
         9: .line 2623
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 5
        10: .line 2631
            aconst_null
            astore 3 /* result */
        start local 3 // javax.naming.ldap.LdapContext result
        11: .line 2633
            new javax.naming.ldap.InitialLdapContext
            dup
            aload 1 /* env */
            aconst_null
            invokespecial javax.naming.ldap.InitialLdapContext.<init>:(Ljava/util/Hashtable;[Ljavax/naming/ldap/Control;)V
            astore 3 /* result */
        12: .line 2634
            aload 0 /* this */
            aload 3 /* result */
        13: .line 2635
            new javax.naming.ldap.StartTlsRequest
            dup
            invokespecial javax.naming.ldap.StartTlsRequest.<init>:()V
            invokeinterface javax.naming.ldap.LdapContext.extendedOperation:(Ljavax/naming/ldap/ExtendedRequest;)Ljavax/naming/ldap/ExtendedResponse;
            checkcast javax.naming.ldap.StartTlsResponse
        14: .line 2634
            putfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
        15: .line 2636
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getHostnameVerifier:()Ljavax/net/ssl/HostnameVerifier;
            ifnull 17
        16: .line 2637
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getHostnameVerifier:()Ljavax/net/ssl/HostnameVerifier;
            invokevirtual javax.naming.ldap.StartTlsResponse.setHostnameVerifier:(Ljavax/net/ssl/HostnameVerifier;)V
        17: .line 2639
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getCipherSuitesArray:()[Ljava/lang/String;
            ifnull 19
        18: .line 2640
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getCipherSuitesArray:()[Ljava/lang/String;
            invokevirtual javax.naming.ldap.StartTlsResponse.setEnabledCipherSuites:([Ljava/lang/String;)V
        19: .line 2643
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.tls:Ljavax/naming/ldap/StartTlsResponse;
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getSSLSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            invokevirtual javax.naming.ldap.StartTlsResponse.negotiate:(Ljavax/net/ssl/SSLSocketFactory;)Ljavax/net/ssl/SSLSession;
            astore 4 /* negotiate */
        start local 4 // javax.net.ssl.SSLSession negotiate
        20: .line 2644
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.negotiatedTls"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        21: .line 2645
            aload 4 /* negotiate */
            invokeinterface javax.net.ssl.SSLSession.getProtocol:()Ljava/lang/String;
            aastore
        22: .line 2644
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        end local 4 // javax.net.ssl.SSLSession negotiate
        23: .line 2646
            goto 35
      StackMap locals:
      StackMap stack: java.io.IOException
        24: astore 4 /* e */
        start local 4 // java.io.IOException e
        25: .line 2647
            new javax.naming.NamingException
            dup
            aload 4 /* e */
            invokevirtual java.io.IOException.getMessage:()Ljava/lang/String;
            invokespecial javax.naming.NamingException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.io.IOException e
        26: .line 2649
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 5
        27: .line 2650
            aload 3 /* result */
            ifnull 34
        28: .line 2651
            aload 2 /* savedEnv */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 33
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext top java.lang.Throwable top java.util.Iterator
      StackMap stack:
        29: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 6 /* savedEntry */
        start local 6 // java.util.Map$Entry savedEntry
        30: .line 2652
            aload 3 /* result */
            aload 6 /* savedEntry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
        31: .line 2653
            aload 6 /* savedEntry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
        32: .line 2652
            invokeinterface javax.naming.ldap.LdapContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.util.Map$Entry savedEntry
        33: .line 2651
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 29
        34: .line 2656
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext top java.lang.Throwable
      StackMap stack:
            aload 5
            athrow
        35: .line 2650
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext
      StackMap stack:
            aload 3 /* result */
            ifnull 42
        36: .line 2651
            aload 2 /* savedEnv */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 41
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext top top top java.util.Iterator
      StackMap stack:
        37: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 6 /* savedEntry */
        start local 6 // java.util.Map$Entry savedEntry
        38: .line 2652
            aload 3 /* result */
            aload 6 /* savedEntry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
        39: .line 2653
            aload 6 /* savedEntry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
        40: .line 2652
            invokeinterface javax.naming.ldap.LdapContext.addToEnvironment:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.util.Map$Entry savedEntry
        41: .line 2651
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 37
        42: .line 2657
      StackMap locals: org.apache.catalina.realm.JNDIRealm java.util.Hashtable java.util.Map javax.naming.ldap.LdapContext
      StackMap stack:
            aload 3 /* result */
            areturn
        end local 3 // javax.naming.ldap.LdapContext result
        end local 2 // java.util.Map savedEnv
        end local 1 // java.util.Hashtable env
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   43     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            0   43     1         env  Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;
            1   43     2    savedEnv  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
            6    9     3         key  Ljava/lang/String;
            7    9     5       entry  Ljava/lang/Object;
           11   43     3      result  Ljavax/naming/ldap/LdapContext;
           20   23     4   negotiate  Ljavax/net/ssl/SSLSession;
           25   26     4           e  Ljava/io/IOException;
           30   33     6  savedEntry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/Object;>;
           38   41     6  savedEntry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/Object;>;
      Exception table:
        from    to  target  type
          19    23      24  Class java.io.IOException
          11    26      26  any
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)Ljavax/naming/directory/DirContext;
    MethodParameters:
      Name  Flags
      env   

  protected java.util.Hashtable<java.lang.String, java.lang.String> getDirectoryContextEnvironment();
    descriptor: ()Ljava/util/Hashtable;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2667
            new java.util.Hashtable
            dup
            invokespecial java.util.Hashtable.<init>:()V
            astore 1 /* env */
        start local 1 // java.util.Hashtable env
         1: .line 2670
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 3
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
            ifne 3
         2: .line 2671
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Connecting to URL "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
            goto 5
         3: .line 2672
      StackMap locals: java.util.Hashtable
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 5
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
            ifle 5
         4: .line 2673
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Connecting to URL "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         5: .line 2674
      StackMap locals:
      StackMap stack:
            aload 1 /* env */
            ldc "java.naming.factory.initial"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.contextFactory:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 2675
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
            ifnull 8
         7: .line 2676
            aload 1 /* env */
            ldc "java.naming.security.principal"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionName:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         8: .line 2677
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
            ifnull 10
         9: .line 2678
            aload 1 /* env */
            ldc "java.naming.security.credentials"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPassword:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        10: .line 2679
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
            ifnull 12
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
            ifne 12
        11: .line 2680
            aload 1 /* env */
            ldc "java.naming.provider.url"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionURL:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
            goto 14
        12: .line 2681
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            ifnull 14
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionAttempt:I
            ifle 14
        13: .line 2682
            aload 1 /* env */
            ldc "java.naming.provider.url"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.alternateURL:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        14: .line 2683
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.authentication:Ljava/lang/String;
            ifnull 16
        15: .line 2684
            aload 1 /* env */
            ldc "java.naming.security.authentication"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.authentication:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        16: .line 2685
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.protocol:Ljava/lang/String;
            ifnull 18
        17: .line 2686
            aload 1 /* env */
            ldc "java.naming.security.protocol"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.protocol:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        18: .line 2687
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.referrals:Ljava/lang/String;
            ifnull 20
        19: .line 2688
            aload 1 /* env */
            ldc "java.naming.referral"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.referrals:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        20: .line 2689
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.derefAliases:Ljava/lang/String;
            ifnull 22
        21: .line 2690
            aload 1 /* env */
            ldc "java.naming.ldap.derefAliases"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.derefAliases:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        22: .line 2691
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionTimeout:Ljava/lang/String;
            ifnull 24
        23: .line 2692
            aload 1 /* env */
            ldc "com.sun.jndi.ldap.connect.timeout"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionTimeout:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        24: .line 2693
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.readTimeout:Ljava/lang/String;
            ifnull 26
        25: .line 2694
            aload 1 /* env */
            ldc "com.sun.jndi.ldap.read.timeout"
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.readTimeout:Ljava/lang/String;
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        26: .line 2696
      StackMap locals:
      StackMap stack:
            aload 1 /* env */
            areturn
        end local 1 // java.util.Hashtable env
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   27     0  this  Lorg/apache/catalina/realm/JNDIRealm;
            1   27     1   env  Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;
    Signature: ()Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;

  protected void startInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2715
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPoolSize:I
            iconst_1
            if_icmpeq 2
         1: .line 2716
            aload 0 /* this */
            new org.apache.tomcat.util.collections.SynchronizedStack
            dup
            sipush 128
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPoolSize:I
            invokespecial org.apache.tomcat.util.collections.SynchronizedStack.<init>:(II)V
            putfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
         2: .line 2720
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 1 /* connection */
        start local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
         3: .line 2722
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.get:()Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            astore 1 /* connection */
         4: .line 2723
            goto 11
      StackMap locals: org.apache.catalina.realm.JNDIRealm org.apache.catalina.realm.JNDIRealm$JNDIConnection
      StackMap stack: javax.naming.NamingException
         5: astore 2 /* e */
        start local 2 // javax.naming.NamingException e
         6: .line 2728
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.JNDIRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "jndiRealm.open"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 2 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // javax.naming.NamingException e
         7: .line 2730
            aload 0 /* this */
            aload 1 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
            goto 12
         8: .line 2729
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
         9: .line 2730
            aload 0 /* this */
            aload 1 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        10: .line 2731
            aload 3
            athrow
        11: .line 2730
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* connection */
            invokevirtual org.apache.catalina.realm.JNDIRealm.release:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
        12: .line 2733
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.startInternal:()V
        13: .line 2734
            return
        end local 1 // org.apache.catalina.realm.JNDIRealm$JNDIConnection connection
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lorg/apache/catalina/realm/JNDIRealm;
            3   14     1  connection  Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            6    7     2           e  Ljavax/naming/NamingException;
      Exception table:
        from    to  target  type
           3     4       5  Class javax.naming.NamingException
           3     7       8  any
    Exceptions:
      throws org.apache.catalina.LifecycleException

  protected void stopInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.JNDIRealm this
         0: .line 2747
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.stopInternal:()V
         1: .line 2749
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
            ifnonnull 5
         2: .line 2750
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnectionLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
         3: .line 2751
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.singleConnection:Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;
            invokevirtual org.apache.catalina.realm.JNDIRealm.close:(Lorg/apache/catalina/realm/JNDIRealm$JNDIConnection;)V
         4: .line 2752
            goto 7
         5: .line 2753
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.closePooledConnections:()V
         6: .line 2754
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.JNDIRealm.connectionPool:Lorg/apache/tomcat/util/collections/SynchronizedStack;
         7: .line 2756
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lorg/apache/catalina/realm/JNDIRealm;
    Exceptions:
      throws org.apache.catalina.LifecycleException

  protected java.lang.String[] parseUserPatternString(java.lang.String);
    descriptor: (Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String userPatternString
         0: .line 2770
            aload 1 /* userPatternString */
            ifnull 24
         1: .line 2771
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* pathList */
        start local 2 // java.util.List pathList
         2: .line 2772
            aload 1 /* userPatternString */
            bipush 40
            invokevirtual java.lang.String.indexOf:(I)I
            istore 3 /* startParenLoc */
        start local 3 // int startParenLoc
         3: .line 2773
            iload 3 /* startParenLoc */
            iconst_m1
            if_icmpne 5
         4: .line 2775
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            aload 1 /* userPatternString */
            aastore
            areturn
         5: .line 2777
      StackMap locals: java.util.List int
      StackMap stack:
            iconst_0
            istore 4 /* startingPoint */
        start local 4 // int startingPoint
         6: .line 2778
            goto 22
         7: .line 2779
      StackMap locals: int
      StackMap stack:
            iconst_0
            istore 5 /* endParenLoc */
        start local 5 // int endParenLoc
         8: .line 2783
            goto 10
         9: .line 2785
      StackMap locals: int
      StackMap stack:
            aload 1 /* userPatternString */
            bipush 40
            iload 3 /* startParenLoc */
            iconst_1
            iadd
            invokevirtual java.lang.String.indexOf:(II)I
            istore 3 /* startParenLoc */
        10: .line 2783
      StackMap locals:
      StackMap stack:
            aload 1 /* userPatternString */
            iload 3 /* startParenLoc */
            iconst_1
            iadd
            invokevirtual java.lang.String.charAt:(I)C
            bipush 124
            if_icmpeq 9
        11: .line 2784
            iload 3 /* startParenLoc */
            ifeq 12
            aload 1 /* userPatternString */
            iload 3 /* startParenLoc */
            iconst_1
            isub
            invokevirtual java.lang.String.charAt:(I)C
            bipush 92
            if_icmpeq 9
        12: .line 2787
      StackMap locals:
      StackMap stack:
            aload 1 /* userPatternString */
            bipush 41
            iload 3 /* startParenLoc */
            iconst_1
            iadd
            invokevirtual java.lang.String.indexOf:(II)I
            istore 5 /* endParenLoc */
        13: .line 2789
            goto 15
        14: .line 2790
      StackMap locals:
      StackMap stack:
            aload 1 /* userPatternString */
            bipush 41
            iload 5 /* endParenLoc */
            iconst_1
            iadd
            invokevirtual java.lang.String.indexOf:(II)I
            istore 5 /* endParenLoc */
        15: .line 2789
      StackMap locals:
      StackMap stack:
            aload 1 /* userPatternString */
            iload 5 /* endParenLoc */
            iconst_1
            isub
            invokevirtual java.lang.String.charAt:(I)C
            bipush 92
            if_icmpeq 14
        16: .line 2792
            aload 1 /* userPatternString */
        17: .line 2793
            iload 3 /* startParenLoc */
            iconst_1
            iadd
            iload 5 /* endParenLoc */
        18: .line 2792
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 6 /* nextPathPart */
        start local 6 // java.lang.String nextPathPart
        19: .line 2794
            aload 2 /* pathList */
            aload 6 /* nextPathPart */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        20: .line 2795
            iload 5 /* endParenLoc */
            iconst_1
            iadd
            istore 4 /* startingPoint */
        21: .line 2796
            aload 1 /* userPatternString */
            bipush 40
            iload 4 /* startingPoint */
            invokevirtual java.lang.String.indexOf:(II)I
            istore 3 /* startParenLoc */
        end local 6 // java.lang.String nextPathPart
        end local 5 // int endParenLoc
        22: .line 2778
      StackMap locals:
      StackMap stack:
            iload 3 /* startParenLoc */
            iconst_m1
            if_icmpgt 7
        23: .line 2798
            aload 2 /* pathList */
            iconst_0
            anewarray java.lang.String
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.String[]
            areturn
        end local 4 // int startingPoint
        end local 3 // int startParenLoc
        end local 2 // java.util.List pathList
        24: .line 2800
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 1 // java.lang.String userPatternString
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   25     0               this  Lorg/apache/catalina/realm/JNDIRealm;
            0   25     1  userPatternString  Ljava/lang/String;
            2   24     2           pathList  Ljava/util/List<Ljava/lang/String;>;
            3   24     3      startParenLoc  I
            6   24     4      startingPoint  I
            8   22     5        endParenLoc  I
           19   22     6       nextPathPart  Ljava/lang/String;
    MethodParameters:
                   Name  Flags
      userPatternString  

  protected java.lang.String doRFC2254Encoding(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // java.lang.String inString
         0: .line 2820
            new java.lang.StringBuilder
            dup
            aload 1 /* inString */
            invokevirtual java.lang.String.length:()I
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 2 /* buf */
        start local 2 // java.lang.StringBuilder buf
         1: .line 2821
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 17
         3: .line 2822
      StackMap locals: java.lang.StringBuilder int
      StackMap stack:
            aload 1 /* inString */
            iload 3 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            istore 4 /* c */
        start local 4 // char c
         4: .line 2823
            iload 4 /* c */
            lookupswitch { // 5
                    0: 13
                   40: 9
                   41: 11
                   42: 7
                   92: 5
              default: 15
          }
         5: .line 2825
      StackMap locals: int
      StackMap stack:
            aload 2 /* buf */
            ldc "\\5c"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         6: .line 2826
            goto 16
         7: .line 2828
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            ldc "\\2a"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         8: .line 2829
            goto 16
         9: .line 2831
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            ldc "\\28"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        10: .line 2832
            goto 16
        11: .line 2834
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            ldc "\\29"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        12: .line 2835
            goto 16
        13: .line 2837
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            ldc "\\00"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        14: .line 2838
            goto 16
        15: .line 2840
      StackMap locals:
      StackMap stack:
            aload 2 /* buf */
            iload 4 /* c */
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        end local 4 // char c
        16: .line 2821
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 3 /* i */
            aload 1 /* inString */
            invokevirtual java.lang.String.length:()I
            if_icmplt 3
        end local 3 // int i
        18: .line 2844
            aload 2 /* buf */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 2 // java.lang.StringBuilder buf
        end local 1 // java.lang.String inString
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   19     0      this  Lorg/apache/catalina/realm/JNDIRealm;
            0   19     1  inString  Ljava/lang/String;
            1   19     2       buf  Ljava/lang/StringBuilder;
            2   18     3         i  I
            4   16     4         c  C
    MethodParameters:
          Name  Flags
      inString  

  protected java.lang.String getDistinguishedName(javax.naming.directory.DirContext, java.lang.String, javax.naming.directory.SearchResult);
    descriptor: (Ljavax/naming/directory/DirContext;Ljava/lang/String;Ljavax/naming/directory/SearchResult;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=10, args_size=4
        start local 0 // org.apache.catalina.realm.JNDIRealm this
        start local 1 // javax.naming.directory.DirContext context
        start local 2 // java.lang.String base
        start local 3 // javax.naming.directory.SearchResult result
         0: .line 2862
            aload 3 /* result */
            invokevirtual javax.naming.directory.SearchResult.getName:()Ljava/lang/String;
            astore 4 /* resultName */
        start local 4 // java.lang.String resultName
         1: .line 2864
            aload 3 /* result */
            invokevirtual javax.naming.directory.SearchResult.isRelative:()Z
            ifeq 11
         2: .line 2865
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 4
         3: .line 2866
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  search returned relative name: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* resultName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         4: .line 2868
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* context */
            ldc ""
            invokeinterface javax.naming.directory.DirContext.getNameParser:(Ljava/lang/String;)Ljavax/naming/NameParser;
            astore 6 /* parser */
        start local 6 // javax.naming.NameParser parser
         5: .line 2869
            aload 6 /* parser */
            aload 1 /* context */
            invokeinterface javax.naming.directory.DirContext.getNameInNamespace:()Ljava/lang/String;
            invokeinterface javax.naming.NameParser.parse:(Ljava/lang/String;)Ljavax/naming/Name;
            astore 7 /* contextName */
        start local 7 // javax.naming.Name contextName
         6: .line 2870
            aload 6 /* parser */
            aload 2 /* base */
            invokeinterface javax.naming.NameParser.parse:(Ljava/lang/String;)Ljavax/naming/Name;
            astore 8 /* baseName */
        start local 8 // javax.naming.Name baseName
         7: .line 2873
            aload 6 /* parser */
            new javax.naming.CompositeName
            dup
            aload 4 /* resultName */
            invokespecial javax.naming.CompositeName.<init>:(Ljava/lang/String;)V
            iconst_0
            invokevirtual javax.naming.CompositeName.get:(I)Ljava/lang/String;
            invokeinterface javax.naming.NameParser.parse:(Ljava/lang/String;)Ljavax/naming/Name;
            astore 9 /* entryName */
        start local 9 // javax.naming.Name entryName
         8: .line 2875
            aload 7 /* contextName */
            aload 8 /* baseName */
            invokeinterface javax.naming.Name.addAll:(Ljavax/naming/Name;)Ljavax/naming/Name;
            astore 5 /* name */
        start local 5 // javax.naming.Name name
         9: .line 2876
            aload 5 /* name */
            aload 9 /* entryName */
            invokeinterface javax.naming.Name.addAll:(Ljavax/naming/Name;)Ljavax/naming/Name;
            astore 5 /* name */
        end local 9 // javax.naming.Name entryName
        end local 8 // javax.naming.Name baseName
        end local 7 // javax.naming.Name contextName
        end local 6 // javax.naming.NameParser parser
        10: .line 2877
            goto 30
        end local 5 // javax.naming.Name name
        11: .line 2878
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 13
        12: .line 2879
            aload 0 /* this */
            getfield org.apache.catalina.realm.JNDIRealm.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "  search returned absolute name: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* resultName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        13: .line 2883
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            ldc ""
            invokeinterface javax.naming.directory.DirContext.getNameParser:(Ljava/lang/String;)Ljavax/naming/NameParser;
            astore 6 /* parser */
        start local 6 // javax.naming.NameParser parser
        14: .line 2884
            new java.net.URI
            dup
            aload 4 /* resultName */
            invokespecial java.net.URI.<init>:(Ljava/lang/String;)V
            astore 7 /* userNameUri */
        start local 7 // java.net.URI userNameUri
        15: .line 2885
            aload 7 /* userNameUri */
            invokevirtual java.net.URI.getPath:()Ljava/lang/String;
            astore 8 /* pathComponent */
        start local 8 // java.lang.String pathComponent
        16: .line 2887
            aload 8 /* pathComponent */
            invokevirtual java.lang.String.length:()I
            iconst_1
            if_icmpge 22
        17: .line 2888
            new javax.naming.InvalidNameException
            dup
        18: .line 2889
            new java.lang.StringBuilder
            dup
            ldc "Search returned unparseable absolute name: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        19: .line 2890
            aload 4 /* resultName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        20: .line 2889
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        21: .line 2888
            invokespecial javax.naming.InvalidNameException.<init>:(Ljava/lang/String;)V
            athrow
        22: .line 2892
      StackMap locals: org.apache.catalina.realm.JNDIRealm javax.naming.directory.DirContext java.lang.String javax.naming.directory.SearchResult java.lang.String top javax.naming.NameParser java.net.URI java.lang.String
      StackMap stack:
            aload 6 /* parser */
            aload 8 /* pathComponent */
            iconst_1
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokeinterface javax.naming.NameParser.parse:(Ljava/lang/String;)Ljavax/naming/Name;
            astore 5 /* name */
        end local 8 // java.lang.String pathComponent
        end local 7 // java.net.URI userNameUri
        end local 6 // javax.naming.NameParser parser
        start local 5 // javax.naming.Name name
        23: .line 2893
            goto 30
        end local 5 // javax.naming.Name name
      StackMap locals: org.apache.catalina.realm.JNDIRealm javax.naming.directory.DirContext java.lang.String javax.naming.directory.SearchResult java.lang.String
      StackMap stack: java.net.URISyntaxException
        24: pop
        25: .line 2894
            new javax.naming.InvalidNameException
            dup
        26: .line 2895
            new java.lang.StringBuilder
            dup
            ldc "Search returned unparseable absolute name: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        27: .line 2896
            aload 4 /* resultName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        28: .line 2895
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        29: .line 2894
            invokespecial javax.naming.InvalidNameException.<init>:(Ljava/lang/String;)V
            athrow
        start local 5 // javax.naming.Name name
        30: .line 2900
      StackMap locals: javax.naming.Name
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.JNDIRealm.getForceDnHexEscape:()Z
            ifeq 32
        31: .line 2902
            aload 5 /* name */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokestatic org.apache.catalina.realm.JNDIRealm.convertToHexEscape:(Ljava/lang/String;)Ljava/lang/String;
            areturn
        32: .line 2904
      StackMap locals:
      StackMap stack:
            aload 5 /* name */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            areturn
        end local 5 // javax.naming.Name name
        end local 4 // java.lang.String resultName
        end local 3 // javax.naming.directory.SearchResult result
        end local 2 // java.lang.String base
        end local 1 // javax.naming.directory.DirContext context
        end local 0 // org.apache.catalina.realm.JNDIRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   33     0           this  Lorg/apache/catalina/realm/JNDIRealm;
            0   33     1        context  Ljavax/naming/directory/DirContext;
            0   33     2           base  Ljava/lang/String;
            0   33     3         result  Ljavax/naming/directory/SearchResult;
            1   33     4     resultName  Ljava/lang/String;
            9   11     5           name  Ljavax/naming/Name;
           23   24     5           name  Ljavax/naming/Name;
           30   33     5           name  Ljavax/naming/Name;
            5   10     6         parser  Ljavax/naming/NameParser;
            6   10     7    contextName  Ljavax/naming/Name;
            7   10     8       baseName  Ljavax/naming/Name;
            8   10     9      entryName  Ljavax/naming/Name;
           14   23     6         parser  Ljavax/naming/NameParser;
           15   23     7    userNameUri  Ljava/net/URI;
           16   23     8  pathComponent  Ljava/lang/String;
      Exception table:
        from    to  target  type
          13    23      24  Class java.net.URISyntaxException
    Exceptions:
      throws javax.naming.NamingException
    MethodParameters:
         Name  Flags
      context  
      base     
      result   

  protected static java.lang.String convertToHexEscape(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=1
        start local 0 // java.lang.String input
         0: .line 2910
            aload 0 /* input */
            bipush 92
            invokevirtual java.lang.String.indexOf:(I)I
            iconst_m1
            if_icmpne 2
         1: .line 2912
            aload 0 /* input */
            areturn
         2: .line 2916
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            bipush 6
            iadd
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 1 /* result */
        start local 1 // java.lang.StringBuilder result
         3: .line 2917
            iconst_0
            istore 2 /* previousSlash */
        start local 2 // boolean previousSlash
         4: .line 2918
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         5: goto 38
         6: .line 2919
      StackMap locals: java.lang.StringBuilder int int
      StackMap stack:
            aload 0 /* input */
            iload 3 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            istore 4 /* c */
        start local 4 // char c
         7: .line 2921
            iload 2 /* previousSlash */
            ifeq 33
         8: .line 2922
            iload 4 /* c */
            lookupswitch { // 10
                   32: 9
                   34: 11
                   35: 13
                   43: 15
                   44: 17
                   59: 19
                   60: 21
                   61: 23
                   62: 25
                   92: 27
              default: 29
          }
         9: .line 2924
      StackMap locals: int
      StackMap stack:
            aload 1 /* result */
            ldc "\\20"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        10: .line 2925
            goto 31
        11: .line 2928
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\22"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        12: .line 2929
            goto 31
        13: .line 2932
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\23"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        14: .line 2933
            goto 31
        15: .line 2936
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\2B"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        16: .line 2937
            goto 31
        17: .line 2940
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\2C"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        18: .line 2941
            goto 31
        19: .line 2944
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\3B"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        20: .line 2945
            goto 31
        21: .line 2948
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\3C"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        22: .line 2949
            goto 31
        23: .line 2952
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\3D"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        24: .line 2953
            goto 31
        25: .line 2956
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\3E"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        26: .line 2957
            goto 31
        27: .line 2960
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            ldc "\\5C"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        28: .line 2961
            goto 31
        29: .line 2964
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            bipush 92
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        30: .line 2965
            aload 1 /* result */
            iload 4 /* c */
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        31: .line 2967
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 2 /* previousSlash */
        32: .line 2968
            goto 37
        33: .line 2969
      StackMap locals:
      StackMap stack:
            iload 4 /* c */
            bipush 92
            if_icmpne 36
        34: .line 2970
            iconst_1
            istore 2 /* previousSlash */
        35: .line 2971
            goto 37
        36: .line 2972
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            iload 4 /* c */
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        end local 4 // char c
        37: .line 2918
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        38: iload 3 /* i */
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            if_icmplt 6
        end local 3 // int i
        39: .line 2977
            iload 2 /* previousSlash */
            ifeq 41
        40: .line 2978
            aload 1 /* result */
            bipush 92
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        41: .line 2981
      StackMap locals:
      StackMap stack:
            aload 1 /* result */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 2 // boolean previousSlash
        end local 1 // java.lang.StringBuilder result
        end local 0 // java.lang.String input
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   42     0          input  Ljava/lang/String;
            3   42     1         result  Ljava/lang/StringBuilder;
            4   42     2  previousSlash  Z
            5   39     3              i  I
            7   37     4              c  C
    MethodParameters:
       Name  Flags
      input  
}
SourceFile: "JNDIRealm.java"
NestMembers:
  org.apache.catalina.realm.JNDIRealm$JNDIConnection  org.apache.catalina.realm.JNDIRealm$User
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map
  protected JNDIConnection = org.apache.catalina.realm.JNDIRealm$JNDIConnection of org.apache.catalina.realm.JNDIRealm
  protected User = org.apache.catalina.realm.JNDIRealm$User of org.apache.catalina.realm.JNDIRealm