<?xml version="1.0" encoding="UTF-8"?>
<install4j version="4.1" transformSequenceNumber="2">
  <directoryPresets config="." />
  <application name="Hello World Suite" distributionSourceDir="" applicationId="0804-2950-8354-4050" mediaDir="./media" mediaFilePattern="${compiler:sys.shortName}_${compiler:sys.platform}_${compiler:sys.version}" compression="6" lzmaCompression="false" pack200Compression="false" excludeSignedFromPacking="true" keepModificationTimes="false" shortName="hello" publisher="Hello Corporation" publisherWeb="http://www.hello.biz" version="4.0" allPathsRelative="true" backupOnSave="false" autoSave="false" convertDotsToUnderscores="true" macSignature="????" javaMinVersion="1.4" javaMaxVersion="" allowBetaVM="false" jdkMode="runtimeJre" jdkName="">
    <languages skipLanguageSelection="false">
      <principalLanguage id="en" customLocalizationFile="" />
      <additionalLanguages />
    </languages>
    <searchSequence>
      <registry />
      <envVar name="JAVA_HOME" />
      <envVar name="JDK_HOME" />
    </searchSequence>
    <variables />
  </application>
  <files>
    <filesets />
    <roots />
    <mountPoints>
      <mountPoint id="1" root="" location="bin" mode="755" />
      <mountPoint id="2" root="" location="classes" mode="755" />
      <mountPoint id="3" root="" location="source" mode="755" />
    </mountPoints>
    <entries>
      <dirEntry mountPoint="2" file="./gui" overwrite="4" shared="false" mode="644" uninstallMode="0" excludeSuffixes="*.java" dirMode="755">
        <exclude />
      </dirEntry>
      <dirEntry mountPoint="2" file="./cli" overwrite="4" shared="false" mode="644" uninstallMode="0" excludeSuffixes="*.java" dirMode="755">
        <exclude />
      </dirEntry>
      <dirEntry mountPoint="2" file="./service" overwrite="4" shared="false" mode="644" uninstallMode="0" excludeSuffixes="'.java" dirMode="755">
        <exclude />
      </dirEntry>
      <fileEntry mountPoint="3" file="./cli/HelloCli.java" overwrite="4" shared="false" mode="644" uninstallMode="0" />
      <fileEntry mountPoint="3" file="./gui/HelloGui.java" overwrite="4" shared="false" mode="644" uninstallMode="0" />
      <fileEntry mountPoint="3" file="./service/ServiceDemo.java" overwrite="4" shared="false" mode="644" uninstallMode="0" />
    </entries>
    <components>
      <component name="Hello World Application" id="40" displayDescription="false" selected="true" mandatory="true" downloadable="false">
        <description>The core application files necessary to run Hello World.</description>
        <include all="false">
          <entry location="bin" fileType="regular" />
          <entry location="classes" fileType="regular" />
          <entry location="updater" fileType="installerApplication" />
          <entry location="configureGreeting" fileType="installerApplication" />
          <entry location=".i4j_external_748" fileType="regular" />
        </include>
        <dependencies />
      </component>
      <component name="Source Files" id="41" displayDescription="false" selected="true" mandatory="false" downloadable="false">
        <description>The Java source files of the Hello World application.</description>
        <include all="false">
          <entry location="source" fileType="regular" />
        </include>
        <dependencies />
      </component>
    </components>
  </files>
  <launchers>
    <launcher name="Hello World Command Line" id="4" external="false" excludeFromMenu="true" menuName="" icnsFile="" pngIcon16File="" pngIcon32File="" macServiceDependencies="" swtApp="false" fileset="">
      <executable name="hello_cli" type="1" iconSet="false" iconFile="" executableDir="bin" redirectStderr="false" stderrFile="error.log" redirectStdout="false" stdoutFile="output.log" failOnStderrOutput="true" executableMode="2" changeWorkingDirectory="false" workingDirectory="." singleInstance="false" serviceStartType="2" serviceDependencies="" serviceDescription="" jreLocation="" executionLevel="asInvoker">
        <versionInfo include="true" fileVersion="" fileDescription="Hello World Suite Command Line Launcher" legalCopyright="Copyright ej-technologies GmbH, 2002-2003" internalName="helloCli" />
      </executable>
      <splashScreen show="false" autoOff="true" alwaysOnTop="true" width="0" height="0" bitmapFile="" java6SplashScreen="false">
        <text>
          <statusLine x="20" y="20" text="" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
          <versionLine x="20" y="40" text="version ${compiler:sys.version}" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
        </text>
      </splashScreen>
      <java mainClass="HelloCli" vmParameters="" arguments="" allowVMPassthroughParameters="true" preferredVM="">
        <classPath>
          <directory location="classes" failOnError="true" />
        </classPath>
        <nativeLibraryDirectories />
      </java>
      <includedFiles />
      <unextractableFiles />
      <customScript mode="1" file="">
        <scriptLines />
      </customScript>
    </launcher>
    <launcher name="Hello World GUI" id="5" external="false" excludeFromMenu="false" menuName="" icnsFile="" pngIcon16File="./resources/hello16x16.png" pngIcon32File="./resources/hello32x32.png" macServiceDependencies="" swtApp="false" fileset="">
      <executable name="hello_gui" type="1" iconSet="true" iconFile="" executableDir="bin" redirectStderr="true" stderrFile="error.log" redirectStdout="false" stdoutFile="output.log" failOnStderrOutput="true" executableMode="1" changeWorkingDirectory="true" workingDirectory="." singleInstance="true" serviceStartType="2" serviceDependencies="" serviceDescription="" jreLocation="" executionLevel="asInvoker">
        <versionInfo include="true" fileVersion="" fileDescription="Hello World Suite GUI Launcher" legalCopyright="Copyright ej-technologies GmbH, 2002-2003" internalName="helloGUI" />
      </executable>
      <splashScreen show="true" autoOff="true" alwaysOnTop="true" width="400" height="230" bitmapFile="./resources/hello_splash.png" java6SplashScreen="false">
        <text>
          <statusLine x="9" y="210" text="Loading application ..." font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
          <versionLine x="272" y="159" text="version ${compiler:sys.version}" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
        </text>
      </splashScreen>
      <java mainClass="HelloGui" vmParameters="" arguments="" allowVMPassthroughParameters="true" preferredVM="">
        <classPath>
          <directory location="classes" failOnError="true" />
        </classPath>
        <nativeLibraryDirectories />
      </java>
      <includedFiles />
      <unextractableFiles />
      <customScript mode="1" file="">
        <scriptLines />
      </customScript>
    </launcher>
    <launcher name="Hello World Service" id="19" external="false" excludeFromMenu="true" menuName="" icnsFile="" pngIcon16File="" pngIcon32File="" macServiceDependencies="" swtApp="false" fileset="">
      <executable name="hello_service" type="1" iconSet="false" iconFile="" executableDir="bin" redirectStderr="true" stderrFile="error.log" redirectStdout="true" stdoutFile="output.log" failOnStderrOutput="false" executableMode="3" changeWorkingDirectory="true" workingDirectory="." singleInstance="false" serviceStartType="2" serviceDependencies="" serviceDescription="" jreLocation="" executionLevel="asInvoker">
        <versionInfo include="true" fileVersion="" fileDescription="Hello World Service" legalCopyright="Copyright ej-technologies GmbH, 2002-2003" internalName="helloCli" />
      </executable>
      <splashScreen show="false" autoOff="true" alwaysOnTop="true" width="0" height="0" bitmapFile="" java6SplashScreen="false">
        <text>
          <statusLine x="20" y="20" text="" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
          <versionLine x="20" y="40" text="version ${compiler:sys.version}" font="Arial" fontSize="8" fontColor="0,0,0" fontWeight="500" />
        </text>
      </splashScreen>
      <java mainClass="ServiceDemo" vmParameters="" arguments="" allowVMPassthroughParameters="true" preferredVM="">
        <classPath>
          <directory location="classes" failOnError="true" />
        </classPath>
        <nativeLibraryDirectories />
      </java>
      <includedFiles />
      <unextractableFiles />
      <customScript mode="1" file="">
        <scriptLines />
      </customScript>
    </launcher>
  </launchers>
  <installerGui installerType="1" suggestPreviousProgramGroup="true" addOnAppId="" suggestPreviousLocations="true">
    <customCode useInstalledFiles="false" />
    <applications>
      <application name="" id="installer" beanClass="com.install4j.runtime.beans.applications.InstallerApplication" enabled="true" commentSet="false" comment="" customIcnsFile="" customIcoFile="">
        <serializedBean>
          <java class="java.beans.XMLDecoder">
            <object class="com.install4j.runtime.beans.applications.InstallerApplication" />
          </java>
        </serializedBean>
        <startup>
          <screen name="" id="15" beanClass="com.install4j.runtime.beans.screens.StartupScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.StartupScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="105" beanClass="com.install4j.runtime.beans.actions.misc.RequireAdminAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.misc.RequireAdminAction" />
                  </java>
                </serializedBean>
                <condition>Util.isWindows() || Util.isMacOS()</condition>
              </action>
            </actions>
            <formComponents />
          </screen>
        </startup>
        <screens>
          <screen name="" id="47" beanClass="com.install4j.runtime.beans.screens.WelcomeScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.WelcomeScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="48" beanClass="com.install4j.runtime.beans.screens.InstallationDirectoryScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.InstallationDirectoryScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="49" beanClass="com.install4j.runtime.beans.screens.ComponentsScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.ComponentsScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="50" beanClass="com.install4j.runtime.beans.screens.StandardProgramGroupScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.StandardProgramGroupScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="Query greeting" id="73" beanClass="com.install4j.runtime.beans.screens.FormScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.FormScreen">
                  <void property="subTitle">
                    <string>Who do you want to greet?</string>
                  </void>
                  <void property="title">
                    <string>Greeting configuration</string>
                  </void>
                </object>
              </java>
            </serializedBean>
            <condition />
            <validation>String greeting = ((String)context.getVariable("personName")).trim();

