public final class org.graalvm.component.installer.remote.FileDownloader
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.graalvm.component.installer.remote.FileDownloader
  super_class: java.lang.Object
{
  private static final int TRANSFER_LENGTH;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2048

  private static final long MIN_PROGRESS_THRESHOLD;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

  private final java.net.URL sourceURL;
    descriptor: Ljava/net/URL;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.component.installer.Feedback feedback;
    descriptor: Lorg/graalvm/component/installer/Feedback;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.io.File downloadDir;
    descriptor: Ljava/io/File;
    flags: (0x0002) ACC_PRIVATE

  private java.io.File localFile;
    descriptor: Ljava/io/File;
    flags: (0x0002) ACC_PRIVATE

  private long size;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private static boolean deleteTemporary;
    descriptor: Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

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

  private static volatile java.io.File tempDir;
    descriptor: Ljava/io/File;
    flags: (0x004a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE

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

  private byte[] shaDigest;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  long sizeThreshold;
    descriptor: J
    flags: (0x0000) 

  private final java.util.Map<java.lang.String, java.lang.String> requestHeaders;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;

  private java.util.function.Consumer<java.nio.channels.SeekableByteChannel> dataInterceptor;
    descriptor: Ljava/util/function/Consumer;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/function/Consumer<Ljava/nio/channels/SeekableByteChannel;>;

  private org.graalvm.component.installer.URLConnectionFactory connectionFactory;
    descriptor: Lorg/graalvm/component/installer/URLConnectionFactory;
    flags: (0x0002) ACC_PRIVATE

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

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

  java.lang.StringBuilder progressString;
    descriptor: Ljava/lang/StringBuilder;
    flags: (0x0000) 

  java.lang.String backspaceString;
    descriptor: Ljava/lang/String;
    flags: (0x0000) 

  int startPos;
    descriptor: I
    flags: (0x0000) 

  int signCount;
    descriptor: I
    flags: (0x0000) 

  long received;
    descriptor: J
    flags: (0x0000) 

  char signChar;
    descriptor: C
    flags: (0x0000) 

  java.security.MessageDigest fileDigest;
    descriptor: Ljava/security/MessageDigest;
    flags: (0x0000) 

  byte[] receivedDigest;
    descriptor: [B
    flags: (0x0000) 

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 59
            ldc "org.graalvm.component.installer.minDownloadFeedback"
            ldc 1048576
            invokestatic java.lang.Long.getLong:(Ljava/lang/String;J)Ljava/lang/Long;
            invokevirtual java.lang.Long.longValue:()J
            putstatic org.graalvm.component.installer.remote.FileDownloader.MIN_PROGRESS_THRESHOLD:J
         1: .line 67
            getstatic java.lang.Boolean.FALSE:Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.toString:()Ljava/lang/String;
            ldc "org.graalvm.component.installer.deleteTemporary"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 2
            iconst_0
            goto 3
      StackMap locals:
      StackMap stack:
         2: iconst_1
      StackMap locals:
      StackMap stack: int
         3: putstatic org.graalvm.component.installer.remote.FileDownloader.deleteTemporary:Z
         4: .line 69
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.lang.String, java.net.URL, org.graalvm.component.installer.Feedback);
    descriptor: (Ljava/lang/String;Ljava/net/URL;Lorg/graalvm/component/installer/Feedback;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.lang.String fileDescription
        start local 2 // java.net.URL sourceURL
        start local 3 // org.graalvm.component.installer.Feedback feedback
         0: .line 83
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 72
            aload 0 /* this */
            getstatic org.graalvm.component.installer.remote.FileDownloader.MIN_PROGRESS_THRESHOLD:J
            putfield org.graalvm.component.installer.remote.FileDownloader.sizeThreshold:J
         2: .line 73
            aload 0 /* this */
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putfield org.graalvm.component.installer.remote.FileDownloader.requestHeaders:Ljava/util/Map;
         3: .line 81
            aload 0 /* this */
            ldc "SHA-256"
            putfield org.graalvm.component.installer.remote.FileDownloader.digestAlgorithm:Ljava/lang/String;
         4: .line 84
            aload 0 /* this */
            aload 1 /* fileDescription */
            putfield org.graalvm.component.installer.remote.FileDownloader.fileDescription:Ljava/lang/String;
         5: .line 85
            aload 0 /* this */
            aload 2 /* sourceURL */
            putfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
         6: .line 86
            aload 0 /* this */
            aload 3 /* feedback */
            ldc Lorg/graalvm/component/installer/remote/FileDownloader;
            invokeinterface org.graalvm.component.installer.Feedback.withBundle:(Ljava/lang/Class;)Lorg/graalvm/component/installer/Feedback;
            putfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
         7: .line 87
            return
        end local 3 // org.graalvm.component.installer.Feedback feedback
        end local 2 // java.net.URL sourceURL
        end local 1 // java.lang.String fileDescription
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    8     0             this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    8     1  fileDescription  Ljava/lang/String;
            0    8     2        sourceURL  Ljava/net/URL;
            0    8     3         feedback  Lorg/graalvm/component/installer/Feedback;
    MethodParameters:
                 Name  Flags
      fileDescription  
      sourceURL        
      feedback         

  public void setShaDigest(byte[]);
    descriptor: ([B)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // byte[] shaDigest
         0: .line 90
            aload 0 /* this */
            aload 1 /* shaDigest */
            putfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
         1: .line 91
            return
        end local 1 // byte[] shaDigest
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  shaDigest  [B
    MethodParameters:
           Name  Flags
      shaDigest  

  public java.io.File getDownloadDir();
    descriptor: ()Ljava/io/File;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 94
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.downloadDir:Ljava/io/File;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  public void setDownloadDir(java.io.File);
    descriptor: (Ljava/io/File;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.io.File downloadDir
         0: .line 98
            aload 0 /* this */
            aload 1 /* downloadDir */
            putfield org.graalvm.component.installer.remote.FileDownloader.downloadDir:Ljava/io/File;
         1: .line 99
            return
        end local 1 // java.io.File downloadDir
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  downloadDir  Ljava/io/File;
    MethodParameters:
             Name  Flags
      downloadDir  

  public static void setDeleteTemporary(boolean);
    descriptor: (Z)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // boolean deleteTemporary
         0: .line 102
            iload 0 /* deleteTemporary */
            putstatic org.graalvm.component.installer.remote.FileDownloader.deleteTemporary:Z
         1: .line 103
            return
        end local 0 // boolean deleteTemporary
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0  deleteTemporary  Z
    MethodParameters:
                 Name  Flags
      deleteTemporary  

  public void setVerbose(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // boolean verbose
         0: .line 106
            aload 0 /* this */
            iload 1 /* verbose */
            putfield org.graalvm.component.installer.remote.FileDownloader.verbose:Z
         1: .line 107
            return
        end local 1 // boolean verbose
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  verbose  Z
    MethodParameters:
         Name  Flags
      verbose  

  public void setDisplayProgress(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // boolean displayProgress
         0: .line 110
            aload 0 /* this */
            iload 1 /* displayProgress */
            putfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
         1: .line 111
            return
        end local 1 // boolean displayProgress
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  displayProgress  Z
    MethodParameters:
                 Name  Flags
      displayProgress  

  public void addRequestHeader(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.lang.String header
        start local 2 // java.lang.String val
         0: .line 114
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.requestHeaders:Ljava/util/Map;
            aload 1 /* header */
            aload 2 /* val */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 115
            return
        end local 2 // java.lang.String val
        end local 1 // java.lang.String header
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  header  Ljava/lang/String;
            0    2     2     val  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      header  
      val     

  public java.lang.String getDigestAlgorithm();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 118
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.digestAlgorithm:Ljava/lang/String;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  public void setDigestAlgorithm(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.lang.String digestAlgorithm
         0: .line 122
            aload 0 /* this */
            aload 1 /* digestAlgorithm */
            putfield org.graalvm.component.installer.remote.FileDownloader.digestAlgorithm:Ljava/lang/String;
         1: .line 123
            return
        end local 1 // java.lang.String digestAlgorithm
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  digestAlgorithm  Ljava/lang/String;
    MethodParameters:
                 Name  Flags
      digestAlgorithm  

  public static synchronized java.io.File createTempDir();
    descriptor: ()Ljava/io/File;
    flags: (0x0029) ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=0
         0: .line 126
            getstatic org.graalvm.component.installer.remote.FileDownloader.tempDir:Ljava/io/File;
            ifnonnull 4
         1: .line 127
            ldc "graalvm_install"
            iconst_0
            anewarray java.nio.file.attribute.FileAttribute
            invokestatic java.nio.file.Files.createTempDirectory:(Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
            astore 0 /* p */
        start local 0 // java.nio.file.Path p
         2: .line 128
            aload 0 /* p */
            invokeinterface java.nio.file.Path.toFile:()Ljava/io/File;
            putstatic org.graalvm.component.installer.remote.FileDownloader.tempDir:Ljava/io/File;
         3: .line 129
            getstatic org.graalvm.component.installer.remote.FileDownloader.tempDir:Ljava/io/File;
            invokevirtual java.io.File.deleteOnExit:()V
        end local 0 // java.nio.file.Path p
         4: .line 131
      StackMap locals:
      StackMap stack:
            getstatic org.graalvm.component.installer.remote.FileDownloader.tempDir:Ljava/io/File;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            2    4     0     p  Ljava/nio/file/Path;
    Exceptions:
      throws java.io.IOException

  private static java.io.File deleteOnExit(java.io.File);
    descriptor: (Ljava/io/File;)Ljava/io/File;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.io.File f
         0: .line 135
            getstatic org.graalvm.component.installer.remote.FileDownloader.deleteTemporary:Z
            ifeq 2
         1: .line 136
            aload 0 /* f */
            invokevirtual java.io.File.deleteOnExit:()V
         2: .line 138
      StackMap locals:
      StackMap stack:
            aload 0 /* f */
            areturn
        end local 0 // java.io.File f
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0     f  Ljava/io/File;
    MethodParameters:
      Name  Flags
      f     

  public java.lang.String getFileDescription();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 142
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDescription:Ljava/lang/String;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  public java.net.URL getSourceURL();
    descriptor: ()Ljava/net/URL;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 146
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  private static int toKB(long);
    descriptor: (J)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // long size
         0: .line 150
            lload 0 /* size */
            ldc 1023
            ladd
            l2i
            sipush 1024
            idiv
            ireturn
        end local 0 // long size
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  size  J
    MethodParameters:
      Name  Flags
      size  

  public java.io.File getLocalFile();
    descriptor: ()Ljava/io/File;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 163
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  void setupProgress();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=7, locals=3, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 167
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifeq 3
         1: .line 168
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_ProgressStart_Simple@"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.size:J
            invokestatic java.lang.Long.toString:(J)Ljava/lang/String;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 169
            return
         3: .line 171
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
            ifne 5
         4: .line 172
            return
         5: .line 174
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_DownloadProgress@"
            iconst_0
            anewarray java.lang.Object
            invokeinterface org.graalvm.component.installer.Feedback.l10n:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            putfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
         6: .line 175
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_DownloadProgressSignChar@"
            iconst_0
            anewarray java.lang.Object
            invokeinterface org.graalvm.component.installer.Feedback.l10n:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            putfield org.graalvm.component.installer.remote.FileDownloader.signChar:C
         7: .line 176
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            bipush 32
            invokevirtual java.lang.String.indexOf:(I)I
            putfield org.graalvm.component.installer.remote.FileDownloader.startPos:I
         8: .line 177
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.length:()I
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 1 /* bs */
        start local 1 // java.lang.StringBuilder bs
         9: .line 178
            iconst_0
            istore 2 /* i */
        start local 2 // int i
        10: goto 13
        11: .line 179
      StackMap locals: java.lang.StringBuilder int
      StackMap stack:
            aload 1 /* bs */
            bipush 8
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        12: .line 178
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
        13: iload 2 /* i */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.length:()I
            if_icmplt 11
        end local 2 // int i
        14: .line 181
            aload 0 /* this */
            aload 1 /* bs */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield org.graalvm.component.installer.remote.FileDownloader.backspaceString:Ljava/lang/String;
        15: .line 182
            return
        end local 1 // java.lang.StringBuilder bs
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
            9   16     1    bs  Ljava/lang/StringBuilder;
           10   14     2     i  I

  int cnt(long);
    descriptor: (J)I
    flags: (0x0000) 
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // long rcvd
         0: .line 185
            lload 1 /* rcvd */
            ldc 20
            lmul
            lload 1 /* rcvd */
            ldc 2
            ldiv
            ladd
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.size:J
            ldiv
            l2i
            ireturn
        end local 1 // long rcvd
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    1     1  rcvd  J
    MethodParameters:
      Name  Flags
      rcvd  

  void makeProgress(boolean, int);
    descriptor: (ZI)V
    flags: (0x0000) 
    Code:
      stack=7, locals=5, args_size=3
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // boolean first
        start local 2 // int chunk
         0: .line 189
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
            ifne 2
         1: .line 190
            return
         2: .line 192
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.received:J
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.cnt:(J)I
            istore 3 /* now */
        start local 3 // int now
         3: .line 193
            aload 0 /* this */
            dup
            getfield org.graalvm.component.installer.remote.FileDownloader.received:J
            iload 2 /* chunk */
            i2l
            ladd
            putfield org.graalvm.component.installer.remote.FileDownloader.received:J
         4: .line 194
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.received:J
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.cnt:(J)I
            istore 4 /* next */
        start local 4 // int next
         5: .line 195
            iload 3 /* now */
            iload 4 /* next */
            if_icmpge 14
         6: .line 196
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifeq 9
         7: .line 197
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_Progress_Simple@"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.received:J
            invokestatic java.lang.Long.toString:(J)Ljava/lang/String;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
         8: .line 198
            return
         9: .line 200
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            iload 4 /* next */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.startPos:I
            iadd
            iconst_1
            isub
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.signChar:C
            invokevirtual java.lang.StringBuilder.setCharAt:(IC)V
        10: .line 201
            aload 0 /* this */
            iload 4 /* next */
            putfield org.graalvm.component.installer.remote.FileDownloader.signCount:I
        11: .line 203
            iload 1 /* first */
            ifne 13
        12: .line 204
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.backspaceString:Ljava/lang/String;
            iconst_0
            invokeinterface org.graalvm.component.installer.Feedback.verbatimPart:(Ljava/lang/String;Z)Z
            pop
        13: .line 206
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_0
            invokeinterface org.graalvm.component.installer.Feedback.verbatimPart:(Ljava/lang/String;Z)Z
            pop
        14: .line 208
      StackMap locals:
      StackMap stack:
            return
        end local 4 // int next
        end local 3 // int now
        end local 2 // int chunk
        end local 1 // boolean first
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   15     0   this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0   15     1  first  Z
            0   15     2  chunk  I
            3   15     3    now  I
            5   15     4   next  I
    MethodParameters:
       Name  Flags
      first  
      chunk  

  void stopProgress(boolean);
    descriptor: (Z)V
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // boolean success
         0: .line 211
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
            ifeq 2
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifne 2
         1: .line 212
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.backspaceString:Ljava/lang/String;
            iconst_0
            invokeinterface org.graalvm.component.installer.Feedback.verbatimPart:(Ljava/lang/String;Z)Z
            pop
         2: .line 214
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifeq 3
            ldc "_Simple@"
            goto 4
      StackMap locals:
      StackMap stack:
         3: ldc ""
      StackMap locals:
      StackMap stack: java.lang.String
         4: astore 2 /* simpleSuffix */
        start local 2 // java.lang.String simpleSuffix
         5: .line 215
            iload 1 /* success */
            ifeq 8
         6: .line 216
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            new java.lang.StringBuilder
            dup
            ldc "MSG_DownloadingDone"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* simpleSuffix */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_0
            anewarray java.lang.Object
            invokeinterface org.graalvm.component.installer.Feedback.verboseOutput:(Ljava/lang/String;[Ljava/lang/Object;)Z
            pop
         7: .line 217
            goto 9
         8: .line 218
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            new java.lang.StringBuilder
            dup
            ldc "MSG_DownloadingTerminated"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* simpleSuffix */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_0
            anewarray java.lang.Object
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 220
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String simpleSuffix
        end local 1 // boolean success
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0   10     1       success  Z
            5   10     2  simpleSuffix  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      success  

  void updateFileDigest(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)V
    flags: (0x0000) 
    Code:
      stack=8, locals=3, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.nio.ByteBuffer input
         0: .line 223
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
            ifnonnull 2
         1: .line 224
            return
         2: .line 226
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDigest:Ljava/security/MessageDigest;
            ifnonnull 10
         3: .line 228
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getDigestAlgorithm:()Ljava/lang/String;
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            putfield org.graalvm.component.installer.remote.FileDownloader.fileDigest:Ljava/security/MessageDigest;
         4: .line 229
            goto 10
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
         5: astore 2 /* ex */
        start local 2 // java.security.NoSuchAlgorithmException ex
         6: .line 230
            new java.io.IOException
            dup
         7: .line 231
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "ERR_ComputeDigest"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* ex */
            invokevirtual java.security.NoSuchAlgorithmException.getLocalizedMessage:()Ljava/lang/String;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.l10n:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
         8: .line 232
            aload 2 /* ex */
         9: .line 230
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.NoSuchAlgorithmException ex
        10: .line 235
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDigest:Ljava/security/MessageDigest;
            aload 1 /* input */
            invokevirtual java.security.MessageDigest.update:(Ljava/nio/ByteBuffer;)V
        11: .line 236
            return
        end local 1 // java.nio.ByteBuffer input
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   12     0   this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0   12     1  input  Ljava/nio/ByteBuffer;
            6   10     2     ex  Ljava/security/NoSuchAlgorithmException;
      Exception table:
        from    to  target  type
           3     4       5  Class java.security.NoSuchAlgorithmException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      input  

  static java.lang.String fingerPrint(byte[]);
    descriptor: ([B)Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // byte[] digest
         0: .line 239
            aload 0 /* digest */
            invokestatic org.graalvm.component.installer.SystemUtils.fingerPrint:([B)Ljava/lang/String;
            areturn
        end local 0 // byte[] digest
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  digest  [B
    MethodParameters:
        Name  Flags
      digest  

  byte[] getDigest();
    descriptor: ()[B
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 243
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDigest:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;

  public byte[] getReceivedDigest();
    descriptor: ()[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 247
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.receivedDigest:[B
            ifnonnull 4
         1: .line 248
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
            ifnonnull 3
         2: .line 249
            aconst_null
            areturn
         3: .line 251
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
            invokevirtual java.io.File.toPath:()Ljava/nio/file/Path;
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getDigestAlgorithm:()Ljava/lang/String;
            invokestatic org.graalvm.component.installer.SystemUtils.computeFileDigest:(Ljava/nio/file/Path;Ljava/lang/String;)[B
            putfield org.graalvm.component.installer.remote.FileDownloader.receivedDigest:[B
         4: .line 253
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.receivedDigest:[B
            ifnonnull 5
            aconst_null
            goto 6
      StackMap locals:
      StackMap stack:
         5: aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.receivedDigest:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
      StackMap locals:
      StackMap stack: byte[]
         6: areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
    Exceptions:
      throws java.io.IOException

  void verifyDigest();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=8, locals=2, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 257
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
            ifnull 1
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
            arraylength
            ifne 2
         1: .line 258
      StackMap locals:
      StackMap stack:
            return
         2: .line 260
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDigest:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 1 /* computed */
        start local 1 // byte[] computed
         3: .line 261
            aload 0 /* this */
            aload 1 /* computed */
            putfield org.graalvm.component.installer.remote.FileDownloader.receivedDigest:[B
         4: .line 262
            aload 1 /* computed */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifeq 6
         5: .line 263
            return
         6: .line 265
      StackMap locals: byte[]
      StackMap stack:
            new java.io.IOException
            dup
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "ERR_FileDigestError"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         7: .line 266
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.shaDigest:[B
            invokestatic org.graalvm.component.installer.remote.FileDownloader.fingerPrint:([B)Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 1 /* computed */
            invokestatic org.graalvm.component.installer.remote.FileDownloader.fingerPrint:([B)Ljava/lang/String;
            aastore
         8: .line 265
            invokeinterface org.graalvm.component.installer.Feedback.l10n:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // byte[] computed
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/graalvm/component/installer/remote/FileDownloader;
            3    9     1  computed  [B
    Exceptions:
      throws java.io.IOException

  void configureHeaders(java.net.URLConnection);
    descriptor: (Ljava/net/URLConnection;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.net.URLConnection con
         0: .line 270
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.requestHeaders:Ljava/util/Map;
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 3
            goto 3
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader java.net.URLConnection top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 2 /* h */
        start local 2 // java.lang.String h
         2: .line 271
            aload 1 /* con */
            aload 2 /* h */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.requestHeaders:Ljava/util/Map;
            aload 2 /* h */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual java.net.URLConnection.addRequestProperty:(Ljava/lang/String;Ljava/lang/String;)V
        end local 2 // java.lang.String h
         3: .line 270
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 273
            return
        end local 1 // java.net.URLConnection con
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    5     1   con  Ljava/net/URLConnection;
            2    3     2     h  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      con   

  protected void dataDownloaded(java.nio.channels.SeekableByteChannel);
    descriptor: (Ljava/nio/channels/SeekableByteChannel;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.nio.channels.SeekableByteChannel ch
         0: .line 276
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.dataInterceptor:Ljava/util/function/Consumer;
            ifnull 2
         1: .line 277
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.dataInterceptor:Ljava/util/function/Consumer;
            aload 1 /* ch */
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
         2: .line 279
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.nio.channels.SeekableByteChannel ch
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    3     1    ch  Ljava/nio/channels/SeekableByteChannel;
    MethodParameters:
      Name  Flags
      ch    

  public org.graalvm.component.installer.remote.FileDownloader setDataInterceptor(java.util.function.Consumer<java.nio.channels.SeekableByteChannel>);
    descriptor: (Ljava/util/function/Consumer;)Lorg/graalvm/component/installer/remote/FileDownloader;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.util.function.Consumer interceptor
         0: .line 282
            aload 0 /* this */
            aload 1 /* interceptor */
            putfield org.graalvm.component.installer.remote.FileDownloader.dataInterceptor:Ljava/util/function/Consumer;
         1: .line 283
            aload 0 /* this */
            areturn
        end local 1 // java.util.function.Consumer interceptor
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  interceptor  Ljava/util/function/Consumer<Ljava/nio/channels/SeekableByteChannel;>;
    Signature: (Ljava/util/function/Consumer<Ljava/nio/channels/SeekableByteChannel;>;)Lorg/graalvm/component/installer/remote/FileDownloader;
    MethodParameters:
             Name  Flags
      interceptor  

  private void copySubtree(java.nio.file.Path);
    descriptor: (Ljava/nio/file/Path;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // java.nio.file.Path from
         0: .line 287
            invokestatic org.graalvm.component.installer.remote.FileDownloader.createTempDir:()Ljava/io/File;
            invokevirtual java.io.File.toPath:()Ljava/nio/file/Path;
            ldc "download"
            iconst_0
            anewarray java.nio.file.attribute.FileAttribute
            invokestatic java.nio.file.Files.createTempDirectory:(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
            astore 2 /* to */
        start local 2 // java.nio.file.Path to
         1: .line 288
            aload 1 /* from */
            aload 2 /* to */
            invokestatic org.graalvm.component.installer.SystemUtils.copySubtree:(Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/nio/file/Path;
            pop
         2: .line 289
            aload 0 /* this */
            aload 2 /* to */
            invokeinterface java.nio.file.Path.toFile:()Ljava/io/File;
            putfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
         3: .line 290
            return
        end local 2 // java.nio.file.Path to
        end local 1 // java.nio.file.Path from
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    4     1  from  Ljava/nio/file/Path;
            1    4     2    to  Ljava/nio/file/Path;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      from  

  public void download();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=16, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 293
            aload 0 /* this */
            getstatic java.lang.Boolean.TRUE:Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.toString:()Ljava/lang/String;
            ldc "org.graalvm.component.installer.SimpleOutput"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            putfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
         1: .line 294
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            invokevirtual java.net.URL.getProtocol:()Ljava/lang/String;
            ldc "file"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            istore 1 /* fromFile */
        start local 1 // boolean fromFile
         2: .line 295
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifeq 10
         3: .line 296
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
         4: .line 297
            ldc "MSG_Downloading_Simple@"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         5: .line 298
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getSourceURL:()Ljava/net/URL;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getFileDescription:()Ljava/lang/String;
            ifnonnull 6
            ldc ""
            goto 7
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int
      StackMap stack: org.graalvm.component.installer.Feedback java.lang.String java.lang.Object[] java.lang.Object[] int
         6: aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getFileDescription:()Ljava/lang/String;
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int
      StackMap stack: org.graalvm.component.installer.Feedback java.lang.String java.lang.Object[] java.lang.Object[] int java.lang.String
         7: aastore
         8: .line 296
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 299
            goto 17
        10: .line 300
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.fileDescription:Ljava/lang/String;
            ifnull 16
        11: .line 301
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_DownloadingVerbose"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getFileDescription:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getSourceURL:()Ljava/net/URL;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.verboseOutput:(Ljava/lang/String;[Ljava/lang/Object;)Z
            ifne 17
        12: .line 302
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            iload 1 /* fromFile */
            ifeq 13
            ldc "MSG_UsingFile"
            goto 14
      StackMap locals:
      StackMap stack: org.graalvm.component.installer.Feedback
        13: ldc "MSG_Downloading"
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int
      StackMap stack: org.graalvm.component.installer.Feedback java.lang.String
        14: iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getFileDescription:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getSourceURL:()Ljava/net/URL;
            invokevirtual java.net.URL.getHost:()Ljava/lang/String;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
        15: .line 304
            goto 17
        16: .line 305
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_DownloadingFrom"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getSourceURL:()Ljava/net/URL;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.output:(Ljava/lang/String;[Ljava/lang/Object;)V
        17: .line 309
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            invokeinterface org.graalvm.component.installer.Feedback.getLocalCache:(Ljava/net/URL;)Ljava/nio/file/Path;
            astore 2 /* localCache */
        start local 2 // java.nio.file.Path localCache
        18: .line 310
            aload 2 /* localCache */
            ifnull 21
        19: .line 311
            aload 0 /* this */
            aload 2 /* localCache */
            invokeinterface java.nio.file.Path.toFile:()Ljava/io/File;
            putfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
        20: .line 312
            return
        21: .line 315
      StackMap locals: java.nio.file.Path
      StackMap stack:
            iload 1 /* fromFile */
            ifeq 28
        22: .line 317
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            invokevirtual java.net.URL.toURI:()Ljava/net/URI;
            invokestatic java.nio.file.Paths.get:(Ljava/net/URI;)Ljava/nio/file/Path;
            astore 3 /* p */
        start local 3 // java.nio.file.Path p
        23: .line 318
            aload 3 /* p */
            iconst_0
            anewarray java.nio.file.LinkOption
            invokestatic java.nio.file.Files.isDirectory:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
            ifeq 28
        24: .line 319
            aload 0 /* this */
            aload 3 /* p */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.copySubtree:(Ljava/nio/file/Path;)V
        25: .line 320
            return
        end local 3 // java.nio.file.Path p
        26: .line 322
      StackMap locals:
      StackMap stack: java.net.URISyntaxException
            astore 3 /* ex */
        start local 3 // java.net.URISyntaxException ex
        27: .line 323
            new java.io.IOException
            dup
            aload 3 /* ex */
            invokespecial java.io.IOException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.net.URISyntaxException ex
        28: .line 327
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.getConnectionFactory:()Lorg/graalvm/component/installer/URLConnectionFactory;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            aload 0 /* this */
            invokedynamic accept(Lorg/graalvm/component/installer/remote/FileDownloader;)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
                  org/graalvm/component/installer/remote/FileDownloader.configureHeaders(Ljava/net/URLConnection;)V (5)
                  (Ljava/net/URLConnection;)V
            invokeinterface org.graalvm.component.installer.URLConnectionFactory.createConnection:(Ljava/net/URL;Ljava/util/function/Consumer;)Ljava/net/URLConnection;
            astore 3 /* conn */
        start local 3 // java.net.URLConnection conn
        29: .line 329
            aload 0 /* this */
            aload 3 /* conn */
            invokevirtual java.net.URLConnection.getContentLengthLong:()J
            putfield org.graalvm.component.installer.remote.FileDownloader.size:J
        30: .line 330
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifeq 33
        31: .line 331
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aconst_null
            iconst_0
            anewarray java.lang.Object
            invokeinterface org.graalvm.component.installer.Feedback.verboseOutput:(Ljava/lang/String;[Ljava/lang/Object;)Z
            putfield org.graalvm.component.installer.remote.FileDownloader.verbose:Z
        32: .line 332
            goto 34
        33: .line 333
      StackMap locals: java.net.URLConnection
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            ldc "MSG_DownloadReceivingBytes"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.size:J
            invokestatic org.graalvm.component.installer.remote.FileDownloader.toKB:(J)I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokeinterface org.graalvm.component.installer.Feedback.verbosePart:(Ljava/lang/String;[Ljava/lang/Object;)Z
            putfield org.graalvm.component.installer.remote.FileDownloader.verbose:Z
        34: .line 335
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.verbose:Z
            ifeq 36
        35: .line 336
            aload 0 /* this */
            iconst_1
            putfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
        36: .line 338
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.size:J
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sizeThreshold:J
            lcmp
            ifge 38
        37: .line 339
            aload 0 /* this */
            iconst_0
            putfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
        38: .line 342
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.setupProgress:()V
        39: .line 343
            sipush 2048
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            astore 5 /* bb */
        start local 5 // java.nio.ByteBuffer bb
        40: .line 344
            aload 0 /* this */
            ldc "download"
            ldc ""
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.downloadDir:Ljava/io/File;
            ifnonnull 41
            invokestatic org.graalvm.component.installer.remote.FileDownloader.createTempDir:()Ljava/io/File;
            goto 42
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int java.nio.file.Path java.net.URLConnection top java.nio.ByteBuffer
      StackMap stack: org.graalvm.component.installer.remote.FileDownloader java.lang.String java.lang.String
        41: aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.downloadDir:Ljava/io/File;
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int java.nio.file.Path java.net.URLConnection top java.nio.ByteBuffer
      StackMap stack: org.graalvm.component.installer.remote.FileDownloader java.lang.String java.lang.String java.io.File
        42: invokestatic java.io.File.createTempFile:(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
            invokestatic org.graalvm.component.installer.remote.FileDownloader.deleteOnExit:(Ljava/io/File;)Ljava/io/File;
            putfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
        43: .line 345
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.displayProgress:Z
            istore 6 /* first */
        start local 6 // boolean first
        44: .line 346
            iconst_0
            istore 7 /* success */
        start local 7 // boolean success
        45: .line 347
            aconst_null
            astore 8
            aconst_null
            astore 9
        46: .line 348
            aload 3 /* conn */
            invokevirtual java.net.URLConnection.getInputStream:()Ljava/io/InputStream;
            invokestatic java.nio.channels.Channels.newChannel:(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
            astore 10 /* rbc */
        start local 10 // java.nio.channels.ReadableByteChannel rbc
        47: .line 349
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
            invokevirtual java.io.File.toPath:()Ljava/nio/file/Path;
            iconst_3
            anewarray java.nio.file.OpenOption
            dup
            iconst_0
        48: .line 350
            getstatic java.nio.file.StandardOpenOption.WRITE:Ljava/nio/file/StandardOpenOption;
            aastore
            dup
            iconst_1
            getstatic java.nio.file.StandardOpenOption.CREATE:Ljava/nio/file/StandardOpenOption;
            aastore
            dup
            iconst_2
            getstatic java.nio.file.StandardOpenOption.TRUNCATE_EXISTING:Ljava/nio/file/StandardOpenOption;
            aastore
        49: .line 349
            invokestatic java.nio.file.Files.newByteChannel:(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;
            astore 11 /* wbc */
        start local 11 // java.nio.channels.SeekableByteChannel wbc
        50: .line 352
            goto 65
        start local 12 // int read
        51: .line 353
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int java.nio.file.Path java.net.URLConnection top java.nio.ByteBuffer int int java.lang.Throwable java.lang.Throwable java.nio.channels.ReadableByteChannel java.nio.channels.SeekableByteChannel int
      StackMap stack:
            iload 6 /* first */
            ifeq 53
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.simpleOutput:Z
            ifne 53
        52: .line 354
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.progressString:Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_0
            invokeinterface org.graalvm.component.installer.Feedback.verbatimPart:(Ljava/lang/String;Z)Z
            pop
        53: .line 356
      StackMap locals:
      StackMap stack:
            aload 5 /* bb */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/ByteBuffer;
            pop
        54: .line 357
            goto 59
        55: .line 358
      StackMap locals:
      StackMap stack:
            aload 11 /* wbc */
            aload 5 /* bb */
            invokeinterface java.nio.channels.SeekableByteChannel.write:(Ljava/nio/ByteBuffer;)I
            pop
        56: .line 359
            aload 11 /* wbc */
            invokeinterface java.nio.channels.SeekableByteChannel.position:()J
            lstore 13 /* pos */
        start local 13 // long pos
        57: .line 360
            aload 0 /* this */
            aload 11 /* wbc */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.dataDownloaded:(Ljava/nio/channels/SeekableByteChannel;)V
        58: .line 361
            aload 11 /* wbc */
            lload 13 /* pos */
            invokeinterface java.nio.channels.SeekableByteChannel.position:(J)Ljava/nio/channels/SeekableByteChannel;
            pop
        end local 13 // long pos
        59: .line 357
      StackMap locals:
      StackMap stack:
            aload 5 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 55
        60: .line 363
            aload 5 /* bb */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/ByteBuffer;
            pop
        61: .line 364
            aload 0 /* this */
            aload 5 /* bb */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.updateFileDigest:(Ljava/nio/ByteBuffer;)V
        62: .line 365
            aload 0 /* this */
            iload 6 /* first */
            iload 12 /* read */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.makeProgress:(ZI)V
        63: .line 366
            aload 5 /* bb */
            invokevirtual java.nio.ByteBuffer.clear:()Ljava/nio/ByteBuffer;
            pop
        64: .line 367
            iconst_0
            istore 6 /* first */
        end local 12 // int read
        65: .line 352
      StackMap locals:
      StackMap stack:
            aload 10 /* rbc */
            aload 5 /* bb */
            invokeinterface java.nio.channels.ReadableByteChannel.read:(Ljava/nio/ByteBuffer;)I
            dup
            istore 12 /* read */
        start local 12 // int read
        66: ifge 51
        67: .line 369
            iconst_1
            istore 7 /* success */
        end local 12 // int read
        68: .line 370
            aload 11 /* wbc */
            ifnull 71
            aload 11 /* wbc */
            invokeinterface java.nio.channels.SeekableByteChannel.close:()V
            goto 71
      StackMap locals:
      StackMap stack: java.lang.Throwable
        69: astore 8
            aload 11 /* wbc */
            ifnull 70
            aload 11 /* wbc */
            invokeinterface java.nio.channels.SeekableByteChannel.close:()V
        end local 11 // java.nio.channels.SeekableByteChannel wbc
      StackMap locals:
      StackMap stack:
        70: aload 8
            athrow
      StackMap locals:
      StackMap stack:
        71: aload 10 /* rbc */
            ifnull 86
            aload 10 /* rbc */
            invokeinterface java.nio.channels.ReadableByteChannel.close:()V
            goto 86
      StackMap locals:
      StackMap stack: java.lang.Throwable
        72: astore 9
            aload 8
            ifnonnull 73
            aload 9
            astore 8
            goto 74
      StackMap locals:
      StackMap stack:
        73: aload 8
            aload 9
            if_acmpeq 74
            aload 8
            aload 9
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        74: aload 10 /* rbc */
            ifnull 75
            aload 10 /* rbc */
            invokeinterface java.nio.channels.ReadableByteChannel.close:()V
        end local 10 // java.nio.channels.ReadableByteChannel rbc
      StackMap locals:
      StackMap stack:
        75: aload 8
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        76: astore 9
            aload 8
            ifnonnull 77
            aload 9
            astore 8
            goto 78
      StackMap locals:
      StackMap stack:
        77: aload 8
            aload 9
            if_acmpeq 78
            aload 8
            aload 9
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        78: aload 8
            athrow
      StackMap locals: org.graalvm.component.installer.remote.FileDownloader int java.nio.file.Path java.net.URLConnection top java.nio.ByteBuffer int int
      StackMap stack: java.io.UncheckedIOException
        79: astore 8 /* ex */
        start local 8 // java.io.UncheckedIOException ex
        80: .line 371
            aload 8 /* ex */
            invokevirtual java.io.UncheckedIOException.getCause:()Ljava/io/IOException;
            athrow
        end local 8 // java.io.UncheckedIOException ex
        81: .line 372
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 8 /* ex */
        start local 8 // java.io.IOException ex
        82: .line 374
            aload 8 /* ex */
            athrow
        end local 8 // java.io.IOException ex
        83: .line 375
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 15
        84: .line 376
            aload 0 /* this */
            iload 7 /* success */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.stopProgress:(Z)V
        85: .line 377
            aload 15
            athrow
        86: .line 376
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 7 /* success */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.stopProgress:(Z)V
        87: .line 378
            aload 0 /* this */
            invokevirtual org.graalvm.component.installer.remote.FileDownloader.verifyDigest:()V
        88: .line 379
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.localFile:Ljava/io/File;
            invokevirtual java.io.File.toPath:()Ljava/nio/file/Path;
            invokeinterface org.graalvm.component.installer.Feedback.addLocalFileCache:(Ljava/net/URL;Ljava/nio/file/Path;)V
        89: .line 380
            return
        end local 7 // boolean success
        end local 6 // boolean first
        end local 5 // java.nio.ByteBuffer bb
        end local 3 // java.net.URLConnection conn
        end local 2 // java.nio.file.Path localCache
        end local 1 // boolean fromFile
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   90     0        this  Lorg/graalvm/component/installer/remote/FileDownloader;
            2   90     1    fromFile  Z
           18   90     2  localCache  Ljava/nio/file/Path;
           23   26     3           p  Ljava/nio/file/Path;
           27   28     3          ex  Ljava/net/URISyntaxException;
           29   90     3        conn  Ljava/net/URLConnection;
           40   90     5          bb  Ljava/nio/ByteBuffer;
           44   90     6       first  Z
           45   90     7     success  Z
           47   75    10         rbc  Ljava/nio/channels/ReadableByteChannel;
           50   70    11         wbc  Ljava/nio/channels/SeekableByteChannel;
           51   65    12        read  I
           66   68    12        read  I
           57   59    13         pos  J
           80   81     8          ex  Ljava/io/UncheckedIOException;
           82   83     8          ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          22    25      26  Class java.net.URISyntaxException
          50    68      69  any
          47    71      72  any
          46    76      76  any
          45    79      79  Class java.io.UncheckedIOException
          45    79      81  Class java.io.IOException
          45    83      83  any
    Exceptions:
      throws java.io.IOException

  public void setConnectionFactory(org.graalvm.component.installer.URLConnectionFactory);
    descriptor: (Lorg/graalvm/component/installer/URLConnectionFactory;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
        start local 1 // org.graalvm.component.installer.URLConnectionFactory connFactory
         0: .line 383
            aload 0 /* this */
            aload 1 /* connFactory */
            putfield org.graalvm.component.installer.remote.FileDownloader.connectionFactory:Lorg/graalvm/component/installer/URLConnectionFactory;
         1: .line 384
            return
        end local 1 // org.graalvm.component.installer.URLConnectionFactory connFactory
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/graalvm/component/installer/remote/FileDownloader;
            0    2     1  connFactory  Lorg/graalvm/component/installer/URLConnectionFactory;
    MethodParameters:
             Name  Flags
      connFactory  

  org.graalvm.component.installer.URLConnectionFactory getConnectionFactory();
    descriptor: ()Lorg/graalvm/component/installer/URLConnectionFactory;
    flags: (0x0000) 
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.graalvm.component.installer.remote.FileDownloader this
         0: .line 387
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.connectionFactory:Lorg/graalvm/component/installer/URLConnectionFactory;
            ifnonnull 2
         1: .line 388
            aload 0 /* this */
            new org.graalvm.component.installer.remote.ProxyConnectionFactory
            dup
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.feedback:Lorg/graalvm/component/installer/Feedback;
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.sourceURL:Ljava/net/URL;
            invokespecial org.graalvm.component.installer.remote.ProxyConnectionFactory.<init>:(Lorg/graalvm/component/installer/Feedback;Ljava/net/URL;)V
            putfield org.graalvm.component.installer.remote.FileDownloader.connectionFactory:Lorg/graalvm/component/installer/URLConnectionFactory;
         2: .line 390
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.component.installer.remote.FileDownloader.connectionFactory:Lorg/graalvm/component/installer/URLConnectionFactory;
            areturn
        end local 0 // org.graalvm.component.installer.remote.FileDownloader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/graalvm/component/installer/remote/FileDownloader;
}
SourceFile: "FileDownloader.java"
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles