public final class jdk.tools.jlink.internal.BasicImageWriter
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: jdk.tools.jlink.internal.BasicImageWriter
  super_class: java.lang.Object
{
  public static final java.lang.String MODULES_IMAGE_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "modules"

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

  private java.nio.ByteOrder byteOrder;
    descriptor: Ljava/nio/ByteOrder;
    flags: (0x0002) ACC_PRIVATE

  private jdk.tools.jlink.internal.ImageStringsWriter strings;
    descriptor: Ljdk/tools/jlink/internal/ImageStringsWriter;
    flags: (0x0002) ACC_PRIVATE

  private int length;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int[] redirect;
    descriptor: [I
    flags: (0x0002) ACC_PRIVATE

  private jdk.tools.jlink.internal.ImageLocationWriter[] locations;
    descriptor: [Ljdk/tools/jlink/internal/ImageLocationWriter;
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<jdk.tools.jlink.internal.ImageLocationWriter> input;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljdk/tools/jlink/internal/ImageLocationWriter;>;

  private jdk.internal.jimage.ImageStream headerStream;
    descriptor: Ljdk/internal/jimage/ImageStream;
    flags: (0x0002) ACC_PRIVATE

  private jdk.internal.jimage.ImageStream redirectStream;
    descriptor: Ljdk/internal/jimage/ImageStream;
    flags: (0x0002) ACC_PRIVATE

  private jdk.internal.jimage.ImageStream locationOffsetStream;
    descriptor: Ljdk/internal/jimage/ImageStream;
    flags: (0x0002) ACC_PRIVATE

  private jdk.internal.jimage.ImageStream locationStream;
    descriptor: Ljdk/internal/jimage/ImageStream;
    flags: (0x0002) ACC_PRIVATE

  private jdk.internal.jimage.ImageStream allIndexStream;
    descriptor: Ljdk/internal/jimage/ImageStream;
    flags: (0x0002) ACC_PRIVATE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 54
            aload 0 /* this */
            invokestatic java.nio.ByteOrder.nativeOrder:()Ljava/nio/ByteOrder;
            invokespecial jdk.tools.jlink.internal.BasicImageWriter.<init>:(Ljava/nio/ByteOrder;)V
         1: .line 55
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  public void <init>(java.nio.ByteOrder);
    descriptor: (Ljava/nio/ByteOrder;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
        start local 1 // java.nio.ByteOrder byteOrder
         0: .line 57
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 58
            aload 0 /* this */
            aload 1 /* byteOrder */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.nio.ByteOrder
            putfield jdk.tools.jlink.internal.BasicImageWriter.byteOrder:Ljava/nio/ByteOrder;
         2: .line 59
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield jdk.tools.jlink.internal.BasicImageWriter.input:Ljava/util/List;
         3: .line 60
            aload 0 /* this */
            new jdk.tools.jlink.internal.ImageStringsWriter
            dup
            invokespecial jdk.tools.jlink.internal.ImageStringsWriter.<init>:()V
            putfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
         4: .line 61
            aload 0 /* this */
            new jdk.internal.jimage.ImageStream
            dup
            aload 1 /* byteOrder */
            invokespecial jdk.internal.jimage.ImageStream.<init>:(Ljava/nio/ByteOrder;)V
            putfield jdk.tools.jlink.internal.BasicImageWriter.headerStream:Ljdk/internal/jimage/ImageStream;
         5: .line 62
            aload 0 /* this */
            new jdk.internal.jimage.ImageStream
            dup
            aload 1 /* byteOrder */
            invokespecial jdk.internal.jimage.ImageStream.<init>:(Ljava/nio/ByteOrder;)V
            putfield jdk.tools.jlink.internal.BasicImageWriter.redirectStream:Ljdk/internal/jimage/ImageStream;
         6: .line 63
            aload 0 /* this */
            new jdk.internal.jimage.ImageStream
            dup
            aload 1 /* byteOrder */
            invokespecial jdk.internal.jimage.ImageStream.<init>:(Ljava/nio/ByteOrder;)V
            putfield jdk.tools.jlink.internal.BasicImageWriter.locationOffsetStream:Ljdk/internal/jimage/ImageStream;
         7: .line 64
            aload 0 /* this */
            new jdk.internal.jimage.ImageStream
            dup
            aload 1 /* byteOrder */
            invokespecial jdk.internal.jimage.ImageStream.<init>:(Ljava/nio/ByteOrder;)V
            putfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
         8: .line 65
            aload 0 /* this */
            new jdk.internal.jimage.ImageStream
            dup
            aload 1 /* byteOrder */
            invokespecial jdk.internal.jimage.ImageStream.<init>:(Ljava/nio/ByteOrder;)V
            putfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
         9: .line 66
            return
        end local 1 // java.nio.ByteOrder byteOrder
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   10     0       this  Ljdk/tools/jlink/internal/BasicImageWriter;
            0   10     1  byteOrder  Ljava/nio/ByteOrder;
    MethodParameters:
           Name  Flags
      byteOrder  

  public java.nio.ByteOrder getByteOrder();
    descriptor: ()Ljava/nio/ByteOrder;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 69
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.byteOrder:Ljava/nio/ByteOrder;
            areturn
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  public int addString(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
        start local 1 // java.lang.String string
         0: .line 73
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
            aload 1 /* string */
            invokevirtual jdk.tools.jlink.internal.ImageStringsWriter.add:(Ljava/lang/String;)I
            ireturn
        end local 1 // java.lang.String string
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Ljdk/tools/jlink/internal/BasicImageWriter;
            0    1     1  string  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      string  

  public java.lang.String getString(int);
    descriptor: (I)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
        start local 1 // int offset
         0: .line 77
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
            iload 1 /* offset */
            invokevirtual jdk.tools.jlink.internal.ImageStringsWriter.get:(I)Ljava/lang/String;
            areturn
        end local 1 // int offset
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Ljdk/tools/jlink/internal/BasicImageWriter;
            0    1     1  offset  I
    MethodParameters:
        Name  Flags
      offset  

  public void addLocation(java.lang.String, long, long, long);
    descriptor: (Ljava/lang/String;JJJ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=9, args_size=5
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
        start local 1 // java.lang.String fullname
        start local 2 // long contentOffset
        start local 4 // long compressedSize
        start local 6 // long uncompressedSize
         0: .line 83
            aload 1 /* fullname */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
         1: .line 84
            lload 2 /* contentOffset */
            lload 4 /* compressedSize */
            lload 6 /* uncompressedSize */
         2: .line 83
            invokestatic jdk.tools.jlink.internal.ImageLocationWriter.newLocation:(Ljava/lang/String;Ljdk/tools/jlink/internal/ImageStringsWriter;JJJ)Ljdk/tools/jlink/internal/ImageLocationWriter;
         3: .line 82
            astore 8 /* location */
        start local 8 // jdk.tools.jlink.internal.ImageLocationWriter location
         4: .line 85
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.input:Ljava/util/List;
            aload 8 /* location */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         5: .line 86
            aload 0 /* this */
            dup
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            iconst_1
            iadd
            putfield jdk.tools.jlink.internal.BasicImageWriter.length:I
         6: .line 87
            return
        end local 8 // jdk.tools.jlink.internal.ImageLocationWriter location
        end local 6 // long uncompressedSize
        end local 4 // long compressedSize
        end local 2 // long contentOffset
        end local 1 // java.lang.String fullname
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    7     0              this  Ljdk/tools/jlink/internal/BasicImageWriter;
            0    7     1          fullname  Ljava/lang/String;
            0    7     2     contentOffset  J
            0    7     4    compressedSize  J
            0    7     6  uncompressedSize  J
            4    7     8          location  Ljdk/tools/jlink/internal/ImageLocationWriter;
    MethodParameters:
                  Name  Flags
      fullname          
      contentOffset     
      compressedSize    
      uncompressedSize  

  jdk.tools.jlink.internal.ImageLocationWriter[] getLocations();
    descriptor: ()[Ljdk/tools/jlink/internal/ImageLocationWriter;
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 90
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
            areturn
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  int getLocationsCount();
    descriptor: ()I
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 94
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.input:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            ireturn
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  private void generatePerfectHash();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 99
            new jdk.tools.jlink.internal.PerfectHashBuilder
            dup
         1: .line 100
            ldc Ljdk/tools/jlink/internal/PerfectHashBuilder$Entry;
         2: .line 101
            ldc Ljdk/tools/jlink/internal/PerfectHashBuilder$Bucket;
         3: .line 99
            invokespecial jdk.tools.jlink.internal.PerfectHashBuilder.<init>:(Ljava/lang/Class;Ljava/lang/Class;)V
         4: .line 98
            astore 1 /* builder */
        start local 1 // jdk.tools.jlink.internal.PerfectHashBuilder builder
         5: .line 103
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.input:Ljava/util/List;
            aload 1 /* builder */
            invokedynamic accept(Ljdk/tools/jlink/internal/PerfectHashBuilder;)Ljava/util/function/Consumer;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)V
                  jdk/tools/jlink/internal/BasicImageWriter.lambda$0(Ljdk/tools/jlink/internal/PerfectHashBuilder;Ljdk/tools/jlink/internal/ImageLocationWriter;)V (6)
                  (Ljdk/tools/jlink/internal/ImageLocationWriter;)V
            invokeinterface java.util.List.forEach:(Ljava/util/function/Consumer;)V
         6: .line 107
            aload 1 /* builder */
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder.generate:()V
         7: .line 109
            aload 0 /* this */
            aload 1 /* builder */
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder.getCount:()I
            putfield jdk.tools.jlink.internal.BasicImageWriter.length:I
         8: .line 110
            aload 0 /* this */
            aload 1 /* builder */
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder.getRedirect:()[I
            putfield jdk.tools.jlink.internal.BasicImageWriter.redirect:[I
         9: .line 111
            aload 1 /* builder */
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder.getOrder:()[Ljdk/tools/jlink/internal/PerfectHashBuilder$Entry;
            astore 2 /* order */
        start local 2 // jdk.tools.jlink.internal.PerfectHashBuilder$Entry[] order
        10: .line 112
            aload 0 /* this */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            anewarray jdk.tools.jlink.internal.ImageLocationWriter
            putfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
        11: .line 114
            iconst_0
            istore 3 /* i */
        start local 3 // int i
        12: goto 15
        13: .line 115
      StackMap locals: jdk.tools.jlink.internal.PerfectHashBuilder jdk.tools.jlink.internal.PerfectHashBuilder$Entry[] int
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
            iload 3 /* i */
            aload 2 /* order */
            iload 3 /* i */
            aaload
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder$Entry.getValue:()Ljava/lang/Object;
            checkcast jdk.tools.jlink.internal.ImageLocationWriter
            aastore
        14: .line 114
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        15: iload 3 /* i */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            if_icmplt 13
        end local 3 // int i
        16: .line 117
            return
        end local 2 // jdk.tools.jlink.internal.PerfectHashBuilder$Entry[] order
        end local 1 // jdk.tools.jlink.internal.PerfectHashBuilder builder
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   17     0     this  Ljdk/tools/jlink/internal/BasicImageWriter;
            5   17     1  builder  Ljdk/tools/jlink/internal/PerfectHashBuilder<Ljdk/tools/jlink/internal/ImageLocationWriter;>;
           10   17     2    order  [Ljdk/tools/jlink/internal/PerfectHashBuilder$Entry;
           12   16     3        i  I

  private void prepareStringBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 120
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
            invokevirtual jdk.tools.jlink.internal.ImageStringsWriter.getStream:()Ljdk/internal/jimage/ImageStream;
            iconst_2
            invokevirtual jdk.internal.jimage.ImageStream.align:(I)Ljdk/internal/jimage/ImageStream;
            pop
         1: .line 121
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  private void prepareRedirectBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 124
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: goto 4
         2: .line 125
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.redirectStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.redirect:[I
            iload 1 /* i */
            iaload
            invokevirtual jdk.internal.jimage.ImageStream.putInt:(I)Ljdk/internal/jimage/ImageStream;
            pop
         3: .line 124
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         4: iload 1 /* i */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            if_icmplt 2
        end local 1 // int i
         5: .line 127
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;
            1    5     1     i  I

  private void prepareLocationBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 131
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
            iconst_0
            invokevirtual jdk.internal.jimage.ImageStream.put:(I)Ljdk/internal/jimage/ImageStream;
            pop
         1: .line 133
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         2: goto 7
         3: .line 134
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
            iload 1 /* i */
            aaload
            astore 2 /* location */
        start local 2 // jdk.tools.jlink.internal.ImageLocationWriter location
         4: .line 136
            aload 2 /* location */
            ifnull 6
         5: .line 137
            aload 2 /* location */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.tools.jlink.internal.ImageLocationWriter.writeTo:(Ljdk/internal/jimage/ImageStream;)V
        end local 2 // jdk.tools.jlink.internal.ImageLocationWriter location
         6: .line 133
      StackMap locals:
      StackMap stack:
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 1 /* i */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            if_icmplt 3
        end local 1 // int i
         8: .line 141
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
            iconst_2
            invokevirtual jdk.internal.jimage.ImageStream.align:(I)Ljdk/internal/jimage/ImageStream;
            pop
         9: .line 142
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Ljdk/tools/jlink/internal/BasicImageWriter;
            2    8     1         i  I
            4    6     2  location  Ljdk/tools/jlink/internal/ImageLocationWriter;

  private void prepareOffsetBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 145
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: goto 8
         2: .line 146
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
            iload 1 /* i */
            aaload
            astore 2 /* location */
        start local 2 // jdk.tools.jlink.internal.ImageLocationWriter location
         3: .line 147
            aload 2 /* location */
            ifnull 4
            aload 2 /* location */
            invokevirtual jdk.tools.jlink.internal.ImageLocationWriter.getLocationOffset:()I
            goto 5
      StackMap locals: jdk.tools.jlink.internal.ImageLocationWriter
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: istore 3 /* offset */
        start local 3 // int offset
         6: .line 148
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationOffsetStream:Ljdk/internal/jimage/ImageStream;
            iload 3 /* offset */
            invokevirtual jdk.internal.jimage.ImageStream.putInt:(I)Ljdk/internal/jimage/ImageStream;
            pop
        end local 3 // int offset
        end local 2 // jdk.tools.jlink.internal.ImageLocationWriter location
         7: .line 145
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 1 /* i */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            if_icmplt 2
        end local 1 // int i
         9: .line 150
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Ljdk/tools/jlink/internal/BasicImageWriter;
            1    9     1         i  I
            3    7     2  location  Ljdk/tools/jlink/internal/ImageLocationWriter;
            6    7     3    offset  I

  private void prepareHeaderBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 153
            new jdk.internal.jimage.ImageHeader
            dup
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.input:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
         1: .line 154
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.getSize:()I
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
            invokevirtual jdk.tools.jlink.internal.ImageStringsWriter.getSize:()I
         2: .line 153
            invokespecial jdk.internal.jimage.ImageHeader.<init>:(IIII)V
            astore 1 /* header */
        start local 1 // jdk.internal.jimage.ImageHeader header
         3: .line 155
            aload 1 /* header */
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.headerStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageHeader.writeTo:(Ljdk/internal/jimage/ImageStream;)V
         4: .line 156
            return
        end local 1 // jdk.internal.jimage.ImageHeader header
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Ljdk/tools/jlink/internal/BasicImageWriter;
            3    5     1  header  Ljdk/internal/jimage/ImageHeader;

  private void prepareTableBytes();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 159
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.headerStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.put:(Ljdk/internal/jimage/ImageStream;)Ljdk/internal/jimage/ImageStream;
            pop
         1: .line 160
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.redirectStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.put:(Ljdk/internal/jimage/ImageStream;)Ljdk/internal/jimage/ImageStream;
            pop
         2: .line 161
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationOffsetStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.put:(Ljdk/internal/jimage/ImageStream;)Ljdk/internal/jimage/ImageStream;
            pop
         3: .line 162
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locationStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.put:(Ljdk/internal/jimage/ImageStream;)Ljdk/internal/jimage/ImageStream;
            pop
         4: .line 163
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.strings:Ljdk/tools/jlink/internal/ImageStringsWriter;
            invokevirtual jdk.tools.jlink.internal.ImageStringsWriter.getStream:()Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.put:(Ljdk/internal/jimage/ImageStream;)Ljdk/internal/jimage/ImageStream;
            pop
         5: .line 164
            return
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  public byte[] getBytes();
    descriptor: ()[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
         0: .line 167
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.getSize:()I
            ifne 8
         1: .line 168
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.generatePerfectHash:()V
         2: .line 169
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareStringBytes:()V
         3: .line 170
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareRedirectBytes:()V
         4: .line 171
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareLocationBytes:()V
         5: .line 172
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareOffsetBytes:()V
         6: .line 173
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareHeaderBytes:()V
         7: .line 174
            aload 0 /* this */
            invokevirtual jdk.tools.jlink.internal.BasicImageWriter.prepareTableBytes:()V
         8: .line 177
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.allIndexStream:Ljdk/internal/jimage/ImageStream;
            invokevirtual jdk.internal.jimage.ImageStream.toArray:()[B
            areturn
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Ljdk/tools/jlink/internal/BasicImageWriter;

  jdk.tools.jlink.internal.ImageLocationWriter find(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljdk/tools/jlink/internal/ImageLocationWriter;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // jdk.tools.jlink.internal.BasicImageWriter this
        start local 1 // java.lang.String key
         0: .line 181
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.redirect:[I
            aload 1 /* key */
            invokestatic jdk.internal.jimage.ImageStringsReader.hashCode:(Ljava/lang/String;)I
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            irem
            iaload
            istore 2 /* index */
        start local 2 // int index
         1: .line 183
            iload 2 /* index */
            ifge 4
         2: .line 184
            iload 2 /* index */
            ineg
            iconst_1
            isub
            istore 2 /* index */
         3: .line 185
            goto 5
         4: .line 186
      StackMap locals: int
      StackMap stack:
            aload 1 /* key */
            iload 2 /* index */
            invokestatic jdk.internal.jimage.ImageStringsReader.hashCode:(Ljava/lang/String;I)I
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.length:I
            irem
            istore 2 /* index */
         5: .line 189
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.tools.jlink.internal.BasicImageWriter.locations:[Ljdk/tools/jlink/internal/ImageLocationWriter;
            iload 2 /* index */
            aaload
            areturn
        end local 2 // int index
        end local 1 // java.lang.String key
        end local 0 // jdk.tools.jlink.internal.BasicImageWriter this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0   this  Ljdk/tools/jlink/internal/BasicImageWriter;
            0    6     1    key  Ljava/lang/String;
            1    6     2  index  I
    MethodParameters:
      Name  Flags
      key   

  private static void lambda$0(jdk.tools.jlink.internal.PerfectHashBuilder, jdk.tools.jlink.internal.ImageLocationWriter);
    descriptor: (Ljdk/tools/jlink/internal/PerfectHashBuilder;Ljdk/tools/jlink/internal/ImageLocationWriter;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=2, args_size=2
        start local 1 // jdk.tools.jlink.internal.ImageLocationWriter location
         0: .line 104
            aload 0
            aload 1 /* location */
            invokevirtual jdk.tools.jlink.internal.ImageLocationWriter.getFullName:()Ljava/lang/String;
            aload 1 /* location */
            invokevirtual jdk.tools.jlink.internal.PerfectHashBuilder.put:(Ljava/lang/String;Ljava/lang/Object;)Ljdk/tools/jlink/internal/PerfectHashBuilder$Entry;
            pop
         1: .line 105
            return
        end local 1 // jdk.tools.jlink.internal.ImageLocationWriter location
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     1  location  Ljdk/tools/jlink/internal/ImageLocationWriter;
}
SourceFile: "BasicImageWriter.java"
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  Bucket = jdk.tools.jlink.internal.PerfectHashBuilder$Bucket of jdk.tools.jlink.internal.PerfectHashBuilder
  public Entry = jdk.tools.jlink.internal.PerfectHashBuilder$Entry of jdk.tools.jlink.internal.PerfectHashBuilder