Skip to content

Commit c165125

Browse files
committed
Add Donor Request Page to Windows bianry installer
1 parent 70bfc50 commit c165125

File tree

10 files changed

+675
-27
lines changed

10 files changed

+675
-27
lines changed

builds/install/arch-specific/win32/BuildExecutableInstall.bat

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ set FBBUILD_INSTALL_IMAGES=%FB_ROOT_PATH%\builds\install_images
173173
set FBBUILD_PROD_STATUS=DEV
174174
)
175175

176+
:: if we do not have any external documentation we should not mark the build as production
177+
if not defined FB_EXTERNAL_DOCS set FBBUILD_PROD_STATUS=DEV
178+
179+
176180
@if "%FB_TARGET_PLATFORM%"=="x64" (
177181
set FBBUILD_FILE_ID=%PRODUCT_VER_STRING%-%FBBUILD_PACKAGE_NUMBER%%FBBUILD_FILENAME_SUFFIX%-windows-x64
178182
) else (
@@ -219,6 +223,7 @@ set FBBUILD_INSTALL_IMAGES=%FB_ROOT_PATH%\builds\install_images
219223
@if not exist %FB_OUTPUT_DIR%\system32 (
220224
mkdir %FB_OUTPUT_DIR%\system32
221225
)
226+
222227
:: Note the confusion of RT library numbers here! These notes, as of time of
223228
:: writing 2021-12-21, are accurate for current versions of Visual Studio
224229
:: - 2017, 2019, 2022. Basic MS runtime version is v140. Except that is only
@@ -375,14 +380,15 @@ for %%v in (IPLicense.txt IDPLicense.txt ) do (
375380
if not exist %FB_OUTPUT_DIR%\system32\vccrt%MSVC_RUNTIME_LIBRARY_VERSION%_%FB_TARGET_PLATFORM%.msi (
376381
"%WIX%\bin\candle.exe" -v -sw1091 %FB_ROOT_PATH%\builds\win32\msvc%MSVC_VERSION%\VCCRT_%FB_TARGET_PLATFORM%.wxs -out %FB_GEN_DIR%\vccrt_%FB_TARGET_PLATFORM%.wixobj
377382
if ERRORLEVEL 1 (
378-
( call :ERROR Could not generate wixobj for MSVC Runtime MSI ) & ( goto :EOF )
383+
call :ERROR Could not generate wixobj for MSVC Runtime MSI %MSVC_RUNTIME_LIBRARY_VERSION% & goto :EOF
379384
) else (
380-
"%WIX%\bin\light.exe" -sw1076 %FB_GEN_DIR%\vccrt_%FB_TARGET_PLATFORM%.wixobj -out %FB_OUTPUT_DIR%\system32\vccrt%MSVC_RUNTIME_LIBRARY_VERSION%_%FB_TARGET_PLATFORM%.msi
381-
if ERRORLEVEL 1 ( ( call :ERROR Could not generate MSVCC Runtime MSI %MSVC_RUNTIME_LIBRARY_VERSION% ) & ( goto :EOF ) )
385+
"%WIX%\bin\light.exe" -sw1076 %FB_GEN_DIR%\vccrt_%FB_TARGET_PLATFORM%.wixobj -out %FB_OUTPUT_DIR%\system32\vccrt%MSVC_RUNTIME_LIBRARY_VERSION%_%FB_TARGET_PLATFORM%.msi
386+
if ERRORLEVEL 1 (
387+
call :ERROR Could not generate MSVCC Runtime MSI %MSVC_RUNTIME_LIBRARY_VERSION% & goto :EOF
388+
)
382389
)
383-
) else (
384-
echo Using an existing build of %FB_OUTPUT_DIR%\system32\vccrt%MSVC_RUNTIME_LIBRARY_VERSION%_%FB_TARGET_PLATFORM%.msi
385-
)
390+
) else (
391+
echo Using an existing build of %FB_OUTPUT_DIR%\system32\vccrt%MSVC_RUNTIME_LIBRARY_VERSION%_%FB_TARGET_PLATFORM%.msi
386392
)
387393

388394
::End of BUILD_CRT_MSI
@@ -587,6 +593,15 @@ for %%v in (IPLicense.txt IDPLicense.txt ) do (
587593
@echo Error code %ERRLEV% in %SCRIPT_SHORT_NAME%
588594
@echo %*
589595
@echo.
596+
@if "%FBBUILD_PROD_STATUS%" == "PROD" (
597+
echo.
598+
echo Production status is Final or Release Candidate
599+
echo Error %ERRLEV% must be fixed before continuing
600+
echo.
601+
) else (
602+
set ERRLEV=
603+
ver > nul
604+
)
590605
::End of ERROR
591606
::------------
592607
@goto :END

builds/install/arch-specific/win32/FirebirdInstall.iss

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@
4040
; server. They must be stopped manually.
4141
;
4242
;
43+
; Debugging this script
44+
;
45+
; You need to run BuildExecutableInstall.bat to create the correct environment.
46+
; If you have built firebird from run_all.bat you need to switch to the install
47+
; script directory:
48+
; pushd ..\install\arch-specific\win32
49+
;
50+
; After that you should be able to compile and debug the script from the command
51+
; line thus:
52+
; "%INNO6_SETUP_PATH%"\compil32.exe FirebirdInstall.iss
53+
;
4354
;
4455
#define MyAppPublisher "Firebird Project"
4556
#define MyAppURL "http://www.firebirdsql.org/"
@@ -660,6 +671,15 @@ Var
660671
661672
novcrt: Boolean; // Do not install the VC runtime libs
662673
674+
AdminUserPage: TInputQueryWizardPage;
675+
676+
DonorPage: TWizardPage;
677+
RichEditViewer: TRichEditViewer;
678+
DonateButton: TNewButton;
679+
680+
initWizardHeight: Integer; // In prev. version - the wizard form was resized to new size every time when go back button pressed
681+
682+
663683
#ifdef setuplogging
664684
// Not yet implemented - leave log in %TEMP%
665685
// OkToCopyLog : Boolean; // Set when installation is complete.
@@ -671,25 +691,15 @@ Var
671691
672692
#include "FirebirdInstallGUIFunctions.inc"
673693
674-
675-
var
676-
AdminUserPage: TInputQueryWizardPage;
677-
initWizardHeight: Integer; //In prev. version - the wizard form was resized to new size every time when go back button pressed
678-
679694
procedure InitializeWizard;
680695
begin
681696
initWizardHeight := wizardform.height;
682697
683-
{ Create a page to grab the new SYSDBA password }
684-
AdminUserPage := CreateInputQueryPage(wpSelectTasks,
685-
ExpandConstant( '{cm:CreateSYSDBAPassword}' )
686-
, ExpandConstant( '{cm:ClickThroughPWCreation}' ) + #13#10 +
687-
ExpandConstant( '{cm:PasswordNote}' ) , '' );
688-
AdminUserPage.Add( ExpandConstant( '{cm:SYSDBAPassword}' ), True);
689-
AdminUserPage.Add( ExpandConstant( '{cm:RetypeSYSDBAPassword}' ), True);
698+
// Create a page to grab the new SYSDBA password
699+
CreateAdminUserPage;
690700
691-
AdminUserPage.Values[0] := SYSDBAPassword;
692-
AdminUserPage.Values[1] := SYSDBAPassword;
701+
// Create a page to ask for donations
702+
CreateDonorPage;
693703
694704
end;
695705
@@ -1059,6 +1069,12 @@ begin
10591069
case CurPage of
10601070
wpInfoBefore: WizardForm.INFOBEFOREMEMO.font.name:='Courier New';
10611071
wpInfoAfter: WizardForm.INFOAFTERMEMO.font.name:='Courier New';
1072+
DonorPage.ID: begin
1073+
DonateButton.Visible := True;
1074+
WizardForm.BackButton.Visible := False;
1075+
end;
1076+
else
1077+
DonateButton.Visible := False;
10621078
end;
10631079
end;
10641080
@@ -1258,7 +1274,7 @@ begin
12581274
Result := True;
12591275
case CurPageID of
12601276
AdminUserPage.ID : begin
1261-
{ check user has entered new sysdba password correctly. }
1277+
{ check user has entered new sysdba password correctly. }
12621278
i := CompareStr(AdminUserPage.Values[0],AdminUserPage.Values[1]);
12631279
If not (i = 0) then begin
12641280
Result := False;

builds/install/arch-specific/win32/FirebirdInstallEnvironmentChecks.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
function CopyFbClientLib: boolean;
4343
function ShowCopyFbClientLibTask: boolean;
4444
45-
function SummarizeInstalledProducts: String;
46-
function AnalysisAssessment: boolean;
45+
function SummarizeInstalledProducts: String;
46+
function AnalysisAssessment: boolean;
4747
4848
function HasWI30: boolean;
4949
function HasNotWI30: boolean;

builds/install/arch-specific/win32/FirebirdInstallGUIFunctions.inc

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,4 +346,74 @@ begin
346346
CloseDebugDlg;
347347
end;
348348

349-
// kate: replace-tabs on; indent-width 2; tab-width 2; replace-tabs-save on; syntax Pascal;
349+
350+
procedure CreateAdminUserPage;
351+
352+
begin
353+
354+
AdminUserPage := CreateInputQueryPage(wpSelectTasks,
355+
ExpandConstant( '{cm:CreateSYSDBAPassword}' )
356+
, ExpandConstant( '{cm:ClickThroughPWCreation}' ) + #13#10 +
357+
ExpandConstant( '{cm:PasswordNote}' ) , '' );
358+
AdminUserPage.Add( ExpandConstant( '{cm:SYSDBAPassword}' ), True);
359+
AdminUserPage.Add( ExpandConstant( '{cm:RetypeSYSDBAPassword}' ), True);
360+
361+
AdminUserPage.Values[0] := SYSDBAPassword;
362+
AdminUserPage.Values[1] := SYSDBAPassword;
363+
364+
end;
365+
366+
367+
procedure DonateButtonOnClick(Sender: TObject);
368+
var
369+
ErrorCode: Integer;
370+
begin
371+
ShellExecAsOriginalUser('open', 'https://firebirdsql.org/en/donate/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
372+
end;
373+
374+
375+
procedure CreateDonorPage;
376+
var
377+
DonorText: AnsiString;
378+
379+
begin
380+
381+
// NOTE - The rtf must be pasted as a single line in the custom_messages.inc for the translated language. When removomg the EOLs pay attention that \par is always followed by a space.
382+
(*
383+
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}{\colortbl ;\red0\green0\blue255;}{\*\generator Riched20 10.0.17763}\viewkind4\uc1\pard\sa200\sl276\slmult1\qj\f0\fs24\lang9 Firebird has empowered users worldwide with its reliable and powerful database capabilities, thanks to years of dedicated development and community collaboration.\par \pard\li568\ri568\sa200\sl240\slmult1\qj\par \pard\sa200\sl276\slmult1\qj To ensure Firebird\rquote s continued growth and advancement, we invite you to {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/donate"}}{\fldrslt{\ul\cf1 make a donation}}}}\f0\fs24 through the Firebird Foundation. Your generous contributions help fund ongoing development, maintain critical infrastructure, and expand the features you rely on. Additionally, our affordable subscriptions offer exclusive benefits designed to enhance your Firebird experience.\par \par Every contribution, big or small, plays a vital role in keeping Firebird innovative and robust for everyone.\par \par Visit our {{\field{\*\fldinst{HYPERLINK https://firebirdsql.org/en/firebird-foundation/ }}{\fldrslt{website\ul0\cf0}}}}\f0\fs24 to explore how you can contribute to this mission and help ensure Firebird\rquote s bright future. Thank you for being a valued part of the Firebird community!\par };
384+
*)
385+
386+
DonorPage := CreateCustomPage( wpInfoAfter, 'Support Firebird Development', '');
387+
// For testing place it after the welcome page
388+
// DonorPage := CreateCustomPage( wpWelcome, 'Support Firebird Development', '');
389+
390+
DonorText := ExpandConstant('{cm:DonorPage}');
391+
392+
RichEditViewer := TRichEditViewer.Create(DonorPage);
393+
RichEditViewer.Width := DonorPage.SurfaceWidth;
394+
RichEditViewer.Height := DonorPage.SurfaceHeight;
395+
RichEditViewer.Anchors := [akLeft, akTop, akRight, akBottom];
396+
RichEditViewer.BevelKind := bkNone;
397+
RichEditViewer.BorderStyle := bsNone;
398+
RichEditViewer.Parent := DonorPage.Surface;
399+
RichEditViewer.ScrollBars := ssNone;
400+
RichEditViewer.UseRichEdit := True;
401+
RichEditViewer.RTFText := DonorText;
402+
RichEditViewer.ReadOnly := True;
403+
404+
DonateButton := TNewButton.Create(WizardForm);
405+
DonateButton.Left := 10;
406+
DonateButton.Top := WizardForm.CancelButton.Top;
407+
// NOTE - If adding new translations be sure to check that this button is wide enough
408+
// for the translation of 'Donate Now'.
409+
DonateButton.Width := WizardForm.CancelButton.Width + 40;
410+
DonateButton.Height := WizardForm.CancelButton.Height;
411+
DonateButton.Anchors := [akLeft, akBottom];
412+
DonateButton.Caption := ExpandConstant('{cm:DonateNow}');
413+
DonateButton.OnClick := @DonateButtonOnClick;
414+
DonateButton.Parent := WizardForm;
415+
DonateButton.Visible := False;
416+
417+
end;
418+
419+

builds/install/arch-specific/win32/custom_messages.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,5 @@ en.RetypeSYSDBAPassword=Retype SYSDBA Password:
8888
en.InstallingMSVC32runtimes=Installing MSVC 32-bit runtime libraries to system directory
8989
en.InstallingMSVC64runtimes=Installing MSVC 64-bit runtime libraries to system directory
9090

91+
en.DonateNow=&Donate Now
92+
en.DonorPage={\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}{\colortbl ;\red0\green0\blue255;}{\*\generator Riched20 10.0.17763}\viewkind4\uc1 \pard\sl240\slmult1\qj\f0\fs24\lang9 Firebird has empowered users worldwide with its reliable and powerful database capabilities, thanks to years of dedicated development and community collaboration.\par \pard\li568\ri568\sl240\slmult1\qj\par\pard\sl240\slmult1\qj To ensure Firebird\rquote s continued growth and advancement, we invite you to {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/donate"}}{\fldrslt{\ul\cf1\cf1\ul make a donation}}}}\f0\fs24 through the Firebird Foundation. Your generous contributions help fund ongoing development, maintain critical infrastructure, and expand the features you rely on. Additionally, our affordable subscriptions offer exclusive benefits designed to enhance your Firebird experience.\par \par Every contribution, big or small, plays a vital role in keeping Firebird innovative and robust for everyone.\par \par Visit our {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/firebird-foundation/ "}}{\fldrslt{\ul\cf1\cf1\ul website}}}}\f0\fs24 to explore how you can contribute to this mission and help ensure Firebird\rquote s bright future. Thank you for being a valued part of the Firebird community!\par }

