From c67979a1f9859e97b0a6029dec5e413253ad9d2f Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 26 Jun 2023 12:29:59 +0000 Subject: [PATCH] NiceSideBar: High-dpi support for Lazarus version. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8857 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/nicesidebar/Demo1/common/Unit1.lfm | 984 +++++++++++++++--- components/nicesidebar/Demo1/common/Unit1.pas | 15 +- components/nicesidebar/source/NiceSideBar.pas | 127 ++- 3 files changed, 963 insertions(+), 163 deletions(-) diff --git a/components/nicesidebar/Demo1/common/Unit1.lfm b/components/nicesidebar/Demo1/common/Unit1.lfm index 6523e921d..ae094e007 100644 --- a/components/nicesidebar/Demo1/common/Unit1.lfm +++ b/components/nicesidebar/Demo1/common/Unit1.lfm @@ -1,126 +1,127 @@ object Form1: TForm1 - Left = 262 - Height = 484 - Top = 98 - Width = 623 + Left = 290 + Height = 726 + Top = 140 + Width = 937 BorderStyle = bsNone Caption = 'NiceSideBar Demo - priyatna.org' - ClientHeight = 484 - ClientWidth = 623 + ClientHeight = 726 + ClientWidth = 937 Color = clWhite + DesignTimePPI = 144 Position = poDesktopCenter LCLVersion = '3.99.0.0' object Shape1: TShape Left = 0 - Height = 113 + Height = 170 Top = 0 - Width = 623 + Width = 937 Align = alTop Brush.Color = 11626823 Pen.Color = 11626823 end object Shape2: TShape Left = 0 - Height = 8 - Top = 113 - Width = 623 + Height = 12 + Top = 170 + Width = 937 Align = alTop Brush.Color = clBlack end object Label1: TLabel - Left = 121 - Height = 59 - Top = 24 - Width = 483 + Left = 184 + Height = 90 + Top = 36 + Width = 725 Alignment = taRightJustify Anchors = [akTop, akRight] Caption = 'NiceSideBar Demo' Font.Color = 16766894 - Font.Height = -53 + Font.Height = -80 Font.Name = 'Bookman Old Style' ParentFont = False end object Label2: TLabel - Left = 373 - Height = 36 - Top = 72 - Width = 228 + Left = 556 + Height = 50 + Top = 108 + Width = 348 Alignment = taRightJustify Anchors = [akTop, akRight] Caption = 'priyatna.org' Font.Color = clWhite - Font.Height = -32 + Font.Height = -48 Font.Name = 'Courier New' ParentFont = False end object Label3: TLabel - Left = 216 - Height = 15 - Top = 432 - Width = 75 + Left = 324 + Height = 25 + Top = 648 + Width = 113 Caption = 'Hovered Item:' end object Label4: TLabel - Left = 216 - Height = 15 - Top = 448 - Width = 74 + Left = 324 + Height = 25 + Top = 672 + Width = 111 Caption = 'Selected Item:' end object Label5: TLabel - Left = 216 - Height = 15 - Top = 184 - Width = 268 + Left = 324 + Height = 25 + Top = 276 + Width = 402 Caption = 'Click on red button in the right top corner to close.' end object Label6: TLabel - Left = 216 - Height = 15 - Top = 200 - Width = 248 + Left = 324 + Height = 25 + Top = 300 + Width = 371 Caption = 'Click on green button to maximize and restore.' end object Label7: TLabel - Left = 216 - Height = 15 - Top = 216 - Width = 188 + Left = 324 + Height = 25 + Top = 324 + Width = 278 Caption = 'Click on yellow button to minimize.' end object NiceSideBar1: TNiceSideBar Left = 0 - Height = 356 - Top = 121 - Width = 193 + Height = 534 + Top = 182 + Width = 290 ItemStyle.NormalFont.Color = clWindowText - ItemStyle.NormalFont.Height = -11 + ItemStyle.NormalFont.Height = -17 ItemStyle.NormalFont.Name = 'Arial' ItemStyle.NormalFont.Style = [fsBold] ItemStyle.HoverFont.Color = clRed - ItemStyle.HoverFont.Height = -11 + ItemStyle.HoverFont.Height = -17 ItemStyle.HoverFont.Name = 'Arial' ItemStyle.HoverFont.Style = [fsBold] ItemStyle.SelectedFont.Color = clWindowText - ItemStyle.SelectedFont.Height = -11 + ItemStyle.SelectedFont.Height = -17 ItemStyle.SelectedFont.Name = 'Arial' ItemStyle.SelectedFont.Style = [fsBold] ItemStyle.DisabledFont.Color = clGrayText - ItemStyle.DisabledFont.Height = -11 + ItemStyle.DisabledFont.Height = -17 ItemStyle.DisabledFont.Name = 'Arial' ItemStyle.DisabledFont.Style = [fsBold] ItemStyle.NormalColor = 14145495 SubItemStyle.NormalFont.Color = clWindowText - SubItemStyle.NormalFont.Height = -11 + SubItemStyle.NormalFont.Height = -17 SubItemStyle.NormalFont.Name = 'Arial' SubItemStyle.HoverFont.Color = clRed - SubItemStyle.HoverFont.Height = -11 + SubItemStyle.HoverFont.Height = -17 SubItemStyle.HoverFont.Name = 'Arial' SubItemStyle.SelectedFont.Color = clWindowText - SubItemStyle.SelectedFont.Height = -11 + SubItemStyle.SelectedFont.Height = -17 SubItemStyle.SelectedFont.Name = 'Arial' SubItemStyle.DisabledFont.Color = clGrayText - SubItemStyle.DisabledFont.Height = -11 + SubItemStyle.DisabledFont.Height = -17 SubItemStyle.DisabledFont.Name = 'Arial' SubItemStyle.NormalColor = 14145495 Items = < @@ -165,7 +166,11 @@ object Form1: TForm1 end> ItemIndex = 1 SubItemIndex = 2 - ItemHeight = 32 + ItemHeight = 48 + SubItemHeight = 27 + Margin = 12 + GroupSeparator = 15 + Indent = 15 AlwaysExpand = False Images = ImageList2 HoverImages = ImageList1 @@ -181,10 +186,10 @@ object Form1: TForm1 end object Panel1: TPanel Cursor = crHandPoint - Left = 537 - Height = 17 - Top = 16 - Width = 17 + Left = 807 + Height = 26 + Top = 24 + Width = 26 Anchors = [akTop, akRight] BevelOuter = bvNone Color = 8454143 @@ -195,10 +200,10 @@ object Form1: TForm1 end object Panel2: TPanel Cursor = crHandPoint - Left = 561 - Height = 17 - Top = 16 - Width = 17 + Left = 843 + Height = 26 + Top = 24 + Width = 26 Anchors = [akTop, akRight] BevelOuter = bvNone Color = 8454016 @@ -209,10 +214,10 @@ object Form1: TForm1 end object Panel3: TPanel Cursor = crHandPoint - Left = 585 - Height = 17 - Top = 16 - Width = 17 + Left = 879 + Height = 26 + Top = 24 + Width = 26 Anchors = [akTop, akRight] BevelOuter = bvNone Color = clRed @@ -223,9 +228,9 @@ object Form1: TForm1 end object Panel4: TPanel Left = 0 - Height = 7 - Top = 477 - Width = 623 + Height = 10 + Top = 716 + Width = 937 Align = alBottom BevelOuter = bvNone Caption = ' ' @@ -235,95 +240,804 @@ object Form1: TForm1 TabOrder = 4 end object Button1: TButton - Left = 216 - Height = 25 - Top = 264 - Width = 209 + Left = 324 + Height = 38 + Top = 396 + Width = 314 Caption = 'Toggle Item "Enable" Property' OnClick = Button1Click TabOrder = 5 end object Button2: TButton - Left = 216 - Height = 25 - Top = 296 - Width = 209 + Left = 324 + Height = 38 + Top = 444 + Width = 314 Caption = 'Toggle Sub Item "Enable" Property' OnClick = Button2Click TabOrder = 6 end object Button3: TButton - Left = 216 - Height = 25 - Top = 328 - Width = 209 + Left = 324 + Height = 38 + Top = 492 + Width = 314 Caption = 'Toggle Item "Visible" Property' OnClick = Button3Click TabOrder = 7 end object Button4: TButton - Left = 216 - Height = 25 - Top = 360 - Width = 209 + Left = 324 + Height = 38 + Top = 540 + Width = 314 Caption = 'Toggle Sub Item "Visible" Property' OnClick = Button4Click TabOrder = 8 end - object ImageList1: TImageList - Scaled = True - Left = 240 - Top = 136 - Bitmap = { - 4C7A0700000010000000100000005A0200000000000078DAED990D72ED200885 - 5DBA4BBB3BA3D7EB4F80801CE2B4D3CED4199EED4BBE031A44939672DCE8F57A - D1A6DFB6768FD5260B68ACFB79CFE388FC6B76F6F5CD5A86F86F7D1DD778D31A - 7CFC967F8B9F3DEA7FCC8139A6AC7F1D4BC63FB7C97BCF3FE3DFCB3FC4FF2E37 - 40FF5B3EB2F2BB5A9FB75AF57C616CE3DABC8CFE639716C42EFF938F35EE6CFB - 3FCE5F3960F3F2BAF41BF0CDDF349745E3F7D8287EEBFECEC8F1D81A9DD1313C - D5E0F15E3F631ADAB826A6E16BE271F83A3A8EFCFA951A4FF8FCBAFC919A01C4 - E5DD77ABABC5DC63A5A97BDEEB8F5F27A5DFAF7773D7A2A901B25B0D908DC642 - B91AEECE477096EA6C1087FB8CAEB9F235E6B51D1B69C8F9AA5B8BF203352BB6 - 6F5A2BFFED6C4ED3462B33B0DEAB6330CBCF58F28C10DBB5270AFFAAC610B097 - 613559FD1EE4AFD450FDFBC4346C5F473D8DF663E3819A666BF87B4CAC91634D - 8D876B3E7AA68F5B543B117BDA4E789EF3F3F74CCC9AEF7D810CE1AF3C2D2BE7 - 51BEB324988C7FCE73CBC56FB328FF64FE4E9EDF49FE9CEC3D3553B7FFCEFE7F - 121F8D7F9ED62C22A941076CF69DE9C6EAFCDAE80996D8B942F0FC2CA0CFC08A - E5BE799E91FCD6118E7BD548E5BBDEDF45E5BA18F787BEF5B717366EC4B73E8F - 27C6ADF70068CE8D35BF3D17D29EDDEEA5F777885CBD71EADEB7B4A0D682EC78 - 8EAD9F167D27657BF8A7E76CA0B1CE10577EF00DB0AF8BA1618D65B23CE6CA18 - CE5B312CDE88B9CE77C612F39EC68CC1AB859CF7746ADDF335E0697EAFF67341 - F23AE7B17D8FDF57443EF067CBBFE3EDCFC9C8BE6BFE2DC77897BAEDF7DE77AA - 43FFE570FCBBEF84E6FC7F01D4EF61DA - } - end object ImageList2: TImageList Scaled = True - Left = 320 - Top = 136 + Left = 630 + Top = 203 Bitmap = { - 4C7A0700000010000000100000008C0200000000000078DAED58DB91C2300C4C - 0754C02FCD400574C0271D50130D500B8D901B656E998DA2677277C3C7656647 - 907857B223CB768661F3353E1E8F31B0E1256D5EAFD70272FF72B95434DEEDD9 - 721C997FCD85DDED76262AFEC54A5BDD2FADC1FDB7FC5B7CD8AAFFEF3130FBD4 - F5AF63E9F86780EFBDFF8E7F2FFF2AFEA3DC28FA0FF91986CFBAA6B1B9DD6E7A - BC4ADCEBF53A3E9FCF892F5620F70A1A6F2EFC835FD05870C5321FCF3C3E9E4B - BD612E7423BEF8033C6E357E8F9BC56FB517E8FE381A1347C7B05683E3C5EFAA - 86066B16355CCD461CAE8E8EA3C19F8D1334D6F057CCCB3FA91985B8BC768BBA - 6A688CF7FB7D06D5663C9FCFEF674A63BA27CF0554DB16F1591A456EA851E466 - 7D69E56A301E2117FD4DE270DF11C62AD2C0B3889B6930976BB0852C3FAAB062 - FBA5B9F27F6D1BD3362427A4A6572D7351CF3B5CDA13E83D420AAC89DA3F721D - FFC56AB086A5CD7D01F6FBBD559FDD3ACA1AE0C21E0E8709D46EE8689C4EA789 - 5FA869A646B0C6A41A4DAEA9B172CE8FCAFED895D5CE0AA23352842D7CCE79FC - EFC4ACF962F51EC343858F3C95DFC8F92A5FB8CCEFFA673EA313BFC7ADF2D78C - DF96F7B7257FAC3A59817356EEE2D3D7D43657C646EA2DAD372D3EB862BBB596 - B9EA9C55FA0EA1B93ABF02BD1917B1EBBCC3D9D3DAC76A2EFBE63CCBB8BADFD0 - 897C5B7B09B4B77C7FDF1B8C7BB37E7BBE2DBE35E689EF81DB6BDFDE982BFE90 - ED0BF9DD1BDC702DD57A11BFA2F9E99B713917C97B3C1E8F6F54E6306AB258E6 - 5635B0BFC31C6040C31B3FCC19B493EFB2F8CD7C2F066EC3101D190FE8457C4F - 033144B5D0EB2F2031447C892FE2CB3D6913E4DF8CAF731EDFE9B37303DA210F - 60310FF97E76F6C8E0682C6A99B7DE7BDFA936FA1F36F6DFAC67D13AF805E341 - 0DB9 + 4C7A070000001000000010000000690600000000000078DAD5586B6C1455143E + F8C0F723C657A21235BE4DD4687C454934F1D1C45754445B1F80A0F12DBFAAA2 + 895513342A3EF04982C128D2DD99DD16AAD6A8950A0614A9CA76774B9BAA0828 + 2822486B6C1565FDBEBB679ADBD999D9D9B6C1F0E36466EE3DDF3DE79E73EE39 + E74EA15090828F728E1422687EDE91D185009C8D0F1BCF3AD2087ABFBB59761B + 0A9EB2A9036928789B86B35F3FBED2FDC6C587ED372E3E68BF71F15136DD11F1 + 51FEAF547EDCB9ED858F43E5648C24B539B25FCE950C62BF93EF71718E233B23 + E6C741DFEF402F618DFE5C527EE618E782302BEBE548F03D079E0430BF809664 + 5DB9C0B60DE67AF0ECC1B399EB12E3E1F3AE3C84F18F20A73A5B2F4794B32D78 + FF256600EFC83D5C33AE6FC0FF2764DD6DC9BF11E3EFC4F6AD6BF651E3F17424 + E4748C6762CB4FCA16E04FF378989B30DEDBB940F689195B7FF9F319F31CF634 + 210E1EBC1FFBF9A04F15E6726DB364D732F85EC8B93464AF4DA01961F83C63C9 + 954FC262EF9B46D99F7604CFCBDEFE06F049E9037D4B9EA8F8ED9E2BFB320E41 + DFE752528DB5B601FF07BE9B3817F71C40D7B1C0F20CFCC4F7ED79762DDB7D46 + 1A06BE1FBEEEAF1897946BF5FC7BBEEB820DAE8A8385BC87199FA0C7B2293925 + 979053B349998EEFBF61CFDA486C424E04DF56C8BFA264CE956B38B73221C745 + C8BE3FEC1CAA3D72D8C7BDA13E77E469D07B11F80FB99788F9F9D0FD9550FD92 + F23A78D281715BCC019B60A31B226292796A6350EF06BD27827ECFBC257B45EC + 6F6FE0B740C62D01B2D79A7CEFC832ED7766F11B9857F174410B41CB7936F15C + 63EBA0B9A397EB3317C20F57E3FD76DA1AEF77E2791DEC7221E3417518944398 + BF411BC0F728F86FEE48CA45ED8E9C0B3A83944FC9D91C83FD6E220F79A1C75D + 03B5EE5DD913E32F62DDC598FBD1C45069DEDAA6738BC9BBD4913DC2ECC439FA + 22532F634978FF6DD51CD9BD923364F60C9B52266B676C1CFACD7660819F9B65 + 4D74A435CB7C562FE3FCB9B9A40EA76402F05D8CB17C425EF0D5BCAFB0E633F4 + 5548ECCE605D53DE4E0C8DC2FB6AC56F840F4ED6DC500D7D26DBD80E57A66679 + BE2D791D293916BCCFE3FDCBF6B41CAD7B3B80B665EDEC543DBA679AD8DB18E0 + AFE5C57A28A3ACF333DDE894942718A7B415E8C180FABE01BCD34A7AFEA4DC66 + D5F0AD88C73B9057DEF6D7B74C5A0E2F39BBF3E410CCFDCA1C01ECE3CCCBC4C2 + A675F49162D3413558F75EA367A41D984958E34DE89804D5D12EA0A5CCB3F8BE + 95F977502F07BF9BDC50DA472C629E2DD4C94EADADB20BCF9A55E31BBD7A677A + C1601BBB907B25CF9AF631E7F8E657639D8B39C7BC02DEB3340F981E84B140DD + 68132F768D0D06FBA2CA17675F18FD92D2E6C5B3C91F584B7D3CCDC237D9FED7 + F999C6BFA807BEDC3F59637391629705F5BD88E3FBC0571BE2A32AC5E7BB1D39 + 68600EF605E63CC87E16722F89ECBBB127F05C4EBF0E22472E2B777EFFA71EA3 + 305C1AAE6CFBEEC1FC007B8DE733ECBE1186671D809D1BF26969601CF2DBF2ED + 185214DEF418294919FEB4A4BC1803EE18ACFB3989EF51F24DEEB5E49BBB1172 + 0571F6BB1FCF9C9371E4287BFFF83EDE2FD3D3854F0FAF67F0539E2D8FD7E60B + 88733367E5C2A7787E2C4C5518D65EC38A01C737BE300AEBB71FF3DF8E16BB3B + 0AC1B6270D035BA3FEA9A914CB7E09D81FD4CE6BEDB318CBB7B82B689DA8D318 + AD8D8BED9A2707B217066E81752FEDC934C8C1B1EE30C51AF30F7B1ECAE739E4 + FD857D63392C7B1DD646F6CDF67F23605FE31AEC8BCAC4745AFB84436D3C7537 + BDBB53CC4F81B251C7D9E7F20E16F89FCE9547D49FE797E24DBFB784FD6A98AF + B42F5EC3DA5A52971DB95ED79E18F5DFCCF43E45BF8EB77B5E8C758356B0D646 + DA18F359F6B2B8DF0FFC2340FFA9B21B50A71F284786AF18535355FEECA1E40E + E246BC1E27E44CAE6BDB51EF76B33957EEAC43AF3EF6A7EC91BE460F43D2FB12 + 7BD63EDEB1C3F0EC21D96712A3BDBBF9FFC077338639F294C45D4A4EF0C6C1D3 + C2BB0F7B77D36F83F8AEF7A1164F8EA707F764742EF6B72DA05541FD37C738A7 + 3C9B0D86B672E50DEE8DFA31A658E31917A64F77643DFFDFB0BEE9D818F298BD + D046C0321E8D7DB047AF5F263FFF03AC70E43095DBCC31EFFF1279F5BE3AC9CB + 37C64EAE4C511BACB3F7C07F9A1CD3B5A79097183B5FF9F0EBFD789ECB207C98 + FED4993895FD81F7DFC2AF7F90FDF43C3EA9F7E575FA3E3AC87E96FF3657E0BF + 4D9EFFBCFF3E95C60F636EA4E2D7F7FF29F2FC94ABA7959EDFFF00CAE3D598 + } + BitmapAdv = { + 4C69020000004C7A070000001800000018000000BB0A00000000000078DAED5B + 7B8C5C5519FFF08D56511EBE8D01EA238A8068AA89F1814A4B50548C60D518A5 + 104003228ADA2AEA8A6904AB09580820D6923E77E6EEB6A52C5D5A285B0B141F + 4DB7B333BB856C6969B1B5942AA65BECD27677FCFDEEFDCEF4EC9D739F7397A0 + F48F2F73F7DE737EE7F59DEFBDF57A5DEA31542B4B3D89FACB52DD3A575E514F + C08AC17FB0E6C9754E0ABE8F82EEC93306FB574BD296F0BD036B3884E79559C7 + 4889DF06FC6FE27924EB1869F081BD866DF0BC4CF7AA5224BE8BC68B4F741DF5 + F1E29338FC22F8A445FC443E69053F0D9FB4829F864FF2E2A7C53982FFDCE2D7 + 4AF2239BAA65B9B750FC0CF2A788FDC92B278FE0039F671FE287288AE29356EC + 90347CF27CA681925C451A0F6C7FDF3D19ADEA9D2D0AB7529677619FEF52FE5A + 0C32BABE8BDFF260AEBF4B5E89799E07AC05C03A007A1A7F5F894F4759B6C421 + ACE720DBB02DFBC461A2FDD9A0F5E8BB5375383176836E7874911C1FC56756DB + 916AD07E03B11CFCB912F44FD06DF8FEB3AA279F2897E5C539F978A5A35F07C6 + AF16704F0E82CA8EFBFE47BC7FBC657C9C49BF27739AF6DF931B798EADE2F33C + 78664DF3077FF83CB848DED0B23FE3C915E17E7D65F9B8EABB29ADE2E38E7F2C + DCAF77A9BC963619D636BD45FC516245DC01F2FF5F5BC01FC1DE6C88ECEBC977 + D9AEAF43DE9D77FEC13D8FD049385BB4D98F75CCCB89FF6C6589BC3E76FD9E5C + CB3D749D512C7E20F77E91C4DFEBCA7234DA0D8276611D13D3E02BCF6F61DF54 + 7AA443DE817E4F82B6573BE48371F82ADFF6B04F267DD22EA7A1DF56D0307862 + C6E00A79B9037F04F8DB308753F3E801F43D16189E620D629CAFD932B916F863 + C7B6AAC3C07367D117B2EE7F1FDF15AA83DBE445C0FCC90088CFFF4B76899EC5 + 44F2A0D2C4A2F1A17F7EDC9001782E1CBF2C3F68E07B727561FBE2C94781B9A2 + 3FB053CC9D1AC6EF9DF89D941F1BB6CEE1B8066917E83ED06AD05346D663FC9F + E7DC6FE35FEDC138536D5BA5A7475E82BBF50DEA6B5DCFF42CD894FF6A673C8D + BEEF899C03E402DAECA58D9745FEF01E299F5C9D826FA7D732DABCC69E1D6897 + 5352CA41EEE3B20CF87F619F245D447A64B1BC59F11FCA804FB93CBAFE367969 + 525BCA6D8D056D4EB5F7810EAEA7B145ADF96CE2181BCA7242625BF0A2CAE05B + 52E37BF27BED737E0A7E58A536D839197CA773F50CBA53F0026DB82D59643CEF + 1E6D6FEA4BD899EF8BD9C71EE565DA282B68B3D3D7005D82B55FC8F5E35CBECC + BF698BE1EF99B495386FF4F9A5AEA127C2F7FCB47EAF54C0F7C0F913FAFE5D63 + 9191F614798D71C5FEE5F25EFCF6E9397CCAB18737AB7F3035741E2FE33DE8EB + 94932803A85B3696E52D7D0BE5758EB3FBAA8E3BDBB13765231328776D9F2E89 + D8967D8C8EC073BBD37F6E5EFF3ED013BC3B6A5B3F88DF75FA3CA8F7705F938D + EB905BE4013DBB5FD3D7AB057EE6EE86AD134D7BD8967DD8971859788F6B579C + 5F553AE5ADDC7B3EF3DDA625725C41B187C5EAC7CF553AC07745E9E047EE9457 + 634F7F07DC7F28CDE6BB22B0D797E518ECEB97FA4A723DC628E17909EC87597C + 37B8405E93DB6E582893FA4BB20EF7A102DAE9B0CB87405B612F76F577C8FBD3 + E2D24700EE2AF637BCA6FEC00E572C006B994C7EC779DC9E949B19982F6FA24F + 11F2D7EE567BE2B2B01F4A9964D949E7E3DDFD51FE39E3378CCD38E6B8977A8C + BC69BD1BC69E5DEC900F9338866B1D68FFB7187FFFF36A5730263900BDFFE131 + EB6E97338C3CC13A2F00DD3EC6DE29C917B07F71727257B55D4E26BFD0B672E9 + 47CCFDDFC09D46394CFDC1311BEB2AF97224C9EF2FC7E8C79BC26783776B0D7F + E3F9D918DC8D58DB578C7FE7F26BC83B0EFEDDF758803D3546867527D928B4A3 + B5ED663D9F0DFAF701607F9BBE02DE7745F8CD67A7904D53D0EE3FD42DE66CB8 + F738AF2BD4769CCD58007EB759BEFE14E8E90F24F9E398D7676A965FE06378F2 + 43CBD75C48B9459D4F3B597D76FA2725EE37DE9D1E7D27FD58E8F68438D632FA + E6BCE3FEBA3AFDFBBB5C75BAE1D7ED8C5536C575C7DEB7A898C74D9483B550CC + 9AFABF49CE84E23ABC0B785F8B89031D54DE9910B6BBF0EE7311E7BD8AF7C7D6 + A9F4CFF4CE2E08E1EF363A8232DDF669B19E8F98B370ECE9FC083E9D1B8A83AE + 1D631786F49DC61CEA0EDBE002272F8127AC75EE0EEB04DAC03C0B4B669DE2C0 + 7F28CA36A09ED036FB5DBA997C48D96A7C5ACCFFEB21EC6DB41D12FC18DA4295 + 2859A2BEC56AD515F759D84F507EA6F01B1E48F2A9B80EE0DF8AB68FD27EA5DC + 8DF3F336B5CB3B1983A23F122903DD7EC6E9E45BFCFE19F43DCA228E43F27311 + 9E7C5F7D910EF2474BB68F275FA4ACA22C21F9CF7857940DF442A6BC79C78C14 + 5DD79297887958A6B48D43BCAE2D09DFE74DFA2305E3438FBD9D31A0C1A57232 + 75286537F56A91F3D798C2568CD30BFB6B872BE6599927AFE25DE36F5A7CB6C5 + DFB702B76FE342395373A8BDD41FB6EC57EC3578FF0C7FC36324ED0FDEFF1672 + 7C51AD53CEE43A7AE103187F456DEDFB292F8DCCE5B32D2FE2F0D907F37F18EF + 7F837DAA71AF781E616CEA6EEBDD9831A2F0698351CE3256545D2C6F33B944DA + 23664F5CFB11FEE6C257FF6088F9624B4E4F70F577E6BAAD36C09C69E3AB9D42 + 9FBF9367668F9106DB71EE8FDBF81AEB59A37984F3CC1859B0ED316C7C8D9DFC + 8BFB6DD927FE18B4FFB3605BFC33D3B213F7BB6273F4BBE87B66C576F04FEF78 + CA37F0F7EAB4752D59EB5FC69B8EE8F023E4CB60F8D9E0B9A5A43479811CF9C1 + CB2DFFE4F222B1A93342FED8538C5B1466E31DCEB3ED55E29DBFAE90FAA8C08F + 7E4631AFC1DDFFA9F1B3A8A70B9053C6AFDD4139AAF505DBE37CD58C3ECC8862 + 5D489DECEBE5924C3371A4707D4146DBDAF87815CD81AC20F931258DF3F83A2F + 5FCCF95C2BDF3BD9CA9FF4E8DA3E697DFF6C166C9D6B2D9C13B2F1F5EF7BB4CD + 2657DC2FE64C2F6BD44F587E7E185FE34687F47C2E4D79A6133446CEBDFD8323 + BFD413D2D173742E4FA689779B3C13636AB63DA1F8C1F9BAE302BC1FD7A6C885 + 9A7C4A53AD8DE1CF889A1EE79C1C3570916B655D98AB364CF774A79EC39CA85C + B7554B7849C47D68DA1F6BEC4B5D3C11AA3F8CE5B5A8FD71F0F4EA50EC69B265 + CB5DCF185B1E62DFF09DD4B9AF1D07DB676D28F7385A20F62831FFDF6D06E664 + A90729EF1D77651ABFB14D667D8E7BDC1FC4EC4D0C7A183EF08963C60D6A684C + 0D5917FB64ACE7A23CB983FAA916E4C23C8BDF585336C4183EDB683C3875BD97 + FAB3F46966A97CB9C6D42D35EA98F04EEFED2CB64DAA4F76ACE15EF3FF397E4E + AF2C5B2CFE7BCCE41ED8866D93F69BEBB3E7C0BC06F9D8E4B5F88DFB4E323907 + CD0D8FDAF976ADCD3ECB3E0FE6008D4DE3CF3BC837F16CBBE3F49E5F67C4DA04 + B6451F5DF37E3BAFA8BCC0EF77E85E9ADC49B79D1BA1AD823EDFF2F3FF1DF2A1 + 50DCBADBD8193E4670E6238AEDE7BA6D3BC697911A27F7EB723D59E4C84FDCDD + B041D1D696ABCA737E4E1DED2E525E1E224F8473462AF387597BC0B80AC7C31A + BEA37595F39B6A47035E1BD23E1769FCE844AB4E72B31983FB1055CF6CEA194C + 6DA6DA8D9B15C3B3EF63B846CF9CBDC919B8EA8D35D7D4D0755A57C0B9CC88A9 + A59BC136268FC0F3548C3736C5E597C871AA8FAEB2EBA45CB58391FB13D8B775 + 57ECD0D4329B7C47D4FE249DAFDAE73CAB2B59ABEACBBE609DCCB92E4F3ADF24 + FED4FA842E472E6C5EC38689E1CF0CF76B12F79AE769D7F326DDAFF1960F69E5 + 1BE769E49B699756BEA591CF94C9D6DE6FC9229F9F6BFD62EB475F0746E8479F + 4F72E847977EB7ED04BD8FB9F57B91F6C97F01AF871BB54C7A07000000200000 + 0020000000580E00000000000078DAED5C0B94555519FEE981BD1FF44E6B95D9 + 4B3397D9DBACB49659F63024D35E58AC042AB1D262650954CBC7F21150BACAA4 + 4823987BEF0C65B406520B954494E13133CCC0AC19404A4444401E03C373FABF + 7DFF7DE6BF67F6DDE771CFB92C74D662AF399C7BCEFEF6D9FB7FFFFFDEFDFDFD + D41FA3AD2A527F8276B8A34463FB63F69D033EDAA155051A9D357EC271663686 + A4F83CFF97076328D137EA8D8FEBF6025D61C652A483B58E210D7E780CED45FA + 7ABDF1CD188AF4A35AC79092FE06358CE148E2FBFAC85BC6648C9F98BFE3E2E7 + 2563B2C64F2A63B2C64F2A63F2C04F2263F2C28F2B6372A2BFD832A65EF8D5FA + C80A3F2D8D0DE1D70FBF16FDF374C0AFF7BB43F843F84F17FC2CDAD1883FD4E2 + B7D573E84D3CCFBBD0705D4F6CB6F74F67DCCD6ABD37E35EDEB82DB7D2731967 + 22E3F501B7BD44FF5463E8C36F78266BDCF533E979F07118A32BC02BD0D46291 + 9EEDA0FD2E3C8B77D260B1ED3ABC6B36BDB2BD91DECBFECD37B9FD99FBDCAEFA + 5FDD59A04FC6E0D9ED78177DA02FF489BE7DD8EC474CF1F4B704763DBEB91699 + 010C8FFCE993E7B6725BC1F33887C7FCBDCE467A6B8632ABCFD3D79378067395 + A3CCDCE259FB7578A6AD898ECF117FADA7AF56F34C039D9223FE4A4F5F8BC4AF + 3F2347FCFB3D7D35191A2DD29773C46FAADA5789AE13D972555EF8CC7FD778E4 + FA6879AE31377C4F7C627503BD4D9EDB9817BE4F96F0BF61FCCC26C383453A39 + 07FC4DC0F0F657A2DF47C9C91AF06F8DD43F25FA843CFBDF850BE93999E217E8 + CCE86F326BB05AE238176788DF1935F74A0E7F45DEF95F4B915E9A053EFA8C6D + 074CA167F1F38B65CEE6F8C61D13FF01F499C40E692DD2DBF9BD1DF2FE4D69F1 + 99DF77A2AF9476E699CA26B8C9458F51BA3E1ECD79C7703EF7B34FBEE5BED626 + 3A2E26FE3EBC9B85FD09FB8DFB5B2FFDF642367437D331617CBE6F69ED51B68D + 3F9CA50DDC3A975ECD7D17153DAFEB6CA2318EEF2EE2D9BC7C00C8275E877607 + 9DB5E3B7BAF840E0CF127D95E77B0FE3EEC17552FE1A6A35F244893E0B3B010D + D7F5C6078F295E78B4DEF84736DE3260270DD8357558F339F4069EEB69D0CB0E + B9B39E7FBB9E65D2EB725AEF1F42F6C6D0B53BD986FB4EC632EFB71579E722DD + 05BFD8F040813EC778DFE7FFDF1BB2B5A66614EB99A87D47B68B3F54ED59FEED + 63B01B83E7795CB560C35657FABFA77D36BD26EA9D3573E8F55657F29CEC49E2 + 4B3BBEFD169B4FEC6CA0F7C45EAF46FA80C94997DF9D56038F77CAB737A7A0D7 + BB04BFAD06FC5EE9E3FAC4EF96E85732F61DA9636E03B43C31B1AC28D24F957C + 1E9EF4FD95453A56D9166312E317685CF07E0CBAAD62FB967DD6027D26C5FA7F + 5ED5499C91E2FD4956DE2C2FD2AB92BE8F77F0AEE0FF24C5FADD2DF81D35D0EF + 6AE963410A3D7350DEFD4D6AFC12DD2C7D1C003D2558FB5F066BD748A7A6C66F + A053E2C45D2B64F85FE8E58851067E63AD3ABB480F0A0F3E81BE63F0CDAF15DD + 8EE5B9B81DBE1F5F5F0A5D67E2E23C2790EBB6F1FF4F62DD739A895D94E842D4 + 05719BCE9877F0F3E3547FD3BDD80DF416AC95F0FCDD8CF7DD5AF3602207EEB1 + 74000C0FCF4DB3FA06DF04B9C53A7EA4A9EF615AE2FFFF835B0B8F6D1974B16A + AB705F708A46F6B2EEE5E7BE887C08FAB2FA08BF79F865B98CF39E1CECD57FCB + B7B5789ED92873362B2AEE925497A04F1BD3F1E03F145A3FE40396F21A144083 + 889D4217F1DF09FC1D97F0DF0B0CBDF135EC31B1957E0E7D09DA936FEE56B204 + 74F5A067FD47F1337BB3CCC38662507B58979CE7F5F39BE838C42D50CF257627 + 726CDDDCB659791EA3212FB981DB7F18B3C1C8339EA770EC24853C7B9FD0F0DA + D622BD19BC04FEC7358F759DC46D4FCBCBFF907C5F97D824B7C1D780BDC9DF38 + 43E6774D383F96831FF27E1B8F0AC7BAD846FD605DFCB0067A278F632E633EC6 + ED71E434DA1AE91DF5C0865DC1D8E718D95CA29F310F4E36D705FA541A3B256E + EC4B6A2C978A4DBC05BCA478FA600762A505C3BB0F43FF643116EEF34590D782 + B58DFBBF8EE97B7E44BC153CDA61747881AE6ABD835E9836C78F6FEAB07AA36C + 879E273AFA1A2FFF97E8C7863FCB327703747612ECB6061ADB2E7AB8427E89FE + 865E14BA73E1376B1E84ED6CEA1362D6FF77426F960663DB18A35A9B192EECC5 + 457ABEC32F3ED9C84396815EDF75369DC57376D057736E7D09E428F57DE40E7D + B287C77B22E60CF2C3F57BF72C7A89F2B57DF6CC15E6F9663A063E39E2C0BC2E + 5F70C548A11FB5BD233EC906174DF2FD7971F3F7BC3E1F97FE5E5BCDB7838C0A + 6C2E8997CB3A6C0AE757BBE6D1B19ACEE3C478A2721AA22BB6E818A1E850F0C7 + 2E2D1FA4C623490E7519F777420C5B7A56B5DC4447034D52F88FC5C42EC58D83 + F0F846B8E2F4C17C14CA395EF113F747DA2E09F65A881D752064FB3C15E625A9 + 89812EE98ACC9F25905F9001C815A18E85E7EB5DDAAF841D0F1E821DC8747C36 + 6285C8CBDADA0FD57AA51E6373521F9465DE47455799B819F4A3E539C80FF8F6 + DC16F118C6F358AEE4B9BD5AEC8ADD3A9E9AC69691D897CB86DDCA3837D81A1B + 3CC33470A5C557B2FA805AB34B52F8194B63DBC3259A62E6BF40B75489611E10 + DBBF07F710C7F0E5C441F309FCC27E9651971AFA631B7B900F5E8E9FB9E2DCF7 + 43EE5599FB5313C8905ED09FF0DF369B4F0CE558CEAEF2FE4697AD09BA4F20C7 + F7AD9E4BAF9035C3379DE3905FDFF2BDCFBFDFE8AAE740EED3F867ECC3F0337F + AC32FFED4AFE5D0E7B3E613D5C40D7316B092A781B630BF40FCB21E88A706C60 + C55FE965900D113EDDBD097207B6ED0EE768C5969EE5ACB91CE059171D8D89C0 + 9F1EC6663A9D34C8C666F9C4BF3D021BC113071F544B1655A3C2DFF4B50A3B89 + 6DA09679F4020FFF3CCEF6EABB03BB88F942DBFA5A9FC4A96B587327BDD8EA9E + 0EF8C5ECC346C40C2F848D64EB8F605BB9FC6BEEEB2309627033B83D15B7AECD + C43558EFC0DE47EC7410ED8AFD15531719FB1BEB90B4E681BFF111C9E51C0EE2 + 622E5BD3E54334D1F1A89DC1FB497237619A441E81BF77BBA9A928D0EF5C7252 + D30ABE97C7F807C3CFACDBAAD15AE2587A817E2039BEED884D1ABE46BD20375C + 4BBC7CBB79869F4D52C39AA499DA64D60B26AE897857391E360EF7AC3C1F6A43 + ED48EC39399ADB33AB7E2439BEC96525A84BCF02DFE8EE463AC9DA823687867B + F82D6F7CC46C9037935AA779ED687C8D7BF8AD1EF30F3C894935B715683EAEA3 + EAAD105F89AA618FC237EBCDBA057166D66FCDEABDF9A64E1FBAC7410FA87B89 + 5303130BBF5C8FBFC0813FDFFC16C20FB0F1575DD734FF453A1773CEF3D0CC7F + 17189F94EF79F60E4C5518D70EDCABAC214E4C7F05FA3B1AB0C3F4E7C28E1A43 + 56FCE7C3F68DC1878FF875987E5DF2276A8D7DCF56C39778C0E1C86F4A80EDA4 + 4F07BED4F8A2AEAF35C8C3BBD63405B6933F2BF06998E4B7F7D83577E1D482ED + 1B83C9DFCADFB43C5D8BFC35DFCDDFEFAAF58F2BD36AB4BB36F9EAB625663829 + 2FFDEB8AFF3C93EC9F21BB77A80DB5A176F4341A86985E39AE176F5F5DA63528 + 059AA062F913EA892D71791D137F12F7EAF8ED373A725937D4F1DC893E673EC6 + 53DB9899DE2CD16C65332C0EF64996F3EAB3EB507B7558D962A74BBED3DE3BEC + DB1F9181CDF02FBDCF4EDD2FA97CCC7D79604B2EC062EFD77937136B57341137 + 461FB721C723354D153630E37C1A4DD7CEDA3ABC2CCF0109D5016F57794BE4B9 + F7AABAE9AD8A1633D903043F57D73AD9FA1BE7398072069FADB7CEA2863654EB + B55E9F6BE2F05D874BAEDCD2C1D5B560CB1E8C5EB5EE17459DB514CAB7EEE5FF + BFB18675BF5DF5B53CBCC7D36DC39ABD710F2B3AF8530DB5FB87D47A9E15F7AC + 29A9FF08CEE74C5313ABF65FA0FD2DC5597B77AAF71726C43E57BD7BA05AAC53 + CE0B59E4D9BFBE3FE91E1AD4BC54D42D95E8E65AF78FD9F307E29CA780BA055D + 67E6DB3BA4E59F670FCE0EC53FDF8EAC372D0ED482217F19A18F02F917671F16 + F2C0BEB8396AE775BD5C54EED4B7FEA19A940D51FB6064DFE06E3557A333B41B + 2ED6711E571D7CA89E7465A6FBC9CBE749B4A86FBBCD11E73D582F9FBFA35C2F + 7D62686F6D5DE30EC054F82738EAEFF2C45E17A77E73A829BF836D2E96259785 + 6D8090BCBD08CF64598720676FCC54358D875CF524523B64F5F55EE8FDA85A9F + 18FBBEBF5471CE76791F8ED3C657FBBF7B2AEC06EEA306B935CADA7DA8E7878F + 0BBB5264C8F92A473852DB9CE20FD83DD8A36AC01F2172A92FA85F2DD278BB17 + 1D6B23EBD363F7DAA95AB23E9133236AF4B99668FB013ABCDAF923B65E566A9E + CC997919F8BBBF08EF23878F29BE6F8BB4C5BA1E33F085F8DD0476FE05A095F0 + 7C59D98C9AF304F6DBB2B08C0DD6933180E5F0AB03DD60E61CDF5DAE793A9874 + 0FB83DB3C0BCCB7DC81C2EA9D0718A370DAF0A9DBB621B3CE6C9297877B2F33C + A281737C665AB926F58587CC5E36A65D5343C66B8879D4FE9EDDCB68F6C296F7 + 2AF68ACDF210EE856BD3A4CE1C7B05A6A14FF40D3E06163003992A7223CA5F34 + F5EBF68CC02AF598517BFC247666E5D865E2AFD9B3129E000FBBEACEA50EB3CD + DAD28831C05E853D897DAEF0F9E5B715AE1A3DE1DBF181FCC21CE0DC1E91DDFA + FC0C831392DD32E7E6FC4DD73CC97775B97288A06F2D3320BF5D3A44E4688F8D + 6DB9F6A6E25B3DB51A235D7247C5C8D6469D49055FD1C5EFD636C69C57AD7F2C + EF2132F5A92E7910C70F8DC2F7F90F0A7F671A7C39EB6B6D95F95F1277FEC3EF + AAF9EFC13383FC75A605D92F32709655689F96CA4FAF71C59A25FEE4A43FD0B2 + E21D53336ECF15000F54F01FF388CB4F95FD5ECBED18300F986F33E7E579EBB6 + 7112D79E2CE357336F57F01FF3BE923FDD513174B33799658CC7AE6E811FE73D + 43987937B017C456B4F217B2314AFEE2DB30BFB2A6BBA43D80785FF8BB5DF257 + 6CA340FE0A6DCDACBBFE5171A9605F751DF56F98BE8FA4FD91D4FE82AD15B6BF + 74DC3F8DFD15D7FE1C149F5232C3F26D56F6A7D3FE1E38D7A647D9DF6B650CE3 + B3B4BFB5FF01BE01EF5AF9A1E5A8C81F23BF2043C4C6A9DDFF18EC7FF554DB73 + A3E4777756FE57C09B65FB34F03F5D67C2408754F89F2C5392EEBB3E12FEF7FF + 01C5DEA142 + } + end + object ImageList1: TImageList + Scaled = True + Left = 444 + Top = 204 + Bitmap = { + 4C7A070000001000000010000000A70B00000000000078DAED99795C94D51AC7 + A7D29BA2956DA2220C9A77516FB698968A0B5C48C0502BC9DC50732BCD2DBD19 + EA2D0ACB52641741648D1D211145649161944559156640605887254084619879 + 67E0E577CF7971087546B1BAB7FBC79DCFE7F739E73DCFF33DE739E73CCFCB00 + 0078B847A2A82166E258BDA6E2281EB489DA8AA2790BA085A5A2F6CE4A27A053 + A8559D9547218ED16BD4C5D33574B11A713EF7C53C4267CC65E7C7435EE3A693 + 17C78E6CEAAC8F027A5AB4AAB33E92CC61A893E79E75B01A0DDCD7FFF93F8EEF + 941CB92FFF06CB73F94F5871246FDEAF5A5F67CD8C68A439A633FFA4E164DD91 + 3A6B86D623C9E1469D354BD87B63FE4F6AA20F9EE107AB4B8D7D55A5B43F588E + 17852726F8AB9611B66974A29A31DCD8CA187B2B9BE818B569638C0394C6FC40 + B587E18FAA04D2CAC647A965CFE47763B8A407E39E2B83C18C1A181F92C98C7D + 5432BE873281EFC37850A69FF757D98F8DED669FCDEAC648711FA711E5353298 + 28C1F87FD4C3C8BE83A58C869FE0CF7C3A3AB15B3990D3C66B64B4E59682EFC7 + 6CD3F07C3FD5AAB167D5B2C1F2FCCF6ECBF801AA95FDBCBFFA75C35055C7A079 + 2779877180FA550D3FC91D4FF20355AA11650FE70DC656C0D897515166E01D18 + 05A9939FCBEC7E283FFEED06F08F2B93EFBF43C6D2304CDDA957F100FEC572F0 + 8F293A8DFD9985DAF2C028589DAA7FB19BD1C51B6D6865F85E4CAAAEDC330EC0 + 28A32055853EB94BBDF201FCE872186D6E55F24F282BA8CF83F27752089E360A + 569D350A51CB9FCDEEEE1D6F5EDFCB7757CA8DBD98B3D436D83A9810D03DD728 + 88A9E79F54D6D3FE7FAB6EFBEBD0018F9B38C9E3A968FF51F959CE0A0313A7AE + 282ADA7F1476C1F1E69136FE0A376B6F4599A5B7E2A695AFC269BA03F406C32E + 7497BFB22242591444EE2EBE8945581D8B43C53DBD36C1CC7553CFCEA90F5CD7 + 0143960433F93E552C127F6691D9C6E21C99E378258BCF8B59980730B9B63ADE + 4154735D1473B6A6772B4E55B3486D6151266791DCCCC2973CEF17B3589AD8DD + 65E2AA7853173FDFA76BF3CE6BDDF021FE8984CB6B677191B427EFF0CBD2BB31 + DF4BBE5E176FEAA370DE55D803D70A16D1F584257B886D60E149E2DF2762619B + D983795EF2A33A793F65E227852CBEBDD91773989445400D8B23E52C76DE60F1 + DE5516C4E7823676E677B2E72D22991ABBBCBEB3A28CBB84853389E55F252C36 + 15B05892CDC22282A99AE5DCF1DC7D6B9F549EB411F660711A8953C8C22E93C5 + 47592CD6117D78999C9D80850DB1D9A4F760BEB7D2E7AE7B73B93DCA3C82A9A6 + F32F21DCFB44AB096797DDA715743CA3CF467DCCC3996ACA6878134FE59A45A9 + 3DBD1C7F4774AF1FE6B0587EED97318D6C527BD8B91ECAD5FDEB7BC8FE661AA0 + C8360B519658443152CB3875AB65BC4A6E9DA8EEB6BA40744E25B78C57B75944 + 3352F350658999BF327B8EABECAF5A7390C465E2C24C9C6DDF503CE3836BA09A + B3BF5144C7B49D9BCE5C3AA6349DB5BBAA866A9E8BD26CB09CC8C1F64F379CED + 9614787DEC557C6A476885EFEEC0628FCD1EA2636B17E7FA6C1EFA20368770D9 + FEDB332F267FFFB35BDA179816F432DA8ACFA3B9201A95C9CEB5377CB7A5161C + 5DBB481B2BF4B4DBEF1CB6E6B6DB65071C16EC836FE677704D3F805AF139A054 + 801D6796634BEC5238F85BCB059EABEC07B2592EEBDE3B10B444F1BD703FBCAE + FE80334581C0AD5AF436DD04EA0A91967302C72EEEC0D248334C0D9A8A03FE56 + 8AAC631F2EA62CDD53F429BB323AFE46C874BC16F21ABC725DD0DDD100B45603 + 0D22E414046345CC22AC88B6C2D698A5D818658D33DE2B4BE959D173D91262A5 + A6FCCBC12FE3A2E41C185527D0751B68AB031A4B20CCF7C781840DF04DDE03C1 + A54330F9F10D6C0E3055E73AAD5E5A7A7C9BDB9CD037617DDA02AED9DF010C61 + 550AC2DF227C2DD40D45B08EEA8B5BA3052133B126D21C699E6B422AFCF6067D + 93B213551201B2CBE2D1D95605C8C877C6DB24FE6609AACA92EE62A9AC42E7E0 + E4D94D28F7DE1A54716A4F6097448890ACA3A8AA1440F17349DFBE9B2BC8DEC5 + 60AB737038693BF6C4AFC25BE47C34730813ED51E1BD2DA0D4F36337DC4C07AA + 72E092668F6F5277415A7109901601D57980241328213F72AF9F8363FC3A8EFD + 20DC14BD026F94BA6D72A5E727BF1C5C89B2746C39BB9CB3CF0F9F8D00E1D768 + 2F49242C99EB4602901703E7F88D9CDDE9CC1A54C67D555374CCEE1D7A7F9253 + BB13507C01D957BDF0FA8FAFF6C758971746D8F3407E2C70350CF6B1B65816BE + 00D72E7E0989CFF6044D3E8B5C3EB26A8D3B9A8FC2380425EFE3D883F16B8182 + 9F80DC68203B14B8E2075192239A2F39A325FAEBDC62D7F5777D07117B6CDADA + FAD3E1FCF6AC00BC1D36076D997E644DC265905CBC7C0A48F7E1D412E5902776 + DFF889D6DA735E672939B93DE14AECDE861E21618427FB38810F3ACF1D9148BC + 3F3D7FEFBAF78AEE899E4BA9E766978A13DB02890268BF88D4DDC3EAF70F5147 + 13A9D1825F27CAD6901C13FA70EA21E7A514FAE1427632D7D2675CF6257747CE + 32C31FC80A220AEEBB976B615C6DA3369FD8C85D65064299150A47512D5C2B6F + C1515C0765CE699277A7B9DCE37281E407AEC7F7E55411C9C9160957DF9CADE0 + 0C92AFE7C0ADBA1D0EA4F4DC6A3A902C2A04C429E820EFB00509AF62721C1F05 + 37483E546490BAC826355A4F6A8DD46B691A680D29CB32E058DE0AD73A3969DB + A0ACCCE36AE8A3B425782CEA313C1EFD04C6C6E9A34442D66F2805E4E41DD14E + 7E25AC25EBD45D474F5D3194D2125CA89242D950869EC6725C2A0BC70B716331 + 3ADE00FAF1861813CFC7EC1413B4B7105E29EB7B4FB554A3A9A910A125DE686B + 1693F74E3D27E65635CC0556989C341D539266E0EFC96F625ACA6CBC9232079F + E6EC40AFB2839BA3AC3E0B16C2C5989EBA00EF66AC405D6301C7FB883D6192BE + 0873853698275C02D3CBEFC2ECF2FB30BF620B8B2BCB91DB9A830E79136CB337 + 6021E12C3357C23A6B0D565CFB04AE62772CCDDE88A55737E1DDAB5BF03E19B3 + CDD9860F72B66345EE2EACCCDB8D9F1A9371A1298D7B5E95B707ABF3F6C22E7F + 1FD615D8637DC1016C283C884DD7BFC2961B5FE3E31B8ED85AF42DB6151DC6F6 + E21FB0537414492DD9E47B562676141FC12E91133E13BB608FD80D7B4BDCF179 + E9717C517A02F6377D70E0A62F0E96F9E1CBF2007C551E846F2A42E058118A2B + 6DC5A8553623E3B60899B7C59CB2DA4B062DA9B215FF73F5F8FBCA91E8D69DF6 + 51D99952A9B4D7C0880FDA92E7598FC8A7AE5EBF014F8E35C42AD2924FFA23B0 + 3662B11823478FC15F2E49F194FE38141515D139DE19044B7F3F2836B55A8471 + FBDD31A5181867EF06336B8A82BC2C30E421FC26814080A70D2760723E83A106 + C6985CA8C628E349484949A1736C7C003BBCB7B7B76EDACCB730DE29925B9BC7 + E371ED78A7084C9D3E03C44E8A1B2374F007C3C3C3F1FCB4199852D47B174F9F + 5F786D16C22322680C07B4B02FAA54AA8E71132781EF97DAC710D1F8357DE3C0 + 748CE14F00C330E4C503FD7B780F671757E89BD9F4FB6BD368D377E0E2EA4663 + 701FC04E94C964AA51FA63F1D299E2BBFCF5DE987FD7F34BF1251845EEB5BDBD + 5D4DB83FDFE123F67E618F31B61B1FB8B646FACB36E09FF6FB690CE177F88ED1 + E30CB8B31AACA83FF9B4DFE1BF2552E1D13ED4FFD0EF59AF9951BCE1A2E8217B + C5317A0DE2D3C3FAE7A67D3A466DD447E7DF302379E625679E52CA2487218A1D + D6258AE21971227D3A466DD447177F3D983742747A28C3B627A1397FAD5A1CAB + 27A5A27D3A466DD4E7AEEF3BF13CBDA2289E056DE1C07B5C1C33BC465EED86DE + 8E4B9057BB70EAEBBB81DAA8CF4086EC690F8D8BCE4DED954953E4742DFA77E2 + 5E591A9180EBD3316AA33ED49763284BE2A37BA3F6CEAA635CCBB627A2EE8A45 + 97287AA84A14F327469AF176171D1BE8C39D07DD5FF430477A3E748FBD1DA9DC + 5AD49FAC1341CE6E64691CEF2971ECB0483A1F1713F1A1BE94A16CDFFF3E7846 + E2D8E1F5F21A772E66BA26E5346744FB748CDAA80FF5A5CC2FFF3BB99FA76BDF + CF0BEEE375C55F12333C9A727DECF0686986A5D6F8759D9F346361171747FFF9 + 5DD47A7E0FBE3FC143EFEFB7E6CF6FCDDFDFB37E7E4DFDFE1BCA953F9D + } + BitmapAdv = { + 4C69020000004C7A070000001800000018000000D91400000000000078DAED5B + 07585467D69E28269A185336D1180B9A4DD6DD64376E8C51A3281634CD55638B + D115D0C41E75CDBA9614055B62A8022610115444692A2AC5862045A40D656660 + E845AA14419861DAE5FDCF772F834807C9FFFFFB3C99E7799DCBDC73DEEF7CA7 + 7EC21D0022B483CC20D153325F032B99EF9355521F113A83CCEFC94A5EDE47F4 + 243AE0D543E6676023BFF492AA26EB009485C73A059363F2A4F753D7F89FAC64 + 3AA80DEF326A32F7F3FBE80A3FDBB3B2F0D76EF13379A6D7B1BFFB77C9DFF28B + 2FA1346E391A6A42BAC42FF3EB6723BFFC8AAAA6C01DCA8A1B9D82C9A5070C47 + 69FC8A2EF2F7AF643AD095771935F9EE14D397BBC4CFFBBBE27AB7F8993CCFF7 + 3BFFEFFCBFF3FFD7F377D49F1F879F9F2FC42DBFF80795D4D7E0706FF3EBE723 + E36E6F3E3E967FBA340F7BD69F65E7FA5776719EFF24BF3444C574BA345FF8DE + 3FA45D7FB7391F690D664F97CE234CAE037FFF7FC36B6E9A6D0CBF05F72877F5 + 4E42C3283715D8756FF18E3EAE1A63E8AE0E18E5A6C62B811A8CDC5205766D78 + 5C1DC0EEF584F355173C4DFA9F8E76579F3674536B479E54EBFE10AEC1806C1D + 5EFD430646CC2F81E12F2A1DC968791992653A1DEF5FF521D9251EE5AEB947EF + 1CB371E429B56EF0552D9E91EB786E9EFFC50C1EC3466463C4AA0A183A29754C + 76D471D27155DD1BE5CA38541FB6E1DFAB86A7541812ACC1CB3735784EACC580 + AC87BC2DF99BF012ADF55E3E467C5686116B2B30CA49C9E273B5959FDDD57EC3 + BCD4BA967C9DF2B780E18F0A2DEDC7A795FD6E6AB7119E1AED63F3DB2B19FFF1 + D6FC9A232C8E8FCDEF5C4FF1D0D8B711DFAD2C4ECFA4697BCC3FCC308BCFDDD1 + EEAACDADEDD71AB37BCFC5F59C7FF8E40281DF553BADB5FD789EEE35BC14AAE9 + 31FF88C5A58CBF8171B5590394FFC37CD45C4FF947EE7BC0B1FC6FB7C68EABFE + C5F6F7AC44DB6DFE61637279DFB038B6DB6B8ED50DA1DA500F09D0749B7FC4A6 + 4A56C3EA3F9EAA1DDC519FA05EB68F8F7342D7F9878F2F60DCCC7ECBCE7ADB70 + 1F0C303CA1CE19E9A1D13D2BD576CA3FEC8D1C183AD6EB0C5DD5394CB74B73C4 + 5DF586A1BBA682EA593728A97DFEE16FE7B37A256E4D05D3E95EDFD78CA55814 + D05E3896B34F6736E31F9C49B9588651C7542C5FF2471F53BFDD933930DC152F + 523CFC583C869FD5E85E88D662B84911465A2B748D33C68FC93CF60C7357CDA6 + 3923E5F34FE8F529ECB3DE9CBF220BF43174D37E3B9AC0AEFF1BCE23CD31D95A + F1DE14EBBA5C0676DDDBFC46D60A5F23AB3A1BE2B765D7BDCE6F537BDEC8BA76 + BF9155ED0176DD9BDCEFDBD6BC3EE388C2D5C846A136B2AE531BDBD5BA4CB7AB + 1FF5B8BC263F563D37DB4911B8E494B2ECE01D0D7794FA852DF5D6EDB734BAB9 + 6ECAD2194715E7A61FBD37B047FEF8A1FA0513A7BAF4BD77B45A9F220E81A502 + FC8A391CCBE3703893C39A508DD6D851219BE85039A8BBFC339D943777DCD6EA + DCF3395C2CE11056C1219C1054C6C1E32E07DB2C0EDFA472F83C44AB9D764471 + AD7BB1AC1B3BCF4379CF8A6C3C59409C6477EC7D0EE26A0E21E51CBC0A3938E6 + 70F89EF8D7277198E9A6BC37D5BAF6CDAEF24FB5577EB5EABAA6C19A6C3C45FC + 57C8E604E24EABE570AB92832FF9EB28F1EF4DE3B081F83FB9AC6E9862A358D7 + 557E63873A9BB5B7B4389CC1E104F10790FDD1551C126B38DC24FB7D1AF92DE4 + 1C362673984767D4A98E8A435DE677527AAE8BD2E2503A875F2996E78A05BF44 + 540A7B394BFE71C826FFA409FE9917A205D9E4DE55FEE94E8AC40D621D2C48DF + 89ECF4A4785E2A15627B81D63A912FC4F75BF2FFDA440E0BA27498E6A888EB0A + F7121FF49DFEB3B2702DD9B55BC681C598ED81ADE14D7EF1207F39E772F8917C + F71F2987D5620EF3EF7098E6A42862BA9DC6D6A66E9689A7AACA2C81C3D7120E + 96E4637BF2850BADE14A70C9156C677BDB9AC2616582C06FE2A9AE9C6E573BBD + 33FE698ECA5B7343B5F82C4EF0ED4EDAC3018A8335EDC38E786DB2849F77C984 + FB9FC50AFC73C3B498E6A0BCD1A1ED94C3338E294BE7DFA6988572581C4EF645 + 7358476B7D45766E235F6F217FACA79FCD88736924C98571F807C9CE239D19BF + 2A4BDFB77EF0E7766D7750C432DB992CAF1342EF0C37DA41E37D660BB369EE4D + B607454C9BF3C34AF9FEAC93CA0AB6D7E6581A43B692BDABC9FE35842F08E6F1 + 1C96C53E2AA7C7AC13CA0A232BE5C4D635A5B4F9F88AB64D9D45B4C6E7B4C68A + 78014BDBE166601C1443AB367CE3D81E7F77F05130F11FA96BF5FF17233BD56B + C68ECAD0694ECA4CE3A38AC2E9C71425333DEA4B679F5155CDF65657CFF65329 + 3FF4D7E83EB8A0D1CEF1532B67FBA8AB4DCEA8EE9B78D4973159A6C3740937BB + 327B58FF677D748A8D72D2947D9549933667E1BD150998F04F31D8F514CBF2E4 + A93F3D98C26498EC639D1DF6576C9EB82E0DEF2D8AC6F885B7C1AEA7ECAFECB5 + DF7358D0796AF281CAFD93771717BFBFBBB864CAA1EA83A2259DF782AE20FEC7 + B5CFC9AC4D174BAC4DBF91D8983AF0A06BA98DD9A24C8715837ACA9B6CB76A5C + 92BD5970E4D1D579A1DEDBB38EFA7C5173F8FCEA7A458C4F79F54DD7ECB0D39B + 33E54EEB93A4B6AB2EC96C4CDFE92AEF6DDB2503E26D4D3D938E6D963A057F5D + 9F911E0889F41CDE3AF916DE3EF937A4277903F29B80F42A6A137D1110B8A34E + EEBC3131C9D6CC2DD7C2BC7F47DC12FB2F8788EDCD63EDBC4DEF7F7D650D0E85 + EEC02F5107109AE2C1F3FBDEB145608C03901909A485C02A7813E67A4DC702EF + 19D879FC0355AC9D6922E368CFEE587BB3C4CFDC8DB8CDC1AB119B7E19CED187 + 919A130255691A7E8EDA8F862209509008E4DC416EB20FAE4459E174C82E7CE2 + 65CCAFBFCC6D321763BF52DCD63EE2ECCDCE6C719BA36172E169E7E0167F04D3 + BC8C10243B03DC2F022A7281D27480D6A8CEBC856361DFE187AB9B30E7EC549E + 5B8FADAEB3B4F1762B4F3EF27B5B9BD5632F382F2FD7CB187B4FC5A4331331C7 + CF0436D134B61FDCA3350A817BD940491ABF876CC979FCEDD45F31E1F4384CF5 + 9C0093339361E9BF02F3CF4EC3A5A3CBCA597EE8F9C9E7C1B3DDC63F62C7746F + 63388B1D51723F078A1AB2BFA694F69047FC72E06E32B604AE84E72D4BA4C6B9 + 21206C1F4E5CDD86357E73F121ADF3E529135D9CDDCA6BFAFC8EFA79756E73EE + B11E63212EBC0D347080560DD4D7D01ECA80CA7CA02C03284CC1F9681B7CE23D + 1353C8F6C0D0FD488D74C0E5ABBB9A386E3AAE2861F5C16AC7FFCCA682E6FCEE + 094701552DA051119480B25AB09FF1530CE2245EE49BBF3DB25F3D66784E8499 + F71CB81E5F5CC16A90D5E28D2BFB4B277ABE075FE20D969E466D25F9595125F0 + 32D4960B312ECFE5FDFF55A0699BDC0C1B7CE60AF6FB7C559C6863F62DADE158 + 9170BE6A7BF097B82DF5467E7E243CE21D51584C79585326F8A5BAB8D1379994 + 3F52ACF4FFB45DFE8F3CA7C0E1A23914C1B615FA7EA2145FAA2C4DBF0EABD09D + F0173BA3A23001654562E22C107899DD8CBB3895722709B713DDF95AFEFBA9B7 + 3196D0728D03E73F8732C8B65C62637684B0BB26DC238BD50CF2121099721A51 + 522FA88A25026729C5B39472A658C673232F1EC88A4295F43234922094C47AF0 + EBE8B9C79D1A8BC2102B54FB1FCA4CB131DDC9E25B7CEE700232C2F9BAD4E5C6 + 62EA99F731CEE31D3885EF41794E04E5630A904FFBA17BC8A6BC4A0F0352AF03 + 290180F83CF588694DFC072F2C076EB9A0D87377BCC4DA7CA1ECE8928172A70D + 49AC9FB0352AD2AE3CB2D765E7FF0171D219D467DC12FA8E5CCF1D0424FA03F1 + 3E58EE3DBB493E2C7817B26FFC00B9C39A64F9E1D5CFF2F54B3D561DE35D09D9 + 75A8497716F585963EFD987A18DF3765D704EEA48BC4ED8B863BA7F9583099E5 + 5E2670BCB80A05C187AAA4B6E6FECDFB43A6F316315202A9EF5E813CFE048C28 + 8F9BF3EF0C300524C140F2E546BBE9BFC031D49B6E9F84D1E9F19848FE647E97 + 5F3F888CA31B125BCE0489DDAAE3950176A9BC5DC4111569D7C43D936A5E16ED + 2CF08ACF01713EC01D4F20EA04107E0C2E97BE44D2350BDEEF957E9632A9AD99 + 4BCBFEC97AAAD46E758422C4F92E12FC80847398E73583E7F7BCBE03FC6771DE + 82CDD11E4DDC8C530F458055A1D4CE3C3CD361F353EDCD17A9DDAA88CA8B87A5 + 88398B93C1FFC212F2A92EE634D97BFA216FE4F147781BED964BED5745245BAD + ECF0F77BC23ECC8E65FEBC515C73ED4895D525733430BE48B756F632D45FB5AB + CCFC7983586267EEDC9EDD6DFE2DCCCEFCEFB4CE459667F91E3BC435FE07B394 + C1B6E5CA209BF2EA0B07B38A3D77C5CB9DD624B33C915899BEDDD37304CB6156 + 2729D6E6BBF4FD84BFA6CFF4F9FD3B1E033AAD303F7E0B306E363FC25DDA8522 + C2ADC3FB8F2082F237D2956A8474A2DC8573471BFCEA085754469C4449A427BE + 1353EF8FF815A551D40F2298EE7141FF36D559341D73A24F09B517E329D476EC + 59AA732FA187D4553EE4E7D716742BA2BDB03CE51ECEA5A6624F5635AC5332E9 + AC924CBA6704DD786FBE2FF33D83F5239A0148BC20F4D4A44BC25C60BD52715F + F0135B3BB6716DD22D4A08C03979062C68EC32EC2FD4A020F9066A938384FEC9 + F46976158A3D6017B11E29092EC24C603384411E2ACC2076AE617B607D31F912 + AFAB4C098685A40016390F9AF819F6A61623582669D2CD937863A4FF10887C44 + 30F0E90B8768FAEF4C763421469873B97174C6A913CE1F32FDDA37057D9A51D6 + E9253850A4E3B9B7E6AA919F29E6E7277262C0E5C6C038781CCFAD471FDF3E70 + 89DF43672F299D31685617A50A67A7FA0734AF69A6660BBA6CDDA29C64386714 + E16E9E0CDFA457213F2F0DAE5925822EC125711F9E3E3F10CF9C7F1603CF3F87 + 672F3C8F41175EC48B170723484E71AFC817C0CE7E6A059D0B28768592876B17 + D319B6588EBAE24C04E5136F59169D6D7378DC2DBC83D702FF84572E8FC4D000 + 43BC1A300AC3025FC3F0C03F6244D01B78EBEA3BC829263BAB8A047E4DFD43FD + F23C549548905640B1A9BC4B3285825C33ACBFB3166F5C799B30167FBAFA778C + 21BEBF5C1BCFE3AD6B13F0D7EB13B12062091415D9023F43A36E709637C6DD98 + 8237497647FC7668D8D9AA197778EE65BC13320DE3428CF16EC8748CBF391313 + 4267114C3031740EDE0FFB0093C33EC2945B1F6347E2EE47F8FD333D49C6A451 + 76362691ECD6F87F435991C3DFAF2BCFC2D2E855300E9F8FE9E10B3023622166 + 462CC2ACC8C530895C8A3951CB089FE383A8E5F8E8F63F79942A4B79FE88BC60 + CC8A58DC24AB97FF80E43725FC07E1F9C1D899B4179F449B616EB439E6DD594D + F8020B62BEC4A7316B09EBB028763D16C76EC092B84D581AF7153E8BDB82CCBA + 5CD4A96BE8F375BCEC8298355848D70B49765133D9A5719BB12C7E2B96276CE3 + B122E1DF5829FE0F0F53F14E98932F56257E83D549DFE28BA4EFF165F21EAC49 + B640B6E22EB2EAF2F1CF84ED8DB23B6096B88B971764BFE3E5D724EFC55A925F + 97B20FEB53F66383E420364A0E6193E4076C961EE6B15566857FC96C08B6D826 + B3C3BF538F204F59821C452136A41CE465F5F25B4876ABD49A97DF46F25FA7DA + F3F2DBD31CB043EE849DF29F79EC963B537DFC8A6F338EE1BB74577C9FE186BD + 99277858669DC2DDFA72E4530C78D9744196E1BB0C267B1C7B32DD9B64F76579 + 104E637F96270E649FC5A11C6FFC90E3D3218A5415D0346851A2AA2454F53A18 + F7EF33FCBF0A5308ECD99CC9BF01F752420384177B5FD28BDCECEFD20577EEDC + C1F32FBC00F64E2F6ADE1D3F93D30D7CC308271B19412412F1EF8DAFDDBDC0FD + 12A1DADFDF9FE77EE6BDE9FC3BFB995E345C31F831F9ED753A1DFEFCE69B1830 + 7A0CFE92508F01AFBF8537C68C8156CBD7A7DD63708F26A87EF9E517DEE6118E + 17F1268DE8110EC25E9C9D9D193F0D28BCDE437EAFBABA3A0C1E3A1403DF9DCA + 73EB3170C20CBCF4F2603C78C05C84B33DE0667F436EB0B0B0E06D1D753A0AAF + 07C8D177D00BFCFBE8B331103DF1042C2D2DF5F93AA99BFC37CACACA3070D020 + 0C9AB398B7D9D03D945F8BBDB39F07CD5E84A7070E444949095B23AC1BDC9F30 + 850D1B36A08F413FBC1E98D126FFEB57B2D1A7DF93D8B871A33E5F3FEE0237FB + BDB5243D3D1D06FDFAE1C5CF3735F9BC253FC30BCB36A2AF810152E9AC4D2FF6 + 8F4127FC5F30C14F172E84C1D303F1A7B0920EF9C744DC83C1C04158B868917E + 0FABBBD2079EA0D8BDFCD5BE4772A6797C9B7FFEF2264B7EDDC8C848C65FD441 + DF68EA034FBD3C147F8EAB7B8487E18F1765AD3EFB4B82124FBD321C13264D42 + 4343437B7D83EF03172E5CE06D19BAD7A5150F9F93748FBDB7BC37748F73677D + E3C8237D2059DB8AA33DFFF048D1B5EC1BF69DF581EEA283BE61ABEF037D9F7D + 0E83B7FDD863F0FAAF0C05E363BC8DFC17323232F054FFFEFCFA8F0BC6C3F8E8 + A57FCE63018143EFBE18DFFC66319840F89EF0632FE0FB46BEFFD3F3087B6E9A + B058E6279AD8FA596FD144762FDE45D4AFDB7F53231DA96F9FFD32DF7E55325F + 034EE6D7AFECB68FA8E9D936762D3BD7AF94BF4732521F916577D6919F15BDCA + 9EFF2E4F5E07DDFD60A45F1AAC92F9F4D9F3705F7DF6B0CFD83D26C37F978A74 + BAB38754BFFE7955A9DB9B7D27A1AF2AC54764CC20F3ED5BAFFFDE199361B2DD + F6BD6F1F87FC7023B5FE7B0FB921E354FAE7DA7343DE55E93F67324CB6B338B6 + DC9FC45BB43AF5DC004D67DF5763324CB6A57F9B3F53CFE2C3ECA27DE64B7DFA + 38CA7C45AB647E06B525318B759DF1331926CB74982EF315BF4F5FD13E7DAE50 + 7E54B238315FE6DF32D2309B04EE5B4D3C5CF515D4E51F416DF64FD05505345B + E316BF06D361BE621CE529EBC1E71ECB6F5FD11296672C17DAB4F14118936F48 + F53560762AC9961A8AAFAE4C6CCAB17B6DE9E8EE0741C85DD192542FD12496CB + 2CDFDAFA2E6259C24A96FFF7A5DEA27FC042C43F1728F115CD619F95A76C6868 + EBFB897C3E53CD30EEA67AA19C6639987B737C536E303F305B253EA2D96DE4C4 + 3CB627E6B7A61CBBF1AE9A7130AEF8CBA2563338D55B64427C9C5EFE41CE6130 + 7FD0AD275AE51DED85D58122DFB1899FF294F96456FB392F9AC564F4F275F90E + 603ED7FBE551889E6079539B63DD8CBF2FC76C6CD56F682F4DFEA13D36CF193E + AEE48B56DFC5F1167DC07CA7AB0A7CE81FF2ADDE3FFA7EC5C79762C1C79762D3 + 325E2C862C962CA6BC9F78BF88E6A7FAF5AB2E139B73ADE24B39C2C7977286E7 + 6ECACFA076F3B34C6CC6315B853AEA5BCFF65421D9D4D07E7E0637E5A75003FD + AA584DF0F54535D2567D313FD4E6584151E0447EBBDA767D516DF2F545B5CA6A + 56DFB3592D37F687BC5EE80FF98D7DD0F27FABBF75AD3FBFDBAC3F8FEB567FEE + 74BE504EB0B836CD17CA417DAEF564BEFCD6F3919FEF149FA6F94EB9DC6ABE53 + CD34CD773A0BF4F41CD1D9F9A4B338FE0FCDF053C34C7A070000002000000020 + 000000A21C00000000000078DAED5D075854D7B646936BEE8DF1DD9BC4E49962 + 4979DE9B7E633436B0A7D9134B120B60626C89DED835B16B6CA1D81515B02148 + 13D45851902E1D66863A144140404560863230FC6FAD7D668651E9A079DFF79C + EFFB338773F6FEFFB5D75E7BEDB527300230412310EB6AF29ADCAD8D87C2FD89 + 5B7257133405529F36EECC8146EADDAFAD706D5B92E0F94C554EE818DC8C98DC + 24701FEEAB706B5B9CE06CD2ADA9FA6C3BF7D7E4BB0325FECD8226DF8D6C685F + 455C6E4DD567FFE5848E6DB6B61EEC0785DB13054D1FBF09F2A2A6B5589F3998 + EB61C65AA2F773C8F41F848AFC13CDD237C4DAC9BF57E54458E266ECBC2681FB + 24783DCBF14673EEDA647D116BA4AD298E01AA0A9A054D7134D9F00FF2C3E026 + EB8B588B98D66C6D3DD80F89DECF3763FC146BB2C52DD6670EA1F558FFB1FE63 + FDC7FA8FF51FEBFF3FD7D7D57FB7FE0CFDC6D6BFADAD5F103B5357FFB76F54FD + DFDAFAE2FC4335378FBB31678F56F77F73CE1AAD54FF3157B3CE5AA2FE8D6E59 + FD7BF2BF9A75D612F53FC709F5E7311428563609A2FEA7BECD3D6B32B81FDBDE + ACB3761362ED319A8F6E8E65DD5E73D0947475A828E1EB47A9DDE55065FF6E0E + 9ABC6E0E1590A0C9E37B0F5BF7233BFCA59B63C552D22C67DD97BD34E8BAAC48 + 6703DDA367DCA6F57D8DBFD2182DBAD95724E9C7FCE2C54AFC4D5985973B26A3 + F3B45B30F842B4A1B6D4A7395AEFB8A25D773B747CDD5ED39378A6D1FC1E25DE + 423DFFAB2E1AFC2382B453AB045E7E2E59E0D5DE99E8BA45556307F591FA6AA6 + 3117733277BDE3B4AF5863D4FF1EBCE25E81E782A531EBB58DF505D8179F64A3 + EB9A62D4C5C31A75EAEBE6B5EB511AA76B053A9DD6E0797F0D3AC82BEFD1AC53 + DF08AFFC331D9D47E5A2CBDC3BE8BABE04DD769519E2A41EFD5BDCA67D62559D + 7A8DD57FC09E2EA942BFAB437941DD715691C66D9E5154B6BAFECBDDD3F4E34F + AD67FE63B94D87D88730FEF732F4FA3175E9936F02B8CDDFA35A5FFFD59E993A + FD72FF7AE6DF83DB3C1BDAFAFE7F7568B67EFC1EF5E86FE6362F5CD1B4BA7EE7 + 6FF2F4FA1BEBD6A7BC456D5E3ADDFAFA5DE6170AFDD71C3553EBD27FFD707977 + 6ED3C5A9F5F5BB6D2F15FAAF3B96FF4F5DFAF49F36D42657AC81B8D6D37FE51D + 43ECE7B2467D39B8AB7DF97E6EDBF17265ABE977FE365F1FFB760DEFED6543B9 + 6D679E03652BE8774C41575BC9F75DEDCB0637A4AF9B83046EFF5C50658BF55F + FD2C47EFFBF8867C6F9803C78A497A1F3C9DD402FD9795356327CEC6D600266B + D096FA0473BF4E0DACC53AB59F4F167B9F6EEC41CCD9943AE435FBF27F52BF22 + 43ADD344FD2E1605BAFDBEBC98B99A530B71BCE86B027DBDD5A03EC59B419BFA + 3626E6EAB7A1621CF154887AD393F6E6F8CA3AF55F792D155D5618EAD10AEEDB + 1AF5A7540B56A48B383A24E586A7538CF45F4841E731B9E8BAD750E3DCE8EA50 + D9AF356BE0378E94BC48BCAEFA3AAEB3B346ACCF573FCF41572BB5718DE7CA6D + 1FDED9A36C28D5B5B2FBEB4ABEC7CF1EC5F987D712CDED64D22DA59AA594AF9B + BABE1EA365E86FA5B230B552650B58ABCC1FA5B6E9E6B22EA45B49365CA6F72B + 04CD00EBD2CE8F6CECD6EAE1A4897E56EA5E0CBEE67B8F4ABFDFEFA57D59D3CC + BA643643D22FEDF3A8F407D994BF49BE4F605D1D1443ACCABA3EF4716F557D3A + 64BB2A7EC80EB57AF2F1B2E2494E65555F3B95564E38565634709BBA6CD07675 + F400AB92010FE3738F81DB55473ED955AA5A4F6713D71B5A78E668E14170A6EB + 83195A58A76831E7B2068377A85503B6A9F74D70C513AD95EB686C7F7C75A44C + BD8FF65F17D23B9DABC5F97C2DCEDED4E2245D1FCDD2624FBA169B93B5581C53 + 85CFEC4BD564836763EBADFA30C056FDEBF083652A5B1ADFA14C49EF12695FBD + A5851FE16C9E1627C8A603E4032B6AB3225E8B9FA2B5186AA75699DAA816B644 + FBE38DC5CFD338D4BFD29876A64AE33C952B6987156A718D70B9806CA2797024 + DB6C955AAC4ED0E23F715A7C1B5809331BB261D3DD679B9D67ACD433461F2D53 + 6D48D462579A164EA47F867C1E74470B59B11631455AF8DF926C3A4CFA3BC8C6 + B5A43F5FA68565A416430E9597985AABBF6BB6BEAD7AD7E43315D89024E91F23 + FD3F58FFB6168A122DE484C0DB924DEC9B9DD4661DD9BA80F4A791FEE71E15E8 + 6FABB26DC1DC7B995FD0084E1EDB914C69ACFEA4197D5702CFC5E99BD2336EA3 + D7FF2E4A8B2F4E6960BA5D75A2B9FA0377A8832CAF54620D716E236EC7EBD2BA + F3C9977C1072A766FE3936B7B3FF1325FF4F23FDE1E72A3160BBCAAFD9FADB54 + C9DFF9576205CDE9EF14DBFB29C64F644BFE665D06C7BF1BDD73B85E137F3FEB + E67FC4450D066C53C53747FB8B1D788A62A7624664159629B4D84831B03B4D8A + 33F71C29079CD1AD7F8E4B3B5AFF5B75EB6F6EAC165323B4181D5CC56BA0FC9D + 35F57FEE58EBDC531E1DB4577DF78768693ED9AF3C3EF601C7A16BB684E337A4 + B1F3FADC48F96739D93A87F4A790FE98502D06EC5615F17ED5547DB27BEDA7CE + 151516E4C779B49E7FA5716D4A96628C730DCF37FB82B5F7905FAC95928D8BC8 + D61964F337E192FE30E78A72E25AD5D49C6B6AABCA1BE153896F896726F12D92 + 4B73CB3E661B58736FBA3427EC97DF92241B39F770EC8D0F93F4475CA218DCA6 + CE6D4A7DCAB5C4C03DEA22EECF3CCC379778390E788C9CE779BC364A292E3936 + D836B671768C34F76343257DC6C0DDEA22DE3B1BED7B5B75E4E76734D5634228 + 86AE6A312E408BC974FD03F1FE4CFC4BC89615A4B542216131F97C6E8CF47C0A + E98D0BD462D455A9EF98602D3E3BA5A9261F84374AFBF7926F06EE2E2D19CDDA + A43BCAA765600EE662CE013625131B5A7366B6AA82E1B46E85EFD8061ACB687F + F227E12B1ACF57BE343E3FE9FD7E7CC9E3F593C6CD7DC604D6CCC170CAA36636 + 2505AC51677D63ADB21CBCBFB4648CD1DC1963629834B7DF4749313E33467AE7 + 9FF9FEC4B0DAFBE931F8605931D56A757EFE4773E4F1B9B7A65E8EF1D7686F8D + 90D6B779A4F43E8930A1016D06739B6E53BBD6A9BF437D6DF8F9CA067918E3AE + 496B83DFC736A2BD988373622D86D413F78E430F975552EC83D7FEA8C0AA46F1 + 3684917E95F8E26C25861C2ED790FEC13AEB6AABE28E54336D221F5D34DBA64E + A5735519FD5C41EBF7EEA0FDA58583ED4B0B873894950C3D5A5E32CCA9BCFC13 + 97F2AA612EE5957CCDF7863A94970C3E48EDECD445D4A79038D4A656255A8AE9 + 7CB3EDEA00CA699BB9A66A4A2EEC6B53F45C7F1B754FD3DF55C3CCACD463FB6D + BC23EFB73C1B7DE6A6A0F70FF1027DE62AC1F74C7FBB136F6655329EDBF279A4 + AF4DE92B83D6E0C9563D03ACBBBDBECF8FC9E835310C1F0DBB841E432F89EBDE + 74AFDFDA5B9B1FF619C46C63C90BFD7EC9CDEE3D3B091F5BC60AF075DFE539B9 + 8376AB3A3D8AF357DF0DA5AF986EB873A4DFCABC9CBE2B6FDEECBFFECED121E4 + EB47A11DB563DA0B0A1BCBCFE5D6163FC6599B2F65F0B5DC6AEA67FCEC6168C6 + FE3EF54599B5C522D2F197DB5A1645EF9995223FB43036EED8D2844CA755E169 + 0E8B8315BB6629E26C2C8BB98DCCC662616BD8A2D83DE199381B8B5531D69677 + 2F1E9C9E697BC2521513731C039DFBE19DC3EFA0C7D17F439D701148BC829258 + 6F5CF2DB84A24B7BAFA7D92F8C92595BDE8EB3B65C49B6B76F96B68DF9C77136 + E639D1F63F27DA5D5CA6F10CDB89EA1B71A8CC8CC4C74E3D85FE87A41F147100 + 48BA0A245C06E4E7511D7B1AF61716E0DCD96565CAFDF362C9FE2C99CDD49E4D + D126FF4D8CB5B5B8B3D77DC6DDF9E7A76377E03A7CE63604417217DCCA0811DA + EF1D790FE7C2F7C2F6F212E4C59F251BA8CC4EF0C159FF4D64D7073075EA8545 + 272762A6FDE0AA681B739E97467D4624B7B2F836DCD6FCEEC8C3BDABFB1DEF8D + 79E7BE475ABA3F0638F74744D22954E5256384DB27987396E8C81FB81E09A45D + 039441340FBE3840F6FCFBC8FB38EFBB9E6C7C57D83ADCA117C26DA616C96D2C + BFA937CE6CA7F588B2312FE2F6BD8E7D84C4345F9415A4E0972B3F234A7901B8 + 9D49B88EAA7C25CA7364400E95F659B140460432E45ED84DDA88F7C1D6F373E0 + EBBF051F908F589FF1857D2F44910D3CAF75C55A8C8DC5CDE9F683B5DCBED7B1 + 9E506606E1ACE2B8812358F90750982DD9519006DC4C02B21540663432E3CFC0 + 39F0376CBD38D7D0FE7E4C3F68561D636D9E5D5B4C52BCAE71DA37B1D8B8FDD8 + 932331F0849961BE57F92F054AF281BB39C20F203F2027C1E003A5DCDDE0F30F + 680EF43C0B3CC7C194C6F3A9535FB8ED1E7F576E63B1E2FEF51D6D635134C8B1 + 479DB6A717C423363B04B76FA702C579C09D2CF241BAE4831B32DC515EC5379E + 2331DA7518024276E284EF4A2CF69E84512E0371D5672DB67A5B60B5C7D7F8FA + 889996B58CF303E78B93FBCDF36AD31DEB3D1AC159579155485A9A52A0B40850 + DD927C702B83F493690EE4A8A2F1EFF45D0E9F6B3B1017EE0057DFD5505E3B80 + 8CA07D58E93509038EF512BE19E73C082E7B26DC89B3B2985FE37B8B8025C7C6 + 54DCAFDDE3D88750DCA4F8AEAAA466D540653950564C73C0FAB9D21CE4A58818 + D05C0FC7E273DF19FA9A39F586F7953508BEBA0519FE3B61E1FAB9E199F9C1FE + D5D1D6E641FA7C2EB399767798B3D903633FA938069497D0B8CB48BB02A8E0F1 + DF95F40B8DC69FA3C0962B0BEB9C3B068F9FDF67BA0EC754E761A09C509A64F5 + 6D47DE4B92F6CD958F7597EC1B7F721436F82DC50FE7CC51CDB1A62E946C2857 + D1D8C9F7EA3BBAF9BF6198FFBC547F5AF31FD4ABDF9B7C39C965A898831DDE96 + 08DA697E83E6FD53B98DF99CF4A32B221D83368876455991626DE5E7C64A3E2E + 29903419AADBA4AD8FFF4C29FE7313E01DBEBB5E6D3DACBCA6A207D9B9CDCB02 + CA0373698FB0982DB332FF25F3C486C8CAB4507CE5311CC19463E393CFE378E4 + 4EACF55B82C854DA5F8A6ED6E0FEF54FBE3F1FB9AF51FA8329260E9CFA011ABF + 3DC874581049FACB85BECBBA30CEA10A8507E69DB5C4A20B3370F7461432AF07 + 43917E19D51C67BCDE183CE705B406F3A479E7B55F9E1E8AC99EA31B65C357CE + 0381AB76C87494F4D9FF6987960543190CA487895C7686C67334D40A15B90A29 + BEF353A5F1F23BFF2CC61D2FE5FFCC2891FFEF245E8083EF0A785FDD88C0205B + CCF2FCB256FD63A7E708FDF4FDFF61FDD91C7F89BBE7C8901C00C98670618322 + DE0B4B2FCE8267C46E1466925DB98952AE635D5AEF22E75D8F926C4E0DBE670F + 06EDC1E101360FE612E701A8BABA4FE827ED98A1E0F8D3AFBFEA78EA9BA2B721 + 0C57685FD7F71BEE3614878337A33823946C8B11F6DDB3EF25FB8B1A040A8A95 + D83340B417F2431D1FD03F7576BED0AEF6DB07CAC14509BBCCC559806BA6A22B + 0ED7917045E222CE4301EB1EE8BFE0DC3494A7EAE62935A4463B41A72DA33A20 + E61410E9014DD871F43AF2E13DFD0BAED822E7B215EE9EDC984E63F735CEBF69 + 0E4BA20407FB906A0967FFF5B5CE1FEF2B13DCBFC0D56B7BA49A83F6DB7BB4A3 + 3C81F01308B9FCDB3DFD66B98EC0E93F1608A4D9FD146D9C7F390F71BD5611EA + 5A2CE62FFE1254F23FF085CBA03AE3D8D1F757D14EB48FA37D39C65BD28EA0E3 + EDB5E338736199A16D3FAA25D27D36E35BCA3F65176C8B653696B778CF33DE03 + B9564C3D383F8663478C857873A35DC98681B5EA67453A49EDB83DCD37FB1CE1 + A41D7A1C083982F04B35F3E7736E09B41477D72F6F8172EF8FB1BCEE6AA9B1DB + D33C5C2F3CB73D55F0312FC5525AD82151E71A6B2F3935457AAE1F73A4BBF039 + 429D8436021D50E4B74BAC75B73FE68A9863147A6E50CAAD2D3322EC663C5D6B + 0D646DFE21F926BFD4F760BEE08D3A29C6B6FCF41483F654F7E1D27D63DD6BCE + A44D7B55F061A18DABFB0D9A7A949DB32DA0382F905B59F6AAB7FEA41A516E33 + 2DB7D4777F81E08E704388DF16A9063AFC2E82FC364B7E0E7311F32CC61C4C63 + 0E7204020E3EA0CB283D6B43DAD372B9AE6E6CFD4DEBB3A0F094550AF36B09A3 + C897CB4E7E23E9093F1F35D2B507FC0FD4AA7DD773632A8DE996CCDA7C4AD3CE + 00537BD29AC84CDDF7534CC5E53D254154436DF63697F41881F6BAF1EEAF55B7 + E2D2F662E5DE39B13CDF5C5737F3DCD79E6B455E9B6976F3A222DD16E7DEF5DD + 51AB9E3EAFDDF5DA9891B6FFA7685E63BCB7D5156B4D3DF372BE203BFC386F26 + ED9CA948DF3F2F22EBD0C2A82C8785517CCDF99C9F711B6ECB39E5619C8545AE + A27D83C6374B7FFEE66BBEA7CFE78FF1184DC09FFF0AE55C76E8D12184F609AA + 4F0C2FCE65FE76F52231C85DA0A176F0A77C1840B938F0A0C4CBE07C19EC28E9 + 0A50DE0E736E505F15E08094205771BD2B3C4280F95382DDA10A3A722FB718D7 + 1109EC4FDE0FAF3949E364AD701769AFE4FA84F634449FAC45FF5EDB95A19E30 + 95952128CC0756095902C19157E85E3994E167A4FDCF985F70BB4AFB3243ECE1 + 9E9216D7145C2FC49E926A07D939A3F93F56BBEDC41F14E58FA559D55843472E + 065F07C70649F5CEFDDC829FB8E3CE481075D439A946935F90EA4406D78C89BE + 35FA6CEB7DB627465FC6C15839B625E718B4F5D89E721307658948940548E330 + E20F0CB7C59BDEAFA09B57276CF49F8ECA041FA94E4DA6F34112D5CA7CCE4809 + 94EA67FD8B6DD5FB45D8FE87E0B696A562734AC103FA9B536EC15A711D890974 + 5649F493CE1EC41D1A63870E1E4FC3C4D5C480A1E77A4295E22B9D15B86E4F8F + 90703DBA465F5F43F33BDBCB3538FB871094287BD0FF2909D23985C7C020EEC2 + 641F74A1311B6BEB31F07C4F945F0F179FD3204B267D66959358A3CFFEE0B38F + DE37CC4D502A6361AAD020589904ABB44281E03425DDAB84322D5E3A0765C60A + 98FB8EC15FDCDBA19DFB5378CAE3AFF8ABC7DF084F13DAE369CF0EB0F49F806A + FEAC228FCEEC79748ECC4FABD1173E09179F612123523AD7917F54D7E3909241 + 67CDAC38EC4AC9C32E65BEB03D253315AAEC24E93C989B84802417FCC3EB79FC + 9DF00FAF8E78D6FB453CEBF5229EF3FE6F3CEFDD091DBD5FC20BA75EC6CED88D + 7486CE96C09F9FE85F37E4925FF83D3B5E02FB87CF9CC48F9B2948BC9189C4EC + CC1ADBF3D3E94C9C818A0225FA5F32C54BA7BB12BAE1E533AFE19533AF13DE40 + E73FDE4497B3DDD155E09F78E3DC3B084C3FFDA03E7F8E91A783819B41E7FE5B + 99126E67D5D86E849DB2AD789D78DF38F72EDE3CFF1EFEE7FCFBE87EE103FCF3 + C2BF091FE25F177A103EC2DB177B127AA1DF9521B87133FA5E7DFE2CE7F60DC1 + 574DD7F6F13BD1FFCA200CF2FD046794CEB5EA32B289A7E7E50178F7521FBCE7 + D317EFFBF4C3073EFD09A6F8F0B2197AD0B31E9707E2A32B83D15360083EF61D + 8A29A1DFA3F4767A8D3EDB427C55B733B1267A05DEBBD45780B9FE4D5C0E097B + 6AD55F10B988F886A137D9D9DBF753F4F1FB0CFDFC3E277C81FE57871346C0EC + EA4898F98FC200FFD1181830168302BEC460C2CAD8B5F7E86BEF646179F42F06 + BE3EC4D7D7886B4FFC0EE11BBDF6A5742F89CF9FF9BEC290C071181A389E3001 + C30227E293A0AFF169D037F82C78123E277C113C993005C383A762448839C685 + CDB847DF466E4D5C6325AE003DD778E29A804F02BF16D828DB829B7932C4DD08 + C0D89069181E22718D08B1C0C8104B8C0A9D86D1A1DF11BEC7D86BD3093FE0CB + 6B330833496F1661362684FF283035728141DE29E588B04BCF3752C7C75C63AE + 7D8F3182EF0781AFC266126609BEF16173042686FF84AFC3E712E6E19B88FFE0 + DB889F3129723E2693C694C885981AB588B018E6D14B6111C5588619B1AB0CFA + 9322E6196C135C1173051F7331986B928E6BB2E023AEA825B060BEE865B08C5E + 4EF805DFC5FC8AEF63561056623AF1FF10BB9AB086B4D66266DC3ACC8A5B8FD9 + 711B3047F61BE6C75B19F4A7533FC11725F14D232E86C4B542704D8F59751FD7 + 3AC1353BEE37E2DB881F659BF0937C337EA2399A27DF4AF81DFF5158E1678535 + 69D962BEC2160BE3B70B2C4AD8895F92F61AF4E7C93749B6C9242E86E022CC65 + 2E858E2BDE5AF02D20BE05F1DBB03041E25B4C7C4B12776149C26E2C4DDC8365 + 897BB13CC90ECB13ED48673F7E4D3A8015C907B132D91EAB521CB19AB04179CC + A0BF94FA33DFA2841D02129FC4C5589EB48FB8F611971D7E4D3E20F8242E071D + DF21AC49398CB51447EB944709C7B05EE9840DA9C7F15BAA33C1059BD24E105C + 0DB04AF730E86F4D73C646EAB329D5099BA8DF66EAC3D842FDB652DBDF457B77 + D1C726C3937012B6195E2DC2CEEBA7F17FE4F5F80CF4188FD134F0EF70F1EFD5 + DED6C14677EF51E9EFA8651DEF7844DAFCB764951A8D067DFAF411E06B7A5511 + DE7904FADE2CB67BF76E98989808F0B5EEE5F590B5CD58A4A4A4049D3A7532E8 + BFF0C20B282A2AD2DB30F821EAF3FFB3C5AA55AB84EEDF3EE82BC0D77C4FF7A2 + 835ECB7FEFBF164C60F2BCBC3C74E8D04168763B1280D79C4260D2A60DDAB76F + 8F9C1C434D3FBE95B5F93B25929978C68C1942BBC3D02FF1361D97181D868E15 + F766CE9CA9D7E7BFB16FD78AFA3F31696262229E7CF249B479E209BCE1AD30E8 + BF7926116D9EFC0B9EA0FB0A85426FC38FADA4FD0CE126138E1933468CF3D989 + B30CDA7A3C3B71A6783676EC58C3A98EF05FADA0BF9EC9424242D086E6B9EDD3 + CFA0BB6F8ED07CBA87A9005F77F7CF43DBF6525C040404E86D58D742ED97082A + 26EADFBFBFB4D6E6AC368C59BFFEF43FF333FEB977EFDEA8AEAEE66EA584575B + A0BF9F49DCDDDD05EF93CFBD887F5D2BAE53FF5F612578B2A394173C3C0CF5A5 + 5D4BF22CBDF0D65B6F09CE9756EEB967CEEFD767BCB442CA8BDDBB776F695E16 + 7976D7AE5D82AF5DB7EE782B46D3A0FE5BB19578EAF5B75A9A971FC8B39DB77B + 3E10F3B5E9335EDDE6D1D2BC7C6F9E7DBF37DE9655375A5FAC8D0FA5785DBD7A + 7553F372AD79B6560DA3F5773FEAC8CBE35A92679B8A66E4E57AF36C53D1C4BC + DCA83CDB58FF37232FD799675BA25F475E5EDB943CDB5234222FEFA92FCFB614 + 75E4E5DD46FA77F8C6DB6FBF6D58D30F0BACA17B197F375E36DF3035357DE8FA + ACA1FFD4D9487FF39FF0B9C32623FD763A1BB21F816EB64EABDDE3736CE391EE + 68F257D9099329F12E2675FE9D393FE336DCB6B574652E266F28DC4C7E97BBB5 + 2D14DF71E8D6364FE16AF2CC03BF3B44F7F899AE4D21F7E1BE2DD196BB98F452 + B8B6D12ADC9ED066050CC19DF845D2772CBA9A6CA8457F033FE336DC96FB705F + E668AE7EBC874957F11DA671B30CDFA37A23E853E26E5BCECF8CDBF1BD1B819F + 1ADA15C4CD16B61AB76BD6DF21B8B54DCEF0EB536DF81ED7020FC4BBB7239FB4 + 3D11E764F22C83C6EEC2F7F899BE1DF7A136292DFE1B0C3793EDF1EE4F69AB8B + 2E3FF03DBAC630FEF709B82DF7A1586CF1672232579311CCAFCAB0ADE1BFEB83 + DBF2F9E2BB65197CCDF7F4CF5519DB844D323793918DD5897335F9A8B6B9228E + 41CC951F33BDD1FFCE02B7D5E90FAA2DA658EBFE3546EDB5D2F787B64D61BFF1 + B8B93F7F8F69F2E94E55C673DBE0BF75416DB90FF7650EE6E279646EDD7C698D + D726AF555E2F1CB31C373C77FA7915DACDF87737B80FF7D5F3707C32376B88B5 + 499AAC1DEC6AF237CE17BC668DE387E790FD58DBB84BB3F68AEF144EBBF46E35 + 83FF6D8ED21BFB6AF5037370EC18C72F6BB1266B73BED4E78D86C6C41CD9C123 + A1CB712A5A7717C9B797F89AEF65878CA636571AE4D1E731D6A658E8ABCF9B9C + 3FEA9B679D36AD6B93DF224E9B187EAF8EAFF91E3F631BEA8B0BD6D0E771D6D6 + E76EEE2FF21ACD13AF65637FE97D5E57EE35FAEEE44DDCE6FEB9602EE6D4E5AD + 72A155CB1E22F228E5B2DAE683E798FD6C3CEE077E5FF188497BB96B5B75CEB5 + 2F6BF5B7C8930DE463CEA7DCF6966CDE3D1C1C673CD70DE64B5713BF349FF7AB + 8DFB32177332778379A81E7DB95B1B9F467C7FB56F73F55BEA7F7ED61CFF372A + FE28A6746BA6CEEF6F94BB996C6E6AFC3569FD858C12EB8FE3DCD80F22EE4E98 + 6CE1679C979AB2FE9A9C7F687D4B39B5AD9AE79AE38DB8F85AE4C4A6E69FBAF3 + AF6DDDF997FC9B13FA25C5E4FBD58C9C6B5FD13DBB7AF2EFB63AF36FEDFB4FBB + 87B0FF3C55EBFE53DBFECB7B656BEFBFBCA7D7B5FFFED9F547BDF517D55052FD + B5AD09F597ADA44FE36E71FD477E6B6EFDC9F3D8F2FAB76DCA03F5B71BE511CA + 65F7D4DF6EB5D5DF4F26B744BBE6FC31BBE6FC11D8D8F3C7AC169F3FFEECF3D7 + 9F7DFE7C14E7EFFF053A86FEC0 } end end diff --git a/components/nicesidebar/Demo1/common/Unit1.pas b/components/nicesidebar/Demo1/common/Unit1.pas index 8d826e357..d673a173f 100644 --- a/components/nicesidebar/Demo1/common/Unit1.pas +++ b/components/nicesidebar/Demo1/common/Unit1.pas @@ -16,7 +16,12 @@ uses Dialogs, StdCtrls, ExtCtrls, NiceSideBar, ImgList; type + + { TForm1 } + TForm1 = class(TForm) + ImageList2: TImageList; + ImageList1: TImageList; Shape1: TShape; Shape2: TShape; Label1: TLabel; @@ -24,8 +29,6 @@ type Label3: TLabel; Label4: TLabel; NiceSideBar1: TNiceSideBar; - ImageList1: TImageList; - ImageList2: TImageList; Label5: TLabel; Panel1: TPanel; Panel2: TPanel; @@ -58,7 +61,7 @@ type procedure WMNCHittest(var Msg: TMessage); message WM_NCHITTEST; {$ENDIF} protected - procedure CreateParams(var Params: TCreateParams); override; + //procedure CreateParams(var Params: TCreateParams); override; public end; @@ -73,13 +76,13 @@ implementation {$ELSE} {$R *.dfm} {$ENDIF} - + { procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; - Params.Style := (Params.Style and WS_POPUP or WS_BORDER) and not WS_DLGFRAME; + //Params.Style := (Params.Style and WS_POPUP or WS_BORDER) and not WS_DLGFRAME; end; - + } procedure TForm1.Image1Click(Sender: TObject); begin // not used //ShowMessage('Wah, gampang sekali!!!!'); diff --git a/components/nicesidebar/source/NiceSideBar.pas b/components/nicesidebar/source/NiceSideBar.pas index effa35caa..6a2461061 100644 --- a/components/nicesidebar/source/NiceSideBar.pas +++ b/components/nicesidebar/source/NiceSideBar.pas @@ -285,6 +285,11 @@ type procedure WMSize(var Msg: TWMSize); message WM_SIZE; procedure WMMouseWheel(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL; {$ENDIF} + function IsStoredItemHeight: Boolean; + function IsStoredSubItemHeight: Boolean; + function IsStoredMargin: Boolean; + function IsStoredIndent: Boolean; + function IsStoredGroupSeparator: Boolean; procedure SetItems(Value: TSideBarItems); procedure SetItemIndex(Value: Integer); procedure SetSubItemIndex(Value: Integer); @@ -343,12 +348,12 @@ type property Items: TSideBarItems read FItems write SetItems; property ItemIndex: Integer read FItemIndex write SetItemIndex default -1; property SubItemIndex: Integer read FSubItemIndex write SetSubItemIndex default -1; - property ItemHeight: Integer read FItemHeight write SetItemHeight default 30; - property SubItemHeight: Integer read FSubItemHeight write SetSubItemHeight default 18; + property ItemHeight: Integer read FItemHeight write SetItemHeight stored IsStoredItemHeight; + property SubItemHeight: Integer read FSubItemHeight write SetSubItemHeight stored IsStoredSubItemHeight; property Alignment: TSideBarAlign read FAlignment write SetAlignment default saLeft; - property Margin: Integer read FMargin write SetMargin default 8; - property GroupSeparator: Integer read FGroupSeparator write SetGroupSeparator default 10; - property Indent: Integer read FIndent write SetIndent default 10; + property Margin: Integer read FMargin write SetMargin stored IsStoredMargin; + property GroupSeparator: Integer read FGroupSeparator write SetGroupSeparator stored IsStoredGroupSeparator; + property Indent: Integer read FIndent write SetIndent stored IsStoredIndent; property AlwaysExpand: Boolean read FAlwaysExpand write SetAlwaysExpand; property Images: TImageList read FImages write SetImages; property HoverImages: TImageList read FHoverImages write SetHoverImages; @@ -381,6 +386,13 @@ type implementation +const + DEFAULT_ITEMHEIGHT = 30; // Values at 96 ppi + DEFAULT_SUBITEMHEIGHT = 18; + DEFAULT_MARGIN = 8; + DEFAULT_INDENT = 10; + DEFAULT_GROUPSEPARATOR = 10; + type TSBInfo = record ItemIndex: Integer; @@ -669,13 +681,13 @@ begin FItemIndex := -1; FSubItemIndex := -1; - FItemHeight := 30; - FSubItemHeight := 18; + FItemHeight := DEFAULT_ITEMHEIGHT; + FSubItemHeight := DEFAULT_SUBITEMHEIGHT; FAlignment := saLeft; FHandPointCursor := False; - FMargin := 8; - FGroupSeparator := 10; - FIndent := 10; + FMargin := DEFAULT_MARGIN; + FGroupSeparator := DEFAULT_GROUPSEPARATOR; + FIndent := DEFAULT_INDENT; FAlwaysExpand := True; FItemStyle := TSideBarItemStyle.Create(Self); @@ -714,7 +726,7 @@ end; procedure TNiceSidebar.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin - inherited; + inherited DoAutoAdjustLayout(AMode, AXProportion, AYProportion); if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then begin FItemHeight := round(FItemHeight * AYProportion); @@ -722,6 +734,7 @@ begin FMargin := round(FMargin * AXProportion); FIndent := round(FIndent * AXProportion); FGroupSeparator := round(FGroupSeparator * AYProportion); + ListChange(true); end; end; @@ -973,6 +986,7 @@ var P: PSBInfo; x, y, v: Integer; Item: TSideBarItem; + delta: Integer; begin if IsUpdating then Exit; @@ -1037,14 +1051,19 @@ begin BottomIndex := FList.Count-1; ScBottomVisible := False; end; + {$IFDEF FPC} + delta := Scale96ToFont(12); + {$ELSE} + delta := 12; + {$ENDIF} if (FAlignment = saRight) then begin - ScTop := Rect(FMargin + 10, 10, FMargin + 21, 21); - ScBottom := Rect(FMargin + 10, ClientHeight - 21, FMargin + 21, ClientHeight - 10); + ScTop := Rect(FMargin + delta, delta, FMargin + 2*delta + 1, 2*delta + 1); + ScBottom := Rect(FMargin + delta, ClientHeight - 2*delta - 1, FMargin + 2*delta + 1, ClientHeight - delta); end else begin - ScTop := Rect(ClientWidth - FMargin - 21, 10, ClientWidth - FMargin - 10, 21); - ScBottom := Rect(ClientWidth - FMargin - 21, ClientHeight - 21, ClientWidth - FMargin - 10, ClientHeight - 10); + ScTop := Rect(ClientWidth - FMargin - 2*delta - 1, delta, ClientWidth - FMargin - delta, 2*delta+1); + ScBottom := Rect(ClientWidth - FMargin - 2*delta - 1, ClientHeight - 2*delta-1, ClientWidth - FMargin - delta, ClientHeight - delta); end; end; end; @@ -1133,8 +1152,14 @@ procedure TNiceSideBar.DrawItem(ACanvas: TCanvas; Rc: TRect; Str: string; States: TSideBarStates; ImageIndex: Integer); var w, h, x, y: Integer; - Img: TImageList; RcItem: TRect; + Img: TImageList; + ImgWidth: Integer; + ImgHeight: Integer; + {$IFDEF FPC} + imgR: TScaledImageListResolution; + ppi: Integer; + {$ENDIF} begin CopyRect(RcItem, Rc); with ACanvas do @@ -1207,12 +1232,25 @@ begin then Img := FImages; end; + if Assigned(Img) then + begin + {$IFDEF FPC} + ppi := NeedParentDesignControl(Self).PixelsPerInch; + ImgWidth := Img.WidthForPPI[0, ppi]; + ImgHeight := Img.HeightForPPI[0, ppi]; + ImgR := Img.ResolutionForPPI[0, ppi, GetCanvasScaleFactor]; + {$ELSE} + ImgWidth := Img.Width; + ImgHeight := Img.Height; + {$ENDIF} + end; + w := TextWidth(Str); h := TextHeight('Ag'); x := 0; if Assigned(Img) and (ImageIndex > -1) - then w := w + Img.Width + FIndent; + then w := w + ImgWidth + FIndent; case FAlignment of saLeft: x := RcItem.Left; @@ -1224,13 +1262,13 @@ begin begin if (ImageIndex > -1) then begin - y := RcItem.Top + ((FItemHeight - Img.Height) div 2); + y := RcItem.Top + ((FItemHeight - ImgHeight) div 2); if (FAlignment <> saRight) then begin - Img.Draw(ACanvas, x, y, ImageIndex, dsTransparent, itImage); - Inc(x, Img.Width + FIndent); + {$IFDEF FPC}ImgR{$ELSE}Img{$ENDIF}.Draw(ACanvas, x, y, ImageIndex, dsTransparent, itImage); + Inc(x, ImgWidth + FIndent); end else - Img.Draw(ACanvas, RcItem.Right - Img.Width, y, ImageIndex, dsTransparent, itImage); + {$IFDEF FPC}ImgR{$ELSE}Img{$ENDIF}.Draw(ACanvas, RcItem.Right - ImgWidth, y, ImageIndex, dsTransparent, itImage); end; end; @@ -1397,7 +1435,8 @@ end; procedure TNiceSideBar.DrawScroller(ACanvas: TCanvas; Rc: TRect; Up: Boolean; Hover: Boolean); var - Old: TColor; + Old: TColor; + dist: Integer; begin with ACanvas do begin @@ -1422,20 +1461,39 @@ begin Brush.Color := FScrollers.FNormalArrowColor; Pen.Color := FScrollers.FNormalArrowColor; end; + {$IFDEF FPC} + dist := Scale96ToFont(3); + {$ELSE} + dist := 3; + {$ENDIF} if Up then begin + Polygon([ + Point(Rc.Left + dist, Rc.Bottom - dist - 1), + Point(Rc.Right - dist - 1, Rc.Bottom - dist - 1), + Point((Rc.Left + Rc.Right) div 2, Rc.Top + dist) + ]); + { Polygon([ Point(Rc.Left+3, Rc.Bottom-5), Point(Rc.Right-4, Rc.Bottom-5), Point(Rc.Left+5, Rc.Top+3) ]); + } end else begin + Polygon([ + Point(Rc.Left + dist, Rc.Top + dist), + Point(Rc.Right - dist - 1, Rc.Top + dist), + Point((Rc.Left + Rc.Right) div 2, Rc.Bottom - dist - 1) + ]); + { Polygon([ Point(Rc.Left+3, Rc.Top+4), Point(Rc.Right-4, Rc.Top+4), Point(Rc.Left+5, Rc.Bottom-4) ]); + } end; Pen.Color := Old; end; @@ -1573,6 +1631,31 @@ begin Invalidate; end; +function TNiceSideBar.IsStoredItemHeight: Boolean; +begin + Result := FItemHeight <> DEFAULT_ITEMHEIGHT; +end; + +function TNiceSideBar.IsStoredSubItemHeight: Boolean; +begin + Result := FSubItemHeight <> DEFAULT_SUBITEMHEIGHT; +end; + +function TNiceSideBar.IsStoredMargin: Boolean; +begin + Result := FMargin <> DEFAULT_MARGIN; +end; + +function TNiceSideBar.IsStoredIndent: Boolean; +begin + Result := FIndent <> DEFAULT_INDENT; +end; + +function TNiceSideBar.IsStoredGroupSeparator: Boolean; +begin + Result := FGroupSeparator <> DEFAULT_GROUPSEPARATOR; +end; + procedure TNiceSideBar.SetItemIndex(Value: Integer); var x: Integer;