if (context.getVariable("greetingOption").equals("world")) {
    greeting = "world";
} else if (greeting.trim().length() == 0) {
    Util.showMessage("Please enter a name.");
    return false;
} 

context.setVariable("greeting", greeting);
return true;</validation>
            <preActivation />
            <postActivation>// The text field component
formEnvironment.getFormComponentById("77").requestFocus();
</postActivation>
            <actions />
            <formComponents>
              <formComponent name="world" id="483" beanClass="com.install4j.runtime.beans.formcomponents.SingleRadiobuttonComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="0" insetRight="" resetInitOnPrevious="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.formcomponents.SingleRadiobuttonComponent">
                      <void property="initiallySelected">
                        <boolean>true</boolean>
                      </void>
                      <void property="radioButtonLabel">
                        <string>Greet the whole world</string>
                      </void>
                      <void property="variableName">
                        <string>greetingOption</string>
                      </void>
                      <void property="variableValue">
                        <string>world</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <initScript />
              </formComponent>
              <formComponent name="person" id="484" beanClass="com.install4j.runtime.beans.formcomponents.SingleRadiobuttonComponent" enabled="true" commentSet="false" comment="" insetTop="0" insetLeft="" insetBottom="0" insetRight="" resetInitOnPrevious="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.formcomponents.SingleRadiobuttonComponent">
                      <void property="coupledComponentIds">
                        <void method="add">
                          <string>77</string>
                        </void>
                      </void>
                      <void property="radioButtonLabel">
                        <string>Greet a single person</string>
                      </void>
                      <void property="variableName">
                        <string>greetingOption</string>
                      </void>
                      <void property="variableValue">
                        <string>person</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <initScript />
              </formComponent>
              <formComponent name="" id="77" beanClass="com.install4j.runtime.beans.formcomponents.TextfieldComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="20" insetBottom="" insetRight="" resetInitOnPrevious="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.formcomponents.TextfieldComponent">
                      <void property="labelText">
                        <string>Name of the person:</string>
                      </void>
                      <void property="variableName">
                        <string>personName</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <initScript />
              </formComponent>
            </formComponents>
          </screen>
          <screen name="" id="52" beanClass="com.install4j.runtime.beans.screens.ServicesScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.ServicesScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="53" beanClass="com.install4j.runtime.beans.screens.InstallationScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="true" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.InstallationScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="55" beanClass="com.install4j.runtime.beans.actions.InstallFilesAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.InstallFilesAction" />
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="56" beanClass="com.install4j.runtime.beans.actions.desktop.CreateProgramGroupAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.desktop.CreateProgramGroupAction">
                      <void property="programGroupEntryConfigs">
                        <void method="add">
                          <object class="com.install4j.runtime.beans.screens.components.ProgramGroupEntryConfig">
                            <void property="name">
                              <string>Maintenance/Check For Update</string>
                            </void>
                            <void property="target">
                              <object class="java.io.File">
                                <string>updater</string>
                              </object>
                            </void>
                          </object>
                        </void>
                        <void method="add">
                          <object class="com.install4j.runtime.beans.screens.components.ProgramGroupEntryConfig">
                            <void property="name">
                              <string>Maintenance/Configure Greeting</string>
                            </void>
                            <void property="target">
                              <object class="java.io.File">
                                <string>configureGreeting</string>
                              </object>
                            </void>
                          </object>
                        </void>
                      </void>
                      <void property="programGroupName">
                        <string>${compiler:sys.fullName}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="57" beanClass="com.install4j.runtime.beans.actions.desktop.RegisterAddRemoveAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.desktop.RegisterAddRemoveAction">
                      <void property="itemName">
                        <string>${compiler:sys.fullName} ${compiler:sys.version}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="58" beanClass="com.install4j.runtime.beans.actions.services.InstallServiceAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.services.InstallServiceAction">
                      <void property="launcherId">
                        <string>19</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="59" beanClass="com.install4j.runtime.beans.actions.services.StartServiceAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.services.StartServiceAction">
                      <void property="launcherId">
                        <string>19</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <group name="Save greeting" id="597" beanClass="com.install4j.runtime.beans.groups.ActionGroup" enabled="true" commentSet="false" comment="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.groups.ActionGroup" />
                  </java>
                </serializedBean>
                <beans>
                  <action name="Delete config" id="78" beanClass="com.install4j.runtime.beans.actions.files.DeleteFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
                          <void property="file">
                            <object class="java.io.File">
                              <string>${installer:sys.userHome}/hello.properties</string>
                            </object>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Update config" id="79" beanClass="com.install4j.runtime.beans.actions.text.AppendToFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="Updating config failed.">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.text.AppendToFileAction">
                          <void property="escaped">
                            <boolean>false</boolean>
                          </void>
                          <void property="file">
                            <object class="java.io.File">
                              <string>${installer:sys.userHome}/hello.properties</string>
                            </object>
                          </void>
                          <void property="text">
                            <string>greetingName=${installer:greeting}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                </beans>
              </group>
            </actions>
            <formComponents />
          </screen>
          <screen name="" id="60" beanClass="com.install4j.runtime.beans.screens.FinishedScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.FinishedScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="465" beanClass="com.install4j.runtime.beans.actions.finish.ExecuteLauncherAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.finish.ExecuteLauncherAction">
                      <void property="launcherId">
                        <string>5</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition>context.getBooleanVariable("executeLauncherAction") &amp;&amp; (!context.isUnattended())</condition>
              </action>
            </actions>
            <formComponents>
              <formComponent name="Execute launcher" id="72" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
                      <void property="checkboxText">
                        <string>${i18n:RunEntryExec("${compiler:sys.fullName}")}</string>
                      </void>
                      <void property="initiallySelected">
                        <boolean>true</boolean>
                      </void>
                      <void property="variableName">
                        <string>executeLauncherAction</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <initScript />
              </formComponent>
            </formComponents>
          </screen>
        </screens>
      </application>
      <application name="" id="uninstaller" beanClass="com.install4j.runtime.beans.applications.UninstallerApplication" enabled="true" commentSet="false" comment="" customIcnsFile="" customIcoFile="">
        <serializedBean>
          <java class="java.beans.XMLDecoder">
            <object class="com.install4j.runtime.beans.applications.UninstallerApplication" />
          </java>
        </serializedBean>
        <startup>
          <screen name="" id="16" beanClass="com.install4j.runtime.beans.screens.StartupScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.StartupScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="103" beanClass="com.install4j.runtime.beans.actions.misc.RequireAdminAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.misc.RequireAdminAction" />
                  </java>
                </serializedBean>
                <condition>Util.isWindows() || Util.isMacOS()</condition>
              </action>
            </actions>
            <formComponents />
          </screen>
        </startup>
        <screens>
          <screen name="" id="61" beanClass="com.install4j.runtime.beans.screens.UninstallWelcomeScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.UninstallWelcomeScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="62" beanClass="com.install4j.runtime.beans.screens.UninstallationScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.UninstallationScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="325" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.SetMessageAction">
                      <void property="statusMessage">
                        <string>Stopping services</string>
                      </void>
                      <void property="useDetail">
                        <boolean>true</boolean>
                      </void>
                      <void property="useStatus">
                        <boolean>true</boolean>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="326" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.SetProgressAction">
                      <void property="progressChangeType">
                        <object class="com.install4j.runtime.beans.actions.control.ProgressChangeType" field="SET_INDETERMINATE" />
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="101" beanClass="com.install4j.runtime.beans.actions.services.StopServiceAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.services.StopServiceAction">
                      <void property="launcherId">
                        <string>19</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="862" beanClass="com.install4j.runtime.beans.actions.files.DeleteFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
                      <void property="file">
                        <object class="java.io.File">
                          <string>${installer:sys.userHome}/hello.properties</string>
                        </object>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="102" beanClass="com.install4j.runtime.beans.actions.files.DeleteFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
                      <void property="file">
                        <object class="java.io.File">
                          <string>bin/service_demo.log</string>
                        </object>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="464" beanClass="com.install4j.runtime.beans.actions.files.DeleteFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
                      <void property="file">
                        <object class="java.io.File">
                          <string>bin/nohup.out</string>
                        </object>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="63" beanClass="com.install4j.runtime.beans.actions.UninstallFilesAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.UninstallFilesAction" />
                  </java>
                </serializedBean>
                <condition />
              </action>
            </actions>
            <formComponents />
          </screen>
          <screen name="" id="64" beanClass="com.install4j.runtime.beans.screens.UninstallFailureScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.UninstallFailureScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="" id="65" beanClass="com.install4j.runtime.beans.screens.UninstallSuccessScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.UninstallSuccessScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
        </screens>
      </application>
      <application name="Standalone updater" id="535" beanClass="com.install4j.runtime.beans.applications.CustomApplication" enabled="true" commentSet="true" comment="This is the unmodified application template &quot;Standalone updater&quot; except for the completion of a valid update descriptor URL in the &quot;Check for update&quot; action." customIcnsFile="${compiler:sys.install4jHome}/resource/macos/updater.icns" customIcoFile="${compiler:sys.install4jHome}/resource/updater.ico">
        <serializedBean>
          <java class="java.beans.XMLDecoder">
            <object class="com.install4j.runtime.beans.applications.CustomApplication">
              <void property="customPngIcon16File">
                <object class="com.install4j.api.beans.ExternalFile">
                  <string>${compiler:sys.install4jHome}/resource/updater_16.png</string>
                </object>
              </void>
              <void property="customPngIcon32File">
                <object class="com.install4j.api.beans.ExternalFile">
                  <string>${compiler:sys.install4jHome}/resource/updater_32.png</string>
                </object>
              </void>
              <void property="executableDirectory">
                <object class="java.io.File">
                  <string>.</string>
                </object>
              </void>
              <void property="executableName">
                <string>updater</string>
              </void>
              <void property="useCustomIcon">
                <boolean>true</boolean>
              </void>
              <void property="windowTitle">
                <string>${i18n:updater.WindowTitle("${compiler:sys.fullName}")}</string>
              </void>
            </object>
          </java>
        </serializedBean>
        <startup>
          <screen name="" id="536" beanClass="com.install4j.runtime.beans.screens.StartupScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.StartupScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
        </startup>
        <screens>
          <screen name="Welcome" id="537" beanClass="com.install4j.runtime.beans.screens.CustomizableBannerScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.CustomizableBannerScreen">
                  <void property="infoText">
                    <string>${i18n:updater.WelcomeInfoText("${compiler:sys.fullName}")}

