abstract class com.mongodb.internal.connection.WriteProtocol implements com.mongodb.internal.connection.LegacyProtocol<com.mongodb.WriteConcernResult>
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.mongodb.internal.connection.WriteProtocol
  super_class: java.lang.Object
{
  private final com.mongodb.MongoNamespace namespace;
    descriptor: Lcom/mongodb/MongoNamespace;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean ordered;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private com.mongodb.event.CommandListener commandListener;
    descriptor: Lcom/mongodb/event/CommandListener;
    flags: (0x0002) ACC_PRIVATE

  private static volatile int[] $SWITCH_TABLE$com$mongodb$internal$connection$OpCode;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  void <init>(com.mongodb.MongoNamespace, boolean);
    descriptor: (Lcom/mongodb/MongoNamespace;Z)V
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.MongoNamespace namespace
        start local 2 // boolean ordered
         0: .line 48
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 49
            aload 0 /* this */
            aload 1 /* namespace */
            putfield com.mongodb.internal.connection.WriteProtocol.namespace:Lcom/mongodb/MongoNamespace;
         2: .line 50
            aload 0 /* this */
            iload 2 /* ordered */
            putfield com.mongodb.internal.connection.WriteProtocol.ordered:Z
         3: .line 51
            return
        end local 2 // boolean ordered
        end local 1 // com.mongodb.MongoNamespace namespace
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    4     1  namespace  Lcom/mongodb/MongoNamespace;
            0    4     2    ordered  Z
    MethodParameters:
           Name  Flags
      namespace  final
      ordered    final

  public void setCommandListener(com.mongodb.event.CommandListener);
    descriptor: (Lcom/mongodb/event/CommandListener;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.event.CommandListener commandListener
         0: .line 55
            aload 0 /* this */
            aload 1 /* commandListener */
            putfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
         1: .line 56
            return
        end local 1 // com.mongodb.event.CommandListener commandListener
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    2     1  commandListener  Lcom/mongodb/event/CommandListener;
    MethodParameters:
                 Name  Flags
      commandListener  final

  public com.mongodb.WriteConcernResult execute(com.mongodb.internal.connection.InternalConnection);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;)Lcom/mongodb/WriteConcernResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=10, args_size=2
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
         0: .line 60
            aconst_null
            astore 2 /* requestMessage */
        start local 2 // com.mongodb.internal.connection.RequestMessage requestMessage
         1: .line 61
            invokestatic java.lang.System.nanoTime:()J
            lstore 3 /* startTimeNanos */
        start local 3 // long startTimeNanos
         2: .line 63
            iconst_0
            istore 6 /* sentCommandStartedEvent */
        start local 6 // boolean sentCommandStartedEvent
         3: .line 64
            new com.mongodb.connection.ByteBufferBsonOutput
            dup
            aload 1 /* connection */
            invokespecial com.mongodb.connection.ByteBufferBsonOutput.<init>:(Lcom/mongodb/connection/BufferProvider;)V
            astore 7 /* bsonOutput */
        start local 7 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
         4: .line 66
            aload 0 /* this */
            aload 1 /* connection */
            invokeinterface com.mongodb.internal.connection.InternalConnection.getDescription:()Lcom/mongodb/connection/ConnectionDescription;
            invokestatic com.mongodb.internal.connection.ProtocolHelper.getMessageSettings:(Lcom/mongodb/connection/ConnectionDescription;)Lcom/mongodb/internal/connection/MessageSettings;
            invokevirtual com.mongodb.internal.connection.WriteProtocol.createRequestMessage:(Lcom/mongodb/internal/connection/MessageSettings;)Lcom/mongodb/internal/connection/RequestMessage;
            astore 2 /* requestMessage */
         5: .line 67
            aload 2 /* requestMessage */
            aload 7 /* bsonOutput */
            getstatic com.mongodb.internal.connection.NoOpSessionContext.INSTANCE:Lcom/mongodb/internal/connection/NoOpSessionContext;
            invokevirtual com.mongodb.internal.connection.RequestMessage.encode:(Lorg/bson/io/BsonOutput;Lcom/mongodb/session/SessionContext;)V
         6: .line 68
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* requestMessage */
            aload 2 /* requestMessage */
            invokevirtual com.mongodb.internal.connection.RequestMessage.getEncodingMetadata:()Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendStartedEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;Lcom/mongodb/connection/ByteBufferBsonOutput;)V
         7: .line 69
            iconst_1
            istore 6 /* sentCommandStartedEvent */
         8: .line 71
            aload 2 /* requestMessage */
            invokevirtual com.mongodb.internal.connection.RequestMessage.getId:()I
            istore 5 /* messageId */
        start local 5 // int messageId
         9: .line 72
            aload 1 /* connection */
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBuffers:()Ljava/util/List;
            iload 5 /* messageId */
            invokeinterface com.mongodb.internal.connection.InternalConnection.sendMessage:(Ljava/util/List;I)V
        10: .line 73
            goto 17
        end local 5 // int messageId
      StackMap locals: com.mongodb.internal.connection.WriteProtocol com.mongodb.internal.connection.InternalConnection com.mongodb.internal.connection.RequestMessage long top int com.mongodb.connection.ByteBufferBsonOutput
      StackMap stack: java.lang.RuntimeException
        11: astore 8 /* e */
        start local 8 // java.lang.RuntimeException e
        12: .line 74
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* requestMessage */
            iload 6 /* sentCommandStartedEvent */
            aload 8 /* e */
            lload 3 /* startTimeNanos */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendFailedEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;ZLjava/lang/Throwable;J)V
        13: .line 75
            aload 8 /* e */
            athrow
        end local 8 // java.lang.RuntimeException e
        14: .line 76
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 9
        15: .line 77
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.close:()V
        16: .line 78
            aload 9
            athrow
        start local 5 // int messageId
        17: .line 77
      StackMap locals: com.mongodb.internal.connection.WriteProtocol com.mongodb.internal.connection.InternalConnection com.mongodb.internal.connection.RequestMessage long int int com.mongodb.connection.ByteBufferBsonOutput
      StackMap stack:
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.close:()V
        18: .line 80
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* requestMessage */
            lload 3 /* startTimeNanos */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendSucceededEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;J)V
        19: .line 82
            invokestatic com.mongodb.WriteConcernResult.unacknowledged:()Lcom/mongodb/WriteConcernResult;
            areturn
        end local 7 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
        end local 6 // boolean sentCommandStartedEvent
        end local 5 // int messageId
        end local 3 // long startTimeNanos
        end local 2 // com.mongodb.internal.connection.RequestMessage requestMessage
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   20     0                     this  Lcom/mongodb/internal/connection/WriteProtocol;
            0   20     1               connection  Lcom/mongodb/internal/connection/InternalConnection;
            1   20     2           requestMessage  Lcom/mongodb/internal/connection/RequestMessage;
            2   20     3           startTimeNanos  J
            9   11     5                messageId  I
           17   20     5                messageId  I
            3   20     6  sentCommandStartedEvent  Z
            4   20     7               bsonOutput  Lcom/mongodb/connection/ByteBufferBsonOutput;
           12   14     8                        e  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           4    10      11  Class java.lang.RuntimeException
           4    14      14  any
    MethodParameters:
            Name  Flags
      connection  final

  public void executeAsync(com.mongodb.internal.connection.InternalConnection, com.mongodb.async.SingleResultCallback<com.mongodb.WriteConcernResult>);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/async/SingleResultCallback;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
        start local 2 // com.mongodb.async.SingleResultCallback callback
         0: .line 87
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* connection */
            invokeinterface com.mongodb.internal.connection.InternalConnection.getDescription:()Lcom/mongodb/connection/ConnectionDescription;
            invokestatic com.mongodb.internal.connection.ProtocolHelper.getMessageSettings:(Lcom/mongodb/connection/ConnectionDescription;)Lcom/mongodb/internal/connection/MessageSettings;
            invokevirtual com.mongodb.internal.connection.WriteProtocol.createRequestMessage:(Lcom/mongodb/internal/connection/MessageSettings;)Lcom/mongodb/internal/connection/RequestMessage;
            aload 1 /* connection */
            aload 2 /* callback */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.executeAsync:(Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/async/SingleResultCallback;)V
         1: .line 88
            return
        end local 2 // com.mongodb.async.SingleResultCallback callback
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    2     1  connection  Lcom/mongodb/internal/connection/InternalConnection;
            0    2     2    callback  Lcom/mongodb/async/SingleResultCallback<Lcom/mongodb/WriteConcernResult;>;
    Signature: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/async/SingleResultCallback<Lcom/mongodb/WriteConcernResult;>;)V
    MethodParameters:
            Name  Flags
      connection  final
      callback    final

  private void executeAsync(com.mongodb.internal.connection.RequestMessage, com.mongodb.internal.connection.InternalConnection, com.mongodb.async.SingleResultCallback<com.mongodb.WriteConcernResult>);
    descriptor: (Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/async/SingleResultCallback;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=12, locals=9, args_size=4
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.RequestMessage requestMessage
        start local 2 // com.mongodb.internal.connection.InternalConnection connection
        start local 3 // com.mongodb.async.SingleResultCallback callback
         0: .line 92
            invokestatic java.lang.System.nanoTime:()J
            lstore 4 /* startTimeNanos */
        start local 4 // long startTimeNanos
         1: .line 93
            iconst_0
            istore 6 /* sentCommandStartedEvent */
        start local 6 // boolean sentCommandStartedEvent
         2: .line 95
            new com.mongodb.connection.ByteBufferBsonOutput
            dup
            aload 2 /* connection */
            invokespecial com.mongodb.connection.ByteBufferBsonOutput.<init>:(Lcom/mongodb/connection/BufferProvider;)V
            astore 7 /* bsonOutput */
        start local 7 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
         3: .line 97
            aload 1 /* requestMessage */
            aload 7 /* bsonOutput */
            invokestatic com.mongodb.internal.connection.ProtocolHelper.encodeMessageWithMetadata:(Lcom/mongodb/internal/connection/RequestMessage;Lorg/bson/io/BsonOutput;)Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;
            astore 8 /* encodingMetadata */
        start local 8 // com.mongodb.internal.connection.RequestMessage$EncodingMetadata encodingMetadata
         4: .line 98
            aload 0 /* this */
            aload 2 /* connection */
            aload 1 /* requestMessage */
            aload 8 /* encodingMetadata */
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendStartedEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;Lcom/mongodb/connection/ByteBufferBsonOutput;)V
         5: .line 99
            iconst_1
            istore 6 /* sentCommandStartedEvent */
         6: .line 101
            aload 2 /* connection */
            aload 7 /* bsonOutput */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBuffers:()Ljava/util/List;
            aload 1 /* requestMessage */
            invokevirtual com.mongodb.internal.connection.RequestMessage.getId:()I
         7: .line 102
            new com.mongodb.internal.connection.WriteProtocol$UnacknowledgedWriteResultCallback
            dup
            aload 0 /* this */
            aload 3 /* callback */
            aload 1 /* requestMessage */
            aload 7 /* bsonOutput */
            aload 2 /* connection */
            lload 4 /* startTimeNanos */
            invokespecial com.mongodb.internal.connection.WriteProtocol$UnacknowledgedWriteResultCallback.<init>:(Lcom/mongodb/internal/connection/WriteProtocol;Lcom/mongodb/async/SingleResultCallback;Lcom/mongodb/internal/connection/RequestMessage;Lorg/bson/io/OutputBuffer;Lcom/mongodb/internal/connection/InternalConnection;J)V
         8: .line 101
            invokeinterface com.mongodb.internal.connection.InternalConnection.sendMessageAsync:(Ljava/util/List;ILcom/mongodb/async/SingleResultCallback;)V
        end local 8 // com.mongodb.internal.connection.RequestMessage$EncodingMetadata encodingMetadata
        end local 7 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
         9: .line 103
            goto 13
      StackMap locals: com.mongodb.internal.connection.WriteProtocol com.mongodb.internal.connection.RequestMessage com.mongodb.internal.connection.InternalConnection com.mongodb.async.SingleResultCallback long int
      StackMap stack: java.lang.Throwable
        10: astore 7 /* t */
        start local 7 // java.lang.Throwable t
        11: .line 104
            aload 0 /* this */
            aload 2 /* connection */
            aload 1 /* requestMessage */
            iload 6 /* sentCommandStartedEvent */
            aload 7 /* t */
            lload 4 /* startTimeNanos */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendFailedEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;ZLjava/lang/Throwable;J)V
        12: .line 105
            aload 3 /* callback */
            aconst_null
            aload 7 /* t */
            invokeinterface com.mongodb.async.SingleResultCallback.onResult:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 7 // java.lang.Throwable t
        13: .line 107
      StackMap locals:
      StackMap stack:
            return
        end local 6 // boolean sentCommandStartedEvent
        end local 4 // long startTimeNanos
        end local 3 // com.mongodb.async.SingleResultCallback callback
        end local 2 // com.mongodb.internal.connection.InternalConnection connection
        end local 1 // com.mongodb.internal.connection.RequestMessage requestMessage
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   14     0                     this  Lcom/mongodb/internal/connection/WriteProtocol;
            0   14     1           requestMessage  Lcom/mongodb/internal/connection/RequestMessage;
            0   14     2               connection  Lcom/mongodb/internal/connection/InternalConnection;
            0   14     3                 callback  Lcom/mongodb/async/SingleResultCallback<Lcom/mongodb/WriteConcernResult;>;
            1   14     4           startTimeNanos  J
            2   14     6  sentCommandStartedEvent  Z
            3    9     7               bsonOutput  Lcom/mongodb/connection/ByteBufferBsonOutput;
            4    9     8         encodingMetadata  Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;
           11   13     7                        t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           2     9      10  Class java.lang.Throwable
    Signature: (Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/async/SingleResultCallback<Lcom/mongodb/WriteConcernResult;>;)V
    MethodParameters:
                Name  Flags
      requestMessage  final
      connection      final
      callback        final

  protected abstract org.bson.BsonDocument getAsWriteCommand(com.mongodb.connection.ByteBufferBsonOutput, int);
    descriptor: (Lcom/mongodb/connection/ByteBufferBsonOutput;I)Lorg/bson/BsonDocument;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
                       Name  Flags
      bsonOutput             
      firstDocumentPosition  

  protected org.bson.BsonDocument getBaseCommandDocument(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/bson/BsonDocument;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // java.lang.String commandName
         0: .line 112
            new org.bson.BsonDocument
            dup
            aload 1 /* commandName */
            new org.bson.BsonString
            dup
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getNamespace:()Lcom/mongodb/MongoNamespace;
            invokevirtual com.mongodb.MongoNamespace.getCollectionName:()Ljava/lang/String;
            invokespecial org.bson.BsonString.<init>:(Ljava/lang/String;)V
            invokespecial org.bson.BsonDocument.<init>:(Ljava/lang/String;Lorg/bson/BsonValue;)V
         1: .line 113
            ldc "ordered"
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.isOrdered:()Z
            invokestatic org.bson.BsonBoolean.valueOf:(Z)Lorg/bson/BsonBoolean;
            invokevirtual org.bson.BsonDocument.append:(Ljava/lang/String;Lorg/bson/BsonValue;)Lorg/bson/BsonDocument;
         2: .line 112
            astore 2 /* baseCommandDocument */
        start local 2 // org.bson.BsonDocument baseCommandDocument
         3: .line 114
            aload 2 /* baseCommandDocument */
            ldc "writeConcern"
            getstatic com.mongodb.WriteConcern.UNACKNOWLEDGED:Lcom/mongodb/WriteConcern;
            invokevirtual com.mongodb.WriteConcern.asDocument:()Lorg/bson/BsonDocument;
            invokevirtual org.bson.BsonDocument.append:(Ljava/lang/String;Lorg/bson/BsonValue;)Lorg/bson/BsonDocument;
            pop
         4: .line 115
            aload 2 /* baseCommandDocument */
            areturn
        end local 2 // org.bson.BsonDocument baseCommandDocument
        end local 1 // java.lang.String commandName
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    5     0                 this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    5     1          commandName  Ljava/lang/String;
            3    5     2  baseCommandDocument  Lorg/bson/BsonDocument;
    MethodParameters:
             Name  Flags
      commandName  final

  protected java.lang.String getCommandName(com.mongodb.internal.connection.RequestMessage);
    descriptor: (Lcom/mongodb/internal/connection/RequestMessage;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.RequestMessage message
         0: .line 119
            invokestatic com.mongodb.internal.connection.WriteProtocol.$SWITCH_TABLE$com$mongodb$internal$connection$OpCode:()[I
            aload 1 /* message */
            invokevirtual com.mongodb.internal.connection.RequestMessage.getOpCode:()Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iaload
            tableswitch { // 2 - 6
                    2: 2
                    3: 1
                    4: 4
                    5: 4
                    6: 3
              default: 4
          }
         1: .line 121
      StackMap locals:
      StackMap stack:
            ldc "insert"
            areturn
         2: .line 123
      StackMap locals:
      StackMap stack:
            ldc "update"
            areturn
         3: .line 125
      StackMap locals:
      StackMap stack:
            ldc "delete"
            areturn
         4: .line 127
      StackMap locals:
      StackMap stack:
            new com.mongodb.MongoInternalException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unexpected op code for write: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* message */
            invokevirtual com.mongodb.internal.connection.RequestMessage.getOpCode:()Lcom/mongodb/internal/connection/OpCode;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial com.mongodb.MongoInternalException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // com.mongodb.internal.connection.RequestMessage message
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    5     1  message  Lcom/mongodb/internal/connection/RequestMessage;
    MethodParameters:
         Name  Flags
      message  final

  private void sendStartedEvent(com.mongodb.internal.connection.InternalConnection, com.mongodb.internal.connection.RequestMessage, com.mongodb.internal.connection.RequestMessage$EncodingMetadata, com.mongodb.connection.ByteBufferBsonOutput);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;Lcom/mongodb/connection/ByteBufferBsonOutput;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
        start local 2 // com.mongodb.internal.connection.RequestMessage message
        start local 3 // com.mongodb.internal.connection.RequestMessage$EncodingMetadata encodingMetadata
        start local 4 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
         0: .line 134
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
            ifnull 5
         1: .line 135
            aload 2 /* message */
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.namespace:Lcom/mongodb/MongoNamespace;
            invokevirtual com.mongodb.MongoNamespace.getDatabaseName:()Ljava/lang/String;
            aload 0 /* this */
            aload 2 /* message */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getCommandName:(Lcom/mongodb/internal/connection/RequestMessage;)Ljava/lang/String;
         2: .line 136
            aload 0 /* this */
            aload 4 /* bsonOutput */
            aload 3 /* encodingMetadata */
            invokevirtual com.mongodb.internal.connection.RequestMessage$EncodingMetadata.getFirstDocumentPosition:()I
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getAsWriteCommand:(Lcom/mongodb/connection/ByteBufferBsonOutput;I)Lorg/bson/BsonDocument;
         3: .line 137
            aload 1 /* connection */
            invokeinterface com.mongodb.internal.connection.InternalConnection.getDescription:()Lcom/mongodb/connection/ConnectionDescription;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
         4: .line 135
            invokestatic com.mongodb.internal.connection.ProtocolHelper.sendCommandStartedEvent:(Lcom/mongodb/internal/connection/RequestMessage;Ljava/lang/String;Ljava/lang/String;Lorg/bson/BsonDocument;Lcom/mongodb/connection/ConnectionDescription;Lcom/mongodb/event/CommandListener;)V
         5: .line 139
      StackMap locals:
      StackMap stack:
            return
        end local 4 // com.mongodb.connection.ByteBufferBsonOutput bsonOutput
        end local 3 // com.mongodb.internal.connection.RequestMessage$EncodingMetadata encodingMetadata
        end local 2 // com.mongodb.internal.connection.RequestMessage message
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    6     0              this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    6     1        connection  Lcom/mongodb/internal/connection/InternalConnection;
            0    6     2           message  Lcom/mongodb/internal/connection/RequestMessage;
            0    6     3  encodingMetadata  Lcom/mongodb/internal/connection/RequestMessage$EncodingMetadata;
            0    6     4        bsonOutput  Lcom/mongodb/connection/ByteBufferBsonOutput;
    MethodParameters:
                  Name  Flags
      connection        final
      message           final
      encodingMetadata  final
      bsonOutput        final

  private void sendSucceededEvent(com.mongodb.internal.connection.InternalConnection, com.mongodb.internal.connection.RequestMessage, long);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=4
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
        start local 2 // com.mongodb.internal.connection.RequestMessage message
        start local 3 // long startTimeNanos
         0: .line 143
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
            ifnull 2
         1: .line 144
            aload 0 /* this */
            aload 1 /* connection */
            aload 2 /* message */
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getResponseDocument:()Lorg/bson/BsonDocument;
            lload 3 /* startTimeNanos */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.sendSucceededEvent:(Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;Lorg/bson/BsonDocument;J)V
         2: .line 146
      StackMap locals:
      StackMap stack:
            return
        end local 3 // long startTimeNanos
        end local 2 // com.mongodb.internal.connection.RequestMessage message
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0            this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    3     1      connection  Lcom/mongodb/internal/connection/InternalConnection;
            0    3     2         message  Lcom/mongodb/internal/connection/RequestMessage;
            0    3     3  startTimeNanos  J
    MethodParameters:
                Name  Flags
      connection      final
      message         final
      startTimeNanos  final

  private void sendSucceededEvent(com.mongodb.internal.connection.InternalConnection, com.mongodb.internal.connection.RequestMessage, org.bson.BsonDocument, long);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;Lorg/bson/BsonDocument;J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=6, args_size=5
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
        start local 2 // com.mongodb.internal.connection.RequestMessage message
        start local 3 // org.bson.BsonDocument responseDocument
        start local 4 // long startTimeNanos
         0: .line 150
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
            ifnull 4
         1: .line 151
            aload 2 /* message */
            aload 0 /* this */
            aload 2 /* message */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getCommandName:(Lcom/mongodb/internal/connection/RequestMessage;)Ljava/lang/String;
            aload 3 /* responseDocument */
            aload 1 /* connection */
            invokeinterface com.mongodb.internal.connection.InternalConnection.getDescription:()Lcom/mongodb/connection/ConnectionDescription;
         2: .line 152
            invokestatic java.lang.System.nanoTime:()J
            lload 4 /* startTimeNanos */
            lsub
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
         3: .line 151
            invokestatic com.mongodb.internal.connection.ProtocolHelper.sendCommandSucceededEvent:(Lcom/mongodb/internal/connection/RequestMessage;Ljava/lang/String;Lorg/bson/BsonDocument;Lcom/mongodb/connection/ConnectionDescription;JLcom/mongodb/event/CommandListener;)V
         4: .line 154
      StackMap locals:
      StackMap stack:
            return
        end local 4 // long startTimeNanos
        end local 3 // org.bson.BsonDocument responseDocument
        end local 2 // com.mongodb.internal.connection.RequestMessage message
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    5     0              this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    5     1        connection  Lcom/mongodb/internal/connection/InternalConnection;
            0    5     2           message  Lcom/mongodb/internal/connection/RequestMessage;
            0    5     3  responseDocument  Lorg/bson/BsonDocument;
            0    5     4    startTimeNanos  J
    MethodParameters:
                  Name  Flags
      connection        final
      message           final
      responseDocument  final
      startTimeNanos    final

  private void sendFailedEvent(com.mongodb.internal.connection.InternalConnection, com.mongodb.internal.connection.RequestMessage, boolean, java.lang.Throwable, long);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;Lcom/mongodb/internal/connection/RequestMessage;ZLjava/lang/Throwable;J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=6
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
        start local 1 // com.mongodb.internal.connection.InternalConnection connection
        start local 2 // com.mongodb.internal.connection.RequestMessage message
        start local 3 // boolean sentCommandStartedEvent
        start local 4 // java.lang.Throwable t
        start local 5 // long startTimeNanos
         0: .line 158
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
            ifnull 4
            iload 3 /* sentCommandStartedEvent */
            ifeq 4
         1: .line 159
            aload 2 /* message */
            aload 0 /* this */
            aload 2 /* message */
            invokevirtual com.mongodb.internal.connection.WriteProtocol.getCommandName:(Lcom/mongodb/internal/connection/RequestMessage;)Ljava/lang/String;
            aload 1 /* connection */
            invokeinterface com.mongodb.internal.connection.InternalConnection.getDescription:()Lcom/mongodb/connection/ConnectionDescription;
            invokestatic java.lang.System.nanoTime:()J
            lload 5 /* startTimeNanos */
            lsub
            aload 4 /* t */
         2: .line 160
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.commandListener:Lcom/mongodb/event/CommandListener;
         3: .line 159
            invokestatic com.mongodb.internal.connection.ProtocolHelper.sendCommandFailedEvent:(Lcom/mongodb/internal/connection/RequestMessage;Ljava/lang/String;Lcom/mongodb/connection/ConnectionDescription;JLjava/lang/Throwable;Lcom/mongodb/event/CommandListener;)V
         4: .line 162
      StackMap locals:
      StackMap stack:
            return
        end local 5 // long startTimeNanos
        end local 4 // java.lang.Throwable t
        end local 3 // boolean sentCommandStartedEvent
        end local 2 // com.mongodb.internal.connection.RequestMessage message
        end local 1 // com.mongodb.internal.connection.InternalConnection connection
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    5     0                     this  Lcom/mongodb/internal/connection/WriteProtocol;
            0    5     1               connection  Lcom/mongodb/internal/connection/InternalConnection;
            0    5     2                  message  Lcom/mongodb/internal/connection/RequestMessage;
            0    5     3  sentCommandStartedEvent  Z
            0    5     4                        t  Ljava/lang/Throwable;
            0    5     5           startTimeNanos  J
    MethodParameters:
                         Name  Flags
      connection               final
      message                  final
      sentCommandStartedEvent  final
      t                        final
      startTimeNanos           final

  private org.bson.BsonDocument getResponseDocument();
    descriptor: ()Lorg/bson/BsonDocument;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
         0: .line 165
            new org.bson.BsonDocument
            dup
            ldc "ok"
            new org.bson.BsonInt32
            dup
            iconst_1
            invokespecial org.bson.BsonInt32.<init>:(I)V
            invokespecial org.bson.BsonDocument.<init>:(Ljava/lang/String;Lorg/bson/BsonValue;)V
            areturn
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/WriteProtocol;

  protected abstract com.mongodb.internal.connection.RequestMessage createRequestMessage(com.mongodb.internal.connection.MessageSettings);
    descriptor: (Lcom/mongodb/internal/connection/MessageSettings;)Lcom/mongodb/internal/connection/RequestMessage;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
          Name  Flags
      settings  

  protected com.mongodb.MongoNamespace getNamespace();
    descriptor: ()Lcom/mongodb/MongoNamespace;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
         0: .line 182
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.namespace:Lcom/mongodb/MongoNamespace;
            areturn
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/WriteProtocol;

  protected boolean isOrdered();
    descriptor: ()Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.WriteProtocol this
         0: .line 191
            aload 0 /* this */
            getfield com.mongodb.internal.connection.WriteProtocol.ordered:Z
            ireturn
        end local 0 // com.mongodb.internal.connection.WriteProtocol this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/WriteProtocol;

  protected abstract com.mongodb.diagnostics.logging.Logger getLogger();
    descriptor: ()Lcom/mongodb/diagnostics/logging/Logger;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public java.lang.Object execute(com.mongodb.internal.connection.InternalConnection);
    descriptor: (Lcom/mongodb/internal/connection/InternalConnection;)Ljava/lang/Object;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            invokevirtual com.mongodb.internal.connection.WriteProtocol.execute:(Lcom/mongodb/internal/connection/InternalConnection;)Lcom/mongodb/WriteConcernResult;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static int[] $SWITCH_TABLE$com$mongodb$internal$connection$OpCode();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 42
            getstatic com.mongodb.internal.connection.WriteProtocol.$SWITCH_TABLE$com$mongodb$internal$connection$OpCode:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic com.mongodb.internal.connection.OpCode.values:()[Lcom/mongodb/internal/connection/OpCode;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_COMPRESSED:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            bipush 8
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_DELETE:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            bipush 6
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_GETMORE:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iconst_5
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_INSERT:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iconst_3
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_KILL_CURSORS:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            bipush 7
            iastore
        15: goto 17
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        16: pop
      StackMap locals:
      StackMap stack:
        17: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_MSG:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            bipush 9
            iastore
        18: goto 20
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        19: pop
      StackMap locals:
      StackMap stack:
        20: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_QUERY:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iconst_4
            iastore
        21: goto 23
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        22: pop
      StackMap locals:
      StackMap stack:
        23: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_REPLY:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iconst_1
            iastore
        24: goto 26
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        25: pop
      StackMap locals:
      StackMap stack:
        26: aload 0
            getstatic com.mongodb.internal.connection.OpCode.OP_UPDATE:Lcom/mongodb/internal/connection/OpCode;
            invokevirtual com.mongodb.internal.connection.OpCode.ordinal:()I
            iconst_2
            iastore
        27: goto 29
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        28: pop
      StackMap locals:
      StackMap stack:
        29: aload 0
            dup
            putstatic com.mongodb.internal.connection.WriteProtocol.$SWITCH_TABLE$com$mongodb$internal$connection$OpCode:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
          14    15      16  Class java.lang.NoSuchFieldError
          17    18      19  Class java.lang.NoSuchFieldError
          20    21      22  Class java.lang.NoSuchFieldError
          23    24      25  Class java.lang.NoSuchFieldError
          26    27      28  Class java.lang.NoSuchFieldError
}
Signature: Ljava/lang/Object;Lcom/mongodb/internal/connection/LegacyProtocol<Lcom/mongodb/WriteConcernResult;>;
SourceFile: "WriteProtocol.java"
NestMembers:
  com.mongodb.internal.connection.WriteProtocol$UnacknowledgedWriteResultCallback
InnerClasses:
  EncodingMetadata = com.mongodb.internal.connection.RequestMessage$EncodingMetadata of com.mongodb.internal.connection.RequestMessage
  private final UnacknowledgedWriteResultCallback = com.mongodb.internal.connection.WriteProtocol$UnacknowledgedWriteResultCallback of com.mongodb.internal.connection.WriteProtocol