builds/install/arch-specific/win32/cz/custom_messages_cz.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,5 @@ cz.RetypeSYSDBAPassword=Znovu heslo pro SYSDBA:
8989
cz.InstallingMSVC32runtimes=Instaluji 32bitové běhové knihovny MSVC do systémové složky
9090
cz.InstallingMSVC64runtimes=Instaluji 64bitové běhové knihovny MSVC do systémové složky
9191

92+
cz.DonateNow=&Přispějte nyní
93+
cz.DonorPage={\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset238 Calibri;}}{\colortbl ;\red0\green0\blue255;}{\*\generator Riched20 10.0.17763}\viewkind4\uc1 \pard\sl240\slmult1\qj\f0\fs24\lang9 Firebird ji\f1\'9e l\f0\'e9ta umo\f1\'9e\'f2uje u\'9eivatel\'f9m po cel\f0\'e9m sv\f1\'ect\'ec vyu\'9e\f0\'edvat spolehliv\'e9 a v\'fdkonn\'e9 datab\'e1zov\'e9 funkce, a to d\'edky dlouholet\'e9mu v\'fdvoji a spolupr\'e1ci komunity.\par \par Aby mohl Firebird d\'e1le r\f1\'f9st a vyv\f0\'edjet se, zveme v\'e1s, abyste ho {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/donate "}}{\fldrslt{\ul\cf1\cf1\ul podpo\f1\'f8ili\f1 }}}}\f0\fs24 prost\f1\'f8ednictv\f0\'edm Firebird Foundation. Va\f1\'9ae p\'f8\f0\'edsp\f1\'ecvky pom\f0\'e1haj\'ed financovat pokra\f1\'e8uj\f0\'edc\'ed v\'fdvoj, udr\f1\'9eovat kl\f0\'ed\f1\'e8ovou infrastrukturu a roz\'9ai\'f8ovat funkce, na kter\f0\'e9 se spol\'e9h\'e1te. Nav\'edc na\f1\'9ae cenov\'ec dostupn\f0\'e9 p\f1\'f8edplatn\f0\'e9 nab\'edz\'ed exkluzivn\'ed v\'fdhody, kter\'e9 v\'e1m zp\f1\'f8\f0\'edjemn\'ed pr\'e1ci s Firebirdem.\par \par Ka\f1\'9ed\f0\'fd p\f1\'f8\f0\'edsp\f1\'ecvek, mal\f0\'fd nebo velk\'fd, hraje z\'e1sadn\'ed roli pro udr\f1\'9een\f0\'ed Firebirdu jako inovativn\'edho a v\'fdkonn\'e9ho n\'e1stroje pro v\f1\'9aechny.\par \par Nav\'9ativte na\'9ae {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/firebird-foundation/ "}}{\fldrslt{\ul\cf1\cf1\ul webov\f0\'e9 str\'e1nky}}}}\f1\fs24 a zjist\'ecte, jak m\'f9\'9eete pomoci zajistit sv\'ectlou budoucnost Firebirdu. D\'eckujeme, \'9ee jste sou\'e8\f0\'e1st\'ed komunity Firebirdu!\par \par }