The updater can be fully customized and templates for various update scenarios are available in the install4j IDE.</string>
                  </void>
                  <void property="title">
                    <string>${i18n:updater.WelcomeTitle("${compiler:sys.fullName}")}</string>
                  </void>
                </object>
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions />
            <formComponents />
          </screen>
          <screen name="Check for update" id="538" beanClass="com.install4j.runtime.beans.screens.CustomizableProgressScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.CustomizableProgressScreen">
                  <void property="initialStatusMessage">
                    <string>${i18n:updater.CheckForUpdateLabel}</string>
                  </void>
                  <void property="subTitle">
                    <string>${i18n:updater.CheckForUpdateSubtitle}</string>
                  </void>
                  <void property="title">
                    <string>${i18n:updater.CheckForUpdateTitle}</string>
                  </void>
                </object>
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="" id="539" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.SetProgressAction">
                      <void property="progressChangeType">
                        <object class="com.install4j.runtime.beans.actions.control.ProgressChangeType" field="SET_INDETERMINATE" />
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="540" beanClass="com.install4j.runtime.beans.actions.update.CheckForUpdateAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.update.CheckForUpdateAction">
                      <void property="updateDescriptorUrl">
                        <string>http://download.ej-technologies.com/hello/updates.xml</string>
                      </void>
                      <void property="variable">
                        <string>updateDescriptor</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="" id="541" beanClass="com.install4j.runtime.beans.actions.control.SleepAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.SleepAction" />
                  </java>
                </serializedBean>
                <condition />
              </action>
              <action name="Update descriptor entry" id="542" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                      <void property="script">
                        <object class="com.install4j.api.beans.ScriptProperty">
                          <void property="value">
                            <string>((UpdateDescriptor)context.getVariable("updateDescriptor")).getPossibleUpdateEntry()</string>
                          </void>
                        </object>
                      </void>
                      <void property="variableName">
                        <string>updateDescriptorEntry</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
              <group name="Update available" id="543" beanClass="com.install4j.runtime.beans.groups.ActionGroup" enabled="true" commentSet="false" comment="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.groups.ActionGroup">
                      <void property="conditionExpression">
                        <object class="com.install4j.api.beans.ScriptProperty">
                          <void property="value">
                            <string>context.getVariable("updateDescriptorEntry") != null</string>
                          </void>
                        </object>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <beans>
                  <action name="New version" id="544" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).getNewVersion()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterNewVersion</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Download size" id="545" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).getFileSizeVerbose()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterDownloadSize</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Comment" id="546" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).getComment()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterComment</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Download directory" id="547" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>Util.getUserHome()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterDownloadDir</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Download URL" id="548" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).getURL().toExternalForm()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterDownloadUrl</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="Archive" id="935" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).isArchive() ? Boolean.TRUE : Boolean.FALSE</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>isArchive</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                </beans>
              </group>
            </actions>
            <formComponents />
          </screen>
          <group name="Up to date" id="549" beanClass="com.install4j.runtime.beans.groups.ScreenGroup" enabled="true" commentSet="false" comment="">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.groups.ScreenGroup">
                  <void property="conditionExpression">
                    <object class="com.install4j.api.beans.ScriptProperty">
                      <void property="value">
                        <string>context.getVariable("updateDescriptorEntry") == null</string>
                      </void>
                    </object>
                  </void>
                </object>
              </java>
            </serializedBean>
            <beans>
              <screen name="Up to date notification" id="550" beanClass="com.install4j.runtime.beans.screens.CustomizableBannerScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.screens.CustomizableBannerScreen">
                      <void property="infoText">
                        <string>${i18n:updater.UpToDateInfoText("${compiler:sys.fullName}")}</string>
                      </void>
                      <void property="title">
                        <string>${i18n:updater.UpToDateTitle}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
                <validation />
                <preActivation />
                <postActivation />
                <actions />
                <formComponents />
              </screen>
            </beans>
          </group>
          <group name="Update available" id="551" beanClass="com.install4j.runtime.beans.groups.ScreenGroup" enabled="true" commentSet="false" comment="">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.groups.ScreenGroup">
                  <void property="conditionExpression">
                    <object class="com.install4j.api.beans.ScriptProperty">
                      <void property="value">
                        <string>context.getVariable("updateDescriptorEntry") != null</string>
                      </void>
                    </object>
                  </void>
                </object>
              </java>
            </serializedBean>
            <beans>
              <screen name="New version available" id="552" beanClass="com.install4j.runtime.beans.screens.FormScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.screens.FormScreen">
                      <void property="subTitle">
                        <string>${i18n:updater.NewVersionAvailableSubtitle("${compiler:sys.fullName}")}</string>
                      </void>
                      <void property="title">
                        <string>${i18n:updater.NewVersionAvailableTitle}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
                <validation />
                <preActivation />
                <postActivation />
                <actions />
                <formComponents>
                  <formComponent name="" id="553" beanClass="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent">
                          <void property="labelText">
                            <string>${i18n:updater.CurrentVersionLabel}</string>
                          </void>
                          <void property="valueLabelColor">
                            <object class="java.awt.Color">
                              <int>128</int>
                              <int>0</int>
                              <int>0</int>
                              <int>255</int>
                            </object>
                          </void>
                          <void property="valueLabelFont">
                            <object class="java.awt.Font">
                              <string>dialog</string>
                              <int>1</int>
                              <int>0</int>
                            </object>
                          </void>
                          <void property="valueLabelText">
                            <string>${installer:sys.version}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="554" beanClass="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent">
                          <void property="labelText">
                            <string>${i18n:updater.NewVersionLabel}</string>
                          </void>
                          <void property="valueLabelColor">
                            <object class="java.awt.Color">
                              <int>0</int>
                              <int>128</int>
                              <int>0</int>
                              <int>255</int>
                            </object>
                          </void>
                          <void property="valueLabelFont">
                            <object class="java.awt.Font">
                              <string>dialog</string>
                              <int>1</int>
                              <int>0</int>
                            </object>
                          </void>
                          <void property="valueLabelText">
                            <string>${installer:updaterNewVersion}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="555" beanClass="com.install4j.runtime.beans.formcomponents.HyperlinkActionLabelComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.HyperlinkActionLabelComponent">
                          <void property="actionScript">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>context.goForward(1, false, false);</string>
                              </void>
                            </object>
                          </void>
                          <void property="hyperlinkText">
                            <string>${i18n:updater.ShowComments}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript>boolean hasComment = ((String)context.getVariable("updaterComment")).length() &gt; 0;
