public class com.mongodb.internal.session.BaseClientSessionImpl implements com.mongodb.session.ClientSession
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.mongodb.internal.session.BaseClientSessionImpl
  super_class: java.lang.Object
{
  private static final java.lang.String CLUSTER_TIME_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "clusterTime"

  private final com.mongodb.internal.session.ServerSessionPool serverSessionPool;
    descriptor: Lcom/mongodb/internal/session/ServerSessionPool;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.session.ServerSession serverSession;
    descriptor: Lcom/mongodb/session/ServerSession;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  private final com.mongodb.ClientSessionOptions options;
    descriptor: Lcom/mongodb/ClientSessionOptions;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private org.bson.BsonDocument clusterTime;
    descriptor: Lorg/bson/BsonDocument;
    flags: (0x0002) ACC_PRIVATE

  private org.bson.BsonTimestamp operationTime;
    descriptor: Lorg/bson/BsonTimestamp;
    flags: (0x0002) ACC_PRIVATE

  private com.mongodb.ServerAddress pinnedServerAddress;
    descriptor: Lcom/mongodb/ServerAddress;
    flags: (0x0002) ACC_PRIVATE

  private org.bson.BsonDocument recoveryToken;
    descriptor: Lorg/bson/BsonDocument;
    flags: (0x0002) ACC_PRIVATE

  private volatile boolean closed;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  public void <init>(com.mongodb.internal.session.ServerSessionPool, java.lang.Object, com.mongodb.ClientSessionOptions);
    descriptor: (Lcom/mongodb/internal/session/ServerSessionPool;Ljava/lang/Object;Lcom/mongodb/ClientSessionOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // com.mongodb.internal.session.ServerSessionPool serverSessionPool
        start local 2 // java.lang.Object originator
        start local 3 // com.mongodb.ClientSessionOptions options
         0: .line 42
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 43
            aload 0 /* this */
            aload 1 /* serverSessionPool */
            putfield com.mongodb.internal.session.BaseClientSessionImpl.serverSessionPool:Lcom/mongodb/internal/session/ServerSessionPool;
         2: .line 44
            aload 0 /* this */
            aload 1 /* serverSessionPool */
            invokevirtual com.mongodb.internal.session.ServerSessionPool.get:()Lcom/mongodb/session/ServerSession;
            putfield com.mongodb.internal.session.BaseClientSessionImpl.serverSession:Lcom/mongodb/session/ServerSession;
         3: .line 45
            aload 0 /* this */
            aload 2 /* originator */
            putfield com.mongodb.internal.session.BaseClientSessionImpl.originator:Ljava/lang/Object;
         4: .line 46
            aload 0 /* this */
            aload 3 /* options */
            putfield com.mongodb.internal.session.BaseClientSessionImpl.options:Lcom/mongodb/ClientSessionOptions;
         5: .line 47
            aload 0 /* this */
            aconst_null
            putfield com.mongodb.internal.session.BaseClientSessionImpl.pinnedServerAddress:Lcom/mongodb/ServerAddress;
         6: .line 48
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
         7: .line 49
            return
        end local 3 // com.mongodb.ClientSessionOptions options
        end local 2 // java.lang.Object originator
        end local 1 // com.mongodb.internal.session.ServerSessionPool serverSessionPool
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    8     0               this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    8     1  serverSessionPool  Lcom/mongodb/internal/session/ServerSessionPool;
            0    8     2         originator  Ljava/lang/Object;
            0    8     3            options  Lcom/mongodb/ClientSessionOptions;
    MethodParameters:
                   Name  Flags
      serverSessionPool  final
      originator         final
      options            final

  public com.mongodb.ServerAddress getPinnedServerAddress();
    descriptor: ()Lcom/mongodb/ServerAddress;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 54
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.pinnedServerAddress:Lcom/mongodb/ServerAddress;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
    RuntimeVisibleAnnotations: 
      com.mongodb.lang.Nullable()

  public void setPinnedServerAddress(com.mongodb.ServerAddress);
    descriptor: (Lcom/mongodb/ServerAddress;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // com.mongodb.ServerAddress address
         0: .line 59
            ldc "pinned mongos null check"
            aload 1 /* address */
            ifnull 1
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.pinnedServerAddress:Lcom/mongodb/ServerAddress;
            ifnull 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_1
      StackMap locals: com.mongodb.internal.session.BaseClientSessionImpl com.mongodb.ServerAddress
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 60
            aload 0 /* this */
            aload 1 /* address */
            putfield com.mongodb.internal.session.BaseClientSessionImpl.pinnedServerAddress:Lcom/mongodb/ServerAddress;
         4: .line 61
            return
        end local 1 // com.mongodb.ServerAddress address
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    5     1  address  Lcom/mongodb/ServerAddress;
    RuntimeVisibleParameterAnnotations: 
      0:
        com.mongodb.lang.Nullable()
    MethodParameters:
         Name  Flags
      address  final

  public org.bson.BsonDocument getRecoveryToken();
    descriptor: ()Lorg/bson/BsonDocument;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 65
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.recoveryToken:Lorg/bson/BsonDocument;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public void setRecoveryToken(org.bson.BsonDocument);
    descriptor: (Lorg/bson/BsonDocument;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // org.bson.BsonDocument recoveryToken
         0: .line 70
            aload 0 /* this */
            aload 1 /* recoveryToken */
            putfield com.mongodb.internal.session.BaseClientSessionImpl.recoveryToken:Lorg/bson/BsonDocument;
         1: .line 71
            return
        end local 1 // org.bson.BsonDocument recoveryToken
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    2     1  recoveryToken  Lorg/bson/BsonDocument;
    MethodParameters:
               Name  Flags
      recoveryToken  final

  public com.mongodb.ClientSessionOptions getOptions();
    descriptor: ()Lcom/mongodb/ClientSessionOptions;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 75
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.options:Lcom/mongodb/ClientSessionOptions;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public boolean isCausallyConsistent();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 80
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.options:Lcom/mongodb/ClientSessionOptions;
            invokevirtual com.mongodb.ClientSessionOptions.isCausallyConsistent:()Ljava/lang/Boolean;
            astore 1 /* causallyConsistent */
        start local 1 // java.lang.Boolean causallyConsistent
         1: .line 81
            aload 1 /* causallyConsistent */
            ifnonnull 2
            iconst_1
            goto 3
      StackMap locals: java.lang.Boolean
      StackMap stack:
         2: aload 1 /* causallyConsistent */
            invokevirtual java.lang.Boolean.booleanValue:()Z
      StackMap locals:
      StackMap stack: int
         3: ireturn
        end local 1 // java.lang.Boolean causallyConsistent
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    4     0                this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            1    4     1  causallyConsistent  Ljava/lang/Boolean;

  public java.lang.Object getOriginator();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 86
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.originator:Ljava/lang/Object;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public org.bson.BsonDocument getClusterTime();
    descriptor: ()Lorg/bson/BsonDocument;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 91
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public org.bson.BsonTimestamp getOperationTime();
    descriptor: ()Lorg/bson/BsonTimestamp;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 96
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public com.mongodb.session.ServerSession getServerSession();
    descriptor: ()Lcom/mongodb/session/ServerSession;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 101
            ldc "open"
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_1
      StackMap locals: com.mongodb.internal.session.BaseClientSessionImpl
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 102
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.serverSession:Lcom/mongodb/session/ServerSession;
            areturn
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;

  public void advanceOperationTime(org.bson.BsonTimestamp);
    descriptor: (Lorg/bson/BsonTimestamp;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // org.bson.BsonTimestamp newOperationTime
         0: .line 107
            ldc "open"
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_1
      StackMap locals: com.mongodb.internal.session.BaseClientSessionImpl org.bson.BsonTimestamp
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 108
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* newOperationTime */
            invokevirtual com.mongodb.internal.session.BaseClientSessionImpl.greaterOf:(Lorg/bson/BsonTimestamp;)Lorg/bson/BsonTimestamp;
            putfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
         4: .line 109
            return
        end local 1 // org.bson.BsonTimestamp newOperationTime
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    5     0              this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    5     1  newOperationTime  Lorg/bson/BsonTimestamp;
    MethodParameters:
                  Name  Flags
      newOperationTime  final

  public void advanceClusterTime(org.bson.BsonDocument);
    descriptor: (Lorg/bson/BsonDocument;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // org.bson.BsonDocument newClusterTime
         0: .line 113
            ldc "open"
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_1
      StackMap locals: com.mongodb.internal.session.BaseClientSessionImpl org.bson.BsonDocument
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 114
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* newClusterTime */
            invokevirtual com.mongodb.internal.session.BaseClientSessionImpl.greaterOf:(Lorg/bson/BsonDocument;)Lorg/bson/BsonDocument;
            putfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
         4: .line 115
            return
        end local 1 // org.bson.BsonDocument newClusterTime
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    5     1  newClusterTime  Lorg/bson/BsonDocument;
    MethodParameters:
                Name  Flags
      newClusterTime  final

  private org.bson.BsonDocument greaterOf(org.bson.BsonDocument);
    descriptor: (Lorg/bson/BsonDocument;)Lorg/bson/BsonDocument;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // org.bson.BsonDocument newClusterTime
         0: .line 118
            aload 1 /* newClusterTime */
            ifnonnull 2
         1: .line 119
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
            areturn
         2: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
            ifnonnull 4
         3: .line 121
            aload 1 /* newClusterTime */
            areturn
         4: .line 123
      StackMap locals:
      StackMap stack:
            aload 1 /* newClusterTime */
            ldc "clusterTime"
            invokevirtual org.bson.BsonDocument.getTimestamp:(Ljava/lang/Object;)Lorg/bson/BsonTimestamp;
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
            ldc "clusterTime"
            invokevirtual org.bson.BsonDocument.getTimestamp:(Ljava/lang/Object;)Lorg/bson/BsonTimestamp;
            invokevirtual org.bson.BsonTimestamp.compareTo:(Lorg/bson/BsonTimestamp;)I
            ifle 6
         5: .line 124
            aload 1 /* newClusterTime */
            goto 7
      StackMap locals:
      StackMap stack:
         6: aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.clusterTime:Lorg/bson/BsonDocument;
         7: .line 123
      StackMap locals:
      StackMap stack: org.bson.BsonDocument
            areturn
        end local 1 // org.bson.BsonDocument newClusterTime
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    8     0            this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    8     1  newClusterTime  Lorg/bson/BsonDocument;
    MethodParameters:
                Name  Flags
      newClusterTime  final

  private org.bson.BsonTimestamp greaterOf(org.bson.BsonTimestamp);
    descriptor: (Lorg/bson/BsonTimestamp;)Lorg/bson/BsonTimestamp;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
        start local 1 // org.bson.BsonTimestamp newOperationTime
         0: .line 129
            aload 1 /* newOperationTime */
            ifnonnull 2
         1: .line 130
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
            areturn
         2: .line 131
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
            ifnonnull 4
         3: .line 132
            aload 1 /* newOperationTime */
            areturn
         4: .line 134
      StackMap locals:
      StackMap stack:
            aload 1 /* newOperationTime */
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
            invokevirtual org.bson.BsonTimestamp.compareTo:(Lorg/bson/BsonTimestamp;)I
            ifle 5
            aload 1 /* newOperationTime */
            goto 6
      StackMap locals:
      StackMap stack:
         5: aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.operationTime:Lorg/bson/BsonTimestamp;
      StackMap locals:
      StackMap stack: org.bson.BsonTimestamp
         6: areturn
        end local 1 // org.bson.BsonTimestamp newOperationTime
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    7     0              this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
            0    7     1  newOperationTime  Lorg/bson/BsonTimestamp;
    MethodParameters:
                  Name  Flags
      newOperationTime  final

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
         0: .line 140
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
            ifne 4
         1: .line 141
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.internal.session.BaseClientSessionImpl.closed:Z
         2: .line 142
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.serverSessionPool:Lcom/mongodb/internal/session/ServerSessionPool;
            aload 0 /* this */
            getfield com.mongodb.internal.session.BaseClientSessionImpl.serverSession:Lcom/mongodb/session/ServerSession;
            invokevirtual com.mongodb.internal.session.ServerSessionPool.release:(Lcom/mongodb/session/ServerSession;)V
         3: .line 143
            aload 0 /* this */
            aconst_null
            putfield com.mongodb.internal.session.BaseClientSessionImpl.pinnedServerAddress:Lcom/mongodb/ServerAddress;
         4: .line 145
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.internal.session.BaseClientSessionImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/mongodb/internal/session/BaseClientSessionImpl;
}
SourceFile: "BaseClientSessionImpl.java"