builds/install/arch-specific/win32/fr/custom_messages_fr.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,5 @@ fr.RetypeSYSDBAPassword=Confirmer le mot de passe SYSDBA:
8989
fr.InstallingMSVC32runtimes=Installer les bibliothèques MSVC 32-bit dans le répertoire système
9090
fr.InstallingMSVC64runtimes=Installer les bibliothèques MSVC 64-bit dans le répertoire système
9191

92+
fr.DonateNow=Faire un &don
93+
fr.DonorPage={\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}{\colortbl ;\red0\green0\blue255;}{\*\generator Riched20 10.0.17763}\viewkind4\uc1 \pard\sl240\slmult1\qj\f0\fs24\lang9 Firebird a permis aux utilisateurs du monde entier d'acc\'e9der \'e0 des bases de donn\'e9es fiables et puissantes, gr\'e2ce \'e0 des ann\'e9es de d\'e9veloppement et de collaboration avec la communaut\'e9.\par \par Pour assurer la croissance et le progr\'e8s continus de Firebird, nous vous invitons {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/donate"}}{\fldrslt{\ul\cf1\cf1\ul\'e0 faire un don}}}}\f0\fs24 par l'interm\'e9diaire de la Fondation Firebird. Vos contributions g\'e9n\'e9reuses aident \'e0 financer le d\'e9veloppement continu, \'e0 maintenir l'infrastructure critique, et \'e0 \'e9tendre les fonctionnalit\'e9s sur lesquelles vous comptez. De plus, nos abonnements abordables offrent des avantages exclusifs con\'e7us pour am\'e9liorer votre exp\'e9rience de Firebird.\par \par Chaque contribution, petite ou grande, joue un r\'f4le vital pour que Firebird reste innovant et robuste pour tout le monde.\par \par Visitez notre {{\field{\*\fldinst{HYPERLINK "https://firebirdsql.org/en/firebird-foundation/ "}}{\fldrslt{\ul\cf1\cf1\ul site web}}}}\f0\fs24 pour d\'e9couvrir comment vous pouvez contribuer \'e0 cette mission et aider \'e0 assurer l'avenir de Firebird. Merci de faire partie de la communaut\'e9 Firebird !\par }