component.setVisible(hasComment);</initScript>
                  </formComponent>
                  <formComponent name="" id="556" beanClass="com.install4j.runtime.beans.formcomponents.SpacerComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.SpacerComponent" />
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="557" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
                          <void property="labelText">
                            <string>${i18n:updater.DownloadLocationLabel}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="558" beanClass="com.install4j.runtime.beans.formcomponents.DirectoryChooserComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.DirectoryChooserComponent">
                          <void property="initialFile">
                            <string>${installer:updaterDownloadDir}</string>
                          </void>
                          <void property="labelText">
                            <string>${i18n:updater.DownloadToLabel}</string>
                          </void>
                          <void property="manualEntryAllowed">
                            <boolean>false</boolean>
                          </void>
                          <void property="variableName">
                            <string>updaterDownloadLocation</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="559" beanClass="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.KeyValuePairComponent">
                          <void property="labelText">
                            <string>${i18n:updater.DownloadSizeLabel}</string>
                          </void>
                          <void property="valueLabelText">
                            <string>${installer:updaterDownloadSize}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                </formComponents>
              </screen>
              <screen name="Update message" id="560" beanClass="com.install4j.runtime.beans.screens.CustomizableInfoScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.screens.CustomizableInfoScreen">
                      <void property="displayedText">
                        <string>${installer:updaterComment}</string>
                      </void>
                      <void property="infoText">
                        <string>${i18n:updater.CommentsLabel}</string>
                      </void>
                      <void property="subTitle">
                        <string>${i18n:updater.CommentsSubTitle}</string>
                      </void>
                      <void property="title">
                        <string>${i18n:updater.CommentsTitle}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition>false // This screen is only shown if the user clicks the "Show comments" hyperlink label in the previous screen.
</condition>
                <validation>if (context.isConsole()) {
    context.goBackInHistory(1);
}
return true;</validation>
                <preActivation>WizardContext wizardContext = context.getWizardContext();
if (wizardContext != null) {
    wizardContext.setNextButtonVisible(false);
    wizardContext.setCancelButtonVisible(false);
}</preActivation>
                <postActivation />
                <actions />
                <formComponents />
              </screen>
              <screen name="Download new version" id="561" beanClass="com.install4j.runtime.beans.screens.CustomizableProgressScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.screens.CustomizableProgressScreen">
                      <void property="subTitle">
                        <string>${i18n:updater.DownloadSubTitle}</string>
                      </void>
                      <void property="title">
                        <string>${i18n:updater.DownloadTitle}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
                <validation />
                <preActivation />
                <postActivation />
                <actions>
                  <action name="Download location" id="562" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.control.SetVariableAction">
                          <void property="script">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>context.getVariable("updaterDownloadLocation") + File.separator + ((UpdateDescriptorEntry)context.getVariable("updateDescriptorEntry")).getFileName()</string>
                              </void>
                            </object>
                          </void>
                          <void property="variableName">
                            <string>updaterDownloadFile</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="" id="563" beanClass="com.install4j.runtime.beans.actions.update.DownloadFileAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.update.DownloadFileAction">
                          <void property="targetFile">
                            <string>${installer:updaterDownloadFile}</string>
                          </void>
                          <void property="url">
                            <string>${installer:updaterDownloadUrl}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                  <action name="" id="710" beanClass="com.install4j.runtime.beans.actions.files.SetModeAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.actions.files.SetModeAction">
                          <void property="file">
                            <object class="java.io.File">
                              <string>${installer:updaterDownloadFile}</string>
                            </object>
                          </void>
                          <void property="mode">
                            <string>755</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <condition />
                  </action>
                </actions>
                <formComponents />
              </screen>
              <screen name="Finish" id="936" beanClass="com.install4j.runtime.beans.screens.BannerFormScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.screens.BannerFormScreen">
                      <void property="infoText">
                        <string>${i18n:updater.FinishInfoText("${compiler:sys.fullName}")}</string>
                      </void>
                      <void property="title">
                        <string>${i18n:updater.FinishTitle}</string>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
                <validation />
                <preActivation />
                <postActivation />
                <actions>
                  <group name="Execute installer" id="937" beanClass="com.install4j.runtime.beans.groups.ActionGroup" enabled="true" commentSet="false" comment="">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.groups.ActionGroup">
                          <void property="conditionExpression">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>((Integer)context.getVariable("updaterLaunchSelection")).intValue() == 0 &amp;&amp; !context.getBooleanVariable("isArchive")</string>
                              </void>
                            </object>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <beans>
                      <action name="" id="938" beanClass="com.install4j.runtime.beans.actions.update.ShutdownCallingLauncherAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                        <serializedBean>
                          <java class="java.beans.XMLDecoder">
                            <object class="com.install4j.runtime.beans.actions.update.ShutdownCallingLauncherAction" />
                          </java>
                        </serializedBean>
                        <condition />
                      </action>
                      <action name="" id="939" beanClass="com.install4j.runtime.beans.actions.misc.RunExecutableAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="2" errorMessage="${i18n:updater.LaunchError}">
                        <serializedBean>
                          <java class="java.beans.XMLDecoder">
                            <object class="com.install4j.runtime.beans.actions.misc.RunExecutableAction">
                              <void property="executable">
                                <object class="java.io.File">
                                  <string>${installer:updaterDownloadFile}</string>
                                </object>
                              </void>
                              <void property="workingDirectory">
                                <object class="java.io.File">
                                  <string>${installer:updaterDownloadLocation}</string>
                                </object>
                              </void>
                            </object>
                          </java>
                        </serializedBean>
                        <condition />
                      </action>
                    </beans>
                  </group>
                </actions>
                <formComponents>
                  <formComponent name="" id="940" beanClass="com.install4j.runtime.beans.formcomponents.LabelComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.LabelComponent">
                          <void property="labelText">
                            <string>${i18n:updater.LaunchUpdaterQuestion}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="941" beanClass="com.install4j.runtime.beans.formcomponents.SpacerComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.SpacerComponent">
                          <void property="height">
                            <int>5</int>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="942" beanClass="com.install4j.runtime.beans.formcomponents.RadiobuttonsComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.RadiobuttonsComponent">
                          <void property="radioButtonLabels">
                            <array class="java.lang.String" length="2">
                              <void index="0">
                                <string>${i18n:updater.LaunchUpdaterLabel}</string>
                              </void>
                              <void index="1">
                                <string>${i18n:updater.DoNotLaunchUpdaterLabel}</string>
                              </void>
                            </array>
                          </void>
                          <void property="variableName">
                            <string>updaterLaunchSelection</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript>if (context.getBooleanVariable("isArchive")) {
    component.setVisible(false);
}</initScript>
                  </formComponent>
                  <formComponent name="" id="943" beanClass="com.install4j.runtime.beans.formcomponents.HyperlinkActionLabelComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.HyperlinkActionLabelComponent">
                          <void property="actionScript">
                            <object class="com.install4j.api.beans.ScriptProperty">
                              <void property="value">
                                <string>Util.showPath((String)context.getVariable("updaterDownloadFile"));</string>
                              </void>
                            </object>
                          </void>
                          <void property="hyperlinkText">
                            <string>${i18n:updater.OpenContainingFolderLabel}</string>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                  <formComponent name="" id="944" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent" enabled="true" commentSet="false" comment="" insetTop="" insetLeft="" insetBottom="" insetRight="" resetInitOnPrevious="false">
                    <serializedBean>
                      <java class="java.beans.XMLDecoder">
                        <object class="com.install4j.runtime.beans.formcomponents.ProgressComponent">
                          <void property="detailVisible">
                            <boolean>false</boolean>
                          </void>
                          <void property="hideInitially">
                            <boolean>true</boolean>
                          </void>
                        </object>
                      </java>
                    </serializedBean>
                    <initScript />
                  </formComponent>
                </formComponents>
              </screen>
            </beans>
          </group>
        </screens>
      </application>
      <application name="Configure greeting" id="594" beanClass="com.install4j.runtime.beans.applications.CustomApplication" enabled="true" commentSet="true" comment="This is a maintenance application that the user can invoke after the application has been installed. A link is placed into the progam group on Windows, the &quot;Hello GUI&quot; launcher also has a menu item that invokes this installer application and updates the greeting." customIcnsFile="" customIcoFile="">
        <serializedBean>
          <java class="java.beans.XMLDecoder">
            <object class="com.install4j.runtime.beans.applications.CustomApplication">
              <void property="changeWorkingDir">
                <boolean>true</boolean>
              </void>
              <void property="customPngIcon16File">
                <object class="com.install4j.api.beans.ExternalFile">
                  <string>./resources/preferences16x16.png</string>
                </object>
              </void>
              <void property="customPngIcon32File">
                <object class="com.install4j.api.beans.ExternalFile">
                  <string>./resources/preferences32x32.png</string>
                </object>
              </void>
              <void property="executableDirectory">
                <object class="java.io.File">
                  <string>.</string>
                </object>
              </void>
              <void property="executableName">
                <string>configureGreeting</string>
              </void>
              <void property="useCustomIcon">
                <boolean>true</boolean>
              </void>
              <void property="windowTitle">
                <string>Configure Greeting</string>
              </void>
            </object>
          </java>
        </serializedBean>
        <startup>
          <screen name="" id="595" beanClass="com.install4j.runtime.beans.screens.StartupScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="false">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.StartupScreen" />
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <action name="Read current greeting" id="600" beanClass="com.install4j.runtime.beans.actions.control.RunScriptAction" enabled="true" commentSet="false" comment="" rollbackBarrier="false" multiExec="false" failureStrategy="1" errorMessage="">
                <serializedBean>
                  <java class="java.beans.XMLDecoder">
                    <object class="com.install4j.runtime.beans.actions.control.RunScriptAction">
                      <void property="script">
                        <object class="com.install4j.api.beans.ScriptProperty">
                          <void property="value">
                            <string>Properties props = new Properties();
File propFile = new File(System.getProperty("user.home"), "hello.properties");
if (propFile.exists()) {
	FileInputStream in = new FileInputStream(propFile);
    props.load(in);
	in.close();
    String greetingName = props.getProperty("greetingName");
    if (greetingName != null &amp;&amp; !greetingName.equals("world")) {
        // These variables are used in the "Configure greeting" form 
        context.setVariable("personName", greetingName);
        context.setVariable("greetingOption", "person");
    }
}
return true;</string>
                          </void>
                        </object>
                      </void>
                    </object>
                  </java>
                </serializedBean>
                <condition />
              </action>
            </actions>
            <formComponents />
          </screen>
        </startup>
        <screens>
          <link name="" id="596" beanClass="" enabled="true" targetId="73" />
          <screen name="Finish" id="598" beanClass="com.install4j.runtime.beans.screens.CustomizableBannerScreen" enabled="true" commentSet="false" comment="" rollbackBarrier="false" backButton="2" finishScreen="true">
            <serializedBean>
              <java class="java.beans.XMLDecoder">
                <object class="com.install4j.runtime.beans.screens.CustomizableBannerScreen">
                  <void property="infoText">
                    <string>Your greeting name has been updated in the Hello World Suite Greeting database.</string>
                  </void>
                  <void property="title">
                    <string>Configuration Updated</string>
                  </void>
                </object>
              </java>
            </serializedBean>
            <condition />
            <validation />
            <preActivation />
            <postActivation />
            <actions>
              <link name="" id="599" beanClass="" enabled="true" targetId="597" />
            </actions>
            <formComponents />
          </screen>
        </screens>
      </application>
    </applications>
  </installerGui>
  <mediaSets>
    <win32 name="Windows" id="8" mediaFileName="" installDir="hello" overridePrincipalLanguage="false" requires64bit="false" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" includedJRE="" manualJREEntry="false" bundleType="1" jreURL="" jreFtpURL="" jreShared="false" customInstallBaseDir="" createUninstallIcon="true" contentFilesType="1" downloadURL="" runAsAdmin="true">
      <excludedLaunchers />
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
    </win32>
    <linuxRPM name="Linux RPM" id="9" mediaFileName="" installDir="/opt/hello" overridePrincipalLanguage="false" requires64bit="false" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" includedJRE="" manualJREEntry="false" os="linux" arch="i386">
      <excludedLaunchers />
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
      <preInstallScript mode="1" file="">
        <scriptLines />
      </preInstallScript>
      <postInstallScript mode="1" file="">
        <scriptLines />
      </postInstallScript>
      <preUninstallScript mode="1" file="">
        <scriptLines />
      </preUninstallScript>
      <postUninstallScript mode="1" file="">
        <scriptLines />
      </postUninstallScript>
    </linuxRPM>
    <macos name="Mac OS X Single Bundle" id="10" mediaFileName="" installDir="hello" overridePrincipalLanguage="false" requires64bit="false" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" customInstallBaseDir="" createUninstallIcon="true" contentFilesType="1" downloadURL="" launcherId="5">
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
    </macos>
    <macosFolder name="Mac OS X Folder" id="11" mediaFileName="${compiler:sys.shortName}_${compiler:sys.platform}_${compiler:sys.version}_folder" installDir="hello" overridePrincipalLanguage="false" requires64bit="false" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" customInstallBaseDir="" createUninstallIcon="true" contentFilesType="1" downloadURL="">
      <excludedLaunchers />
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
    </macosFolder>
    <unixInstaller name="Unix Installer" id="12" mediaFileName="" installDir="hello" overridePrincipalLanguage="false" requires64bit="false" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" includedJRE="" manualJREEntry="false" bundleType="1" jreURL="" jreFtpURL="" jreShared="false" customInstallBaseDir="" createUninstallIcon="true" contentFilesType="1" downloadURL="">
      <excludedLaunchers />
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
      <installerScript mode="1" file="">
        <scriptLines />
      </installerScript>
    </unixInstaller>
    <win32 name="Windows x64" id="463" mediaFileName="${compiler:sys.shortName}_${compiler:sys.platform}-x64_${compiler:sys.version}" installDir="hello" overridePrincipalLanguage="false" requires64bit="true" runPostProcessor="false" postProcessor="" failOnPostProcessorError="false" includedJRE="" manualJREEntry="false" bundleType="1" jreURL="" jreFtpURL="" jreShared="false" customInstallBaseDir="" createUninstallIcon="true" contentFilesType="1" downloadURL="" runAsAdmin="true">
      <excludedLaunchers />
      <excludedComponents />
      <excludedBeans />
      <overriddenPrincipalLanguage id="en" customLocalizationFile="" />
      <exclude />
      <variables />
    </win32>
  </mediaSets>
  <buildIds buildAll="true" />
</install4j>

