From 7502ba9583b286f859128d554234dd19f811dfda Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Thu, 27 Jun 2013 14:27:15 -0700 Subject: [PATCH] Fixed various missing files --- EverythingMP_SDK-2010.sln | 33 - common/SteamCommon.h | 703 ++++++++++++++++++ common/userid.h | 35 + game/client/replay/replayyoutubeapi.cpp | 40 +- .../replay/replayyoutubeapi_key_sdk.cpp | 16 + lib/public/appframework.lib | Bin 1610610 -> 1610610 bytes lib/public/matsys_controls.lib | Bin 18138362 -> 18138362 bytes lib/public/particles.lib | Bin 9151840 -> 9151840 bytes lib/public/tier1.lib | Bin 6825368 -> 6825368 bytes lib/public/tier3.lib | Bin 2366352 -> 2366352 bytes lib/public/vgui_controls.lib | Bin 49970508 -> 49970508 bytes lib/public/vstdlib.lib | Bin 13050 -> 13050 bytes public/tier1/ilocalize.h | 6 + 13 files changed, 764 insertions(+), 69 deletions(-) create mode 100644 common/SteamCommon.h create mode 100644 common/userid.h create mode 100644 game/client/replay/replayyoutubeapi_key_sdk.cpp diff --git a/EverythingMP_SDK-2010.sln b/EverythingMP_SDK-2010.sln index 38b94b6b..f0c0c7ba 100644 --- a/EverythingMP_SDK-2010.sln +++ b/EverythingMP_SDK-2010.sln @@ -1,13 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Client (HL2)", "game\client\client_hl2-2010.vcxproj", "{09E5D61D-4897-7B98-288B-C87442D14BFF}" - ProjectSection(ProjectDependencies) = postProject - {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} = {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} - {F69B3672-C5E8-CD1A-257F-253A25B5B939} = {F69B3672-C5E8-CD1A-257F-253A25B5B939} - {BAB92FF0-D72A-D7E5-1988-74628D39B94F} = {BAB92FF0-D72A-D7E5-1988-74628D39B94F} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Client (HL2MP)", "game\client\client_hl2mp-2010.vcxproj", "{17BCE59A-9037-EC8D-433E-F81339E2F1BA}" ProjectSection(ProjectDependencies) = postProject {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} = {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} @@ -15,12 +8,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Client (HL2MP)", "game\clie {BAB92FF0-D72A-D7E5-1988-74628D39B94F} = {BAB92FF0-D72A-D7E5-1988-74628D39B94F} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server (HL2)", "game\server\server_hl2-2010.vcxproj", "{C3EE918E-6836-5578-1FA2-5703048552B9}" - ProjectSection(ProjectDependencies) = postProject - {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} = {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} - {BAB92FF0-D72A-D7E5-1988-74628D39B94F} = {BAB92FF0-D72A-D7E5-1988-74628D39B94F} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server (HL2MP)", "game\server\server_hl2mp-2010.vcxproj", "{33B7DFDC-BECB-3678-1190-6C951E393EB3}" ProjectSection(ProjectDependencies) = postProject {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} = {EC1C516D-E1D9-BC0A-F79D-E91E954ED8EC} @@ -129,28 +116,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vgui_controls", "vgui2\vgui {BAB92FF0-D72A-D7E5-1988-74628D39B94F} = {BAB92FF0-D72A-D7E5-1988-74628D39B94F} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Client (Episodic)", "game\client\client_episodic-2010.vcxproj", "{353A799F-E73F-7A69-07AD-B2AD57F3B775}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server (Episodic)", "game\server\server_episodic-2010.vcxproj", "{7855B476-B6D4-535D-F7A9-D623245F8B07}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {09E5D61D-4897-7B98-288B-C87442D14BFF}.Debug|Win32.ActiveCfg = Debug|Win32 - {09E5D61D-4897-7B98-288B-C87442D14BFF}.Debug|Win32.Build.0 = Debug|Win32 - {09E5D61D-4897-7B98-288B-C87442D14BFF}.Release|Win32.ActiveCfg = Release|Win32 - {09E5D61D-4897-7B98-288B-C87442D14BFF}.Release|Win32.Build.0 = Release|Win32 {17BCE59A-9037-EC8D-433E-F81339E2F1BA}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCE59A-9037-EC8D-433E-F81339E2F1BA}.Debug|Win32.Build.0 = Debug|Win32 {17BCE59A-9037-EC8D-433E-F81339E2F1BA}.Release|Win32.ActiveCfg = Release|Win32 {17BCE59A-9037-EC8D-433E-F81339E2F1BA}.Release|Win32.Build.0 = Release|Win32 - {C3EE918E-6836-5578-1FA2-5703048552B9}.Debug|Win32.ActiveCfg = Debug|Win32 - {C3EE918E-6836-5578-1FA2-5703048552B9}.Debug|Win32.Build.0 = Debug|Win32 - {C3EE918E-6836-5578-1FA2-5703048552B9}.Release|Win32.ActiveCfg = Release|Win32 - {C3EE918E-6836-5578-1FA2-5703048552B9}.Release|Win32.Build.0 = Release|Win32 {33B7DFDC-BECB-3678-1190-6C951E393EB3}.Debug|Win32.ActiveCfg = Debug|Win32 {33B7DFDC-BECB-3678-1190-6C951E393EB3}.Debug|Win32.Build.0 = Debug|Win32 {33B7DFDC-BECB-3678-1190-6C951E393EB3}.Release|Win32.ActiveCfg = Release|Win32 @@ -231,14 +206,6 @@ Global {F69B3672-C5E8-CD1A-257F-253A25B5B939}.Debug|Win32.Build.0 = Debug|Win32 {F69B3672-C5E8-CD1A-257F-253A25B5B939}.Release|Win32.ActiveCfg = Release|Win32 {F69B3672-C5E8-CD1A-257F-253A25B5B939}.Release|Win32.Build.0 = Release|Win32 - {353A799F-E73F-7A69-07AD-B2AD57F3B775}.Debug|Win32.ActiveCfg = Debug|Win32 - {353A799F-E73F-7A69-07AD-B2AD57F3B775}.Debug|Win32.Build.0 = Debug|Win32 - {353A799F-E73F-7A69-07AD-B2AD57F3B775}.Release|Win32.ActiveCfg = Release|Win32 - {353A799F-E73F-7A69-07AD-B2AD57F3B775}.Release|Win32.Build.0 = Release|Win32 - {7855B476-B6D4-535D-F7A9-D623245F8B07}.Debug|Win32.ActiveCfg = Debug|Win32 - {7855B476-B6D4-535D-F7A9-D623245F8B07}.Debug|Win32.Build.0 = Debug|Win32 - {7855B476-B6D4-535D-F7A9-D623245F8B07}.Release|Win32.ActiveCfg = Release|Win32 - {7855B476-B6D4-535D-F7A9-D623245F8B07}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/common/SteamCommon.h b/common/SteamCommon.h new file mode 100644 index 00000000..ac008ff1 --- /dev/null +++ b/common/SteamCommon.h @@ -0,0 +1,703 @@ + +//========= Copyright Valve Corporation, All rights reserved. ============// +/* +** The copyright to the contents herein is the property of Valve Corporation. +** The contents may be used and/or copied only with the written permission of +** Valve, or in accordance with the terms and conditions stipulated in +** the agreement/contract under which the contents have been supplied. +** +******************************************************************************* +** +** Contents: +** +** Common types used in the Steam DLL interface. +** +** This file is distributed to Steam application developers. +** +** +** +*******************************************************************************/ + +#ifndef INCLUDED_STEAM_COMMON_STEAMCOMMON_H +#define INCLUDED_STEAM_COMMON_STEAMCOMMON_H + +#if defined(_MSC_VER) && (_MSC_VER > 1000) +#pragma once +#endif + + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Applications should not define STEAM_EXPORTS. */ + +#if defined ( _WIN32 ) + +#ifdef STEAM_EXPORTS +#define STEAM_API __declspec(dllexport) +#else +#define STEAM_API __declspec(dllimport) +#endif + +#define STEAM_CALL __cdecl + +#else + +#define STEAM_API /* */ +#define STEAM_CALL /* */ + +#endif + +typedef void (STEAM_CALL *KeyValueIteratorCallback_t )(const char *Key, const char *Val, void *pvParam); + + +/****************************************************************************** +** +** Exported macros and constants +** +******************************************************************************/ + +/* DEPRECATED -- these are ignored now, all API access is granted on SteamStartup */ +#define STEAM_USING_FILESYSTEM (0x00000001) +#define STEAM_USING_LOGGING (0x00000002) +#define STEAM_USING_USERID (0x00000004) +#define STEAM_USING_ACCOUNT (0x00000008) +#define STEAM_USING_ALL (0x0000000f) +/* END DEPRECATED */ + +#define STEAM_MAX_PATH (255) +#define STEAM_QUESTION_MAXLEN (255) +#define STEAM_SALT_SIZE (8) +#define STEAM_PROGRESS_PERCENT_SCALE (0x00001000) + +/* These are maximum significant string lengths, excluding nul-terminator. */ +#define STEAM_CARD_NUMBER_SIZE (17) +#define STEAM_CARD_HOLDERNAME_SIZE (100) +#define STEAM_CARD_EXPYEAR_SIZE (4) +#define STEAM_CARD_EXPMONTH_SIZE (2) +#define STEAM_CARD_CVV2_SIZE (5) +#define STEAM_BILLING_ADDRESS1_SIZE (128) +#define STEAM_BILLING_ADDRESS2_SIZE (128) +#define STEAM_BILLING_CITY_SIZE (50) +#define STEAM_BILLING_ZIP_SIZE (16) +#define STEAM_BILLING_STATE_SIZE (32) +#define STEAM_BILLING_COUNTRY_SIZE (32) +#define STEAM_BILLING_PHONE_SIZE (20) +#define STEAM_BILLING_EMAIL_ADDRESS_SIZE (100) +#define STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE (20) +#define STEAM_PROOF_OF_PURCHASE_TOKEN_SIZE (200) +#define STEAM_EXTERNAL_ACCOUNTNAME_SIZE (100) +#define STEAM_EXTERNAL_ACCOUNTPASSWORD_SIZE (80) +#define STEAM_BILLING_CONFIRMATION_CODE_SIZE (22) +#define STEAM_BILLING_CARD_APPROVAL_CODE_SIZE (100) +#define STEAM_BILLING_TRANS_DATE_SIZE (9) // mm/dd/yy +#define STEAM_BILLING_TRANS_TIME_SIZE (9) // hh:mm:ss + +/****************************************************************************** +** +** Scalar type and enumerated type definitions. +** +******************************************************************************/ + + +typedef unsigned int SteamHandle_t; + +typedef void * SteamUserIDTicketValidationHandle_t; + +typedef unsigned int SteamCallHandle_t; + +#if defined(_MSC_VER) +typedef unsigned __int64 SteamUnsigned64_t; +#else +typedef unsigned long long SteamUnsigned64_t; +#endif + +typedef enum +{ + eSteamSeekMethodSet = 0, + eSteamSeekMethodCur = 1, + eSteamSeekMethodEnd = 2 +} ESteamSeekMethod; + +typedef enum +{ + eSteamBufferMethodFBF = 0, + eSteamBufferMethodNBF = 1 +} ESteamBufferMethod; + +typedef enum +{ + eSteamErrorNone = 0, + eSteamErrorUnknown = 1, + eSteamErrorLibraryNotInitialized = 2, + eSteamErrorLibraryAlreadyInitialized = 3, + eSteamErrorConfig = 4, + eSteamErrorContentServerConnect = 5, + eSteamErrorBadHandle = 6, + eSteamErrorHandlesExhausted = 7, + eSteamErrorBadArg = 8, + eSteamErrorNotFound = 9, + eSteamErrorRead = 10, + eSteamErrorEOF = 11, + eSteamErrorSeek = 12, + eSteamErrorCannotWriteNonUserConfigFile = 13, + eSteamErrorCacheOpen = 14, + eSteamErrorCacheRead = 15, + eSteamErrorCacheCorrupted = 16, + eSteamErrorCacheWrite = 17, + eSteamErrorCacheSession = 18, + eSteamErrorCacheInternal = 19, + eSteamErrorCacheBadApp = 20, + eSteamErrorCacheVersion = 21, + eSteamErrorCacheBadFingerPrint = 22, + + eSteamErrorNotFinishedProcessing = 23, + eSteamErrorNothingToDo = 24, + eSteamErrorCorruptEncryptedUserIDTicket = 25, + eSteamErrorSocketLibraryNotInitialized = 26, + eSteamErrorFailedToConnectToUserIDTicketValidationServer = 27, + eSteamErrorBadProtocolVersion = 28, + eSteamErrorReplayedUserIDTicketFromClient = 29, + eSteamErrorReceiveResultBufferTooSmall = 30, + eSteamErrorSendFailed = 31, + eSteamErrorReceiveFailed = 32, + eSteamErrorReplayedReplyFromUserIDTicketValidationServer = 33, + eSteamErrorBadSignatureFromUserIDTicketValidationServer = 34, + eSteamErrorValidationStalledSoAborted = 35, + eSteamErrorInvalidUserIDTicket = 36, + eSteamErrorClientLoginRateTooHigh = 37, + eSteamErrorClientWasNeverValidated = 38, + eSteamErrorInternalSendBufferTooSmall = 39, + eSteamErrorInternalReceiveBufferTooSmall = 40, + eSteamErrorUserTicketExpired = 41, + eSteamErrorCDKeyAlreadyInUseOnAnotherClient = 42, + + eSteamErrorNotLoggedIn = 101, + eSteamErrorAlreadyExists = 102, + eSteamErrorAlreadySubscribed = 103, + eSteamErrorNotSubscribed = 104, + eSteamErrorAccessDenied = 105, + eSteamErrorFailedToCreateCacheFile = 106, + eSteamErrorCallStalledSoAborted = 107, + eSteamErrorEngineNotRunning = 108, + eSteamErrorEngineConnectionLost = 109, + eSteamErrorLoginFailed = 110, + eSteamErrorAccountPending = 111, + eSteamErrorCacheWasMissingRetry = 112, + eSteamErrorLocalTimeIncorrect = 113, + eSteamErrorCacheNeedsDecryption = 114, + eSteamErrorAccountDisabled = 115, + eSteamErrorCacheNeedsRepair = 116, + eSteamErrorRebootRequired = 117, + + eSteamErrorNetwork = 200, + eSteamErrorOffline = 201 + + +} ESteamError; + + +typedef enum +{ + eNoDetailedErrorAvailable, + eStandardCerrno, + eWin32LastError, + eWinSockLastError, + eDetailedPlatformErrorCount +} EDetailedPlatformErrorType; + +typedef enum /* Filter elements returned by SteamFind{First,Next} */ +{ + eSteamFindLocalOnly, /* limit search to local filesystem */ + eSteamFindRemoteOnly, /* limit search to remote repository */ + eSteamFindAll /* do not limit search (duplicates allowed) */ +} ESteamFindFilter; + + +/****************************************************************************** +** +** Exported structure and complex type definitions. +** +******************************************************************************/ + + +typedef struct +{ + ESteamError eSteamError; + EDetailedPlatformErrorType eDetailedErrorType; + int nDetailedErrorCode; + char szDesc[STEAM_MAX_PATH]; +} TSteamError; + + + +typedef struct +{ + int bIsDir; /* If non-zero, element is a directory; if zero, element is a file */ + unsigned int uSizeOrCount; /* If element is a file, this contains size of file in bytes */ + int bIsLocal; /* If non-zero, reported item is a standalone element on local filesystem */ + char cszName[STEAM_MAX_PATH]; /* Base element name (no path) */ + long lLastAccessTime; /* Seconds since 1/1/1970 (like time_t) when element was last accessed */ + long lLastModificationTime; /* Seconds since 1/1/1970 (like time_t) when element was last modified */ + long lCreationTime; /* Seconds since 1/1/1970 (like time_t) when element was created */ +} TSteamElemInfo; + + +typedef struct +{ + unsigned int uNumSubscriptions; + unsigned int uMaxNameChars; + unsigned int uMaxApps; + +} TSteamSubscriptionStats; + + +typedef struct +{ + unsigned int uNumApps; + unsigned int uMaxNameChars; + unsigned int uMaxInstallDirNameChars; + unsigned int uMaxVersionLabelChars; + unsigned int uMaxLaunchOptions; + unsigned int uMaxLaunchOptionDescChars; + unsigned int uMaxLaunchOptionCmdLineChars; + unsigned int uMaxNumIcons; + unsigned int uMaxIconSize; + unsigned int uMaxDependencies; + +} TSteamAppStats; + +typedef struct +{ + char *szLabel; + unsigned int uMaxLabelChars; + unsigned int uVersionId; + int bIsNotAvailable; +} TSteamAppVersion; + +typedef struct +{ + char *szDesc; + unsigned int uMaxDescChars; + char *szCmdLine; + unsigned int uMaxCmdLineChars; + unsigned int uIndex; + unsigned int uIconIndex; + int bNoDesktopShortcut; + int bNoStartMenuShortcut; + int bIsLongRunningUnattended; + +} TSteamAppLaunchOption; + + +typedef struct +{ + char *szName; + unsigned int uMaxNameChars; + char *szLatestVersionLabel; + unsigned int uMaxLatestVersionLabelChars; + char *szCurrentVersionLabel; + unsigned int uMaxCurrentVersionLabelChars; + char *szInstallDirName; + unsigned int uMaxInstallDirNameChars; + unsigned int uId; + unsigned int uLatestVersionId; + unsigned int uCurrentVersionId; + unsigned int uMinCacheFileSizeMB; + unsigned int uMaxCacheFileSizeMB; + unsigned int uNumLaunchOptions; + unsigned int uNumIcons; + unsigned int uNumVersions; + unsigned int uNumDependencies; + +} TSteamApp; + +typedef enum +{ + eNoCost = 0, + eBillOnceOnly = 1, + eBillMonthly = 2, + eProofOfPrepurchaseOnly = 3, + eGuestPass = 4, + eHardwarePromo = 5, + eNumBillingTypes, +} EBillingType; + +typedef struct +{ + char *szName; + unsigned int uMaxNameChars; + unsigned int *puAppIds; + unsigned int uMaxAppIds; + unsigned int uId; + unsigned int uNumApps; + EBillingType eBillingType; + unsigned int uCostInCents; + unsigned int uNumDiscounts; + int bIsPreorder; + int bRequiresShippingAddress; + unsigned int uDomesticShippingCostInCents; + unsigned int uInternationalShippingCostInCents; + bool bIsCyberCafeSubscription; + unsigned int uGameCode; + char szGameCodeDesc[STEAM_MAX_PATH]; + bool bIsDisabled; + bool bRequiresCD; + unsigned int uTerritoryCode; + bool bIsSteam3Subscription; + +} TSteamSubscription; + +typedef struct +{ + char szName[STEAM_MAX_PATH]; + unsigned int uDiscountInCents; + unsigned int uNumQualifiers; + +} TSteamSubscriptionDiscount; + +typedef struct +{ + char szName[STEAM_MAX_PATH]; + unsigned int uRequiredSubscription; + int bIsDisqualifier; + +} TSteamDiscountQualifier; + +typedef struct TSteamProgress +{ + int bValid; /* non-zero if call provides progress info */ + unsigned int uPercentDone; /* 0 to 100 * STEAM_PROGRESS_PERCENT_SCALE if bValid */ + char szProgress[STEAM_MAX_PATH]; /* additional progress info */ +} TSteamProgress; + +typedef enum +{ + eSteamNotifyTicketsWillExpire, + eSteamNotifyAccountInfoChanged, + eSteamNotifyContentDescriptionChanged, + eSteamNotifyPleaseShutdown, + eSteamNotifyNewContentServer, + eSteamNotifySubscriptionStatusChanged, + eSteamNotifyContentServerConnectionLost, + eSteamNotifyCacheLoadingCompleted, + eSteamNotifyCacheNeedsDecryption, + eSteamNotifyCacheNeedsRepair +} ESteamNotificationCallbackEvent; + + +typedef void(*SteamNotificationCallback_t)(ESteamNotificationCallbackEvent eEvent, unsigned int nData); + + +typedef char SteamPersonalQuestion_t[ STEAM_QUESTION_MAXLEN + 1 ]; + +typedef struct +{ + unsigned char uchSalt[STEAM_SALT_SIZE]; +} SteamSalt_t; + +typedef enum +{ + eVisa = 1, + eMaster = 2, + eAmericanExpress = 3, + eDiscover = 4, + eDinnersClub = 5, + eJCB = 6 +} ESteamPaymentCardType; + +typedef struct +{ + ESteamPaymentCardType eCardType; + char szCardNumber[ STEAM_CARD_NUMBER_SIZE +1 ]; + char szCardHolderName[ STEAM_CARD_HOLDERNAME_SIZE + 1]; + char szCardExpYear[ STEAM_CARD_EXPYEAR_SIZE + 1 ]; + char szCardExpMonth[ STEAM_CARD_EXPMONTH_SIZE+ 1 ]; + char szCardCVV2[ STEAM_CARD_CVV2_SIZE + 1 ]; + char szBillingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ]; + char szBillingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ]; + char szBillingCity[ STEAM_BILLING_CITY_SIZE + 1 ]; + char szBillingZip[ STEAM_BILLING_ZIP_SIZE + 1 ]; + char szBillingState[ STEAM_BILLING_STATE_SIZE + 1 ]; + char szBillingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ]; + char szBillingPhone[ STEAM_BILLING_PHONE_SIZE + 1 ]; + char szBillingEmailAddress[ STEAM_BILLING_EMAIL_ADDRESS_SIZE + 1 ]; + unsigned int uExpectedCostInCents; + unsigned int uExpectedTaxInCents; + /* If the TSteamSubscription says that shipping info is required, */ + /* then the following fields must be filled out. */ + /* If szShippingName is empty, then assumes so are the rest. */ + char szShippingName[ STEAM_CARD_HOLDERNAME_SIZE + 1]; + char szShippingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ]; + char szShippingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ]; + char szShippingCity[ STEAM_BILLING_CITY_SIZE + 1 ]; + char szShippingZip[ STEAM_BILLING_ZIP_SIZE + 1 ]; + char szShippingState[ STEAM_BILLING_STATE_SIZE + 1 ]; + char szShippingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ]; + char szShippingPhone[ STEAM_BILLING_PHONE_SIZE + 1 ]; + unsigned int uExpectedShippingCostInCents; + +} TSteamPaymentCardInfo; + +typedef struct +{ + char szTypeOfProofOfPurchase[ STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE + 1 ]; + + /* A ProofOfPurchase token is not necessarily a nul-terminated string; it may be binary data + (perhaps encrypted). Hence we need a length and an array of bytes. */ + unsigned int uLengthOfBinaryProofOfPurchaseToken; + char cBinaryProofOfPurchaseToken[ STEAM_PROOF_OF_PURCHASE_TOKEN_SIZE + 1 ]; +} TSteamPrepurchaseInfo; + +typedef struct +{ + char szAccountName[ STEAM_EXTERNAL_ACCOUNTNAME_SIZE + 1 ]; + char szPassword[ STEAM_EXTERNAL_ACCOUNTPASSWORD_SIZE + 1 ]; +} TSteamExternalBillingInfo; + +typedef enum +{ + ePaymentCardInfo = 1, + ePrepurchasedInfo = 2, + eAccountBillingInfo = 3, + eExternalBillingInfo = 4, /* indirect billing via ISP etc (not supported yet) */ + ePaymentCardReceipt = 5, + ePrepurchaseReceipt = 6, + eEmptyReceipt = 7 +} ESteamSubscriptionBillingInfoType; + +typedef struct +{ + ESteamSubscriptionBillingInfoType eBillingInfoType; + union { + TSteamPaymentCardInfo PaymentCardInfo; + TSteamPrepurchaseInfo PrepurchaseInfo; + TSteamExternalBillingInfo ExternalBillingInfo; + char bUseAccountBillingInfo; + }; + +} TSteamSubscriptionBillingInfo; + +typedef enum +{ + /* Subscribed */ + eSteamSubscriptionOK = 0, /* Subscribed */ + eSteamSubscriptionPending = 1, /* Awaiting transaction completion */ + eSteamSubscriptionPreorder = 2, /* Is currently a pre-order */ + eSteamSubscriptionPrepurchaseTransferred = 3, /* hop to this account */ + /* Unusbscribed */ + eSteamSubscriptionPrepurchaseInvalid = 4, /* Invalid cd-key */ + eSteamSubscriptionPrepurchaseRejected = 5, /* hopped out / banned / etc */ + eSteamSubscriptionPrepurchaseRevoked = 6, /* hop away from this account */ + eSteamSubscriptionPaymentCardDeclined = 7, /* CC txn declined */ + eSteamSubscriptionCancelledByUser = 8, /* Cancelled by client */ + eSteamSubscriptionCancelledByVendor = 9, /* Cancelled by us */ + eSteamSubscriptionPaymentCardUseLimit = 10, /* Card used too many times, potential fraud */ + eSteamSubscriptionPaymentCardAlert = 11, /* Got a "pick up card" or the like from bank */ + eSteamSubscriptionFailed = 12, /* Other Error in subscription data or transaction failed/lost */ + eSteamSubscriptionPaymentCardAVSFailure = 13, /* Card failed Address Verification check */ + eSteamSubscriptionPaymentCardInsufficientFunds = 14, /* Card failed due to insufficient funds */ + eSteamSubscriptionRestrictedCountry = 15 /* The subscription is not available in the user's country */ + +} ESteamSubscriptionStatus; + +typedef struct +{ + ESteamPaymentCardType eCardType; + char szCardLastFourDigits[ 4 + 1 ]; + char szCardHolderName[ STEAM_CARD_HOLDERNAME_SIZE + 1]; + char szBillingAddress1[ STEAM_BILLING_ADDRESS1_SIZE + 1 ]; + char szBillingAddress2[ STEAM_BILLING_ADDRESS2_SIZE + 1 ]; + char szBillingCity[ STEAM_BILLING_CITY_SIZE + 1 ]; + char szBillingZip[ STEAM_BILLING_ZIP_SIZE + 1 ]; + char szBillingState[ STEAM_BILLING_STATE_SIZE + 1 ]; + char szBillingCountry[ STEAM_BILLING_COUNTRY_SIZE + 1 ]; + + // The following are only available after the subscription leaves "pending" status + char szCardApprovalCode[ STEAM_BILLING_CARD_APPROVAL_CODE_SIZE + 1]; + char szTransDate[ STEAM_BILLING_TRANS_DATE_SIZE + 1]; /* mm/dd/yy */ + char szTransTime[ STEAM_BILLING_TRANS_TIME_SIZE + 1]; /* hh:mm:ss */ + unsigned int uPriceWithoutTax; + unsigned int uTaxAmount; + unsigned int uShippingCost; + +} TSteamPaymentCardReceiptInfo; + +typedef struct +{ + char szTypeOfProofOfPurchase[ STEAM_TYPE_OF_PROOF_OF_PURCHASE_SIZE + 1 ]; +} TSteamPrepurchaseReceiptInfo; + +typedef struct +{ + ESteamSubscriptionStatus eStatus; + ESteamSubscriptionStatus ePreviousStatus; + ESteamSubscriptionBillingInfoType eReceiptInfoType; + char szConfirmationCode[ STEAM_BILLING_CONFIRMATION_CODE_SIZE + 1]; + union { + TSteamPaymentCardReceiptInfo PaymentCardReceiptInfo; + TSteamPrepurchaseReceiptInfo PrepurchaseReceiptInfo; + }; + +} TSteamSubscriptionReceipt; + +typedef enum +{ + ePhysicalBytesReceivedThisSession = 1, + eAppReadyToLaunchStatus = 2, + eAppPreloadStatus = 3, + eAppEntireDepot = 4, + eCacheBytesPresent = 5 +} ESteamAppUpdateStatsQueryType; + +typedef struct +{ + SteamUnsigned64_t uBytesTotal; + SteamUnsigned64_t uBytesPresent; +} TSteamUpdateStats; + +typedef enum +{ + eSteamUserAdministrator = 0x00000001, /* May subscribe, unsubscribe, etc */ + eSteamUserDeveloper = 0x00000002, /* Steam or App developer */ + eSteamUserCyberCafe = 0x00000004 /* CyberCafe, school, etc -- UI should ask for password */ + /* before allowing logout, unsubscribe, etc */ +} ESteamUserTypeFlags; + +typedef enum +{ + eSteamAccountStatusDefault = 0x00000000, + eSteamAccountStatusEmailVerified = 0x00000001, + /* Note: Mask value 0x2 is reserved for future use. (Some, but not all, public accounts already have this set.) */ + eSteamAccountDisabled = 0x00000004 +} ESteamAccountStatusBitFields ; + + +typedef enum +{ + eSteamBootstrapperError = -1, + eSteamBootstrapperDontCheckForUpdate = 0, + eSteamBootstrapperCheckForUpdateAndRerun = 7 + +} ESteamBootStrapperClientAppResult; + +typedef enum +{ + eSteamOnline = 0, + eSteamOffline = 1, + eSteamNoAuthMode = 2, + eSteamBillingOffline = 3 +} eSteamOfflineStatus; + +typedef struct +{ + int eOfflineNow; + int eOfflineNextSession; +} TSteamOfflineStatus; + +typedef struct +{ + unsigned int uAppId; + int bIsSystemDefined; + char szMountPath[STEAM_MAX_PATH]; +} TSteamAppDependencyInfo; + +typedef enum +{ + eSteamOpenFileRegular = 0x0, + eSteamOpenFileIgnoreLocal = 0x1, + eSteamOpenFileChecksumReads = 0x2 +} ESteamOpenFileFlags; + +typedef enum +{ + eSteamValveCDKeyValidationServer = 0, + eSteamHalfLifeMasterServer = 1, + eSteamFriendsServer = 2, + eSteamCSERServer = 3, + eSteamHalfLife2MasterServer = 4, + eSteamRDKFMasterServer = 5, + eMaxServerTypes = 6 +} ESteamServerType; + +/****************************************************************************** +** +** More exported constants +** +******************************************************************************/ + + +#ifdef __cplusplus + +const SteamHandle_t STEAM_INVALID_HANDLE = 0; +const SteamCallHandle_t STEAM_INVALID_CALL_HANDLE = 0; +const SteamUserIDTicketValidationHandle_t STEAM_INACTIVE_USERIDTICKET_VALIDATION_HANDLE = 0; +const unsigned int STEAM_USE_LATEST_VERSION = 0xFFFFFFFF; + +#else + +#define STEAM_INVALID_HANDLE ((SteamHandle_t)(0)) +#define STEAM_INVALID_CALL_HANDLE ((SteamCallHandle_t)(0)) +#define STEAM_INACTIVE_USERIDTICKET_VALIDATION_HANDLE ((SteamUserIDTicketValidationHandle_t)(0)) +#define STEAM_USE_LATEST_VERSION (0xFFFFFFFFu); + +#endif + + +/****************************************************************************** +** Each Steam instance (licensed Steam Service Provider) has a unique SteamInstanceID_t. +** +** Each Steam instance as its own DB of users. +** Each user in the DB has a unique SteamLocalUserID_t (a serial number, with possible +** rare gaps in the sequence). +** +******************************************************************************/ + +typedef unsigned short SteamInstanceID_t; // MUST be 16 bits + + +#if defined ( _WIN32 ) +typedef unsigned __int64 SteamLocalUserID_t; // MUST be 64 bits +#else +typedef unsigned long long SteamLocalUserID_t; // MUST be 64 bits +#endif + +/****************************************************************************** +** +** Applications need to be able to authenticate Steam users from ANY instance. +** So a SteamIDTicket contains SteamGlobalUserID, which is a unique combination of +** instance and user id. +** +** SteamLocalUserID is an unsigned 64-bit integer. +** For platforms without 64-bit int support, we provide access via a union that splits it into +** high and low unsigned 32-bit ints. Such platforms will only need to compare LocalUserIDs +** for equivalence anyway - not perform arithmetic with them. +** +********************************************************************************/ +typedef struct +{ + unsigned int Low32bits; + unsigned int High32bits; +} TSteamSplitLocalUserID; + +typedef struct +{ + SteamInstanceID_t m_SteamInstanceID; + + union + { + SteamLocalUserID_t As64bits; + TSteamSplitLocalUserID Split; + } m_SteamLocalUserID; + +} TSteamGlobalUserID; + + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/common/userid.h b/common/userid.h new file mode 100644 index 00000000..48968a44 --- /dev/null +++ b/common/userid.h @@ -0,0 +1,35 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef USERID_H +#define USERID_H +#ifdef _WIN32 +#pragma once +#endif + +#if !defined( INCLUDED_STEAM_STEAMUSERIDTYPES_H ) + #include "SteamCommon.h" +#endif + +#define IDTYPE_WON 0 +#define IDTYPE_STEAM 1 +#define IDTYPE_VALVE 2 +#define IDTYPE_HLTV 3 +#define IDTYPE_REPLAY 4 +typedef struct USERID_s +{ + int idtype; + + union + { + TSteamGlobalUserID steamid; + } uid; + +// unsigned int clientip; +} USERID_t; + +#endif // USERID_H diff --git a/game/client/replay/replayyoutubeapi.cpp b/game/client/replay/replayyoutubeapi.cpp index 649416b8..e39d5dcb 100644 --- a/game/client/replay/replayyoutubeapi.cpp +++ b/game/client/replay/replayyoutubeapi.cpp @@ -43,6 +43,9 @@ static ConVar youtube_username( "youtube_username", "", FCVAR_ARCHIVE, "Username extern IReplayMovieManager *g_pReplayMovieManager; extern const char *COM_GetModDirectory(); +extern void GetYouTubeAPIKey( const char *pGameDir, bool bOnSteamPublic, const char **ppSource, const char **ppDeveloperTag, const char **ppDeveloperKey ); + + //----------------------------------------------------------------------------- @@ -385,42 +388,7 @@ protected: const char *pDeveloperTag = NULL; const char *pDeveloperKey = NULL; - // Team Fortress 2? - if ( FStrEq( pGameDir, "tf" ) ) - { - pSource = "Team Fortress 2"; - pDeveloperTag = "TF2"; - pDeveloperKey = bOnSteamPublic ? - "AI39si6dQGxX2TWkOT9V9ihFpKmokaDhqIw3mgJcnnRFjX5f00HMRXqj69Fg1ulTdYF9Aw4wIt5NYHCxQAXHPPEcbQ89rEaCeg" : - "AI39si5q3V-l7DhNbdSn-F2P3l0sUOIOnHBqJC5kvdGsuwpIinmcOH5GFC1PGG0olcZM2ID0Fvbsodj6g0pOUkKhuRNxcEErLQ"; - } - // Team Fortress 2 Beta? - else if ( FStrEq( pGameDir, "tf_beta" ) ) - { - pSource = "Team Fortress 2 Beta"; - pDeveloperTag = "TF2"; - pDeveloperKey = bOnSteamPublic ? - "AI39si7XuLuXg3-2T06aVUaM-45HSXYFqzXfyPR6y5K4XotWKf78lfCByXnD1T8Kj9jeIR85NelpjGYGsH8pR3RO4k3TrwlTbw" : - "AI39si79TOshUv9FcIT6cjEH0Q9KK_eEOH1q6-_lIdNIsmHrKcal1R8Uf0TzMhdq-rQ7iUEZ3uqSKlLXa2J-lQvuKwNq5SSnMA"; - } - // Counter-Strike: Source? - else if ( FStrEq( pGameDir, "cstrike" ) ) - { - pSource = "Counter-Strike: Source"; - pDeveloperTag = "CSS"; - pDeveloperKey = bOnSteamPublic ? - "AI39si7JIn2nj67YoxWPzmsGHO2R-WSpN0su1f3-BF9lVC5jWz9DEOPbOxFz-MiXuaMtoCZnS3nSPjwGfqHenXC6RKGcICI5HQ" : - "AI39si4bpW1q3D0gcWWNWFNHjHgsM7YL3RGCdEAIKV2k_mH5Cwj-YwXinVv933tFhy-6583HcuZ8NWTrvfbB8XTWEI-hYidEjA"; - } - // Counter-Strike: Source Beta? - else if ( FStrEq( pGameDir, "cstrike_beta" ) ) - { - pSource = "Counter-Strike: Source Beta"; - pDeveloperTag = "CSS"; - pDeveloperKey = bOnSteamPublic ? - "AI39si5JUyCvGdavFg02OusWk9lkSxkpEX99KnJCjTwOzLJH7N9MS40YMFk-o8dTwyO0w2Qi2CSU8qrB4bdTohHj35mAa0iMDQ" : - "AI39si4Oq2O35MHD5qahqODCKQfsssq5STE6ISolJKsvFuxtPpqhG4sQbDF8pGdZ02c-_s5KRB5nhTjqZMLB4h0lKKHh8I52Tg"; - } + GetYouTubeAPIKey( pGameDir, bOnSteamPublic, &pSource, &pDeveloperTag, &pDeveloperKey ); Assert( pSource ); Assert( pDeveloperTag ); diff --git a/game/client/replay/replayyoutubeapi_key_sdk.cpp b/game/client/replay/replayyoutubeapi_key_sdk.cpp new file mode 100644 index 00000000..ba113f88 --- /dev/null +++ b/game/client/replay/replayyoutubeapi_key_sdk.cpp @@ -0,0 +1,16 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" + + +void GetYouTubeAPIKey( const char *pGameDir, bool bOnSteamPublic, const char **ppSource, const char **ppDeveloperTag, const char **ppDeveloperKey ) +{ + // Put your YouTube Developer key here if you're going to upload videos to YouTube + *ppSource = "your Mod Name"; + *ppDeveloperTag = "Your mod tag"; + *ppDeveloperKey = "Your mod's developer key"; +} diff --git a/lib/public/appframework.lib b/lib/public/appframework.lib index 31bed72a10f729157ba5a73861cc3ede041d51d2..9c1694d7e4158b459b1fdabb4aa15535fd82aefa 100644 GIT binary patch delta 212 zcmeygEa}s-qzSUD78Yh^7L)TT#5P(ORzP^0^D3lEAk5~zH|>3I7=f4xh?%$dyK}5DNma X5D*Iku?P^00x`%8@$LFa63&JI_`XCg delta 207 zcmeygEa}s-qzSUDhQ^lWMw9a@#5P(ORzP^0^D3lEAk5~zH|>3I7=f4xh?%$dy<2c@#=bba>-#y<~KK+=c9CHj#p`pRSArp-m zMpcH<(P~sT&3knv#pbC|2~J9EUS)0e>w9y!vt$m}pbA{z3OBgJ16t_d2`_lV2OmHW zU-+Ras-Ze+z<`>l1%G@9BWmL#)WOH7i%(Dw_0a$UXoyB=j3#J`Ks3Xr2tqJI5Q^q# zftF~6)@Xw;v_(6#M>sx11UlezM4}@)p)*YQ0$<`QbU_rN(G}g$9bY2`vFL%G_y%!^ zM*4K1fDi^h19Pz(5SbV3;uk-(o0IFbu;n0wXaBsrU|~F$QBX4rz)x+)~%4 zV#a~8uAP^!yeY<_RWC>_R*GUQno^&VjEhTGhq)J4SC#hMHaR-d!6Dcv=j3bjQdz`! zq+)a<7ceFTCBr*Y`{ir!Y|m2JZwQetk?=gDT^qGi?4X0W^xx>TR+*HTi~IV zQ;Q`_Zh>OSExb|xJ+G8vkZYBs=%s91A%4Yg_#J;>8@6Kyim(&Aup4`@7yGaue=6Cw zzq;*r3TYk~6jU*zs+@X-;TpN*+WThjl@M7OMUlu#$eve19wffQqPu%BX^>sD|n=zymc<6SYtqbx;@eP#+D@5RK3nP0$q0&>St`iI(s} zE3`%%c%v=a!3XWp0Ugl^o#Bfv=!$OW4nO##2YMm^f#`+a2tpqOqc8d)1pP4p12G7L z5sD!Q!%z&vaD-z7Mq(63V+_V(9L8e;CSnpMD`B3-@~-j@t+$)J-Os2|z4tw%r284w znXXnlH{9r<%PBQN8|CyQp-E2*i#mEaF#+eFu?d^81zWKV+pz;X zu?r^bMlw>c2a1yAl^WP9Z#SVyskyt6j7h1AF)8hJrT^?FTql>jAFh?+GSaXY`>-De za1e)Z80k2Iqd11+IDwNmh0{u0#+k0Ca%V4*&uVOWmd@IF_7?FrvLVo+nANe~@@iij zz2YyQO?jc2kYI1RyYyOc@WM?Wasu3gC0)choJR&O;36*JGOpk%uHiav;3jV2Htygq z?%_Tj;2|F2F`nQlp5ZxO;3Zz+HQwMY-XRn3@j=l=m?w{vV{6}XlatM6jcq1ZO0HsO z5vtC;lJe4QHfQ{2tKKehqPvq;Ql)=H7CzxKzThjq;XAUCgCB}2{byiw-mHl}zceal zNijaZlo+4iM+$5H{n=7b$nWT&5X)GISc#}a@`+fBA`2!wL^g7ei#+7R3=0ZSh$0l@5v(XdDaufe3RL1T zs!)v@)S?dcXh0*L;3=NrIhtTYGg{D!HoQPPIv}AFFYyXp=*DZjQAOX|bNA)nW{Z-o z^rZOzw(ZH1(t}=AQuSNtLHPm;48ji7IT=#0-X4cMYym889%VBT0K9LPc8tMV delta 688 zcmZ9|xlfaE0LJkGm7{{KPzqWqSGg5l4{E7JZVHG>i=d@kZ^iqn2WnLWiscn15{4g% z3A+me33>Y$RP3ZNEXIK*IyU0W;#b@lKFjkgPoC}AnsysY7V*Ju%bAtJQc_q-4ofK; zl6Ee%7b?+^76*`uG&LGZmq-6sj(ED_h-W~DgUCb{4nYqC4kH^mFd`Qw?~ zz=C5aL=lQnf>KyfhH_M(5>=>14UXdkYEcIXCvgg=aR&9U;VkTEfCJ~?L?h0l3C(Ch zE85VG4s^nWE_9;@7to7~xP;5-gBu?7;|c~ah^x2;FNWa5Fh($nF^sE@xcq11-`xem zCH(r7&z_j#6@FY-y<#F!YYeVtuK!rslI7)(JG;IjS)(a7i?5%uOiCa+fg8AqTeyuo zxQlzZj|X^&M+o3Cp5Q5-VG_^r0x#7-H0Z4o-x8H(@$+}kpxgAs+}{H_&97AP#cngH q#+_jPreXgk#Tj{p*LZ^|yu~zTFpCi8@D5?jL&1A2sLsfuHSrff*F*~d diff --git a/lib/public/tier1.lib b/lib/public/tier1.lib index 24548c283a1fbff62101cc17993e1a55d5ee7bf3..7107147c6188bc0949b1ce661ea8ff8404be1eb6 100644 GIT binary patch delta 507 zcmYk&H%|g_0EY440g8%Z!-A+FiVf>|{HY>Vp&2c3pcPKEp&cD?!HrIM(1mVz z(Su&}p&tYAVGu(Y#t23+1{vc};D^8jCNYI+%wQG)1TlwsEMO5!2w@pvtY8%ptYIA+ z*wmAn`ub@6e>>|cs9x#eCa*^dsvNa_rGB1X0@inj;Wz$q7YnB|p(tY5!ZvoWi#_Z^ cLmUS<#1W2>zzI%qhI3rt5?6XAbZz+E)!=Nj zYcd%P{sxl8*G72C`+bFvN1=c_$s7nqmsD%*Kl0?Rj@fGro)3*Bs>0y#7o3`Y((?%ml>DK+FQftU%1Ref<~q zBay7;mPV!~K=Z_>_xo}1GhYily?vn{$Bza9k2|Ts$GV-S=x&X))6%G`2Li*r>GB8N%9p#(BFVl-beB%s72-rl9oXWo-hSH-kThCa zSUmkBP-ye5wxhWMOdFP8kCgqbSSZ#i_;{XORP*{T?d!iV0x=U1GXpUT5VHa?+xGQe z*pEbljho)*$05KBG;jMtKaL*_0+sW4Hr<(VH8FAW$`8Mz6%yN5p638!P9Ww2Vs0Sj z0b*Vt<^y7WAQk{(K_C_aV&Uy8&x?GU3o&|Et|-Llv$>*|Dlm;+|4g)f{WCEj76)Pp zAeIDTDIk{KzW$lazg&nhCqiT)#@r5(b&9|=Mt7}jyY5;!AeIMW1t3-gVx{f6Yn7Ap E0CByfivR!s diff --git a/lib/public/vgui_controls.lib b/lib/public/vgui_controls.lib index 67e26fec5152d23ced9b9a80dfe12819714e2a8c..83e7df835c25412c5e45ecea372c041e097f38af 100644 GIT binary patch delta 5830 zcmZwLcT^PD0>|;agNR_Es8k!)C?XveJ8G~Z79w_0gNU)BVnJfvtO{l!ma&5^MidoL zR}4CWiZOsev0yYBqOk^ui9IpC-;d=H-eWoE`#E#=kD0l5?##}T|L%!hK1yh6s#g2@ z`pXFg&bG_d8nw`&@})7hT1|=v@VmqWZm7GypsdH$P{T12i=FM{Q-M9LOg2a7=?emTzA7`aldZFH^ z5BeAdqQ0mf>W>DXfoKp4LW5B-8iIzRVQ4rCL7$)zC=`uEqtIwH28~7I(0DXKU+NRK zDyQ1S#J>r%GQq^?liq~cjJ5jzS=MHUOhl8=Wb~;%J0#q3TD3vHIumXfw7C+#`>K&a z4>6HO)g3av*Q&_=Wg$!Ig$g0`YVt6>!Hg=E_CVUL)y~K zspv2|f{yA-H>Y);_wNKbdU$#Hd;0iQ-l%R|>_ZQFH&o3qmxo07IclTpr|YBZXG{z* zGIw39UF)fm z4HKt7zp^ON*b^hZnPJkFMqSe`jk=C*pqr=|-9kU2+vpDZ3Ef5a(9fs@{eteJ2k2My z5IsVV(G&C(Jww0gmqwM&3#>X(d)YFx)Ux8Pa?UJ0HOBlg6BI1(qJd}z}|6yG*XV#$?u;C22)k6U@TIeQilQ@)2oIIuIAqk+_mh z#ErNU58_F@h&S;ezQm8Hi9hKql!^Pgh~yO8JGuAPIAyQf<1@!wa6_JTLo8DXZH zFIz{nb5a85_ZQC5MkaMaEjb`B*;beMtiJ#Q$UriP1d+icSSX3lhKO3eRmZfq_w)1h z_x$f6Z&kdltT|I#6;-jIl?Tp4MPyWs6|Eb$VWcpckQS-p%*fS=)U ztm}3xOn`}G5}8asCE;WWi6B!+B$-A&Bh$$YGLy_Av&kG1C6sQ*=86*wt0vDbse$V} zQSm*bIAbeiqmfe^-armm7GtY>nKMs-`6QYwAPdPNvY5mOziaW<^lF$!D73d1w@ z!uWcst#y+U+>#|H#k6&-Sn{gol}U8`9GBX0DOpCAlNDqoSw%GD3!){f$r`d2E5tEQ zc-vH*K*f{J-rmzo?arIN1z%{72tM;}cQ;eTCW)StaVCvixFbx6Asw)`9==4wsHX!y$l8##sN zmU3FuHCtW4p*;fZCHu(NWIy?a93Uy=AUQ-*$zh=c96BOqx2=BQ{HsSQ4}1?>Ew|OY z;MOyb3Z3=LG?Gp-$T4!9oFIB~l4O!o*NNxNs7rW@*}xT?vS6zU2>27OiIWvgkL)D(xz*2o$!L4YaEIuyb@)Zi^9>4ikaR)8j>L&HAx%j$(wwv)&ZH%2 zMOsTrP;eXR?)B=&3vAO?GQ58YyV@!n!`Ibfd^jiE$SM*xasb|!b&ccNN}wJ2h_oji zh>N5&j_WAddi>8(vN~2CrD%nP%HQxkyci$WPc?Fs*ye_pg0x6iNtYJciMSDW;z2x# z7x5-O#FzLHHSs5%Nf*+UbR*qK57LtakY1!W=|eu2l(fh|Y1#YggBTRixAM|Vz*hH~ zzbSR8m-|YfAL&m9kbz_n2_l0@Fd0IIl3`>x2_c_IO6uhiQkLQCL*^HI(yEdXl9dI2 zTt(Eat178e@v5kt#HS^NM&_`@-Y|#f(nBTPx%81_6d6s%kg;SO8BZpVFfvh6&ZSS1 zEY?*Y{o@{!D@Xqqwg#*>a?ES^_Q1a~bhC;kOW;!yPNt9uGL=MBzL)~yoi^ahwUf7I! zs`D1|?6M#y`hwLT$$k${)`Gy=IDdZqIL{iCNa)cZuX(XLwkYnUH zIYIQ&5nbL%$?)%?%Bz?%JhO7WoyJz@C?ktHy_uZd5sTV6H&X(q$hRbmoF-?8Le7$G zl0(js^W*}_B^SwemKr E4+|o`p8x;= delta 5652 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 LKlX6b*Ix4