builds/install/arch-specific/win32/ru/custom_messages_ru.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,6 @@ ru.SYSDBAPassword=Пароль SYSDBA:
8787
ru.RetypeSYSDBAPassword=Повторите пароль:
8888
ru.InstallingMSVC32runtimes=Устанавливаются библиотеки MSVC 32-bit runtime
8989
ru.InstallingMSVC64runtimes=Устанавливаются библиотеки MSVC 64-bit runtime
90+
91+
ru.DonateNow=&Пожертвовать сейчас
92+
ru.DonorPage={\rtf1\ansi\ansicpg1251\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset204 Calibri;}{\f1\fnil\fcharset0 Calibri;}} {\*\generator Riched20 10.0.17763}\viewkind4\uc1 \pard\qj\f0\fs24\lang1049 Firebird \'ef\'f0\'e5\'e4\'ee\'f1\'f2\'e0\'e2\'eb\'ff\'e5\'f2 \'ef\'ee\'eb\'fc\'e7\'ee\'e2\'e0\'f2\'e5\'eb\'ff\'ec \'e1\'e0\'e7 \'e4\'e0\'ed\'ed\'fb\'f5 \'ef\'ee \'e2\'f1\'e5\'ec\'f3 \'ec\'e8\'f0\'f3 \'f1\'e2\'ee\'fe \'ed\'e0\'e4\'e5\'e6\'ed\'ee\'f1\'f2\'fc \'e8 \'ec\'ee\'f9\'ed\'ee\'f1\'f2\'fc \'e1\'eb\'e0\'e3\'ee\'e4\'e0\'f0\'ff \'ec\'ed\'ee\'e3\'ee\'eb\'e5\'f2\'ed\'e5\'e9 \'f0\'e0\'e7\'f0\'e0\'e1\'ee\'f2\'ea\'e5 \'e8 \'f1\'ee\'f2\'f0\'f3\'e4\'ed\'e8\'f7\'e5\'f1\'f2\'e2\'f3 \'f1 \'f1\'ee\'ee\'e1\'f9\'e5\'f1\'f2\'e2\'ee\'ec.\par\par \'d7\'f2\'ee\'e1\'fb \'ee\'e1\'e5\'f1\'ef\'e5\'f7\'e8\'f2\'fc \'ef\'ee\'f1\'f2\'ee\'ff\'ed\'ed\'fb\'e9 \'f0\'ee\'f1\'f2 \'e8 \'f0\'e0\'e7\'e2\'e8\'f2\'e8\'e5 Firebird, \'ec\'fb \'ef\'f0\'e8\'e3\'eb\'e0\'f8\'e0\'e5\'ec \'e2\'e0\'f1 \'ef\'ee\'e4\'e4\'e5\'f0\'e6\'e0\'f2\'fc \'e5\'e3\'ee \'f1 \'ef\'ee\'ec\'ee\'f9\'fc\'fe Firebird Foundation. \'c2\'e0\'f8\'e8 \'e1\'eb\'e0\'e3\'ee\'f0\'ee\'e4\'ed\'fb\'e5 \'ef\'ee\'e6\'e5\'f0\'f2\'e2\'ee\'e2\'e0\'ed\'e8\'ff \'ef\'ee\'ec\'ee\'e3\'e0\'fe\'f2 \'f4\'e8\'ed\'e0\'ed\'f1\'e8\'f0\'ee\'e2\'e0\'f2\'fc \'ef\'f0\'ee\'e4\'ee\'eb\'e6\'e0\'fe\'f9\'f3\'fe\'f1\'ff \'f0\'e0\'e7\'f0\'e0\'e1\'ee\'f2\'ea\'f3, \'ef\'ee\'e4\'e4\'e5\'f0\'e6\'e8\'e2\'e0\'f2\'fc \'ea\'f0\'e8\'f2\'e8\'f7\'e5\'f1\'ea\'e8 \'e2\'e0\'e6\'ed\'f3\'fe \'e8\'ed\'f4\'f0\'e0\'f1\'f2\'f0\'f3\'ea\'f2\'f3\'f0\'f3 \'e8 \'f3\'eb\'f3\'f7\'f8\'e0\'f2\'fc \'f4\'f3\'ed\'ea\'f6\'e8\'ee\'ed\'e0\'eb\'fc\'ed\'ee\'f1\'f2\'fc, \'ed\'e0 \'ea\'ee\'f2\'ee\'f0\'f3\'fe \'e2\'fb \'ef\'ee\'eb\'e0\'e3\'e0\'e5\'f2\'e5\'f1\'fc. \'ca\'f0\'ee\'ec\'e5 \'f2\'ee\'e3\'ee, \'ed\'e0\'f8\'e8 \'e4\'ee\'f1\'f2\'f3\'ef\'ed\'fb\'e5 \'ef\'ee\'e4\'ef\'e8\'f1\'ea\'e8 \'ef\'f0\'e5\'e4\'eb\'e0\'e3\'e0\'fe\'f2 \'fd\'ea\'f1\'ea\'eb\'fe\'e7\'e8\'e2\'ed\'fb\'e5 \'ef\'f0\'e5\'e8\'ec\'f3\'f9\'e5\'f1\'f2\'e2\'e0 \'e4\'eb\'ff \'e2\'e0\'f8\'e5\'e9 \'f0\'e0\'e1\'ee\'f2\'fb \'f1 Firebird.\par \par\'ca\'e0\'e6\'e4\'fb\'e9 \'e2\'ea\'eb\'e0\'e4, \'e1\'ee\'eb\'fc\'f8\'ee\'e9 \'e8\'eb\'e8 \'ec\'e0\'eb\'e5\'ed\'fc\'ea\'e8\'e9, \'e8\'e3\'f0\'e0\'e5\'f2 \'e2\'e0\'e6\'ed\'f3\'fe \'f0\'ee\'eb\'fc \'e2 \'f1\'ee\'f5\'f0\'e0\'ed\'e5\'ed\'e8\'e8 \'e8\'ed\'ed\'ee\'e2\'e0\'f6\'e8\'ee\'ed\'ed\'ee\'f1\'f2\'e8 \'e8 \'ed\'e0\'e4\'e5\'e6\'ed\'ee\'f1\'f2\'e8 Firebird \'e4\'eb\'ff \'e2\'f1\'e5\'f5.\par \par\'cf\'ee\'f1\'e5\'f2\'e8\'f2\'e5 \'ed\'e0\'f8 \'e2\'e5\'e1-\'f1\'e0\'e9\'f2, \'f7\'f2\'ee\'e1\'fb \'f3\'e7\'ed\'e0\'f2\'fc \'ea\'e0\'ea \'e2\'fb \'ec\'ee\'e6\'e5\'f2\'e5 \'e2\'ed\'e5\'f1\'f2\'e8 \'f1\'e2\'ee\'e9 \'e2\'ea\'eb\'e0\'e4 \'e8 \'ef\'ee\'ec\'ee\'f7\'fc \'ee\'e1\'e5\'f1\'ef\'e5\'f7\'e8\'f2\'fc \'f1\'e2\'e5\'f2\'eb\'ee\'e5 \'e1\'f3\'e4\'f3\'f9\'e5\'e5 Firebird. \'d1\'ef\'e0\'f1\'e8\'e1\'ee, \'f7\'f2\'ee \'ff\'e2\'eb\'ff\'e5\'f2\'e5\'f1\'fc \'f6\'e5\'ed\'ed\'ee\'e9 \'f7\'e0\'f1\'f2\'fc\'fe \'f1\'ee\'ee\'e1\'f9\'e5\'f1\'f2\'e2\'e0 Firebird!\par \f1\lang2057\par }

0 commit comments

Comments
 (0)