diff --git a/languages/waptexit.de.po b/languages/waptexit.de.po index 925179a10..b3039c117 100644 --- a/languages/waptexit.de.po +++ b/languages/waptexit.de.po @@ -65,6 +65,98 @@ msgstr "" msgid "some upgrades are pending, launch upgrades after timeout expired or manual action" msgstr "" +#: tviswaptexit.gridpending.header.columns[0].text +msgid "id" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[10].text +msgid "classname" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[11].text +msgid "logs" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[12].text +msgid "pidlist" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[13].text +msgid "notify_user" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[14].text +msgid "notify_server_on_finish" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[15].text +msgid "notify_server_on_start" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[16].text +msgid "runstatus" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[17].text +msgid "created_by" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[18].text +msgid "usecache" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[19].text +msgid "packagenames" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[1].text +msgid "priority" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[2].text +msgid "order" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[3].text +msgid "description" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[4].text +msgid "start_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[5].text +msgid "summary" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[6].text +msgid "create_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[7].text +msgid "result" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[8].text +msgid "progress" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[9].text +msgid "finish_date" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[0].text +msgid "Id" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[1].text +msgid "Status" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[2].text +msgid "Package" +msgstr "" + #: tviswaptexit.labdontshutdown.caption msgid "" "Upgrades in progress...\n" diff --git a/languages/waptexit.en.po b/languages/waptexit.en.po index 31a1d214f..efc4f0029 100644 --- a/languages/waptexit.en.po +++ b/languages/waptexit.en.po @@ -29,6 +29,98 @@ msgstr "" msgid "some upgrades are pending, launch upgrades after timeout expired or manual action" msgstr "" +#: tviswaptexit.gridpending.header.columns[0].text +msgid "id" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[10].text +msgid "classname" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[11].text +msgid "logs" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[12].text +msgid "pidlist" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[13].text +msgid "notify_user" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[14].text +msgid "notify_server_on_finish" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[15].text +msgid "notify_server_on_start" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[16].text +msgid "runstatus" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[17].text +msgid "created_by" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[18].text +msgid "usecache" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[19].text +msgid "packagenames" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[1].text +msgid "priority" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[2].text +msgid "order" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[3].text +msgid "description" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[4].text +msgid "start_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[5].text +msgid "summary" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[6].text +msgid "create_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[7].text +msgid "result" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[8].text +msgid "progress" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[9].text +msgid "finish_date" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[0].text +msgid "Id" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[1].text +msgid "Status" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[2].text +msgid "Package" +msgstr "" + #: tviswaptexit.labdontshutdown.caption msgid "" "Upgrades in progress...\n" diff --git a/languages/waptexit.fr.po b/languages/waptexit.fr.po index 136456f9e..439d5f4ce 100644 --- a/languages/waptexit.fr.po +++ b/languages/waptexit.fr.po @@ -29,6 +29,98 @@ msgstr "Ne pas installer les mises à jour Windows" msgid "some upgrades are pending, launch upgrades after timeout expired or manual action" msgstr "Des mises à jour sont en attente, lancement après l'expiration du délai ou une action manuelle" +#: tviswaptexit.gridpending.header.columns[0].text +msgid "id" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[10].text +msgid "classname" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[11].text +msgid "logs" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[12].text +msgid "pidlist" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[13].text +msgid "notify_user" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[14].text +msgid "notify_server_on_finish" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[15].text +msgid "notify_server_on_start" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[16].text +msgid "runstatus" +msgstr "Status exécution" + +#: tviswaptexit.gridpending.header.columns[17].text +msgid "created_by" +msgstr "Créé par" + +#: tviswaptexit.gridpending.header.columns[18].text +msgid "usecache" +msgstr "Utiliser le cache" + +#: tviswaptexit.gridpending.header.columns[19].text +msgid "packagenames" +msgstr "Noms de paquets" + +#: tviswaptexit.gridpending.header.columns[1].text +msgid "priority" +msgstr "Priorité" + +#: tviswaptexit.gridpending.header.columns[2].text +msgid "order" +msgstr "Ordre" + +#: tviswaptexit.gridpending.header.columns[3].text +msgid "description" +msgstr "Description" + +#: tviswaptexit.gridpending.header.columns[4].text +msgid "start_date" +msgstr "Heure de début" + +#: tviswaptexit.gridpending.header.columns[5].text +msgid "summary" +msgstr "Résumé" + +#: tviswaptexit.gridpending.header.columns[6].text +msgid "create_date" +msgstr "Date de création" + +#: tviswaptexit.gridpending.header.columns[7].text +msgid "result" +msgstr "Résultat" + +#: tviswaptexit.gridpending.header.columns[8].text +msgid "progress" +msgstr "Avancement" + +#: tviswaptexit.gridpending.header.columns[9].text +msgid "finish_date" +msgstr "Heure de fin" + +#: tviswaptexit.gridpendingupgrades.header.columns[0].text +msgid "Id" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[1].text +msgid "Status" +msgstr "Status" + +#: tviswaptexit.gridpendingupgrades.header.columns[2].text +msgid "Package" +msgstr "Paquet" + #: tviswaptexit.labdontshutdown.caption msgid "" "Upgrades in progress...\n" diff --git a/languages/waptexit.po b/languages/waptexit.po index 31a1d214f..efc4f0029 100644 --- a/languages/waptexit.po +++ b/languages/waptexit.po @@ -29,6 +29,98 @@ msgstr "" msgid "some upgrades are pending, launch upgrades after timeout expired or manual action" msgstr "" +#: tviswaptexit.gridpending.header.columns[0].text +msgid "id" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[10].text +msgid "classname" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[11].text +msgid "logs" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[12].text +msgid "pidlist" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[13].text +msgid "notify_user" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[14].text +msgid "notify_server_on_finish" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[15].text +msgid "notify_server_on_start" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[16].text +msgid "runstatus" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[17].text +msgid "created_by" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[18].text +msgid "usecache" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[19].text +msgid "packagenames" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[1].text +msgid "priority" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[2].text +msgid "order" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[3].text +msgid "description" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[4].text +msgid "start_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[5].text +msgid "summary" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[6].text +msgid "create_date" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[7].text +msgid "result" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[8].text +msgid "progress" +msgstr "" + +#: tviswaptexit.gridpending.header.columns[9].text +msgid "finish_date" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[0].text +msgid "Id" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[1].text +msgid "Status" +msgstr "" + +#: tviswaptexit.gridpendingupgrades.header.columns[2].text +msgid "Package" +msgstr "" + #: tviswaptexit.labdontshutdown.caption msgid "" "Upgrades in progress...\n" diff --git a/waptexit/uwaptexit.lfm b/waptexit/uwaptexit.lfm index 549382708..15645d506 100644 --- a/waptexit/uwaptexit.lfm +++ b/waptexit/uwaptexit.lfm @@ -6,7 +6,7 @@ object VisWaptExit: TVisWaptExit Anchors = [akTop, akRight] AutoSize = True BorderIcons = [biSystemMenu, biMinimize] - BorderStyle = bsSingle + BorderStyle = bsDialog Caption = 'WAPT Softwares Updates' ClientHeight = 451 ClientWidth = 500 @@ -497,6 +497,7 @@ object VisWaptExit: TVisWaptExit TreeOptions.PaintOptions = [toHideFocusRect, toPopupMode, toShowButtons, toShowDropmark, toShowHorzGridLines, toShowTreeLines, toShowVertGridLines, toThemeAware, toUseBlendedImages, toAlwaysHideSelection] TreeOptions.SelectionOptions = [toDisableDrawSelection, toExtendedFocus, toMultiSelect, toRightClickSelect] WantTabs = True + OnGetImageIndexEx = GridPendingUpgradesGetImageIndexEx end object LabPendingUpgrades: TLabel Left = 0 @@ -543,7 +544,7 @@ object VisWaptExit: TVisWaptExit left = 472 top = 96 Bitmap = { - 4C69040000001000000010000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 + 4C690E0000001000000010000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 3A9FA76A3ADEA56736F6A76939E5A76A3ABCA4653453A4653405FFFFFF00FFFF FF00FFFFFF00A4653479A4653410FFFFFF00FFFFFF00A4653550A66838F6C090 68FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB9875FF4A56737F0A4653458FFFF @@ -671,6 +672,326 @@ object VisWaptExit: TVisWaptExit FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000093 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00009D09001276 + 18CD0F5D11B7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00009B0900107817D0BAD7 + BDFF569E5DFF004D02B4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000960800107717D1B6D7B9FF529F + 5AFF3A9941FF499351FF014501B2FFFFFF00FFFFFF0005A5140006A41400FFFF + FF00FFFFFF00FFFFFF00FFFFFF00009F0D000E7714D1B4DCB7FF51B25AFF069E + 14FF0B9517FF105312DD04480B00FFFFFF0000930700348F3AED3F9244F9009F + 0A00FFFFFF00FFFFFF000AAD1900117F19D1B3E3B7FF55C460FF15B725FF13A3 + 20FF024A05DB00460600FFFFFF0009851500448F49ECB5DDBAFFA9DAAEFF2F8F + 35F607AB170013B5220017851ED1A5E2AAFF60D06AFF28C937FF22B02FFF034C + 05DC00480600FFFFFF00FFFFFF00055207A45DB466FE6FD179FF9DDFA3FF98DF + 9FFF238328F4207D25E299E5A0FF69DB74FF39D849FF31C23DFF035706DD0066 + 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00074F08BC24A130F953D75FFF88E4 + 91FF8EE596FF9FEAA5FF71E77CFF4AE759FF3FD64CFF08620BDD02991100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00014F02BB24B130F94FE9 + 5EFF78EF84FF79F284FF58F567FF4AE756FF0D6C10DD1CBD2B00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00015404BD36BF + 40F860FE6FFF69FF78FF58F065FF127216DD3ADA4900FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000458 + 07BB4ECB57F977EE81FF207422DC64F67200FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000A5F0DBE1F8023CD90FF9C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0059F86700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000013509A010000000000000000002E7C0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000056A4DCFD408ECDE30000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000002F61A48160C6FFFF5EC7FFFF0D3F8B5B00000000000000000000 + 000000000000000000000000000000000000000000000000000000000000002A + 700000000007599ED8FF4AB0F8FF41B3FFFF4293D2F300000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000406CA79954ACEBFF41A8F3FF39ACFDFF4BBDFFFF13438E75000000000000 + 0000000000000000000000000000000000000000000000000000001F69000000 + 16165B9FD6FF3A98E2FF91C8F0FF80C0F2FF24A3FEFF3A8FD3FF00000000001B + 5500000000000000000000000000000000000000000000000000000000004473 + ABB542A1E9FF2A8FE2FFE5F3FCFFCEE7FCFF1796FAFF30B0FFFF1247908F0000 + 00000000000000000000000000000000000000000000001963000000472C54A2 + E0FF3799E6FF218CE5FFE5F3FDFFCEE7FBFF0984F3FF007FFDFF1A82D9FF0000 + 000F001D5E0000000000000000000000000000000000000000003E76B2D1349A + ECFF2E98EDFF188EEFFFE3F4FEFFC5DFFBFF006EF1FF007EFCFF0891FFFF1251 + 9AA800000000000000000000000000000000001763000018624846A5ECFF2E9D + F3FF269DF9FF0481FBFFE2F5FFFFCFE7FFFF0076FBFF0080FEFF0288FFFF1585 + E0FF00003424002164000000000000000000000000003076BCE82D9FF6FF1C98 + FCFF0386FEFF068CFFFF168DF5FF118BF6FF068DFFFF0186FFFF048AFFFF0B95 + FFFF10519DC600000000000000000000000008337D6834A5F9FF0B88FCFF0186 + FFFF0D93FFFF0C95FFFFF8FCFEFFDEF0FEFF1099FFFF1094FFFF078DFFFF0990 + FFFF1087E8FF00094A3F00256A00000000000E67C6FB0078F7FF0185FFFF0E94 + FFFF22A1FFFF33ACFFFF83CFFFFF7ACBFFFF36ADFFFF25A4FFFF1196FFFF098F + FFFF0893FFFF0751A3DF00000000175CAA7A0072F0FF007DFDFF058DFFFF1A9D + FFFF33ADFFFF50BBFFFF63C5FFFF64C6FFFF53BEFFFF37B0FFFF1D9FFFFF078F + FFFF0389FFFF0182F3FF415D87573677B2730054B6E0045EBCDC0D69C0DB1B72 + C2DA2C7AC3DA3A81C4DA4686C3D94786C4DA3C81C1DB2F79BEDB1E70BADC0E6C + C3E60565C4EA0364C7EC487AA76B000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006A85 + FC236984FA7D6782F9DB6580F7F3637EF5F3617CF3DB5F7AF17D5D77EF23FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006984FA536882 + F9E66E83EEFF92A6F4FFA0B4F8FFA0B4F8FF91A6F3FF687DE9FF5973EBE65671 + E953FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006883F9536681F8F48497 + F1FFA9BDFBFF8AA3F8FF6B89F6FF6B89F6FF89A2F8FFA8BCFAFF7F92ECFF526C + E4F44F69E253FFFFFF00FFFFFF00FFFFFF006781F822657FF6E58397F0FFA9BD + FBFF6382F5FF6382F5FFFFFFFFFFFFFFFFFF617EF3FF607CF3FFA6B9F9FF7B8D + EAFF4A64DEE54862DB22FFFFFF00FFFFFF00637EF57E6C81ECFFA9BDFBFF6382 + F5FF6281F5FF6280F4FFFFFFFFFFFFFFFFFF5F7AF1FF5F78F0FF5D76EFFFA5B5 + F8FF5D70DDFF435DD77EFFFFFF00FFFFFF005F7AF1DB91A6F3FF88A1F8FF6280 + F4FF617EF3FF607CF3FFFFFFFFFFFFFFFFFF5D76EFFF5C73EEFF5B70ECFF8293 + F1FF8998ECFF3E58D2DBFFFFFF00FFFFFF005B76EDF6A1B6F8FF6784F4FF607C + F3FF5F7AF1FF5F78F0FFFFFFFFFFFFFFFFFF5B70ECFF5A6EEBFF596CEAFF5F6F + E9FF9BA8F1FF3A53CEF6FFFFFF00FFFFFF005771E9F6A0B3F7FF6580F2FF5F78 + F0FF5D76EFFF5C73EEFFD3D9FAFFFFFFFFFF596CEAFF5869E8FF5767E7FF5D6C + E7FF99A5F1FF354FCAF6FFFFFF00FFFFFF00526DE5DB8E9FF0FF8499F4FF5C73 + EEFF5B70ECFF5A6EEBFF909DF1FFA6AFF3FF5767E7FF5665E6FF5562E5FF7D89 + EBFF8591E7FF314AC6DBFFFFFF00FFFFFF004E68E17E6073E0FFA4B3F7FF5A6E + EBFF596CEAFF5869E8FFFFFFFFFFFFFFFFFF5562E5FF5461E3FF535FE2FF9FA9 + F2FF5061D1FF2D46C27EFFFFFF00FFFFFF004963DC224660DAE57888E6FFA3B0 + F5FF5767E7FF5665E6FF8992EDFF8892ECFF535FE2FF525DE1FF9FA9F2FF6F7D + DDFF2B44C0E52942BE22FFFFFF00FFFFFF00FFFFFF00425CD5533F59D3F47584 + E3FFA1ACF4FF7F8BECFF5C67E4FF5B66E3FF7D87EAFF9FA8F1FF6F7CDDFF2943 + BFF42741BD53FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003A54CF533852 + CCE65264D4FF8490E7FF95A0EEFF959FEDFF838EE5FF4C5DCEFF2841BDE6263F + BB53FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00334D + C823314BC67D2F48C4DB2C46C2F32A44C0F32842BEDB2640BC7D243EBA23FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000007F00 + 0000823C1700935C38C2935E3AD98F5430CF8946219378320200000000000000 + 0000000000000000000000000000000000000000000000000000000000006D24 + 0000864720A0C8A079FDD3AA82FFD1A980FF9C5E29F17A3C1400FF0000000000 + 0000000000000000000000000000000000000000000000000000000000007F3F + 0000834721B6B57A3CFFC3823AFFBF782BFF9F5F27FA793716007F0000000000 + 0000000000000000000000000000000000000000000000000000000000007138 + 0000844620B6B37333FFC07A2FFFBE7628FF9F5F26FA7F3C16007F0000000000 + 000000000000000000000000000000000000000000007F000000550000007F2A + 0000854722B8B37231FFBF782CFFBD7325FF9F5E25FA7C3D1500660000005500 + 0000550000007F00000000000000783F1000804117007E3E15007E3E19007E3D + 1589824620DBB1702FFFBE7627FFBC7121FF9E5D25FC7A401AB57D4018817E43 + 1900803F1B0084431A00783E04008F532AC9A66A35FAA76A32FCA66831FCA567 + 2DFDAB743EFEB9742CFFBC7221FFBC701EFFB06E29FFAA723FFDAB723FFDAD76 + 43FCAF7A49FCAA764AF484491F93986136EDDEBD99FFD9AF81FFD8AE7FFFD7AC + 7EFFD3A06BFFBC7222FFBC701EFFBC701EFFC17D34FFD6A878FFD4A473FFD7A9 + 79FFD8AD80FFCFA881FF854B24BC93592BE7BB7935FFBD7A31FFBC762DFFBB74 + 27FFB97122FFBA6F1DFFBC701EFFBB701FFFBC7529FFBD7A33FFC0803CFFC386 + 46FFC78D4FFFB9834EFE874C26B6894A21A0945627E2935526EA935425EB9153 + 23ED935726FAB36C23FFBC701FFFBE7629FFA96C31FF91572BF3945A2DEB965C + 31EB985E33E9965D32D785421F00711C0000842C0E007A310B007A3118007D3E + 110081441EC9AF6B26FFBE7526FFC07C32FFA26632FB7C3C1890773615007A3C + 18007A310B008431100066330000000000000000000000000000000000007138 + 0000854822B8B16F2DFFC07B30FFC3823BFFA56A37FA7D3C17007F0000000000 + 0000000000000000000000000000000000000000000000000000000000007138 + 0000854923B8B47434FFC38139FFC68844FFA56C3BFA7D3B17007F0000000000 + 0000000000000000000000000000000000000000000000000000000000007F3F + 0000844822B6B5783BFFC68743FFC98E4EFFA76F3FFA793D17007F0000000000 + 0000000000000000000000000000000000000000000000000000000000006D24 + 0000874821A0B0763FFCBC8348FFBF8851FFA26C40F17B3D15007F0000000000 + 0000000000000000000000000000000000000000000000000000000000007F00 + 0000853D13008B4C26B08A4E29CA8B502CC6874A29946E2E1800000000000000 + 0000000000000000000000000000F8F8F800FCFCFCFCFCFCFCFFF9F8FBFEDBD8 + EFFEA6A1DBFE766DC9FE5E53C0FE5E53C0FE766DC9FEA6A1DBFEDBD8EFFEF9F8 + FBFEFCFCFCFFFCFCFCFCF8F8F800FCFCFCFCFFFFFFFFF4F3FBFFB6B1E3FF665B + C5FF3D30B5FF3022B0FF2E1FB0FF2E1FB0FF3121B0FF3E30B5FF655BC5FFB6B1 + E3FFF4F3FBFFFFFFFFFFFCFCFCFCFDFDFCFFF4F3FBFFA19ADBFF483BB9FF2D1E + AFFF2F20AFFF2D1EAFFF2D1EAFFF2E1FB0FF2D1EAFFF2E1FAFFF2E20AFFF493C + BAFFA29BDBFFF4F3FBFFFDFDFCFFF9F8FBFEB6B1E3FF5D52C1FF6357C3FF564A + BFFF6156C3FF3D2FB5FF3324B1FF5A4EC0FF5A4EC0FF5D52C1FF5E52C2FF6055 + C3FF5B50C1FFB6B1E3FFF9F8FBFEDAD8EFFE665AC5FF5246BDFF7F75CEFF7D74 + CEFF7C73CDFF4E41BCFF3628B3FF857CD1FF948DD6FF7E75CEFF756BCBFF6C61 + C7FF4134B7FF655AC4FFDAD8EFFEA6A1DBFE3D2FB5FF4639B9FF675DC5FF594D + C0FF655AC4FF3F31B6FF3123B1FF564ABFFF6459C4FF6357C4FF5B4FC1FF4C3E + BBFF3527B2FF3D2FB5FFA6A1DBFE796FCAFE5B4FC0FF7D74CEFF8279CFFF7F75 + CEFF8178CFFF7D74CEFF7D73CEFF7E75CEFF7F75CEFF8077CFFF8077CFFF7E75 + CEFF7C72CDFF5B4FC1FF796FCAFE675CC3FEA19ADBFFF2F1FAFFF3F2FAFFF3F2 + FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2 + FAFFF2F1FAFFA19ADBFF675CC3FE675CC3FEA19ADBFFF2F1FAFFF3F2FAFFF3F2 + FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2FAFFF3F2 + FAFFF2F1FAFFA19ADBFF675CC3FE796FCAFE5B4FC1FF7B72CDFF7F75CEFF8279 + D0FF8077CFFF7F75CEFF8279CFFF827ACFFF8279CFFF8278CFFF8178CFFF7D74 + CEFF7B72CDFF5B4FC1FF796FCAFEA6A1DBFE3D30B5FF2A1BAEFF493CBAFF675C + C6FF6358C4FF6257C3FF6459C4FF685EC6FF695EC6FF6357C3FF6F65C8FF3F31 + B6FF2A1BAEFF3D30B5FFA6A1DBFEDAD8EFFE665BC5FF2A1BAEFF5A4FC0FF7C73 + CDFF7F76CEFF958DD7FF746ACAFF756BCAFF7F76CEFF766CCBFF928AD5FF4A3D + BAFF2A1BAEFF665BC5FFDAD8EFFEF9F8FBFEB7B2E4FF4437B8FF4638B9FF6459 + C4FF594DC0FF5C50C1FF5043BDFF5044BCFF6358C4FF5A4EC0FF574CBFFF3B2E + B4FF4437B8FFB7B2E4FFF9F8FBFEFDFDFCFFF4F3FBFF9F99DBFF4639B9FF3021 + B0FF2E1FAFFF2E1FAFFF2E1FB0FF2E1FB0FF3122B1FF2F20B0FF2D1EAFFF4539 + B9FFA099DBFFF4F3FBFFFDFDFCFFFCFCFCFCFFFFFFFFF4F3FBFFB6B1E4FF655A + C5FF3E30B5FF3022B0FF2E1FB0FF2E1FB0FF3021B0FF3E30B5FF665BC5FFB6B1 + E4FFF4F3FBFFFFFFFFFFFCFCFCFCF8F8F800FCFCFCFCFCFCFCFFF9F8FBFEDBD8 + EFFEA6A1DBFE766DC9FE5E53C0FE5E53C0FE766DC9FEA6A1DBFEDBD8EFFEF9F8 + FBFEFCFCFCFFFCFCFCFCF8F8F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00CA97 + 6400CA976480CA9764B3CA9764E6CA9764E6CA9764B3CA976480CA976400FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E34A3000C38E5900C089 + 52F7BD844BFFBA7F43FFB5773BFFB5773BFFBA7F43FFBE844BFFC18B55F7C48F + 5E00634A3000FFFFFF00FFFFFF00FFFFFF0096301F00C08C57BABD844CFFB272 + 33FFBC946EFFD0BFAEFFDAD5D1FFDAD5D1FFD0BFAEFFBC946DFFB37638FFBE88 + 51FFC28C56B996301F00FFFFFF00FFFFFF00BD875100B97E45FFB3773BFFD4C6 + B8FFEBEBEBFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEBEBEBFFD4C6B8FFB479 + 3DFFB97F45FFBD875100FFFFFF00BF864D00BA824CF8B7793BFFD5C8B9FFEBEB + EBFFDEDEDEFFCFCFCFFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFD6C8 + B9FFB6793BFFBA824CF8BF864D00BB834D8DBA7E42FFC69F78FFE7E7E7FFEAEA + EAFFE0E0E0FF767676FFDEDEDEFFEAEAEAFFEAEAEAFFE9E9E9FFBBBBBBFF7F7F + 7FFFB89776FFBA7E42FFBB834D8DBA824CBFBE8043FFD6C3AFFFE9E9E9FFEAEA + EAFFEAEAEAFFABABABFFA1A1A1FFEAEAEAFFD1D1D1FF909090FF8F8F8FFFCFCF + CFFFD6C3AFFFBE8043FFBA824CBFB9834EEBC6894BFFE1DBD4FFE8E8E8FFEAEA + EAFFEAEAEAFFE5E5E5FF6C6C6CFF737373FF919191FFC4C4C4FFEAEAEAFFE8E8 + E8FFE1DBD4FFC6894BFFB9834EEBB7824CEBCA8F53FFE4DED8FFE7E7E7FFEAEA + EAFFEBEBEBFFEBEBEBFF6B6B6BFF696969FFE7E7E7FFEBEBEBFFEAEAEAFFE7E7 + E7FFE4DED8FFCA8F53FFB7824CEBB4804CBECA925AFFE4D3C2FFEBEBEBFFEBEB + EBFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFEBEBEBFFEBEB + EBFFE4D3C2FFCA925AFFB4804CBEB07E488BC38E57FFDFBE9CFFF0F0F0FFF0F0 + F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0 + F0FFDFBE9CFFC38E57FFB07E488AAD764400B7824EF8D09A65FFEFE2D4FFF4F4 + F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFEFE2 + D4FFD09A65FFB7824EF8AD764400FFFFFF00AD784500B88451FFD5A576FFF4E7 + DAFFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF3E6D9FFD2A2 + 74FFB88450FFAD784500FFFFFF00FFFFFF00DFCF6800A77542BBB58250FFDAA7 + 75FFF2D3B5FFF9EADBFFFBF6F1FFFBF6F1FFF9EADBFFF1D3B4FFD2A06DFFAE7A + 48FFA77341BADFCF6800FFFFFF00FFFFFF00FFFFFF009D6A3700A3713C00AB78 + 44F7B3814EFFBB8956FFC59260FFC59260FFBB8956FFB3804EFFA87543F79E6B + 37009D6A3700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A16C + 36009F6B3983A06E3BB7A4713EE8A4713EE8A06E3BB79F6B39839F683800FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000091 + 450000924585019548C5019247F2019247F2019548C50092458500914500FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000808000029346000997 + 4DF553C58CFC7CDAAAFF99E8C0FF99E8C0FF7CDAAAFF53C58CFC09974DF50093 + 460000808000FFFFFF00FFFFFF00FFFFFF0000808000019448C42DAD6BF695E7 + BDFFA9ECCAFFC1F0D8FFCAF1DDFFB9EDD4FFA9EACAFF97E8C0FF93E5BCFF2DAC + 6AF6018D44C400800000FFFFFF00FFFFFF00029346002DAD6BF69CEBC4FFC2EF + D8FFF0FBF6FFF1FBF6FFE0F7ECFFCEF2E0FFB9EDD3FFA2E6C4FF8FE1B7FF98E6 + BFFF2DA266F600803E00FFFFFF000091450009974DF595E7BDFFBBEED4FFE1F7 + ECFFF3FCF7FFF0FBF5FFE2F7ECFFD0F2E1FFBCECD4FFA4E6C5FF8CDFB5FF7BDA + ABFF91DEB7FF097E42F5006E37000092458553C58BFCA2E9C5FFC9F0DDFFDDF5 + E9FFE5F8EFFFE3F7EDFFD9F4E7FFCAF0DDFFB6EAD0FFA0E4C2FF88DDB2FF6ED4 + A1FF82DBAEFF52B281FC006D3485019448C57CD7A8FFACE8CAFFC3EDD8FFD0F1 + E0FFD5F3E4FFD3F2E3FFCBEFDDFFBDECD4FFABE6C9FF96E0BCFF7FD8ABFF63D0 + 99FF68D09BFF77C99FFF016A34C5019247F298E4BEFFA9E4C6FFB7E9D0FFC0EB + D6FFC3ECD8FFC0ECD6FFB9E9D1FFACE5C9FF9CE0BEFF89DAB1FF72D1A1FF57C8 + 90FF51C78CFF95D9B6FF01612EF2019247F298E2BDFF9EE1C0FFA7E3C5FFADE5 + C9FFAFE6CAFFADE4C8FFA4E2C3FF99DEBCFF89D8B1FF77D2A3FF61CA95FF48C1 + 83FF4BC386FF94D6B4FF015B2BF2019447C57BD3A6FF93DDB8FF95DCB7FF99DD + BBFF99DEBCFF97DCBAFF8FD9B4FF83D6ADFF75D0A1FF62C995FF4CC286FF3FBC + 7DFF58C48DFF74BF99FF015729C50092458553BE88FC8FDCB5FF7FD3A9FF82D5 + ABFF82D4ABFF7FD2A7FF76D0A3FF6BCC9BFF5CC690FF4ABE83FF3EB97AFF37B6 + 76FF74CC9FFF509F76FC004B24850091450009934BF592DBB5FF7BD0A5FF6BCA + 99FF69C999FF64C795FF5DC48FFF51BF87FF44BA7EFF3DB679FF36B574FF4DBE + 85FF8FD1AFFF09532DF500452200FFFFFF00008840002D9E62F696DCB9FF70CB + 9EFF58C28CFF51BF88FF4BBB82FF43BA7EFF3DB779FF36B574FF4CBD84FF93D7 + B5FF2D7650F600462100FFFFFF00FFFFFF0000800000017D3CC42D955EF690D3 + B1FF7FD0A7FF65C695FF4EBE86FF48BA80FF57C18BFF73CC9FFF8FD1AFFF2D75 + 4FF6014923C400800000FFFFFF00FFFFFF00FFFFFF0000800000007037000971 + 3AF551A77BFC75C09AFF95D4B4FF94D4B3FF74BD98FF509D75FC094F2BF50046 + 210000800000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000060 + 3000005E2E85015D2DC5015629F2015127F2014F26C50045218500452200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B6B + 6B006D6D6D886E6E6EBA6F6F6FE96F6F6FE96E6E6EBA6D6D6D886B6B6B00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00333333006E6E6E008585 + 85F9C0C0C0FFD9D9D9FFE8E8E8FFE8E8E8FFD9D9D9FFC1C1C1FF868686F96E6E + 6E0033333300FFFFFF00FFFFFF00FFFFFF00333333006D6D6DBAB0B0B0FFE1E1 + E1FFE6E6E6FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE6E6E6FFE2E2E2FFB1B1 + B1FF6D6D6DBA33333300FFFFFF00FFFFFF006D6D6D00A3A3A3FFDADADAFFDFDF + DFFFC7C7C7FFB2B2B2FFE3E3E3FFE4E4E4FFB2B2B2FFC8C8C8FFE0E0E0FFDBDB + DBFFA4A4A4FF6D6D6D00FFFFFF006B6B6B00737373F8C4C4C4FFD6D6D6FF9D9D + 9DFF575757FF6B6B6BFFE1E1E1FFE2E2E2FF6C6C6CFF575757FF9F9F9FFFD9D9 + D9FFC6C6C6FF737373F86B6B6B006E6E6E87848484FFC4C4C4FFB9B9B9FF5555 + 55FF585858FF999999FFDFDFDFFFE0E0E0FF9A9A9AFF595959FF565656FFBDBD + BDFFC8C8C8FF868686FF6E6E6E876F6F6FBA919191FFB8B8B8FFA2A2A2FF6868 + 68FF969696FFDDDDDDFFE1E1E1FFE3E3E3FFE1E1E1FF999999FF696969FFA6A6 + A6FFBFBFBFFF959595FF6F6F6FBA6F6F6FE99B9B9BFFB1B1B1FFC1C1C1FFCFCF + CFFFD6D6D6FFDEDEDEFFE4E4E4FFE7E7E7FFE4E4E4FFDDDDDDFFD7D7D7FFCACA + CAFFBABABAFFA1A1A1FF717171E96F6F6FE99B9B9BFFB1B1B1FFBBBBBBFFC6C6 + C6FFD0D0D0FFDCDCDCFFE3E3E3FFEAEAEAFFE3E3E3FFDADADAFFD0D0D0FFC5C5 + C5FFBBBBBBFFA1A1A1FF717171E96F6F6FBA919191FFAEAEAEFF959595FF6363 + 63FF8F8F8FFFD6D6D6FFDDDDDDFFE1E1E1FFDDDDDDFF949494FF666666FF9C9C + 9CFFB7B7B7FF979797FF6F6F6FBA6E6E6E87848484FFA9A9A9FFA4A4A4FF5151 + 51FF545454FF909090FFD4D4D4FFD6D6D6FF949494FF555555FF535353FFABAB + ABFFB1B1B1FF888888FF6E6E6E876B6B6B00737373F89A9A9AFFB1B1B1FF8989 + 89FF515151FF646464FFCCCCCCFFCDCDCDFF656565FF525252FF8D8D8DFFB9B9 + B9FFA0A0A0FF747474F86B6B6B00FFFFFF006D6D6D007E7E7EFFA2A2A2FFB2B2 + B2FFA6A6A6FF989898FFC2C2C2FFC3C3C3FF9A9A9AFFABABABFFB9B9B9FFA8A8 + A8FF808080FF6D6D6D00FFFFFF00FFFFFF00333333006D6D6DBA7E7E7EFF9C9C + 9CFFABABABFFB3B3B3FFB7B7B7FFB8B8B8FFB5B5B5FFAFAFAFFF9F9F9FFF8080 + 80FF6D6D6DBA33333300FFFFFF00FFFFFF00FFFFFF00333333006E6E6E007373 + 73F8858585FF949494FF9F9F9FFFA0A0A0FF969696FF878787FF747474F86E6E + 6E0033333300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B6B + 6B006D6D6D88707070BA707070E9707070E9707070BA6F6F6F886B6B6B00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 00000D0D0D00CFCFCFD5F9F9F9F8F9F9F9F8CFCFCFD50D0D0D0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000006F6F + 6FA3EFEFEFF1A9CEA9FF359335FF359835FFA9D2A9FFEFEFEFF16F6F6FA30000 + 000000000000FFFFFF00FFFFFF00FFFFFF0000000000707070A2E8E8E8EAD2E2 + D2FF4D934DFF008600FF00A300FF00AE00FF009700FF4D9D4DFFD2E5D2FFE8E8 + E8EA707070A200000000FFFFFF00FFFFFF00000000008C8C8CAF92B292FF0165 + 01FF008000FF009600FF00AD00FF00C200FF0DAF0DFF149B14FF017501FF92B8 + 92FF8C8C8CAF00000000FFFFFF00FFFFFF00000000006060609DA3BFA3FF006D + 00FF008400FF00A000FF00BC00FF0DC00DFFCBDDCBFFC6DEC6FF008000FFA3C5 + A3FF6060609D00000000FFFFFF00FFFFFF00000000002727278ACEDFCEFE006B + 00FFA9D0A9FFA9D0A9FF0EC00EFFC7DCC7FFDEE8DEFF278427FF007D00FFCEE2 + CEFE2727278A00000000FFFFFF00FFFFFF00FFFFFF0000000000D9DAD9DE297F + 29FF569356FFE9F0E9FFD9E5D9FFDEE8DEFF298F29FF009E00FF2A8E2AFFDADA + DADE00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000858585AC89B8 + 89FF007A00FF599459FFD9E4D9FF2B952BFF00D000FF009200FF8EC28EFF8585 + 85AC00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000010101080E3EB + E3F5248A24FF008A00FF009000FF00CD00FF00A400FF259725FFE6ECE6F51010 + 108000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000007474 + 74A5C4DEC4FE098309FF008A00FF008F00FF098B09FFC5E2C5FE747474A50000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000B4B4B4C5C6E0C6FF61AF61FF61B061FFC6E2C6FFB4B4B4C5000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000007070700818181AAE0E0E0E3E0E0E0E3818181AA0707070000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 00000E0E0E00CECECED5F8F8F8F8F8F8F8F8CECECED50E0E0E0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000007070 + 70A2F0F0F0F1A9A9D9FF3535B2FF3535B8FFA9A9DFFFF0F0F0F1707070A20000 + 000000000000FFFFFF00FFFFFF00FFFFFF0000000000707070A2E8E8E8EAD2D2 + E6FF4E4EA7FF0000AFFF0000D6FF0000E7FF0000C6FF4E4EB5FFD2D2EAFFE8E8 + E8EA707070A200000000FFFFFF00FFFFFF00000000008C8C8CAF9191B8FF0101 + 7DFF0000A4FF2A2ACEFF0000E4FF0000FEFF2424E1FF0000BFFF010196FF9191 + C2FF8C8C8CAF00000000FFFFFF00FFFFFF00000000006060609DA3A3C5FF0000 + 88FF2A2AB7FFF7F7FDFF5455DEFF4849E2FFF3F3FDFF2A2AC5FF0000A3FFA3A3 + CDFF6060609D00000000FFFFFF00FFFFFF00000000002727278ACECEE1FE0000 + 85FF0000A8FF5555D1FFF7F7FEFFF3F3FDFF5558D3FF0001C8FF00009FFFCECE + E6FE2727278A00000000FFFFFF00FFFFFF000000000000000000D9D9D9DE2929 + 95FF0000A4FF4D4ECCFFF3F4FDFFF7F8FDFF555ACBFF0001C2FF2A2AA9FFDADA + DADE0000000000000000FFFFFF00FFFFFF00FFFFFF0000000000858585AC8989 + C5FF2929AEFFF6F6FDFF575DCFFF5961CBFFF7F7FDFF2A2BB5FF8E8ED1FF8585 + 85AC00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000010101082E3E3 + EBF52424A5FF2A2AB6FF0309D5FF0612E2FF2B2DBFFF2424B6FFE5E5EEF51010 + 108200000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000007474 + 74A5C4C4E5FE0909A3FF0000B0FF0001B5FF0909B0FFC5C5E9FE747474A50000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000B4B4B4C5C6C6E7FF6161C4FF6161C7FFC6C6EAFFB4B4B4C5000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000006060600818181AAE0E0E0E3E0E0E0E3818181AA0606060000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00 } end diff --git a/waptexit/uwaptexit.pas b/waptexit/uwaptexit.pas index cb62aaa4e..24c9ad5ee 100644 --- a/waptexit/uwaptexit.pas +++ b/waptexit/uwaptexit.pas @@ -8,7 +8,7 @@ interface Classes, SysUtils, FileUtil, LazFileUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ActnList, Buttons, superobject, DefaultTranslator, ComCtrls, uWaptExitRes, sogrid,uWAPTPollThreads, - IdAntiFreeze; + IdAntiFreeze, VirtualTrees, ImgList; type @@ -64,6 +64,10 @@ TVisWaptExit = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormShow(Sender: TObject); + procedure GridPendingUpgradesGetImageIndexEx(Sender: TBaseVirtualTree; + Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; + var Ghosted: Boolean; var ImageIndex: Integer; + var ImageList: TCustomImageList); procedure Timer1Timer(Sender: TObject); private { private declarations } @@ -156,7 +160,7 @@ procedure TVisWaptExit.SetPending(AValue: ISuperObject); GridPending.Data := pending; - if (pending<>Nil) then + {if (pending<>Nil) then begin if ProgressBar.Max=0 then begin @@ -165,7 +169,7 @@ procedure TVisWaptExit.SetPending(AValue: ISuperObject); end else ProgressBar.Position := ProgressBar.Max - pending.AsArray.Length; - end; + end;} Application.ProcessMessages; end; @@ -174,21 +178,23 @@ procedure TVisWaptExit.SetRunning(AValue: ISuperObject); Description: String; begin if FRunning=AValue then Exit; - FRunning:=AValue; - if (running<>Nil) then + if (AValue<>Nil) and ((FRunning=Nil) or (FRunning.I['id']<>AValue.I['id'])) then begin - description := UTF8Encode(running.S['description']); + description := UTF8Encode(AValue.S['description']); if Length(description)>100 then EdRunning.Text := copy(description,1,100)+'...' else EdRunning.Text := description; - if running['runstatus']<>Nil then - MemoLog.Items.Text := UTF8Encode(running.S['runstatus']); - end; - Application.ProcessMessages; + if AValue['runstatus']<>Nil then + MemoLog.Items.Text := UTF8Encode(AValue.S['runstatus']); + end + else if (AValue=Nil) and (FRunning<>Nil) then + EdRunning.Text := ''; + FRunning:=AValue; + Application.ProcessMessages; end; function GetWaptLocalURL: String; @@ -263,6 +269,7 @@ procedure TVisWaptExit.OnUpgradeTriggered(Sender: TObject); var aso: ISuperObject; begin + ProgressBar.Style:=pbstNormal; WaitingForUpgradeTasks := False; aso := (Sender as TTriggerWaptserviceAction).Tasks; if aso <> Nil then @@ -309,6 +316,8 @@ procedure TVisWaptExit.ActUpgradeExecute(Sender: TObject); if InstallWUAUpdates and not CBSkipWindowsUpdates.Checked then args.AsArray.Add(Format('install_wua_updates=1',[])); {$endif} + ProgressBar.Style:=pbstMarquee; + EdRunning.Text:=rsLaunchSoftwareUpdate; TTriggerWaptserviceAction.Create(@OnUpgradeTriggered,'upgrade.json?'+Join('&',args)); end else @@ -532,7 +541,8 @@ procedure TVisWaptExit.OnCheckTasksThreadNotify(Sender: TObject); // service has been stopped if WAPTServiceRunning and not (Sender as TCheckTasksThread).WaptServiceRunning then begin - MemoLog.Items.Add((Sender as TCheckTasksThread).Message); + //MemoLog.Items.Add((Sender as TCheckTasksThread).Message); + MemoLog.Items.Text := (Sender as TCheckTasksThread).Message; WAPTServiceRunning:=False; Close; end; @@ -552,13 +562,21 @@ procedure TVisWaptExit.OnCheckEventsThreadNotify(Sender: TObject); if events <> Nil then begin if (events.AsArray<>Nil) and (events.AsArray.Length>0) then + for lastEvent in events do begin - lastEvent := events.AsArray[events.AsArray.Length-1]; case lastEvent.S['event_type'] of - 'PRINT': MemoLog.Items.Add(lastEvent.S['data']); - 'TASK_START','TASKS_STATUS','TASK_FINISH': EdRunning.Text:=lastEvent.S['data.runstatus']; + 'PRINT': MemoLog.Items.Text := lastEvent.S['data']; + 'TASK_START','TASK_STATUS','TASK_FINISH': + begin + ProgressBar.max:=100; + if Assigned(running) then + EdRunning.Text:= UTF8Encode(running.S['description']+': '+lastEvent.S['data.runstatus']) + else + EdRunning.Text:= UTF8Encode(lastEvent.S['data.runstatus']); + ProgressBar.Position:=lastevent.I['data.progress']; + end; + 'STATUS': GridPendingUpgrades.Data := GetPackageStatus(lastEvent['data']); end; - end; end else @@ -566,7 +584,8 @@ procedure TVisWaptExit.OnCheckEventsThreadNotify(Sender: TObject); // service has been stopped if WAPTServiceRunning and not (Sender as TCheckEventsThread).WaptServiceRunning then begin - MemoLog.Items.Add((Sender as TCheckEventsThread).Message); + //MemoLog.Items.Add((Sender as TCheckEventsThread).Message); + MemoLog.Items.Text := (Sender as TCheckEventsThread).Message; WAPTServiceRunning:=False; CheckEventsThread.Terminate; CheckTasksThread.Terminate; @@ -656,6 +675,37 @@ procedure TVisWaptExit.FormShow(Sender: TObject); CheckEventsThread := TCheckEventsThread.Create(@OnCheckEventsThreadNotify); end; + +procedure TVisWaptExit.GridPendingUpgradesGetImageIndexEx( + Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; + Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer; + var ImageList: TCustomImageList); +var + reachable,install_status: ISuperObject; + propname: String; + aGrid:TSOGrid; +begin + aGrid := (Sender as TSOGrid); + propName:=TSOGridColumn(aGrid.Header.Columns[Column]).PropertyName; + + if propName='install_status' then + begin + install_status := aGrid.GetCellData(Node, 'install_status', nil); + if (install_status <> nil) then + begin + case install_status.AsString of + 'OK': ImageIndex := 4; + 'NEED-UPGRADE': ImageIndex := 5; + 'ERROR-UPGRADE','ERROR','ERROR-INSTALL': ImageIndex := 6; + 'MISSING','NEED-INSTALL': ImageIndex := 7; + 'NEED-REMOVE': ImageIndex := 8; + 'RUNNING': ImageIndex := 9; + end; + end; + end +end; + + function TVisWaptExit.WorkInProgress: Boolean; begin Result :=