Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/wix-packaging into lp:openlp/packaging.
Commit message: Build a Windows Installer (MSI) file instead of using InnoSetup Requested reviews: OpenLP Core (openlp-core) For more details, see: https://code.launchpad.net/~raoul-snyman/openlp/wix-packaging/+merge/365880 Build a Windows Installer (MSI) file instead of using InnoSetup -- Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/wix-packaging into lp:openlp/packaging.
=== modified file 'builders/builder.py' --- builders/builder.py 2019-02-18 20:10:59 +0000 +++ builders/builder.py 2019-04-11 20:55:56 +0000 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 ############################################################################### # OpenLP - Open Source Lyrics Projection # @@ -276,8 +276,11 @@ """ self._print('Running PyInstaller...') os.chdir(self.work_path) - cmd = [self.python, - self.pyinstaller_exe, + if self.pyinstaller_exe.endswith('.py'): + cmd = [self.python, self.pyinstaller_exe] + else: + cmd = [self.pyinstaller_exe] + cmd.extend([ '--clean', '--noconfirm', '--windowed', @@ -287,7 +290,8 @@ '-i', self.icon_path, '-n', 'OpenLP', *self.get_extra_parameters(), # Adds any extra parameters we wish to use - self.openlp_script] + self.openlp_script + ]) if self.args.verbose: cmd.append('--log-level=DEBUG') else: === modified file 'builders/windows-builder.py' --- builders/windows-builder.py 2019-03-13 21:00:05 +0000 +++ builders/windows-builder.py 2019-04-11 20:55:56 +0000 @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2004-2016 OpenLP Developers # +# Copyright (c) OpenLP Developers # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # # under the terms of the GNU General Public License as published by the Free # @@ -36,8 +36,9 @@ This script expects the precompiled, installable version of PyEnchant to be installed. You can find this on the PyEnchant site. -Inno Setup 5 - Inno Setup should be installed into "C:\\%PROGRAMFILES%\\Inno Setup 5" +WiX Toolset + The toolset should be installed into "C:\\%PROGRAMFILES%\\WiX Toolset v3.11" + or similar. Sphinx This is used to build the documentation. The documentation trunk must be at @@ -61,15 +62,6 @@ This script, of course. It should be in the "windows-installer" directory at the same level as OpenLP trunk. -psvince.dll - This dll is used during the actual install of OpenLP to check if OpenLP is - running on the users machine prior to the setup. If OpenLP is running, - the install will fail. The dll can be obtained from here: - - http://www.vincenzo.net/isxkb/index.php?title=PSVince - - The dll is presently included with this script. - Mako Mako Templates for Python. This package is required for building the remote plugin. It can be installed by going to your @@ -83,11 +75,6 @@ mupdf.com, extract it, and set the mutoolbin option in the config file to point to mutool.exe. -MediaInfo - Required for the media plugin. Download the 32-bit CLI windows build from - https://mediaarea.net/nn/MediaInfo/Download/Windows and set the - mediainfobin option in the config file to point to MediaInfo.exe. - Portable App Builds The following are required if you are planning to make a portable build of OpenLP. The portable build conforms to the standards published by @@ -112,8 +99,12 @@ import glob import sys from distutils import dir_util +from hashlib import md5 from shutil import copy, move, rmtree +from lxml.etree import fromstring, tostring +from lxml.builder import E + from builder import Builder @@ -123,29 +114,107 @@ to build a Windows installer. """ - def _create_innosetup_file(self): - """ - Create an InnoSetup file pointing to the branch being built. - """ - self._print('Creating Inno Setup file...') - config_dir = os.path.dirname(self.config_path) - with open(os.path.join(config_dir, 'OpenLP.iss.default'), 'r') as input_file, \ - open(os.path.join(config_dir, 'OpenLP.iss'), 'w') as output_file: - content = input_file.read() - content = content.replace('%(branch)s', self.branch_path) - content = content.replace('%(display_version)s', self.version.replace('-bzr', '.')) - content = content.replace('%(arch)s', self.arch) - output_file.write(content) - - def _run_innosetup(self): - """ - Run InnoSetup to create an installer. - """ - self._print('Running Inno Setup...') - config_dir = os.path.dirname(self.config_path) - os.chdir(config_dir) - self._run_command([self.innosetup_exe, os.path.join(config_dir, 'OpenLP.iss'), '/q'], - 'Error running InnoSetup') + def _walk_dirs(self, dir_dict, path): + """ + Walk a dictionary according to path + """ + parts = path.split(os.sep) + search_key = parts.pop(0) + if search_key in dir_dict.keys(): + if not parts: + return dir_dict[search_key] + else: + return self._walk_dirs(dir_dict[search_key], os.sep.join(parts)) + else: + return None + + def _get_fragments_from_files(self, start_dir): + """ + Walk down a directory recursively and build up the XML for WiX + """ + start_base, start_path = os.path.split(start_dir) + element = E.DirectoryRef(Id='INSTALLDIR') + directories = {start_path: {'__dir__': element}} + components = [] + + for root, _, files in os.walk(start_dir): + parent = os.sep.join(root.replace(os.path.join(start_base, ''), '').split(os.sep)[:-1]) + if root == start_dir: + path = '' + else: + path = root.replace(os.path.join(start_dir, ''), '') + base = os.path.basename(root) + if root != start_dir: + dir_id = 'dir_{parent}_{base}'.format(parent=parent.replace(os.sep, '_'), base=base) + element = E.Directory(Id=dir_id, Name=base) + new_dir = {'__dir__': element} + parent_dir = self._walk_dirs(directories, parent) + parent_dir[base] = new_dir + parent_dir['__dir__'].append(element) + for fname in files: + source = os.path.join(path, fname) if path else fname + source_id = md5(source.encode('utf8')).hexdigest() + file_id = 'file_{source_id}'.format(source_id=source_id) + component_id = 'cmp_{source_id}'.format(source_id=source_id) + if self.arch == 'x64': + file_ = E.File(Id=file_id, KeyPath="yes", Source=source, ProcessorArchitecture='x64') + component = E.Component(file_, Id=component_id, Guid='*', Win64='yes') + else: + file_ = E.File(Id=file_id, KeyPath="yes", Source=source) + component = E.Component(file_, Id=component_id, Guid='*') + element.append(component) + components.append(component) + + files_fragment = E.Fragment(directories[start_path]['__dir__']) + comps_fragment = E.Fragment(E.ComponentGroup(*[E.ComponentRef(Id=c.attrib['Id']) for c in components], + Id='Files')) + return files_fragment, comps_fragment + + def _create_wix_file(self): + """ + Create a WiX project file + """ + self._print('Creating WiX file...') + config_dir = os.path.dirname(self.config_path) + self._print_verbose('Reading base WiX file') + with open(os.path.join(config_dir, 'OpenLP-base.wxs'), 'rt') as base_file: + xml = base_file.read() + progfilefolder = 'ProgramFiles64Folder' if self.arch == 'x64' else 'ProgramFilesFolder' + xml = xml % dict(dialog=os.path.join(config_dir, 'WizardMain.bmp'), + banner=os.path.join(config_dir, 'WizardBanner.bmp'), + license=os.path.join(config_dir, 'gpl-2.0.rtf'), + platform=self.arch, + progfilefolder=progfilefolder) + tree = fromstring(xml.encode('utf8')) + self._print_verbose('Creating XML fragments from files and directories') + fragments = self._get_fragments_from_files(self.dist_path) + self._print_verbose('Inserting XML fragments into base WiX file') + for fragment in fragments: + tree.append(fragment) + self._print_verbose('Writing new WiX file') + with open(os.path.join(config_dir, 'OpenLP.wxs'), 'wb') as f: + f.write(tostring(tree, encoding='utf-8', xml_declaration=True, pretty_print=True)) + + def _run_wix_tools(self): + """ + Run the WiX toolset to create an installer + """ + self._print('Running WiX tools...') + if self.arch == 'x64': + version = '{}-x64'.format(self.version) + else: + version = self.version + msi_file = os.path.abspath(os.path.join(self.dist_path, '..', 'OpenLP-{}.msi'.format(version))) + if os.path.exists(msi_file): + self._print_verbose('Removing old MSI file') + os.unlink(msi_file) + config_dir = os.path.dirname(self.config_path) + os.chdir(self.dist_path) + self._run_command([self.candle_exe, '-ext', 'WiXUtilExtension', os.path.join(config_dir, 'OpenLP.wxs')], + 'Error running WiX tool: candle') + self._run_command([self.light_exe, '-ext', 'WiXUtilExtension', '-ext', 'WixUIExtension', 'OpenLP.wixobj', + '-o', msi_file], + 'Error running WiX tool: light') def _create_portableapp_structure(self): """ @@ -303,8 +372,6 @@ copy(self.icon_path, os.path.join(self.dist_path, 'OpenLP.ico')) self._print_verbose('... LICENSE.txt') copy(self.license_path, os.path.join(self.dist_path, 'LICENSE.txt')) - self._print_verbose('... psvince.dll') - copy(self.psvince_exe, os.path.join(self.dist_path, 'psvince.dll')) if os.path.isfile(os.path.join(self.helpfile_path, 'OpenLP.chm')): self._print_verbose('... OpenLP.chm') copy(os.path.join(self.helpfile_path, 'OpenLP.chm'), os.path.join(self.dist_path, 'OpenLP.chm')) @@ -315,11 +382,6 @@ copy(os.path.join(self.mutool_exe), os.path.join(self.dist_path, 'mutool.exe')) else: self._print('... WARNING: mutool.exe not found') - self._print_verbose('... MediaInfo.exe') - if self.mediainfo_exe and os.path.isfile(self.mediainfo_exe): - copy(os.path.join(self.mediainfo_exe), os.path.join(self.dist_path, 'MediaInfo.exe')) - else: - self._print('... WARNING: MediaInfo.exe not found') def after_run_sphinx(self): """ @@ -333,8 +395,8 @@ """ Build the installer """ - self._create_innosetup_file() - self._run_innosetup() + self._create_wix_file() + self._run_wix_tools() if self.args.portable: self._run_portableapp_builder() === added file 'windows/OpenLP-base.wxs' --- windows/OpenLP-base.wxs 1970-01-01 00:00:00 +0000 +++ windows/OpenLP-base.wxs 2019-04-11 20:55:56 +0000 @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="utf-8"?> +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" + xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> + <Product Name="OpenLP" Manufacturer="OpenLP" Id="{98092172-3875-47d3-8DBE-3EB0D5A57CE7}" + UpgradeCode="{8C5881AC-8F1E-4937-BB99-B823FABF18F0}" Language="1033" Codepage="1252" Version="2.5.0"> + <Package Id="*" Keywords="Installer" Description="Free open source church worship presentation software" + Comments="OpenLP is open source under the GNU General Public License" Manufacturer="OpenLP Developers" + InstallerVersion="251" Languages="1033" Compressed="yes" SummaryCodepage="1252" Platform="%(platform)s"/> + <Condition Message="You need to be an administrator to install this product.">Privileged</Condition> + <Media Id="1" Cabinet="openlp.cab" EmbedCab="yes" CompressionLevel="high"/> + <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" /> + <Property Id="ARPPRODUCTICON" Value="OpenLP.ico" /> + <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch OpenLP" /> + <Property Id="WixShellExecTarget" Value="[#file_e368869eb54b01e2288a3359b1cf51f8]" /> + <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> + <UI> + <UIRef Id="WixUI_InstallDir" /> + <Publish Dialog="ExitDialog" + Control="Finish" + Event="DoAction" + Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> + </UI> + <WixVariable Id="WixUILicenseRtf" Value="%(license)s" /> + <WixVariable Id="WixUIDialogBmp" Value="%(dialog)s" /> + <WixVariable Id="WixUIBannerBmp" Value="%(banner)s" /> + <Directory Id="TARGETDIR" Name="SourceDir"> + <Directory Id="%(progfilefolder)s"> + <Directory Id="INSTALLDIR" Name="OpenLP"/> + </Directory> + <Directory Id="ProgramMenuFolder" Name="Programs"> + <Directory Id="ProgramMenuDir" Name="OpenLP"> + <Component Id="ProgramMenuDir" Guid="{7AABE54C-5B03-4049-AA85-E18B787A19C7}"> + <RemoveFolder Id="ProgramMenuDir" On="uninstall" /> + <RegistryValue Root="HKCU" Key="Software\OpenLP\OpenLP" Type="string" Value="" KeyPath="yes" /> + <Shortcut Id="ApplicationStartMenuShortcut" + Name="OpenLP" + Description="Open Source Worship Presentation Software" + Target="[#file_e368869eb54b01e2288a3359b1cf51f8]" + Icon="OpenLP.ico" + WorkingDirectory="RootDirectory"/> + <Shortcut Id="DebugStartMenuShortcut" + Name="OpenLP (Debug)" + Description="Run OpenLP with debug logging enabled" + Target="[#file_e368869eb54b01e2288a3359b1cf51f8]" + Arguments="--log-level debug" + Icon="OpenLP.ico" + WorkingDirectory="RootDirectory"/> + <Shortcut Id="HelpStartMenuShortcut" + Name="OpenLP Help" + Description="Help file for OpenLP" + Target="[#file_436f15ee9b174c85745878fe09b6d47e]" + WorkingDirectory="RootDirectory"/> + <util:InternetShortcut Id="OpenLPWebSite" + Name="OpenLP on the Web" + Target="http://openlp.org/"/> + <util:InternetShortcut Id="OpenLPForums" + Name="Get support for OpenLP" + Target="http://forums.openlp.org/"/> + <Shortcut Id="UninstallProduct" + Name="Uninstall OpenLP" + Target="[SystemFolder]msiexec.exe" + Arguments="/x [ProductCode]" + Description="Removes OpenLP from your computer" /> + </Component> + </Directory> + </Directory> + <Directory Id="DesktopFolder" Name="Desktop" /> + </Directory> + <DirectoryRef Id="INSTALLDIR"> + <Directory Id="RootDirectory" Name="OpenLP" /> + </DirectoryRef> + <Feature Id="Complete" Title="Complete" Description="The OpenLP program files" Level="1" + ConfigurableDirectory="INSTALLDIR" AllowAdvertise="no" InstallDefault="local" Absent="disallow"> + <ComponentGroupRef Id="Files"/> + <ComponentRef Id="ProgramMenuDir"/> + </Feature> + <Icon Id="OpenLP.ico" SourceFile="OpenLP.ico"/> + </Product> +</Wix> === removed file 'windows/OpenLP.iss.default' --- windows/OpenLP.iss.default 2019-03-11 13:46:12 +0000 +++ windows/OpenLP.iss.default 1970-01-01 00:00:00 +0000 @@ -1,187 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -#define AppName "OpenLP" -#define AppVerName "OpenLP %(display_version)s" -#define AppVersion "%(display_version)s" -#define AppPublisher "OpenLP Developers" -#define AppURL "http://openlp.org/" -#define AppExeName "OpenLP.exe" -#define Arch "%(arch)s" - -#define FileHandle FileOpen("%(branch)s\dist\OpenLP\.version") -#define FileLine FileRead(FileHandle) -#define RealVersion FileLine -#expr FileClose(FileHandle) - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppID={{AA7699FA-B2D2-43F4-8A70-D497D03C9485} -AppName={#AppName} -AppVerName={cm:NameAndVersion,{#AppName},{#AppVersion}} -AppVersion={#AppVersion} -AppPublisher={#AppPublisher} -AppPublisherURL={#AppURL} -AppSupportURL={#AppURL} -AppUpdatesURL={#AppURL} -DefaultDirName={pf}\{#AppName} -DefaultGroupName={#AppName} -AllowNoIcons=true -LicenseFile=LICENSE.txt -OutputDir=%(branch)s\dist\ -OutputBaseFilename=OpenLP-{#RealVersion}-{#Arch}-setup -Compression=lzma/Max -SolidCompression=true -SetupIconFile=OpenLP.ico -VersionInfoVersion={#AppVersion} -WizardImageFile=WizImageBig.bmp -WizardSmallImageFile=WizImageSmall.bmp -ChangesAssociations=true - -[Languages] -Name: english; MessagesFile: compiler:Default.isl -Name: brazilianportuguese; MessagesFile: compiler:Languages\BrazilianPortuguese.isl -Name: catalan; MessagesFile: compiler:Languages\Catalan.isl -Name: czech; MessagesFile: compiler:Languages\Czech.isl -Name: danish; MessagesFile: compiler:Languages\Danish.isl -Name: dutch; MessagesFile: compiler:Languages\Dutch.isl -Name: finnish; MessagesFile: compiler:Languages\Finnish.isl -Name: french; MessagesFile: compiler:Languages\French.isl -Name: german; MessagesFile: compiler:Languages\German.isl -Name: hebrew; MessagesFile: compiler:Languages\Hebrew.isl -Name: hungarian; MessagesFile: compiler:Languages\Hungarian.isl -Name: italian; MessagesFile: compiler:Languages\Italian.isl -Name: japanese; MessagesFile: compiler:Languages\Japanese.isl -Name: norwegian; MessagesFile: compiler:Languages\Norwegian.isl -Name: polish; MessagesFile: compiler:Languages\Polish.isl -Name: portuguese; MessagesFile: compiler:Languages\Portuguese.isl -Name: russian; MessagesFile: compiler:Languages\Russian.isl -Name: slovenian; MessagesFile: compiler:Languages\Slovenian.isl -Name: spanish; MessagesFile: compiler:Languages\Spanish.isl - -[Tasks] -Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons} -Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0, 6.1 - -[Files] -Source: %(branch)s\dist\OpenLP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs -; DLL used to check if the target program is running at install time -Source: psvince.dll; flags: dontcopy -; psvince is installed in {app} folder, so it will be loaded at -; uninstall time to check if the target program is running -Source: psvince.dll; DestDir: {app} - -[Icons] -Name: {group}\{#AppName}; Filename: {app}\{#AppExeName} -Name: {group}\{#AppName} (Debug); Filename: {app}\{#AppExeName}; Parameters: -l debug -Name: {group}\{#AppName} Help; Filename: {app}\{#AppName}.chm; Check: FileExists(ExpandConstant('{app}\{#AppName}.chm')) -Name: {group}\{cm:ProgramOnTheWeb,{#AppName}}; Filename: {#AppURL} -Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe} -Name: {commondesktop}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: desktopicon -Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: quicklaunchicon - -[Run] -Filename: {app}\{#AppExeName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent - -[Registry] -Root: HKCR; Subkey: .osz; ValueType: string; ValueName: ; ValueData: OpenLP; Flags: uninsdeletevalue -Root: HKCR; Subkey: .oszl; ValueType: string; ValueName: ; ValueData: OpenLP; Flags: uninsdeletevalue -Root: HKCR; Subkey: OpenLP; ValueType: string; ValueName: ; ValueData: OpenLP Service; Flags: uninsdeletekey -Root: HKCR; Subkey: OpenLP\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\OpenLP.exe,0 -Root: HKCR; Subkey: OpenLP\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\OpenLP.exe"" ""%1""" - -[UninstallDelete] -; Remove support directory created when program is run: -Type: filesandordirs; Name: {app}\support -; Remove program directory if empty: -Name: {app}; Type: dirifempty - -[Code] -// Function to call psvince.dll at install time -function IsModuleLoadedInstall(modulename: AnsiString ): Boolean; -external 'IsModuleLoaded@files:psvince.dll stdcall setuponly'; - -// Function to call psvince.dll at uninstall time -function IsModuleLoadedUninstall(modulename: AnsiString ): Boolean; -external 'IsModuleLoaded@{app}\psvince.dll stdcall uninstallonly' ; - -function GetUninstallString(): String; -var - sUnInstPath: String; - sUnInstallString: String; -begin - sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1'); - sUnInstallString := ''; - if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then - RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); - Result := sUnInstallString; -end; - -function IsUpgrade(): Boolean; -begin - Result := (GetUninstallString() <> ''); -end; - -// Return Values: -// 1 - uninstall string is empty -// 2 - error executing the UnInstallString -// 3 - successfully executed the UnInstallString -function UnInstallOldVersion(): Integer; -var - sUnInstallString: String; - iResultCode: Integer; -begin - Result := 0; - sUnInstallString := GetUninstallString(); - if sUnInstallString <> '' then - begin - sUnInstallString := RemoveQuotes(sUnInstallString); - if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then - Result := 3 - else - Result := 2; - end - else - Result := 1; -end; - -function InitializeSetup(): Boolean; -begin - Result := true; - while IsModuleLoadedInstall( 'OpenLP.exe' ) and Result do - begin - if MsgBox( 'Openlp is currently running, please close it to continue the install.', - mbError, MB_OKCANCEL ) = IDCANCEL then - begin - Result := false; - end; - end; -end; - -procedure CurStepChanged(CurStep: TSetupStep); -begin - if (CurStep=ssInstall) then - begin - if (IsUpgrade()) then - begin - UnInstallOldVersion(); - end; - end; -end; - -function InitializeUninstall(): Boolean; -begin - Result := true; - while IsModuleLoadedUninstall( 'OpenLP.exe' ) and Result do - begin - if MsgBox( 'Openlp is currently running, please close it to continue the uninstall.', - mbError, MB_OKCANCEL ) = IDCANCEL then - begin - Result := false; - end; - end; -// Unload psvince.dll, otherwise it is not deleted - UnloadDLL(ExpandConstant('{app}\psvince.dll')); -end; === added file 'windows/WizardBanner.bmp' Binary files windows/WizardBanner.bmp 1970-01-01 00:00:00 +0000 and windows/WizardBanner.bmp 2019-04-11 20:55:56 +0000 differ === added file 'windows/WizardMain.bmp' Binary files windows/WizardMain.bmp 1970-01-01 00:00:00 +0000 and windows/WizardMain.bmp 2019-04-11 20:55:56 +0000 differ === modified file 'windows/config-appveyor.ini' --- windows/config-appveyor.ini 2019-02-15 21:34:14 +0000 +++ windows/config-appveyor.ini 2019-04-11 20:55:56 +0000 @@ -1,14 +1,13 @@ [executables] -innosetup = %(progfiles)s\Inno Setup 5\ISCC.exe sphinx = %(pyroot)s\Scripts\sphinx-build.exe pyinstaller = %(pyroot)s\Scripts\pyinstaller-script.py htmlhelp = %(progfiles)s\HTML Help Workshop\hhc.exe -psvince = %(here)s\psvince.dll lrelease = C:\Qt\5.12\msvc2017\bin\lrelease.exe portablelauncher = %(here)s\..\..\PortableApps.comLauncher\PortableApps.comLauncherGenerator.exe portableinstaller = %(here)s\..\..\PortableApps.comInstaller\PortableApps.comInstaller.exe mutool = %(here)s\..\..\mupdf-1.14.0-windows\mutool.exe -mediainfo = %(here)s\..\..\MediaInfo\MediaInfo.exe +candle = %(progfiles)s\WiX Toolset v3.11\bin\candle.exe +light = %(progfiles)s\WiX Toolset v3.11\bin\light.exe [paths] branch = %(projects)s\openlp-branch === modified file 'windows/config.ini.default' --- windows/config.ini.default 2019-02-15 20:19:31 +0000 +++ windows/config.ini.default 2019-04-11 20:55:56 +0000 @@ -1,22 +1,21 @@ [executables] -innosetup = %(progfiles)s\Inno Setup 5\ISCC.exe sphinx = %(pyroot)s\Scripts\sphinx-build.exe pyinstaller = %(here)s\..\pyinstaller\pyinstaller.py htmlhelp = %(progfiles)s\HTML Help Workshop\hhc.exe -psvince = %(here)s\psvince.dll lrelease = %(sitepackages)s\PyQt5\bin\lrelease.exe portablelauncher = %(progfiles)s\PortableApps.comLauncher\PortableApps.comLauncherGenerator.exe portableinstaller = %(progfiles)s\PortableApps.comInstaller\PortableApps.comInstaller.exe mutool = %(here)s\..\mupdf-1.9a-windows\mutool.exe -mediainfo = %(here)s\..\MediaInfo\MediaInfo.exe +candle = %(progfiles)s\WiX Toolset v3.11\bin\candle.exe +light = %(progfiles)s\WiX Toolset v3.11\bin\light.exe [paths] branch = %(projects)s\trunk documentation = %(projects)s\documentation -icon = %(here)s\OpenLP.ico -hooks = %(here)s\..\pyinstaller-hooks +icon = %(here)s\windows\OpenLP.ico +hooks = %(here)s\pyinstaller-hooks license = %(here)s\LICENSE.txt -portable_source = %(here)s\OpenLPPortable +portable_source = %(here)s\windows\OpenLPPortable portable_dest = %(projects)s\OpenLPPortable [transifex] === added file 'windows/gpl-2.0.rtf' --- windows/gpl-2.0.rtf 1970-01-01 00:00:00 +0000 +++ windows/gpl-2.0.rtf 2019-04-11 20:55:56 +0000 @@ -0,0 +1,95 @@ +{\rtf1\ansi\ansicpg1252\uc1\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fcharset128 Tahoma;}{\f1\fcharset0 Tahoma;}} +\f0{\colortbl;\red0\green0\blue0;}{\*\generator Wine Riched20 2.0.????;}\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone GNU GENERAL PUBLIC LICENSE} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Version }{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone June }{\cf1\fs24\ulnone 1991} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone 1989}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 1991 }{\cf1\fs24\ulnone Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone . }\line +{\cf1\fs24\ulnone 51 }{\cf1\fs24\ulnone Franklin Street}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Fifth Floor}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Boston}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone MA }{\cf1\fs24\ulnone 02110}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone 1301}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone USA}\line +\line +{\cf1\fs24\ulnone Everyone is permitted to copy and distribute verbatim copies}\line +{\cf1\fs24\ulnone of this license document}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but changing it is not allowed}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Preamble} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The licenses for most software are designed to take away your freedom to share and change it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone By contrast}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the GNU General Public License is intended to guarantee your}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone freedom to share and change free software}{\cf1\fs24\ulnone --}{\cf1\fs24\ulnone to make sure the software is free for all its users}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This General Public License applies to most of the Free Software Foundation}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software and to any other program whose authors commit to using it}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead}{\cf1\fs24\ulnone .)}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone You can apply it to your programs}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone too}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone When we speak of free software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we are referring to freedom}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone not price}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Our General Public Licenses are designed to make sure that you have the freedom to distribute copies}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone of free software}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone and charge for this service if you wish}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that you receive source code or can get it if you want it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that you can change the software or use pieces of it in}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone new free programs}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and that you know you can do these things}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone To protect your rights}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone These restrictions translate to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone certain responsibilities for you if you distribute copies of the software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or if you modify it}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone For example}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if you distribute copies of such a program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone whether gratis or for a fee}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you must give the recipients all the rights that you have}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You must make sure that they}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone too}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone receive or can get the source code}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone And you must show them these terms so they know their rights}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone We protect your rights with two steps}{\cf1\fs24\ulnone : (}{\cf1\fs24\ulnone 1}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone copyright the software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone offer you this license which gives you legal permission to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribute and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or modify the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Also}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone for each author}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s protection and ours}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we want to make certain that everyone understands that there is no warranty for this free software}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the software is modified}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone by someone else and passed on}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we want its recipients to know that what they have is not the original}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone so that any problems introduced by others will not reflect on the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone original authors}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone reputations}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Finally}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone any free program is threatened constantly by software patents}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone We wish to avoid the danger that redistributors of a free program will individually obtain patent}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone licenses}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in effect making the program proprietary}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone To prevent this}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we have made it clear that any patent must be licensed for everyone}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s free use or not licensed at all}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The precise terms and conditions for copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribution and modification follow}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone TERMS AND CONDITIONS FOR COPYING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone DISTRIBUTION AND MODIFICATION} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 0}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone Public License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone Program}{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone below}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone refers to any such program or work}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and a }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone work based on the Program}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone means either the Program or any derivative work under copyright }{\cf1\fs24\ulnone law}{\cf1\fs24\ulnone :}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone that is to say}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone a work containing the Program or a portion of it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone either verbatim or with modifications and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or translated into another language}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Hereinafter}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone translation is included without limitation in the term}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone modification}{\cf1\fs24\ulnone ".) }{\cf1\fs24\ulnone Each licensee is addressed as }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone you}{\cf1\fs24\ulnone ".} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Activities other than copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribution and modification are not covered by this License}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone they are outside its scope}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The act of running the Program is not restricted}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the output from the Program is covered only if its contents constitute a work based on the Program}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone independent of having been made by running the Program}{\cf1\fs24\ulnone ). }{\cf1\fs24\ulnone Whether that is}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone true depends on what the Program does}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 1}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may copy and distribute verbatim copies of the Program}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s source code as you receive it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in any medium}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone provided that you conspicuously and appropriately publish on}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone each copy an appropriate copyright notice and disclaimer of warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone keep intact all the notices that refer to this License and to the absence of any warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and give any}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone other recipients of the Program a copy of this License along with the Program}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone You may charge a fee for the physical act of transferring a copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you may at your option offer warranty protection in exchange for a fee}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may modify your copy or copies of the Program or any portion of it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone thus forming a work based on the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and copy and distribute such modifications or work under}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the terms of Section}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone above}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone provided that you also meet all of these conditions}{\cf1\fs24\ulnone :} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone a}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone b}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone You must cause any work that you distribute or publish}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that in whole or in part contains or is derived from the Program or any part thereof}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to be licensed as a whole}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone at no charge to all third parties under the terms of this License}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone c}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone If the modified program normally reads commands interactively when run}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you must cause it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone when started running for such interactive use in the most ordinary way}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone print or display an announcement including an appropriate copyright notice and a notice that there is no warranty}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or else}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone saying that you provide a warranty}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone and that}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone users may redistribute the program under these conditions}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and telling the user how to view a copy of this License}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Exception}{\cf1\fs24\ulnone : }{\cf1\fs24\ulnone if the Program itself is interactive but}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone does not normally print such an announcement}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone your work based on the Program is not required to print an announcement}{\cf1\fs24\ulnone .)} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone These requirements apply to the modified work as a whole}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If identifiable sections of that work are not derived from the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and can be reasonably considered independent}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and separate works in themselves}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and its terms}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone do not apply to those sections when you distribute them as separate works}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone But when you distribute the same}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone sections as part of a whole which is a work based on the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the distribution of the whole must be on the terms of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone whose permissions for other licensees}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone extend to the entire whole}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and thus to each and every part regardless of who wrote it}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Thus}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone it is not the intent of this section to claim rights or contest your rights to work written entirely by you}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone rather}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the intent is to exercise the right to control the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribution of derivative or collective works based on the Program}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone In addition}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone mere aggregation of another work not based on the Program with the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or with a work based on the Program}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone on a volume of a storage or distribution medium}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone does not bring the other work under the scope of this License}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 3}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may copy and distribute the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or a work based on it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone under Section }{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone in object code or executable form under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above provided that}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone you also do one of the following}{\cf1\fs24\ulnone :} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone a}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with the complete corresponding machine}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone readable source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone which must be distributed under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above on a medium customarily}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone used for software interchange}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone or}{\cf1\fs24\ulnone ,} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone b}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with a written offer}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone valid for at least three years}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to give any third party}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone for a charge no more than your cost of physically performing source}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribution}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone a complete machine}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone readable copy of the corresponding source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to be distributed under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above on a medium customarily used}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone for software interchange}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone or}{\cf1\fs24\ulnone ,} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone c}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with the information you received as to the offer to distribute corresponding source code}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone This alternative is allowed only for noncommercial distribution}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and only if you received the program in object code or executable form with such an offer}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in accord with Subsection b above}{\cf1\fs24\ulnone .)} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The source code for a work means the preferred form of the work for making modifications to it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For an executable work}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone complete source code means all the source code for}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone all modules it contains}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone plus any associated interface definition files}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone plus the scripts used to control compilation and installation of the executable}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone as a special}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone exception}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the source code distributed need not include anything that is normally distributed }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone in either source or binary form}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone with the major components }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone compiler}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone kernel}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and so on}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone of the operating system on which the executable runs}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone unless that component itself accompanies the executable}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If distribution of executable or object code is made by offering access to copy from a designated place}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then offering equivalent access to copy the source code from the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone same place counts as distribution of the source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone even though third parties are not compelled to copy the source along with the object code}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 4}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may not copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone modify}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone sublicense}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or distribute the Program except as expressly provided under this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Any attempt otherwise to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone modify}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone sublicense or}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribute the Program is void}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and will automatically terminate your rights under this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone parties who have received copies}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or rights}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone from you under this}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone License will not have their licenses terminated so long as such parties remain in full compliance}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 5}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You are not required to accept this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone since you have not signed it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone nothing else grants you permission to modify or distribute the Program or its}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone derivative works}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone These actions are prohibited by law if you do not accept this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Therefore}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone by modifying or distributing the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or any work based on the }{\cf1\fs24\ulnone Program}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone you indicate your acceptance of this License to do so}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and all its terms and conditions for copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distributing or modifying the Program or works based on it}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 6}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Each time you redistribute the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or any work based on the Program}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the recipient automatically receives a license from the original licensor to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribute}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone or modify the Program subject to these terms and conditions}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may not impose any further restrictions on the recipients}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone exercise of the rights granted herein}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You are}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone not responsible for enforcing compliance by third parties to this License}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 7}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone as a consequence of a court judgment or allegation of patent infringement or for any other reason }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone not limited to patent issues}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone conditions are imposed on you}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone whether by court order}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone agreement or otherwise}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone that contradict the conditions of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone they do not excuse you from the conditions of this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If you cannot}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then as a consequence you may not distribute the Program at}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone all}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For example}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if a patent license would not permit royalty}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone free redistribution of the Program by all those who receive copies directly or indirectly through you}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If any portion of this section is held invalid or unenforceable under any particular circumstance}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the balance of the section is intended to apply and the section as a whole}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone is intended to apply in other circumstances}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone this section has the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone sole purpose of protecting the integrity of the free software distribution system}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone which is implemented by public license practices}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Many people have made generous}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone contributions to the wide range of software distributed through that system in reliance on consistent application of that system}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone it is up to the author}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone donor to decide if he}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone or she is willing to distribute software through any other system and a licensee cannot impose that choice}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 8}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the distribution and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the original copyright holder who places}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the Program under this License may add an explicit geographical distribution limitation excluding those countries}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone so that distribution is permitted only in or among}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone countries not thus excluded}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone In such case}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone this License incorporates the limitation as if written in the body of this License}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 9}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The Free Software Foundation may publish revised and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or new versions of the General Public License from time to time}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Such new versions will be similar in spirit to the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone present version}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but may differ in detail to address new problems or concerns}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Each version is given a distinguishing version number}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the Program specifies a version number of this License which applies to it and }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone any later version}{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you have the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the Program does not specify a}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone version number of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you may choose any version ever published by the Free Software Foundation}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 10}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the author to ask for permission}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software which is copyrighted by the Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the Free Software Foundation}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone we sometimes make exceptions for this}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Our decision will be guided by}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone NO WARRANTY} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 11}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone THERE IS NO WARRANTY FOR THE PROGRAM}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone TO THE EXTENT PERMITTED BY APPLICABLE LAW}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone EXCEPT WHEN OTHERWISE STATED IN WRITING THE}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone COPYRIGHT HOLDERS AND}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone OR OTHER PARTIES PROVIDE THE PROGRAM }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone AS IS}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone WITHOUT WARRANTY OF ANY KIND}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone EITHER EXPRESSED OR IMPLIED}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCLUDING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone BUT NOT LIMITED TO}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone THE IMPLIED WARRANTIES}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone SHOULD THE PROGRAM PROVE DEFECTIVE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone YOU}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone ASSUME THE COST OF ALL NECESSARY SERVICING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone REPAIR OR CORRECTION}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0 +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 12}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone OR ANY OTHER PARTY WHO MAY MODIFY AND}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone OR REDISTRIBUTE THE PROGRAM AS PERMITTED}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone ABOVE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone BE LIABLE TO YOU FOR DAMAGES}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCLUDING ANY GENERAL}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone SPECIAL}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone INCLUDING BUT NOT}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone EVEN IF SUCH}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone END OF TERMS AND CONDITIONS} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone How to Apply These Terms to Your New Programs} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If you develop a new program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you want it to be of the greatest possible use to the public}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the best way to achieve this is to make it free software which everyone can}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone redistribute and change under these terms}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone To do so}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone attach the following notices to the program}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone each file should have at least the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone copyright}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone line and a pointer to where the full notice is found}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone one line to give the program}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s name and an idea of what it does}{\cf1\fs24\ulnone .}\line +{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone yyyy name of author}\line +\line +{\cf1\fs24\ulnone This program is free software}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone you can redistribute it and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or modify it under the terms of the GNU General Public License as published by the Free Software Foundation}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone either}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone version}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone of the License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone at your option}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone any later version}{\cf1\fs24\ulnone .}\line +\line +{\cf1\fs24\ulnone This program is distributed in the hope that it will be useful}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but WITHOUT ANY WARRANTY}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone PURPOSE}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone See the GNU General Public License for more details}{\cf1\fs24\ulnone .}\line +\line +{\cf1\fs24\ulnone You should have received a copy of the GNU General Public License along with this program}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone if not}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone .}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 51 }{\cf1\fs24\ulnone Franklin Street}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Fifth }{\cf1\fs24\ulnone Floor}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone Boston}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone MA }{\cf1\fs24\ulnone 02110}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone 1301}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone USA}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Also add information on how to contact you by electronic and paper mail}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If the program is interactive}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone make it output a short notice like this when it starts in an interactive mode}{\cf1\fs24\ulnone :} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Gnomovision version }{\cf1\fs24\ulnone 69}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone year name of author}\line +{\cf1\fs24\ulnone Gnomovision comes with ABSOLUTELY NO WARRANTY}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone for details}\line +{\cf1\fs24\ulnone type }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This is free software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you are welcome}\line +{\cf1\fs24\ulnone to redistribute it under certain conditions}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone type }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone ' }\line +{\cf1\fs24\ulnone for details}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The hypothetical commands }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone should show the appropriate parts of the General Public License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Of course}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the commands you use may be called something}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone other than}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone '; }{\cf1\fs24\ulnone they could even be mouse}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone clicks or menu items}{\cf1\fs24\ulnone --}{\cf1\fs24\ulnone whatever suits your program}{\cf1\fs24\ulnone .} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone You should also get your employer }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone if you work as a programmer}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone or your school}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if any}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to sign a }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone copyright disclaimer}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone for the program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if necessary}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Here is a sample}{\cf1\fs24\ulnone ;}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone alter the names}{\cf1\fs24\ulnone :} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Yoyodyne}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone .}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone hereby disclaims all copyright interest in the program }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone Gnomovision}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone which makes passes at compilers}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone written by James Hacker}{\cf1\fs24\ulnone .}\line +\line +{\cf1\fs24\ulnone signature of Ty Coon}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone April }{\cf1\fs24\ulnone 1989}\line +{\cf1\fs24\ulnone Ty Coon}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone President of Vice} +\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone This General Public License does not permit incorporating your program into proprietary programs}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If your program is a subroutine library}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you may consider it more useful to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone permit linking proprietary applications with the library}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If this is what you want to do}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone use the instead of this License}{\cf1\fs24\ulnone .} +\par} \ No newline at end of file === removed file 'windows/psvince.dll' Binary files windows/psvince.dll 2012-06-09 19:02:47 +0000 and windows/psvince.dll 1970-01-01 00:00:00 +0000 differ
_______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : openlp-core@lists.launchpad.net Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp