From e53f0019b57484c9fe0b24371d9c8520b52af57d Mon Sep 17 00:00:00 2001 From: Matt Madia Date: Sat, 1 Sep 2012 11:26:55 +0000 Subject: [PATCH 01/21] installoptionalpackage cannot install WebPositive. +alpha --- data/bin/installoptionalpackage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/bin/installoptionalpackage b/data/bin/installoptionalpackage index f2a22dfd6d..612549fc57 100755 --- a/data/bin/installoptionalpackage +++ b/data/bin/installoptionalpackage @@ -42,8 +42,8 @@ declare alreadyInstalled="" # Some Packages cannot be installed, # as they require either the source code or compiled binaries declare packageIgnoreList="Bluetooth Development DevelopmentMin \ -DevelopmentBase MandatoryPackages UserlandFS Welcome WifiFirmwareScriptData \ -ICU-devel ICU " +DevelopmentBase ICU-devel ICU MandatoryPackages UserlandFS \ +WebPositive Welcome WifiFirmwareScriptData " function CreateInstallerScript() From 5b60052cfc0d6505729aab88507e017f66862696 Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 2 Sep 2012 15:11:51 -0400 Subject: [PATCH 02/21] Make double scrollbar arrows default to false again. --- src/servers/app/DesktopSettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/app/DesktopSettings.cpp b/src/servers/app/DesktopSettings.cpp index c983c69ad0..a634905d31 100644 --- a/src/servers/app/DesktopSettings.cpp +++ b/src/servers/app/DesktopSettings.cpp @@ -57,7 +57,7 @@ DesktopSettingsPrivate::_SetDefaults() // init scrollbar info fScrollBarInfo.proportional = true; - fScrollBarInfo.double_arrows = true; + fScrollBarInfo.double_arrows = false; fScrollBarInfo.knob = 1; // look of the knob (R5: (0, 1, 2), 1 = default) fScrollBarInfo.min_knob_size = 15; From fe855cd5504348c7c0b688ff64c7930ca2cc78b2 Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 2 Sep 2012 15:14:50 -0400 Subject: [PATCH 03/21] Appearance preflet: Add a double scrollbar arrows setting. Rename the 'Decorators' tab to 'Look and feel'. Fixes #8926. --- src/preferences/appearance/APRWindow.cpp | 2 +- .../appearance/DecorSettingsView.cpp | 64 +++++++++++++++++-- .../appearance/DecorSettingsView.h | 5 ++ 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/preferences/appearance/APRWindow.cpp b/src/preferences/appearance/APRWindow.cpp index 6006482164..1244cabbf4 100644 --- a/src/preferences/appearance/APRWindow.cpp +++ b/src/preferences/appearance/APRWindow.cpp @@ -55,7 +55,7 @@ APRWindow::APRWindow(BRect frame) fColorsView = new APRView(B_TRANSLATE("Colors")); fDecorSettings = new DecorSettingsView( - B_TRANSLATE("Decorators")); + B_TRANSLATE("Look and feel")); fAntialiasingSettings = new AntialiasingSettingsView( B_TRANSLATE("Antialiasing")); diff --git a/src/preferences/appearance/DecorSettingsView.cpp b/src/preferences/appearance/DecorSettingsView.cpp index 711c534a7d..0ba10089fb 100644 --- a/src/preferences/appearance/DecorSettingsView.cpp +++ b/src/preferences/appearance/DecorSettingsView.cpp @@ -17,8 +17,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -36,6 +38,9 @@ static const int32 kMsgSetDecor = 'deco'; static const int32 kMsgDecorInfo = 'idec'; +static const int32 kMsgDoubleScrollbarArrows = 'dsba'; + +static const bool kDefaultDoubleScrollbarArrowsSetting = false; // #pragma mark - @@ -43,7 +48,11 @@ static const int32 kMsgDecorInfo = 'idec'; DecorSettingsView::DecorSettingsView(const char* name) : - BView(name, 0) + BView(name, 0), + fDecorInfoButton(NULL), + fDecorMenuField(NULL), + fDecorMenu(NULL), + fDoubleScrollbarArrowsCheckBox(NULL) { // Decorator menu _BuildDecorMenu(); @@ -53,6 +62,13 @@ DecorSettingsView::DecorSettingsView(const char* name) fDecorInfoButton = new BButton(B_TRANSLATE("About"), new BMessage(kMsgDecorInfo)); + fDoubleScrollbarArrowsCheckBox = new BCheckBox("doubleScrollbarArrows", + B_TRANSLATE("Use double scrollbar arrows"), + new BMessage(kMsgDoubleScrollbarArrows)); + + fSavedDoubleArrowsValue = _GetDoubleScrollbarArrowsSetting(); + fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); + SetLayout(new BGroupLayout(B_VERTICAL)); // control layout @@ -61,9 +77,10 @@ DecorSettingsView::DecorSettingsView(const char* name) .Add(fDecorMenuField->CreateMenuBarLayoutItem(), 1, 0) .Add(fDecorInfoButton, 2, 0) - .Add(BSpaceLayoutItem::CreateGlue(), 0, 3, 2) - .SetInsets(10, 10, 10, 10) - ); + .Add(fDoubleScrollbarArrowsCheckBox, 0, 3, 2) + .Add(BSpaceLayoutItem::CreateGlue(), 0, 4, 2) + .SetInsets(10, 10, 10, 10) + ); // TODO : Decorator Preview Image? } @@ -83,6 +100,7 @@ DecorSettingsView::AttachedToWindow() fDecorMenu->SetTargetForItems(this); fDecorInfoButton->SetTarget(this); + fDoubleScrollbarArrowsCheckBox->SetTarget(this); } @@ -125,6 +143,9 @@ DecorSettingsView::MessageReceived(BMessage *msg) break; } + case kMsgDoubleScrollbarArrows: + _SetDoubleScrollbarArrowsSetting(fDoubleScrollbarArrowsCheckBox->Value()); + break; default: BView::MessageReceived(msg); @@ -197,24 +218,53 @@ DecorSettingsView::_AdoptInterfaceToCurrentDecor() } +bool +DecorSettingsView::_GetDoubleScrollbarArrowsSetting() +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + return info.double_arrows; +} + + +void +DecorSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + info.double_arrows = value; + set_scroll_bar_info(&info); + + Window()->PostMessage(kMsgUpdate); +} + + void DecorSettingsView::SetDefaults() { _SetDecor(fDecorUtility.DefaultDecorator()); + _SetDoubleScrollbarArrowsSetting(kDefaultDoubleScrollbarArrowsSetting); + fDoubleScrollbarArrowsCheckBox->SetValue( + kDefaultDoubleScrollbarArrowsSetting); } bool DecorSettingsView::IsDefaultable() { - return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name(); + return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name() || + fDoubleScrollbarArrowsCheckBox->Value() != + kDefaultDoubleScrollbarArrowsSetting; } bool DecorSettingsView::IsRevertable() { - return fCurrentDecor != fSavedDecor; + return fCurrentDecor != fSavedDecor || + fDoubleScrollbarArrowsCheckBox->Value() != fSavedDoubleArrowsValue; } @@ -222,4 +272,6 @@ void DecorSettingsView::Revert() { _SetDecor(fSavedDecor); + _SetDoubleScrollbarArrowsSetting(fSavedDoubleArrowsValue); + fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); } diff --git a/src/preferences/appearance/DecorSettingsView.h b/src/preferences/appearance/DecorSettingsView.h index 520bde281d..8110cb55c1 100644 --- a/src/preferences/appearance/DecorSettingsView.h +++ b/src/preferences/appearance/DecorSettingsView.h @@ -16,6 +16,7 @@ class BButton; +class BCheckBox; class BMenuField; class BPopUpMenu; @@ -40,6 +41,8 @@ private: void _BuildDecorMenu(); void _AdoptToCurrentDecor(); void _AdoptInterfaceToCurrentDecor(); + bool _GetDoubleScrollbarArrowsSetting(); + void _SetDoubleScrollbarArrowsSetting(bool value); private: DecorInfoUtility fDecorUtility; @@ -47,9 +50,11 @@ private: BButton* fDecorInfoButton; BMenuField* fDecorMenuField; BPopUpMenu* fDecorMenu; + BCheckBox* fDoubleScrollbarArrowsCheckBox; BString fSavedDecor; BString fCurrentDecor; + bool fSavedDoubleArrowsValue; }; #endif // DECOR_SETTINGS_VIEW_H From 6446fc35823ea31c3bd412a50ead1c4fb0c6d95b Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 2 Sep 2012 15:30:02 -0400 Subject: [PATCH 04/21] Rename DecorSettingsView to LookAndFeelSettingsView. --- src/preferences/appearance/APRWindow.cpp | 18 ++++----- src/preferences/appearance/APRWindow.h | 4 +- src/preferences/appearance/Jamfile | 4 +- ...gsView.cpp => LookAndFeelSettingsView.cpp} | 40 ++++++++++--------- ...ttingsView.h => LookAndFeelSettingsView.h} | 13 +++--- 5 files changed, 41 insertions(+), 38 deletions(-) rename src/preferences/appearance/{DecorSettingsView.cpp => LookAndFeelSettingsView.cpp} (85%) rename src/preferences/appearance/{DecorSettingsView.h => LookAndFeelSettingsView.h} (79%) diff --git a/src/preferences/appearance/APRWindow.cpp b/src/preferences/appearance/APRWindow.cpp index 1244cabbf4..41cedcc95c 100644 --- a/src/preferences/appearance/APRWindow.cpp +++ b/src/preferences/appearance/APRWindow.cpp @@ -21,7 +21,7 @@ #include "AntialiasingSettingsView.h" #include "APRView.h" -#include "DecorSettingsView.h" +#include "LookAndFeelSettingsView.h" #include "defs.h" #include "FontView.h" @@ -54,7 +54,7 @@ APRWindow::APRWindow(BRect frame) fColorsView = new APRView(B_TRANSLATE("Colors")); - fDecorSettings = new DecorSettingsView( + fLookAndFeelSettings = new LookAndFeelSettingsView( B_TRANSLATE("Look and feel")); fAntialiasingSettings = new AntialiasingSettingsView( @@ -62,7 +62,7 @@ APRWindow::APRWindow(BRect frame) tabView->AddTab(fFontSettings); tabView->AddTab(fColorsView); - tabView->AddTab(fDecorSettings); + tabView->AddTab(fLookAndFeelSettings); tabView->AddTab(fAntialiasingSettings); _UpdateButtons(); @@ -92,7 +92,7 @@ APRWindow::MessageReceived(BMessage *message) fFontSettings->SetDefaults(); fColorsView->SetDefaults(); fAntialiasingSettings->SetDefaults(); - fDecorSettings->SetDefaults(); + fLookAndFeelSettings->SetDefaults(); _UpdateButtons(); break; @@ -101,7 +101,7 @@ APRWindow::MessageReceived(BMessage *message) fColorsView->Revert(); fAntialiasingSettings->Revert(); fFontSettings->Revert(); - fDecorSettings->Revert(); + fLookAndFeelSettings->Revert(); _UpdateButtons(); break; @@ -127,11 +127,11 @@ APRWindow::_IsDefaultable() const // printf("fonts defaultable: %d\n", fFontSettings->IsDefaultable()); // printf("colors defaultable: %d\n", fColorsView->IsDefaultable()); // printf("AA defaultable: %d\n", fAntialiasingSettings->IsDefaultable()); -// printf("decor defaultable: %d\n", fDecorSettings->IsDefaultable()); +// printf("decor defaultable: %d\n", fLookAndFeelSettings->IsDefaultable()); return fColorsView->IsDefaultable() || fFontSettings->IsDefaultable() || fAntialiasingSettings->IsDefaultable() - || fDecorSettings->IsDefaultable(); + || fLookAndFeelSettings->IsDefaultable(); } @@ -141,9 +141,9 @@ APRWindow::_IsRevertable() const // printf("fonts revertable: %d\n", fFontSettings->IsRevertable()); // printf("colors revertable: %d\n", fColorsView->IsRevertable()); // printf("AA revertable: %d\n", fAntialiasingSettings->IsRevertable()); -// printf("decor revertable: %d\n", fDecorSettings->IsRevertable()); +// printf("decor revertable: %d\n", fLookAndFeelSettings->IsRevertable()); return fColorsView->IsRevertable() || fFontSettings->IsRevertable() || fAntialiasingSettings->IsRevertable() - || fDecorSettings->IsRevertable(); + || fLookAndFeelSettings->IsRevertable(); } diff --git a/src/preferences/appearance/APRWindow.h b/src/preferences/appearance/APRWindow.h index ab6f582f16..1907fc4964 100644 --- a/src/preferences/appearance/APRWindow.h +++ b/src/preferences/appearance/APRWindow.h @@ -20,7 +20,7 @@ class APRView; class AntialiasingSettingsView; class FontView; -class DecorSettingsView; +class LookAndFeelSettingsView; class APRWindow : public BWindow { @@ -39,7 +39,7 @@ private: AntialiasingSettingsView* fAntialiasingSettings; FontView* fFontSettings; - DecorSettingsView* fDecorSettings; + LookAndFeelSettingsView* fLookAndFeelSettings; }; diff --git a/src/preferences/appearance/Jamfile b/src/preferences/appearance/Jamfile index 12ade0a6a4..45904f7a26 100644 --- a/src/preferences/appearance/Jamfile +++ b/src/preferences/appearance/Jamfile @@ -9,7 +9,7 @@ Includes [ FGristFiles AntialiasingSettingsView.cpp ] Preference Appearance : APRMain.cpp AntialiasingSettingsView.cpp - DecorSettingsView.cpp + LookAndFeelSettingsView.cpp FontSelectionView.cpp FontView.cpp APRView.cpp @@ -40,7 +40,7 @@ DoCatalogs Appearance : ColorSet.cpp ColorWell.cpp ColorWhichItem.cpp - DecorSettingsView.cpp + LookAndFeelSettingsView.cpp FontView.cpp FontSelectionView.cpp ; diff --git a/src/preferences/appearance/DecorSettingsView.cpp b/src/preferences/appearance/LookAndFeelSettingsView.cpp similarity index 85% rename from src/preferences/appearance/DecorSettingsView.cpp rename to src/preferences/appearance/LookAndFeelSettingsView.cpp index 0ba10089fb..5720764d89 100644 --- a/src/preferences/appearance/DecorSettingsView.cpp +++ b/src/preferences/appearance/LookAndFeelSettingsView.cpp @@ -5,10 +5,11 @@ * Authors: * Alexander von Gluck, kallisti5@unixzen.com * Stephan Aßmus + * Ryan Leavengood */ -#include "DecorSettingsView.h" +#include "LookAndFeelSettingsView.h" #include #include @@ -34,6 +35,7 @@ #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "DecorSettingsView" + // This was not renamed to keep from breaking translations static const int32 kMsgSetDecor = 'deco'; @@ -46,7 +48,7 @@ static const bool kDefaultDoubleScrollbarArrowsSetting = false; // #pragma mark - -DecorSettingsView::DecorSettingsView(const char* name) +LookAndFeelSettingsView::LookAndFeelSettingsView(const char* name) : BView(name, 0), fDecorInfoButton(NULL), @@ -85,13 +87,13 @@ DecorSettingsView::DecorSettingsView(const char* name) } -DecorSettingsView::~DecorSettingsView() +LookAndFeelSettingsView::~LookAndFeelSettingsView() { } void -DecorSettingsView::AttachedToWindow() +LookAndFeelSettingsView::AttachedToWindow() { if (Parent() != NULL) SetViewColor(Parent()->ViewColor()); @@ -105,7 +107,7 @@ DecorSettingsView::AttachedToWindow() void -DecorSettingsView::MessageReceived(BMessage *msg) +LookAndFeelSettingsView::MessageReceived(BMessage *msg) { switch (msg->what) { case kMsgSetDecor: @@ -139,7 +141,7 @@ DecorSettingsView::MessageReceived(BMessage *msg) BAlert *infoAlert = new BAlert(B_TRANSLATE("About Decorator"), infoText.String(), B_TRANSLATE("OK")); infoAlert->SetFlags(infoAlert->Flags() | B_CLOSE_ON_ESCAPE); - infoAlert->Go(); + infoAlert->Go(); break; } @@ -155,7 +157,7 @@ DecorSettingsView::MessageReceived(BMessage *msg) void -DecorSettingsView::_BuildDecorMenu() +LookAndFeelSettingsView::_BuildDecorMenu() { fDecorMenu = new BPopUpMenu(B_TRANSLATE("Choose Decorator")); @@ -184,24 +186,24 @@ DecorSettingsView::_BuildDecorMenu() void -DecorSettingsView::_SetDecor(const BString& name) +LookAndFeelSettingsView::_SetDecor(const BString& name) { _SetDecor(fDecorUtility.FindDecorator(name)); -} +} void -DecorSettingsView::_SetDecor(DecorInfo* decorInfo) +LookAndFeelSettingsView::_SetDecor(DecorInfo* decorInfo) { if (fDecorUtility.SetDecorator(decorInfo) == B_OK) { _AdoptToCurrentDecor(); Window()->PostMessage(kMsgUpdate); } -} +} void -DecorSettingsView::_AdoptToCurrentDecor() +LookAndFeelSettingsView::_AdoptToCurrentDecor() { fCurrentDecor = fDecorUtility.CurrentDecorator()->Name(); if (fSavedDecor.Length() == 0) @@ -210,7 +212,7 @@ DecorSettingsView::_AdoptToCurrentDecor() } void -DecorSettingsView::_AdoptInterfaceToCurrentDecor() +LookAndFeelSettingsView::_AdoptInterfaceToCurrentDecor() { BMenuItem* item = fDecorMenu->FindItem(fCurrentDecor); if (item != NULL) @@ -219,7 +221,7 @@ DecorSettingsView::_AdoptInterfaceToCurrentDecor() bool -DecorSettingsView::_GetDoubleScrollbarArrowsSetting() +LookAndFeelSettingsView::_GetDoubleScrollbarArrowsSetting() { scroll_bar_info info; get_scroll_bar_info(&info); @@ -229,7 +231,7 @@ DecorSettingsView::_GetDoubleScrollbarArrowsSetting() void -DecorSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) +LookAndFeelSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) { scroll_bar_info info; get_scroll_bar_info(&info); @@ -242,7 +244,7 @@ DecorSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) void -DecorSettingsView::SetDefaults() +LookAndFeelSettingsView::SetDefaults() { _SetDecor(fDecorUtility.DefaultDecorator()); _SetDoubleScrollbarArrowsSetting(kDefaultDoubleScrollbarArrowsSetting); @@ -252,7 +254,7 @@ DecorSettingsView::SetDefaults() bool -DecorSettingsView::IsDefaultable() +LookAndFeelSettingsView::IsDefaultable() { return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name() || fDoubleScrollbarArrowsCheckBox->Value() != @@ -261,7 +263,7 @@ DecorSettingsView::IsDefaultable() bool -DecorSettingsView::IsRevertable() +LookAndFeelSettingsView::IsRevertable() { return fCurrentDecor != fSavedDecor || fDoubleScrollbarArrowsCheckBox->Value() != fSavedDoubleArrowsValue; @@ -269,7 +271,7 @@ DecorSettingsView::IsRevertable() void -DecorSettingsView::Revert() +LookAndFeelSettingsView::Revert() { _SetDecor(fSavedDecor); _SetDoubleScrollbarArrowsSetting(fSavedDoubleArrowsValue); diff --git a/src/preferences/appearance/DecorSettingsView.h b/src/preferences/appearance/LookAndFeelSettingsView.h similarity index 79% rename from src/preferences/appearance/DecorSettingsView.h rename to src/preferences/appearance/LookAndFeelSettingsView.h index 8110cb55c1..3214be3924 100644 --- a/src/preferences/appearance/DecorSettingsView.h +++ b/src/preferences/appearance/LookAndFeelSettingsView.h @@ -5,9 +5,10 @@ * Authors: * Alexander von Gluck, kallisti5@unixzen.com * Stephan Aßmus + * Ryan Leavengood */ -#ifndef DECOR_SETTINGS_VIEW_H -#define DECOR_SETTINGS_VIEW_H +#ifndef LOOK_AND_FEEL_SETTINGS_VIEW_H +#define LOOK_AND_FEEL_SETTINGS_VIEW_H #include @@ -21,10 +22,10 @@ class BMenuField; class BPopUpMenu; -class DecorSettingsView : public BView { +class LookAndFeelSettingsView : public BView { public: - DecorSettingsView(const char* name); - virtual ~DecorSettingsView(); + LookAndFeelSettingsView(const char* name); + virtual ~LookAndFeelSettingsView(); virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); @@ -57,4 +58,4 @@ private: bool fSavedDoubleArrowsValue; }; -#endif // DECOR_SETTINGS_VIEW_H +#endif // LOOK_AND_FEEL_SETTINGS_VIEW_H From b5f22a7f7832b533fcb0370361e93e6469b69c61 Mon Sep 17 00:00:00 2001 From: Philippe Saint-Pierre Date: Sun, 2 Sep 2012 16:05:35 -0400 Subject: [PATCH 05/21] MediaPlayer: Deletion of playlist entries Several scenarios of misbehaviour found and fixed, examples : * Deleting an item sitting before the currently playing item had the effect of starting the playback of the item before the delete item. (now it just updates the indexes - setting it to fCurrentIndex - 1 - without altering playback). * Deleting the last item of the list had for effect of starting the playback of the entry newingly being the last entry, regardless if the last entry was the active one or not. Should fix #6689. --- src/apps/mediaplayer/playlist/Playlist.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/apps/mediaplayer/playlist/Playlist.cpp b/src/apps/mediaplayer/playlist/Playlist.cpp index 9707423574..35fabad63d 100644 --- a/src/apps/mediaplayer/playlist/Playlist.cpp +++ b/src/apps/mediaplayer/playlist/Playlist.cpp @@ -325,10 +325,15 @@ Playlist::RemoveItem(int32 index, bool careAboutCurrentIndex) _NotifyItemRemoved(index); if (careAboutCurrentIndex) { - if (index >= CountItems()) - SetCurrentItemIndex(CountItems() - 1); - else if (index <= fCurrentIndex) - SetCurrentItemIndex(index - 1); + // fCurrentIndex isn't in sync yet, so might be one too large (if the + // removed item was above the currently playing item). + if (index < fCurrentIndex) + SetCurrentItemIndex(fCurrentIndex - 1, false); + else if (index == fCurrentIndex) { + if (fCurrentIndex == CountItems()) + fCurrentIndex--; + SetCurrentItemIndex(fCurrentIndex, true); + } } return item; From cd9b8bf005f2be662a2b8da42a15733066e3333e Mon Sep 17 00:00:00 2001 From: Matt Madia Date: Sun, 2 Sep 2012 17:27:49 +0000 Subject: [PATCH 06/21] FIXED the urls of several optional packages. --- build/jam/OptionalPackages | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index db27c3b918..c02418fb92 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -1174,12 +1174,12 @@ if [ IsOptionalHaikuImagePackageAdded LibEvent ] { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage libevent-2.0.10-r1a4-x86-gcc4-2012-08-30.zip - : $(baseURL)/lib/libevent-2.0.10-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/libevent-2.0.10-r1a4-x86-gcc4-2012-08-30.zip : : true ; } else { InstallOptionalHaikuImagePackage libevent-2.0.10-r1a4-x86-gcc2-2012-08-28.zip - : $(baseURL)/lib/libevent-2.0.10-r1a4-x86-gcc2-2012-08-28.zip + : $(baseURL)/libevent-2.0.10-r1a4-x86-gcc2-2012-08-28.zip : : true ; } } @@ -1225,11 +1225,11 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] { } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/lib/libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip ; + : $(baseURL)/libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip ; } else { InstallOptionalHaikuImagePackage libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip - : $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; + : $(baseURL)/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; } } From 33570266f1d135f2450e4fdb22e916879485b65e Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 2 Sep 2012 19:41:36 -0400 Subject: [PATCH 07/21] Get all parameters from a notification message. Fixes #8916. Thanks Prodito for the patch. --- src/kits/app/Notification.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/kits/app/Notification.cpp b/src/kits/app/Notification.cpp index cc0fc31b29..9f9687c2a8 100644 --- a/src/kits/app/Notification.cpp +++ b/src/kits/app/Notification.cpp @@ -75,6 +75,16 @@ BNotification::BNotification(BMessage* archive) if (archive->FindRef("_onClickFile", &onClickFile) == B_OK) SetOnClickFile(&onClickFile); + entry_ref onClickRef; + int32 index = 0; + while (archive->FindRef("_onClickRef", index++, &onClickRef) == B_OK) + AddOnClickRef(&onClickRef); + + BString onClickArgv; + index = 0; + while (archive->FindString("_onClickArgv", index++, &onClickArgv) == B_OK) + AddOnClickArg(onClickArgv); + status_t ret = B_OK; BMessage icon; if ((ret = archive->FindMessage("_icon", &icon)) == B_OK) { @@ -131,7 +141,7 @@ BNotification::Instantiate(BMessage* archive) /*! \brief Archives the BNotification in the BMessages @archive. \sa BArchivable::Archive(), Instantiate() static function. - \return + \return - \c B_OK: Everything went fine. - \c Other errors: Archiving has failed. */ From efe79d9878b6be801a18dc206d6f2f83f67e36ff Mon Sep 17 00:00:00 2001 From: Matt Madia Date: Mon, 3 Sep 2012 10:46:59 +0000 Subject: [PATCH 08/21] Updated graphics for r1a4. +alpha --- data/artwork/GET HAIKU - download box 2 | Bin 1951529 -> 2894403 bytes .../HAIKU logo - black on white - installer | Bin 199646 -> 231320 bytes ...AIKU logo - black on white - installer.png | Bin 19273 -> 19204 bytes data/artwork/alpha-numbers-stamp | Bin 47778 -> 47778 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/artwork/GET HAIKU - download box 2 b/data/artwork/GET HAIKU - download box 2 index b1f79ba1104220ce632f1168674b2a2cbc6b6ddb..97d7fcc26f74262c32464ef861b9a225fb035aa9 100644 GIT binary patch delta 26706 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 IF9qfQ0DO*;WdHyG diff --git a/data/artwork/HAIKU logo - black on white - installer.png b/data/artwork/HAIKU logo - black on white - installer.png index 83fadde56a4c3e0bf248a0d901764d111a55a070..b33399cf412abe7bc7b6c6f3bb1b548dff12c24f 100644 GIT binary patch literal 19204 zcmXt=Wl&sQvxP|@xI=;jX9y779fG^N6LfHQOK^AB;O_43?(XjH_MP`u-9J+^RaDK{ zz4z{3-Rl{GLpz-vU6>Q4v=A_#FIekGT*vo==` zeC4-~kF>q=rUzs5>0I&V&)Rg;7f=;J@&Df7azAfo;_L@=5rYKgyRSKc7;< zUqV7?6#o+Nv*OBX%7Bx)H9@<)f^f=Y)mhPzA5xej#2&K zrMmE{%`i}9qB$ML4sZU6yX2{Y>(-8aBuSaO&Zw;@=Gwo5)Bn9iBU$vOr=}&wqH07N zvwGz#r$yB@p=9-7-8#Id@Kc<5Z6@);ZO+rVGm8%urU-txaLXW8pI1j8^-0hWZRUt` zLqBVZVYH-nn4{DJm|Kw8l>BmOK+Pj4aLoi{$hI6aRPLii#g*t_AZ=GPsM4>Mc~|pz zE}B!?QUcGRLSeiy>=r37WYx-b=AxH7Enojkp^_d^n?~vy;4u@9#fyNPHGwW7c!TZq z2991UUtdHJ&eF}6x?@OjRHrCfN~gMqvEmk)z+7p!2&_76Ox9CfU-Jit=D9BFXu>Xq z=kDysSgAV8Vb*x~&l(XM$vV>}_A5)7TD9U~KFu3d(W}%KX&X66Gpt)@5gwL4j3u6m zNI2wN#gBez*n`Q_^cp3tEr6>>H_<5_|>r*blUk@E8 zqfoWd58t%Umw?ZKm0goimzU=+N!J$V!kuxCGmSrz;GAVNp5T1U6gJl~p~TiV&NuTW za-&{Tw^Mbj`*d5TpJH20OjkX^7Art#Lyaqxf793aLlcK_jZbyj?Y!y0<+N(R<>T$4 zCckbZXK^C>Y*nrOMGBuLk$c*4(Ibd6(Vo09);bMigZzyblCJGEwkq6SJsHT`+K{$y9LP0NkNnkLQ=;Of%0L^S$CPa?*}J#hnKS0`_gjJ-6PWkx1hB(ohZH|=GU)ZZ}0D~w?pX^G&F`2 z+i&wq_kMyZ9-#3IU7%CXtxMGo# zHCHL9hrR4&x3A<87U8aJY)njezuz#BaZ1m~DYNW6O`SV0T~9bsYd_7GYfDmp+ZiN{ z-1W!O*}NJcG`TyTOLLeO_Y)wVFVjq{v*3u;CPw1WPSH9e>k}z=#d4!&$&^Yb#@eoG zQJG;@DbwgHsc27ecvbCq{>tTaI;b%&0LO~uE|tG=6tR>?dAoL?c+eNXGV%WIMccHC ze%|)5UV9WO?(j6f1ir5jnBJXsdcUjiw%raUpI%!VTWzxEc)Oh`s;D?PYuGTp+V10i zShZKbp=~xygnLrC6leR;CFNa$Yh@%<~k5kmY-GkPouT&1J~|j+=o>P%&@eDH`?69LaK-{%jpa;^^Go9`uD)zNATRM z9iN=okJ~GOS_Jx*u0)9UXod8L?pn1)Js-CMXLMF(XL}LoTB8&XX#F6n*9xLGnlh+z zwfv(z%N6v^n)T=h>AasL&s%TCYZvk)9Q?Vh>z}`uJkvm5yYjKHusAq5ecrTTS8KE( zrfa)J@6w9`79IzQ%uZzP^(A^uj4a?Ph8}*%y*6ki!h#VkHs91@wK00dx`SuO)4J_W z1z5d(3@(B^Ib$A8z^*2Boki}$n6flbV}Nh2@VcWqZ`_HfeQ-Z6DiA4c{^mO~pa zy2;j>HyLN@#Mc^eo%tJC?kl1B>W-)V)K(z4)Ec!EMN&uiXT!ROHHJOl))x;xk>u%; z;t-1bkM{x{D%j7yzP?(nd+|7Y0xj@UOWI5^N3HNUq?%$IpD$nD((K1MxUUCEm6Vj^ z6cq&(6)}K75Pm!kJbJX3x*p(}Bo=jHx{aSXt?VnGx)dnw##qx{@jdkx7{!)Xv_wCaZdme&P8gGR#SG;MH99q$qbBft`Q5U zdE@QedDUS?+H~ft?;*T!)pLBlDeAGnDIr0jRa(OcRjeA`rA>CLz%&*;j^b!*i{zD;pWa%k^&3%UnmY#X&a&hzRfTMnFnHt8^Te_uAQU?J;{c5vf5 zHM?lXR%p;JV7(X2LS4{y#%Ei1F<3syblDEJjXk{P&#wpbHk|S+u?iH9+&|B{V@m#< zIB;plzWcW=kk>qQD79pP5-sLu!){>}E!Ml5Jw;Ka7UseokxlUfZh4Jw!DPsZ`&;PM z0N?u*>lkq$UN>+|5j%mGQQ(7q>UpwB#!yP;+LJ(gbCbuNJwJoek<|WQkDG8I5^Bx* zu?faK(P^7# z)fgkm^4!IpvHZ6+w227PGY2LwT_|39sptLQt#fm7NDaJ_2dP$I^tq!)2FP^hC>;?3 zdw>TVP2-wG_I_E}U-KEwG+o{{V>cl&@A?&Rr$m)hiEd`_@xY-afh1S`H@-*XF^Bkd^6H@t! z=R>2%Jd_A=J9bT|P{bA2d&S5l#lwOqJcg;p^QG!|uDj9V0}C;V(8*e^NtD=Jy=t2&u`ZcxiZ&3M-ayQR#MM;^AAQB_APb!`n8?oB!#?8s; z6od(XbqrG>XD`I@mq+qa#%`NBIvUi53-w9plaTxd6u%&5mgZ{b!0}8gUb}zbviBgB z^aOf@pFAcRohf-NW{lhUP9)zxaPR8dCWNuHg-lINr>m~7?Pyys1y*j^HawW#-rh_{ zqKfc#;JA*6H9fH;s~LmNn@`FmQ}+Qiz$RL3_*0bgG$eErbeA_>RCrC&dmm}x4`Z&e zvpnmbH$u8ljfs&{+#jJlFvaY7OzOKUkcBGEmEv-GC;IdrYhvGZV!|-V_siRx@4>qo z@6+uV5u5!?%stsq)a9*b;QkKPv^7WVeQ1ymd+|gfCr-iF0YdNAvnvc4_OAQK7HCOzhpEbL-?UZHYR+$nHes#SBac|{wmC8zJ<^^kY1oW(W$34&aHTG;IM zHa(a2abSVk1bd2Oo#e`?-QVKkA47L2w>R^m*0ygQpj?mMf2E*52l+ z`yo{2|LW`K@3jO4A^BdGCM+gsblX>*G*0!=#2L=jN2@VOl(8+35;U#EH9!6Z-Y%l8 zl@oo%YC*h8@fTZbAh~BTA!~N1Z?Q1KEpb~Z8=?h{0CM2b;pyg4L&m;Ofp=%##YYm> zb4K4LA^&8<{=6}+=66SZ$-;t|Bmpq`U`zn@CtDB(v%Ah$RkH+`ALPorhk z5xT%E&-$wm^P1LUh0VM`S};{s?fLbgF66L}u4PUaz|#SbY`xq(zW=Y1ler(VCEc)~ z_$N@2vDUr+Uhq6*jqR{1tn#B#DByx#4UKsoRF$_Zt@h(pb++nPtf-O> zt6BWIy7;ZypNwxB>g4~^_orO;&>ALOW+q%$V4&NxvVwl14Cw}B+91OKUaW()!OKnN zN9%}lzc$)PBHckwB(DS~E5RLm3^zi39z01j&qQC-k%*s-w?;P;Z~KuRS4=NCnAJxXY`O^V8VRe2nx|=V6PR4@4%NHf-rW(8 zRJ(?2x8ZasKG>&U&|)}=SFfzshvRE=1yR}V%dVja%e$PnnLND>3^94+E+53SmQrS@ zl!VLR8RyKvSp`9{G&cybpAA5Aug&xnbRqcas17gp(WzB<^w5bJ)3L@A+`%^*;m`r5AV=ijvxuT z>e`R7XaUNshkMwcm89iB(%H)S2iGLIZX+PP$C_q&5eyUK57DPnSKItMk0Ir?$kEbY zjk@mw(H>ODmZ)~FT&4#)L)O>V0mYlp*UWcrSOB&K@e_QlzL9m7cXr@d=fpZUBd=B! zn1gyZc~@3{D*N)61HV0z@^5z(~Zr_`ss zyICC4Y#8T0Ub)CVnh}})$@y9Se%w)Md^X@Y3qbmw#ApPcO_36jFdHEkRy1`c<^`OPsFu@`5j*;{!;k8kl?Hw4q4JInLh+bsoy>^c(yrdTi+2LigF2C|;DnF3zsUvY zcMHie+Ra}(np;|;jh0GLN_^?G@xR8N+THi_E_h(wNMgzB#;nY4HvKc>hf~Cg$4J`a zcMu2T7N)ER3NynZI5<1sybgS13$6rM+zRsx8j7XVxM_b01(`@VvVzD%z6JXEp9;R@;P%v^rIYUyD*dC3cB%5ZvLe*>Dkt3+!b^ICNq!s z4ISYiabxW8JB0M}rqUCoQ{>8GwWc`N2LaXiCxHqKiMp$UsKw;a?^(r_8N8QuZ*0A&m{?@ zJZ>uPljuR)VD?r$0fB~oafN=hl1V``E)b_?ZCdr}nWVW#9%Gpe-|1AaQVtvDcHmx}<@saCvV+ z$Wo1o{YBdYqxCxX{&@Px{#dH(=3f|#nfKcQzP$E!-m}85gW-$)p|6Mnp?&)M#)x&y z#*e{$`h!yxWL4M^rZYB8X|P*cGvUDk-^pmOwocs>6V$N`M`ws+cXrH(?tGbX9b;;6 zUleW(TGw64yB>eUHU247uBq^byBS6{7Fp7gNaJNHyKA0(TbD!ecDu0B0egxiZZpfV zd?GF4cYqKTmN99&MYg;aX{%Jr;}{cg_!c})#O1q)2uH_n<^(dqD=~lNeObU4F)|{{ z%gb}&CPRTC{#_&MC6T7+HVCIja&;atvBz9&5IyZ2jp|NCK+? zKSlOzE8v4cJs$L1A>Dsh!O{VG$p2-V`{RZ7ym2=(E+e5;&E`I$O zAwY2>CF+FaG+;eHqprJ8+;je6%XIN6PGQWi;1jx-5f`x!;LN8$4Jm%zM)Ob2kowVz z&*cPYvH+!RO!un0o~Y-)gZrI>UtGigMF|B{wjW7dNgqs7lA}h@7`bm4^PW9NJ#gvl zXO1mo75^*#90KpNpFPcx3U9&_v%l+`kr)JS3;Ik153Ds#mFWY-s6>=Ud-vw2WFlzu zd_g=>OyNVJE+CD*uHyUXREl)fAh~>Gu3XgGj-EMT5)nn;Ed~Eq+#!p9H}O5dVDG_! zB({p2gDbmdzvENazBjKQxsM{=zxN^pFz;QYUx5^xGF(m%R_J9vWYJIgtmCOt^_s@F z`xW(8m#VX;I`f5Uha-gqI$arcb#<8sseuB z9sX2ixU8NZDsWND%Rw?fr&6=@79InL;43#AqO&eP;a|C|D(M=jv%Ul=yGb5^r~;b# zvbXeUmwHM=Tt}%hN3cvhV++yqOe$l?^|&k{X=+hw8BxzjvA^pPO%JS-iC#@@Qu)nU zLGjlVmIuQ~tS*!abm0$u#EghIh>+#gvrJuYNI0O2>6S+a0k8ZY?%?hL5Z8jmNtah?aQl@paxwXO@V2d?tw zv?)8opt#K9eJL4Ep&35h#r$J0D6rXVW_Rd+51Bi!PjB*8vN z6GvROzdud1K7330X|o~BSi&dYw1bm=i&)Kc+Fg|Ky99qi!l!6L8|+Sfyr@>Nn>(y3 z7+(>_a)VPjHpb|lVgY~_R)GxHtPFlaVJjSQK+tn%@}3X-yN!G zeDBaqlJ`4xE$)^h7gsI;OJ#Ol^b4NMVLNjJ@>;wC?lir7Ygi1;v~5s{5vMVXzZ(rm z;x84*nx&@GjW&vSM|PFnCp~&mV%p19H22O0TvWpRu)|J}{*(E@42Q|9E5G;mT=O-2{9E&E z+7dD&Vo)8Ix_e}Ww+?F$={UED(NHvQLq$-IDejdE_fV?=88=n3`i8by?w_hmYo5qu zA&3BYu#0Y(&sgb-?+2RqNDh}(mb4brDd#84#$z)Hr*8#9`f+}sWAsdrnP4t?UQ}i- zaqw?_7~Wn{?*6|Um)GMvzCG8pLXLG3b}8thtGB%6iPi$Au6Tj)5zdkP_TrpXyCg$K z)l+*CPWr>vpENH@<8NOf8@4|Tb)k(3IYuKCq>gB3JVT;IIekW0YKd9!x`CpnWz+Qq zh=@Pm$J0dpf{xt~88b7p&9pfASGDJ8K~$&+-e<6m$CdC+(v_5EgO$+*md>yDO~}~{ zg5GHb0WZGVx}%u%6{Ng8Ic5L()v(EF{q>#}dvg2~DXmvL+AZw>w*Fj!qyi)H?Lp72 zNl$#Jm5l6ySJ>_HYeRQd!I-qG43N0~OujTQowS+che;j?N3kU~v;3X#fcLxi0GQI_ zA;SO?DJBLTH(zS6R6TL}?dYG;uXf`IamV3J8|)5@RKXt8S7$Ig{!iM1E6u*6SsTtf z1DS(K>jHD|260^FK)s|zFfzRAlHa^EyN)~TgKxps`vMkfPoyt`jc;!IA5g`ohWGEX z31g|%)(!EX`q_=5fwBX|8(V_}G^|a(wN@Oe?oKFO@6{o8{VZv< zbRsUNL?@Twi;GLD|3ZKSVh~+4H5^dN-T6Xq`Ky_IqDKEFpi~L^RBwKjvV3AS(w@lb z@9yb$vRz$kqX92CQWFj_>Dl&}J1ftR`&p=m;pxc0RgLkMBy{%~+OEG`}KS5aUb^*UIo4OXKT8EklniWLx(wd#o= zBdU(S-keCDcB35c5{W%!wOSo?JxCw$`GUZ{9YiXJ>EGPUiOh3538J(C`LPwpX#Yg) zX_z@;?m<~^Z;1WMwdU^1$!M=8Mnl}zL=DwoAC6IEk6cZ?ZCBiUYn-oa%gGGN z3+N;_snI*g8%?WL)o5syZ}-qsX{W%@uwnEZ=#VZw{y-w<+UeMGRl)s#7N9CGCer_r zb>QBl)Ab(@Wj?wZr-0-bDN@rG6kfsyG6f2q;Q4Brkjs1?=|IS(oh#Oo7+vOrYjHlB zW)1WJ(*$bc0m0{v51#Xq3K68hz%~2zR@YVA0esVoJ77Y0lSB9xR9?PiUj7YoDPshe z3f!0W@j9^TT-R_yusp3WD;_)f>Se<|$xX24q^c8POza@4h%wy>(G`>Ib}KY(T*so0 zc-8~YTYECAqOfw~_|q-Za3w*u>8k%b2M{^1rKORc-k*kbw@^aYw$`@-zN-=4_ZT3W z1TLGOG^a=Eq`&nUCsq)vVG5^>XH8*gry6iS?chtjwFdf|#K{9K6@OUjI7}C#f3qGm zvboDEe5Cdz1K;Zw%F=Xu^czaDq!xS*Jbd+Wcf~wChn%RmGMr8YR^)*1zz&Yez0^cJ zLRd&-f^6Q!C6x_xx|r)u8+(rIio4RxDOK@cM?5LV&=VSO3tQ}YX!5gg-RlP06A4SX zb5!s6mg%&XYQqg(twaG@!ULm07Q~EgY>9)>H@b=Y=oDU6O4`&i+B?3^&={e3BDv2> zG`bO$#z@`sWnfXfznspr0`x&q)5Z`H9Q)Y+4NhpA4@p)S%e0zebU&UKv;cRn-qycJ zhQ{0#L3u6wWi*Y$UX2&)^VbA-H>dMl$(bl^T7jGWBZ8%&*scS}0>wx;b1+2c+W69v zc%_xD{`FMjY@#CkuWGl@J#Xk29inT={a)s8v*6b1cRiH~9cjQ0wkB}Kn@dl}1AO4$ z!A8{KuDFVs9IEc8g%e5^3pO)L{q^lQ`X{NxIv!857RS$jj4w2yBtLvXMS|mSq)}>q zN0|sU2UwC%L$Y4oz)_j_NV^i$JN)u}hZi3i2JpqxWY#ni^abbs6_^pwtW#Z`bNh>H zS15dY;vz{Og0p;nFSdl4+AHeX^H_KvTjZc%Jgp#n{gz6~;<5Bl5$2cVmagjw`*9x_ zbovSnc_$gP;7y=yBEt$gm|>Vf(=j8hD_=}F22nCcI;0ECFzf$HCffYsHXq2C z2+APH0R=2AQE3k(uQOpG2If#fNhA8!}+ zu3ENzU!{^6{jI%jQpGcb4DgDxDGDJWgSv>aXM(v+(PbhB5F5m>@S}<%Iq;C%@5-#N z2t${fI|nu8QKA0E^ja(;2l|Q$`kqI}8!;1S32@*w`yD)-_@TIPaUCgOy8Zm7Fx3Vj zK9fVK^b^g0{B}D1&ShE<@hwp(JlVaq%U1Wi;N{M4{q$s~j8f4C7@j~pi^T&b%YQAu zko>HH8qJxN6j_Uh($^Nc(yu@pyZ>wV@b$$Hqj7JIpd1YT zg$&KnA(5M%t*_QoDM9d5sQXlC((f&}#$*vQFY_I}_;J>jVuEe1>bl+J@%p`TLn%oE zF5U}#?6*z=prlMmH zBKx1aXf#nMZk4P|u1(1Tmw#!e}r!IVYQ2(3V%C>n-?s4vCoB>Rz)c{^Ljh*HhBKfYf}U zyiVGAoZ~=FU47^PP1NC8|4GZMXx?j?HY$-vrm(tw}<$Fy5yVqe_Yy%>0)LK*?b2}#R ze27m^Vdde|p;M->^(I{-p7i}R{$i>u_4-P<=FaQkv&wts0ob_kt(D3ATLCkx9rtCZ z?yC=tX8q*cTs(869%r}Yf=a((SGt8z(lULxZAwVC&GS)#{eJ@IcMr5mhBt2}kRU5q zS+0Q5`yc1^tt;_Z7snpxpFe*#K5mBwmLamlRQh|AGvtZ|_C#YMn)6QEG(x+N?KT{fCz2j?L|X~K$X$m@SS?E?8gzIiOK4+v`d zSXlUU1(ykAnD#Dh=TT6k}awQdyB+ zy`CpHU_`~m*Dv}8>EbU-7ehP|*;eX_UE0LHv!XUof3~cv!r93`IX(tB3@-N5%AQdN zl~;burI(hCKJU{i@Bo42ZIS`1xtWcF(>A^SDnwQrzU__(HwtgiNz=jM%b9iXM4IV% zYU0t7Le)WryB%O*+irM1*oJ}71XaI*ew|*3h6~vsBN8dAV$e{{@Kj9|mbXj9Sk+)a z)mT7~(a;!+$yo1o#oc;h$?kq)6+WggwKQ5+nl7o*6ZCuDDsP7-@H(@9-3suvfu_qU zR`^E;oB6S3h^%P`Ie=#$w$y+r%#g_w>t`bB;u@=6j-HlYMw>dd#BLmx%JdExu*J$H zk9W&;9@g(3I;N&ucIx@_d)v2$t2bh=a{Y8Xg$yR4KNqnyXGjgXp}s^0GL zRB6uE(6!wcy5xS*77Yq+@Fc&U6x8+;;7ZnF>`dGrGx$C9*TcCF-YQAG-zZh1vGc%S z2jV|SWdEm$3d>q?{r4EvpG!1ajZsbZ2gsVLpEj3FGWQB|A|z6-j5_&zFJH|m%- zEk`ap-sl9F%89vm*p-xJ7*Te!=W#8!F!+B#VDkSNmZ*$MpPcpEf5>rk_-BMY9EX&A z%5kEstc#d}Y1xtYrK}kKsRsootPj;_DUA|D5J?K_V~UVql>GLvkts^(83(XrptTPq zbz^UNAp$%hk9+mQv%VHv(zlIwR-i}6s;WY3szU2hGc4*LEG|ZUdAVA1!00ls5Waqy zS*D)3W0IbEoNs9F^L$tv@Q`N~EyArjyF%g1H96BL&X*TGbmi3*pG11HF=*U!lB=$CMV@=yhtg@5yfp)0)qy2x=!vC6coC-E?Q&n3I5Ys zMWv;=t*vPQBNzLXN`>C>Sn2#}{h{$BUiI4N=HY>W@1Z8MU~Uqy1Hs+X2uRU_ZA~J0HrZCJ8LLoYZOL31r?k@sjGM36Brbq zAuzPh1Z*u=?ca#s2p_xE%b16`3xe5aVOA0Liv5i|O>emuLfg`TGbxq(`}8^kXb zLLc*qgP_2EiE-WYL7PN}PJ=rms?m=)+rBAg`z$RyywKD0$Cmf<>X;GA-Q{e}$Nsp< z4x*p(sJf#foQ&AgsKIBlY5PHa39W1h+AX*rl-}ZInj)(Ob5c-43eL?@aSWPl->z#; z)GLx1jY67I-T*_`H=Dv@xiWar((Rl<_$NY&c{p`U=Eqs>9O z^RkXR(3aQ^5(gsIut~)9@~KwrCkEn+IMNTUS78TMXbyz#?UkONLvI3j!Om{1?EXT> zyJNL|FQaF~)#yAKcK91`9BctnrpjO-;`g2#knA}CD>XLY5?gchsKD~vHO?|K-1~(i zu1rVT=Ds3mo*-)eQ(SPE&tZC0FPDt};uOQ_T3&#~;!<6hZPL*=WG&=bibxsJW?|73 z85JZg*5h0AjovgU_ulDsf-iD%E)OG)+82~1oO7$~fOh;l(DpxsaB*?)dT)e736tSR z7~^#UCl_4D6?8^UMEBLYJK|}bYRs(=d#QC^-lo%zMwO3T_j^K#;AE6f_ZB_*?EE&m zFtf6>Z3z6Vvx7~iX@TukA68A`glOa?wlI&Y#o?L(XUZZSda3O1Y`{R}|I@e3fTJ9%O6@waLtUDG} z7Iu7)I3reQgh)<40bh*!w;f#4vfm5zLZ|;pr10--%R2VJauhW*%-+2K-jxHOojw6x zI?Cf4Ka6eCLg@7RIJ5eG^tsjgsx{yGN5_Z3%l(-YP=LGz#>CS}M;8(G#o`-1cnSF) zyHFZmuSWvoPh`EHF@UWm0Lb%C^vb_a=4Wj1&^{32tXt7Pp6SrfA9a1~Wkl`clQM*; z)bq_giEthM$kJadjf7~HC{mm6V`;w>Nk*(F`x-DXvpgRb$#3?u0yO@!v;T$|yG03) zAh#tYCWnVnG5+?MDSvHT1Cx=#Ca{wG^+3^fq-BT_3YQmc0kVZ7mDMtPzYi<0ju0)1 z&4TFkf%Kw{ZMxf^!v27S?RX{~;q46!+=Zo~lX-q;w&UF)aYv5Q2 zMo=Iegq$)6OVp3R`MkMUPUA_s(NkcQ>&rC}3KvS+E#}tSn)9f=LFBuR?%%tTV!;UU z`X$m)F42%MqK65+1!Pr(<(u~ESJh74!w|R-iQ?G`Dg3JeiT}qLrMd1WiYcpA~IC*zvTYk9gkAlFW8 z7U3_nK+(UkHkcM&*s{_LS?!2u|I#5qSww#_4YoO2cP}YEb|UE@1Zq!K8_!W|ttS_Q zWHQolymY_V?h6?C z*+9v^1bQbAq#`8Ekj2foX);iOf{A}Hg*WsW{LWTv+n;|9vvr6I3x8SAvPXK;eMUEW zdkcQ&-EBl;M!G9&0P{S9e`?d}BYYz&(`4ICJ35~qDCpOpTnTM7LeOxmQztA!<~gz5 z;qmYJy;uu3aXeRl@$KJg^+vwwY=y3@$D7-l!N}yG;M6qX{nIYSO-`-J@Z(klFZ;zj zJ&LXqgmT{Z*dQzSSCZrOhFmd^00)ztV~r$P%;qG}nr!H^J*KcT)X!j4T&`)!1#bkB z7LTE^^F=W@BWAf%MmV3&m5d?l0J|B&1o{XTd_Mj$D|pQNO^8s3?C zo!`jo=w!^=hJC2m)sTMU(hSHq9Zg{g1>o{!H{*)7dyR3<6KVkS9g_it=qm^+V){3> zgxxnK%C+(OVQUC$O$lN{@zdw6N>$mdgyToT437}UpR!ue!^tdFf6>s0aylidbY+U@ z7uk*E6Dch7H=Tjiw*3+j0)KdvwVQ16uS9aghre4g0hMzvE|(L6=e1YKchxH0g`aIP zF^ji3L@cmaeq5sah=TK zK*rz(8w6{_#C;1`S{9)`n)mcSc9@XMzl~p*mJNPrrq{LG{b0#x**_QmBQz^O*{5O@g&&cLo$_r2;)_-5rIP zSh`uYwDWG+yxG!n=7%EuY?@4A@$`XyNvTi?P(f<)fB4;r=elAK z$g?AdV_BAaFjOb6^^=x4Jz?rmjQiD@#sD=rMEl!3?&C?8=i}HcO@`djBwhI7yS3c& ztRe-XtH9Sy4CTF$dRCP*XM#vt?U0JqpC-T2@&7DN>j!k?lGMqnE2|l7cCZ@3&(0A; zeJ-pqM$>7Ca8bp=tz_d|I-9)x`eHa@yl?@n6z^?{yP_QLn7}xe#NazZ*O3Mgi~!U# zt}-C*AjBu?cEgLdgW`tn6$OaeV1DOkw^jB_y)q}ASN#YVQO3M4^RuC*L1%}*g?2atJ~q2-E8q+e3-clV9` z{5+){TF?^cOmZj~PlCy9K%f>j=5V?n7G5PPW!n?Z8)LFYOY??#Up|YCjrEH21*R&O zDJ#c=nL~1l;3igr|Hx#@J`_KDh|SG47RZu64w3ijc&9_lLn#~86q960IvfR!ce0`1 z8E+Qwy-^mVJK-uTEALzMW>cV}ADhOFcNTfzY~%7se6buxDN3*!AzH&hVd2)5x9F{C z6YOvk(x_%S?kayZIR8f<@kxjTZRJGtdw>aBdRBv)TBRO;e=Fmj`75nBhE!@%TGPJK zozglm*A^$(ad>Emy^K>sWcenDA)L+NKOO(k`>`E5$mM+e)6~4g>uNMvXq?@*{oY9{ zLD(Aj?TM|9?U&Y@2rHBn4vexE&BU1J=gzJFTD|h}9}0?)Au*U9VIz6Y;D+xE3;_za zFOJtxwdysuS7o$Vg+C(%QT9*+eb=eVe`!_zx!fc=Cw!M9XQT4r_X9|vI*p>j$uoyy z&fH-)Zm|2=muOf4eO5HV6h{|s=2cg6o{@y9Dtqz}5Cb1xzAR?6$>^{0Qqbz0zYV}4 zoyKbrLEPO1jg9rB@f@v}OdXM1F48-Y$gejJ2sY*i*cg#rkw)fz!0`PmE(-Pp0Ii0F zGA7>$raGET3Onk{-_l4x4@(Phqufj;T zQ|OMmhh~cv=6!ikl$CEXM$*vy9=%j!s@a-U4vCVx8_wo%bTT6wI9v%Z2`v{QIvp8{ zjtj{-B!JU$_3V~Lr7EDEejd#HtpfNndGsciWm5j6DQ%rP^; zxREEvrlv(!-ipdRhK70&9=xp&8xx(au0hpOt?dM&$9N7Q*#&23Wa~4&S}G!|*p?8_ zZ@)SkHc+a=X4lFp!c1**5s{HeEEYR+z27k=aw17)7kXMG(f(q#(a;D>;@f7e%c6dDZ!u!yAr5|QX0}d8 zc<4`y;~~-_JHH#KpmO-T{b#-N-M=(g=G@k=+$PmP6}bZK)N!nA^;`YQ;`^C36P2(( z*7HkN2O%Xo@%v$p&Hd6J8KiKyRT_z38EKykzIUPvY?>(oyZ^=@CVP=jNjsgh%xI}~R zicv(iWi^T@uHreL)bbo62LummXXJ9^S5riSL0e8OSD+u*l>#%jc{B&3$%3!{d{K>X zXs|(7`jZ00U@IAoSbaAlz48yU-aw5p91#vg@rla}4ao7k4@Tc*X6RXHW?{ilH%8$zCK_QPQ@})g<-;vzzZ%ja2Zum^HuNg5#G_IAw zmB`#QdnPtqVT!v>p79G7+EJ8W^Sb~^qY^5V+54+WN&>CXrT06`g|;(NN7p7%xk(0b zwIN(}R=#X1v|>R@JsZ?-F`ttQQ8P1=a*AgPm>y<&%M>qd?ey||H}0U|uV*aMq`a<- zG6uY?nX-wfNG$R(oqOF)UOZD@5P}xwkIl-nla4F+ouGW5TdmyB{BdCq7jU!4v)P&T z*3U#vPnpwMw`{OCVr74z;p<6+PB%LWp=0RKo1!ZSWJ?H`m%O)@l~Fi4st1M#XM-bL z7}n#7&j9AKg2`v2hlQot&rHhJ$O9xHImP=t2;!F2S5WYcD}7)T8>Y9%7BV?4fUaMW zZn7ei6_5GlkPXZDyDTk<5h0K$MX=*~D?~oBMslIa$@!}jXhBo=7`z)DimQ3prmRdh zJLm6xW6aba7R756&uWP~JG;5q{MB0)#TVh59#{6<$sF8{FA6I935OUG5~nH7G4V>Hh{nvhtQ$Hm@ zL9=9o4t+|L9=oRi^9u=D?z{@Kv|w@J}W0NM%@2|le`sB{OvTvQAI zI217ptANj`RxJ4m#-~I7*^6{oi22W-dizB{@K3L~M7e>D`#G~c#39fPS8J!X{{zNrw|v}Q$8SNCk+ zqSXv__HZ(RiHKfS^xNiGNuS9CeZyH-i*})sIC#Fbte)E-F7#?c!VP)~r@npG9Va(| z6LH$AR_?eaFT1cN!;qBQoWEZqd`#6JA0^DcmJ5BFX`_N4K7dnIr#u!fiOE>(?ye^r zrq*=ELAZUq1=MKgmR^ z2Ay)t6}ca>BGODf^#5YVc87>Uf~F|+mE+6n{RISzi}>|Y0%~nZ8Ken67tGF+K>ND= zsRAK|=hEkk9iNN9LPaTk-5;MjDQsY)luNp{(>^;p;1JddN0z_&pG4QqFHWCteZmy7*5Ka9@h*h9{la@=HPODA@2Wf<|KXeS< zw|RBv(q3cK^eP-9X&T*Qy9}pXlXx&w^m?IR2KJW;vNadI*6a0nr6-5}H7O&;g98L8 zSfEg!A7soZ%QR?`2dE)3BRQ^fw;~}mOEiJewqGtzju$sKQKNy0s5{fOk_Rs!;?mi> ze=AC30u{5kSZ-xmPEtbdCzWGeaglg~>Dg)#hHAGf5i3g;z6+6=#6PR)n}@rsK7Ar_ z*zBN|QYpIF{G%t$4Q1|#$rVXzY(LzTra=?|Zg+bOyY0~7%)-7t(x zGUFC`On)(uzJ$I?9b>#2Vs*95p&4o#zmiIKjjQP37YGRWn*aVUfP{k+0;l@Wh=kix z5Ut}zXCWfi2+NrFcM$X{2KW9ZZHu-M3^M&(>|nVU_2D4D86?!^6+-v!!!ICzj|v?u$4$M z=hwVeEfgk(@w$ed0m2g<^+*`o6O}jD;SqThZq%$CQV!aQKMcPG1q9?JB%{NUewnBE zi7HuIlb_pV0VCoG3l}4PaxNfi*j=0oMHvB-aPlV=8scXfy1@J&>62+Ps8G3nZpA7} zhsWh;7+`kOG#Lt-ImkGBJjjetTytkF%)Z~Y=`ol7#H{6FKG>+^@YhWb{u24r}f0dZ^4NpXitRe5iZxjhG-e z>%4X*`Q`bZAiElCO`FU8?CzCL!b>fOmE=-Y*Hj0EUH;ZBmH6zoRE$bcv0XX?Bk6P_ z>HND3;f|JSI~wo6>G2R*w1}>S3yJR7fxEF0@AJ>2`29%V{3ZaZ;pHqV(>rg%b8Adk znM6RwcvfQ;loUIbymKe2C?Zr;4A}^+aJe85K#W9?0ny<=nKli_M<3}bZYtUJ^`W}m zI1<6UN+6&Uo#FUURb5T@di7Bp!Jr<1Y;~l-kZSI5=&^P^J*E^U9d{hD&Q2Wb*Xz$0 ziJ(y{&RF^KVbflN*8UrJ?+2yOQW|Q{DqO)hpe>^bOw!30B_()qDrGNPg z?)&f8$>iXJ;lKllb#)>jkeDVQ>(sv^2AqGae_tXc3M?Jt&6VuB60NGtsmm5{t)i zIGx0eQ5>o|H0nW;%osHxG_-o0>~z9+zC&c~TBKF0^ti%EM8CHvg3Elr zgMk60_3MY)kH@3m2ZqMA8fsrv71H+YNQuSOWAo?ZY-|K8*+ru|Imxna&nqj_$FlbJ z4pV!zx;nHy_JAXfKoA6Cv6!x&%ChM^&=YFC&s; zj}VKYL?Vcm2}Par=fnK@!xr}ugrV6uq=ODhT2Ln6cay6iQK%}LE$>uG&p2*p?=${e zNir8zHnps|I3|q!qIzQ|oD!dX7%@`e?rusRe;gqi)rqUWUnjG{LFnv+jT;%9J)5Z0 zssAo5O^$~XMSVd3fBr)#7{uXnA$YxL(WoAN(%(N6!v^}KnW9KM8bx-wP^L}OX4DYQGa$?xy5^A;B-EDRpb>Dpv zHg1Gq5Y6dCt*g^#H=Z&D!S7EZI>_BFW?jU+P~@XM6-$-Pl)rT{TjRV{wY8J@a>>t5 z+Dlg^7{$;N*tJx}-5I-ztnHmV*BlfT2^LDbg|1X$B_tV2E9W%s;h^>UczC$45El82xturP+M!p4vHt8 zG?Xvck82%gS)+QcZn6-I<^$`WVud79>$b`_YdOM3LCsx%!MIRaK^{hbZbnyoqH4oztcP5Z!C9 zA$7E(0%~iauTNKH`}%b6ZB>;{YA%;fo>p{qL0K8%wrzSjtE*Ax%`;ao(?0h(Vn6u_ z&Uy2aE|X;$IS?Rz$|-1pfUeT|{RrjdILpe?ty8{RAm4si%qRf6W7Ys<>-k(_J#)>^ z?)aE3l5Iu49^7JMS0vxDupt)9NuwwVQYd7GZUE*~=7tm{y#6|3IE?6Y5}z>xr!jyY zlBY(htVFhknC!I|LPv+L?hX#>gYd&)ea7Kn&>UzlR#hRCmg+;yEOt9{W|hsGbprGG z;PAsyCQU*)_E^LP3vk-ZhHOAyyttq`DJJr53;B}RXtn=b%WXIFN zqF?@oe=A0VD2gdb6)H#+@?4`OfsGc%h3qD<`@;At$7alc<;!)aKue467zhMl`gDEv z5+jd+sVghf9SP;-=2YsS2iKaT6B6-e`2Bi7Zh3jqs_v@Krw8E% z0z=-`@^UjQMD6Z|+FGQ<+-t?auKuAc)NC=D&$X-6*#y~5ATJ1lfWzS+zW3fl_un69 z>f+>vYUyww4-SG6mj>nnHc3S0@gTOfnU_mmFG_tq>b!YqB_(Kq0Gii};P)e!mL^SI z6fY^k+1))vbknBkHa=q>w)S?^$&-t|)aLGj@pKmMDgF9?D@KGyB^620OI z1h*T1$uh z$-AjI9FTBC07KKSyWJqmNueVD?HKK#`rVH8p6ieHO7hkW;ZS(Gn(*H&Wx8JPQ}19B=^fc$`>bE;H*iK%yuj)z%iZ4DonepXzD$ z?4gN74Y*wTOd*zGTN9YT1ldiXC@`jef}zP9VRR&jcs#DpoKampH0mK?A2b)gDJelR z7LJ*~1ehSZ35){LEecaC7}BCJX_D@Fbvku|Gp0uh1faAu$;&%|2~3dP1a>Fx%B_xNAy{lF~d z!wmO1cU=40`*#ReRhC6VCPIGm<_#K1PD=gFo410%?^cNKf!FA29fmh=DBggi#5FxL zPujkvl4!NPzLpj)q@5nXEIAT{F|nyJslGnHN6V1IlxFi3_kXv>7#WaPLq}2LxlzN4 zOh-XC_=%7b-fTSx)BW9B>>9=RG)0SbFRzNyb@Dkaja7{{<%xIWPu~s?4ofxmG6mem zTSS)mX{^#A?BO6qDq38ZM#KQsy4Fu|q?evLo%=#tH-EU5GLBuhzH3es9$B(stzDQJ zhF05dUHG-TWA>}pFv_R}bLmm;Cvt5G(xthog(TVpU_p_DAQ@D&{aJN-{^*+Hv-r__u!%gst1?jZsI~ zgdf-8<2NnJ0pvasecda%#N&SN$!G)_22yjI7?b(~xg-8~??K*G&yC1Gn2%InxwvA! zF2vx&l&;5(=#YJJ%&lXlY)2$OW2Xky#*SO;-jKyxbHSf|on!DVkA6mB(9h|iC-uRx zt8(w{Sq?rm2j->TFcvVQlz2D0G`Uuq$h&Oq{2FXvjts7@QBq2Tarb$)2e<#K-OXTy zMJ4XbY%!;yeA-;*&w2a#=Ocly+HL;8W#}ERJ6O|tWGO2#>TIADOi-^x|i+E;<4`Qv1F6uxru}> zc>FtHL|K~U1O*2e!_t}i>B^A4Lz}dY4#CdO&T-3G`|RxOwq{kUt$Pz{uj{}`^v z@}D1Lgg9*4B1~#)sdSRQmLDTLP%L=ikBrAMP8CAG@{#N&>)V6mulDm}ELuM$5M@l% z64FmaB@LTwr$j#5r}!0E+xq*9?qzwbrDA76z{REM7k{l{T5NYL1(PfN$bHV=R)78( zh#``?m*bx;OZF{@+h*QzlzjjbIrwvnyWM>Aj-q?8>$WS{xjqG#xGC9izk1f011-cL zY~WN+Y36gA7k5?brTp~8`rln%E?!>C3d>yhj7Z^6Gq0`#$J4lv$5-GhlO8>bf1}9p z7x7qi(^?0p-qP;Pc7h6|!aG;pkdigb z1XHOx$AM+1tW*y-{B)t?#cjzF{ZO?y#&1($ccr z`f2?!`oG*5ZVoJ8mIZU-+4(IvI5-2(jo`l*G5(4fRpPFF6eSa!GSdVp%=-Og-p5^( zp(GNfrl#ZO(Gg}k#e9NmbOmd{a!gIx4aCKFs~*NnHW}&Zo-Yr3E<`KAm|{>L%M*khG87v~GLCt9_!6x_#wyczC#fd<@^Y;rM$( zi6Fv zc(2}-!O2-C{>`RMi8)G_HQC11CeriG9T)w?t+z`yBwqWuAUF922c1`mGa6!GurN@|D@)d(wv@NA6O6T5{(_u-G^Xv1S zhMJnVp&_Y~k`jENxZiDUj+&lcdi`DRos{L|J1nF5~gu(C_%?oYLeVy&J z7SwcXYz*Y&nsy%L;1k&Ka#IBn=QUK!s?K@LI1o`kN;>@vc{P1lIa!)Jx>?dPIJ3geXT8XI;v*Mf};rNGAy1B0XYz`9{y^SxXB`CwV9 z!s0fLur-Hq$&N?3H(gRuvL}&?nPTX!E0gDaTs^>dJt=8-q%kOr>)f7dt~;Z)E^7Npe^-)7e+@B@1_;CS{)aHAEmRENtL1#{JFE<*e-v{V3MmZB(qPE$isHR&j*WAol3f07Z#bE!Rvqz zU_-Rk~bxydg?mz!qSRq42Fty6!P#t0{KP6#D9_&+T}_g-J_I`#~TB-WaPV_yN`U{J6S z7wZ5Vn8S=!+mA<8D&Awj#*f!rn3Bk4T{D;o%OZAc^?~p194|lgJ$yB>dXqn;;!M>d z(Kj!_o($Lhh^eJjzgklg*fiUuiuF>zV6+v*yY^ey<8p|0%T?f^3&Zb=_Y3glTr}Nr zs9u7KbwJ@QS+-Xte#%u1E30gdII3)6Ik{ofE+^y-XCXH`jNJ7dA(Ju}4r;coQW?wt zto}`8;Hs|}0gr%TE~@{_u!VP+6je~qSC>dBs$KjjneaZ7-Yq9wX?D;g%d5c|&GN-( zrv99lYuaV5r?U>xr;`TqH~(IMHyw7(Kt(ZUo;dZPbXYZ5du;keSnB%eO00cHh6<~) zX_u(7?RKedAv#Ga1-&o!Fn(!t{rlnH_uZY)x~)(39ea7*(M8F;5Es)cX?8ol($YLS z3txu!4lxNE*hCPbVo*SqEhVH z+V9r9g~i?`Jm7W_rziV6 zRww;YpVO39OMPzhk}u+O(jMe%qe8C=lf>u0%Q~ZqAj*3aU+j=qtoHF#rp<*1En9b# zZaG+&y9M(+Wy`q<6P~i_aiTm}x=;Gfh2G9H(H;%m9*q%sjnq}frTO4mz z#NtB0W|@k-pyUv=q*Pvrj21sKjRDL?XtuiRc6_`D zqQl)x!Z3!|gZN(z<D|QI@MHw;4?AKj%C~t(k-rIH}y1N6R zMUw5Ni-=FDO8_B*gzpZDa-0W9Jr;LeZef-h+Sx(Z(&1*R_n{qn>Gy6D5(WFWzrQw2u(Q!*5>UE6kceyl#dX4c<`K%J#OTO{t z92{GzEARzzPz(94=O#JVT??WYi;}2e%HF)F6KvIOhJB3wE&Nhn&A2H$p)z%w7DQdA!DgG~}bVMgCMc0L!7vZB_` z6t;UtxW(kdv~iX!QcyItxIvZvzjAm*{SwM@+9NcK9$7qWJA!xbE#3q?i$iUf63fwk>D`kbYFjj9bXu*qZ6e#8bOitF>$R)wEqe?Uwt`{O$yoxd;qh zv2Jc|pnDMItYKFF2Zd#qhE?~BlbXdos(6!a-O*-TDlJ0a14xFw{PN4M(CbC4RjJsB zNW)OiRS~&W-jBESW;D&N&=y-aqB8dRyV&On;GkWE&6#t1TJ@g7`U9*ci7R)Q3RLo4JeR)VD2?xw{P0PXX*HRSqDbV z%LudfXBoUp>l?AmyY~w-J&FVkaHhq}sGnMyjFRB?)f5sg$mXjxH@A3NpCkx1J{vvO zk$sU9R?^ZCwSNvPCJ}eGmV1X^GZT`KT}&B9RAoFP*_59hFB3PB?Ev}a#5p%N=P5)+ zf*uNTe^}9hav2&Lf{Q|)_hm(gn+ZGZTTc2xv{`0HD~(U5Eii|UXO7C_I2A*bE-SZ3 zlWp&-F3}uw)nu2tkv0NjfsDCv-*i3;t`)!S{ful zneG4j?d7S2{JhAnVY29kBG$y86Om~{*N|CslZ@kT5edg9d&!>|XASjEPxFtBrb!+ML%? zAZB`QhC}=R0;7(J5qYGeH$HMW^rK8gbZ~5W8Y(nO3p;J-c(&8Cl!9E+Qe9RUm)onv z53+8edrK0UNiWd-WAaZZS7>BYjcobbdP|ATU;Gp zY~#hD&#p&CXz1wZIBrjY&nq2|B4kUq1XTM+CLib(=d>na%c#U4%xub?@NP%ipi~Me zkm5@c4Pq3EU&%$rsI&x{%nMfMooEvA!O&WaCKccQDp zJ6?)viFGKt=%}a#Ck-%Lr}WZI?;9c9b$e8%dvW!&dA=4;A!R$e3cC-!zP^JswnnB4 z_WiH3&jt%EBSA%NSO9-(D`5CIL+X6W3o^}pM=I;v*#~~vhJOIIjBj#4?8I? z^SYL3S9AnR;m4<}t4$M}upjOB-T#(GW#O$fMN7FUO3);_W&rK}(jwz#4(_-uDdmjSe!w zpE(`Q9K`xO!0E5z?JbC5`?r?91oUoD+rhf~Wj7Yvx;Qsko@hKs{xA_|&pdKC{XPjN zqbJv4=~qGuOUz|aHreSL<+d{s9^1vvive;6Y|`yh?S_v6Wm%GHxFYv=WhC>h5j0v} z>CAz@CnC=`(J7J_H+i0%VxgkaJKVAx{`>Y4aN-hAzBstC^>kNlj#DhZZ`c~GDzoo^ z=2}icA+qEaQf68?n6%%H=y^RQ+XS>7fXL!6%#ph@{!Nt8$fCy+^?9c%mMUfo=0&tq z#ro?w%O=*lfd&>cL+SQ4%48|RMSR@sPIH7D#`C+qI9P|3>FX3L@x$fAjMZms3bv8J zS}6`1uI_iMtE)my?lh!JP|5&>#SM}Y_>|v02T~B-W5;mc(3f>^rb=waObtIg1_G)< zXTHC8=E%A~IiBI6wXLn9pfBSL@f1tN!=!g}tg#=_LPd(pA4A&98QA&p%lVLcqb2Ji z@0)dpYaR~DgmhJ8@qe*X4}U1^b`u-_sM7AyP!Tp~v5jr6 zQGh(v2=d0oDd)+Df@dHXD=rgGLo_J`N-jNUyyqz$e`zd-7;~=jqkKkGl79C6=`Xk% z&ptwIbwO>Pc=>@pV~JNN2|2sOS8wo%bJ-ud?YjF`dt`0VtZepLx|MdC6DjG6uUQNM zx5BOkQ2aUm6HlJxQpLHWNB#wV{2YZU1zW6(^LJkhW+Jjb+Q_AWJTmCb>3Gj+aoM`% z*{5*MEdU$1OiJ3gd-^v)y1&14g{|&@7{ndl3`D9>h~5hJ?!V9Kg%|rT z6wyWDOC>>cMKH!LiTp$!+jpU9p+vClM`15%Jd}rYHUfv$R>m5zF6bm z?2LWBOF6)Ec@s;Gq%;#tO+Ph$dndRS$W8Eh&u%xc$z{)Z!O(-<|HWr_EMoxp0W2JE z+nJZYd!j|v)$Awbc!SI&G$~wt0T3{RI_FRk6TXYfrXb;xTS*!b!`NOCcZm+>#53OR zvB>^J3m)M$x(q?ic)V21a?rQkwypK9-uY^D)SC6h2S?sOY}R_Qry=v<$8+k3RN3&_ zSw)*R7Pk)G*`D>aw!l68GwC@w%&hNmvlIf~tEAdT1P<($%nbADmUdAQf|Aaur#Kk9 zDR`U)k-m~B(C}}4?&&A5*6I17sjUsPS zI}6X<*t=Geg{LJx9(&ow+skW`%aN5(DT9J8>c2%8v1(fNa>R9UQ>pKZ#eS&@1A$pDC`CYpc)f6b9hNl;(51YP2%5kl- zFgz0tFB9kL8$+G=s>u3`eY5sqHknIRS3PP#Er2e}f=nqZqj5LNc$#cEtP~w91EPD! zoTMX-sRb{tK-t{Or!40f(D#8|v9vbUApT>wg!4u_--O|MU&Y>Qq!@)51!m{bO**`) zm5^b4>e_VB)mZ~Y#j9@(L%O^p&*6b;2v4vXl_29(c+abBu)5yM5mo{Jm14JxKo*G9 zseq8NMuE8uv&P28hO=YP;>%Wl6baC~+padx-KPJCg6|0U7MyN}vp>x&kM;dE;uOAn z@zg}hg(~?38g%bm_N7R@9mDs<%Mm!;~>NDrwM1AcLyf|6RoFb-M)?@3eXImB~WCT&ln?NaCUP|d+G zGhh4%YZ)RawPn+cjVz!hb(DOKHx*;D`gX9x6Jzx|UX7N#{Y0Vgzc-W zlqKW!_Vh1S!ss!hrd7tF+d-e@cIrj%GVW%kr{k&n3G&8u1+z;_!*W^!_tt0*X!ry{ zEW}eEq7vmj^L7^G-QA@u`SEW^hvxIEIzJTmp19MFJ(JRJMA5(slT#|IARk+zqtQ9J zy1k+(5QWY=;WFKqz~B+#t)HC#JgPB=&1ig>?oraCD1PMB++5!(r=@c{^+uhXWNB&5 zOF!{OnXxn`ynx5?mnsF8F1SB;l63G&N{IRmd5=Ej9h=BOff)UJR~wFet~Ds`>a`XV zy=Y$^NaLk8r`LpD`ZKQK|AR-Gw^eO&OJdouTWOpk(eJmQX_v*@WRI*yS`6D3Lx#GDXZ+x zuA=aJw6jP$9xC&=UYcLuxkbNL zTVaor_bkCS{B$s0bEcV7;C@4*mzUR(rjtu#T;+-3%+7bz=9d z?>q)>+%$rb8dU5G64-9xD%kau(+TQ>D$}vOY}L|tm+Tm|`^!daerArJVIjh~svu>J z&9IEMftzWxFyWX#s$Cc3>Rc%WI0`KB2A_xxE6r#je+hoyjO&3WcpW+0(Y)E%?*4pb zkgh)Vh)v^)RFe@1;EdkeB&{!tp$7fkrWO4rL~9`Sj~dErev-_=k%os&6slA#CK#ms252Q`+h@ErFxN5oQtY?tc7 z0q+T))yS5N*Qhtxvs%_|4yPxJ8H9b|Nuq`uM;%_G0dcB%dN=OBYgM}E#dN@oofV}a zfy)({#Ufpr5HhGzHyR?hq@$2leM8XtJXiv~VRltTsmO3F_s6@a#S81w5&$*5L8HF; z)|Nz5qu`u2t4&x5C3=EEH7{#5T>dMDy&!m5@8Lj;3FaGY#qBhx4;XTU)Fla>+q5y^ zHHg_CEAW8h@1Ol?3#$p9E7Mutb=nN4z3fI|{q1?N`O_SabG!FY%CWv4jd8#cCyWf^ z^kf-{_LNm!BXDy19W%3)me%Ct8>1?FW8_eza>J2%^AT4U#Q?L-wKk{s>(FHTZwJUd zPZpaCloAx4STE;XUeBTsUPr|AU5=b6YEZdxN4Cp2e<%>KBtG9R#{jM%yTh6g;3XR_ z`=vS%iY@%Qs7mZMU}kT_p^r;Jlb?KV&+~cUEy$)7+Bo zvg7G&b}(KTs}yZImWFqJ#pCA)e2&qFUe)sPXvt4WDKYGR^&ZEOt(XBK#r6V&;pvJ8t z0L90er+I26r77?4PipC=pi~sVw;E*{8un;&gx?dO>NJfis{3i&y^X6#M3^v@Kl+ak zfj1pR_upOO9OnxJg2WoLA#7af+}zwBaOiv#AY{dp(1+`xyadBfhyh>Xv%ePj9aSo4 z^I0;UkYgOy5|^9p{*FzTq-9SD{E!N@q>Jywua&8c7gRx#|NksNXqtB4!DMWr zz+YnJuN&hisodrZbyx4B9(UksFQn5ZyG;)SHU!8<70yFc?NDxI-3Tw zaW#;bNOKF5<3d&(-=U9G!43B;PMsI>X*Nr(BG1TkYqE7r);>FOe4xy|9#Kr*D zxX3jux@Ec%UeC+BV~5&3`~*DiXc~p&$)%;?&dxUu?GK+sZ@j)8Irwh@Q4|EYtKO$g z1IgFUCkfJOrdL3gqt<&slI}ZI&);tU#lT457NYRwX zq%>c8yYfSSi=&LrQW*q%i>I~yVdqPSAY69r4U(q*T&oAR+sK%ZbG3b~i`_q^k znjm?emcWnStz{+S??AbH4}@V?C*&muE=ij;utRnKw??tlrT_iF{`Cl5#$5Bp_SxjYVi$M?pOK+_`>Fk`iT?JXlrfUFX%B}M)aCXi_ zSAdDWzM^hMS5XZZD^`97c`eF$9-Q@&H>Iwc5TP7#85uQ@+sv2e0^v9>y5P_BabYFG`*4ArY9yedP$UCI~^H-VpS<1a2 zKC_mD-Btwy1+_6RDHam91YypFDkK>%5S%FkNFU?)ACN2fh`SLmAa$zM453}AEb{#2$;|`pY zjhUWX?fU{QHI)20KhmPl)dfr3z6NO0f^y9Zh;f0y5$;{UcLGcvhxzdFJvd+)8l$0p zmtL*id|H1M0fHq1AVh%f{fm_#N*Vq9dzlHE{yps$&)kP#DLAng9y8r!dS>Rr5QcJ^%enTjBj;r!(0tsm4Ed5^@0&9d#Diu~s0 z!mf${VREWWR+SK4#U`t~Lq>23sxr6!8W-efIg=$>$}a(kkKAk^DHJYzsVrhKG#xe>@qF#-`0OM11oHk#57bAIF;W~;zv@SU7RTBv#u@Mg&x_lw4e z+ultKI37784ubxWmnd9^7?u=h(HH4V7CnTq#Bs#P)wT+<-&iI_kT%wltw>-f>#1!D zA`LttO8@eHBVzZ1S0vEi4>iT8npZ2EL7)`lmok6&;dl|<>R-deT?fo`mrvF7#xio4 zE$nnINY|sYvb%4)nDsGRnq!-r9o^kFj*leOaT9a?QaeoOTd&LWQY>lVh0;;MNo+1R zOUNSVdGJbj3r;697voQq*1zP@{fq3Abc}}jqlh2=1Y+3EWO*Hy0KP%ZS^E<@$bPwD z%dqzSUOG45d}Z*wc37XP$9mRajd@Uv5O!0uK>nvh71=JwEEaeq@UPhhD zZE}Y$(KVuGcMCLI`#_sY-H3s$4H!YrwicGqsjijD2e>ZMppO-F)yTW5(vH7!CYGKW zJrrVZDjesu_S9*#DTlpufAoIgc(0YB3L>}~!w4f@UaGg5@i}Wdc2_IU|_L7iuSY?iDBU5Y)KyaZ;N&gMFj`sHgy}lmv$%G^uFW zcP1UT>VFRB6G{@`K1eB*!XjN>)-weQ&#zF5ae@oFb??17y7+rj)tK!S(Z2p1eP6D- zn^>WEXCeFvgnhL)u?L_wJC!Y`z!1{=4ZbX`zbZRWbV_LT;lbe``VBUmts5u6v?q_b0$jjR`^TG*4CoP!k3Bd_v5$gsd@D?VRmX>TO?B;!lk>+9;yld63BcwzuB$Z0ptk_v=frd_eQ=6yzki>#)v-W_+f zSE~X-5(Ut%$}H|kV~3?)6?ugwuP@($SbRNmz*=jj!n%d>TVcE*kgfuvgzVPvzwd$Q z0{@HX0Z+{KrhO9D38gqUiT!GvTO%^fz<(Ok!mvxo52Y;)&+C(v<1< zx1kiM71$=JD%zC>LqLX7K8g6~SlvetI;`^XPCig%C9^^P(-mQwTjUi_5kpXv-nmX||l;erf?nSvGJ`>g#<~ z>U~m(Um!`if>8{U1GL~r*g3QN;2zZwnZ_@6Bes&64<}p=vo9$c`=C$nKw88uZ7eAq zQR2sre4}{$sIq|@A`QxCL};OsEH^=v^y7z^7oI|ZI0M=WPhhMwyB8G>zLCSj^1~w| z{09XIKwd_h%40|5@p9*XHIQPw>oFl5YMcx{JuxTOg}8os^Bn*PFqCGBi;LMBfRDL! zw6?Ao^wD4z+%<*n zp)x@{$F7rmuz_iPc;RvlTF?}Ax90LM@yU=!qL_gupgFXw5 zViaE>!T^K>wzB$Nu`ry(2rL1J@T_MEVu0A_LB8GEhil%o@Y*x4cQ(rXQysZz;KkVxLfOTRC(-L{h@2*SSj!!oI`?L>5c0xi*P_pw z_RiZbk!e`l!_G>I=vt0g7{>YFHtH8twURWH`TGpm{=8A+>L$QK(~z~K-B>V|-9PNU zIBk*gSk=1wON1DDqlDXa(tp#71G=*eb(ILAK>Q0N&?Z2@D>cKF{npx)-P(j5J*@9D zJ73uO?J^xPZyrO0aveH?9QLVWY6)wb)T;2^WSePdi5)0j%ERM-H6>K^FXh6@ox_{8 zRrr`HH5@6~nq~&QTMd6o*rzOskit#0MDXjs-pxg&VYbCEhp~B#WiC4Q#2?}#lW(8@ zEo#o?Kgqn;qpFVa$D3P)r5xvB`b6ElwRQhj-*$jQgF6TKL+9tsK9c>Lyt)QX!{nxp zmJHt8m4v(3O9H6F`uO$1%mr{h46X0OmtgCF!SqEregXuLUbDAWpVRa)&@FnJt{kpVEQYu`Jz&g7Y3frSNZ+L_K@HG?XNi-=P z{>LV96PYa3stUZ2ftjTRR4u{!*Aw{Cw}*$5W*;`TVx}NUGl4d6Z+nBjNmf+8Zy*L5 z@Gh!ghE`+$FL%y@ttHnAnjvH(1mooXG93P3rJ;^m+j{@IY@ibnHZ~5&j zO_S>}^9x1Za;x^+^)|UJ#Pv{~66Vl)wR9(Kef<%;hSh$6eoRSxf%^lmRS23Xwz2=T zwDMEHUqmr0;%9;XJk=U)7SJ9+eEdobPF`-Sz_XkbgUx36gjDAlJG z%InVaZm7wUnk%^fQt&{*XOe4XnFHe@k5WSa;FpTDBYP}24L;i(=-(43#v|7s$8*x~pw<@5rEiWLNrXoDvZ@`_bb-U)Zk?@9iYaxE!`yw6mI50y;$jw`)x!X9+8 z?9_gVJnS@}rl!`llVYs=8Yhdrf2Q*DjuNae$u-NnUT{-pTsXZ$1$CsHUaFTIPdl~u zg%y5A_4397e6O++_T`Urxt7BAyyHMb$NCRfbouelCY>~0CW&Gn#iB}I)@M~1@GU!w@PGz7HLkfJ}YUi0HMH^WZ7141SQxjbu2m zcQ4+{rE7+hQNvws&l$2Y#)R!C*t-w(XG|We9t$7^bf$CLcmmnB-9(Ptye>r3GSPQZ z905qlRZ`=J66rNQFHd(r16;Eam>yuddr*J7hrniUp*R=ZN~Qqkl?j*<&}JoZvA*BU{OUa2BklhOnm#l_#V$>g;w0xDU2QQjl58Y}PL zZzU|fxjx6?bnQQx4=4Cl052~e+x-<@ywgxEcX{S#iLjVSy#zv@zX*OijHp%!>CY4UF=?8gZM=7EYeyE| z*rv3rat!qWPV8;7qAG5m>vPe(azEC3+`AQJ~{ za;raW%F#1szgWYtlTG;4GnHxAAI3eV*Lr}d;4e2S*@*xmE|z@L1{9>ZOl8Ge^xC3A zjkY)QC5NgV(6n@#wkH+|iF8-d3wU$h)u7kYmW!8%2|n^~@E1K8xwSa&5prAf$w%GX zn$70dV}9F{N@(Dm;xW>_Uc`J;POjEt@Q5cwOot?-G949s8leD%Ax*zkRZkJp(VCg3 zdp$C?cu+1%2m#3Qr~Uk~iJzU5y?@b4ho$Z8{*lesgwzgp#0qJf(WGFz=z~XS9v#4I z0x;yk@o_?WIr8X`G?8B$@w@OavwfK2BRi68n#&bGwIOeiW4Bfr>HSxLChl=%&{i^ zew(4qTp@w})x<;y(cxsNeg!Dq(7k`^f&u48My!FT4Y4o~UO-(KUD|Rq=`llaCQ{n3 zX_Q4C%ud^%PQNa!du~Mmk1b?IL_|=#ak**W{#RHRvIZN-D`m*-63-(gr`CQQEOAY%h)5HV z&sv2ENx7FwIh8mirOvT*m$6JPUnJBYX62#pVLvKm(9x;5dGo0+)vT=*pVCRUlktOs ze3e{VuF6NelP2g|b~sXw(5;3!ZJKiamCW(%8K&M44k#KUXOQq~I9 z)Qv%~TQH==7PoTXU6z~SA|b=jaOlX&wyDfD-BZQ|nTYc#=Fm}1WQH5)f*Q+EHp**5 zV2s=yUPShrI;|LQUWJ-7U@RR(8{9XK|hYE z?u(q}y@`QF`7LiHmUP@?G-)Hbf9CMrnxu`*M-C4byOHFndMhlNs*Xwp;~ZZe%}}Kb z$5khU%VxJ;z@p8>+i-3Q;sIpm>YbT!%@J;l% zkf-P*YDMOhodwjkoD7AT8D~x$N=pao&``y|^lL3=7GGX`q;x;6Erxw`Llcmmnz_Bj zK06RchYv$|CwcKb#9CK9PmtH_LrIIivEcZo+y@d8srzl5(w7@nAqcy*!2ITyH?kf z4@6%<+l^cIOF-4|f25DLTb^ugc6AZ+Xh=&@o1ahPV;=YD-RGIW+9P-4G)UrfrQ|PZKV=#@O45L>K5PZ1dnEvPDd^@;ev@L&rerQIRKAIaEIttDv zTeTvOqJq{Rz|ms@&!vIp=61*DW*CvD=PP1W%SuYR9$ucBABmz4dD`rjU7a&U$-#Td zy%?fW`oBA~k2SSY=HDYsEiGdWkGO#u$ret$^NPz_YsynLE+}qpa%nR8rmPab7?Ydd zt%jZfvA8XF5zgTeRusVxieHH-ro^5J6iyYj8W`U|`ELtKe`hzW%gDo<&a7AYtI}dm z(O4>d1WbUs;}+IxvG1zV|5av_J(InATlXclH&7fUSoP_V?zM-!(euRzXo3|j6S8!B zQpe5R%s#AX*mO3%Fme_vS&C&vK&-5$a{rF9F-R9w-GL0y(Himza!hepoH((*R(-XL z3%{pOsTo;#p8^UdjhRePbm;XtVkhcN8}Z$X|C9nH1wC^s^|YA$C&5;XQ2^x$>h;k2 zPyE;E4+JZLJA?PHd;aHuL)*hiNYYzxjTg5w5{Jg^`{ew9w!yN7Lr$RLz+^>p+PcW$vm3JGHi_X^lhu$ zWr!$wAu^L?LlkuHtZd19e15E#*$<~nf7{u(8kUs>^nL%snl&C5O+iu!sndCN?#yw$ zt`eoCvDnyJ*n0XmPj+_FU@N(n*(COPR1Dkj9l-_(e^EW}mbLe#rDaFHzKC{qy$TB9 zM9P#sGqy}lNuD5E!EMY|PK!T)AJa~g!Jw-P8fJ4LlmdX6o|NN&fGD4zO7YZ~S#$x4 zpBZT(qy3a&5KC_IO2Qky7T3U|tIF=^ZLcFq(kKpRHB*!^eJw2sL&JL>2OiT=!~+Fw zz=D%BB#o}nzqq+(Yjn(Q`?`EIhqTp$frZ^wIXzn<0RAwIovOf$#LO(0!GncB-9QYi zpBr&iJ!B1tnCVAN&3$-Wo#5R9py|vhx;R4*(&SL+f{~Y^ zF2(mcr;pTw<68P<7*cKVUTfiRzKos8t~6qSaIp+oHd{_Y>U>-H>*?uFmDGOa2Yxnz zUDOeh1gRndg@~ANvMA!=xw(KS5-s7h064qeG_1!gO@6nM`-&6_2(=zef^>7w20xZ8y6I@7*JVJH$3+|#&wd(9meyitIgQ53X`J;@ z2ugO3@Mz6?WszQfYVn!VZs987O=3}EkE=o!BqKxtdr%ixiWmptqPkVK8qo4jh7W9r zS=*A}3;zPdkAev|_oLL^$#Q7B4-LqQEJg%vgn~$I*3OKDKtd=Q8)z#Vv?42o6=#pfPF?)k3FQ(sRJ5jI6<0$eIISVFS2MEpy7NS&WByHd`(qS=Ly z?*p5cXhD*k^m%G+r>m=oexmWE-L2oeh;ME`{fDe!R9V(0EF7j$l&7gvR8gvJ7`3>f zXh2N%*;a^v@G`Mw)jks_1JPIG`7fnqA=olhs%k$3dT2NAGBe5%@t<-_6S3~MLl+ht&}t&>G=bEJ&bz+)IhkziVGi;r!ZEnlr$2nmxW zaq>5t3Wza&>cDV7Nh+2rW16%sz9Jnt=UB3T{0`|2sT^C}Ov3uaW>ohk1_a$oE7i%o z=r*6ujt&?9{K1Sv44?-Qnlls@0*r`&Q&0~i9a#1GS~~gA`rKq-TWKG{HI#rFz$Ysu zI6B?mD0sMYne~Fw^M+|w{f%=f+dlqxKu!zAePIw%!17I(qSoC#TPd zX`ViEg*v#a_PpLa)rZ!rkbT#~-jxO30_Bv%@5@oMuyDGFUWV%fxAb)fY|8iohn*cc z;3NXi*Vl?@m_GLc7~sNP`#>_iMzPl>l6;OIQAKllyL2R?@1Ef7M4BWQE>)`|Wrg>d z(x_6-KGT~w$oK#LFTjb6T=~3)j$XvazOAf^s?S3c&A-arHYPMd;|xB1KB~{ttZS zA95ySkH5n?-rnZLQB*{u&sa#&N%;(*lZ1%KidsqBrl^9VqqiG{;Q9m5kn&s9wL{E$;q_*yh4QSu z1)Wk*3Jat+5o2fvFs>q-S97%R^Rx!xDSGMT>~g6Xl6C)^CWaU zqEf|rKwGX7x@ly;GA(k0Gzn_~!BmDs=F26R%p(1PP|Q()zO1}Jfbv2>n5-98>qK*G z-Bd{c@GmnZ)tzi56Q};oonJn(9yydIrYL2R&a?2Z8io*$C-*lVfVN{y1k@sKP=BKD zloV4u9vS2KzI@wGF_r&@U}5McsXO#00rn*R?arFOO$rOhI%yo%nn{GYrJ~RX@GTxszOK z8QCN}>$y~^FI9C-bx_!qXWh~*+G(fG8W@$JV!Lz(Ml$G%;Q^iK7%kOyG@gOe;~{eB zp>*xD57Fjk+#5IIeeO9FpAYG{;{Z?%FJ~a258j05)>yDIiGYmxti~!RDRwM*=T1~n zM5w43vJqP0a)IBE7>VdB13Mfj)2HM3_+wqgO(na&K2*0GMJ=U(L$CSdP!ww_X*@?sWTwx@FR#Bnn?{p%5@(IqwYSZfc z`H1hlqnBA)iWUf67=R!jRqD|k(L=J`&o=R}mYtx0YrOI?~H@je!x{?DADtvq^hnG1xPeKOPus+g&jwzDQdeWe+`s`|i7SGTCoG zShR>(R~K?c1!`%jE*G8Ej`}yCpD^@UMLPK{}6YCe=2z9_b{ybYV5Azv*ms>Bdvh;_T8@GTSxdh4C(b zq9EUPur8|;{OBY6_uPZ9WsB}maJlqB+~1G3bt^(;C5kNT;Tee_UUQJgVlXg(v~Jx{ z|M7VAd|+r^tD*K)S0ioTj+Bs6Vha}F+_({}WEYL<t!plh z31h#g-q=Z}#1|h%j8wS0o03N!L5N0m;_C0$$!u^?pI^CtJ%e-S5_LND|7B&#@o=K3 zPw4;mzX=6{I9x6SuNN&E)x%Hv`-fuKKwmUd6p2Tp$SxPk^yzwhpLK4UlP$l?hc@ld{ij4tX#CGk&aip`${d}x|pqT-m2Q#Nqo7KXD98Ys}qc3 z=m|_LRq^wTiDIj?+E#=QKG5ssbm}D6*r=0JTN}h;h#!7P_^`uJJRY6Ey1H}~)>tRb zAiJg}l#ULh`g$Z;MyajUS4)Y-bg9W$87CSARYmFRL$0pYSMGJWhCXNw2+hs9JOs8K)rkH5IHyks&_6(9sG}7X zP+zal<7{t7>+93Kx7F1;skvM_d0Nrc1%UwKwrzSnYidyE&o{qbrhWO##LhVf=luCe zm&vk>?DrEt{&+OMUsq{;K7{geoPj{P@05QokncDwW)y(kF+0adI`3|w<=Gt{vyWt3 zk*^20*qDgqI~F#?VmWCPML`OM%+L+MT*};#qJ-C8Lkx!zolfF2XW}#_&_nXlNR^ey z))13jcSY#v(AC|+L46W_I1Eiq2*IE^(O#^sMkp)OrXtOR$2-N9fVR< zg>uLthzl3uv{?<=fV^y3L2Xh@6Za3=HS0g$ci7)z%Y?=Pi zAc|s2QiTcM-ytCs-MzyL~p zy&f!V5Lkb|zD`{rpgR)E%gv?KK@YAqXD1}$&G7m3fZX!(q>rYkrKNfhuHQf8Z7nZ1 z!$Q>VZm6$Eaym!FEHDvKsM%sP?`xv8*(BLbA}&AeRldQlo1QRmM`D=9(q`_a5!1fLJNtW00pDS>!N3C`~B zA)=c;UAOTWi*>fQqt@0YUGtxW@pKkW6oRv2lI$jt7X(3%%y)aeL@&As!R^NJ&_jAa zabKTqXG^SzD|L42l2?7bF2(u%Xk}$6`|q#Exb3nFLSv)8;)n&(H@}&acT;gVAmNAr zhL&GYv zxzHLL5dr}OQN&YQOYD|gkgBT@Ww|JwE)t0l^ZD>tgNlvCC*5xF`w@b{qQtFz5%GB- zr($EWCrl!5q{cOQ_Spwz@4bn~13uGC! zx*BztU0~)+eMzLs%Fp%8he;F{f;JJS6HHaIO*-c^+llYIoB-u@3 n5|j9kz$DpCViJ@1kHG&AGy+aftMk5O00000NkvXXu0mjftcI#C diff --git a/data/artwork/alpha-numbers-stamp b/data/artwork/alpha-numbers-stamp index 72cac7ad4ae16f51b64c7be00f3e0e92f0d547fa..25452e58f8c616ea2c01a38bc3292ef54532cddb 100644 GIT binary patch delta 50 zcmZ4Vm1)serVXyjlQWpaH^(S*2}~|?7Ta87{HcwRd2;?PWdVj0PQ@Ad Date: Mon, 3 Sep 2012 19:01:20 +0200 Subject: [PATCH 09/21] libtiff: fix ppc build --- src/libs/tiff/tif_jpeg.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/libs/tiff/tif_jpeg.c b/src/libs/tiff/tif_jpeg.c index a967827e74..9ac77f181f 100644 --- a/src/libs/tiff/tif_jpeg.c +++ b/src/libs/tiff/tif_jpeg.c @@ -726,11 +726,10 @@ JPEGPreDecode(TIFF* tif, tsample_t s) if (sp->cinfo.d.image_width < segment_width || sp->cinfo.d.image_height < segment_height) { TIFFWarningExt(tif->tif_clientdata, module, - "Improper JPEG strip/tile size, " - "expected %dx%d, got %dx%d", - segment_width, segment_height, - sp->cinfo.d.image_width, - sp->cinfo.d.image_height); + "Improper JPEG strip/tile size, " + "expected %" B_PRIu32 "x%" B_PRIu32 ", got %" B_PRIu32 "x%" + B_PRIu32, segment_width, segment_height, sp->cinfo.d.image_width, + sp->cinfo.d.image_height); } if (sp->cinfo.d.image_width > segment_width || sp->cinfo.d.image_height > segment_height) { @@ -741,10 +740,10 @@ JPEGPreDecode(TIFF* tif, tsample_t s) * case and error out. */ TIFFErrorExt(tif->tif_clientdata, module, - "JPEG strip/tile size exceeds expected dimensions," - " expected %dx%d, got %dx%d", - segment_width, segment_height, - sp->cinfo.d.image_width, sp->cinfo.d.image_height); + "JPEG strip/tile size exceeds expected dimensions," + "expected %" B_PRIu32 "x%" B_PRIu32 ", got %" B_PRIu32 "x%" + B_PRIu32, segment_width, segment_height, sp->cinfo.d.image_width, + sp->cinfo.d.image_height); return (0); } if (sp->cinfo.d.num_components != From 9335e141bac58250fcd93e621eff88206614c754 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Mon, 3 Sep 2012 16:24:28 -0400 Subject: [PATCH 10/21] Fix crash when dragging files onto nav menus. - BNavMenu now keeps its own copy of the cached types list that's passed to it. In some circumstances it could happen that the container window would delete the list and consequently the nav menu would wind up with a pointer to an invalid object. Probably a regression from the async mouse tracking rewrites. --- headers/private/tracker/NavMenu.h | 12 ++++++------ src/kits/tracker/NavMenu.cpp | 11 ++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/headers/private/tracker/NavMenu.h b/headers/private/tracker/NavMenu.h index 127d94f255..0726c36d94 100644 --- a/headers/private/tracker/NavMenu.h +++ b/headers/private/tracker/NavMenu.h @@ -80,12 +80,12 @@ class BNavMenu : public BSlowMenu { BWindow *parentWindow = NULL, const BObjectList *list = NULL); // parentWindow, if specified, will be closed if nav menu item invoked // with option held down - + virtual ~BNavMenu(); - + virtual void AttachedToWindow(); virtual void DetachedFromWindow(); - + void SetNavDir(const entry_ref *); void ForceRebuild(); bool NeedsToRebuild() const; @@ -96,7 +96,7 @@ class BNavMenu : public BSlowMenu { BMessenger Target(); void SetTypesList(const BObjectList *list); - const BObjectList *TypesList() const; + const BObjectList *TypesList() const; void AddNavDir(const Model *model, uint32 what, BHandler *target, bool populateSubmenu); @@ -121,7 +121,7 @@ class BNavMenu : public BSlowMenu { protected: virtual bool StartBuildingItemList(); virtual bool AddNextItem(); - virtual void DoneBuildingItemList(); + virtual void DoneBuildingItemList(); virtual void ClearMenuBuildingState(); void BuildVolumeMenu(); @@ -142,7 +142,7 @@ class BNavMenu : public BSlowMenu { EntryListBase *fContainer; bool fIteratingDesktop; - const BObjectList *fTypesList; + BObjectList *fTypesList; TrackingHookData fTrackingHook; }; diff --git a/src/kits/tracker/NavMenu.cpp b/src/kits/tracker/NavMenu.cpp index aa6526d383..4dc61778d3 100644 --- a/src/kits/tracker/NavMenu.cpp +++ b/src/kits/tracker/NavMenu.cpp @@ -263,8 +263,10 @@ BNavMenu::BNavMenu(const char* title, uint32 message, const BHandler* target, fFlags(0), fItemList(0), fContainer(0), - fTypesList(list) + fTypesList(new BObjectList(10, true)) { + if (list != NULL) + *fTypesList = *list; InitIconPreloader(); SetFont(be_plain_font); @@ -292,8 +294,10 @@ BNavMenu::BNavMenu(const char* title, uint32 message, fFlags(0), fItemList(0), fContainer(0), - fTypesList(list) + fTypesList(new BObjectList(10, true)) { + if (list != NULL) + *fTypesList = *list; InitIconPreloader(); SetFont(be_plain_font); @@ -313,6 +317,7 @@ BNavMenu::BNavMenu(const char* title, uint32 message, BNavMenu::~BNavMenu() { + delete fTypesList; } @@ -814,7 +819,7 @@ BNavMenu::SetShowParent(bool show) void BNavMenu::SetTypesList(const BObjectList* list) { - fTypesList = list; + *fTypesList = *list; } From 139ee879031c4cfc9fcf3434f2d577402a91ad4c Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Mon, 3 Sep 2012 16:42:14 -0400 Subject: [PATCH 11/21] Fix some behavioral regressions introduced by previous commit. - Some parts of Tracker were basing certain assumptions on whether the types list was NULL or not. We now check on list emptiness instead. --- src/kits/tracker/Model.cpp | 14 ++++++++------ src/kits/tracker/NavMenu.cpp | 14 +++++--------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/kits/tracker/Model.cpp b/src/kits/tracker/Model.cpp index 1cf77c84ca..e4607ad5a6 100644 --- a/src/kits/tracker/Model.cpp +++ b/src/kits/tracker/Model.cpp @@ -1109,12 +1109,14 @@ Model::SupportsMimeType(const char* type, const BObjectList* list, if (type) { BString typeString(type); match = MatchMimeTypeString(&typeString, mimeSignature); - } else - match = WhileEachListItem(const_cast*>(list), - MatchMimeTypeString, mimeSignature); - // const_cast shouldnt be here, have to have it until - // MW cleans up - + } else { + if (list != NULL && !list->IsEmpty()) { + match = WhileEachListItem(const_cast*>(list), + MatchMimeTypeString, mimeSignature); + } + // const_cast shouldnt be here, have to have it until + // MW cleans up + } if (match == kMatch) // supports the actual type, it can't get any better return kModelSupportsType; diff --git a/src/kits/tracker/NavMenu.cpp b/src/kits/tracker/NavMenu.cpp index 4dc61778d3..14578f5ea0 100644 --- a/src/kits/tracker/NavMenu.cpp +++ b/src/kits/tracker/NavMenu.cpp @@ -130,7 +130,7 @@ void SpringLoadedFolderSetMenuStates(const BMenu* menu, const BObjectList* typeslist) { - if (!menu || !typeslist) + if (!menu || !typeslist || typeslist->IsEmpty()) return; // if a types list exists @@ -339,13 +339,6 @@ BNavMenu::AttachedToWindow() void BNavMenu::DetachedFromWindow() { - // does this need to set this to null? - // the parent, handling dnd should set this - // appropriately - // - // if this changes, BeMenu and RecentsMenu - // in Deskbar should also change - fTypesList = NULL; } @@ -819,7 +812,10 @@ BNavMenu::SetShowParent(bool show) void BNavMenu::SetTypesList(const BObjectList* list) { - *fTypesList = *list; + if (list != NULL) + *fTypesList = *list; + else + fTypesList->MakeEmpty(); } From 96c30cc820dc6031e85e264dcad55fc1a2caea52 Mon Sep 17 00:00:00 2001 From: Philippe Saint-Pierre Date: Mon, 3 Sep 2012 16:53:53 -0400 Subject: [PATCH 12/21] Tracker: fix warning in gcc2 Refactor a bit the conditions to avoid a warning. --- src/kits/tracker/Model.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/kits/tracker/Model.cpp b/src/kits/tracker/Model.cpp index e4607ad5a6..7c5e617569 100644 --- a/src/kits/tracker/Model.cpp +++ b/src/kits/tracker/Model.cpp @@ -1106,14 +1106,12 @@ Model::SupportsMimeType(const char* type, const BObjectList* list, int32 match; - if (type) { + if (type || (list != NULL && list->IsEmpty())) { BString typeString(type); match = MatchMimeTypeString(&typeString, mimeSignature); } else { - if (list != NULL && !list->IsEmpty()) { - match = WhileEachListItem(const_cast*>(list), - MatchMimeTypeString, mimeSignature); - } + match = WhileEachListItem(const_cast*>(list), + MatchMimeTypeString, mimeSignature); // const_cast shouldnt be here, have to have it until // MW cleans up } From e85dfa6bad926733b5a1b1fc3355b2c314aa041e Mon Sep 17 00:00:00 2001 From: John Scipione Date: Fri, 31 Aug 2012 14:22:26 -0400 Subject: [PATCH 13/21] Update optional package for Colors! --- build/jam/OptionalPackages | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index c02418fb92..b88a217155 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -507,12 +507,12 @@ if [ IsOptionalHaikuImagePackageAdded Colors! ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - Colors!-2.0-x86-gcc4-2012-04-30.zip - : $(baseURL)/Colors\!-2.0-x86-gcc4-2012-04-30.zip ; + Colors!-2.1-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/Colors\!-2.1-r1a4-x86-gcc4-2012-08-30.zip ; } else { InstallOptionalHaikuImagePackage - Colors!-2.0-x86-gcc2-2012-04-30.zip - : $(baseURL)/Colors\!-2.0-x86-gcc2-2012-04-30.zip ; + Colors!-2.1-r1a4-x86-gcc2-2012-08-30.zip + : $(baseURL)/Colors\!-2.1-r1a4-x86-gcc2-2012-08-30.zip ; } AddSymlinkToHaikuImage home config settings deskbar Applications : /boot/apps/Colors\!/Colors\! ; From 098967cee129b9116b468224257234c8ef1c9707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 4 Sep 2012 00:54:25 +0200 Subject: [PATCH 14/21] Fixed the new issue in #8910 from r44585. * The ASSERT() I introduced in r44585 was incorrect: when the sub transaction used block_cache_get_empty() to get the block, there is no original_data for a reason. * Added a test case that reproduces this situation. * The block must be moved to the unused list in this situation, though, or else it might contain invalid data. Since the block can only be allocated in the current transaction, this should not be a problem, though, AFAICT. --- src/system/kernel/cache/block_cache.cpp | 8 ++-- .../system/kernel/cache/block_cache_test.cpp | 41 ++++++++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp index 7cd01571e0..22e20ccb8b 100644 --- a/src/system/kernel/cache/block_cache.cpp +++ b/src/system/kernel/cache/block_cache.cpp @@ -3046,9 +3046,11 @@ cache_abort_sub_transaction(void* _cache, int32 id) // The parent transaction didn't change the block, but the sub // transaction did - we need to revert to the original data. // The block is no longer part of the transaction - ASSERT(block->original_data != NULL); - memcpy(block->current_data, block->original_data, - cache->block_size); + if (block->original_data != NULL) { + // The block might not have original data if was empty + memcpy(block->current_data, block->original_data, + cache->block_size); + } if (last != NULL) last->transaction_next = next; diff --git a/src/tests/system/kernel/cache/block_cache_test.cpp b/src/tests/system/kernel/cache/block_cache_test.cpp index f03f37b4eb..d0b88f171b 100644 --- a/src/tests/system/kernel/cache/block_cache_test.cpp +++ b/src/tests/system/kernel/cache/block_cache_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2008, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2008-2012, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -400,6 +400,45 @@ test_abort_sub_transaction() cache_end_transaction(gCache, id, NULL, NULL); cache_sync_transaction(gCache, id); + + start_test("Abort sub with empty block"); + id = cache_start_transaction(gCache); + + gBlocks[1].present = true; + gBlocks[1].read = true; + + block = block_cache_get_writable(gCache, 1, id); + or_block(block, BLOCK_CHANGED_IN_PREVIOUS); + gBlocks[1].original = gBlocks[1].current; + gBlocks[1].current |= BLOCK_CHANGED_IN_PREVIOUS; + + block_cache_put(gCache, 1); + + gBlocks[1].is_dirty = true; + TEST_BLOCKS(1, 1); + + cache_start_sub_transaction(gCache, id); + + gBlocks[0].present = true; + + block = block_cache_get_empty(gCache, 0, id); + or_block(block, BLOCK_CHANGED_IN_SUB); + gBlocks[0].current = BLOCK_CHANGED_IN_SUB; + + block_cache_put(gCache, 0); + + cache_abort_sub_transaction(gCache, id); + + gBlocks[0].write = false; + gBlocks[0].is_dirty = false; + gBlocks[0].parent = 0; + gBlocks[0].original = 0; + TEST_BLOCKS(0, 1); + + gBlocks[1].write = true; + gBlocks[1].is_dirty = false; + cache_end_transaction(gCache, id, NULL, NULL); + cache_sync_transaction(gCache, id); } From 3d87b8120cea948d0d9f5e9264274fb181605545 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 4 Sep 2012 08:42:36 -0500 Subject: [PATCH 15/21] Kernel VM: Style cleanup; No functional change --- src/system/kernel/vm/VMAnonymousCache.cpp | 50 +++++++++++++---------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp b/src/system/kernel/vm/VMAnonymousCache.cpp index d9047dfaa8..eae0b54807 100644 --- a/src/system/kernel/vm/VMAnonymousCache.cpp +++ b/src/system/kernel/vm/VMAnonymousCache.cpp @@ -159,7 +159,7 @@ protected: class ReadPage : public SwapTraceEntry { public: ReadPage(VMAnonymousCache* cache, page_num_t pageIndex, - swap_addr_t swapSlotIndex) + swap_addr_t swapSlotIndex) : SwapTraceEntry(cache), fPageIndex(pageIndex), @@ -183,7 +183,7 @@ private: class WritePage : public SwapTraceEntry { public: WritePage(VMAnonymousCache* cache, page_num_t pageIndex, - swap_addr_t swapSlotIndex) + swap_addr_t swapSlotIndex) : SwapTraceEntry(cache), fPageIndex(pageIndex), @@ -220,7 +220,7 @@ dump_swap_info(int argc, char** argv) kprintf("swap files:\n"); for (SwapFileList::Iterator it = sSwapFileList.GetIterator(); - swap_file* file = it.Next();) { + swap_file* file = it.Next();) { swap_addr_t total = file->last_slot - file->first_slot; kprintf(" vnode: %p, pages: total: %lu, free: %lu\n", file->vnode, total, file->bmp->free_slots); @@ -283,9 +283,10 @@ swap_slot_alloc(uint32 count) // if this swap file has used more than 90% percent of its space // switch to another - if (sSwapFileAlloc->bmp->free_slots - < (sSwapFileAlloc->last_slot - sSwapFileAlloc->first_slot) / 10) + if (sSwapFileAlloc->bmp->free_slots + < (sSwapFileAlloc->last_slot - sSwapFileAlloc->first_slot) / 10) { sSwapFileAlloc = sSwapFileList.GetNext(sSwapFileAlloc); + } mutex_unlock(&sSwapFileListLock); @@ -297,10 +298,11 @@ static swap_file* find_swap_file(swap_addr_t slotIndex) { for (SwapFileList::Iterator it = sSwapFileList.GetIterator(); - swap_file* swapFile = it.Next();) { + swap_file* swapFile = it.Next();) { if (slotIndex >= swapFile->first_slot - && slotIndex < swapFile->last_slot) + && slotIndex < swapFile->last_slot) { return swapFile; + } } panic("find_swap_file(): can't find swap file for slot %ld\n", slotIndex); @@ -426,7 +428,7 @@ VMAnonymousCache::~VMAnonymousCache() { // free allocated swap space and swap block for (off_t offset = virtual_base, toFree = fAllocatedSwapSize; - offset < virtual_end && toFree > 0; offset += B_PAGE_SIZE) { + offset < virtual_end && toFree > 0; offset += B_PAGE_SIZE) { swap_addr_t slotIndex = _SwapBlockGetAddress(offset >> PAGE_SHIFT); if (slotIndex == SWAP_SLOT_NONE) continue; @@ -474,8 +476,8 @@ VMAnonymousCache::Resize(off_t newSize, int priority) swap_block* swapBlock = NULL; for (page_num_t pageIndex = (newSize + B_PAGE_SIZE - 1) >> PAGE_SHIFT; - pageIndex < oldPageCount && fAllocatedSwapSize > 0; - pageIndex++) { + pageIndex < oldPageCount && fAllocatedSwapSize > 0; pageIndex++) { + WriteLocker locker(sSwapHashLock); // Get the swap slot index for the page. @@ -718,7 +720,7 @@ VMAnonymousCache::WriteAsync(off_t offset, const generic_io_vec* vecs, // create our callback WriteCallback* callback = (flags & B_VIP_IO_REQUEST) != 0 - ? new(malloc_flags(HEAP_PRIORITY_VIP)) WriteCallback(this, _callback) + ? new(malloc_flags(HEAP_PRIORITY_VIP)) WriteCallback(this, _callback) : new(std::nothrow) WriteCallback(this, _callback); if (callback == NULL) { if (newSlot) { @@ -731,8 +733,8 @@ VMAnonymousCache::WriteAsync(off_t offset, const generic_io_vec* vecs, _callback->IOFinished(B_NO_MEMORY, true, 0); return B_NO_MEMORY; } -// TODO: If the page already had swap space assigned, we don't need an own -// callback. + // TODO: If the page already had swap space assigned, we don't need an own + // callback. callback->SetTo(pageIndex, slotIndex, newSlot); @@ -1038,7 +1040,7 @@ VMAnonymousCache::_MergePagesSmallerConsumer(VMAnonymousCache* source) // all pages of the source back to the consumer. for (VMCachePagesTree::Iterator it = pages.GetIterator(); - vm_page* page = it.Next();) { + vm_page* page = it.Next();) { // If a source page is in the way, remove and free it. vm_page* sourcePage = source->LookupPage( (off_t)page->cache_offset << PAGE_SHIFT); @@ -1067,9 +1069,9 @@ VMAnonymousCache::_MergeSwapPages(VMAnonymousCache* source) return; for (off_t offset = source->virtual_base - & ~(off_t)(B_PAGE_SIZE * SWAP_BLOCK_PAGES - 1); - offset < source->virtual_end; - offset += B_PAGE_SIZE * SWAP_BLOCK_PAGES) { + & ~(off_t)(B_PAGE_SIZE * SWAP_BLOCK_PAGES - 1); + offset < source->virtual_end; + offset += B_PAGE_SIZE * SWAP_BLOCK_PAGES) { WriteLocker locker(sSwapHashLock); @@ -1291,8 +1293,8 @@ void swap_init(void) { // create swap block cache - sSwapBlockCache = create_object_cache("swapblock", - sizeof(swap_block), sizeof(void*), NULL, NULL, NULL); + sSwapBlockCache = create_object_cache("swapblock", sizeof(swap_block), + sizeof(void*), NULL, NULL, NULL); if (sSwapBlockCache == NULL) panic("swap_init(): can't create object cache for swap blocks\n"); @@ -1352,8 +1354,9 @@ swap_init_post_modules() size = string ? atoll(string) : 0; unload_driver_settings(settings); - } else + } else { size = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2; + } if (size < B_PAGE_SIZE) return; @@ -1397,7 +1400,7 @@ swap_free_page_swap_space(vm_page* page) cache->fAllocatedSwapSize -= B_PAGE_SIZE; cache->_SwapBlockFree(page->cache_offset, 1); - return true; + return true; } @@ -1419,16 +1422,19 @@ swap_total_swap_pages() uint32 totalSwapSlots = 0; for (SwapFileList::Iterator it = sSwapFileList.GetIterator(); - swap_file* swapFile = it.Next();) + swap_file* swapFile = it.Next();) { totalSwapSlots += swapFile->last_slot - swapFile->first_slot; + } mutex_unlock(&sSwapFileListLock); return totalSwapSlots; } + #endif // ENABLE_SWAP_SUPPORT + void swap_get_info(struct system_memory_info* info) { From 0606074fd9e8ba5c10ef854c44a475fce65fca21 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 4 Sep 2012 10:58:38 -0500 Subject: [PATCH 16/21] Kernel VM: Improve swap file selection * Heavily based on Hamish Morrison's GCI work with some modified logic and cleanup. #3723 * Adds automatic swap as well as user specified swap * Limits: Automatic: (ram * 2) up to 25% of the disk User: user specified up to 90% of the disk * Supports changing the swap disk location --- src/system/kernel/vm/Jamfile | 2 + src/system/kernel/vm/VMAnonymousCache.cpp | 252 ++++++++++++++++++++-- 2 files changed, 234 insertions(+), 20 deletions(-) diff --git a/src/system/kernel/vm/Jamfile b/src/system/kernel/vm/Jamfile index fa0282d658..a646e719c4 100644 --- a/src/system/kernel/vm/Jamfile +++ b/src/system/kernel/vm/Jamfile @@ -3,6 +3,8 @@ SubDir HAIKU_TOP src system kernel vm ; UsePrivateHeaders shared ; UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ; +UsePrivateHeaders [ FDirName kernel disk_device_manager ] ; +UsePrivateHeaders [ FDirName kernel util ] ; KernelMergeObject kernel_vm.o : PageCacheLocker.cpp diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp b/src/system/kernel/vm/VMAnonymousCache.cpp index eae0b54807..a9d4bc8354 100644 --- a/src/system/kernel/vm/VMAnonymousCache.cpp +++ b/src/system/kernel/vm/VMAnonymousCache.cpp @@ -1,4 +1,6 @@ /* + * Copyright 2012, Alexander von Gluck IV, kallisti5@unixzen.com. + * Copyright 2011, Hamish Morrison, hamish@lavabit.com. * Copyright 2008, Zhao Shuai, upczhsh@163.com. * Copyright 2008-2011, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de. @@ -17,13 +19,20 @@ #include #include +#include #include #include #include #include +#include +#include +#include +#include #include #include +#include +#include #include #include #include @@ -69,6 +78,8 @@ #define SWAP_BLOCK_MASK (SWAP_BLOCK_PAGES - 1) +static const char* const kDefaultSwapPath = "/var/swap"; + struct swap_file : DoublyLinkedListLinkImpl { int fd; struct vnode* vnode; @@ -1167,6 +1178,93 @@ VMAnonymousCache::_MergeSwapPages(VMAnonymousCache* source) // #pragma mark - +// TODO: This can be removed if we get BFS uuid's +struct VolumeInfo { + char name[B_FILE_NAME_LENGTH]; + char device[B_FILE_NAME_LENGTH]; + char filesystem[B_OS_NAME_LENGTH]; + off_t capacity; +}; + + +class PartitionScorer : public KPartitionVisitor { +public: + PartitionScorer(VolumeInfo& volumeInfo) + : + fBestPartition(NULL), + fBestScore(-1), + fVolumeInfo(volumeInfo) + { + } + + virtual bool VisitPre(KPartition* partition) + { + if (!partition->ContainsFileSystem()) + return false; + + KPath path; + partition->GetPath(&path); + + int score = 0; + if (strcmp(fVolumeInfo.name, partition->ContentName()) == 0) + score += 4; + if (strcmp(fVolumeInfo.device, path.Path()) == 0) + score += 3; + if (fVolumeInfo.capacity == partition->Size()) + score += 2; + if (strcmp(fVolumeInfo.filesystem, + partition->DiskSystem()->ShortName()) == 0) { + score += 1; + } + if (score >= 4 && score > fBestScore) { + fBestPartition = partition; + fBestScore = score; + } + + return false; + } + + KPartition* fBestPartition; + +private: + int32 fBestScore; + VolumeInfo fVolumeInfo; +}; + + +status_t +get_mount_point(KPartition* partition, KPath* mountPoint) +{ + if (!mountPoint || !partition->ContainsFileSystem()) + return B_BAD_VALUE; + + const char* volumeName = partition->ContentName(); + if (!volumeName || strlen(volumeName) == 0) + volumeName = partition->Name(); + if (!volumeName || strlen(volumeName) == 0) + volumeName = "unnamed volume"; + + char basePath[B_PATH_NAME_LENGTH]; + int32 len = snprintf(basePath, sizeof(basePath), "/%s", volumeName); + for (int32 i = 1; i < len; i++) + if (basePath[i] == '/') + basePath[i] = '-'; + char* path = mountPoint->LockBuffer(); + int32 pathLen = mountPoint->BufferSize(); + strncpy(path, basePath, pathLen); + + struct stat dummy; + for (int i = 1; ; i++) { + if (stat(path, &dummy) != 0) + break; + snprintf(path, pathLen, "%s%d", basePath, i); + } + + mountPoint->UnlockBuffer(); + return B_OK; +} + + status_t swap_file_add(const char* path) { @@ -1340,47 +1438,161 @@ swap_init_post_modules() if (gReadOnlyBootDevice) return; - off_t size = 0; + bool swapEnabled = true; + bool swapAutomatic = true; + off_t swapSize = 0; + VolumeInfo selectedVolume = {}; void* settings = load_driver_settings("virtual_memory"); + if (settings != NULL) { - if (!get_driver_boolean_parameter(settings, "vm", false, false)) { - unload_driver_settings(settings); - return; + // We pass a lot of information on the swap device, this is mostly to + // ensure that we are dealing with the same device that was configured. + + // TODO: Some kind of BFS uuid would be great here :) + const char* enabled = get_driver_parameter(settings, "vm", NULL, NULL); + + if (enabled != NULL) { + swapEnabled = get_driver_boolean_parameter(settings, "vm", + false, false); + + const char* size = get_driver_parameter(settings, "swap_size", + NULL, NULL); + const char* volume = get_driver_parameter(settings, + "swap_volume_name", NULL, NULL); + const char* device = get_driver_parameter(settings, + "swap_volume_device", NULL, NULL); + const char* filesystem = get_driver_parameter(settings, + "swap_volume_filesystem", NULL, NULL); + const char* capacity = get_driver_parameter(settings, + "swap_volume_capacity", NULL, NULL); + + if (size != NULL && device != NULL && volume != NULL + && filesystem != NULL && capacity != NULL) { + // User specified a size / volume + swapAutomatic = false; + swapSize = atoll(size); + strncpy(selectedVolume.name, volume, + sizeof(selectedVolume.name)); + strncpy(selectedVolume.device, device, + sizeof(selectedVolume.device)); + strncpy(selectedVolume.filesystem, filesystem, + sizeof(selectedVolume.filesystem)); + selectedVolume.capacity = atoll(capacity); + } } - - const char* string = get_driver_parameter(settings, "swap_size", NULL, - NULL); - size = string ? atoll(string) : 0; - unload_driver_settings(settings); - } else { - size = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2; } - if (size < B_PAGE_SIZE) + if (swapAutomatic) { + swapEnabled = true; + swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2; + } + + if (!swapEnabled || swapSize < B_PAGE_SIZE) return; - int fd = open("/var/swap", O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | S_IWUSR); + dev_t dev = -1; + + if (!swapAutomatic) { + KDiskDeviceManager::CreateDefault(); + KDiskDeviceManager* manager = KDiskDeviceManager::Default(); + PartitionScorer visitor(selectedVolume); + + KDiskDevice* device; + int32 cookie = 0; + while ((device = manager->NextDevice(&cookie)) != NULL) { + if (device->IsReadOnlyMedia() || device->IsWriteOnce() + || device->IsRemovable()) { + continue; + } + device->VisitEachDescendant(&visitor); + } + + if (!visitor.fBestPartition) { + dprintf("%s: Can't find configured swap partition '%s'\n", + __func__, selectedVolume.name); + } else { + if (visitor.fBestPartition->IsMounted()) + dev = visitor.fBestPartition->VolumeID(); + else { + KPath devPath, mountPoint; + visitor.fBestPartition->GetPath(&devPath); + get_mount_point(visitor.fBestPartition, &mountPoint); + const char* mountPath = mountPoint.Path(); + mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO); + dev = _kern_mount(mountPath, devPath.Path(), + NULL, 0, NULL, 0); + if (dev < 0) { + dprintf("%s: Can't mount configured swap partition '%s'\n", + __func__, selectedVolume.name); + } + } + } + } + + if (dev < 0) + dev = gBootDevice; + + KPath path; + struct fs_info info; + _kern_read_fs_info(dev, &info); + if (dev == gBootDevice) + path = kDefaultSwapPath; + else { + vfs_entry_ref_to_path(info.dev, info.root, + ".", path.LockBuffer(), path.BufferSize()); + path.UnlockBuffer(); + path.Append("swap"); + } + + const char* swapPath = path.Path(); + + // Swap size limits prevent oversized swap files + off_t existingSwapSize = 0; + struct stat existingSwapStat; + if (stat(swapPath, &existingSwapStat) == 0) + existingSwapSize = existingSwapStat.st_size; + + off_t freeSpace = info.free_blocks * info.block_size + existingSwapSize; + off_t maxSwap = freeSpace; + if (swapAutomatic) { + // Adjust automatic swap to a maximum of 25% of the free space + maxSwap = (off_t)(0.25 * freeSpace); + } else { + // If user specified, leave 10% of the disk free + maxSwap = freeSpace - (off_t)(0.10 * freeSpace); + dprintf("%s: Warning: User specified swap file consumes over 90%% of " + "the available free space, limiting to 90%%\n", __func__); + } + + if (swapSize > maxSwap) + swapSize = maxSwap; + + // Create swap file + int fd = open(swapPath, O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | S_IWUSR); if (fd < 0) { - dprintf("Can't open/create /var/swap: %s\n", strerror(errno)); + dprintf("%s: Can't open/create %s: %s\n", __func__, + swapPath, strerror(errno)); return; } struct stat stat; - stat.st_size = size; + stat.st_size = swapSize; status_t error = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat), B_STAT_SIZE | B_STAT_SIZE_INSECURE); if (error != B_OK) { - dprintf("Failed to resize /var/swap to %lld bytes: %s\n", size, - strerror(error)); + dprintf("%s: Failed to resize %s to %lld bytes: %s\n", __func__, + swapPath, swapSize, strerror(error)); } close(fd); - error = swap_file_add("/var/swap"); - if (error != B_OK) - dprintf("Failed to add swap file /var/swap: %s\n", strerror(error)); + error = swap_file_add(swapPath); + if (error != B_OK) { + dprintf("%s: Failed to add swap file %s: %s\n", __func__, swapPath, + strerror(error)); + } } From 3e01905acab8ae1775fe35e2dab4e7ad70f7e581 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 4 Sep 2012 13:27:33 -0500 Subject: [PATCH 17/21] Kernel VM: Add compatibility logic * If old-format swap config file found, parse it properly --- src/system/kernel/vm/VMAnonymousCache.cpp | 28 +++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp b/src/system/kernel/vm/VMAnonymousCache.cpp index a9d4bc8354..4c597d9f8a 100644 --- a/src/system/kernel/vm/VMAnonymousCache.cpp +++ b/src/system/kernel/vm/VMAnonymousCache.cpp @@ -1441,6 +1441,8 @@ swap_init_post_modules() bool swapEnabled = true; bool swapAutomatic = true; off_t swapSize = 0; + + dev_t swapDeviceID = -1; VolumeInfo selectedVolume = {}; void* settings = load_driver_settings("virtual_memory"); @@ -1479,6 +1481,11 @@ swap_init_post_modules() strncpy(selectedVolume.filesystem, filesystem, sizeof(selectedVolume.filesystem)); selectedVolume.capacity = atoll(capacity); + } else if (size != NULL) { + // Older file format, no location information (assume /var/swap) + swapAutomatic = false; + swapSize = atoll(size); + swapDeviceID = gBootDevice; } } unload_driver_settings(settings); @@ -1492,9 +1499,8 @@ swap_init_post_modules() if (!swapEnabled || swapSize < B_PAGE_SIZE) return; - dev_t dev = -1; - - if (!swapAutomatic) { + if (!swapAutomatic && swapDeviceID < 0) { + // If user-specified swap, and no swap device has been chosen yet... KDiskDeviceManager::CreateDefault(); KDiskDeviceManager* manager = KDiskDeviceManager::Default(); PartitionScorer visitor(selectedVolume); @@ -1514,16 +1520,16 @@ swap_init_post_modules() __func__, selectedVolume.name); } else { if (visitor.fBestPartition->IsMounted()) - dev = visitor.fBestPartition->VolumeID(); + swapDeviceID = visitor.fBestPartition->VolumeID(); else { KPath devPath, mountPoint; visitor.fBestPartition->GetPath(&devPath); get_mount_point(visitor.fBestPartition, &mountPoint); const char* mountPath = mountPoint.Path(); mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO); - dev = _kern_mount(mountPath, devPath.Path(), + swapDeviceID = _kern_mount(mountPath, devPath.Path(), NULL, 0, NULL, 0); - if (dev < 0) { + if (swapDeviceID < 0) { dprintf("%s: Can't mount configured swap partition '%s'\n", __func__, selectedVolume.name); } @@ -1531,13 +1537,15 @@ swap_init_post_modules() } } - if (dev < 0) - dev = gBootDevice; + if (swapDeviceID < 0) + swapDeviceID = gBootDevice; + + // We now have a swapDeviceID which is used for the swap file KPath path; struct fs_info info; - _kern_read_fs_info(dev, &info); - if (dev == gBootDevice) + _kern_read_fs_info(swapDeviceID, &info); + if (swapDeviceID == gBootDevice) path = kDefaultSwapPath; else { vfs_entry_ref_to_path(info.dev, info.root, From 4517ef57289459f01979c81969587cc1abcbdd9f Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 4 Sep 2012 15:35:10 -0500 Subject: [PATCH 18/21] Kernel VM: A few changes as per Axel in #7742 * Avoid floating point numbers in the kernel * Warning would always show if custom swap file in use * Don't change a custom swap file size if low space occurs * Ram > 1GB? Don't double the memory for the automatic size --- src/system/kernel/vm/VMAnonymousCache.cpp | 33 +++++++++++------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp b/src/system/kernel/vm/VMAnonymousCache.cpp index 4c597d9f8a..ae0d9799d5 100644 --- a/src/system/kernel/vm/VMAnonymousCache.cpp +++ b/src/system/kernel/vm/VMAnonymousCache.cpp @@ -1493,7 +1493,11 @@ swap_init_post_modules() if (swapAutomatic) { swapEnabled = true; - swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2; + swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE; + if (swapSize <= (1024 * 1024 * 1024)) { + // Memory under 1GB? double the swap + swapSize *= 2; + } } if (!swapEnabled || swapSize < B_PAGE_SIZE) @@ -1557,25 +1561,18 @@ swap_init_post_modules() const char* swapPath = path.Path(); // Swap size limits prevent oversized swap files - off_t existingSwapSize = 0; - struct stat existingSwapStat; - if (stat(swapPath, &existingSwapStat) == 0) - existingSwapSize = existingSwapStat.st_size; - - off_t freeSpace = info.free_blocks * info.block_size + existingSwapSize; - off_t maxSwap = freeSpace; if (swapAutomatic) { - // Adjust automatic swap to a maximum of 25% of the free space - maxSwap = (off_t)(0.25 * freeSpace); - } else { - // If user specified, leave 10% of the disk free - maxSwap = freeSpace - (off_t)(0.10 * freeSpace); - dprintf("%s: Warning: User specified swap file consumes over 90%% of " - "the available free space, limiting to 90%%\n", __func__); - } + off_t existingSwapSize = 0; + struct stat existingSwapStat; + if (stat(swapPath, &existingSwapStat) == 0) + existingSwapSize = existingSwapStat.st_size; - if (swapSize > maxSwap) - swapSize = maxSwap; + off_t freeSpace = info.free_blocks * info.block_size + existingSwapSize; + + // Adjust automatic swap to a maximum of 25% of the free space + if (swapSize > (freeSpace / 4)) + swapSize = (freeSpace / 4); + } // Create swap file int fd = open(swapPath, O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | S_IWUSR); From aa8be1fc17999db0f3ef74b34c23eacb8329edd8 Mon Sep 17 00:00:00 2001 From: Scott McCreary Date: Tue, 4 Sep 2012 21:19:22 -0700 Subject: [PATCH 19/21] Update several more packages for R1A4 --- build/jam/OptionalBuildFeatures | 36 +++--- build/jam/OptionalLibPackages | 204 ++++++++++++++++---------------- build/jam/OptionalPackages | 112 +++++++++--------- 3 files changed, 176 insertions(+), 176 deletions(-) diff --git a/build/jam/OptionalBuildFeatures b/build/jam/OptionalBuildFeatures index 2e6a0bdeea..6028a25479 100644 --- a/build/jam/OptionalBuildFeatures +++ b/build/jam/OptionalBuildFeatures @@ -66,8 +66,8 @@ if $(HAIKU_BUILD_FEATURE_SSL) { # ICU # Note ICU isn't actually optional, but is still an external package -HAIKU_ICU_GCC_2_PACKAGE = icu-4.8.1-x86-gcc2-2011-11-02a.zip ; -HAIKU_ICU_GCC_4_PACKAGE = icu-4.8.1-x86-gcc4-2011-11-02.zip ; +HAIKU_ICU_GCC_2_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc2-2012-08-29.zip ; +HAIKU_ICU_GCC_4_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc4-2012-08-29.zip ; HAIKU_ICU_PPC_PACKAGE = icu-4.8.1-ppc-2011-08-20.zip ; if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 { @@ -224,19 +224,19 @@ if $(TARGET_ARCH) = x86 { local ffmpegBaseURL = $(baseURL)/lib ; if $(TARGET_ARCH) = x86 { if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-x86-gcc4-2012-03-28.zip ; - HAIKU_SPEEX_FILE = speex-1.2rc1-x86-gcc4-2012-03-12.zip ; - HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-x86-gcc4-2012-03-12.zip ; - HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-x86-gcc4-2012-03-12.zip ; - HAIKU_LIBOGG_FILE = libogg-1.3.0-x86-gcc4-2012-03-12.zip ; - HAIKU_LIBVPX_FILE = libvpx-1.0.0-x86-gcc4-2012-03-14.zip ; + HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc4-2012-09-02.zip ; + HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip ; + HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip ; + HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip ; + HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip ; + HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc4-2012-09-02.zip ; } else { - HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-x86-gcc2-2012-03-28.zip ; - HAIKU_SPEEX_FILE = speex-1.2rc1-x86-gcc2-2012-03-11.zip ; - HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-x86-gcc2-2012-03-11.zip ; - HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-x86-gcc2-2012-03-11.zip ; - HAIKU_LIBOGG_FILE = libogg-1.3.0-x86-gcc2-2012-03-11.zip ; - HAIKU_LIBVPX_FILE = libvpx-1.0.0-x86-gcc2-2012-03-14.zip ; + HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc2-2012-08-30.zip ; + HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip ; + HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip ; + HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip ; + HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip ; + HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc2-2012-08-29.zip ; } local ffmpegZipFile = [ DownloadFile $(HAIKU_FFMPEG_FILE) @@ -346,9 +346,9 @@ if $(TARGET_ARCH) = x86 { local mikmodBaseURL = http://haiku-files.org/files/optional-packages/lib ; if $(TARGET_ARCH) = x86 { if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip ; + HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip ; } else { - HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip ; + HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip ; } local mikmodZipFile = [ DownloadFile $(HAIKU_MIKMOD_FILE) @@ -380,7 +380,7 @@ if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 { if $(TARGET_ARCH) = ppc { HAIKU_FREETYPE_FILE = freetype-2.4.9-ppc-gcc4-2012-06-26.zip ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_FREETYPE_FILE = freetype-2.4.9-x86-gcc4-2012-06-15.zip ; + HAIKU_FREETYPE_FILE = freetype-2.4.9-r1a4-x86-gcc4-2012-09-02.zip ; } else { HAIKU_FREETYPE_FILE = freetype-2.4.9-r1a4-x86-gcc2-2012-08-28.zip ; } @@ -425,7 +425,7 @@ if [ IsOptionalHaikuImagePackageAdded TagLib ] { HAIKU_BUILD_FEATURE_TAGLIB = 1 ; } -HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a3-x86-gcc2-2011-05-20.zip ; +HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ; HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ; if $(HAIKU_BUILD_FEATURE_TAGLIB) { diff --git a/build/jam/OptionalLibPackages b/build/jam/OptionalLibPackages index d1902eae4f..b02eadab6a 100644 --- a/build/jam/OptionalLibPackages +++ b/build/jam/OptionalLibPackages @@ -83,13 +83,13 @@ if [ IsOptionalHaikuImagePackageAdded fribidi ] { Echo "No optional package fribidi available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - fribidi-0.19.2-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/fribidi-0.19.2-r1a3-x86-gcc4-2011-05-26.zip + fribidi-0.19.2-r1a4-x86-gcc4-2012-09-01.zip + : $(baseURL)/lib/fribidi-0.19.2-r1a4-x86-gcc4-2012-09-01.zip : : true ; } else { InstallOptionalHaikuImagePackage - fribidi-0.19.2-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/fribidi-0.19.2-r1a3-x86-gcc2-2011-05-19.zip + fribidi-0.19.2-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/fribidi-0.19.2-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -101,13 +101,13 @@ if [ IsOptionalHaikuImagePackageAdded lcms ] { Echo "No optional package lcms available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - lcms-2.1-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/lcms-2.1-r1a3-x86-gcc4-2011-05-26.zip + lcms-2.1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/lcms-2.1-r1a4-x86-gcc4-2012-09-02.zip : : true ; } else { InstallOptionalHaikuImagePackage - lcms-2.1-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/lcms-2.1-r1a3-x86-gcc2-2011-05-19.zip + lcms-2.1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/lcms-2.1-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -119,13 +119,13 @@ if [ IsOptionalHaikuImagePackageAdded libart_lgpl ] { Echo "No optional package libart_lgpl available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libart_lgpl-2.3.21-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libart_lgpl-2.3.21-r1a3-x86-gcc4-2011-05-26.zip + libart_lgpl-2.3.21-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libart_lgpl-2.3.21-r1a4-x86-gcc4-2012-09-02.zip : : true ; } else { InstallOptionalHaikuImagePackage - libart_lgpl-2.3.21-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libart_lgpl-2.3.21-r1a3-x86-gcc2-2011-05-19.zip + libart_lgpl-2.3.21-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libart_lgpl-2.3.21-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -137,13 +137,13 @@ if [ IsOptionalHaikuImagePackageAdded libmad ] { Echo "No optional package libmad available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libmad-0.15.1b-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libmad-0.15.1b-r1a3-x86-gcc4-2011-05-26.zip + libmad-0.15.1b-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libmad-0.15.1b-r1a4-x86-gcc4-2012-09-02.zip : : true ; } else { InstallOptionalHaikuImagePackage - libmad-0.15.1b-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libmad-0.15.1b-r1a3-x86-gcc2-2011-05-19.zip + libmad-0.15.1b-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libmad-0.15.1b-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -155,13 +155,13 @@ if [ IsOptionalHaikuImagePackageAdded libmikmod ] { Echo "No optional package libmikmod available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip + libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip : : true ; } else { InstallOptionalHaikuImagePackage - libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip + libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -173,13 +173,13 @@ if [ IsOptionalHaikuImagePackageAdded libmodplug ] { Echo "No optional package libmodplug available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libmodplug-0.8.8.1-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libmodplug-0.8.8.1-r1a3-x86-gcc4-2011-05-26.zip + libmodplug-0.8.8.4-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libmodplug-0.8.8.4-r1a4-x86-gcc4-2012-09-02.zip : : true ; } else { InstallOptionalHaikuImagePackage - libmodplug-0.8.8.1-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libmodplug-0.8.8.1-r1a3-x86-gcc2-2011-05-19.zip + libmodplug-0.8.8.4-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libmodplug-0.8.8.4-r1a4-x86-gcc2-2012-08-29.zip : : true ; } } @@ -191,13 +191,13 @@ if [ IsOptionalHaikuImagePackageAdded libpaper ] { Echo "No optional package libpaper available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libpaper-1.1.24-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libpaper-1.1.24-r1a3-x86-gcc4-2011-05-26.zip + libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip + : $(baseURL)/lib/libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip : : true ; } else { InstallOptionalHaikuImagePackage - libpaper-1.1.24-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libpaper-1.1.24-r1a3-x86-gcc2-2011-05-19.zip + libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip + : $(baseURL)/lib/libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip : : true ; } } @@ -227,78 +227,78 @@ if [ IsOptionalHaikuImagePackageAdded SDLLibs ] { Echo "No optional package SDLLibs available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libsdl-1.2.15-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/libsdl-1.2.15-x86-gcc4-2012-05-31.zip ; + libsdl-1.2.15-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libsdl-1.2.15-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - guilib-1.2.1-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/guilib-1.2.1-x86-gcc4-2012-05-31.zip ; + guilib-1.2.1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/guilib-1.2.1-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-gfx-2.0.23-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-gfx-2.0.23-x86-gcc4-2012-05-31.zip ; + sdl-gfx-2.0.23-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-gfx-2.0.23-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-image-1.2.12-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-image-1.2.12-x86-gcc4-2012-05-31.zip ; + sdl-image-1.2.12-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-image-1.2.12-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-mixer-1.2.11-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-mixer-1.2.11-x86-gcc4-2012-05-31.zip ; + sdl-mixer-1.2.11-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-mixer-1.2.11-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-net-1.2.8-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-net-1.2.8-x86-gcc4-2012-05-31.zip ; + sdl-net-1.2.8-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-net-1.2.8-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-sound-1.0.3-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-sound-1.0.3-x86-gcc4-2012-05-31.zip ; + sdl-sound-1.0.3-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-sound-1.0.3-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sdl-rtf-0.1.0-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/sdl-rtf-0.1.0-r1a3-x86-gcc4-2011-05-26.zip ; + sdl-rtf-0.1.0-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/lib/sdl-rtf-0.1.0-r1a4-x86-gcc4-2012-09-03.zip ; InstallOptionalHaikuImagePackage - sdl-ttf-2.0.11-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sdl-ttf-2.0.11-x86-gcc4-2012-05-31.zip ; + sdl-ttf-2.0.11-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sdl-ttf-2.0.11-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - sge-030809-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/sge-030809-x86-gcc4-2012-05-31.zip ; + sge-030809-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/sge-030809-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - smjpeg-0.2.1-x86-gcc4-2012-05-31.zip - : $(baseURL)/lib/smjpeg-0.2.1-x86-gcc4-2012-05-31.zip ; + smjpeg-0.2.1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/smjpeg-0.2.1-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - smpeg-0.4.5-x86-gcc4-2011-05-31.zip - : $(baseURL)/lib/smpeg-0.4.5-x86-gcc4-2012-05-31.zip ; + smpeg-0.4.5-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/smpeg-0.4.5-r1a4-x86-gcc4-2012-09-02.zip ; } else { InstallOptionalHaikuImagePackage - libsdl-1.2.15-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/libsdl-1.2.15-x86-gcc2-2012-06-24.zip ; + libsdl-1.2.15-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libsdl-1.2.15-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - guilib-1.2.1-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/guilib-1.2.1-x86-gcc2-2012-06-24.zip ; + guilib-1.2.1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/guilib-1.2.1-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sdl-gfx-2.0.23-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sdl-gfx-2.0.23-x86-gcc2-2012-06-24.zip ; + sdl-gfx-2.0.23-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sdl-gfx-2.0.23-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sdl-image-1.2.12-x86-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sdl-image-1.2.12-x86-gcc2-2012-06-24.zip ; + sdl-image-1.2.12-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sdl-image-1.2.12-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sdl-mixer-1.2.11-x86-gcc2-2012-06-25.zip - : $(baseURL)/lib/sdl-mixer-1.2.11-x86-gcc2-2012-06-25.zip ; + sdl-mixer-1.2.11-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sdl-mixer-1.2.11-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sdl-net-1.2.8-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sdl-net-1.2.8-x86-gcc2-2012-06-24.zip ; + sdl-net-1.2.8-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sdl-net-1.2.8-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sdl-sound-1.0.3-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sdl-sound-1.0.3-x86-gcc2-2012-06-24.zip ; + sdl-sound-1.0-hg-r1a4-x86-gcc2-2012-08-30.zip + : $(baseURL)/lib/sdl-sound-1.0-hg-r1a4-x86-gcc2-2012-08-30.zip ; InstallOptionalHaikuImagePackage sdl-rtf-0.1.0-r1a3-x86-gcc2-2011-05-20.zip : $(baseURL)/lib/sdl-rtf-0.1.0-r1a3-x86-gcc2-2011-05-20.zip ; InstallOptionalHaikuImagePackage - sdl-ttf-2.0.11-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sdl-ttf-2.0.11-x86-gcc2-2012-06-24.zip ; + sdl-ttf-2.0.11-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sdl-ttf-2.0.11-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - sge-030809-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/sge-030809-x86-gcc2-2012-06-24.zip ; + sge-030809-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/sge-030809-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - smjpeg-0.2.1-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/smjpeg-0.2.1-x86-gcc2-2012-06-24.zip ; + smjpeg-0.2.1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/smjpeg-0.2.1-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - smpeg-0.4.5-x86-gcc2-2012-06-24.zip - : $(baseURL)/lib/smpeg-0.4.5-x86-gcc2-2012-06-24.zip ; + smpeg-0.4.5-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/smpeg-0.4.5-r1a4-x86-gcc2-2012-08-29.zip ; } } @@ -309,48 +309,48 @@ if [ IsOptionalHaikuImagePackageAdded XiphLibs ] { Echo "No optional package XiphLibs available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - flac-1.2.1-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/flac-1.2.1-r1a3-x86-gcc4-2011-05-26.zip ; + flac-1.2.1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/flac-1.2.1-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - libao-1.0.0-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libao-1.0.0-r1a3-x86-gcc4-2011-05-26.zip ; + libao-1.0.0-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libao-1.0.0-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - libogg-1.2.2-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libogg-1.2.2-r1a3-x86-gcc4-2011-05-26.zip ; + libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - libtheora-1.1.1-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libtheora-1.1.1-r1a3-x86-gcc4-2011-05-26.zip ; + libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - libvorbis-1.3.2-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/libvorbis-1.3.2-r1a3-x86-gcc4-2011-05-26.zip ; + libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - speex-1.2rc1-x86-gcc4-2012-03-12.zip - : $(baseURL)/lib/speex-1.2rc1-x86-gcc4-2012-03-12.zip ; + speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip ; InstallOptionalHaikuImagePackage - vorbis-tools-1.4.0-r1a3-x86-gcc4-2011-05-26.zip - : $(baseURL)/lib/vorbis-tools-1.4.0-r1a3-x86-gcc4-2011-05-26.zip ; + vorbis-tools-1.4.0-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/vorbis-tools-1.4.0-r1a4-x86-gcc4-2012-09-02.zip ; } else { InstallOptionalHaikuImagePackage - flac-1.2.1-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/flac-1.2.1-r1a3-x86-gcc2-2011-05-19.zip ; + flac-1.2.1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/flac-1.2.1-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - libao-1.0.0-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libao-1.0.0-r1a3-x86-gcc2-2011-05-19.zip ; + libao-1.0.0-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libao-1.0.0-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - libogg-1.2.2-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libogg-1.2.2-r1a3-x86-gcc2-2011-05-19.zip ; + libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - libtheora-1.1.1-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libtheora-1.1.1-r1a3-x86-gcc2-2011-05-19.zip ; + libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - libvorbis-1.3.2-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/libvorbis-1.3.2-r1a3-x86-gcc2-2011-05-19.zip ; + libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - speex-1.2-git-r1a3-x86-gcc2-2011-05-26.zip - : $(baseURL)/lib/speex-1.2-git-r1a3-x86-gcc2-2011-05-26.zip ; + speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip ; InstallOptionalHaikuImagePackage - vorbis-tools-1.4.0-r1a3-x86-gcc2-2011-05-19.zip - : $(baseURL)/lib/vorbis-tools-1.4.0-r1a3-x86-gcc2-2011-05-19.zip ; + vorbis-tools-1.4.0-r1a4-x86-gcc2-2012-08-29.zip + : $(baseURL)/lib/vorbis-tools-1.4.0-r1a4-x86-gcc2-2012-08-29.zip ; } } diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index b88a217155..a5961bb159 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -384,12 +384,12 @@ if [ IsOptionalHaikuImagePackageAdded Caya ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 || $(isHybridBuild) { InstallOptionalHaikuImagePackage - caya-264-x86-gcc4-2012-05-20.zip - : $(baseURL)/caya-264-x86-gcc4-2012-05-20.zip + caya-264-r1a4-x86-gcc4-2012-08-31.zip + : $(baseURL)/caya-264-r1a4-x86-gcc4-2012-08-31.zip : : true ; InstallOptionalHaikuImagePackage - caya-gpl-protocols-35-x86-gcc4-2012-05-20.zip - : $(baseURL)/caya-gpl-protocols-35-x86-gcc4-2012-05-20.zip + caya-gpl-protocols-35-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/caya-gpl-protocols-35-r1a4-x86-gcc4-2012-09-03.zip : : true ; AddSymlinkToHaikuImage home config be Applications : /boot/apps/Caya/Caya ; @@ -527,13 +527,13 @@ if [ IsOptionalHaikuImagePackageAdded Ctags ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - ctags-5.8-x86-gcc4-2012-01-23.zip - : $(baseURL)/ctags-5.8-x86-gcc4-2012-01-23.zip + ctags-5.8-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/ctags-5.8-r1a4-x86-gcc4-2012-08-30.zip : : true ; } else { InstallOptionalHaikuImagePackage - ctags-5.8-x86-gcc2-2010-05-24.zip - : $(baseURL)/ctags-5.8-x86-gcc2-2010-05-24.zip + ctags-5.8-r1a4-x86-gcc2-2012-09-03.zip + : $(baseURL)/ctags-5.8-r1a4-x86-gcc2-2012-09-03.zip : : true ; } } @@ -881,12 +881,12 @@ if [ IsOptionalHaikuImagePackageAdded DMIDecode ] { Echo "No optional package DMIDecode available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - dmidecode-2.11-x86-gcc4-2011-11-02.zip - : http://revolf.free.fr/beos/dmidecode-2.11-x86-gcc4-2011-11-02.zip ; + dmidecode-2.11-r1a4-x86-gcc4-2012-09-04.zip + : $(baseURL)/dmidecode-2.11-r1a4-x86-gcc4-2012-09-04.zip ; } else { InstallOptionalHaikuImagePackage - dmidecode-2.11-x86-gcc2-2011-11-02.zip - : http://revolf.free.fr/beos/dmidecode-2.11-x86-gcc2-2011-11-02.zip ; + dmidecode-2.11-r1a4-x86-gcc2-2012-09-03.zip + : $(baseURL)/dmidecode-2.11-r1a4-x86-gcc2-2012-09-03.zip ; } } @@ -903,8 +903,8 @@ if [ IsOptionalHaikuImagePackageAdded Doxygen ] { : : true ; } else { InstallOptionalHaikuImagePackage - doxygen-1.6.3-x86-gcc2-2010-05-17.zip - : $(baseURL)/doxygen-1.6.3-x86-gcc2-2010-05-17.zip + doxygen-1.6.3-r1a4-x86-gcc2-2012-09-05.zip + : $(baseURL)/doxygen-1.6.3-r1a4-x86-gcc2-2012-09-05.zip : : true ; } } @@ -1014,8 +1014,8 @@ if [ IsOptionalHaikuImagePackageAdded GitDoc ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - gitdoc-1.7.10.2-x86-gcc4-2012-06-20.zip - : $(baseURL)/gitdoc-1.7.10.2-x86-gcc4-2012-06-20.zip + gitdoc-1.7.10.2-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/gitdoc-1.7.10.2-r1a4-x86-gcc4-2012-09-03.zip : : true ; } else { InstallOptionalHaikuImagePackage @@ -1209,11 +1209,11 @@ if [ IsOptionalHaikuImagePackageAdded LibLayout ] { if $(TARGET_ARCH) != x86 { Echo "No optional package LibLayout available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { - InstallOptionalHaikuImagePackage liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip - : $(baseURL)/liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip ; + InstallOptionalHaikuImagePackage liblayout-1.4.1-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/liblayout-1.4.1-r1a4-x86-gcc4-2012-08-30.zip ; } else { - InstallOptionalHaikuImagePackage liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip - : $(baseURL)/liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip ; + InstallOptionalHaikuImagePackage liblayout-1.4.0-gcc2-2009-03-08.zip + : $(baseURL)/liblayout-1.4.0-gcc2-2009-03-08.zip ; } } @@ -1224,12 +1224,12 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] { Echo "No optional package Libmng available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip ; + libmng-1.0.10-r1a4-x86-gcc4-2012-09-02.zip + : $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc4-2012-09-02.zip ; } else { InstallOptionalHaikuImagePackage libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip - : $(baseURL)/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; + : $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; } } @@ -1292,13 +1292,13 @@ if [ IsOptionalHaikuImagePackageAdded Lua ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - lua-5.1.4-x86-gcc4-2010-10-30.zip - : $(baseURL)/lua-5.1.4-x86-gcc4-2010-10-30.zip + lua-5.1.4-3-r1a4-x86-gcc4-2012-09-01.zip + : $(baseURL)/lua-5.1.4-3-r1a4-x86-gcc4-2012-09-01.zip : : true ; } else { InstallOptionalHaikuImagePackage - lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip - : $(baseURL)/lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip + lua-5.1.4-3-r1a4-x86-gcc2-2012-09-01.zip + : $(baseURL)/lua-5.1.4-3-r1a4-x86-gcc2-2012-09-01.zip : : true ; } } @@ -1506,8 +1506,8 @@ if [ IsOptionalHaikuImagePackageAdded P7zip ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - p7zip-9.20.1-x86-gcc4-2012-06-19.zip - : $(baseURL)/p7zip-9.20.1-x86-gcc4-2012-06-19.zip ; + p7zip-9.20.1-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/p7zip-9.20.1-r1a4-x86-gcc4-2012-08-30.zip ; } else { InstallOptionalHaikuImagePackage p7zip-9.20.1-r1a4-x86-gcc2-2012-08-29.zip @@ -1529,8 +1529,8 @@ if [ IsOptionalHaikuImagePackageAdded Paladin ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - paladin-1.3-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/paladin-1.3-r1a3-x86-gcc4-2011-05-24.zip ; + paladin-1.3-r1a4-x86-gcc4-2012-08-30.zip + : $(baseURL)/paladin-1.3-r1a4-x86-gcc4-2012-08-30.zip ; } else { InstallOptionalHaikuImagePackage paladin-1.3-r1a3-x86-gcc2-2011-05-18.zip @@ -1552,8 +1552,8 @@ if [ IsOptionalHaikuImagePackageAdded PCRE ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - libpcre-8.12-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/libpcre-8.12-r1a3-x86-gcc4-2011-05-24.zip ; + libpcre-8.21-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/libpcre-8.21-r1a4-x86-gcc4-2012-09-03.zip ; } else { InstallOptionalHaikuImagePackage libpcre-8.21-r1a4-x86-gcc2-2012-08-28.zip @@ -1571,7 +1571,7 @@ if [ IsOptionalHaikuImagePackageAdded Pe ] { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage pe-2.4.3-600-x86-gcc4-2011-12-18.zip - : $(baseURL)/pe-2.4.3-600-x86-gcc4-2011-12-18.zip ; + : $(baseURL)/pe-2.4.3-hg-r1a4-x86-gcc4-2012-09-04.zip ; } else { InstallOptionalHaikuImagePackage pe-2.4.3-hg-r1a4-x86-gcc2-2012-08-29.zip @@ -1613,8 +1613,8 @@ if [ IsOptionalHaikuImagePackageAdded Puri ] { Echo "No optional package Puri for gcc2" ; } else { InstallOptionalHaikuImagePackage - puri-0.3.9.1-x86-gcc4-2012-08-16.zip - : $(baseURL)/puri-0.3.9.1-x86-gcc4-2012-08-16.zip ; + puri-0.3.9.1-r1a4-x86-gcc4-2012-08-31.zip + : $(baseURL)/puri-0.3.9.1-r1a4-x86-gcc4-2012-08-31.zip ; AddSymlinkToHaikuImage home config settings deskbar Applications : /boot/apps/Puri/Puri ; } @@ -1628,8 +1628,8 @@ if [ IsOptionalHaikuImagePackageAdded Python ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - python-2.6.7-x86-gcc4-2011-06-24.zip - : $(baseURL)/python-2.6.7-x86-gcc4-2011-06-24.zip + python-2.6.8-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/python-2.6.8-r1a4-x86-gcc4-2012-09-03.zip : : true ; } else { InstallOptionalHaikuImagePackage @@ -1648,8 +1648,8 @@ if [ IsOptionalHaikuImagePackageAdded Rsync ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - rsync-3.0.7-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/rsync-3.0.7-r1a3-x86-gcc4-2011-05-24.zip + rsync-3.0.7-r1a4-x86-gcc4-2012-08-31.zip + : $(baseURL)/rsync-3.0.7-r1a4-x86-gcc4-2012-08-31.zip : : true ; } else { InstallOptionalHaikuImagePackage @@ -1667,8 +1667,8 @@ if [ IsOptionalHaikuImagePackageAdded Ruby ] { Echo "No optional package Ruby available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - ruby-1.9.1-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/ruby-1.9.1-r1a3-x86-gcc4-2011-05-24.zip ; + ruby-1.9.1-r1a4-x86-gcc4-2012-08-31.zip + : $(baseURL)/ruby-1.9.1-r1a4-x86-gcc4-2012-08-31.zip ; } else { InstallOptionalHaikuImagePackage ruby-1.9.1-r1a4-x86-gcc2-2012-08-29.zip @@ -1683,8 +1683,8 @@ if [ IsOptionalHaikuImagePackageAdded Sed ] { Echo "No optional package Sed available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - sed-4.2.1-r1a3-x86-gcc4-2011-05-24.zip - : $(baseURL)/sed-4.2.1-r1a3-x86-gcc4-2011-05-24.zip ; + sed-4.2.1-r1a4-x86-gcc4-2012-08-31.zip + : $(baseURL)/sed-4.2.1-r1a4-x86-gcc4-2012-08-31.zip ; } else { InstallOptionalHaikuImagePackage sed-4.2.1-r1a4-x86-gcc2-2012-08-27.zip @@ -1737,12 +1737,12 @@ if [ IsOptionalHaikuImagePackageAdded TagLib ] { Echo "No optional package TagLib available for $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - taglib-1.6.3-r1r3-x86-gcc4-2011-05-24.zip - : $(baseURL)/taglib-1.6.3-r1r3-x86-gcc4-2011-05-24.zip ; + taglib-1.6.3-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/taglib-1.6.3-r1a4-x86-gcc4-2012-09-03.zip ; } else { InstallOptionalHaikuImagePackage - taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip - : $(baseURL)/taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip ; + taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip + : $(baseURL)/taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ; } } @@ -1754,8 +1754,8 @@ if [ IsOptionalHaikuImagePackageAdded Tar ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - tar-1.26-x86-gcc4-2012-06-19.zip - : $(baseURL)/tar-1.26-x86-gcc4-2012-06-19.zip ; + tar-1.26-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/tar-1.26-r1a4-x86-gcc4-2012-09-03.zip ; } else { InstallOptionalHaikuImagePackage tar-1.26-r1a4-x86-gcc2-2012-08-29.zip @@ -1788,8 +1788,8 @@ if [ IsOptionalHaikuImagePackageAdded Transmission ] { } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage - transmission-2.21-r1a3-x86-gcc4-2011-05-27.zip - : $(baseURL)/transmission-2.21-r1a3-x86-gcc4-2011-05-27.zip + transmission-2.21-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/transmission-2.21-r1a4-x86-gcc4-2012-09-03.zip : : true ; } else { InstallOptionalHaikuImagePackage @@ -1882,8 +1882,8 @@ if [ IsOptionalHaikuImagePackageAdded Vision ] { Echo "No optional package Vision available for $(TARGET_ARCH)" ; } else { if $(HAIKU_GCC_VERSION[1]) >= 4 { - InstallOptionalHaikuImagePackage vision-908-x86-gcc4-2012-02-26.zip - : $(baseURL)/vision-908-x86-gcc4-2012-02-26.zip ; + InstallOptionalHaikuImagePackage vision-908-r1a4-x86-gcc4-2012-09-04.zip + : $(baseURL)/vision-908-r1a4-x86-gcc4-2012-09-04.zip ; } else { InstallOptionalHaikuImagePackage vision-908-r1a4-x86-gcc2-2012-08-29.zip @@ -2044,8 +2044,8 @@ if [ IsOptionalHaikuImagePackageAdded XZ-Utils ] { Echo "No optional package XZ-Utils available for $(TARGET_ARCH)" ; } else { InstallOptionalHaikuImagePackage - xz-utils-5.0.1-x86-gcc4-2012-07-18.zip - : $(baseURL)/xz-utils-5.0.1-x86-gcc4-2012-07-18.zip ; + xz-utils-5.0.1-r1a4-x86-gcc4-2012-09-03.zip + : $(baseURL)/xz-utils-5.0.1-r1a4-x86-gcc4-2012-09-03.zip ; AddExpanderRuleToHaikuImage "application/x-xz" : .tar.xz : "tar -Jtvf \\0045s" : "tar -Jxvf \\0045s" From d9cfdbd1e978162c0519703a7bc122a83e33817b Mon Sep 17 00:00:00 2001 From: Scott McCreary Date: Tue, 4 Sep 2012 21:38:00 -0700 Subject: [PATCH 20/21] Fix typo --- build/jam/OptionalPackages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index a5961bb159..5af5efae8b 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -1229,7 +1229,7 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] { } else { InstallOptionalHaikuImagePackage libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip - : $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; + : $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ; } } From e665a8baa6183682e795c24f1fa1dd445c8b0445 Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Wed, 5 Sep 2012 01:07:36 -0400 Subject: [PATCH 21/21] New icons for source code and patch files. Both are from #8867, created by Justin Stressman. The previous source code icon was not friendly to those with green color blindness. I also think it was an ugly green. Fixes #8867 of course. --- src/data/beos_mime/text/x-patch | 20 +++++++++++--------- src/data/beos_mime/text/x-source-code | 20 +++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/data/beos_mime/text/x-patch b/src/data/beos_mime/text/x-patch index 1d0d240cc0..42dfc3eb00 100644 --- a/src/data/beos_mime/text/x-patch +++ b/src/data/beos_mime/text/x-patch @@ -18,15 +18,17 @@ resource(4, "META:EXTENS") message(234) { resource(5, "META:PREF_APP") #'MSIG' "application/x-vnd.beunited.pe"; resource(6, "META:ICON") #'VICN' array { - $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C900B6F5" - $"5CBDDCFFB3FFD7FFBA020106023E49240000000000003CAAAA4940004A3000FF" - $"CCFF897C4FB009040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB" - $"00010101FF85CB520B0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804" + $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C901BFDE" + $"F4BDFFFFFFFFE7EEFB020106023E49240000000000003CAAAA4940004A3000FF" + $"CEE5FF7C7588AD040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB" + $"00010101FF5296CB0A0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804" $"CA28BD82C118B920C51BBB40BF07B8083AB6BC0605AE02B57D3EB9B9C3EFB7BB" $"44BBB751BD75C936CA8EC1B1402F0A093B593D5BBFCDC93E455BC516C5F16046" - $"5B435D4544510A045A425E3F5A3D574008022E40BDB53308023142BE34BC0308" - $"023444C0E5BB5108023746C0D8BD7508023A48C270BDB508023D4A4CBD820802" - $"404CC408BFE6080A03020203000A0001011001178400040A020101000A000100" - $"1001178400040A010100000A04040604080A1815FF01178100040A0404060408" - $"0A18001501178200040A04030907051815FF0117810004" + $"5B435D4544510A045A425E3F5A3D574008022E45373C0802364441390802364B" + $"463B08023A4E4A3E08032D422E4430450803373839393A3B0C0A03020203000A" + $"0001011001178400040A020101000A0001001001178400040A010100000A0403" + $"04060738201B16FF01178100040A0402060438201B001601178200040A040105" + $"38201B16FF01178100040A000108382B1116FF01178100040A00010938231916" + $"FF01178100040A00010838251E16FF01178100040A00010938283116FF011781" + $"0004" }; diff --git a/src/data/beos_mime/text/x-source-code b/src/data/beos_mime/text/x-source-code index f002060a46..e83af7dde3 100644 --- a/src/data/beos_mime/text/x-source-code +++ b/src/data/beos_mime/text/x-source-code @@ -34,15 +34,17 @@ resource(4, "META:EXTENS") message(234) { resource(5, "META:PREF_APP") #'MSIG' "application/x-vnd.beunited.pe"; resource(6, "META:ICON") #'VICN' array { - $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C900B6F5" - $"5CBDDCFFB3FFD7FFBA020106023E49240000000000003CAAAA4940004A3000FF" - $"CCFF897C4FB009040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB" - $"00010101FF85CB520B0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804" + $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C901BFDE" + $"F4BDFFFFFFFFE7EEFB020106023E49240000000000003CAAAA4940004A3000FF" + $"CEE5FF7C7588AD040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB" + $"00010101FF5296CB0A0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804" $"CA28BD82C118B920C51BBB40BF07B8083AB6BC0605AE02B57D3EB9B9C3EFB7BB" $"44BBB751BD75C936CA8EC1B1402F0A093B593D5BBFCDC93E455BC516C5F16046" - $"5B435D4544510A045A425E3F5A3D574008022E40BDB53308023142BE34BC0308" - $"023444C0E5BB5108023746C0D8BD7508023A48C270BDB508023D4A4CBD820802" - $"404CC408BFE6080A03020203000A0001011001178400040A020101000A000100" - $"1001178400040A010100000A04040604080A1815FF01178100040A0404060408" - $"0A18001501178200040A04030907051815FF0117810004" + $"5B435D4544510A045A425E3F5A3D574008022E45373C0802364441390802364B" + $"463B08023A4E4A3E08032D422E4430450803373839393A3B0C0A03020203000A" + $"0001011001178400040A020101000A0001001001178400040A010100000A0403" + $"04060738201B16FF01178100040A0402060438201B001601178200040A040105" + $"38201B16FF01178100040A000108382B1116FF01178100040A00010938231916" + $"FF01178100040A00010838251E16FF01178100040A00010938283116FF011781" + $"0004" };