From 2f31f4a37d3a2ab39a03b6df6df8e296e40355da Mon Sep 17 00:00:00 2001 From: Memnarch Date: Sat, 29 Aug 2015 15:59:03 +0200 Subject: [PATCH] implemented buttons to open homepage, projectpage and bugreportingpage --- DN.JSonFile.CacheInfo.pas | 12 + DN.JSonFile.InstalledInfo.pas | 12 + DN.Package.Intf.pas | 9 + DN.Package.pas | 42 +++ DN.PackageDetailView.dfm | 580 +++++++++++++++++++++++++++++++ DN.PackageDetailView.pas | 41 ++- DN.PackageProvider.GitHub.pas | 15 + DN.PackageProvider.Installed.pas | 3 + DN.Setup.pas | 4 + Icons/Bug.ico | Bin 0 -> 4286 bytes Icons/Github.ico | Bin 0 -> 4286 bytes Icons/Home.ico | Bin 0 -> 4286 bytes 12 files changed, 715 insertions(+), 3 deletions(-) create mode 100644 Icons/Bug.ico create mode 100644 Icons/Github.ico create mode 100644 Icons/Home.ico diff --git a/DN.JSonFile.CacheInfo.pas b/DN.JSonFile.CacheInfo.pas index 75e6cdc..173fafb 100644 --- a/DN.JSonFile.CacheInfo.pas +++ b/DN.JSonFile.CacheInfo.pas @@ -23,6 +23,9 @@ TCacheInfo = class(TJSonFile) FVersions: TStringDynArray; FDownloadLocation: string; FRepositoryName: string; + FProjectUrl: string; + FReportUrl: string; + FHomepageUrl: string; protected procedure Load(const ARoot: TJSONObject); override; procedure Save(const ARoot: TJSONObject); override; @@ -33,6 +36,9 @@ TCacheInfo = class(TJSonFile) property RepositoryName: string read FRepositoryName write FRepositoryName; property DownloadLocation: string read FDownloadLocation write FDownloadLocation; property Versions: TStringDynArray read FVersions write FVersions; + property ProjectUrl: string read FProjectUrl write FProjectUrl; + property HomepageUrl: string read FHomepageUrl write FHomepageUrl; + property ReportUrl: string read FReportUrl write FReportUrl; end; implementation @@ -50,6 +56,9 @@ procedure TCacheInfo.Load(const ARoot: TJSONObject); FDefaultBranch := ReadString(ARoot, 'default_branch'); FRepositoryName := ReadString(ARoot, 'repository_name'); FDownloadLocation := ReadString(ARoot, 'download_location'); + FProjectUrl := ReadString(ARoot, 'project_url'); + FHomepageUrl := ReadString(ARoot, 'homepage_url'); + FReportUrl := ReadString(ARoot, 'report_url'); if ReadArray(ARoot, 'versions', LArray) then begin SetLength(FVersions, LArray.Count); @@ -71,6 +80,9 @@ procedure TCacheInfo.Save(const ARoot: TJSONObject); WriteString(ARoot, 'default_branch', FDefaultBranch); WriteString(ARoot, 'repository_name', FRepositoryName); WriteString(ARoot, 'download_location', FDownloadLocation); + WriteString(ARoot, 'project_url', FProjectUrl); + WriteString(ARoot, 'homepage_url', FHomepageUrl); + WriteString(ARoot, 'report_url',FReportUrl); LArray := WriteArray(ARoot, 'versions'); for LVersion in FVersions do begin diff --git a/DN.JSonFile.InstalledInfo.pas b/DN.JSonFile.InstalledInfo.pas index 9d0367e..580996d 100644 --- a/DN.JSonFile.InstalledInfo.pas +++ b/DN.JSonFile.InstalledInfo.pas @@ -19,6 +19,9 @@ TInstalledInfoFile = class(TInfoFile) FDescription: string; FVersion: string; FAuthor: string; + FProjectUrl: string; + FReportUrl: string; + FHomepageUrl: string; protected procedure Load(const ARoot: TJSONObject); override; procedure Save(const ARoot: TJSONObject); override; @@ -26,6 +29,9 @@ TInstalledInfoFile = class(TInfoFile) property Author: string read FAuthor write FAuthor; property Description: string read FDescription write FDescription; property Version: string read FVersion write FVersion; + property ProjectUrl: string read FProjectUrl write FProjectUrl; + property HomepageUrl: string read FHomepageUrl write FHomepageUrl; + property ReportUrl: string read FReportUrl write FReportUrl; end; implementation @@ -38,6 +44,9 @@ procedure TInstalledInfoFile.Load(const ARoot: TJSONObject); FAuthor := ReadString(ARoot, 'author'); FDescription := ReadString(ARoot, 'description'); FVersion := ReadString(ARoot, 'version'); + FProjectUrl := ReadString(ARoot, 'project_url'); + FHomepageUrl := ReadString(ARoot, 'homepage_url'); + FReportUrl := ReadString(ARoot, 'report_url'); end; procedure TInstalledInfoFile.Save(const ARoot: TJSONObject); @@ -46,6 +55,9 @@ procedure TInstalledInfoFile.Save(const ARoot: TJSONObject); WriteString(ARoot, 'author', FAuthor); WriteString(ARoot, 'description', FDescription); WriteString(ARoot, 'version', FVersion); + WriteString(ARoot, 'project_url', FProjectUrl); + WriteString(ARoot, 'homepage_url', FHomepageUrl); + WriteString(ARoot, 'report_url', FReportUrl); end; end. diff --git a/DN.Package.Intf.pas b/DN.Package.Intf.pas index ba55f97..49acd71 100644 --- a/DN.Package.Intf.pas +++ b/DN.Package.Intf.pas @@ -41,6 +41,12 @@ interface function GetLicenseType: string; procedure SetLicenseText(const Value: string); procedure SetLicenseType(const Value: string); + function GetHomepageUrl: string; + function GetProjectUrl: string; + function GetReportUrl: string; + procedure SetProjectUrl(const Value: string); + procedure SetReportUrl(const Value: string); + procedure SetHomepageUrl(const Value: string); property ID: TGUID read GetID write SetID; property CompilerMin: TCompilerVersion read GetCompilerMin write SetCompilerMin; property CompilerMax: TCompilerVersion read GetCompilerMax write SetCompilerMax; @@ -53,6 +59,9 @@ interface property Versions: TList read GetVersions; property LicenseType: string read GetLicenseType write SetLicenseType; property LicenseText: string read GetLicenseText write SetLicenseText; + property ProjectUrl: string read GetProjectUrl write SetProjectUrl; + property HomepageUrl: string read GetHomepageUrl write SetHomepageUrl; + property ReportUrl: string read GetReportUrl write SetReportUrl; end; implementation diff --git a/DN.Package.pas b/DN.Package.pas index be6e9cd..aeef68b 100644 --- a/DN.Package.pas +++ b/DN.Package.pas @@ -32,6 +32,9 @@ TDNPackage = class(TInterfacedObject, IDNPackage) FVersions: TList; FLicenseType: string; FLicenseText: string; + FProjectUrl: string; + FHomepageUrl: string; + FReportUrl: string; protected function GetID: TGUID; virtual; procedure SetID(const Value: TGUID); virtual; @@ -55,6 +58,12 @@ TDNPackage = class(TInterfacedObject, IDNPackage) function GetLicenseType: string; virtual; procedure SetLicenseText(const Value: string); virtual; procedure SetLicenseType(const Value: string); virtual; + function GetHomepageUrl: string; virtual; + function GetProjectUrl: string; virtual; + function GetReportUrl: string; virtual; + procedure SetProjectUrl(const Value: string); virtual; + procedure SetReportUrl(const Value: string); virtual; + procedure SetHomepageUrl(const Value: string); virtual; public constructor Create(); destructor Destroy(); override; @@ -70,6 +79,9 @@ TDNPackage = class(TInterfacedObject, IDNPackage) property Versions: TList read GetVersions; property LicenseType: string read GetLicenseType write SetLicenseType; property LicenseText: string read GetLicenseText write SetLicenseText; + property ProjectUrl: string read GetProjectUrl write SetProjectUrl; + property HomepageUrl: string read GetHomepageUrl write SetHomepageUrl; + property ReportUrl: string read GetReportUrl write SetReportUrl; end; implementation @@ -115,6 +127,11 @@ function TDNPackage.GetDownloadLocation: string; Result := FDownloadLocation; end; +function TDNPackage.GetHomepageUrl: string; +begin + Result := FHomepageUrl; +end; + function TDNPackage.GetID: TGUID; begin Result := FID; @@ -145,6 +162,16 @@ function TDNPackage.GetPicture: TPicture; Result := FPicture; end; +function TDNPackage.GetProjectUrl: string; +begin + Result := FProjectUrl; +end; + +function TDNPackage.GetReportUrl: string; +begin + Result := FReportUrl; +end; + function TDNPackage.GetVersions: TList; begin Result := FVersions; @@ -175,6 +202,11 @@ procedure TDNPackage.SetDownloadLocation(const Value: string); FDownloadLocation := Value; end; +procedure TDNPackage.SetHomepageUrl(const Value: string); +begin + FHomepageUrl := Value; +end; + procedure TDNPackage.SetID(const Value: TGUID); begin FID := Value; @@ -200,4 +232,14 @@ procedure TDNPackage.SetName(const Value: string); FName := Value; end; +procedure TDNPackage.SetProjectUrl(const Value: string); +begin + FProjectUrl := Value; +end; + +procedure TDNPackage.SetReportUrl(const Value: string); +begin + FReportUrl := Value; +end; + end. diff --git a/DN.PackageDetailView.dfm b/DN.PackageDetailView.dfm index d2f330d..beb3bf8 100644 --- a/DN.PackageDetailView.dfm +++ b/DN.PackageDetailView.dfm @@ -7,6 +7,9 @@ object PackageDetailView: TPackageDetailView ParentBackground = False ParentColor = False TabOrder = 0 + DesignSize = ( + 604 + 348) object pnlHeader: TPanel AlignWithMargins = True Left = 3 @@ -77,6 +80,8 @@ object PackageDetailView: TPackageDetailView ParentBackground = False ShowCaption = False TabOrder = 1 + ExplicitLeft = 27 + ExplicitTop = 105 DesignSize = ( 598 181) @@ -196,6 +201,28 @@ object PackageDetailView: TPackageDetailView Font.Style = [] ParentFont = False end + object btnProject: TButton + Left = 52 + Top = 135 + Width = 38 + Height = 38 + Anchors = [akLeft, akBottom] + ImageIndex = 1 + Images = ImageList1 + TabOrder = 0 + OnClick = btnProjectClick + end + object btnReport: TButton + Left = 96 + Top = 135 + Width = 38 + Height = 38 + Anchors = [akLeft, akBottom] + ImageIndex = 0 + Images = ImageList1 + TabOrder = 1 + OnClick = btnReportClick + end end object btnLicense: TButton Left = 304 @@ -206,4 +233,557 @@ object PackageDetailView: TPackageDetailView TabOrder = 2 OnClick = btnLicenseClick end + object btnHome: TButton + Left = 11 + Top = 272 + Width = 38 + Height = 38 + Anchors = [akLeft, akBottom] + ImageIndex = 2 + Images = ImageList1 + TabOrder = 3 + OnClick = btnHomeClick + end + object ImageList1: TImageList + ColorDepth = cd32Bit + Height = 32 + Width = 32 + Left = 264 + Top = 232 + Bitmap = { + 494C010103000800200020002000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000800000002000000001002000000000000040 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000606060A01D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D + 1DEE5E5E5EAA0000000000000000000000000000000000000000000000005E5E + 5EAB1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE1D1D1DEE6161 + 619B000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000036363639606060A426262628272727296161619B4545454D0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000B0B0B0C5D5D5D73464547DA3131 + 32EC060606070000000000000000000000000000000000000000000000000606 + 0607313132EC464547DA5D5D5D740B0B0B0C0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000303030325959 + 596F000000000000000000000000000000000000000000000000000000000000 + 00005858586C020202FD000000FF5C5C5C775D5D5D78000000FF000000FE5B5B + 5B74000000000000000000000000000000000000000000000000000000000000 + 00005858586B2F2F2F3100000000000000000000000000000000000000000000 + 000000000000000000000000000155555564353435EA141315FF141315FF1413 + 15FF0F0F0F100000000000000000000000000000000000000000000000000F0F + 0F10141315FF141315FF141315FF333234EB5656566500000001000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000005C5C5C770000 + 00FF414141470000000000000000000000000000000000000000000000005050 + 505D000000FE000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FE5151515E0000000000000000000000000000000000000000000000004242 + 4248000000FF5C5C5C7500000000000000000000000000000000000000000000 + 00000000000011111112606060B7141315FF141315FF141315FF141315FF1413 + 15FF0F0F0F100000000000000000000000000000000000000000000000000F0F + 0F10141315FF141315FF141315FF141315FF141315FF606060B7111111120000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000141414151515 + 15F34C4C4CC70000000100000000000000000000000000000000262626271717 + 17F2000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF0A0A0AF93636363A00000000000000000000000000000000010101024545 + 45CF222222EB0D0D0D0E00000000000000000000000000000000000000000000 + 00001E1E1E1F464647DB141315FF141315FF595959C35E5E5E75535353605F5F + 5F78070707080000000000000000000000000000000000000000000000000F0F + 0F10141315FF141315FF141315FF141315FF141315FF141315FF464647DB1E1E + 1E1F000000000000000000000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005F5F + 5F80000000FF4F4F4F5B0000000000000000000000000F0F0F10383838DB0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF323232E00F0F0F100000000000000000000000004F4F4F5C0000 + 00FF5B5B5B730000000000000000000000000000000000000000000000001717 + 1718444445DC141315FF141315FF5B5B5B6F0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000F0F + 0F10141315FF141315FF141315FF141315FF141315FF141315FF141315FF4444 + 45DC171717180000000000000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000B0B + 0B0C2E2E2EE3333333DF0D0D0D0E00000000171717184E4E4EC6000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF4E4E4EC617171718000000000E0E0E0F333333DF2E2E + 2EE3070707080000000000000000000000000000000000000000030303045858 + 59C4141315FF141315FF5F5F60B9000000000F0F0F10555555636060607A4141 + 4146020202030000000000000000000000000000000000000000000000001414 + 1415141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF585859C40303030400000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00004747474F000000FE282828E7525252C00A0A0AF9000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF0A0A0AF9525252C0282828E7000000FE4848 + 48510000000000000000000000000000000000000000000000006161617E1413 + 15FF141315FF141315FF35353538202020213E3D3FE2141315FF141315FF1413 + 15FF3838383C0000000000000000000000000000000000000000000000003A3A + 3A3E141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF6161617E00000000000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000004C4C4C56484848CD363636DD0C0C0CF8000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF0C0C0CF8363636DD565656B94343434A0000 + 000000000000000000000000000000000000000000001D1D1D1E212122F71413 + 15FF151416FE5D5D5D7306060607555456C9141315FF141315FF141315FF1413 + 15FF636363AE0000000100000000000000000000000000000000000000016362 + 63B0141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF212122F71D1D1D1E000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000454545D0000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF484848CC0000000000000000000000000000 + 0000000000000000000000000000000000000000000066666697141315FF1413 + 15FF6464658A3B3B3B3F5A595AC2141315FF141315FF1D1C1EFA646464AA5656 + 5665313131340202020300000000000000000000000000000000030303043636 + 363958585868636363AE1D1C1EFA141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF66666697000000000000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000A0A0A0B040404FC000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF101010F60303030400000000000000000000 + 0000000000000000000000000000000000000C0C0C0D252426F5141315FF1413 + 15FF141315FF141315FF141315FF141315FF646464AB17171718000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000018181819646464AB141315FF141315FF141315FF1413 + 15FF141315FF141315FF252426F50C0C0C0D0000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF484848CC0000000000000000000000000000000000000000000000004848 + 48CC000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000002D2D2D2F000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF2E2E2E3000000000000000000000 + 0000000000000000000000000000000000004E4E4E59141315FF141315FF1413 + 15FF141315FF141315FF141315FF6565658F0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000006565658F141315FF141315FF1413 + 15FF141315FF141315FF141315FF4E4E4E590000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF191919F1555555BB555555BB555555BB555555BB555555BB555555BB1919 + 19F1000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000007070708212121222121 + 212221212122212121223030303361616196000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF606060A232323235222222232121 + 2122212121222121212203030304000000006665669D141315FF141315FF1413 + 15FF141315FF141315FF504F50D1030303040000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000003030304504F50D1141315FF1413 + 15FF141315FF141315FF141315FF6665669D0000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000061616187000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF5F5F5F8200000000505050D0141315FF141315FF1413 + 15FF141315FF141315FF5252525E000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000005252525E141315FF1413 + 15FF141315FF141315FF141315FF505050D00000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000001A1A1A1B535353635555 + 5566555555665555556656565667515151C2000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF515151C156565667555555665555 + 55665555556653535363171717180000000029282AF2141315FF141315FF1413 + 15FF141315FF141315FF15151516000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000015151516141315FF1413 + 15FF141315FF141315FF141315FF29282AF20000000000000000000000000000 + 0000555555BB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5555 + 55BB000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000034343437000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3030303300000000000000000000 + 000000000000000000000000000000000000141315FF141315FF141315FF1413 + 15FF141315FF29282AF200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000029282AF21413 + 15FF141315FF141315FF141315FF141315FF565656685C5C5C775C5C5C775C5C + 5C77383838DB000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF3838 + 38DB5C5C5C775C5C5C775C5C5C77565656690000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000C0C0C0D000000FE000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF060606FB0707070800000000000000000000 + 000000000000000000000000000000000000141315FF141315FF141315FF1413 + 15FF141315FF464647DB00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000444445DC1413 + 15FF141315FF141315FF141315FF141315FF5D5D5DAD000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5DAE0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000363636DD000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF3E3E3ED60000000000000000000000000000 + 000000000000000000000000000000000000232224F6141315FF141315FF1413 + 15FF141315FF403F40E100000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000403F40E11413 + 15FF141315FF141315FF141315FF232224F607070708565656B9000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF565656B9080808090000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001F1F1F20191919F1000000FF000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF1B1B1BF01818181900000000000000000000 + 0000000000000000000000000000000000004B4A4CD6141315FF141315FF1413 + 15FF141315FF19181AFC0E0E0E0F000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000E0E0E0F19181AFC1413 + 15FF141315FF141315FF141315FF4B4A4CD60000000007070708565656B90000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF565656B908080809000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002828282A16161617000000000000 + 0000000000000000000026262627313131E1000000FE0A0A0AF9000000FF0000 + 00FF000000FF000000FF000000FF5D5D5D795D5D5D79000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF3D3D3DD71E1E1E1F000000000000 + 000000000000000000001616161727272729656465A9141315FF141315FF1413 + 15FF141315FF141315FF54545462000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000054545462141315FF1413 + 15FF141315FF141315FF141315FF656465A90000000000000000070707085656 + 56B9000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF565656B90808080900000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000242424EA020202FD515151C25959 + 596F2828282A4646464E242424EA141414F44545454C16161617525252BF0000 + 00FF000000FF000000FF000000FF5656566756565667000000FF000000FF0000 + 00FF000000FF525252C0101010114545454D171717F22B2B2BE5404040461D1D + 1D1E5858586B525252BF040404FC282828E757575767141315FF141315FF1413 + 15FF141315FF141315FF3D3C3EE3111111120000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000111111123E3D3FE2141315FF1413 + 15FF141315FF141315FF141315FF575757670000000000000000000000000707 + 0708575757B8000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF5656 + 56B9080808090000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000303030326161618C323232E00000 + 00FF000000FF000000FF262626E9333333360000000000000000050505065F5F + 5F810A0A0AF9000000FF464646CE0D0D0D0E10101011404040D4000000FF0202 + 02FD616161940606060700000000000000002D2D2D2F2F2F2FE2000000FF0000 + 00FF000000FF2D2D2DE46161618F2B2B2B2D1717171819181AFC141315FF1413 + 15FF141315FF141315FF141315FF5252525F0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000005252525F141315FF141315FF1413 + 15FF141315FF141315FF19181AFC171717180000000000000000000000000000 + 000007070708575757B8000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF565656B90808 + 0809000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000013131 + 31345D5D5D785A5A5A71121212130000000000000000000000000B0B0B0C3737 + 373B1B1B1B1C3737373B03030304000000000000000004040405303030321717 + 17183838383C0A0A0A0B0000000000000000000000000C0C0C0D565656695E5E + 5E7E3838383C01010102000000000000000000000000636363AE141315FF1413 + 15FF141315FF141315FF141315FF323232350000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000032323235141315FF141315FF1413 + 15FF141315FF141315FF636363AE000000000000000000000000000000000000 + 00000000000007070708575757B8000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF565656B9080808090000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000909090A0202 + 02FD525252C056565667252525261010101110101011222222234F4F4F5B5555 + 55BB020202FD0707070800000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000031313134141315FF1413 + 15FF141315FF141315FF141315FF303030320000000000000000000000000E0E + 0E0F272727280101010200000000000000000000000000000000010101022727 + 27280E0E0E0F00000000000000000000000030303032141315FF141315FF1413 + 15FF141315FF141315FF31313134000000000000000000000000000000000000 + 0000000000000000000007070708575757B8000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF565656B908080809000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000004545 + 45D0000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF454545CF0000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000006565669E1413 + 15FF141315FF141315FF141315FF5050505C0000000006060607555555633737 + 37E8141315FF272728F34E4D4ED25A5A5BC15A5A5BC14E4D4ED2272728F31413 + 15FF373737E85555556306060607000000005050505C141315FF141315FF1413 + 15FF141315FF6565669E00000000000000000000000000000000000000000000 + 000000000000000000000000000007070708575757B8000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF565656B90808080900000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005151 + 515F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF5151515E0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000101010114241 + 43DF141315FF141315FF141315FF4B4A4CD6636364AD2B2A2BF1141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF2B2A2BF1636364AD4B4A4CD6141315FF141315FF1413 + 15FF424143DF1010101100000000000000000000000000000000000000000000 + 00000000000000000000000000000000000007070708575757B8000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF565656B9080808090000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000525252C0000000FF000000FF000000FF000000FF000000FF000000FF5757 + 57B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003131 + 31332B2A2BF1141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF2B2A + 2BF1313131330000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000007070708575757B80000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF565656B908080809000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002525 + 2526212121EC626262934F4F4FC40E0E0EF70C0C0CF84E4E4EC6616161942626 + 26E81D1D1D1E0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003D3D3D422B2A2BF1141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF2B2A2BF13D3D + 3D42000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000070707085757 + 57B8000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF565656B90808080900000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000003838383C3232 + 32E05F5F5F800000000000000000000000000000000000000000000000006060 + 6085383838DB3636363900000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000002F2F2F31434243DE141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF434243DE2F2F2F310000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000707 + 0708575757B8000000FF000000FF000000FF000000FF000000FF000000FF5656 + 56B9080808090000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000014646464E4B4B4B555151515E5A5A5A70555555BB212121EC5555 + 5565000000000000000000000000000000000000000000000000000000000000 + 0000565656671C1C1CEF555555BC5C5C5C765151515E4B4B4B554646464E0000 + 0001000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000E0E0E0F6665669B151416FE141315FF141315FF1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF141315FF141315FF151416FE6665669B0E0E0E0F000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000007070708575757B8000000FF000000FF000000FF000000FF565656B90808 + 0809000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000909090A5B5B5BB1555555BB5D5D5DAD6161618C5151515F0B0B0B0C0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001313131455555566616161915E5E5EA9555555BB5B5B5BB10808 + 0809000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002F2F2F31656465A91B1A1CFB1413 + 15FF141315FF141315FF141315FF141315FF141315FF141315FF141315FF1413 + 15FF141315FF1B1A1CFB656465A92F2F2F310000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000007070708575757B8000000FF000000FF565656B9080808090000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000131313145555 + 5563656565A44E4D4ED2272728F3141315FF141315FF272728F34E4D4ED26565 + 65A4555555631313131400000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000040404055E5E5EA95E5E5EAA05050506000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000080000000200000000100010000000000000200000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFFFFFFFFFFF007E00F00000000 + FFF81FFFFF07E0FFF007E00F00000000CFF00FF3FC07E03FF007E00F00000000 + C7E007E3F807E01FF007E00F00000000C3C003C3F007E00FF007E00F00000000 + E38001C7E0FFE007F007E00F00000000E1000087C107E003F007E00F00000000 + F000000FC007E003F007E00F00000000F800001F8003C001F007E00F00000000 + FF0000FF8003C001F007E00F00000000FE00007F003FFC00F007E00F00000000 + FE00007F00FFFF00F000000F000000008000000100FFFF00F000000F00000000 + 8000000101FFFF80F000000F000000008000000101FFFF80F000000F00000000 + FE00007F03FFFFC00000000000000000FE00007F03FFFFC00000000000000000 + FF0000FF03FFFFC00000000000000000FE00007F01FFFF808000000100000000 + 3C00003C01FFFF80C0000003000000000000000000FFFF00E000000700000000 + 00C0030000FFFF00F000000F00000000C1C1838380FFFF01F800001F00000000 + FFC003FF80E3C701FC00003F00000000FFE007FFC0800103FE00007F00000000 + FFE007FFC0000003FF0000FF00000000FFF00FFFE0000007FF8001FF00000000 + FFE007FFF000000FFFC003FF00000000FFC7E3FFF800001FFFE007FF00000000 + F00FF00FFC00003FFFF00FFF00000000F01FF80FFF0000FFFFF81FFF00000000 + FFFFFFFFFFC003FFFFFC3FFF0000000000000000000000000000000000000000 + 000000000000} + end end diff --git a/DN.PackageDetailView.pas b/DN.PackageDetailView.pas index 8609174..e35437a 100644 --- a/DN.PackageDetailView.pas +++ b/DN.PackageDetailView.pas @@ -15,7 +15,8 @@ interface DN.Types, DN.Package.Intf, DN.Controls, - DN.Controls.Button; + DN.Controls.Button, + ImgList; type TPackageDetailView = class(TFrame) @@ -33,8 +34,15 @@ TPackageDetailView = class(TFrame) Label3: TLabel; lbLicense: TLabel; btnLicense: TButton; + btnHome: TButton; + ImageList1: TImageList; + btnProject: TButton; + btnReport: TButton; procedure Button1Click(Sender: TObject); procedure btnLicenseClick(Sender: TObject); + procedure btnHomeClick(Sender: TObject); + procedure btnProjectClick(Sender: TObject); + procedure btnReportClick(Sender: TObject); private FCanvas: TControlCanvas; FPackage: IDNPackage; @@ -44,7 +52,7 @@ TPackageDetailView = class(TFrame) { Private declarations } protected procedure PaintWindow(DC: HDC); override; - + procedure OpenUrl(const AUrl: string); public { Public declarations } constructor Create(AOwner: TComponent); override; @@ -55,7 +63,8 @@ TPackageDetailView = class(TFrame) implementation uses - Delphinus.LicenseDialog; + Delphinus.LicenseDialog, + ShellAPi; {$R *.dfm} @@ -97,6 +106,11 @@ implementation { TFrame1 } +procedure TPackageDetailView.btnHomeClick(Sender: TObject); +begin + OpenUrl(FPackage.HomepageUrl); +end; + procedure TPackageDetailView.btnLicenseClick(Sender: TObject); var LDialog: TLicenseDialog; @@ -110,6 +124,16 @@ procedure TPackageDetailView.btnLicenseClick(Sender: TObject); end; end; +procedure TPackageDetailView.btnProjectClick(Sender: TObject); +begin + OpenUrl(FPackage.ProjectUrl); +end; + +procedure TPackageDetailView.btnReportClick(Sender: TObject); +begin + OpenUrl(FPackage.ReportUrl); +end; + procedure TPackageDetailView.Button1Click(Sender: TObject); begin Visible := False; @@ -140,6 +164,11 @@ destructor TPackageDetailView.Destroy; inherited; end; +procedure TPackageDetailView.OpenUrl(const AUrl: string); +begin + ShellExecute(0, 'OPEN', PChar(AUrl), '', '', SW_SHOWNORMAL); +end; + procedure TPackageDetailView.PaintWindow(DC: HDC); begin inherited; @@ -174,6 +203,9 @@ procedure TPackageDetailView.SetPackage(const Value: IDNPackage); begin lbInstalled.Caption := ''; end; + btnHome.Enabled := FPackage.HomepageUrl <> ''; + btnProject.Enabled := FPackage.ProjectUrl <> ''; + btnReport.Enabled := FPackage.ReportUrl <> ''; end else begin @@ -184,6 +216,9 @@ procedure TPackageDetailView.SetPackage(const Value: IDNPackage); lbInstalled.Caption := ''; lbLicense.Caption := ''; imgRepo.Picture := nil; + btnHome.Enabled := False; + btnProject.Enabled := False; + btnReport.Enabled := False; end; lbInstalledCaption.Visible := lbInstalled.Caption <> ''; lbInstalled.Visible := lbInstalled.Caption <> ''; diff --git a/DN.PackageProvider.GitHub.pas b/DN.PackageProvider.GitHub.pas index 8ad3670..397829c 100644 --- a/DN.PackageProvider.GitHub.pas +++ b/DN.PackageProvider.GitHub.pas @@ -316,6 +316,9 @@ function TDNGitHubPackageProvider.LoadPackageFromDirectory(const ADirectory, LPackage.DownloadLoaction := LCache.DownloadLocation; LPackage.RepositoryName := LCache.RepositoryName; LPackage.DefaultBranch := LCache.DefaultBranch; + LPackage.HomepageUrl := LCache.HomepageUrl; + LPackage.ProjectUrl := LCache.ProjectUrl; + LPackage.ReportUrl := LCache.ReportUrl; LInfoFile := TPath.Combine(ADirectory, CInfoFile); if TFile.Exists(LInfoFile) then begin @@ -452,6 +455,7 @@ function TDNGitHubPackageProvider.RevalidateCache: Boolean; LItems: TJSONArray; i: Integer; LItem: TJSonObject; + LSubItem: TJSONValue; LCacheInfo: TCacheInfo; LName, LAuthor, LDefaultBranch: string; LCacheDir, LAuthorDir: string; @@ -497,6 +501,17 @@ function TDNGitHubPackageProvider.RevalidateCache: Boolean; LCacheInfo.RepositoryName := LName; LCacheInfo.DownloadLocation := LItem.GetValue('archive_url').Value; LCacheInfo.DownloadLocation := StringReplace(LCacheInfo.DownloadLocation, CArchivePlaceholder, 'zipball/', []); + LCacheInfo.ProjectUrl := LItem.GetValue('html_url').Value; + LSubItem := LItem.GetValue('homepage'); + if LSubItem is TJSONString then + LCacheInfo.HomepageUrl := LSubItem.Value + else + LCacheInfo.HomepageUrl := ''; + + if LItem.GetValue('has_issues') is TJSONTrue then + LCacheInfo.ReportUrl := LCacheInfo.ProjectUrl + '/issues' + else + LCacheInfo.ReportUrl := ''; LCacheInfo.SaveToFile(TPath.Combine(LCacheDir, CCacheFile)); end; end; diff --git a/DN.PackageProvider.Installed.pas b/DN.PackageProvider.Installed.pas index 61da780..aae7dfe 100644 --- a/DN.PackageProvider.Installed.pas +++ b/DN.PackageProvider.Installed.pas @@ -71,6 +71,9 @@ procedure TDNInstalledPackageProvider.LoadDetails(const APackage: IDNPackage; APackage.CompilerMax := LInfo.CompilerMax; APackage.LicenseType := LInfo.LicenseType; APackage.LicenseText := LoadLicenceText(TPath.Combine(FComponentDirectory, LInfo.LicenseFile)); + APackage.ProjectUrl := LInfo.ProjectUrl; + APackage.HomepageUrl := LInfo.HomepageUrl; + APackage.ReportUrl := LInfo.ReportUrl; LVersion := TDNPackageVersion.Create(); if LInfo.Version <> '' then LVersion.Name := LInfo.Version diff --git a/DN.Setup.pas b/DN.Setup.pas index e4f8a73..f5e46ed 100644 --- a/DN.Setup.pas +++ b/DN.Setup.pas @@ -144,6 +144,10 @@ function TDNSetup.ExtendInfoFile(const APackage: IDNPackage; const AVersion: IDN LInstalledInfo.Description := APackage.Description; if Assigned(AVersion) then LInstalledInfo.Version := AVersion.Name; + + LInstalledInfo.ProjectUrl := APackage.ProjectUrl; + LInstalledInfo.HomepageUrl := APackage.HomepageUrl; + LInstalledInfo.ReportUrl := APackage.ReportUrl; LInstalledInfo.SaveToFile(LInfoFile); Result := True; finally diff --git a/Icons/Bug.ico b/Icons/Bug.ico new file mode 100644 index 0000000000000000000000000000000000000000..88cecc3653aa52d820bf6b90587893cf978267ab GIT binary patch literal 4286 zcmds(NoW*76oz|(8uuvf7)($wDv0|M74)PcE_l#OG#@(A=W>|2)+!;$wz8ny(>@8)h;_pgi21CS5&I5C%THgi zEUW{s6%c5JuQ1WOn48BL)uSReHv@OI(+0M7kiOz6P>pT-m}u>!9rXC)nZJj(U_Rqa z{1#BH7w`Vt>#9+$tO(Roy+=bn+r^^3$225C`)T*J{e1e$Q*9E|OFef(6x&PEGk60T zur+NzOkcI?aUZt9VC)4&wx;ce=|3Hepj9&tzjp}wKdBvI^&6PDH_+CwV(WSRDEj&y2Wt~3)Vbl+HS;k2U(|-3cVVAR=ZDerj$!(* z!kUMym$KdkUR^T})9<8q7UZ)i>0C{N-n%YA3hX|gnXd+8 zqi_;n_To9dexs%H5>%_}xC(_}OlRmjuzP=C-T;finBI9-LJgdNDPWu44c0?(ZnV#@ zk;HTzdZsskem88>b94mGgVqaRpf;8QU0)Kk=kr0=E_Ak5zynauP@g$k_*%Z-Vza-k zzLmohJU|plcwre~uA9>N(=5A{+{^$s&VXLmuGcR**8?mIpI zQEe)TRd5+@gL-nNhLg=DM|s_WA@}T{oR}-Bh9Lb{73XvBs>MsqHUO%5R>n-;n?S literal 0 HcmV?d00001 diff --git a/Icons/Github.ico b/Icons/Github.ico new file mode 100644 index 0000000000000000000000000000000000000000..e6723d7f6aedb04fd5ae1d344f4379a0ba65628f GIT binary patch literal 4286 zcmc&%Jx>%-6nz6EYk?UcfY`9u(ejmOV#HARA4~`uKcbz5nivaMf|U&=g^|j_k4Wr{ zov1Of@}sa2qack@ivgk%CHp*w%nf(nyf-qi#x;j~=iYPAc{4k2XEY|lzn&h$zvgy} zF`dSkUH~O?6kt8{vDTXZiO{;F-r2FQ8Mp|%1HJ(z>A8`;ltb<%pxNbY_ZYJga0d7S zSOr{R{|B5F#pBFZ;4BdNC;V0L+kl6F_LaPdzsyjp&F@xQ1+NS&DDS7pF9RomE5M%G ziLE2_-18TIMrxL~*x3yIF5o>Na~HC#a0PRD{?w#)mrnupCg2$$-jB$`F*Q#ESAk`eAogj=?+Pa6@Ytml;OPbOS%r*(xIU8~4(S zw5E0DP|MuUtN{-^d_5~Uy}D%$$Y<2tb>zdq6IJ_#{4T(~GzetA1JwBa9Rkh+Tq9@1 z&lhLXbKeWz_Z;p$^t|_stlt+gvmfBB&zm)R())N0XWFM-qz3Kj9DRD<4D?^4p1Dtp zc#}&FfLgxmK<`(9-dItu5Fh$u0S|hw26}vq*5w2J&VWbAd$lgcN+jnzec#K18m&tT zfBn0zJ%4zv%~D-Vl?XhRJU;Y(>#1*`7OU}HrPKnbsn44^z3+JH?48<`sT!tMz=PiB z0=;F_xAo4TtTHJz0QVUt*MZ)A=KHPay=eH_B1wUdH*Yp3QHOH+%+ XloDg&bz{mK#tc`DnXnZoC9(YjYP$C@ literal 0 HcmV?d00001 diff --git a/Icons/Home.ico b/Icons/Home.ico new file mode 100644 index 0000000000000000000000000000000000000000..fd8ba94bcc64cf118d508e7cba53bdb5f06b1ec5 GIT binary patch literal 4286 zcmeI0Jx;?w5QSe9fuS-LZBlZJa2z-RWpWQ1N`3@2C`}H)4QPA?cu?jkrDbRjRrZgA;XKr_ zs~%o?;Eh|~xW!KGp$$8ghc4{c9{R9jc{qf9sD~Krz8+$-yLw2$ZtEc>+w(94yUD|l z?BL;uI}en8j~|E1uG=yz^40?K@|Tpi;xC2`FfD*g<6B_10~UK=$rpvlY9g|kiWHeh OnTu>^BD;miektFLwsAWE literal 0 HcmV?d00001