JAL-3420 JAL-3394 Using install4j8 template with file associations. Attempts unix...
authorBen Soares <bsoares@dundee.ac.uk>
Wed, 28 Aug 2019 16:18:36 +0000 (17:18 +0100)
committerBen Soares <bsoares@dundee.ac.uk>
Wed, 28 Aug 2019 16:18:36 +0000 (17:18 +0100)
build.gradle
gradle.properties
utils/install4j/auto_file_associations-i4j8.pl [new file with mode: 0755]
utils/install4j/auto_file_associations.pl
utils/install4j/file_associations_auto-install4j8.xml [new file with mode: 0644]
utils/install4j/file_associations_template-install4j8.xml [new file with mode: 0644]
utils/install4j/install4j8_template.install4j [new file with mode: 0644]

index f02d8ad..6024b84 100644 (file)
@@ -1057,15 +1057,16 @@ clean {
 install4j {
   def install4jHomeDir = "/opt/install4j"
   def hostname = "hostname".execute().text.trim()
+  def install4jName = (install4jVersion >= 8) ? "install4j"+install4jVersion:"install4j"
   if (hostname.equals("jv-bamboo")) {
-    install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
+    install4jHomeDir = System.getProperty("user.home")+"/buildtools/"+install4jName
   } else if (OperatingSystem.current().isMacOsX()) {
-    install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
+    install4jHomeDir = '/Applications/'+install4jName+'.app/Contents/Resources/app'
     if (! file(install4jHomeDir).exists()) {
       install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
     }
   } else if (OperatingSystem.current().isLinux()) {
-    install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
+    install4jHomeDir = System.getProperty("user.home")+"/buildtools/"+install4jName
   }
   installDir = file(install4jHomeDir)
   mediaTypes = Arrays.asList(install4jMediaTypes.split(","))
@@ -1088,9 +1089,10 @@ task copyInstall4jTemplate(type: Copy) {
   macosJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre"+JAVA_VERSION+".tar.gz"
   windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/windows-jre"+JAVA_VERSION+"/jre"
   windowsJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre"+JAVA_VERSION+".tar.gz"
+  def i4jTemplate = (install4jVersion >= 8)?install4j8Template:install4jTemplate
   from (install4jDir) {
-    include install4jTemplate
-    rename (install4jTemplate, install4jConfFile)
+    include i4jTemplate
+    rename (i4jTemplate, install4jConfFile)
     filter(ReplaceTokens, beginToken: '', endToken: '', tokens: ['9999999999': JAVA_VERSION])
     filter(ReplaceTokens, beginToken: '$$', endToken: '$$',
     tokens: [
@@ -1120,7 +1122,8 @@ task copyInstall4jTemplate(type: Copy) {
 
   doLast {
     // include file associations in installer
-    def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text
+    def i4jIFA = (install4jVersion >= 8)?install4j8InstallerFileAssociations:install4jInstallerFileAssociations
+    def installerFileAssociationsXml = file("$install4jDir/$i4jIFA").text
     ant.replaceregexp(
       byline: false,
       flags: "s",
index 2dbdad3..3a0ef3f 100644 (file)
@@ -106,12 +106,15 @@ j11libDir = j11lib
 j11modDir = j11mod
 j11modules = com.sun.istack.runtime,com.sun.xml.bind,com.sun.xml.fastinfoset,com.sun.xml.streambuffer,com.sun.xml.txw2,com.sun.xml.ws.policy,java.activation,java.annotation,java.base,java.compiler,java.datatransfer,java.desktop,java.logging,java.management,java.management.rmi,java.naming,java.prefs,java.rmi,java.scripting,java.security.sasl,java.sql,java.xml,java.xml.bind,java.xml.soap,java.xml.ws,javax.jws,jdk.httpserver,jdk.jsobject,jdk.unsupported,jdk.xml.dom,org.jvnet.mimepull,org.jvnet.staxex,javax.servlet.api,java.ws.rs
 
+install4jVersion = 8
 install4jCopyrightMessage = ...
 install4jMacOSBundleId = org.jalview.jalview-desktop
 install4jResourceDir = utils/install4j
 install4jTemplate = install4j_template.install4j
+install4j8Template = install4j8_template.install4j
 install4jInfoPlistFileAssociations = file_associations_auto-Info_plist.xml
 install4jInstallerFileAssociations = file_associations_auto-install4j.xml
+install4j8InstallerFileAssociations = file_associations_auto-install4j8.xml
 install4jDMGUninstallerAppFiles = uninstall_old_jalview_files.xml
 install4jBuildDir = build/install4j
 install4jMediaTypes = windows,macosArchive,linuxRPM,linuxDeb,unixArchive,unixInstaller
@@ -139,4 +142,4 @@ RUNRSYNC=false
 bamboo_channelbase = https://builds.jalview.org/browse
 bamboo_planKey = 
 bamboo_getdown_channel_suffix = /latest/artifact/shared/getdown-channel
\ No newline at end of file
diff --git a/utils/install4j/auto_file_associations-i4j8.pl b/utils/install4j/auto_file_associations-i4j8.pl
new file mode 100755 (executable)
index 0000000..c8299f6
--- /dev/null
@@ -0,0 +1,137 @@
+#!/usr/bin/env perl
+
+use strict;
+
+my $i4jversion = 8;
+if ($ARGV[0] eq "-v") {
+  shift @ARGV;
+  $i4jversion = shift @ARGV;
+  die("-v i4jversion must be an integer [probably 7 or 8]") unless $i4jversion =~ m/^\d+$/;
+}
+
+my $fileformats = $ARGV[0];
+$fileformats = "../../src/jalview/io/FileFormat.java" unless $fileformats;
+
+# default mimetype will be text/x-$shortname
+# TODO: find an actual extension for mat, see JAL-Xxxxx for outstanding issues too
+# TODO: look up standard mime type used for BLASTfmt matrices, etc
+my $mimetypes = {
+  rnaml => "application/rnaml+xml",
+  biojson => "application/x-jalview-biojson+json",
+  jnet => "application/x-jalview-jnet+text",
+  features => "application/x-jalview-features+text",
+  scorematrix => "application/x-jalview-scorematrix+text",
+  pdb => "chemical/x-pdb",
+  mmcif => "chemical/x-cif",
+  mmcif2 => "chemical/x-mcif",
+  jalview => "application/x-jalview+xml+zip",
+  jvl => "application/x-jalview-jvl+text",
+  annotations => "application/x-jalview-annotations+text",
+};
+
+my @dontaddshortname = qw(features json);
+my @dontaddextension = qw(html xml json jar mfa fastq);
+my $add_associations = {
+  biojson => {shortname=>"biojson",name=>"BioJSON",extensions=>["biojson"]},
+  gff2 => {shortname=>"gff2",name=>"Generic Features Format v2",extensions=>["gff2"]},
+  gff3 => {shortname=>"gff3",name=>"Generic Features Format v3",extensions=>["gff3"]},
+  features => {shortname=>"features",name=>"Jalview Features",extensions=>["features","jvfeatures"]},
+  annotations => {shortname=>"annotations",name=>"Jalview Annotations",extensions=>["annotations","jvannotations"]},
+  mmcif2 => {shortname=>"mmcif2",name=>"mmCIF",extensions=>["mcif","mmcif"]},
+  jvl => {shortname=>"jvl",name=>"Jalview Version Locator",extensions=>["jvl"],iconfile=>"Jalview-Version-Locator"},
+  jnet => {shortname=>"jnet",name=>"JnetFile",extensions=>["concise","jnet"]},
+  scorematrix => {shortname=>"scorematrix",name=>"Substitution Matrix",extensions=>["mat"]},
+};
+my $add_extensions = {
+  blc => ["blc"],
+};
+my @put_first = qw(jalview jvl);
+
+my $v = ($i4jversion >= 8)?$i4jversion:"";
+my $i4jtemplatefile = "file_associations_template-install4j${v}.xml";
+my $i4jtemplate;
+open(IT,"<$i4jtemplatefile") or dir("Could not open '$i4jtemplatefile' for reading");
+while(<IT>){
+  $i4jtemplate .= $_;
+}
+close(IT);
+my $i4jauto;
+
+my $i4jautofile = $i4jtemplatefile;
+$i4jautofile =~ s/template/auto$1/;
+
+open(IA,">$i4jautofile") or die ("Could not open '$i4jautofile' for writing");
+
+open(IN, "<$fileformats") or die ("Could not open '$fileformats' for reading");
+my $id = 10000;
+my $file_associations = {};
+while(my $line = <IN>) {
+  $line =~ s/\s+/ /g;
+  $line =~ s/(^ | $)//g;
+  if ($line =~ m/^(\w+) ?\( ?"([^"]*)" ?, ?"([^"]*)" ?, ?(true|false) ?, ?(true|false) ?\)$/i) {
+    my $shortname = lc($1);
+    next if (grep($_ eq $shortname, @dontaddshortname));
+    my $name = $2;
+    my $extensions = $3;
+    $extensions =~ s/\s+//g;
+    my @possextensions = split(m/,/,$extensions);
+    my @extensions;
+    my $addext = $add_extensions->{$shortname};
+    if (ref($addext) eq "ARRAY") {
+      push(@possextensions, @$addext);
+    }
+    for my $possext (@possextensions) {
+      next if grep($_ eq $possext, @extensions);
+      next if grep($_ eq $possext, @dontaddextension);
+      push(@extensions,$possext);
+    }
+    next unless scalar(@extensions);
+    $file_associations->{$shortname} = {
+      shortname => $shortname,
+      name => $name,
+      extensions => \@extensions
+    };
+    warn("Adding file association for $shortname\n");
+  }
+}
+close(IN);
+
+my %all_associations = (%$file_associations, %$add_associations);
+
+for my $shortname (@put_first, sort keys %all_associations) {
+  my $a = $all_associations{$shortname};
+  if (ref($a) ne "HASH") {
+    next;
+  }
+
+  my $name = $a->{name};
+  my $extensions = $a->{extensions};
+  my $mimetype = $mimetypes->{$shortname};
+  $mimetype = "text/x-$shortname" unless $mimetype;
+
+  my $iconfile = $a->{iconfile};
+  $iconfile = "Jalview-File" unless $iconfile;
+
+  my @extensions = @$extensions;
+  #warn("LINE: $line\nFound extensions '".join("', '", @extensions)."' for $name Files ($shortname)'n");
+
+  my $i4jentry = $i4jtemplate;
+
+  $i4jentry =~ s/\$\$NAME\$\$/$name/g;
+  $i4jentry =~ s/\$\$SHORTNAME\$\$/$shortname/g;
+  $i4jentry =~ s/\$\$MIMETYPE\$\$/$mimetype/g;
+  $i4jentry =~ s/\$\$ICONFILE\$\$/$iconfile/g;
+
+  for my $ext (@extensions) {
+    my $i4jextentry = $i4jentry;
+    $i4jextentry =~ s/\$\$EXTENSION\$\$/$ext/g;
+    $i4jextentry =~ s/\$\$ID\$\$/$id/g;
+    $id++;
+
+    print IA $i4jextentry;
+  }
+
+  delete $all_associations{$shortname};
+}
+
+close(IA);
index e59044f..7613778 100755 (executable)
@@ -2,6 +2,15 @@
 
 use strict;
 
+my $i4jversion = 7;
+if ($ARGV[0] eq "-v") {
+  shift @ARGV;
+  $i4jversion = shift @ARGV;
+  die("-v i4jversion must be an integer [probably 7 or 8]") unless $i4jversion =~ m/^\d+$/;
+}
+# backwards compatibility
+$i4jversion = "" if $i4jversion < 8;
+
 my $fileformats = $ARGV[0];
 $fileformats = "../../src/jalview/io/FileFormat.java" unless $fileformats;
 
@@ -41,7 +50,7 @@ my $add_extensions = {
 my @put_first = qw(jalview jvl);
 
 my $mactemplatefile = "file_associations_template-Info_plist.xml";
-my $i4jtemplatefile = "file_associations_template-install4j.xml";
+my $i4jtemplatefile = ($i4jversion >= 8)?"file_associations_template-install4j${i4jversion}.xml";
 my $mactemplate;
 my $i4jtemplate;
 open(MT,"<$mactemplatefile") or dir("Could not open '$mactemplatefile' for reading");
diff --git a/utils/install4j/file_associations_auto-install4j8.xml b/utils/install4j/file_associations_auto-install4j8.xml
new file mode 100644 (file)
index 0000000..ab44bb5
--- /dev/null
@@ -0,0 +1,682 @@
+              <action id="10000" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .jvp file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview File</property>
+                  <property name="extension" type="string">jvp</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10001" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .jvl file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview Version Locator File</property>
+                  <property name="extension" type="string">jvl</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-Version-Locator.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-Version-Locator.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10002" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .amsa file association">
+                <serializedBean>
+                  <property name="description" type="string">AMSA File</property>
+                  <property name="extension" type="string">amsa</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10003" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .annotations file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview Annotations File</property>
+                  <property name="extension" type="string">annotations</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10004" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .jvannotations file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview Annotations File</property>
+                  <property name="extension" type="string">jvannotations</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10005" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .biojson file association">
+                <serializedBean>
+                  <property name="description" type="string">BioJSON File</property>
+                  <property name="extension" type="string">biojson</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10006" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .BLC file association">
+                <serializedBean>
+                  <property name="description" type="string">BLC File</property>
+                  <property name="extension" type="string">BLC</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10007" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .blc file association">
+                <serializedBean>
+                  <property name="description" type="string">BLC File</property>
+                  <property name="extension" type="string">blc</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10008" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .aln file association">
+                <serializedBean>
+                  <property name="description" type="string">Clustal File</property>
+                  <property name="extension" type="string">aln</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10009" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .fa file association">
+                <serializedBean>
+                  <property name="description" type="string">Fasta File</property>
+                  <property name="extension" type="string">fa</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10010" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .fasta file association">
+                <serializedBean>
+                  <property name="description" type="string">Fasta File</property>
+                  <property name="extension" type="string">fasta</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10011" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .features file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview Features File</property>
+                  <property name="extension" type="string">features</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10012" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .jvfeatures file association">
+                <serializedBean>
+                  <property name="description" type="string">Jalview Features File</property>
+                  <property name="extension" type="string">jvfeatures</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10013" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff2 file association">
+                <serializedBean>
+                  <property name="description" type="string">Generic Features Format v2 File</property>
+                  <property name="extension" type="string">gff2</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10014" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff3 file association">
+                <serializedBean>
+                  <property name="description" type="string">Generic Features Format v3 File</property>
+                  <property name="extension" type="string">gff3</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10015" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .concise file association">
+                <serializedBean>
+                  <property name="description" type="string">JnetFile File</property>
+                  <property name="extension" type="string">concise</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10016" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .jnet file association">
+                <serializedBean>
+                  <property name="description" type="string">JnetFile File</property>
+                  <property name="extension" type="string">jnet</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10017" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .cif file association">
+                <serializedBean>
+                  <property name="description" type="string">mmCIF File</property>
+                  <property name="extension" type="string">cif</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10018" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .mcif file association">
+                <serializedBean>
+                  <property name="description" type="string">mmCIF File</property>
+                  <property name="extension" type="string">mcif</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10019" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .mmcif file association">
+                <serializedBean>
+                  <property name="description" type="string">mmCIF File</property>
+                  <property name="extension" type="string">mmcif</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10020" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .msf file association">
+                <serializedBean>
+                  <property name="description" type="string">MSF File</property>
+                  <property name="extension" type="string">msf</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10021" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pdb file association">
+                <serializedBean>
+                  <property name="description" type="string">PDB File</property>
+                  <property name="extension" type="string">pdb</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10022" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .ent file association">
+                <serializedBean>
+                  <property name="description" type="string">PDB File</property>
+                  <property name="extension" type="string">ent</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10023" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pfam file association">
+                <serializedBean>
+                  <property name="description" type="string">PFAM File</property>
+                  <property name="extension" type="string">pfam</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10024" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .phy file association">
+                <serializedBean>
+                  <property name="description" type="string">PHYLIP File</property>
+                  <property name="extension" type="string">phy</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10025" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pileup file association">
+                <serializedBean>
+                  <property name="description" type="string">PileUp File</property>
+                  <property name="extension" type="string">pileup</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10026" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pir file association">
+                <serializedBean>
+                  <property name="description" type="string">PIR File</property>
+                  <property name="extension" type="string">pir</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10027" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .rnaml file association">
+                <serializedBean>
+                  <property name="description" type="string">RNAML File</property>
+                  <property name="extension" type="string">rnaml</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10028" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .mat file association">
+                <serializedBean>
+                  <property name="description" type="string">Substitution Matrix File</property>
+                  <property name="extension" type="string">mat</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10029" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .sto file association">
+                <serializedBean>
+                  <property name="description" type="string">Stockholm File</property>
+                  <property name="extension" type="string">sto</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
+              <action id="10030" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .stk file association">
+                <serializedBean>
+                  <property name="description" type="string">Stockholm File</property>
+                  <property name="extension" type="string">stk</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>Jalview-File.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
diff --git a/utils/install4j/file_associations_template-install4j8.xml b/utils/install4j/file_associations_template-install4j8.xml
new file mode 100644 (file)
index 0000000..ce5ebae
--- /dev/null
@@ -0,0 +1,22 @@
+              <action id="$$ID$$" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .$$EXTENSION$$ file association">
+                <serializedBean>
+                  <property name="description" type="string">$$NAME$$ File</property>
+                  <property name="extension" type="string">$$EXTENSION$$</property>
+                  <property name="launcherId" type="string">737</property>
+                  <property name="macIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>$$ICONFILE$$.icns</string>
+                    </object>
+                  </property>
+                  <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                  <property name="unix" type="boolean" value="true" />
+                  <property name="windowsIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>$$ICONFILE$$.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+              </action>
+
+                
+
diff --git a/utils/install4j/install4j8_template.install4j b/utils/install4j/install4j8_template.install4j
new file mode 100644 (file)
index 0000000..e595d04
--- /dev/null
@@ -0,0 +1,1202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<install4j version="8.0.1" transformSequenceNumber="8">
+  <directoryPresets config="." />
+  <application name="Jalview" applicationId="6595-2347-1923-0725" mediaDir="../../build/install4j" lzmaCompression="true" shortName="Jalview" publisher="University of Dundee" publisherWeb="http://www.jalview.org/" version="$$VERSION$$" allPathsRelative="true" macVolumeId="5aac4968c304f65" javaMinVersion="9999999999" allowBetaVM="true" jdkMode="jdk" jdkName="JDK 11.0">
+    <searchSequence>
+      <directory location="${compiler:JRE_DIR}" />
+      <registry />
+      <envVar name="JAVA_HOME" />
+    </searchSequence>
+    <variables>
+      <variable name="OSX_KEYSTORE" />
+      <variable name="JSIGN_SH" />
+      <variable name="JRE_DIR" value="jre" description="The folder under the app folder that the JRE will be either copied or unpacked into" />
+    </variables>
+    <codeSigning macEnabled="true" macPkcs12File="${compiler:OSX_KEYSTORE}" />
+  </application>
+  <files defaultUninstallMode="2">
+    <filesets>
+      <fileset name="Full file set" id="734" />
+      <fileset name="Mac OS X JRE" id="880" />
+      <fileset name="Windows JRE" id="882" />
+      <fileset name="Jalview application" id="1873" />
+      <fileset name="MacOS Old Jalview Uninstaller" id="2105" />
+    </filesets>
+    <roots>
+      <root id="735" fileset="734" />
+      <root id="881" fileset="880" />
+      <root id="883" fileset="882" />
+      <root id="1874" fileset="1873" />
+      <root id="2106" fileset="2105" />
+    </roots>
+    <mountPoints>
+      <mountPoint id="454" />
+      <mountPoint id="736" root="735" />
+      <mountPoint id="884" root="881" />
+      <mountPoint id="885" root="883" />
+      <mountPoint id="1875" root="1874" />
+      <mountPoint id="2107" root="2106" />
+    </mountPoints>
+    <entries>
+      <dirEntry mountPoint="454" file="../../getdown/files/$$JAVA_VERSION$$" uninstallMode="2" overrideOverwriteMode="true" overrideUninstallMode="true" subDirectory="files" />
+      <dirEntry mountPoint="736" file="../../getdown/website/$$JAVA_VERSION$$" uninstallMode="2" overrideOverwriteMode="true" overrideUninstallMode="true" subDirectory="files" />
+      <dirEntry mountPoint="884" file="$$MACOS_JAVA_VM_DIR$$" fileMode="755" overrideFileMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" />
+      <dirEntry mountPoint="885" file="$$WINDOWS_JAVA_VM_DIR$$" fileMode="755" overrideFileMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" />
+      <dirEntry mountPoint="1875" file="../../getdown/website/$$JAVA_VERSION$$/$$GETDOWN_DIST_DIR$$" overwriteMode="1" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="$$GETDOWN_DIST_DIR$$" overrideDirMode="true" />
+      <dirEntry mountPoint="2107" file="Uninstall Old Jalview.app" fileMode="755" overrideFileMode="true" entryMode="subdir" subDirectory="Uninstall Old Jalview.app" overrideDirMode="true" />
+    </entries>
+    <components>
+      <component name="jalview_getdown" id="1031">
+        <include>
+          <entry filesetId="734" />
+        </include>
+      </component>
+      <component name="macos_java_vm" id="1155">
+        <include>
+          <entry filesetId="880" />
+        </include>
+      </component>
+      <component name="windows_java_vm" id="1156">
+        <include>
+          <entry filesetId="882" />
+        </include>
+      </component>
+      <component name="getdown" id="1276">
+        <include>
+          <entry defaultFileset="true" />
+        </include>
+      </component>
+      <component name="jalview" id="1881">
+        <include>
+          <entry filesetId="1873" />
+        </include>
+      </component>
+      <component name="macos_old_jalview_uninstaller" id="2110">
+        <include>
+          <entry filesetId="2105" />
+        </include>
+      </component>
+    </components>
+  </files>
+  <launchers>
+    <launcher name="Offline Jalview Launcher" id="737" menuName="${compiler:sys.shortName}" icnsFile="../../resources/images/jalview_logos.icns" customMacBundleIdentifier="true" macBundleIdentifier="$$MACOS_BUNDLE_ID$$" fileset="734" useCustomMacosExecutableName="true" customMacosExecutableName="${compiler:sys.shortName}">
+      <executable name="${compiler:sys.shortName}" iconSet="true" iconFile="../../resources/images/jalview_logos.ico" executableDir="." redirectStdout="true" executableMode="gui" singleInstance="true" checkConsoleParameter="true">
+        <versionInfo include="true" fileDescription="${compiler:sys.shortName}" legalCopyright="$$COPYRIGHT_MESSAGE$$" internalName="${compiler:sys.shortName}" productName="${compiler:sys.shortName}" />
+      </executable>
+      <splashScreen width="640" height="480" bitmapFile="../../resources/images/jalview_logo_background_fade-640x480.png" textOverlay="true">
+        <text>
+          <statusLine x="85" y="81" text="${compiler:sys.shortName}" fontSize="18" />
+          <versionLine x="85" y="109" text="version ${compiler:sys.version}" />
+        </text>
+      </splashScreen>
+      <java mainClass="com.threerings.getdown.launcher.GetdownApp" arguments=". jalview">
+        <classPath>
+          <archive location="getdown-launcher.jar" />
+          <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
+        </classPath>
+      </java>
+      <iconImageFiles>
+        <file path="../../resources/images/JalviewLogo_Huge.png" />
+      </iconImageFiles>
+    </launcher>
+    <launcher name="Network Jalview Launcher" id="1402" menuName="${compiler:sys.shortName}" icnsFile="../../resources/images/jalview_logos.icns" customMacBundleIdentifier="true" macBundleIdentifier="$$MACOS_BUNDLE_ID$$" useCustomMacosExecutableName="true" customMacosExecutableName="${compiler:sys.shortName}">
+      <executable name="Jalview" iconSet="true" iconFile="../../resources/images/jalview_logos.ico" executableDir="." redirectStdout="true" executableMode="gui" singleInstance="true" checkConsoleParameter="true">
+        <versionInfo include="true" fileDescription="${compiler:sys.shortName}" legalCopyright="$$COPYRIGHT_MESSAGE$$" internalName="${compiler:sys.shortName}" productName="${compiler:sys.shortName}" />
+      </executable>
+      <splashScreen width="640" height="480" bitmapFile="../../resources/images/jalview_logo_background_fade-640x480.png" textOverlay="true">
+        <text>
+          <statusLine x="85" y="81" text="${compiler:sys.shortName}" fontSize="18" />
+          <versionLine x="85" y="109" text="version ${compiler:sys.version}" />
+        </text>
+      </splashScreen>
+      <java mainClass="com.threerings.getdown.launcher.GetdownApp" arguments=". jalview">
+        <classPath>
+          <archive location="getdown-launcher.jar" />
+          <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
+        </classPath>
+      </java>
+      <iconImageFiles>
+        <file path="../../resources/images/JalviewLogo_Huge.png" />
+      </iconImageFiles>
+    </launcher>
+    <launcher name="Jalview package" id="1876" menuName="${compiler:sys.shortName} $$VERSION$$" fileset="1873">
+      <executable name="${compiler:sys.shortName}" iconSet="true" redirectStderr="false" failOnStderrOutput="false" executableMode="gui" changeWorkingDirectory="false" singleInstance="true" />
+      <java mainClass="jalview.bin.Launcher">
+        <classPath>
+          <scanDirectory location="$$GETDOWN_DIST_DIR$$" failOnError="false" />
+        </classPath>
+      </java>
+      <macStaticAssociationActions mode="selected" />
+      <iconImageFiles>
+        <file path="../../resources/images/JalviewLogo_Huge.png" />
+      </iconImageFiles>
+    </launcher>
+  </launchers>
+  <installerGui autoUpdateDescriptorUrl="https://www.jalview.org/install4j/updates.xml">
+    <applications>
+      <application id="installer" beanClass="com.install4j.runtime.beans.applications.InstallerApplication" styleId="35" customIcnsFile="../../resources/images/jalview_logos.icns" customIcoFile="../../resources/images/jalview_logos.ico">
+        <serializedBean>
+          <property name="useCustomIcon" type="boolean" value="true" />
+        </serializedBean>
+        <styleOverrides>
+          <styleOverride name="Customize banner image" enabled="true">
+            <group id="146" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize banner image" externalParametrizationMode="include">
+              <serializedBean>
+                <property name="backgroundColor">
+                  <object class="java.awt.Color">
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                  </object>
+                </property>
+                <property name="borderSides">
+                  <object class="com.install4j.runtime.beans.formcomponents.BorderSides">
+                    <property name="bottom" type="boolean" value="true" />
+                  </object>
+                </property>
+                <property name="imageEdgeBackgroundColor">
+                  <object class="java.awt.Color">
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                  </object>
+                </property>
+                <property name="imageEdgeBorder" type="boolean" value="true" />
+                <property name="imageFile">
+                  <object class="com.install4j.api.beans.ExternalFile">
+                    <string>../../resources/images/jalview_logo_background_fade-640x480.png</string>
+                  </object>
+                </property>
+                <property name="insets">
+                  <object class="java.awt.Insets">
+                    <int>5</int>
+                    <int>10</int>
+                    <int>10</int>
+                    <int>10</int>
+                  </object>
+                </property>
+              </serializedBean>
+              <externalParametrizationPropertyNames>
+                <propertyName>imageAnchor</propertyName>
+                <propertyName>imageEdgeBackgroundColor</propertyName>
+                <propertyName>imageFile</propertyName>
+              </externalParametrizationPropertyNames>
+            </group>
+          </styleOverride>
+          <styleOverride name="Jalview" enabled="true">
+            <formComponent name="Watermark" id="352" beanClass="com.install4j.runtime.beans.formcomponents.SeparatorComponent" insetTop="0" insetLeft="5" insetBottom="0" useExternalParametrization="true" externalParametrizationName="Jalview" externalParametrizationMode="include">
+              <serializedBean>
+                <property name="enabledTitleText" type="boolean" value="false" />
+              </serializedBean>
+              <externalParametrizationPropertyNames>
+                <propertyName>labelText</propertyName>
+              </externalParametrizationPropertyNames>
+            </formComponent>
+          </styleOverride>
+        </styleOverrides>
+        <startup>
+          <screen id="1" beanClass="com.install4j.runtime.beans.screens.StartupScreen" rollbackBarrierExitCode="0">
+            <actions>
+              <action id="22" beanClass="com.install4j.runtime.beans.actions.misc.RequestPrivilegesAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="obtainIfAdminWin" type="boolean" value="false" />
+                </serializedBean>
+              </action>
+            </actions>
+          </screen>
+        </startup>
+        <screens>
+          <screen id="2" beanClass="com.install4j.runtime.beans.screens.WelcomeScreen" rollbackBarrierExitCode="0">
+            <styleOverrides>
+              <styleOverride name="Customize banner image" enabled="true">
+                <group id="145" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize banner image" externalParametrizationMode="include">
+                  <serializedBean>
+                    <property name="backgroundColor">
+                      <object class="java.awt.Color">
+                        <int>255</int>
+                        <int>255</int>
+                        <int>255</int>
+                        <int>255</int>
+                      </object>
+                    </property>
+                    <property name="borderSides">
+                      <object class="com.install4j.runtime.beans.formcomponents.BorderSides">
+                        <property name="bottom" type="boolean" value="true" />
+                      </object>
+                    </property>
+                    <property name="imageEdgeBackgroundColor">
+                      <object class="java.awt.Color">
+                        <int>25</int>
+                        <int>143</int>
+                        <int>220</int>
+                        <int>255</int>
+                      </object>
+                    </property>
+                    <property name="imageEdgeBorder" type="boolean" value="true" />
+                    <property name="imageFile">
+                      <object class="com.install4j.api.beans.ExternalFile">
+                        <string>../../resources/images/jalview_logo_background_fade-640x480.png</string>
+                      </object>
+                    </property>
+                    <property name="insets">
+                      <object class="java.awt.Insets">
+                        <int>5</int>
+                        <int>10</int>
+                        <int>10</int>
+                        <int>10</int>
+                      </object>
+                    </property>
+                  </serializedBean>
+                  <externalParametrizationPropertyNames>
+                    <propertyName>imageAnchor</propertyName>
+                    <propertyName>imageEdgeBackgroundColor</propertyName>
+                    <propertyName>imageFile</propertyName>
+                  </externalParametrizationPropertyNames>
+                </group>
+              </styleOverride>
+            </styleOverrides>
+            <actions>
+              <action id="7" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" multiExec="true">
+                <serializedBean>
+                  <property name="excludedVariables" type="array" elementType="string" length="1">
+                    <element index="0">sys.installationDir</element>
+                  </property>
+                </serializedBean>
+                <condition>context.getBooleanVariable("sys.confirmedUpdateInstallation")</condition>
+              </action>
+            </actions>
+            <formComponents>
+              <formComponent id="3" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
+                <serializedBean>
+                  <property name="labelText" type="string">${form:welcomeMessage}</property>
+                </serializedBean>
+                <visibilityScript>!context.isConsole()</visibilityScript>
+              </formComponent>
+              <formComponent id="4" beanClass="com.install4j.runtime.beans.formcomponents.ConsoleHandlerFormComponent">
+                <serializedBean>
+                  <property name="consoleScript">
+                    <object class="com.install4j.api.beans.ScriptProperty">
+                      <property name="value" type="string">String message = context.getMessage("ConsoleWelcomeLabel", context.getApplicationName());
+return console.askOkCancel(message, true);
+</property>
+                    </object>
+                  </property>
+                </serializedBean>
+              </formComponent>
+              <formComponent id="5" beanClass="com.install4j.runtime.beans.formcomponents.UpdateAlertComponent" useExternalParametrization="true" externalParametrizationName="Update Alert" externalParametrizationMode="include">
+                <externalParametrizationPropertyNames>
+                  <propertyName>updateCheck</propertyName>
+                </externalParametrizationPropertyNames>
+              </formComponent>
+              <formComponent id="6" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetTop="20">
+                <serializedBean>
+                  <property name="labelText" type="string">${i18n:ClickNext}</property>
+                </serializedBean>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="8" beanClass="com.install4j.runtime.beans.screens.InstallationDirectoryScreen" rollbackBarrierExitCode="0">
+            <condition>!context.getBooleanVariable("sys.confirmedUpdateInstallation")</condition>
+            <actions>
+              <action id="11" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" multiExec="true">
+                <serializedBean>
+                  <property name="excludedVariables" type="array" elementType="string" length="1">
+                    <element index="0">sys.installationDir</element>
+                  </property>
+                </serializedBean>
+                <condition>context.getVariable("sys.responseFile") == null</condition>
+              </action>
+            </actions>
+            <formComponents>
+              <formComponent id="9" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="25">
+                <serializedBean>
+                  <property name="labelText" type="string">${i18n:SelectDirLabel(${compiler:sys.fullName})}</property>
+                </serializedBean>
+              </formComponent>
+              <formComponent id="10" beanClass="com.install4j.runtime.beans.formcomponents.InstallationDirectoryChooserComponent" useExternalParametrization="true" externalParametrizationName="Installation Directory Chooser" externalParametrizationMode="include">
+                <serializedBean>
+                  <property name="requestFocus" type="boolean" value="true" />
+                </serializedBean>
+                <externalParametrizationPropertyNames>
+                  <propertyName>allowSpacesOnUnix</propertyName>
+                  <propertyName>checkFreeSpace</propertyName>
+                  <propertyName>checkWritable</propertyName>
+                  <propertyName>existingDirWarning</propertyName>
+                  <propertyName>manualEntryAllowed</propertyName>
+                  <propertyName>showFreeDiskSpace</propertyName>
+                  <propertyName>showRequiredDiskSpace</propertyName>
+                  <propertyName>standardValidation</propertyName>
+                  <propertyName>suggestAppDir</propertyName>
+                  <propertyName>validateApplicationId</propertyName>
+                  <propertyName>validationScript</propertyName>
+                </externalParametrizationPropertyNames>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="12" beanClass="com.install4j.runtime.beans.screens.ComponentsScreen" enabled="false" rollbackBarrierExitCode="0">
+            <formComponents>
+              <formComponent id="13" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
+                <serializedBean>
+                  <property name="labelText" type="string">${i18n:SelectComponentsLabel2}</property>
+                </serializedBean>
+                <visibilityScript>!context.isConsole()</visibilityScript>
+              </formComponent>
+              <formComponent id="14" beanClass="com.install4j.runtime.beans.formcomponents.ComponentSelectorComponent" useExternalParametrization="true" externalParametrizationName="Installation Components" externalParametrizationMode="include">
+                <serializedBean>
+                  <property name="fillVertical" type="boolean" value="true" />
+                </serializedBean>
+                <externalParametrizationPropertyNames>
+                  <propertyName>selectionChangedScript</propertyName>
+                </externalParametrizationPropertyNames>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="1692" beanClass="com.install4j.runtime.beans.screens.FileAssociationsScreen" rollbackBarrierExitCode="0">
+            <formComponents>
+              <formComponent id="1693" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
+                <serializedBean>
+                  <property name="labelText" type="string">${i18n:SelectAssociationsLabel}</property>
+                </serializedBean>
+              </formComponent>
+              <formComponent id="1694" beanClass="com.install4j.runtime.beans.formcomponents.FileAssociationsComponent" useExternalParametrization="true" externalParametrizationName="File Associations" externalParametrizationMode="include">
+                <serializedBean>
+                  <property name="fillVertical" type="boolean" value="true" />
+                  <property name="showSelectionButtons" type="boolean" value="true" />
+                </serializedBean>
+                <externalParametrizationPropertyNames>
+                  <propertyName>showSelectionButtons</propertyName>
+                  <propertyName>selectionButtonPosition</propertyName>
+                </externalParametrizationPropertyNames>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="15" beanClass="com.install4j.runtime.beans.screens.InstallationScreen" rollbackBarrier="true" rollbackBarrierExitCode="0">
+            <actions>
+              <action id="17" beanClass="com.install4j.runtime.beans.actions.InstallFilesAction" actionElevationType="elevated" rollbackBarrierExitCode="0" failureStrategy="quit" errorMessage="${i18n:FileCorrupted}" />
+              <action id="18" beanClass="com.install4j.runtime.beans.actions.desktop.CreateProgramGroupAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="uninstallerMenuName" type="string">${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}</property>
+                </serializedBean>
+                <condition>!context.getBooleanVariable("sys.programGroupDisabled")</condition>
+              </action>
+              <action id="19" beanClass="com.install4j.runtime.beans.actions.desktop.RegisterAddRemoveAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="itemName" type="string">${compiler:sys.fullName} ${compiler:sys.version}</property>
+                </serializedBean>
+              </action>
+              <action id="124" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="false" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="script">
+                    <object class="com.install4j.api.beans.ScriptProperty">
+                      <property name="value" type="string" />
+                    </object>
+                  </property>
+                  <property name="variableName" type="string" />
+                </serializedBean>
+                <condition>true</condition>
+              </action>
+              <action id="134" beanClass="com.install4j.runtime.beans.actions.misc.AddVmOptionsAction" enabled="false" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="launcherId" type="string">121</property>
+                  <property name="vmOptions" type="array" elementType="string" length="0" />
+                </serializedBean>
+              </action>
+            </actions>
+            <formComponents>
+              <formComponent id="16" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
+                <serializedBean>
+                  <property name="initialStatusMessage" type="string">${i18n:WizardPreparing}</property>
+                </serializedBean>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="20" beanClass="com.install4j.runtime.beans.screens.FinishedScreen" rollbackBarrierExitCode="0" finishScreen="true">
+            <actions>
+              <action id="2012" beanClass="com.install4j.runtime.beans.actions.desktop.CreateStartMenuEntryAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="allUsers" type="boolean" value="false" />
+                  <property name="entryName" type="string">${compiler:sys.shortName}</property>
+                  <property name="file">
+                    <object class="java.io.File">
+                      <string>${compiler:sys.shortName}</string>
+                    </object>
+                  </property>
+                  <property name="icon">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>../../resources/images/jalview_logos.ico</string>
+                    </object>
+                  </property>
+                  <property name="unixIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>../../resources/images/JalviewLogo_Huge.png</string>
+                    </object>
+                  </property>
+                </serializedBean>
+                <condition>!context.getBooleanVariable("sys.programGroupDisabled")</condition>
+              </action>
+              <action id="573" beanClass="com.install4j.runtime.beans.actions.desktop.CreateDesktopLinkAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make desktop link">
+                <serializedBean>
+                  <property name="allUsers" type="boolean" value="false" />
+                  <property name="description" type="string">${compiler:sys.shortName}</property>
+                  <property name="file">
+                    <object class="java.io.File">
+                      <string>${compiler:sys.shortName}</string>
+                    </object>
+                  </property>
+                  <property name="name" type="string">${compiler:sys.fullName}</property>
+                  <property name="unixIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>../../resources/images/JalviewLogo_Huge.png</string>
+                    </object>
+                  </property>
+                  <property name="winIconFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>../../resources/images/jalview_logos.ico</string>
+                    </object>
+                  </property>
+                </serializedBean>
+                <condition>context.getBooleanVariable("createDesktopLinkAction")</condition>
+              </action>
+              <action id="576" beanClass="com.install4j.runtime.beans.actions.desktop.AddToDockAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="executable">
+                    <object class="java.io.File">
+                      <string>Jalview.app</string>
+                    </object>
+                  </property>
+                </serializedBean>
+                <condition>context.getBooleanVariable("addToDockAction")</condition>
+              </action>
+              <action name="EXTENSIONS_REPLACED_BY_GRADLE" id="1691" customizedId="EXTENSIONS" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="description" type="string">This action, identified by its name "EXTENSIONS_REPLACED_BY_GRADLE", will be replaced by gradle with the contents of file 'file_associations_auto_install4j.xml'.</property>
+                  <property name="extension" type="string">extensions_to_be_replaced_by_gradle</property>
+                </serializedBean>
+              </action>
+            </actions>
+            <formComponents>
+              <formComponent id="21" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
+                <serializedBean>
+                  <property name="labelText" type="string">${form:finishedMessage}</property>
+                </serializedBean>
+              </formComponent>
+              <formComponent name="Add a desktop link" id="574" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">${i18n:CreateDesktopIcon}</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">createDesktopLinkAction</property>
+                </serializedBean>
+              </formComponent>
+              <formComponent name="Add an executable to the dock" id="577" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">${i18n:AddToDock}</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">addToDockAction</property>
+                </serializedBean>
+                <visibilityScript>Util.isMacOS()</visibilityScript>
+              </formComponent>
+            </formComponents>
+          </screen>
+        </screens>
+      </application>
+      <application id="uninstaller" beanClass="com.install4j.runtime.beans.applications.UninstallerApplication" styleId="35">
+        <serializedBean>
+          <property name="customMacosExecutableName" type="string">${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}</property>
+          <property name="useCustomMacosExecutableName" type="boolean" value="true" />
+        </serializedBean>
+        <styleOverrides>
+          <styleOverride name="Customize banner image" enabled="true">
+            <group id="147" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize banner image" externalParametrizationMode="include">
+              <serializedBean>
+                <property name="backgroundColor">
+                  <object class="java.awt.Color">
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                    <int>255</int>
+                  </object>
+                </property>
+                <property name="borderSides">
+                  <object class="com.install4j.runtime.beans.formcomponents.BorderSides">
+                    <property name="bottom" type="boolean" value="true" />
+                  </object>
+                </property>
+                <property name="imageEdgeBackgroundColor">
+                  <object class="java.awt.Color">
+                    <int>192</int>
+                    <int>192</int>
+                    <int>192</int>
+                    <int>255</int>
+                  </object>
+                </property>
+                <property name="imageEdgeBorder" type="boolean" value="true" />
+                <property name="imageFile">
+                  <object class="com.install4j.api.beans.ExternalFile">
+                    <string>../../resources/images/jalview_logo_background_fade-640x480.png</string>
+                  </object>
+                </property>
+                <property name="insets">
+                  <object class="java.awt.Insets">
+                    <int>5</int>
+                    <int>10</int>
+                    <int>10</int>
+                    <int>10</int>
+                  </object>
+                </property>
+              </serializedBean>
+              <externalParametrizationPropertyNames>
+                <propertyName>imageAnchor</propertyName>
+                <propertyName>imageEdgeBackgroundColor</propertyName>
+                <propertyName>imageFile</propertyName>
+              </externalParametrizationPropertyNames>
+            </group>
+          </styleOverride>
+        </styleOverrides>
+        <startup>
+          <screen id="23" beanClass="com.install4j.runtime.beans.screens.StartupScreen" rollbackBarrierExitCode="0">
+            <actions>
+              <action id="33" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" />
+              <action id="34" beanClass="com.install4j.runtime.beans.actions.misc.RequireInstallerPrivilegesAction" actionElevationType="none" rollbackBarrierExitCode="0" />
+            </actions>
+          </screen>
+        </startup>
+        <screens>
+          <screen id="24" beanClass="com.install4j.runtime.beans.screens.UninstallWelcomeScreen" rollbackBarrierExitCode="0">
+            <formComponents>
+              <formComponent id="25" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
+                <serializedBean>
+                  <property name="labelText" type="string">${form:welcomeMessage}</property>
+                </serializedBean>
+                <visibilityScript>!context.isConsole()</visibilityScript>
+              </formComponent>
+              <formComponent id="26" beanClass="com.install4j.runtime.beans.formcomponents.ConsoleHandlerFormComponent">
+                <serializedBean>
+                  <property name="consoleScript">
+                    <object class="com.install4j.api.beans.ScriptProperty">
+                      <property name="value" type="string">String message = context.getMessage("ConfirmUninstall", context.getApplicationName());
+return console.askYesNo(message, true);
+</property>
+                    </object>
+                  </property>
+                </serializedBean>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="27" beanClass="com.install4j.runtime.beans.screens.UninstallationScreen" rollbackBarrierExitCode="0">
+            <actions>
+              <action id="659" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="progressChangeType" type="enum" class="com.install4j.runtime.beans.actions.control.ProgressChangeType" value="SET_INDETERMINATE" />
+                </serializedBean>
+              </action>
+              <action id="29" beanClass="com.install4j.runtime.beans.actions.UninstallFilesAction" actionElevationType="elevated" rollbackBarrierExitCode="0" />
+              <action id="660" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" enabled="false" actionElevationType="none" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="percentValue" type="int" value="95" />
+                </serializedBean>
+              </action>
+              <action id="1525" beanClass="com.install4j.runtime.beans.actions.files.DeleteFileAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="files" type="array" class="java.io.File" length="31">
+                    <element index="0">
+                      <object class="java.io.File">
+                        <string>jre</string>
+                      </object>
+                    </element>
+                    <element index="1">
+                      <object class="java.io.File">
+                        <string>jre.jar</string>
+                      </object>
+                    </element>
+                    <element index="2">
+                      <object class="java.io.File">
+                        <string>.install4j</string>
+                      </object>
+                    </element>
+                    <element index="3">
+                      <object class="java.io.File">
+                        <string>$$GETDOWN_DIST_DIR$$</string>
+                      </object>
+                    </element>
+                    <element index="4">
+                      <object class="java.io.File">
+                        <string>$$GETDOWN_ALT_DIR$$</string>
+                      </object>
+                    </element>
+                    <element index="5">
+                      <object class="java.io.File">
+                        <string>$$GETDOWN_RESOURCE_DIR$$</string>
+                      </object>
+                    </element>
+                    <element index="6">
+                      <object class="java.io.File">
+                        <string>getdown-launcher.jar</string>
+                      </object>
+                    </element>
+                    <element index="7">
+                      <object class="java.io.File">
+                        <string>getdown-launcher-old.jar</string>
+                      </object>
+                    </element>
+                    <element index="8">
+                      <object class="java.io.File">
+                        <string>getdown-launcher-new.jar</string>
+                      </object>
+                    </element>
+                    <element index="9">
+                      <object class="java.io.File">
+                        <string>*.jarv</string>
+                      </object>
+                    </element>
+                    <element index="10">
+                      <object class="java.io.File">
+                        <string>gettingdown.lock</string>
+                      </object>
+                    </element>
+                    <element index="11">
+                      <object class="java.io.File">
+                        <string>*.log</string>
+                      </object>
+                    </element>
+                    <element index="12">
+                      <object class="java.io.File">
+                        <string>*.txt</string>
+                      </object>
+                    </element>
+                    <element index="13">
+                      <object class="java.io.File">
+                        <string>*_new</string>
+                      </object>
+                    </element>
+                    <element index="14">
+                      <object class="java.io.File">
+                        <string>digest.txt</string>
+                      </object>
+                    </element>
+                    <element index="15">
+                      <object class="java.io.File">
+                        <string>digest2.txt</string>
+                      </object>
+                    </element>
+                    <element index="16">
+                      <object class="java.io.File">
+                        <string>getdown-launcher.jarv</string>
+                      </object>
+                    </element>
+                    <element index="17">
+                      <object class="java.io.File">
+                        <string>getdown-launcher-new.jarv</string>
+                      </object>
+                    </element>
+                    <element index="18">
+                      <object class="java.io.File">
+                        <string>channel_launch.jvl</string>
+                      </object>
+                    </element>
+                    <element index="19">
+                      <object class="java.io.File">
+                        <string>launcher.log</string>
+                      </object>
+                    </element>
+                    <element index="20">
+                      <object class="java.io.File">
+                        <string>proxy.txt</string>
+                      </object>
+                    </element>
+                    <element index="21">
+                      <object class="java.io.File">
+                        <string>META-INF</string>
+                      </object>
+                    </element>
+                    <element index="22">
+                      <object class="java.io.File">
+                        <string>install/getdown-launcher.jar</string>
+                      </object>
+                    </element>
+                    <element index="23">
+                      <object class="java.io.File">
+                        <string>install/getdown.txt</string>
+                      </object>
+                    </element>
+                    <element index="24">
+                      <object class="java.io.File">
+                        <string>install/build_properties</string>
+                      </object>
+                    </element>
+                    <element index="25">
+                      <object class="java.io.File">
+                        <string>build_properties</string>
+                      </object>
+                    </element>
+                    <element index="26">
+                      <object class="java.io.File">
+                        <string>install</string>
+                      </object>
+                    </element>
+                    <element index="27">
+                      <object class="java.io.File">
+                        <string>dist</string>
+                      </object>
+                    </element>
+                    <element index="28">
+                      <object class="java.io.File">
+                        <string>release</string>
+                      </object>
+                    </element>
+                    <element index="29">
+                      <object class="java.io.File">
+                        <string>alt</string>
+                      </object>
+                    </element>
+                    <element index="30">
+                      <object class="java.io.File">
+                        <string>resource</string>
+                      </object>
+                    </element>
+                  </property>
+                  <property name="recursive" type="boolean" value="true" />
+                </serializedBean>
+              </action>
+              <action id="1791" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                <serializedBean>
+                  <property name="percentValue" type="int" value="100" />
+                </serializedBean>
+              </action>
+            </actions>
+            <formComponents>
+              <formComponent id="28" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
+                <serializedBean>
+                  <property name="initialStatusMessage" type="string">${i18n:UninstallerPreparing}</property>
+                </serializedBean>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="32" beanClass="com.install4j.runtime.beans.screens.UninstallFailureScreen" rollbackBarrierExitCode="0" finishScreen="true" />
+          <screen id="30" beanClass="com.install4j.runtime.beans.screens.UninstallSuccessScreen" styleId="41" rollbackBarrierExitCode="0" finishScreen="true">
+            <formComponents>
+              <formComponent id="31" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
+                <serializedBean>
+                  <property name="labelText" type="string">${form:successMessage}</property>
+                </serializedBean>
+              </formComponent>
+            </formComponents>
+          </screen>
+        </screens>
+      </application>
+    </applications>
+    <styles defaultStyleId="35">
+      <style name="Standard" id="35" beanClass="com.install4j.runtime.beans.styles.FormStyle">
+        <formComponents>
+          <formComponent name="Header" id="36" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetTop="0" insetBottom="0">
+            <serializedBean>
+              <property name="styleId" type="string">48</property>
+            </serializedBean>
+          </formComponent>
+          <group name="Main" id="37" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup">
+            <serializedBean>
+              <property name="imageEdgeAxisType" type="enum" class="com.install4j.runtime.beans.formcomponents.AxisType" value="HORIZONTAL" />
+              <property name="imageFile">
+                <object class="com.install4j.api.beans.ExternalFile">
+                  <string>../../resources/images/jalview_logo_background_fade-640x480.png</string>
+                </object>
+              </property>
+              <property name="imageOverlap" type="boolean" value="true" />
+            </serializedBean>
+            <beans>
+              <formComponent id="38" beanClass="com.install4j.runtime.beans.styles.ContentComponent" insetTop="10" insetLeft="20" insetBottom="10" insetRight="20" />
+              <formComponent name="Watermark" id="39" beanClass="com.install4j.runtime.beans.formcomponents.SeparatorComponent" insetTop="0" insetLeft="5" insetBottom="0" useExternalParametrization="true" externalParametrizationName="Jalview" externalParametrizationMode="include">
+                <serializedBean>
+                  <property name="enabledTitleText" type="boolean" value="false" />
+                </serializedBean>
+                <externalParametrizationPropertyNames>
+                  <propertyName>labelText</propertyName>
+                </externalParametrizationPropertyNames>
+              </formComponent>
+              <formComponent name="Footer" id="40" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetTop="0" insetBottom="0">
+                <serializedBean>
+                  <property name="styleId" type="string">52</property>
+                </serializedBean>
+              </formComponent>
+            </beans>
+          </group>
+        </formComponents>
+      </style>
+      <style name="Banner" id="41" beanClass="com.install4j.runtime.beans.styles.FormStyle">
+        <formComponents>
+          <group id="42" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize banner image" externalParametrizationMode="include">
+            <serializedBean>
+              <property name="backgroundColor">
+                <object class="java.awt.Color">
+                  <int>255</int>
+                  <int>255</int>
+                  <int>255</int>
+                  <int>255</int>
+                </object>
+              </property>
+              <property name="borderSides">
+                <object class="com.install4j.runtime.beans.formcomponents.BorderSides">
+                  <property name="bottom" type="boolean" value="true" />
+                </object>
+              </property>
+              <property name="imageEdgeBackgroundColor">
+                <object class="java.awt.Color">
+                  <int>25</int>
+                  <int>143</int>
+                  <int>220</int>
+                  <int>255</int>
+                </object>
+              </property>
+              <property name="imageEdgeBorder" type="boolean" value="true" />
+              <property name="imageFile">
+                <object class="com.install4j.api.beans.ExternalFile">
+                  <string>${compiler:sys.install4jHome}/resource/styles/wizard.png</string>
+                </object>
+              </property>
+              <property name="insets">
+                <object class="java.awt.Insets">
+                  <int>5</int>
+                  <int>10</int>
+                  <int>10</int>
+                  <int>10</int>
+                </object>
+              </property>
+            </serializedBean>
+            <beans>
+              <formComponent id="43" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent" insetTop="0">
+                <serializedBean>
+                  <property name="labelFontSizePercent" type="int" value="130" />
+                  <property name="labelFontStyle" type="enum" class="com.install4j.runtime.beans.formcomponents.FontStyle" value="BOLD" />
+                  <property name="labelFontType" type="enum" class="com.install4j.runtime.beans.formcomponents.FontType" value="DERIVED" />
+                </serializedBean>
+              </formComponent>
+              <formComponent id="44" beanClass="com.install4j.runtime.beans.formcomponents.SeparatorComponent" />
+              <formComponent id="45" beanClass="com.install4j.runtime.beans.styles.ContentComponent" insetTop="10" insetBottom="0" />
+            </beans>
+            <externalParametrizationPropertyNames>
+              <propertyName>imageAnchor</propertyName>
+              <propertyName>imageEdgeBackgroundColor</propertyName>
+              <propertyName>imageFile</propertyName>
+            </externalParametrizationPropertyNames>
+          </group>
+          <formComponent id="46" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetBottom="0">
+            <serializedBean>
+              <property name="styleId" type="string">52</property>
+            </serializedBean>
+          </formComponent>
+        </formComponents>
+      </style>
+      <group name="Style components" id="47" beanClass="com.install4j.runtime.beans.groups.StyleGroup">
+        <beans>
+          <style name="Standard header" id="48" beanClass="com.install4j.runtime.beans.styles.FormStyle">
+            <serializedBean>
+              <property name="fillVertical" type="boolean" value="false" />
+              <property name="standalone" type="boolean" value="false" />
+              <property name="verticalAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="NORTH" />
+            </serializedBean>
+            <formComponents>
+              <group id="49" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize title bar" externalParametrizationMode="include">
+                <serializedBean>
+                  <property name="backgroundColor">
+                    <object class="java.awt.Color">
+                      <int>255</int>
+                      <int>255</int>
+                      <int>255</int>
+                      <int>255</int>
+                    </object>
+                  </property>
+                  <property name="borderSides">
+                    <object class="com.install4j.runtime.beans.formcomponents.BorderSides">
+                      <property name="bottom" type="boolean" value="true" />
+                    </object>
+                  </property>
+                  <property name="imageAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="NORTHEAST" />
+                  <property name="imageEdgeBorderWidth" type="int" value="2" />
+                  <property name="imageFile">
+                    <object class="com.install4j.api.beans.ExternalFile">
+                      <string>icon:${installer:sys.installerApplicationMode}_header.png</string>
+                    </object>
+                  </property>
+                  <property name="imageInsets">
+                    <object class="java.awt.Insets">
+                      <int>0</int>
+                      <int>5</int>
+                      <int>1</int>
+                      <int>1</int>
+                    </object>
+                  </property>
+                  <property name="insets">
+                    <object class="java.awt.Insets">
+                      <int>0</int>
+                      <int>20</int>
+                      <int>0</int>
+                      <int>10</int>
+                    </object>
+                  </property>
+                </serializedBean>
+                <beans>
+                  <formComponent name="Title" id="50" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent">
+                    <serializedBean>
+                      <property name="labelFontStyle" type="enum" class="com.install4j.runtime.beans.formcomponents.FontStyle" value="BOLD" />
+                      <property name="labelFontType" type="enum" class="com.install4j.runtime.beans.formcomponents.FontType" value="DERIVED" />
+                    </serializedBean>
+                  </formComponent>
+                  <formComponent name="Subtitle" id="51" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent" insetLeft="8">
+                    <serializedBean>
+                      <property name="titleType" type="enum" class="com.install4j.runtime.beans.styles.TitleType" value="SUB_TITLE" />
+                    </serializedBean>
+                  </formComponent>
+                </beans>
+                <externalParametrizationPropertyNames>
+                  <propertyName>backgroundColor</propertyName>
+                  <propertyName>foregroundColor</propertyName>
+                  <propertyName>imageAnchor</propertyName>
+                  <propertyName>imageFile</propertyName>
+                  <propertyName>imageOverlap</propertyName>
+                </externalParametrizationPropertyNames>
+              </group>
+            </formComponents>
+          </style>
+          <style name="Standard footer" id="52" beanClass="com.install4j.runtime.beans.styles.FormStyle">
+            <serializedBean>
+              <property name="fillVertical" type="boolean" value="false" />
+              <property name="standalone" type="boolean" value="false" />
+              <property name="verticalAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="SOUTH" />
+            </serializedBean>
+            <formComponents>
+              <group id="53" beanClass="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup">
+                <serializedBean>
+                  <property name="alignFirstLabel" type="boolean" value="false" />
+                  <property name="insets">
+                    <object class="java.awt.Insets">
+                      <int>3</int>
+                      <int>5</int>
+                      <int>8</int>
+                      <int>5</int>
+                    </object>
+                  </property>
+                </serializedBean>
+                <beans>
+                  <formComponent id="54" beanClass="com.install4j.runtime.beans.formcomponents.SpringComponent" />
+                  <formComponent name="Back button" id="55" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent">
+                    <serializedBean>
+                      <property name="buttonText" type="string">&lt; ${i18n:ButtonBack}</property>
+                      <property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="PREVIOUS" />
+                    </serializedBean>
+                  </formComponent>
+                  <formComponent name="Next button" id="56" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent">
+                    <serializedBean>
+                      <property name="buttonText" type="string">${i18n:ButtonNext} &gt;</property>
+                      <property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="NEXT" />
+                    </serializedBean>
+                  </formComponent>
+                  <formComponent name="Cancel button" id="57" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent" insetLeft="5">
+                    <serializedBean>
+                      <property name="buttonText" type="string">${i18n:ButtonCancel}</property>
+                      <property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="CANCEL" />
+                    </serializedBean>
+                  </formComponent>
+                </beans>
+              </group>
+            </formComponents>
+          </style>
+        </beans>
+      </group>
+    </styles>
+  </installerGui>
+  <mediaSets>
+    <linuxDeb name="Jalview .deb Package" id="153" mediaFileName="jalview-$$VERSION$$" dependencies="openjdk-8-jre" bzip="true" description="Jalview Desktop" maintainerEmail="help@jalview.org">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1276" />
+        <component id="2110" />
+      </excludedComponents>
+      <excludedLaunchers>
+        <launcher id="737" />
+        <launcher id="1402" />
+      </excludedLaunchers>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="734" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+      </exclude>
+    </linuxDeb>
+    <linuxRPM name="Jalview RPM Package" id="570" mediaFileName="jalview-$$VERSION$$" dependencies="java-1.8.0-openjdk" arch="noarch">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1276" />
+        <component id="2110" />
+      </excludedComponents>
+      <excludedLaunchers>
+        <launcher id="737" />
+        <launcher id="1402" />
+      </excludedLaunchers>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="734" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+      </exclude>
+    </linuxRPM>
+    <windows name="Offline Windows x64 Installer" id="743" mediaFileName="${compiler:sys.shortName}-OFFLINE_${compiler:sys.platform}_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" runPostProcessor="true" postProcessor="${compiler:JSIGN_SH} $EXECUTABLE" customInstallBaseDir="~/AppData/Local">
+      <excludedComponents>
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1276" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <excludedLaunchers>
+        <launcher id="1402" />
+      </excludedLaunchers>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+      <jreBundle jreBundleSource="preCreated" includedJre="$$WINDOWS_JAVA_VM_TGZ$$" manualJreEntry="true" />
+    </windows>
+    <windows name="Network Windows x64 Installer" id="1862" mediaFileName="${compiler:sys.shortName}-NETWORK_${compiler:sys.platform}_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" runPostProcessor="true" postProcessor="${compiler:JSIGN_SH} $EXECUTABLE" customInstallBaseDir="~/AppData/Local">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <exclude>
+        <entry filesetId="734" />
+        <entry filesetId="880" />
+        <entry filesetId="1873" />
+      </exclude>
+      <jreBundle jreBundleSource="preCreated" includedJre="$$WINDOWS_JAVA_VM_TGZ$$" manualJreEntry="true" />
+    </windows>
+    <macosArchive name="Offline macOS Disk Image" id="878" mediaFileName="${compiler:sys.shortName}-OFFLINE_${compiler:sys.platform}-app_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" volumeName="${compiler:sys.shortName} Installer" launcherId="737">
+      <excludedComponents>
+        <component id="1156" />
+        <component id="1276" />
+        <component id="1881" />
+      </excludedComponents>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+      <topLevelFiles>
+        <symlink name="&quot; &quot;" target="/Applications" />
+        <file name=".background/jalview_dmg_background.png" file="./jalview_dmg_background.png" />
+        <file name=".DS_Store" file="./DS_Store" />
+        <symlink name="Jalview.app/Contents/Resources/app/${compiler:JRE_DIR}/Contents/MacOS/libjli.dylib" target="../Home/lib/jli/libjli.dylib" />
+        <file name="Jalview.app/Contents/Resources/Jalview-File.icns" file="./Jalview-File.icns" />
+        <file name="Jalview.app/Contents/Resources/Jalview-Version-Locator.icns" file="Jalview-Version-Locator.icns" />
+        <symlink name="Uninstall Old Jalview (optional).app" target="Jalview.app/Contents/Resources/app/Uninstall Old Jalview.app" />
+      </topLevelFiles>
+    </macosArchive>
+    <macosArchive name="Network macOS Disk Image" id="1274" mediaFileName="${compiler:sys.shortName}-NETWORK_${compiler:sys.platform}-app_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" volumeName="${compiler:sys.shortName} Installer" launcherId="1402">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1156" />
+        <component id="1881" />
+      </excludedComponents>
+      <exclude>
+        <entry filesetId="734" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+      <topLevelFiles>
+        <symlink name="&quot; &quot;" target="/Applications" />
+        <file name=".background/jalview_dmg_background.png" file="./jalview_dmg_background.png" />
+        <file name=".DS_Store" file="./DS_Store" />
+        <symlink name="Jalview.app/Contents/Resources/app/${compiler:JRE_DIR}/Contents/MacOS/libjli.dylib" target="../Home/lib/jli/libjli.dylib" />
+        <file name="Jalview.app/Contents/Resources/Jalview-Version-Locator.icns" file="Jalview-Version-Locator.icns" />
+        <file name="Jalview.app/Contents/Resources/Jalview-File.icns" file="Jalview-File.icns" />
+        <symlink name="Uninstall Old Jalview (optional).app" target="Jalview.app/Contents/Resources/app/Uninstall Old Jalview.app" />
+      </topLevelFiles>
+    </macosArchive>
+    <unixInstaller name="Offline Unix Shell Installer" id="1595" mediaFileName="${compiler:sys.shortName}-OFFLINE_${compiler:sys.platform}_installer_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" customInstallBaseDir="~/opt/">
+      <excludedComponents>
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1276" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <excludedLaunchers>
+        <launcher id="1402" />
+      </excludedLaunchers>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+    </unixInstaller>
+    <unixInstaller name="Network Unix Shell Installer" id="1867" mediaFileName="${compiler:sys.shortName}-NETWORK_${compiler:sys.platform}_installer_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$" customInstallBaseDir="~/opt/">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <exclude>
+        <entry filesetId="734" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+    </unixInstaller>
+    <unixArchive name="Offline Unix .tar.gz Archive" id="1596" mediaFileName="${compiler:sys.shortName}-OFFLINE_${compiler:sys.platform}_archive_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$">
+      <excludedComponents>
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1276" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <excludedLaunchers>
+        <launcher id="1402" />
+      </excludedLaunchers>
+      <exclude>
+        <entry defaultFileset="true" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+    </unixArchive>
+    <unixArchive name="Network Unix .tar.gz Archive" id="1871" mediaFileName="${compiler:sys.shortName}-NETWORK_${compiler:sys.platform}_archive_${compiler:sys.version}-j$$JAVA_INTEGER_VERSION$$">
+      <excludedComponents>
+        <component id="1031" />
+        <component id="1155" />
+        <component id="1156" />
+        <component id="1881" />
+        <component id="2110" />
+      </excludedComponents>
+      <exclude>
+        <entry filesetId="734" />
+        <entry filesetId="880" />
+        <entry filesetId="882" />
+        <entry filesetId="1873" />
+      </exclude>
+    </unixArchive>
+  </mediaSets>
+  <buildIds>
+    <mediaSet refId="153" />
+    <mediaSet refId="570" />
+    <mediaSet refId="743" />
+    <mediaSet refId="878" />
+    <mediaSet refId="1274" />
+    <mediaSet refId="1595" />
+    <mediaSet refId="1596" />
+    <mediaSet refId="1862" />
+    <mediaSet refId="1867" />
+    <mediaSet refId="1871" />
+  </buildIds>
+</install4j>