final class org.bson.codecs.pojo.PojoCodecImpl<T> extends org.bson.codecs.pojo.PojoCodec<T>
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: org.bson.codecs.pojo.PojoCodecImpl
  super_class: org.bson.codecs.pojo.PojoCodec
{
  private static final org.bson.diagnostics.Logger LOGGER;
    descriptor: Lorg/bson/diagnostics/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final org.bson.codecs.pojo.ClassModel<T> classModel;
    descriptor: Lorg/bson/codecs/pojo/ClassModel;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/bson/codecs/pojo/ClassModel<TT;>;

  private final org.bson.codecs.configuration.CodecRegistry registry;
    descriptor: Lorg/bson/codecs/configuration/CodecRegistry;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.bson.codecs.pojo.PropertyCodecRegistry propertyCodecRegistry;
    descriptor: Lorg/bson/codecs/pojo/PropertyCodecRegistry;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup;
    descriptor: Lorg/bson/codecs/pojo/DiscriminatorLookup;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.concurrent.ConcurrentMap<org.bson.codecs.pojo.ClassModel<?>, org.bson.codecs.Codec<?>> codecCache;
    descriptor: Ljava/util/concurrent/ConcurrentMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentMap<Lorg/bson/codecs/pojo/ClassModel<*>;Lorg/bson/codecs/Codec<*>;>;

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

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 44
            ldc "PojoCodec"
            invokestatic org.bson.diagnostics.Loggers.getLogger:(Ljava/lang/String;)Lorg/bson/diagnostics/Logger;
            putstatic org.bson.codecs.pojo.PojoCodecImpl.LOGGER:Lorg/bson/diagnostics/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(org.bson.codecs.pojo.ClassModel<T>, org.bson.codecs.configuration.CodecRegistry, java.util.List<org.bson.codecs.pojo.PropertyCodecProvider>, org.bson.codecs.pojo.DiscriminatorLookup);
    descriptor: (Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/configuration/CodecRegistry;Ljava/util/List;Lorg/bson/codecs/pojo/DiscriminatorLookup;)V
    flags: (0x0000) 
    Code:
      stack=8, locals=5, args_size=5
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.ClassModel classModel
        start local 2 // org.bson.codecs.configuration.CodecRegistry codecRegistry
        start local 3 // java.util.List propertyCodecProviders
        start local 4 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
         0: .line 52
            aload 0 /* this */
            invokespecial org.bson.codecs.pojo.PojoCodec.<init>:()V
         1: .line 54
            aload 0 /* this */
            aload 1 /* classModel */
            putfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
         2: .line 55
            aload 0 /* this */
            iconst_2
            anewarray org.bson.codecs.configuration.CodecRegistry
            dup
            iconst_0
            iconst_1
            anewarray org.bson.codecs.Codec
            dup
            iconst_0
            aload 0 /* this */
            aastore
            invokestatic org.bson.codecs.configuration.CodecRegistries.fromCodecs:([Lorg/bson/codecs/Codec;)Lorg/bson/codecs/configuration/CodecRegistry;
            aastore
            dup
            iconst_1
            aload 2 /* codecRegistry */
            aastore
            invokestatic org.bson.codecs.configuration.CodecRegistries.fromRegistries:([Lorg/bson/codecs/configuration/CodecRegistry;)Lorg/bson/codecs/configuration/CodecRegistry;
            putfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
         3: .line 56
            aload 0 /* this */
            aload 4 /* discriminatorLookup */
            putfield org.bson.codecs.pojo.PojoCodecImpl.discriminatorLookup:Lorg/bson/codecs/pojo/DiscriminatorLookup;
         4: .line 57
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
         5: .line 58
            aload 0 /* this */
            new org.bson.codecs.pojo.PropertyCodecRegistryImpl
            dup
            aload 0 /* this */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
            aload 3 /* propertyCodecProviders */
            invokespecial org.bson.codecs.pojo.PropertyCodecRegistryImpl.<init>:(Lorg/bson/codecs/pojo/PojoCodec;Lorg/bson/codecs/configuration/CodecRegistry;Ljava/util/List;)V
            putfield org.bson.codecs.pojo.PojoCodecImpl.propertyCodecRegistry:Lorg/bson/codecs/pojo/PropertyCodecRegistry;
         6: .line 59
            aload 0 /* this */
            aload 1 /* classModel */
            invokestatic org.bson.codecs.pojo.PojoCodecImpl.shouldSpecialize:(Lorg/bson/codecs/pojo/ClassModel;)Z
            putfield org.bson.codecs.pojo.PojoCodecImpl.specialized:Z
         7: .line 60
            aload 0 /* this */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.specialize:()V
         8: .line 61
            return
        end local 4 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
        end local 3 // java.util.List propertyCodecProviders
        end local 2 // org.bson.codecs.configuration.CodecRegistry codecRegistry
        end local 1 // org.bson.codecs.pojo.ClassModel classModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0    9     0                    this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    9     1              classModel  Lorg/bson/codecs/pojo/ClassModel<TT;>;
            0    9     2           codecRegistry  Lorg/bson/codecs/configuration/CodecRegistry;
            0    9     3  propertyCodecProviders  Ljava/util/List<Lorg/bson/codecs/pojo/PropertyCodecProvider;>;
            0    9     4     discriminatorLookup  Lorg/bson/codecs/pojo/DiscriminatorLookup;
    Signature: (Lorg/bson/codecs/pojo/ClassModel<TT;>;Lorg/bson/codecs/configuration/CodecRegistry;Ljava/util/List<Lorg/bson/codecs/pojo/PropertyCodecProvider;>;Lorg/bson/codecs/pojo/DiscriminatorLookup;)V
    MethodParameters:
                        Name  Flags
      classModel              final
      codecRegistry           final
      propertyCodecProviders  final
      discriminatorLookup     final

  void <init>(org.bson.codecs.pojo.ClassModel<T>, org.bson.codecs.configuration.CodecRegistry, org.bson.codecs.pojo.PropertyCodecRegistry, org.bson.codecs.pojo.DiscriminatorLookup, java.util.concurrent.ConcurrentMap<org.bson.codecs.pojo.ClassModel<?>, org.bson.codecs.Codec<?>>, );
    descriptor: (Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/PropertyCodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Ljava/util/concurrent/ConcurrentMap;Z)V
    flags: (0x0000) 
    Code:
      stack=8, locals=7, args_size=7
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.ClassModel classModel
        start local 2 // org.bson.codecs.configuration.CodecRegistry registry
        start local 3 // org.bson.codecs.pojo.PropertyCodecRegistry propertyCodecRegistry
        start local 4 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
        start local 5 // java.util.concurrent.ConcurrentMap codecCache
        start local 6 // boolean specialized
         0: .line 63
            aload 0 /* this */
            invokespecial org.bson.codecs.pojo.PojoCodec.<init>:()V
         1: .line 66
            aload 0 /* this */
            aload 1 /* classModel */
            putfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
         2: .line 67
            aload 0 /* this */
            iconst_2
            anewarray org.bson.codecs.configuration.CodecRegistry
            dup
            iconst_0
            iconst_1
            anewarray org.bson.codecs.Codec
            dup
            iconst_0
            aload 0 /* this */
            aastore
            invokestatic org.bson.codecs.configuration.CodecRegistries.fromCodecs:([Lorg/bson/codecs/Codec;)Lorg/bson/codecs/configuration/CodecRegistry;
            aastore
            dup
            iconst_1
            aload 2 /* registry */
            aastore
            invokestatic org.bson.codecs.configuration.CodecRegistries.fromRegistries:([Lorg/bson/codecs/configuration/CodecRegistry;)Lorg/bson/codecs/configuration/CodecRegistry;
            putfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
         3: .line 68
            aload 0 /* this */
            aload 4 /* discriminatorLookup */
            putfield org.bson.codecs.pojo.PojoCodecImpl.discriminatorLookup:Lorg/bson/codecs/pojo/DiscriminatorLookup;
         4: .line 69
            aload 0 /* this */
            aload 5 /* codecCache */
            putfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
         5: .line 70
            aload 0 /* this */
            aload 3 /* propertyCodecRegistry */
            putfield org.bson.codecs.pojo.PojoCodecImpl.propertyCodecRegistry:Lorg/bson/codecs/pojo/PropertyCodecRegistry;
         6: .line 71
            aload 0 /* this */
            iload 6 /* specialized */
            putfield org.bson.codecs.pojo.PojoCodecImpl.specialized:Z
         7: .line 72
            aload 0 /* this */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.specialize:()V
         8: .line 73
            return
        end local 6 // boolean specialized
        end local 5 // java.util.concurrent.ConcurrentMap codecCache
        end local 4 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
        end local 3 // org.bson.codecs.pojo.PropertyCodecRegistry propertyCodecRegistry
        end local 2 // org.bson.codecs.configuration.CodecRegistry registry
        end local 1 // org.bson.codecs.pojo.ClassModel classModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    9     0                   this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    9     1             classModel  Lorg/bson/codecs/pojo/ClassModel<TT;>;
            0    9     2               registry  Lorg/bson/codecs/configuration/CodecRegistry;
            0    9     3  propertyCodecRegistry  Lorg/bson/codecs/pojo/PropertyCodecRegistry;
            0    9     4    discriminatorLookup  Lorg/bson/codecs/pojo/DiscriminatorLookup;
            0    9     5             codecCache  Ljava/util/concurrent/ConcurrentMap<Lorg/bson/codecs/pojo/ClassModel<*>;Lorg/bson/codecs/Codec<*>;>;
            0    9     6            specialized  Z
    Signature: (Lorg/bson/codecs/pojo/ClassModel<TT;>;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/PropertyCodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Ljava/util/concurrent/ConcurrentMap<Lorg/bson/codecs/pojo/ClassModel<*>;Lorg/bson/codecs/Codec<*>;>;Z)V
    MethodParameters:
                       Name  Flags
      classModel             final
      registry               final
      propertyCodecRegistry  final
      discriminatorLookup    final
      codecCache             final
      specialized            final

  private void specialize();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
         0: .line 76
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.specialized:Z
            ifeq 6
         1: .line 77
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            aload 0 /* this */
            invokeinterface java.util.concurrent.ConcurrentMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         2: .line 78
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyModels:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 2
            goto 5
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl top java.util.Iterator
      StackMap stack:
         3: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.PropertyModel
            astore 1 /* propertyModel */
        start local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
         4: .line 79
            aload 0 /* this */
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.addToCache:(Lorg/bson/codecs/pojo/PropertyModel;)V
        end local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
         5: .line 78
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 82
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl
      StackMap stack:
            return
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            4    5     1  propertyModel  Lorg/bson/codecs/pojo/PropertyModel<*>;

  public void encode(org.bson.BsonWriter, T, org.bson.codecs.EncoderContext);
    descriptor: (Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=6, args_size=4
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonWriter writer
        start local 2 // java.lang.Object value
        start local 3 // org.bson.codecs.EncoderContext encoderContext
         0: .line 87
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.specialized:Z
            ifne 4
         1: .line 88
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "%s contains generic types that have not been specialised.%nTop level classes with generic types are not supported by the PojoCodec."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         2: .line 89
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
         3: .line 88
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 92
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* value */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getType:()Ljava/lang/Class;
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.areEquivalentTypes:(Ljava/lang/Class;Ljava/lang/Class;)Z
            ifeq 17
         5: .line 93
            aload 1 /* writer */
            invokeinterface org.bson.BsonWriter.writeStartDocument:()V
         6: .line 95
            aload 0 /* this */
            aload 1 /* writer */
            aload 2 /* value */
            aload 3 /* encoderContext */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getIdPropertyModelHolder:()Lorg/bson/codecs/pojo/IdPropertyModelHolder;
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.encodeIdProperty:(Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/IdPropertyModelHolder;)V
         7: .line 97
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
            ifeq 9
         8: .line 98
            aload 1 /* writer */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminatorKey:()Ljava/lang/String;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminator:()Ljava/lang/String;
            invokeinterface org.bson.BsonWriter.writeString:(Ljava/lang/String;Ljava/lang/String;)V
         9: .line 101
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyModels:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 14
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonWriter java.lang.Object org.bson.codecs.EncoderContext top java.util.Iterator
      StackMap stack:
        10: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.PropertyModel
            astore 4 /* propertyModel */
        start local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
        11: .line 102
            aload 4 /* propertyModel */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getIdPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            invokevirtual org.bson.codecs.pojo.PropertyModel.equals:(Ljava/lang/Object;)Z
            ifeq 13
        12: .line 103
            goto 14
        13: .line 105
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonWriter java.lang.Object org.bson.codecs.EncoderContext org.bson.codecs.pojo.PropertyModel java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            aload 1 /* writer */
            aload 2 /* value */
            aload 3 /* encoderContext */
            aload 4 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.encodeProperty:(Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;)V
        end local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
        14: .line 101
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonWriter java.lang.Object org.bson.codecs.EncoderContext top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        15: .line 107
            aload 1 /* writer */
            invokeinterface org.bson.BsonWriter.writeEndDocument:()V
        16: .line 108
            goto 18
        17: .line 109
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonWriter java.lang.Object org.bson.codecs.EncoderContext
      StackMap stack:
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
            aload 2 /* value */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokeinterface org.bson.codecs.configuration.CodecRegistry.get:(Ljava/lang/Class;)Lorg/bson/codecs/Codec;
            aload 1 /* writer */
            aload 2 /* value */
            aload 3 /* encoderContext */
            invokeinterface org.bson.codecs.Codec.encode:(Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;)V
        18: .line 111
      StackMap locals:
      StackMap stack:
            return
        end local 3 // org.bson.codecs.EncoderContext encoderContext
        end local 2 // java.lang.Object value
        end local 1 // org.bson.BsonWriter writer
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   19     0            this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   19     1          writer  Lorg/bson/BsonWriter;
            0   19     2           value  TT;
            0   19     3  encoderContext  Lorg/bson/codecs/EncoderContext;
           11   14     4   propertyModel  Lorg/bson/codecs/pojo/PropertyModel<*>;
    Signature: (Lorg/bson/BsonWriter;TT;Lorg/bson/codecs/EncoderContext;)V
    MethodParameters:
                Name  Flags
      writer          final
      value           final
      encoderContext  final

  public T decode(org.bson.BsonReader, org.bson.codecs.DecoderContext);
    descriptor: (Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonReader reader
        start local 2 // org.bson.codecs.DecoderContext decoderContext
         0: .line 115
            aload 2 /* decoderContext */
            invokevirtual org.bson.codecs.DecoderContext.hasCheckedDiscriminator:()Z
            ifeq 8
         1: .line 116
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.specialized:Z
            ifne 5
         2: .line 117
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "%s contains generic types that have not been specialised.%nTop level classes with generic types are not supported by the PojoCodec."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         3: .line 118
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
         4: .line 117
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getInstanceCreator:()Lorg/bson/codecs/pojo/InstanceCreator;
            astore 3 /* instanceCreator */
        start local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
         6: .line 121
            aload 0 /* this */
            aload 1 /* reader */
            aload 2 /* decoderContext */
            aload 3 /* instanceCreator */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.decodeProperties:(Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator;)V
         7: .line 122
            aload 3 /* instanceCreator */
            invokeinterface org.bson.codecs.pojo.InstanceCreator.getInstance:()Ljava/lang/Object;
            areturn
        end local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
         8: .line 124
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* reader */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminatorKey:()Ljava/lang/String;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
         9: .line 125
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.discriminatorLookup:Lorg/bson/codecs/pojo/DiscriminatorLookup;
            aload 0 /* this */
        10: .line 124
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.getCodecFromDocument:(Lorg/bson/BsonReader;ZLjava/lang/String;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Lorg/bson/codecs/Codec;)Lorg/bson/codecs/Codec;
        11: .line 125
            aload 1 /* reader */
            invokestatic org.bson.codecs.DecoderContext.builder:()Lorg/bson/codecs/DecoderContext$Builder;
            iconst_1
            invokevirtual org.bson.codecs.DecoderContext$Builder.checkedDiscriminator:(Z)Lorg/bson/codecs/DecoderContext$Builder;
            invokevirtual org.bson.codecs.DecoderContext$Builder.build:()Lorg/bson/codecs/DecoderContext;
            invokeinterface org.bson.codecs.Codec.decode:(Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;)Ljava/lang/Object;
        12: .line 124
            areturn
        end local 2 // org.bson.codecs.DecoderContext decoderContext
        end local 1 // org.bson.BsonReader reader
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   13     0             this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   13     1           reader  Lorg/bson/BsonReader;
            0   13     2   decoderContext  Lorg/bson/codecs/DecoderContext;
            6    8     3  instanceCreator  Lorg/bson/codecs/pojo/InstanceCreator<TT;>;
    Signature: (Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;)TT;
    MethodParameters:
                Name  Flags
      reader          final
      decoderContext  final

  public java.lang.Class<T> getEncoderClass();
    descriptor: ()Ljava/lang/Class;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
         0: .line 131
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getType:()Ljava/lang/Class;
            areturn
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
    Signature: ()Ljava/lang/Class<TT;>;

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
         0: .line 136
            ldc "PojoCodec<%s>"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            areturn
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;

  org.bson.codecs.pojo.ClassModel<T> getClassModel();
    descriptor: ()Lorg/bson/codecs/pojo/ClassModel;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
         0: .line 140
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            areturn
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
    Signature: ()Lorg/bson/codecs/pojo/ClassModel<TT;>;

  private <S> void encodeIdProperty(org.bson.BsonWriter, T, org.bson.codecs.EncoderContext, org.bson.codecs.pojo.IdPropertyModelHolder<S>);
    descriptor: (Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/IdPropertyModelHolder;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=5
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonWriter writer
        start local 2 // java.lang.Object instance
        start local 3 // org.bson.codecs.EncoderContext encoderContext
        start local 4 // org.bson.codecs.pojo.IdPropertyModelHolder propertyModelHolder
         0: .line 145
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            ifnull 11
         1: .line 146
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getIdGenerator:()Lorg/bson/codecs/pojo/IdGenerator;
            ifnonnull 4
         2: .line 147
            aload 0 /* this */
            aload 1 /* writer */
            aload 2 /* instance */
            aload 3 /* encoderContext */
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.encodeProperty:(Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;)V
         3: .line 148
            goto 11
         4: .line 149
      StackMap locals:
      StackMap stack:
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            invokevirtual org.bson.codecs.pojo.PropertyModel.getPropertyAccessor:()Lorg/bson/codecs/pojo/PropertyAccessor;
            aload 2 /* instance */
            invokeinterface org.bson.codecs.pojo.PropertyAccessor.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* id */
        start local 5 // java.lang.Object id
         5: .line 150
            aload 5 /* id */
            ifnonnull 10
            aload 3 /* encoderContext */
            invokevirtual org.bson.codecs.EncoderContext.isEncodingCollectibleDocument:()Z
            ifeq 10
         6: .line 151
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getIdGenerator:()Lorg/bson/codecs/pojo/IdGenerator;
            invokeinterface org.bson.codecs.pojo.IdGenerator.generate:()Ljava/lang/Object;
            astore 5 /* id */
         7: .line 153
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            invokevirtual org.bson.codecs.pojo.PropertyModel.getPropertyAccessor:()Lorg/bson/codecs/pojo/PropertyAccessor;
            aload 2 /* instance */
            aload 5 /* id */
            invokeinterface org.bson.codecs.pojo.PropertyAccessor.set:(Ljava/lang/Object;Ljava/lang/Object;)V
         8: .line 154
            goto 10
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonWriter java.lang.Object org.bson.codecs.EncoderContext org.bson.codecs.pojo.IdPropertyModelHolder java.lang.Object
      StackMap stack: java.lang.Exception
         9: pop
        10: .line 158
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* writer */
            aload 3 /* encoderContext */
            aload 4 /* propertyModelHolder */
            invokevirtual org.bson.codecs.pojo.IdPropertyModelHolder.getPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            aload 5 /* id */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.encodeValue:(Lorg/bson/BsonWriter;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;Ljava/lang/Object;)V
        end local 5 // java.lang.Object id
        11: .line 161
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.bson.codecs.pojo.IdPropertyModelHolder propertyModelHolder
        end local 3 // org.bson.codecs.EncoderContext encoderContext
        end local 2 // java.lang.Object instance
        end local 1 // org.bson.BsonWriter writer
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   12     0                 this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   12     1               writer  Lorg/bson/BsonWriter;
            0   12     2             instance  TT;
            0   12     3       encoderContext  Lorg/bson/codecs/EncoderContext;
            0   12     4  propertyModelHolder  Lorg/bson/codecs/pojo/IdPropertyModelHolder<TS;>;
            5   11     5                   id  TS;
      Exception table:
        from    to  target  type
           7     8       9  Class java.lang.Exception
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/BsonWriter;TT;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/IdPropertyModelHolder<TS;>;)V
    MethodParameters:
                     Name  Flags
      writer               final
      instance             final
      encoderContext       final
      propertyModelHolder  final

  private <S> void encodeProperty(org.bson.BsonWriter, T, org.bson.codecs.EncoderContext, org.bson.codecs.pojo.PropertyModel<S>);
    descriptor: (Lorg/bson/BsonWriter;Ljava/lang/Object;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=5
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonWriter writer
        start local 2 // java.lang.Object instance
        start local 3 // org.bson.codecs.EncoderContext encoderContext
        start local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 166
            aload 4 /* propertyModel */
            ifnull 3
            aload 4 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.isReadable:()Z
            ifeq 3
         1: .line 167
            aload 4 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getPropertyAccessor:()Lorg/bson/codecs/pojo/PropertyAccessor;
            aload 2 /* instance */
            invokeinterface org.bson.codecs.pojo.PropertyAccessor.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* propertyValue */
        start local 5 // java.lang.Object propertyValue
         2: .line 168
            aload 0 /* this */
            aload 1 /* writer */
            aload 3 /* encoderContext */
            aload 4 /* propertyModel */
            aload 5 /* propertyValue */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.encodeValue:(Lorg/bson/BsonWriter;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;Ljava/lang/Object;)V
        end local 5 // java.lang.Object propertyValue
         3: .line 170
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 3 // org.bson.codecs.EncoderContext encoderContext
        end local 2 // java.lang.Object instance
        end local 1 // org.bson.BsonWriter writer
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    4     1          writer  Lorg/bson/BsonWriter;
            0    4     2        instance  TT;
            0    4     3  encoderContext  Lorg/bson/codecs/EncoderContext;
            0    4     4   propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            2    3     5   propertyValue  TS;
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/BsonWriter;TT;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel<TS;>;)V
    MethodParameters:
                Name  Flags
      writer          final
      instance        final
      encoderContext  final
      propertyModel   final

  private <S> void encodeValue(org.bson.BsonWriter, org.bson.codecs.EncoderContext, org.bson.codecs.pojo.PropertyModel<S>, );
    descriptor: (Lorg/bson/BsonWriter;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel;Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=6, args_size=5
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonWriter writer
        start local 2 // org.bson.codecs.EncoderContext encoderContext
        start local 3 // org.bson.codecs.pojo.PropertyModel propertyModel
        start local 4 // java.lang.Object propertyValue
         0: .line 174
            aload 3 /* propertyModel */
            aload 4 /* propertyValue */
            invokevirtual org.bson.codecs.pojo.PropertyModel.shouldSerialize:(Ljava/lang/Object;)Z
            ifeq 13
         1: .line 175
            aload 1 /* writer */
            aload 3 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getReadName:()Ljava/lang/String;
            invokeinterface org.bson.BsonWriter.writeName:(Ljava/lang/String;)V
         2: .line 176
            aload 4 /* propertyValue */
            ifnonnull 5
         3: .line 177
            aload 1 /* writer */
            invokeinterface org.bson.BsonWriter.writeNull:()V
         4: .line 178
            goto 13
         5: .line 180
      StackMap locals:
      StackMap stack:
            aload 2 /* encoderContext */
            aload 3 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getCachedCodec:()Lorg/bson/codecs/Codec;
            aload 1 /* writer */
            aload 4 /* propertyValue */
            invokevirtual org.bson.codecs.EncoderContext.encodeWithChildContext:(Lorg/bson/codecs/Encoder;Lorg/bson/BsonWriter;Ljava/lang/Object;)V
         6: .line 181
            goto 13
      StackMap locals:
      StackMap stack: org.bson.codecs.configuration.CodecConfigurationException
         7: astore 5 /* e */
        start local 5 // org.bson.codecs.configuration.CodecConfigurationException e
         8: .line 182
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "Failed to encode '%s'. Encoding '%s' errored with: %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
         9: .line 183
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 3 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getReadName:()Ljava/lang/String;
            aastore
            dup
            iconst_2
            aload 5 /* e */
            invokevirtual org.bson.codecs.configuration.CodecConfigurationException.getMessage:()Ljava/lang/String;
            aastore
        10: .line 182
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        11: .line 183
            aload 5 /* e */
        12: .line 182
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // org.bson.codecs.configuration.CodecConfigurationException e
        13: .line 187
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.lang.Object propertyValue
        end local 3 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 2 // org.bson.codecs.EncoderContext encoderContext
        end local 1 // org.bson.BsonWriter writer
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   14     0            this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   14     1          writer  Lorg/bson/BsonWriter;
            0   14     2  encoderContext  Lorg/bson/codecs/EncoderContext;
            0   14     3   propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            0   14     4   propertyValue  TS;
            8   13     5               e  Lorg/bson/codecs/configuration/CodecConfigurationException;
      Exception table:
        from    to  target  type
           5     6       7  Class org.bson.codecs.configuration.CodecConfigurationException
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/BsonWriter;Lorg/bson/codecs/EncoderContext;Lorg/bson/codecs/pojo/PropertyModel<TS;>;TS;)V
    MethodParameters:
                Name  Flags
      writer          final
      encoderContext  final
      propertyModel   final
      propertyValue   final

  private void decodeProperties(org.bson.BsonReader, org.bson.codecs.DecoderContext, org.bson.codecs.pojo.InstanceCreator<T>);
    descriptor: (Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=5, args_size=4
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonReader reader
        start local 2 // org.bson.codecs.DecoderContext decoderContext
        start local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
         0: .line 191
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readStartDocument:()V
         1: .line 192
            goto 7
         2: .line 193
      StackMap locals:
      StackMap stack:
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readName:()Ljava/lang/String;
            astore 4 /* name */
        start local 4 // java.lang.String name
         3: .line 194
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
            ifeq 6
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminatorKey:()Ljava/lang/String;
            aload 4 /* name */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 6
         4: .line 195
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readString:()Ljava/lang/String;
            pop
         5: .line 196
            goto 7
         6: .line 197
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 1 /* reader */
            aload 2 /* decoderContext */
            aload 3 /* instanceCreator */
            aload 4 /* name */
            aload 0 /* this */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            aload 4 /* name */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.getPropertyModelByWriteName:(Lorg/bson/codecs/pojo/ClassModel;Ljava/lang/String;)Lorg/bson/codecs/pojo/PropertyModel;
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel:(Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator;Ljava/lang/String;Lorg/bson/codecs/pojo/PropertyModel;)V
        end local 4 // java.lang.String name
         7: .line 192
      StackMap locals:
      StackMap stack:
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readBsonType:()Lorg/bson/BsonType;
            getstatic org.bson.BsonType.END_OF_DOCUMENT:Lorg/bson/BsonType;
            if_acmpne 2
         8: .line 200
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readEndDocument:()V
         9: .line 201
            return
        end local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
        end local 2 // org.bson.codecs.DecoderContext decoderContext
        end local 1 // org.bson.BsonReader reader
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   10     0             this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   10     1           reader  Lorg/bson/BsonReader;
            0   10     2   decoderContext  Lorg/bson/codecs/DecoderContext;
            0   10     3  instanceCreator  Lorg/bson/codecs/pojo/InstanceCreator<TT;>;
            3    7     4             name  Ljava/lang/String;
    Signature: (Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator<TT;>;)V
    MethodParameters:
                 Name  Flags
      reader           final
      decoderContext   final
      instanceCreator  final

  private <S> void decodePropertyModel(org.bson.BsonReader, org.bson.codecs.DecoderContext, org.bson.codecs.pojo.InstanceCreator<T>, java.lang.String, org.bson.codecs.pojo.PropertyModel<S>);
    descriptor: (Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator;Ljava/lang/String;Lorg/bson/codecs/pojo/PropertyModel;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=8, args_size=6
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonReader reader
        start local 2 // org.bson.codecs.DecoderContext decoderContext
        start local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
        start local 4 // java.lang.String name
        start local 5 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 207
            aload 5 /* propertyModel */
            ifnull 26
         1: .line 209
            aconst_null
            astore 6 /* value */
        start local 6 // java.lang.Object value
         2: .line 210
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.getCurrentBsonType:()Lorg/bson/BsonType;
            getstatic org.bson.BsonType.NULL:Lorg/bson/BsonType;
            if_acmpne 5
         3: .line 211
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readNull:()V
         4: .line 212
            goto 11
         5: .line 213
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 5 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getCachedCodec:()Lorg/bson/codecs/Codec;
            astore 7 /* codec */
        start local 7 // org.bson.codecs.Codec codec
         6: .line 214
            aload 7 /* codec */
            ifnonnull 10
         7: .line 215
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "Missing codec in '%s' for '%s'"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         8: .line 216
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 5 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getName:()Ljava/lang/String;
            aastore
         9: .line 215
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 218
      StackMap locals: org.bson.codecs.Codec
      StackMap stack:
            aload 2 /* decoderContext */
            aload 7 /* codec */
            aload 1 /* reader */
            invokevirtual org.bson.codecs.DecoderContext.decodeWithChildContext:(Lorg/bson/codecs/Decoder;Lorg/bson/BsonReader;)Ljava/lang/Object;
            astore 6 /* value */
        end local 7 // org.bson.codecs.Codec codec
        11: .line 220
      StackMap locals:
      StackMap stack:
            aload 5 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.isWritable:()Z
            ifeq 29
        12: .line 221
            aload 3 /* instanceCreator */
            aload 6 /* value */
            aload 5 /* propertyModel */
            invokeinterface org.bson.codecs.pojo.InstanceCreator.set:(Ljava/lang/Object;Lorg/bson/codecs/pojo/PropertyModel;)V
        end local 6 // java.lang.Object value
        13: .line 223
            goto 29
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonReader org.bson.codecs.DecoderContext org.bson.codecs.pojo.InstanceCreator java.lang.String org.bson.codecs.pojo.PropertyModel
      StackMap stack: org.bson.BsonInvalidOperationException
        14: astore 6 /* e */
        start local 6 // org.bson.BsonInvalidOperationException e
        15: .line 224
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "Failed to decode '%s'. Decoding '%s' errored with: %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        16: .line 225
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* name */
            aastore
            dup
            iconst_2
            aload 6 /* e */
            invokevirtual org.bson.BsonInvalidOperationException.getMessage:()Ljava/lang/String;
            aastore
        17: .line 224
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        18: .line 225
            aload 6 /* e */
        19: .line 224
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // org.bson.BsonInvalidOperationException e
        20: .line 226
      StackMap locals:
      StackMap stack: org.bson.codecs.configuration.CodecConfigurationException
            astore 6 /* e */
        start local 6 // org.bson.codecs.configuration.CodecConfigurationException e
        21: .line 227
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "Failed to decode '%s'. Decoding '%s' errored with: %s"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        22: .line 228
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* name */
            aastore
            dup
            iconst_2
            aload 6 /* e */
            invokevirtual org.bson.codecs.configuration.CodecConfigurationException.getMessage:()Ljava/lang/String;
            aastore
        23: .line 227
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        24: .line 228
            aload 6 /* e */
        25: .line 227
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 6 // org.bson.codecs.configuration.CodecConfigurationException e
        26: .line 231
      StackMap locals:
      StackMap stack:
            getstatic org.bson.codecs.pojo.PojoCodecImpl.LOGGER:Lorg/bson/diagnostics/Logger;
            invokeinterface org.bson.diagnostics.Logger.isTraceEnabled:()Z
            ifeq 28
        27: .line 232
            getstatic org.bson.codecs.pojo.PojoCodecImpl.LOGGER:Lorg/bson/diagnostics/Logger;
            ldc "Found property not present in the ClassModel: %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* name */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.bson.diagnostics.Logger.trace:(Ljava/lang/String;)V
        28: .line 234
      StackMap locals:
      StackMap stack:
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.skipValue:()V
        29: .line 236
      StackMap locals:
      StackMap stack:
            return
        end local 5 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 4 // java.lang.String name
        end local 3 // org.bson.codecs.pojo.InstanceCreator instanceCreator
        end local 2 // org.bson.codecs.DecoderContext decoderContext
        end local 1 // org.bson.BsonReader reader
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   30     0             this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   30     1           reader  Lorg/bson/BsonReader;
            0   30     2   decoderContext  Lorg/bson/codecs/DecoderContext;
            0   30     3  instanceCreator  Lorg/bson/codecs/pojo/InstanceCreator<TT;>;
            0   30     4             name  Ljava/lang/String;
            0   30     5    propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            2   13     6            value  TS;
            6   11     7            codec  Lorg/bson/codecs/Codec<TS;>;
           15   20     6                e  Lorg/bson/BsonInvalidOperationException;
           21   26     6                e  Lorg/bson/codecs/configuration/CodecConfigurationException;
      Exception table:
        from    to  target  type
           1    13      14  Class org.bson.BsonInvalidOperationException
           1    13      20  Class org.bson.codecs.configuration.CodecConfigurationException
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/BsonReader;Lorg/bson/codecs/DecoderContext;Lorg/bson/codecs/pojo/InstanceCreator<TT;>;Ljava/lang/String;Lorg/bson/codecs/pojo/PropertyModel<TS;>;)V
    MethodParameters:
                 Name  Flags
      reader           final
      decoderContext   final
      instanceCreator  final
      name             final
      propertyModel    final

  private <S> void addToCache(org.bson.codecs.pojo.PropertyModel<S>);
    descriptor: (Lorg/bson/codecs/pojo/PropertyModel;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 239
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getCodec:()Lorg/bson/codecs/Codec;
            ifnull 1
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getCodec:()Lorg/bson/codecs/Codec;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* this */
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.specializePojoCodec:(Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/Codec;
      StackMap locals:
      StackMap stack: org.bson.codecs.Codec
         2: astore 2 /* codec */
        start local 2 // org.bson.codecs.Codec codec
         3: .line 240
            aload 1 /* propertyModel */
            aload 2 /* codec */
            invokevirtual org.bson.codecs.pojo.PropertyModel.cachedCodec:(Lorg/bson/codecs/Codec;)V
         4: .line 241
            return
        end local 2 // org.bson.codecs.Codec codec
        end local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    5     1  propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            3    5     2          codec  Lorg/bson/codecs/Codec<TS;>;
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/PropertyModel<TS;>;)V
    MethodParameters:
               Name  Flags
      propertyModel  final

  private <S, V> boolean areEquivalentTypes(java.lang.Class<S>, java.lang.Class<V>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // java.lang.Class t1
        start local 2 // java.lang.Class t2
         0: .line 244
            aload 1 /* t1 */
            aload 2 /* t2 */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 2
         1: .line 245
            iconst_1
            ireturn
         2: .line 246
      StackMap locals:
      StackMap stack:
            ldc Ljava/util/Collection;
            aload 1 /* t1 */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 4
            ldc Ljava/util/Collection;
            aload 2 /* t2 */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 4
         3: .line 247
            iconst_1
            ireturn
         4: .line 248
      StackMap locals:
      StackMap stack:
            ldc Ljava/util/Map;
            aload 1 /* t1 */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 6
            ldc Ljava/util/Map;
            aload 2 /* t2 */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 6
         5: .line 249
            iconst_1
            ireturn
         6: .line 251
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // java.lang.Class t2
        end local 1 // java.lang.Class t1
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    7     1    t1  Ljava/lang/Class<TS;>;
            0    7     2    t2  Ljava/lang/Class<TV;>;
    Signature: <S:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TS;>;Ljava/lang/Class<TV;>;)Z
    MethodParameters:
      Name  Flags
      t1    final
      t2    final

  private <S> org.bson.codecs.Codec<S> specializePojoCodec(org.bson.codecs.pojo.PropertyModel<S>);
    descriptor: (Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/Codec;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 258
            aload 0 /* this */
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.getCodecFromPropertyRegistry:(Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/Codec;
            astore 2 /* codec */
        start local 2 // org.bson.codecs.Codec codec
         1: .line 259
            aload 2 /* codec */
            instanceof org.bson.codecs.pojo.PojoCodec
            ifeq 8
         2: .line 260
            aload 2 /* codec */
            checkcast org.bson.codecs.pojo.PojoCodec
            astore 3 /* pojoCodec */
        start local 3 // org.bson.codecs.pojo.PojoCodec pojoCodec
         3: .line 261
            aload 0 /* this */
            aload 3 /* pojoCodec */
            invokevirtual org.bson.codecs.pojo.PojoCodec.getClassModel:()Lorg/bson/codecs/pojo/ClassModel;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.getSpecializedClassModel:(Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/pojo/ClassModel;
            astore 4 /* specialized */
        start local 4 // org.bson.codecs.pojo.ClassModel specialized
         4: .line 262
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
            aload 4 /* specialized */
            invokeinterface java.util.concurrent.ConcurrentMap.containsKey:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 263
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
            aload 4 /* specialized */
            invokeinterface java.util.concurrent.ConcurrentMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.bson.codecs.Codec
            astore 2 /* codec */
         6: .line 264
            goto 8
         7: .line 265
      StackMap locals: org.bson.codecs.Codec org.bson.codecs.pojo.PojoCodec org.bson.codecs.pojo.ClassModel
      StackMap stack:
            new org.bson.codecs.pojo.LazyPojoCodec
            dup
            aload 4 /* specialized */
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.registry:Lorg/bson/codecs/configuration/CodecRegistry;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.propertyCodecRegistry:Lorg/bson/codecs/pojo/PropertyCodecRegistry;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.discriminatorLookup:Lorg/bson/codecs/pojo/DiscriminatorLookup;
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.codecCache:Ljava/util/concurrent/ConcurrentMap;
            invokespecial org.bson.codecs.pojo.LazyPojoCodec.<init>:(Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/PropertyCodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Ljava/util/concurrent/ConcurrentMap;)V
            astore 2 /* codec */
        end local 4 // org.bson.codecs.pojo.ClassModel specialized
        end local 3 // org.bson.codecs.pojo.PojoCodec pojoCodec
         8: .line 268
      StackMap locals:
      StackMap stack:
            aload 2 /* codec */
            areturn
        end local 2 // org.bson.codecs.Codec codec
        end local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    9     0           this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    9     1  propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            1    9     2          codec  Lorg/bson/codecs/Codec<TS;>;
            3    8     3      pojoCodec  Lorg/bson/codecs/pojo/PojoCodec<TS;>;
            4    8     4    specialized  Lorg/bson/codecs/pojo/ClassModel<TS;>;
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/PropertyModel<TS;>;)Lorg/bson/codecs/Codec<TS;>;
    MethodParameters:
               Name  Flags
      propertyModel  final

  private <S> org.bson.codecs.Codec<S> getCodecFromPropertyRegistry(org.bson.codecs.pojo.PropertyModel<S>);
    descriptor: (Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/Codec;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 273
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.propertyCodecRegistry:Lorg/bson/codecs/pojo/PropertyCodecRegistry;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokeinterface org.bson.codecs.pojo.PropertyCodecRegistry.get:(Lorg/bson/codecs/pojo/TypeWithTypeParameters;)Lorg/bson/codecs/Codec;
         1: areturn
         2: .line 274
      StackMap locals:
      StackMap stack: org.bson.codecs.configuration.CodecConfigurationException
            astore 2 /* e */
        start local 2 // org.bson.codecs.configuration.CodecConfigurationException e
         3: .line 275
            new org.bson.codecs.pojo.LazyMissingCodec
            dup
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokevirtual org.bson.codecs.pojo.TypeData.getType:()Ljava/lang/Class;
            aload 2 /* e */
            invokespecial org.bson.codecs.pojo.LazyMissingCodec.<init>:(Ljava/lang/Class;Lorg/bson/codecs/configuration/CodecConfigurationException;)V
            areturn
        end local 2 // org.bson.codecs.configuration.CodecConfigurationException e
        end local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    4     1  propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TS;>;
            3    4     2              e  Lorg/bson/codecs/configuration/CodecConfigurationException;
      Exception table:
        from    to  target  type
           0     1       2  Class org.bson.codecs.configuration.CodecConfigurationException
    Signature: <S:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/PropertyModel<TS;>;)Lorg/bson/codecs/Codec<TS;>;
    MethodParameters:
               Name  Flags
      propertyModel  final

  private <S, V> org.bson.codecs.pojo.ClassModel<S> getSpecializedClassModel(org.bson.codecs.pojo.ClassModel<S>, org.bson.codecs.pojo.PropertyModel<V>);
    descriptor: (Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/pojo/ClassModel;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=10, locals=14, args_size=3
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.ClassModel clazzModel
        start local 2 // org.bson.codecs.pojo.PropertyModel propertyModel
         0: .line 281
            aload 2 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.useDiscriminator:()Ljava/lang/Boolean;
            ifnonnull 1
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
            goto 2
         1: .line 282
      StackMap locals:
      StackMap stack:
            aload 2 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.useDiscriminator:()Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.booleanValue:()Z
         2: .line 281
      StackMap locals:
      StackMap stack: int
            istore 3 /* useDiscriminator */
        start local 3 // boolean useDiscriminator
         3: .line 283
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminatorKey:()Ljava/lang/String;
            ifnull 4
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminator:()Ljava/lang/String;
            ifnull 4
            iconst_1
            goto 5
      StackMap locals: int
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: istore 4 /* validDiscriminator */
        start local 4 // boolean validDiscriminator
         6: .line 284
            iload 3 /* useDiscriminator */
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
            if_icmpeq 7
            iload 4 /* validDiscriminator */
            ifeq 7
            iconst_1
            goto 8
      StackMap locals: int
      StackMap stack:
         7: iconst_0
      StackMap locals:
      StackMap stack: int
         8: istore 5 /* changeTheDiscriminator */
        start local 5 // boolean changeTheDiscriminator
         9: .line 286
            aload 2 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokevirtual org.bson.codecs.pojo.TypeData.getTypeParameters:()Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 11
            iload 5 /* changeTheDiscriminator */
            ifne 11
        10: .line 287
            aload 1 /* clazzModel */
            areturn
        11: .line 290
      StackMap locals: int
      StackMap stack:
            new java.util.ArrayList
            dup
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyModels:()Ljava/util/List;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            astore 6 /* concretePropertyModels */
        start local 6 // java.util.ArrayList concretePropertyModels
        12: .line 291
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getIdPropertyModel:()Lorg/bson/codecs/pojo/PropertyModel;
            astore 7 /* concreteIdProperty */
        start local 7 // org.bson.codecs.pojo.PropertyModel concreteIdProperty
        13: .line 293
            aload 2 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokevirtual org.bson.codecs.pojo.TypeData.getTypeParameters:()Ljava/util/List;
            astore 8 /* propertyTypeParameters */
        start local 8 // java.util.List propertyTypeParameters
        14: .line 294
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        15: goto 25
        16: .line 295
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.ClassModel org.bson.codecs.pojo.PropertyModel int int int java.util.ArrayList org.bson.codecs.pojo.PropertyModel java.util.List int
      StackMap stack:
            aload 6 /* concretePropertyModels */
            iload 9 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.PropertyModel
            astore 10 /* model */
        start local 10 // org.bson.codecs.pojo.PropertyModel model
        17: .line 296
            aload 10 /* model */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getName:()Ljava/lang/String;
            astore 11 /* propertyName */
        start local 11 // java.lang.String propertyName
        18: .line 297
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyNameToTypeParameterMap:()Ljava/util/Map;
            aload 11 /* propertyName */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.TypeParameterMap
            astore 12 /* typeParameterMap */
        start local 12 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
        19: .line 298
            aload 12 /* typeParameterMap */
            invokevirtual org.bson.codecs.pojo.TypeParameterMap.hasTypeParameters:()Z
            ifeq 24
        20: .line 299
            aload 0 /* this */
            aload 10 /* model */
            aload 12 /* typeParameterMap */
            aload 8 /* propertyTypeParameters */
            invokevirtual org.bson.codecs.pojo.PojoCodecImpl.getSpecializedPropertyModel:(Lorg/bson/codecs/pojo/PropertyModel;Lorg/bson/codecs/pojo/TypeParameterMap;Ljava/util/List;)Lorg/bson/codecs/pojo/PropertyModel;
            astore 13 /* concretePropertyModel */
        start local 13 // org.bson.codecs.pojo.PropertyModel concretePropertyModel
        21: .line 300
            aload 6 /* concretePropertyModels */
            iload 9 /* i */
            aload 13 /* concretePropertyModel */
            invokevirtual java.util.ArrayList.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
        22: .line 301
            aload 7 /* concreteIdProperty */
            ifnull 24
            aload 7 /* concreteIdProperty */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getName:()Ljava/lang/String;
            aload 11 /* propertyName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 24
        23: .line 302
            aload 13 /* concretePropertyModel */
            astore 7 /* concreteIdProperty */
        end local 13 // org.bson.codecs.pojo.PropertyModel concretePropertyModel
        end local 12 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
        end local 11 // java.lang.String propertyName
        end local 10 // org.bson.codecs.pojo.PropertyModel model
        24: .line 294
      StackMap locals:
      StackMap stack:
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        25: iload 9 /* i */
            aload 6 /* concretePropertyModels */
            invokevirtual java.util.ArrayList.size:()I
            if_icmplt 16
        end local 9 // int i
        26: .line 307
            iload 5 /* changeTheDiscriminator */
            ifeq 27
            aload 2 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.useDiscriminator:()Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.booleanValue:()Z
            goto 28
      StackMap locals:
      StackMap stack:
        27: aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.useDiscriminator:()Z
      StackMap locals:
      StackMap stack: int
        28: istore 9 /* discriminatorEnabled */
        start local 9 // boolean discriminatorEnabled
        29: .line 308
            new org.bson.codecs.pojo.ClassModel
            dup
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getType:()Ljava/lang/Class;
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyNameToTypeParameterMap:()Ljava/util/Map;
        30: .line 309
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getInstanceCreatorFactory:()Lorg/bson/codecs/pojo/InstanceCreatorFactory;
            iload 9 /* discriminatorEnabled */
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminatorKey:()Ljava/lang/String;
        31: .line 310
            aload 1 /* clazzModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getDiscriminator:()Ljava/lang/String;
            aload 1 /* clazzModel */
            aload 7 /* concreteIdProperty */
            invokestatic org.bson.codecs.pojo.IdPropertyModelHolder.create:(Lorg/bson/codecs/pojo/ClassModel;Lorg/bson/codecs/pojo/PropertyModel;)Lorg/bson/codecs/pojo/IdPropertyModelHolder;
            aload 6 /* concretePropertyModels */
        32: .line 308
            invokespecial org.bson.codecs.pojo.ClassModel.<init>:(Ljava/lang/Class;Ljava/util/Map;Lorg/bson/codecs/pojo/InstanceCreatorFactory;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;Lorg/bson/codecs/pojo/IdPropertyModelHolder;Ljava/util/List;)V
            areturn
        end local 9 // boolean discriminatorEnabled
        end local 8 // java.util.List propertyTypeParameters
        end local 7 // org.bson.codecs.pojo.PropertyModel concreteIdProperty
        end local 6 // java.util.ArrayList concretePropertyModels
        end local 5 // boolean changeTheDiscriminator
        end local 4 // boolean validDiscriminator
        end local 3 // boolean useDiscriminator
        end local 2 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 1 // org.bson.codecs.pojo.ClassModel clazzModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   33     0                    this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   33     1              clazzModel  Lorg/bson/codecs/pojo/ClassModel<TS;>;
            0   33     2           propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TV;>;
            3   33     3        useDiscriminator  Z
            6   33     4      validDiscriminator  Z
            9   33     5  changeTheDiscriminator  Z
           12   33     6  concretePropertyModels  Ljava/util/ArrayList<Lorg/bson/codecs/pojo/PropertyModel<*>;>;
           13   33     7      concreteIdProperty  Lorg/bson/codecs/pojo/PropertyModel<*>;
           14   33     8  propertyTypeParameters  Ljava/util/List<Lorg/bson/codecs/pojo/TypeData<*>;>;
           15   26     9                       i  I
           17   24    10                   model  Lorg/bson/codecs/pojo/PropertyModel<*>;
           18   24    11            propertyName  Ljava/lang/String;
           19   24    12        typeParameterMap  Lorg/bson/codecs/pojo/TypeParameterMap;
           21   24    13   concretePropertyModel  Lorg/bson/codecs/pojo/PropertyModel<*>;
           29   33     9    discriminatorEnabled  Z
    Signature: <S:Ljava/lang/Object;V:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/ClassModel<TS;>;Lorg/bson/codecs/pojo/PropertyModel<TV;>;)Lorg/bson/codecs/pojo/ClassModel<TS;>;
    MethodParameters:
               Name  Flags
      clazzModel     final
      propertyModel  final

  private <V> org.bson.codecs.pojo.PropertyModel<V> getSpecializedPropertyModel(org.bson.codecs.pojo.PropertyModel<V>, org.bson.codecs.pojo.TypeParameterMap, java.util.List<org.bson.codecs.pojo.TypeData<?>>);
    descriptor: (Lorg/bson/codecs/pojo/PropertyModel;Lorg/bson/codecs/pojo/TypeParameterMap;Ljava/util/List;)Lorg/bson/codecs/pojo/PropertyModel;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=12, args_size=4
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
        start local 2 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
        start local 3 // java.util.List propertyTypeParameters
         0: .line 317
            aload 2 /* typeParameterMap */
            invokevirtual org.bson.codecs.pojo.TypeParameterMap.getPropertyToClassParamIndexMap:()Ljava/util/Map;
            astore 5 /* propertyToClassParamIndexMap */
        start local 5 // java.util.Map propertyToClassParamIndexMap
         1: .line 318
            aload 5 /* propertyToClassParamIndexMap */
            iconst_m1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 6 /* classTypeParamRepresentsWholeProperty */
        start local 6 // java.lang.Integer classTypeParamRepresentsWholeProperty
         2: .line 319
            aload 6 /* classTypeParamRepresentsWholeProperty */
            ifnull 5
         3: .line 320
            aload 3 /* propertyTypeParameters */
            aload 6 /* classTypeParamRepresentsWholeProperty */
            invokevirtual java.lang.Integer.intValue:()I
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.TypeData
            astore 4 /* specializedPropertyType */
        start local 4 // org.bson.codecs.pojo.TypeData specializedPropertyType
         4: .line 321
            goto 18
        end local 4 // org.bson.codecs.pojo.TypeData specializedPropertyType
         5: .line 322
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.PropertyModel org.bson.codecs.pojo.TypeParameterMap java.util.List top java.util.Map java.lang.Integer
      StackMap stack:
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokevirtual org.bson.codecs.pojo.TypeData.getType:()Ljava/lang/Class;
            invokestatic org.bson.codecs.pojo.TypeData.builder:(Ljava/lang/Class;)Lorg/bson/codecs/pojo/TypeData$Builder;
            astore 7 /* builder */
        start local 7 // org.bson.codecs.pojo.TypeData$Builder builder
         6: .line 323
            new java.util.ArrayList
            dup
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            invokevirtual org.bson.codecs.pojo.TypeData.getTypeParameters:()Ljava/util/List;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            astore 8 /* typeParameters */
        start local 8 // java.util.List typeParameters
         7: .line 324
            iconst_0
            istore 9 /* i */
        start local 9 // int i
         8: goto 15
         9: .line 325
      StackMap locals: org.bson.codecs.pojo.TypeData$Builder java.util.List int
      StackMap stack:
            aload 5 /* propertyToClassParamIndexMap */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 11
            goto 13
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.PropertyModel org.bson.codecs.pojo.TypeParameterMap java.util.List top java.util.Map java.lang.Integer org.bson.codecs.pojo.TypeData$Builder java.util.List int top java.util.Iterator
      StackMap stack:
        10: aload 11
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 10 /* mapping */
        start local 10 // java.util.Map$Entry mapping
        11: .line 326
            aload 10 /* mapping */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.Integer
            iload 9 /* i */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokevirtual java.lang.Integer.equals:(Ljava/lang/Object;)Z
            ifeq 13
        12: .line 327
            aload 8 /* typeParameters */
            iload 9 /* i */
            aload 3 /* propertyTypeParameters */
            aload 10 /* mapping */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.TypeData
            invokeinterface java.util.List.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
        end local 10 // java.util.Map$Entry mapping
        13: .line 325
      StackMap locals:
      StackMap stack:
            aload 11
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        14: .line 324
            iinc 9 /* i */ 1
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.PropertyModel org.bson.codecs.pojo.TypeParameterMap java.util.List top java.util.Map java.lang.Integer org.bson.codecs.pojo.TypeData$Builder java.util.List int
      StackMap stack:
        15: iload 9 /* i */
            aload 8 /* typeParameters */
            invokeinterface java.util.List.size:()I
            if_icmplt 9
        end local 9 // int i
        16: .line 331
            aload 7 /* builder */
            aload 8 /* typeParameters */
            invokevirtual org.bson.codecs.pojo.TypeData$Builder.addTypeParameters:(Ljava/util/List;)Lorg/bson/codecs/pojo/TypeData$Builder;
            pop
        17: .line 332
            aload 7 /* builder */
            invokevirtual org.bson.codecs.pojo.TypeData$Builder.build:()Lorg/bson/codecs/pojo/TypeData;
            astore 4 /* specializedPropertyType */
        end local 8 // java.util.List typeParameters
        end local 7 // org.bson.codecs.pojo.TypeData$Builder builder
        start local 4 // org.bson.codecs.pojo.TypeData specializedPropertyType
        18: .line 334
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.PropertyModel org.bson.codecs.pojo.TypeParameterMap java.util.List org.bson.codecs.pojo.TypeData java.util.Map java.lang.Integer
      StackMap stack:
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getTypeData:()Lorg/bson/codecs/pojo/TypeData;
            aload 4 /* specializedPropertyType */
            invokevirtual org.bson.codecs.pojo.TypeData.equals:(Ljava/lang/Object;)Z
            ifeq 20
        19: .line 335
            aload 1 /* propertyModel */
            areturn
        20: .line 338
      StackMap locals:
      StackMap stack:
            new org.bson.codecs.pojo.PropertyModel
            dup
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getName:()Ljava/lang/String;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getReadName:()Ljava/lang/String;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getWriteName:()Ljava/lang/String;
        21: .line 339
            aload 4 /* specializedPropertyType */
            aconst_null
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getPropertySerialization:()Lorg/bson/codecs/pojo/PropertySerialization;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.useDiscriminator:()Ljava/lang/Boolean;
        22: .line 340
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getPropertyAccessor:()Lorg/bson/codecs/pojo/PropertyAccessor;
            aload 1 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getError:()Ljava/lang/String;
        23: .line 338
            invokespecial org.bson.codecs.pojo.PropertyModel.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/bson/codecs/pojo/TypeData;Lorg/bson/codecs/Codec;Lorg/bson/codecs/pojo/PropertySerialization;Ljava/lang/Boolean;Lorg/bson/codecs/pojo/PropertyAccessor;Ljava/lang/String;)V
            areturn
        end local 6 // java.lang.Integer classTypeParamRepresentsWholeProperty
        end local 5 // java.util.Map propertyToClassParamIndexMap
        end local 4 // org.bson.codecs.pojo.TypeData specializedPropertyType
        end local 3 // java.util.List propertyTypeParameters
        end local 2 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
        end local 1 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                                   Name  Signature
            0   24     0                                   this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   24     1                          propertyModel  Lorg/bson/codecs/pojo/PropertyModel<TV;>;
            0   24     2                       typeParameterMap  Lorg/bson/codecs/pojo/TypeParameterMap;
            0   24     3                 propertyTypeParameters  Ljava/util/List<Lorg/bson/codecs/pojo/TypeData<*>;>;
            4    5     4                specializedPropertyType  Lorg/bson/codecs/pojo/TypeData<TV;>;
           18   24     4                specializedPropertyType  Lorg/bson/codecs/pojo/TypeData<TV;>;
            1   24     5           propertyToClassParamIndexMap  Ljava/util/Map<Ljava/lang/Integer;Ljava/lang/Integer;>;
            2   24     6  classTypeParamRepresentsWholeProperty  Ljava/lang/Integer;
            6   18     7                                builder  Lorg/bson/codecs/pojo/TypeData$Builder<TV;>;
            7   18     8                         typeParameters  Ljava/util/List<Lorg/bson/codecs/pojo/TypeData<*>;>;
            8   16     9                                      i  I
           11   13    10                                mapping  Ljava/util/Map$Entry<Ljava/lang/Integer;Ljava/lang/Integer;>;
    Signature: <V:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/PropertyModel<TV;>;Lorg/bson/codecs/pojo/TypeParameterMap;Ljava/util/List<Lorg/bson/codecs/pojo/TypeData<*>;>;)Lorg/bson/codecs/pojo/PropertyModel<TV;>;
    MethodParameters:
                        Name  Flags
      propertyModel           final
      typeParameterMap        final
      propertyTypeParameters  final

  private org.bson.codecs.Codec<T> getCodecFromDocument(org.bson.BsonReader, boolean, java.lang.String, org.bson.codecs.configuration.CodecRegistry, org.bson.codecs.pojo.DiscriminatorLookup, org.bson.codecs.Codec<T>);
    descriptor: (Lorg/bson/BsonReader;ZLjava/lang/String;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Lorg/bson/codecs/Codec;)Lorg/bson/codecs/Codec;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=12, args_size=7
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.BsonReader reader
        start local 2 // boolean useDiscriminator
        start local 3 // java.lang.String discriminatorKey
        start local 4 // org.bson.codecs.configuration.CodecRegistry registry
        start local 5 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
        start local 6 // org.bson.codecs.Codec defaultCodec
         0: .line 347
            aload 6 /* defaultCodec */
            astore 7 /* codec */
        start local 7 // org.bson.codecs.Codec codec
         1: .line 348
            iload 2 /* useDiscriminator */
            ifeq 20
         2: .line 349
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.getMark:()Lorg/bson/BsonReaderMark;
            astore 8 /* mark */
        start local 8 // org.bson.BsonReaderMark mark
         3: .line 350
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readStartDocument:()V
         4: .line 351
            iconst_0
            istore 9 /* discriminatorKeyFound */
        start local 9 // boolean discriminatorKeyFound
         5: .line 352
            goto 18
         6: .line 353
      StackMap locals: org.bson.codecs.Codec org.bson.BsonReaderMark int
      StackMap stack:
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readName:()Ljava/lang/String;
            astore 10 /* name */
        start local 10 // java.lang.String name
         7: .line 354
            aload 3 /* discriminatorKey */
            aload 10 /* name */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 17
         8: .line 355
            iconst_1
            istore 9 /* discriminatorKeyFound */
         9: .line 357
            aload 4 /* registry */
            aload 5 /* discriminatorLookup */
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readString:()Ljava/lang/String;
            invokevirtual org.bson.codecs.pojo.DiscriminatorLookup.lookup:(Ljava/lang/String;)Ljava/lang/Class;
            invokeinterface org.bson.codecs.configuration.CodecRegistry.get:(Ljava/lang/Class;)Lorg/bson/codecs/Codec;
            astore 7 /* codec */
        10: .line 358
            goto 18
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.BsonReader int java.lang.String org.bson.codecs.configuration.CodecRegistry org.bson.codecs.pojo.DiscriminatorLookup org.bson.codecs.Codec org.bson.codecs.Codec org.bson.BsonReaderMark int java.lang.String
      StackMap stack: java.lang.Exception
        11: astore 11 /* e */
        start local 11 // java.lang.Exception e
        12: .line 359
            new org.bson.codecs.configuration.CodecConfigurationException
            dup
            ldc "Failed to decode '%s'. Decoding errored with: %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        13: .line 360
            aload 0 /* this */
            getfield org.bson.codecs.pojo.PojoCodecImpl.classModel:Lorg/bson/codecs/pojo/ClassModel;
            invokevirtual org.bson.codecs.pojo.ClassModel.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 11 /* e */
            invokevirtual java.lang.Exception.getMessage:()Ljava/lang/String;
            aastore
        14: .line 359
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        15: .line 360
            aload 11 /* e */
        16: .line 359
            invokespecial org.bson.codecs.configuration.CodecConfigurationException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 11 // java.lang.Exception e
        17: .line 363
      StackMap locals:
      StackMap stack:
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.skipValue:()V
        end local 10 // java.lang.String name
        18: .line 352
      StackMap locals:
      StackMap stack:
            iload 9 /* discriminatorKeyFound */
            ifne 19
            aload 1 /* reader */
            invokeinterface org.bson.BsonReader.readBsonType:()Lorg/bson/BsonType;
            getstatic org.bson.BsonType.END_OF_DOCUMENT:Lorg/bson/BsonType;
            if_acmpne 6
        19: .line 366
      StackMap locals:
      StackMap stack:
            aload 8 /* mark */
            invokeinterface org.bson.BsonReaderMark.reset:()V
        end local 9 // boolean discriminatorKeyFound
        end local 8 // org.bson.BsonReaderMark mark
        20: .line 368
      StackMap locals:
      StackMap stack:
            aload 7 /* codec */
            areturn
        end local 7 // org.bson.codecs.Codec codec
        end local 6 // org.bson.codecs.Codec defaultCodec
        end local 5 // org.bson.codecs.pojo.DiscriminatorLookup discriminatorLookup
        end local 4 // org.bson.codecs.configuration.CodecRegistry registry
        end local 3 // java.lang.String discriminatorKey
        end local 2 // boolean useDiscriminator
        end local 1 // org.bson.BsonReader reader
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   21     0                   this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0   21     1                 reader  Lorg/bson/BsonReader;
            0   21     2       useDiscriminator  Z
            0   21     3       discriminatorKey  Ljava/lang/String;
            0   21     4               registry  Lorg/bson/codecs/configuration/CodecRegistry;
            0   21     5    discriminatorLookup  Lorg/bson/codecs/pojo/DiscriminatorLookup;
            0   21     6           defaultCodec  Lorg/bson/codecs/Codec<TT;>;
            1   21     7                  codec  Lorg/bson/codecs/Codec<TT;>;
            3   20     8                   mark  Lorg/bson/BsonReaderMark;
            5   20     9  discriminatorKeyFound  Z
            7   18    10                   name  Ljava/lang/String;
           12   17    11                      e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           9    10      11  Class java.lang.Exception
    Signature: (Lorg/bson/BsonReader;ZLjava/lang/String;Lorg/bson/codecs/configuration/CodecRegistry;Lorg/bson/codecs/pojo/DiscriminatorLookup;Lorg/bson/codecs/Codec<TT;>;)Lorg/bson/codecs/Codec<TT;>;
    MethodParameters:
                     Name  Flags
      reader               final
      useDiscriminator     final
      discriminatorKey     final
      registry             final
      discriminatorLookup  final
      defaultCodec         final

  private org.bson.codecs.pojo.PropertyModel<?> getPropertyModelByWriteName(org.bson.codecs.pojo.ClassModel<T>, java.lang.String);
    descriptor: (Lorg/bson/codecs/pojo/ClassModel;Ljava/lang/String;)Lorg/bson/codecs/pojo/PropertyModel;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=5, args_size=3
        start local 0 // org.bson.codecs.pojo.PojoCodecImpl this
        start local 1 // org.bson.codecs.pojo.ClassModel classModel
        start local 2 // java.lang.String readName
         0: .line 372
            aload 1 /* classModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyModels:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: org.bson.codecs.pojo.PojoCodecImpl org.bson.codecs.pojo.ClassModel java.lang.String top java.util.Iterator
      StackMap stack:
         1: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.PropertyModel
            astore 3 /* propertyModel */
        start local 3 // org.bson.codecs.pojo.PropertyModel propertyModel
         2: .line 373
            aload 3 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.isWritable:()Z
            ifeq 4
            aload 3 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getWriteName:()Ljava/lang/String;
            aload 2 /* readName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 374
            aload 3 /* propertyModel */
            areturn
        end local 3 // org.bson.codecs.pojo.PropertyModel propertyModel
         4: .line 372
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 377
            aconst_null
            areturn
        end local 2 // java.lang.String readName
        end local 1 // org.bson.codecs.pojo.ClassModel classModel
        end local 0 // org.bson.codecs.pojo.PojoCodecImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lorg/bson/codecs/pojo/PojoCodecImpl<TT;>;
            0    6     1     classModel  Lorg/bson/codecs/pojo/ClassModel<TT;>;
            0    6     2       readName  Ljava/lang/String;
            2    4     3  propertyModel  Lorg/bson/codecs/pojo/PropertyModel<*>;
    Signature: (Lorg/bson/codecs/pojo/ClassModel<TT;>;Ljava/lang/String;)Lorg/bson/codecs/pojo/PropertyModel<*>;
    MethodParameters:
            Name  Flags
      classModel  final
      readName    final

  private static <T> boolean shouldSpecialize(org.bson.codecs.pojo.ClassModel<T>);
    descriptor: (Lorg/bson/codecs/pojo/ClassModel;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=5, args_size=1
        start local 0 // org.bson.codecs.pojo.ClassModel classModel
         0: .line 381
            aload 0 /* classModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.hasTypeParameters:()Z
            ifne 2
         1: .line 382
            iconst_1
            ireturn
         2: .line 385
      StackMap locals:
      StackMap stack:
            aload 0 /* classModel */
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyNameToTypeParameterMap:()Ljava/util/Map;
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 2
            goto 8
      StackMap locals: org.bson.codecs.pojo.ClassModel top java.util.Iterator
      StackMap stack:
         3: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 1 /* entry */
        start local 1 // java.util.Map$Entry entry
         4: .line 386
            aload 1 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast org.bson.codecs.pojo.TypeParameterMap
            astore 3 /* typeParameterMap */
        start local 3 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
         5: .line 387
            aload 0 /* classModel */
            aload 1 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual org.bson.codecs.pojo.ClassModel.getPropertyModel:(Ljava/lang/String;)Lorg/bson/codecs/pojo/PropertyModel;
            astore 4 /* propertyModel */
        start local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
         6: .line 388
            aload 3 /* typeParameterMap */
            invokevirtual org.bson.codecs.pojo.TypeParameterMap.hasTypeParameters:()Z
            ifeq 8
            aload 4 /* propertyModel */
            ifnull 7
            aload 4 /* propertyModel */
            invokevirtual org.bson.codecs.pojo.PropertyModel.getCodec:()Lorg/bson/codecs/Codec;
            ifnonnull 8
         7: .line 389
      StackMap locals: org.bson.codecs.pojo.ClassModel java.util.Map$Entry java.util.Iterator org.bson.codecs.pojo.TypeParameterMap org.bson.codecs.pojo.PropertyModel
      StackMap stack:
            iconst_0
            ireturn
        end local 4 // org.bson.codecs.pojo.PropertyModel propertyModel
        end local 3 // org.bson.codecs.pojo.TypeParameterMap typeParameterMap
        end local 1 // java.util.Map$Entry entry
         8: .line 385
      StackMap locals: org.bson.codecs.pojo.ClassModel top java.util.Iterator
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         9: .line 392
            iconst_1
            ireturn
        end local 0 // org.bson.codecs.pojo.ClassModel classModel
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   10     0        classModel  Lorg/bson/codecs/pojo/ClassModel<TT;>;
            4    8     1             entry  Ljava/util/Map$Entry<Ljava/lang/String;Lorg/bson/codecs/pojo/TypeParameterMap;>;
            5    8     3  typeParameterMap  Lorg/bson/codecs/pojo/TypeParameterMap;
            6    8     4     propertyModel  Lorg/bson/codecs/pojo/PropertyModel<*>;
    Signature: <T:Ljava/lang/Object;>(Lorg/bson/codecs/pojo/ClassModel<TT;>;)Z
    MethodParameters:
            Name  Flags
      classModel  final
}
Signature: <T:Ljava/lang/Object;>Lorg/bson/codecs/pojo/PojoCodec<TT;>;
SourceFile: "PojoCodecImpl.java"
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map
  public final Builder = org.bson.codecs.DecoderContext$Builder of org.bson.codecs.DecoderContext
  public final Builder = org.bson.codecs.pojo.TypeData$Builder of org.bson.codecs.pojo.TypeData