From 9247c044fe4b4f6c176f2b61112034af51131b6c Mon Sep 17 00:00:00 2001
From: cKey <35512826+colinin@users.noreply.github.com>
Date: Wed, 20 Oct 2021 09:18:17 +0800
Subject: [PATCH] feat: reduce dependencies and remove useless query criteria
---
aspnet-core/LINGYUN.MicroService.All.sln | 2077 ++++++++---------
.../Abp/IM/SignalR/AbpIMSignalROptions.cs | 38 +-
.../Abp/IM/SignalR/Hubs/MessagesHub.cs | 263 ++-
.../LINGYUN/Abp/IM/Contract/IFriendStore.cs | 318 ++-
.../LINGYUN/Abp/IM/Group/IUserGroupStore.cs | 214 +-
.../LINGYUN/Abp/IM/IUserCardFinder.cs | 118 +-
.../Abp/IM/Messages/IMessageBlocker.cs | 3 +
.../Abp/IM/Messages/IMessageProcessor.cs | 23 +
.../LINGYUN/Abp/IM/Messages/IMessageStore.cs | 211 +-
.../{MessageSendState.cs => MessageState.cs} | 54 +-
.../Abp/IM/Messages/NullMessageProcessor.cs | 19 +
.../Abp/IM/Settings/AbpIMSettingNames.cs | 11 +
.../SignalR/AbpNotificationsSignalROptions.cs | 30 +-
.../SignalR/Hubs/NotificationsHub.cs | 159 +-
.../Abp/Notifications/INotificationStore.cs | 251 +-
.../Notifications/NullNotificationStore.cs | 375 ++-
.../LINGYUN.Abp.RealTime.csproj | 1 +
.../Chat/Dto/GetMyFriendsDto.cs | 19 +-
.../Chat/Dto/GetUserLastMessageDto.cs | 21 +-
.../Chat/Dto/GroupMessageGetByPagedDto.cs | 29 +-
.../Chat/Dto/GroupUserGetByPagedDto.cs | 28 +-
.../Chat/Dto/MyFriendGetByPagedDto.cs | 28 +-
.../Chat/Dto/UserMessageGetByPagedDto.cs | 31 +-
.../Dto/UserNotificationGetByPagedDto.cs | 26 +-
.../Abp/MessageService/Chat/ChatAppService.cs | 272 +--
.../MessageService/Chat/MyFriendAppService.cs | 134 +-
.../Notifications/MyNotificationAppService.cs | 242 +-
.../Localization/MessageServiceResource.cs | 18 +-
.../MessageServiceErrorCodes.cs | 202 +-
...MessageServiceSettingDefinitionProvider.cs | 30 +
.../MessageServiceSettingNames.cs | 41 +-
.../Abp/MessageService/Chat/FriendStore.cs | 557 +++--
.../MessageService/Chat/IMessageRepository.cs | 204 +-
.../Chat/IUserChatCardRepository.cs | 75 +-
.../Chat/IUserChatFriendRepository.cs | 114 +-
.../Abp/MessageService/Chat/Message.cs | 103 +-
.../MessageService/Chat/MessageProcessor.cs | 82 +
.../Abp/MessageService/Chat/MessageStore.cs | 511 ++--
.../Abp/MessageService/Chat/UserCardFinder.cs | 115 +-
.../Group/IUserChatGroupRepository.cs | 158 +-
.../MessageService/Group/UserGroupStore.cs | 293 ++-
.../IUserNotificationRepository.cs | 95 +-
.../Notifications/NotificationStore.cs | 877 ++++---
.../Chat/EfCoreMessageRepository.cs | 511 ++--
.../Chat/EfCoreUserChatCardRepository.cs | 137 +-
.../Chat/EfCoreUserChatFriendRepository.cs | 441 ++--
.../Group/EfCoreUserChatGroupRepository.cs | 338 ++-
.../EfCoreUserNotificationRepository.cs | 262 +--
.../LINGYUN.Abp.WeChat.csproj | 4 +-
.../LINGYUN/Abp/WeChat/AbpWeChatModule.cs | 4 +-
.../account/AuthServer.Host/Startup.cs | 53 +-
.../BackendAdminHostModule.cs | 18 -
.../Dockerfile | 27 +-
...NGYUN.Abp.BackendAdmin.HttpApi.Host.csproj | 14 +-
...GYUN.Abp.Account.Application.Contracts.dll | Bin 0 -> 12800 bytes
.../LINGYUN.Abp.Aliyun.SettingManagement.dll | Bin 0 -> 21504 bytes
.../Modules/LINGYUN.Abp.Aliyun.dll | Bin 0 -> 25600 bytes
.../Modules/LINGYUN.Abp.IM.dll | Bin 0 -> 25088 bytes
...YUN.Abp.Identity.Application.Contracts.dll | Bin 0 -> 24064 bytes
.../LINGYUN.Abp.Identity.Domain.Shared.dll | Bin 0 -> 20992 bytes
...p.IdentityServer.Application.Contracts.dll | Bin 0 -> 69632 bytes
...zationManagement.Application.Contracts.dll | Bin 0 -> 18432 bytes
...p.LocalizationManagement.Domain.Shared.dll | Bin 0 -> 13824 bytes
...p.MessageService.Application.Contracts.dll | Bin 0 -> 19968 bytes
...NGYUN.Abp.MessageService.Domain.Shared.dll | Bin 0 -> 12288 bytes
.../Modules/LINGYUN.Abp.Notifications.dll | Bin 0 -> 49664 bytes
...bp.OssManagement.Application.Contracts.dll | Bin 0 -> 19456 bytes
...INGYUN.Abp.OssManagement.Domain.Shared.dll | Bin 0 -> 16896 bytes
.../Modules/LINGYUN.Abp.RealTime.dll | Bin 0 -> 18944 bytes
.../Modules/LINGYUN.Abp.Sms.Aliyun.dll | Bin 0 -> 37888 bytes
.../LINGYUN.Abp.WeChat.MiniProgram.dll | Bin 0 -> 26624 bytes
.../Modules/LINGYUN.Abp.WeChat.Official.dll | Bin 0 -> 16384 bytes
.../LINGYUN.Abp.WeChat.SettingManagement.dll | Bin 0 -> 19968 bytes
.../Modules/LINGYUN.Abp.WeChat.dll | Bin 0 -> 32768 bytes
...NGYUN.ApiGateway.Application.Contracts.dll | Bin 0 -> 41472 bytes
.../LINGYUN.ApiGateway.Domain.Shared.dll | Bin 0 -> 13824 bytes
...LINGYUN.Platform.Application.Contracts.dll | Bin 0 -> 40448 bytes
.../LINGYUN.Platform.Domain.Shared.dll | Bin 0 -> 23040 bytes
...Volo.Abp.Account.Application.Contracts.dll | Bin 0 -> 101888 bytes
...olo.Abp.Identity.Application.Contracts.dll | Bin 0 -> 19968 bytes
.../Volo.Abp.Identity.Domain.Shared.dll | Bin 0 -> 213504 bytes
.../Volo.Abp.IdentityServer.Domain.Shared.dll | Bin 0 -> 50176 bytes
.../Modules/Volo.Abp.Users.Abstractions.dll | Bin 0 -> 8192 bytes
.../Modules/Volo.Abp.Users.Domain.Shared.dll | Bin 0 -> 5120 bytes
.../Properties/launchSettings.json | 40 +-
.../Startup.cs | 49 +-
.../LINGYUN.ApiGateway.Host/Startup.cs | 49 +-
.../Startup.cs | 49 +-
.../Startup.cs | 47 +-
.../Startup.cs | 63 +-
.../Startup.cs | 49 +-
.../LINGYUN.Platform.HttpApi.Host/Startup.cs | 49 +-
build/build-aspnetcore-ef-update.ps1 | 16 +-
build/build-aspnetcore-modules.ps1 | 31 +
build/modules.dependencies.json | 51 +
docker-compose.override.yml | 35 +-
96 files changed, 5574 insertions(+), 5233 deletions(-)
create mode 100644 aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageProcessor.cs
rename aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/{MessageSendState.cs => MessageState.cs} (75%)
create mode 100644 aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/NullMessageProcessor.cs
create mode 100644 aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Settings/AbpIMSettingNames.cs
create mode 100644 aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs
rename aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/{ => Settings}/MessageServiceSettingNames.cs (53%)
create mode 100644 aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageProcessor.cs
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Account.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Aliyun.SettingManagement.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Aliyun.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.IM.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Identity.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Identity.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.IdentityServer.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.LocalizationManagement.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.LocalizationManagement.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.MessageService.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.MessageService.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Notifications.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.OssManagement.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.OssManagement.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.RealTime.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.Sms.Aliyun.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.WeChat.MiniProgram.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.WeChat.Official.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.WeChat.SettingManagement.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Abp.WeChat.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.ApiGateway.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.ApiGateway.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Platform.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/LINGYUN.Platform.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.Account.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.Identity.Application.Contracts.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.Identity.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.IdentityServer.Domain.Shared.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.Users.Abstractions.dll
create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Modules/Volo.Abp.Users.Domain.Shared.dll
create mode 100644 build/build-aspnetcore-modules.ps1
create mode 100644 build/modules.dependencies.json
diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln
index 01b61ee50..6703f7ee7 100644
--- a/aspnet-core/LINGYUN.MicroService.All.sln
+++ b/aspnet-core/LINGYUN.MicroService.All.sln
@@ -1,1042 +1,1035 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30011.22
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{C5CAD011-DF84-4914-939C-0C029DCEF26F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{672E1170-7B18-474B-85C7-1961BF2A48AE}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{77BDEF2B-1A30-4E64-BC35-0DFC21091327}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{573B7B0E-3065-42DE-A391-EE026CE7A366}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apigateway", "apigateway", "{68ADC230-B563-4948-BBF1-2112DFE93BC1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain.Shared", "modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\LINGYUN.ApiGateway.Domain.Shared.csproj", "{40E217A9-46EA-48DE-BE0B-6CC824240E97}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain", "modules\apigateway\LINGYUN.ApiGateway.Domain\LINGYUN.ApiGateway.Domain.csproj", "{1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application.Contracts", "modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\LINGYUN.ApiGateway.Application.Contracts.csproj", "{269FF49F-97A3-4502-B424-D8CD55FC5727}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application", "modules\apigateway\LINGYUN.ApiGateway.Application\LINGYUN.ApiGateway.Application.csproj", "{87049236-4808-4C33-88BA-D3CA6BB1F786}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.EntityFrameworkCore", "modules\apigateway\LINGYUN.ApiGateway.EntityFrameworkCore\LINGYUN.ApiGateway.EntityFrameworkCore.csproj", "{3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Client", "modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\LINGYUN.ApiGateway.HttpApi.Client.csproj", "{089BE2D2-D579-47DA-B135-449C1153F27E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi", "modules\apigateway\LINGYUN.ApiGateway.HttpApi\LINGYUN.ApiGateway.HttpApi.csproj", "{D137106D-DCD5-455B-A297-44831DF38EE8}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apigateway", "apigateway", "{19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{E2408063-FB1F-4513-B4A7-1FE50667C6E8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Host", "services\apigateway\LINGYUN.ApiGateway.Host\LINGYUN.ApiGateway.Host.csproj", "{7DF65FB1-AFA3-4D50-83D6-A37318296E6D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Host", "services\apigateway\LINGYUN.ApiGateway.HttpApi.Host\LINGYUN.ApiGateway.HttpApi.Host.csproj", "{9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthServer.Host", "services\account\AuthServer.Host\AuthServer.Host.csproj", "{C1F56ED5-E898-45F1-97B5-61F4AB30FB58}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{0439B173-F41E-4CE0-A44A-CCB70328F272}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{A584D040-95AC-4422-93FF-7B80532213F0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{76249548-4344-4CD0-A0AC-12AC54184B58}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{A5543E56-DA53-494D-A531-DA75091D46FF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application.Contracts", "modules\tenants\LINGYUN.Abp.TenantManagement.Application.Contracts\LINGYUN.Abp.TenantManagement.Application.Contracts.csproj", "{FF4A3402-8DE2-4494-8F2B-614356DA72EA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application", "modules\tenants\LINGYUN.Abp.TenantManagement.Application\LINGYUN.Abp.TenantManagement.Application.csproj", "{EAE87281-4C33-4E8B-A489-480C55BA9E89}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi\LINGYUN.Abp.TenantManagement.HttpApi.csproj", "{51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{E5D1B78A-1A8F-4D52-BF99-A4A863ADE898}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackendAdmin.HttpApi.Host", "services\admin\LINGYUN.Abp.BackendAdmin.HttpApi.Host\LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj", "{85090598-6B03-43D3-BE61-1E9777252D50}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{8AC72641-30D3-4ACF-89FA-808FADC55C2E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "modules\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{AEC1E6D3-DC23-41BD-B456-3AAD26E34978}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9E72FEB9-A626-4312-892B-CDD043879758}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{8B09385A-719C-4B83-B61E-0ECD5D2734BD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{8E569C1C-2637-4D89-804C-50FBC83948FB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "modules\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{FF1839EA-FB6B-4ED5-9804-E40427046D35}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "modules\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "modules\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{6E4A0D87-C3CE-430F-A475-A6B68C116D96}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{A5851F0F-CB0D-4E29-A829-D1BDEADB807B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{FDEECE0D-6F66-4053-948E-9AC021B97C8D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\common\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{B9FA1A02-A2BF-480D-914E-0780DAE442FC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\common\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{59619184-02E7-4C61-8F96-89320CD7A3AE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\common\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{865A2AE3-864B-4425-8FA6-AFD62F6466DB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock", "modules\common\LINGYUN.Abp.DistributedLock\LINGYUN.Abp.DistributedLock.csproj", "{35A23613-85BA-4E1B-835C-DB33AB4A2751}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock.Redis", "modules\common\LINGYUN.Abp.DistributedLock.Redis\LINGYUN.Abp.DistributedLock.Redis.csproj", "{F6776BF7-5F73-4224-8915-C017F4EEDD28}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\common\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "modules\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{371B293B-0CA9-4385-8EBB-5224332066D2}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Host", "services\messages\LINGYUN.Abp.MessageService.HttpApi.Host\LINGYUN.Abp.MessageService.HttpApi.Host.csproj", "{0D1DB712-B48D-4FB7-9A47-694C668A62E3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "modules\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "modules\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{F595CB9F-B117-4D62-A1AE-48599927DB36}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "modules\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{5CF403B2-47C9-4E4E-8856-0294BDD64884}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "modules\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{059473BA-FAF9-405F-9985-33DDCA2E9F0D}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun.Tests", "tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests.csproj", "{C8A00439-5B8D-4923-8FAA-AB75E2A786ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{31B03DCB-ED12-4412-867A-61E347D40D8C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{AB984240-EF03-416F-A9B2-F5CF169E04B7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Client", "modules\message\LINGYUN.Abp.MessageService.HttpApi.Client\LINGYUN.Abp.MessageService.HttpApi.Client.csproj", "{EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "modules\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{65DDA934-B76B-4018-A565-CF6CEF0D6BB0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\common\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{0F14C850-7F4C-4791-9C6C-7E56F985C71D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "modules\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{376D8343-DF83-41D2-BF6E-2F5DC8DBF259}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing.Tests", "tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests.csproj", "{6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi.Client", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj", "{87C7DDCF-F80D-4A15-9044-71552DCB5550}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.RemoteService", "modules\tenants\LINGYUN.Abp.MultiTenancy.RemoteService\LINGYUN.Abp.MultiTenancy.RemoteService.csproj", "{7208C9AB-AB76-43E7-95FA-A0E463E82A3C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.DbFinder", "modules\tenants\LINGYUN.Abp.MultiTenancy.DbFinder\LINGYUN.Abp.MultiTenancy.DbFinder.csproj", "{9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy", "modules\tenants\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj", "{A2B4ECAE-DABE-40F7-9335-496A79EDE671}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "modules\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{1DA91161-8757-4A68-A0A1-8C94C36C9240}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F4923692-D343-4318-AECA-96F580B1A563}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{F135B9E8-3FFE-44E9-835B-7B6A928F4823}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{75A6D078-C19D-4030-88CC-C2A8608FF604}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{2D895594-3FF5-4507-853A-CB65F2DB72ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{0655A0FB-59E8-4A9F-BAF5-47A89377F747}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{F4615BCE-D5C1-407A-8681-8EEE92DEF9D0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{F3D9B137-32DE-4018-8058-78AB17FCDF9C}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{52B5D4F7-237B-4E0A-A167-68442164F70A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{F19C8B0F-A332-4190-9ABE-95790E0AE864}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{72DCA4CF-8B95-47C9-B02A-2671953B7987}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}"
- ProjectSection(SolutionItems) = preProject
- modules\oss-management\README.md = modules\oss-management\README.md
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Host", "services\platform\LINGYUN.Platform.HttpApi.Host\LINGYUN.Platform.HttpApi.Host.csproj", "{372123C3-3AFD-42C8-BB80-778322EA72C3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{F359AAA1-C854-444A-88F2-1C0D8A07F864}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{5D0ED1FC-3A7C-4531-9512-832E73AD9555}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{2BF7FB73-0C62-4ECF-99F0-0583855D2777}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{6FE7E243-2D99-4567-8786-6C9283D608EF}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{685188AC-A145-4A27-BF5F-9C970A59AA9C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer4.HttpApi.Host", "services\identity-server\LINGYUN.Abp.IdentityServer4.HttpApi.Host\LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj", "{F85552D4-D22E-483A-B1F8-3DFB840F6F7C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "modules\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "modules\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{7071E78B-755B-410A-830B-AA05D7168944}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "modules\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{87B65CBD-0FF4-4FB5-9ABC-161911A71179}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{F40F88F1-CA90-4A79-B772-80E287E25982}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{AC3C8985-73C2-472A-8E76-A0B8786FEC3F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "permission-management", "{CC362C67-6FC1-42B3-A130-8120AA8D790C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{A66D48C9-F141-4111-9169-CEB64AFFF61D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{524276E1-053D-4191-ABF7-4CDA01BFFBC3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "modules\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{43083268-74DE-4C68-824A-FB0CEC77358D}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{BAE74ABC-1096-495F-A624-BEBFBC1896F2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E92A1CAA-5758-41EF-B67E-C0D394E85417}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{F18DE651-A3E4-478F-A2B5-686429729EB8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{42309C06-C0F2-490F-931B-CF41FA1970FF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat\LINGYUN.Abp.IdentityServer.WeChat.csproj", "{7356FC4B-CAB2-4808-8C97-9AF74583F3A4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-aliyun", "cloud-aliyun", "{14CDBAD1-10C8-464A-B445-1F727C988010}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-tencent", "cloud-tencent", "{3B96F4D8-4993-419B-BCEB-AFE4ED39449F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "modules\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{97B4A37E-B93E-48C9-95D5-689CB9495D8B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\common\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{8C3312E7-F51E-4780-A893-CE0E0B80B579}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{35B17218-9FB6-439E-AF73-9A1454BC923C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj", "{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent.Tests", "tests\LINGYUN.Abp.Location.Tencent.Tests\LINGYUN.Abp.Location.Tencent.Tests.csproj", "{94B47385-E47F-4FD7-A3A9-A7AA122EFC93}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu.Tests", "tests\LINGYUN.Abp.Location.Baidu.Tests\LINGYUN.Abp.Location.Baidu.Tests.csproj", "{C892CD81-50AE-49E5-BF44-A0C28A1614CC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Client", "modules\common\LINGYUN.Abp.AspNetCore.Mvc.Client\LINGYUN.Abp.AspNetCore.Mvc.Client.csproj", "{EEF03CC6-1013-4AAF-BEED-BB4BA5021039}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{90E88EAC-4291-4406-8D88-EFDF61B11292}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml", "modules\localization\LINGYUN.Abp.Localization.Xml\LINGYUN.Abp.Localization.Xml.csproj", "{84868710-ECBB-4025-900A-EEB99EC49534}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml.Tests", "tests\LINGYUN.Abp.Localization.Xml.Tests\LINGYUN.Abp.Localization.Xml.Tests.csproj", "{A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Dynamic", "modules\common\LINGYUN.Abp.Localization.Dynamic\LINGYUN.Abp.Localization.Dynamic.csproj", "{4A9043FD-24A3-4A4A-956B-9CB71876F415}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{D3BAA44E-8395-4E8A-AA96-6B463356C537}"
- ProjectSection(SolutionItems) = preProject
- modules\lt\README.md = modules\lt\README.md
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\lt\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{5BE18D72-0D02-4854-966E-745CE5DAF77F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\lt\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{73EAD4FE-B44F-44A7-904E-FFA5096D91BD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application.Contracts", "modules\lt\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj", "{06D34108-01BA-4C77-A704-4DD9E6F7E32C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application", "modules\lt\LINGYUN.Abp.LocalizationManagement.Application\LINGYUN.Abp.LocalizationManagement.Application.csproj", "{A98C939C-9F48-414A-A2D3-853BE4447397}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\lt\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{A94BE05F-7DAB-461C-93E7-914CBDF4FA93}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi", "modules\lt\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj", "{FBE91498-D83B-4873-A67E-0FB9D1C366F0}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi.Host", "services\localization\LINGYUN.Abp.LocalizationManagement.HttpApi.Host\LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj", "{6FFC14FE-F659-4B23-9746-4B767CE520D2}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules", "rules", "{6084D52D-775B-4A39-8CD5-AA2F362B5A61}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules", "modules\rules\LINGYUN.Abp.Rules\LINGYUN.Abp.Rules.csproj", "{D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules", "modules\rules\LINGYUN.Abp.Rules.NRules\LINGYUN.Abp.Rules.NRules.csproj", "{34BB9810-2983-4E55-A96A-132D32310145}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine", "modules\rules\LINGYUN.Abp.Rules.RulesEngine\LINGYUN.Abp.Rules.RulesEngine.csproj", "{4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine.Tests", "tests\LINGYUN.Abp.Rules.RulesEngine.Tests\LINGYUN.Abp.Rules.RulesEngine.Tests.csproj", "{8EF31071-3521-409D-9740-BBFBFC04C50E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "modules\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{13219C1C-23E1-4EBA-93FB-86830C93A800}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ApiGateway.Host", "services\apigateway\LINGYUN.Abp.ApiGateway.Host\LINGYUN.Abp.ApiGateway.Host.csproj", "{A320E23E-792D-4736-B963-381F9D7AF605}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundWorkers.Hangfire", "modules\common\LINGYUN.Abp.BackgroundWorkers.Hangfire\LINGYUN.Abp.BackgroundWorkers.Hangfire.csproj", "{60D0BEF2-FEAF-4066-8377-6C873CB24858}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Dashboard", "modules\common\LINGYUN.Abp.Hangfire.Dashboard\LINGYUN.Abp.Hangfire.Dashboard.csproj", "{340BE5AC-68EC-41A5-9D0D-266037C58F13}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.Build.0 = Release|Any CPU
- {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.Build.0 = Release|Any CPU
- {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.Build.0 = Release|Any CPU
- {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Release|Any CPU.Build.0 = Release|Any CPU
- {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Release|Any CPU.Build.0 = Release|Any CPU
- {269FF49F-97A3-4502-B424-D8CD55FC5727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {269FF49F-97A3-4502-B424-D8CD55FC5727}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {269FF49F-97A3-4502-B424-D8CD55FC5727}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {269FF49F-97A3-4502-B424-D8CD55FC5727}.Release|Any CPU.Build.0 = Release|Any CPU
- {87049236-4808-4C33-88BA-D3CA6BB1F786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {87049236-4808-4C33-88BA-D3CA6BB1F786}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {87049236-4808-4C33-88BA-D3CA6BB1F786}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {87049236-4808-4C33-88BA-D3CA6BB1F786}.Release|Any CPU.Build.0 = Release|Any CPU
- {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Release|Any CPU.Build.0 = Release|Any CPU
- {089BE2D2-D579-47DA-B135-449C1153F27E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {089BE2D2-D579-47DA-B135-449C1153F27E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {089BE2D2-D579-47DA-B135-449C1153F27E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {089BE2D2-D579-47DA-B135-449C1153F27E}.Release|Any CPU.Build.0 = Release|Any CPU
- {D137106D-DCD5-455B-A297-44831DF38EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D137106D-DCD5-455B-A297-44831DF38EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D137106D-DCD5-455B-A297-44831DF38EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D137106D-DCD5-455B-A297-44831DF38EE8}.Release|Any CPU.Build.0 = Release|Any CPU
- {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Release|Any CPU.Build.0 = Release|Any CPU
- {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Release|Any CPU.Build.0 = Release|Any CPU
- {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Release|Any CPU.Build.0 = Release|Any CPU
- {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.Build.0 = Release|Any CPU
- {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.Build.0 = Release|Any CPU
- {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.Build.0 = Release|Any CPU
- {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Release|Any CPU.Build.0 = Release|Any CPU
- {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Release|Any CPU.Build.0 = Release|Any CPU
- {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Release|Any CPU.Build.0 = Release|Any CPU
- {85090598-6B03-43D3-BE61-1E9777252D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {85090598-6B03-43D3-BE61-1E9777252D50}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {85090598-6B03-43D3-BE61-1E9777252D50}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {85090598-6B03-43D3-BE61-1E9777252D50}.Release|Any CPU.Build.0 = Release|Any CPU
- {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.Build.0 = Release|Any CPU
- {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.Build.0 = Release|Any CPU
- {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.Build.0 = Release|Any CPU
- {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.Build.0 = Release|Any CPU
- {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.Build.0 = Release|Any CPU
- {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.Build.0 = Release|Any CPU
- {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.Build.0 = Release|Any CPU
- {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.Build.0 = Release|Any CPU
- {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.Build.0 = Release|Any CPU
- {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.Build.0 = Release|Any CPU
- {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Release|Any CPU.Build.0 = Release|Any CPU
- {59619184-02E7-4C61-8F96-89320CD7A3AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {59619184-02E7-4C61-8F96-89320CD7A3AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {59619184-02E7-4C61-8F96-89320CD7A3AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {59619184-02E7-4C61-8F96-89320CD7A3AE}.Release|Any CPU.Build.0 = Release|Any CPU
- {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Release|Any CPU.Build.0 = Release|Any CPU
- {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Release|Any CPU.Build.0 = Release|Any CPU
- {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Release|Any CPU.Build.0 = Release|Any CPU
- {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Release|Any CPU.Build.0 = Release|Any CPU
- {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.Build.0 = Release|Any CPU
- {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Release|Any CPU.Build.0 = Release|Any CPU
- {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.Build.0 = Release|Any CPU
- {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.Build.0 = Release|Any CPU
- {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.Build.0 = Release|Any CPU
- {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.Build.0 = Release|Any CPU
- {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.Build.0 = Release|Any CPU
- {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.Build.0 = Release|Any CPU
- {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.Build.0 = Release|Any CPU
- {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.Build.0 = Release|Any CPU
- {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.Build.0 = Release|Any CPU
- {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Release|Any CPU.Build.0 = Release|Any CPU
- {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.Build.0 = Release|Any CPU
- {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.Build.0 = Release|Any CPU
- {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Release|Any CPU.Build.0 = Release|Any CPU
- {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Release|Any CPU.Build.0 = Release|Any CPU
- {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Release|Any CPU.Build.0 = Release|Any CPU
- {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Release|Any CPU.Build.0 = Release|Any CPU
- {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.Build.0 = Release|Any CPU
- {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.Build.0 = Release|Any CPU
- {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.Build.0 = Release|Any CPU
- {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.Build.0 = Release|Any CPU
- {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.Build.0 = Release|Any CPU
- {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.Build.0 = Release|Any CPU
- {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.Build.0 = Release|Any CPU
- {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.Build.0 = Release|Any CPU
- {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.Build.0 = Release|Any CPU
- {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.Build.0 = Release|Any CPU
- {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.Build.0 = Release|Any CPU
- {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.Build.0 = Release|Any CPU
- {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.Build.0 = Release|Any CPU
- {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.Build.0 = Release|Any CPU
- {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.Build.0 = Release|Any CPU
- {372123C3-3AFD-42C8-BB80-778322EA72C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {372123C3-3AFD-42C8-BB80-778322EA72C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {372123C3-3AFD-42C8-BB80-778322EA72C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {372123C3-3AFD-42C8-BB80-778322EA72C3}.Release|Any CPU.Build.0 = Release|Any CPU
- {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.Build.0 = Release|Any CPU
- {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.Build.0 = Release|Any CPU
- {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.Build.0 = Release|Any CPU
- {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.Build.0 = Release|Any CPU
- {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Release|Any CPU.Build.0 = Release|Any CPU
- {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Release|Any CPU.Build.0 = Release|Any CPU
- {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.Build.0 = Release|Any CPU
- {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.Build.0 = Release|Any CPU
- {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.Build.0 = Release|Any CPU
- {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.Build.0 = Release|Any CPU
- {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.Build.0 = Release|Any CPU
- {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.Build.0 = Release|Any CPU
- {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.Build.0 = Release|Any CPU
- {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.Build.0 = Release|Any CPU
- {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Release|Any CPU.Build.0 = Release|Any CPU
- {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.Build.0 = Release|Any CPU
- {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.Build.0 = Release|Any CPU
- {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.Build.0 = Release|Any CPU
- {43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.Build.0 = Release|Any CPU
- {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.Build.0 = Release|Any CPU
- {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.Build.0 = Release|Any CPU
- {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.Build.0 = Release|Any CPU
- {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.Build.0 = Release|Any CPU
- {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.Build.0 = Release|Any CPU
- {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.Build.0 = Release|Any CPU
- {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.Build.0 = Release|Any CPU
- {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.Build.0 = Release|Any CPU
- {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.Build.0 = Release|Any CPU
- {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Release|Any CPU.Build.0 = Release|Any CPU
- {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.Build.0 = Release|Any CPU
- {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU
- {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.Build.0 = Release|Any CPU
- {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU
- {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.Build.0 = Release|Any CPU
- {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.Build.0 = Release|Any CPU
- {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.Build.0 = Release|Any CPU
- {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.Build.0 = Release|Any CPU
- {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.Build.0 = Release|Any CPU
- {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.Build.0 = Release|Any CPU
- {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.Build.0 = Release|Any CPU
- {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Release|Any CPU.Build.0 = Release|Any CPU
- {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.Build.0 = Release|Any CPU
- {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.Build.0 = Release|Any CPU
- {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.Build.0 = Release|Any CPU
- {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.Build.0 = Release|Any CPU
- {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.Build.0 = Release|Any CPU
- {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.Build.0 = Release|Any CPU
- {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.Build.0 = Release|Any CPU
- {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.Build.0 = Release|Any CPU
- {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.Build.0 = Release|Any CPU
- {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.Build.0 = Release|Any CPU
- {A320E23E-792D-4736-B963-381F9D7AF605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A320E23E-792D-4736-B963-381F9D7AF605}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A320E23E-792D-4736-B963-381F9D7AF605}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A320E23E-792D-4736-B963-381F9D7AF605}.Release|Any CPU.Build.0 = Release|Any CPU
- {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.Build.0 = Release|Any CPU
- {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {77BDEF2B-1A30-4E64-BC35-0DFC21091327} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
- {573B7B0E-3065-42DE-A391-EE026CE7A366} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
- {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
- {68ADC230-B563-4948-BBF1-2112DFE93BC1} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {40E217A9-46EA-48DE-BE0B-6CC824240E97} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {269FF49F-97A3-4502-B424-D8CD55FC5727} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {87049236-4808-4C33-88BA-D3CA6BB1F786} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {089BE2D2-D579-47DA-B135-449C1153F27E} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {D137106D-DCD5-455B-A297-44831DF38EE8} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
- {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {E2408063-FB1F-4513-B4A7-1FE50667C6E8} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {7DF65FB1-AFA3-4D50-83D6-A37318296E6D} = {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}
- {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9} = {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}
- {C1F56ED5-E898-45F1-97B5-61F4AB30FB58} = {685188AC-A145-4A27-BF5F-9C970A59AA9C}
- {0439B173-F41E-4CE0-A44A-CCB70328F272} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {A584D040-95AC-4422-93FF-7B80532213F0} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {76249548-4344-4CD0-A0AC-12AC54184B58} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {A5543E56-DA53-494D-A531-DA75091D46FF} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {FF4A3402-8DE2-4494-8F2B-614356DA72EA} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {EAE87281-4C33-4E8B-A489-480C55BA9E89} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {85090598-6B03-43D3-BE61-1E9777252D50} = {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0}
- {8AC72641-30D3-4ACF-89FA-808FADC55C2E} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {AEC1E6D3-DC23-41BD-B456-3AAD26E34978} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {9E72FEB9-A626-4312-892B-CDD043879758} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {8B09385A-719C-4B83-B61E-0ECD5D2734BD} = {9E72FEB9-A626-4312-892B-CDD043879758}
- {8E569C1C-2637-4D89-804C-50FBC83948FB} = {9E72FEB9-A626-4312-892B-CDD043879758}
- {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D} = {9E72FEB9-A626-4312-892B-CDD043879758}
- {FF1839EA-FB6B-4ED5-9804-E40427046D35} = {14CDBAD1-10C8-464A-B445-1F727C988010}
- {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {6E4A0D87-C3CE-430F-A475-A6B68C116D96} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {A5851F0F-CB0D-4E29-A829-D1BDEADB807B} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {FDEECE0D-6F66-4053-948E-9AC021B97C8D} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {B9FA1A02-A2BF-480D-914E-0780DAE442FC} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {59619184-02E7-4C61-8F96-89320CD7A3AE} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {865A2AE3-864B-4425-8FA6-AFD62F6466DB} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {35A23613-85BA-4E1B-835C-DB33AB4A2751} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {F6776BF7-5F73-4224-8915-C017F4EEDD28} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {371B293B-0CA9-4385-8EBB-5224332066D2} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {0D1DB712-B48D-4FB7-9A47-694C668A62E3} = {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}
- {9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {47CC8F7A-681D-42B9-AE04-78453782C1B6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {F595CB9F-B117-4D62-A1AE-48599927DB36} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {5CF403B2-47C9-4E4E-8856-0294BDD64884} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {059473BA-FAF9-405F-9985-33DDCA2E9F0D} = {14CDBAD1-10C8-464A-B445-1F727C988010}
- {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {C8A00439-5B8D-4923-8FAA-AB75E2A786ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {31B03DCB-ED12-4412-867A-61E347D40D8C} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {AB984240-EF03-416F-A9B2-F5CF169E04B7} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {65DDA934-B76B-4018-A565-CF6CEF0D6BB0} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {0F14C850-7F4C-4791-9C6C-7E56F985C71D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {376D8343-DF83-41D2-BF6E-2F5DC8DBF259} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {87C7DDCF-F80D-4A15-9044-71552DCB5550} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {7208C9AB-AB76-43E7-95FA-A0E463E82A3C} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {A2B4ECAE-DABE-40F7-9335-496A79EDE671} = {A5543E56-DA53-494D-A531-DA75091D46FF}
- {1DA91161-8757-4A68-A0A1-8C94C36C9240} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {F4923692-D343-4318-AECA-96F580B1A563} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {F135B9E8-3FFE-44E9-835B-7B6A928F4823} = {F4923692-D343-4318-AECA-96F580B1A563}
- {75A6D078-C19D-4030-88CC-C2A8608FF604} = {F4923692-D343-4318-AECA-96F580B1A563}
- {2D895594-3FF5-4507-853A-CB65F2DB72ED} = {F4923692-D343-4318-AECA-96F580B1A563}
- {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93} = {F4923692-D343-4318-AECA-96F580B1A563}
- {0655A0FB-59E8-4A9F-BAF5-47A89377F747} = {F4923692-D343-4318-AECA-96F580B1A563}
- {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE} = {F4923692-D343-4318-AECA-96F580B1A563}
- {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {F3D9B137-32DE-4018-8058-78AB17FCDF9C} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {52B5D4F7-237B-4E0A-A167-68442164F70A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {F19C8B0F-A332-4190-9ABE-95790E0AE864} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {72DCA4CF-8B95-47C9-B02A-2671953B7987} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {7DDEAEA9-E392-469C-ACB6-908C5BAD669E} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {86A67B8C-EFA0-4103-B60F-312F07C15A7A} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {854E1A42-FEA4-420E-9E83-0A39EE03F1ED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {21FCEF89-9A3F-476E-833A-A9C2131B2AE6} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {372123C3-3AFD-42C8-BB80-778322EA72C3} = {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898}
- {F359AAA1-C854-444A-88F2-1C0D8A07F864} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {5D0ED1FC-3A7C-4531-9512-832E73AD9555} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {2BF7FB73-0C62-4ECF-99F0-0583855D2777} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {6FE7E243-2D99-4567-8786-6C9283D608EF} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {685188AC-A145-4A27-BF5F-9C970A59AA9C} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {F85552D4-D22E-483A-B1F8-3DFB840F6F7C} = {E2408063-FB1F-4513-B4A7-1FE50667C6E8}
- {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {F12F4645-C0FE-4129-8C71-65B4039DC445} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {C457FA70-8732-44B8-A018-C96D14025D4B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {7071E78B-755B-410A-830B-AA05D7168944} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}
- {87B65CBD-0FF4-4FB5-9ABC-161911A71179} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}
- {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {F40F88F1-CA90-4A79-B772-80E287E25982} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
- {AC3C8985-73C2-472A-8E76-A0B8786FEC3F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
- {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
- {CC362C67-6FC1-42B3-A130-8120AA8D790C} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727} = {CC362C67-6FC1-42B3-A130-8120AA8D790C}
- {2D377D3A-70EC-4BB3-9F4C-6C933693DA98} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {A66D48C9-F141-4111-9169-CEB64AFFF61D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {524276E1-053D-4191-ABF7-4CDA01BFFBC3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {43083268-74DE-4C68-824A-FB0CEC77358D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {E92A1CAA-5758-41EF-B67E-C0D394E85417} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {F18DE651-A3E4-478F-A2B5-686429729EB8} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {42309C06-C0F2-490F-931B-CF41FA1970FF} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {7356FC4B-CAB2-4808-8C97-9AF74583F3A4} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
- {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {14CDBAD1-10C8-464A-B445-1F727C988010} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC} = {14CDBAD1-10C8-464A-B445-1F727C988010}
- {97B4A37E-B93E-48C9-95D5-689CB9495D8B} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F}
- {8C3312E7-F51E-4780-A893-CE0E0B80B579} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010}
- {B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
- {48DE251A-3482-4934-BC26-F99D2235AC9F} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {C892CD81-50AE-49E5-BF44-A0C28A1614CC} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {EEF03CC6-1013-4AAF-BEED-BB4BA5021039} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {90E88EAC-4291-4406-8D88-EFDF61B11292} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {84868710-ECBB-4025-900A-EEB99EC49534} = {90E88EAC-4291-4406-8D88-EFDF61B11292}
- {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {4A9043FD-24A3-4A4A-956B-9CB71876F415} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {D3BAA44E-8395-4E8A-AA96-6B463356C537} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {5BE18D72-0D02-4854-966E-745CE5DAF77F} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {73EAD4FE-B44F-44A7-904E-FFA5096D91BD} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {06D34108-01BA-4C77-A704-4DD9E6F7E32C} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {A98C939C-9F48-414A-A2D3-853BE4447397} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {A94BE05F-7DAB-461C-93E7-914CBDF4FA93} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {FBE91498-D83B-4873-A67E-0FB9D1C366F0} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
- {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
- {6FFC14FE-F659-4B23-9746-4B767CE520D2} = {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B}
- {6084D52D-775B-4A39-8CD5-AA2F362B5A61} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
- {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
- {34BB9810-2983-4E55-A96A-132D32310145} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
- {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
- {8EF31071-3521-409D-9740-BBFBFC04C50E} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
- {13219C1C-23E1-4EBA-93FB-86830C93A800} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {A320E23E-792D-4736-B963-381F9D7AF605} = {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}
- {60D0BEF2-FEAF-4066-8377-6C873CB24858} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- {340BE5AC-68EC-41A5-9D0D-266037C58F13} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30011.22
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{C5CAD011-DF84-4914-939C-0C029DCEF26F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{672E1170-7B18-474B-85C7-1961BF2A48AE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{77BDEF2B-1A30-4E64-BC35-0DFC21091327}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{573B7B0E-3065-42DE-A391-EE026CE7A366}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apigateway", "apigateway", "{68ADC230-B563-4948-BBF1-2112DFE93BC1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain.Shared", "modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\LINGYUN.ApiGateway.Domain.Shared.csproj", "{40E217A9-46EA-48DE-BE0B-6CC824240E97}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain", "modules\apigateway\LINGYUN.ApiGateway.Domain\LINGYUN.ApiGateway.Domain.csproj", "{1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application.Contracts", "modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\LINGYUN.ApiGateway.Application.Contracts.csproj", "{269FF49F-97A3-4502-B424-D8CD55FC5727}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application", "modules\apigateway\LINGYUN.ApiGateway.Application\LINGYUN.ApiGateway.Application.csproj", "{87049236-4808-4C33-88BA-D3CA6BB1F786}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.EntityFrameworkCore", "modules\apigateway\LINGYUN.ApiGateway.EntityFrameworkCore\LINGYUN.ApiGateway.EntityFrameworkCore.csproj", "{3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Client", "modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\LINGYUN.ApiGateway.HttpApi.Client.csproj", "{089BE2D2-D579-47DA-B135-449C1153F27E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi", "modules\apigateway\LINGYUN.ApiGateway.HttpApi\LINGYUN.ApiGateway.HttpApi.csproj", "{D137106D-DCD5-455B-A297-44831DF38EE8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apigateway", "apigateway", "{19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{E2408063-FB1F-4513-B4A7-1FE50667C6E8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Host", "services\apigateway\LINGYUN.ApiGateway.Host\LINGYUN.ApiGateway.Host.csproj", "{7DF65FB1-AFA3-4D50-83D6-A37318296E6D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Host", "services\apigateway\LINGYUN.ApiGateway.HttpApi.Host\LINGYUN.ApiGateway.HttpApi.Host.csproj", "{9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthServer.Host", "services\account\AuthServer.Host\AuthServer.Host.csproj", "{C1F56ED5-E898-45F1-97B5-61F4AB30FB58}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{0439B173-F41E-4CE0-A44A-CCB70328F272}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{A584D040-95AC-4422-93FF-7B80532213F0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{76249548-4344-4CD0-A0AC-12AC54184B58}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{A5543E56-DA53-494D-A531-DA75091D46FF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application.Contracts", "modules\tenants\LINGYUN.Abp.TenantManagement.Application.Contracts\LINGYUN.Abp.TenantManagement.Application.Contracts.csproj", "{FF4A3402-8DE2-4494-8F2B-614356DA72EA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application", "modules\tenants\LINGYUN.Abp.TenantManagement.Application\LINGYUN.Abp.TenantManagement.Application.csproj", "{EAE87281-4C33-4E8B-A489-480C55BA9E89}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi\LINGYUN.Abp.TenantManagement.HttpApi.csproj", "{51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{E5D1B78A-1A8F-4D52-BF99-A4A863ADE898}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackendAdmin.HttpApi.Host", "services\admin\LINGYUN.Abp.BackendAdmin.HttpApi.Host\LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj", "{85090598-6B03-43D3-BE61-1E9777252D50}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{8AC72641-30D3-4ACF-89FA-808FADC55C2E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "modules\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{AEC1E6D3-DC23-41BD-B456-3AAD26E34978}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9E72FEB9-A626-4312-892B-CDD043879758}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{8B09385A-719C-4B83-B61E-0ECD5D2734BD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{8E569C1C-2637-4D89-804C-50FBC83948FB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "modules\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{FF1839EA-FB6B-4ED5-9804-E40427046D35}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "modules\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "modules\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{6E4A0D87-C3CE-430F-A475-A6B68C116D96}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{A5851F0F-CB0D-4E29-A829-D1BDEADB807B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{FDEECE0D-6F66-4053-948E-9AC021B97C8D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\common\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{B9FA1A02-A2BF-480D-914E-0780DAE442FC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\common\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{59619184-02E7-4C61-8F96-89320CD7A3AE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\common\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{865A2AE3-864B-4425-8FA6-AFD62F6466DB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock", "modules\common\LINGYUN.Abp.DistributedLock\LINGYUN.Abp.DistributedLock.csproj", "{35A23613-85BA-4E1B-835C-DB33AB4A2751}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock.Redis", "modules\common\LINGYUN.Abp.DistributedLock.Redis\LINGYUN.Abp.DistributedLock.Redis.csproj", "{F6776BF7-5F73-4224-8915-C017F4EEDD28}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\common\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "modules\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{371B293B-0CA9-4385-8EBB-5224332066D2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Host", "services\messages\LINGYUN.Abp.MessageService.HttpApi.Host\LINGYUN.Abp.MessageService.HttpApi.Host.csproj", "{0D1DB712-B48D-4FB7-9A47-694C668A62E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "modules\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "modules\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{F595CB9F-B117-4D62-A1AE-48599927DB36}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "modules\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{5CF403B2-47C9-4E4E-8856-0294BDD64884}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "modules\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{059473BA-FAF9-405F-9985-33DDCA2E9F0D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun.Tests", "tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests.csproj", "{C8A00439-5B8D-4923-8FAA-AB75E2A786ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{31B03DCB-ED12-4412-867A-61E347D40D8C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{AB984240-EF03-416F-A9B2-F5CF169E04B7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Client", "modules\message\LINGYUN.Abp.MessageService.HttpApi.Client\LINGYUN.Abp.MessageService.HttpApi.Client.csproj", "{EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "modules\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{65DDA934-B76B-4018-A565-CF6CEF0D6BB0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\common\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{0F14C850-7F4C-4791-9C6C-7E56F985C71D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "modules\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{376D8343-DF83-41D2-BF6E-2F5DC8DBF259}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing.Tests", "tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests.csproj", "{6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi.Client", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj", "{87C7DDCF-F80D-4A15-9044-71552DCB5550}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.RemoteService", "modules\tenants\LINGYUN.Abp.MultiTenancy.RemoteService\LINGYUN.Abp.MultiTenancy.RemoteService.csproj", "{7208C9AB-AB76-43E7-95FA-A0E463E82A3C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.DbFinder", "modules\tenants\LINGYUN.Abp.MultiTenancy.DbFinder\LINGYUN.Abp.MultiTenancy.DbFinder.csproj", "{9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy", "modules\tenants\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj", "{A2B4ECAE-DABE-40F7-9335-496A79EDE671}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "modules\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{1DA91161-8757-4A68-A0A1-8C94C36C9240}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F4923692-D343-4318-AECA-96F580B1A563}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{F135B9E8-3FFE-44E9-835B-7B6A928F4823}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{75A6D078-C19D-4030-88CC-C2A8608FF604}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{2D895594-3FF5-4507-853A-CB65F2DB72ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{0655A0FB-59E8-4A9F-BAF5-47A89377F747}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{F4615BCE-D5C1-407A-8681-8EEE92DEF9D0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{F3D9B137-32DE-4018-8058-78AB17FCDF9C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{52B5D4F7-237B-4E0A-A167-68442164F70A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{F19C8B0F-A332-4190-9ABE-95790E0AE864}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{72DCA4CF-8B95-47C9-B02A-2671953B7987}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}"
+ ProjectSection(SolutionItems) = preProject
+ modules\oss-management\README.md = modules\oss-management\README.md
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Host", "services\platform\LINGYUN.Platform.HttpApi.Host\LINGYUN.Platform.HttpApi.Host.csproj", "{372123C3-3AFD-42C8-BB80-778322EA72C3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{F359AAA1-C854-444A-88F2-1C0D8A07F864}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{5D0ED1FC-3A7C-4531-9512-832E73AD9555}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{2BF7FB73-0C62-4ECF-99F0-0583855D2777}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{6FE7E243-2D99-4567-8786-6C9283D608EF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{685188AC-A145-4A27-BF5F-9C970A59AA9C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer4.HttpApi.Host", "services\identity-server\LINGYUN.Abp.IdentityServer4.HttpApi.Host\LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj", "{F85552D4-D22E-483A-B1F8-3DFB840F6F7C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "modules\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "modules\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{7071E78B-755B-410A-830B-AA05D7168944}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "modules\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{87B65CBD-0FF4-4FB5-9ABC-161911A71179}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{F40F88F1-CA90-4A79-B772-80E287E25982}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{AC3C8985-73C2-472A-8E76-A0B8786FEC3F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "permission-management", "{CC362C67-6FC1-42B3-A130-8120AA8D790C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{A66D48C9-F141-4111-9169-CEB64AFFF61D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{524276E1-053D-4191-ABF7-4CDA01BFFBC3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "modules\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{43083268-74DE-4C68-824A-FB0CEC77358D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{BAE74ABC-1096-495F-A624-BEBFBC1896F2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E92A1CAA-5758-41EF-B67E-C0D394E85417}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{F18DE651-A3E4-478F-A2B5-686429729EB8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{42309C06-C0F2-490F-931B-CF41FA1970FF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat\LINGYUN.Abp.IdentityServer.WeChat.csproj", "{7356FC4B-CAB2-4808-8C97-9AF74583F3A4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-aliyun", "cloud-aliyun", "{14CDBAD1-10C8-464A-B445-1F727C988010}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-tencent", "cloud-tencent", "{3B96F4D8-4993-419B-BCEB-AFE4ED39449F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "modules\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{97B4A37E-B93E-48C9-95D5-689CB9495D8B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\common\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{8C3312E7-F51E-4780-A893-CE0E0B80B579}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "modules\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{35B17218-9FB6-439E-AF73-9A1454BC923C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp\LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj", "{3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent.Tests", "tests\LINGYUN.Abp.Location.Tencent.Tests\LINGYUN.Abp.Location.Tencent.Tests.csproj", "{94B47385-E47F-4FD7-A3A9-A7AA122EFC93}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu.Tests", "tests\LINGYUN.Abp.Location.Baidu.Tests\LINGYUN.Abp.Location.Baidu.Tests.csproj", "{C892CD81-50AE-49E5-BF44-A0C28A1614CC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Client", "modules\common\LINGYUN.Abp.AspNetCore.Mvc.Client\LINGYUN.Abp.AspNetCore.Mvc.Client.csproj", "{EEF03CC6-1013-4AAF-BEED-BB4BA5021039}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{90E88EAC-4291-4406-8D88-EFDF61B11292}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml", "modules\localization\LINGYUN.Abp.Localization.Xml\LINGYUN.Abp.Localization.Xml.csproj", "{84868710-ECBB-4025-900A-EEB99EC49534}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml.Tests", "tests\LINGYUN.Abp.Localization.Xml.Tests\LINGYUN.Abp.Localization.Xml.Tests.csproj", "{A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Dynamic", "modules\common\LINGYUN.Abp.Localization.Dynamic\LINGYUN.Abp.Localization.Dynamic.csproj", "{4A9043FD-24A3-4A4A-956B-9CB71876F415}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{D3BAA44E-8395-4E8A-AA96-6B463356C537}"
+ ProjectSection(SolutionItems) = preProject
+ modules\lt\README.md = modules\lt\README.md
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\lt\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{5BE18D72-0D02-4854-966E-745CE5DAF77F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\lt\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{73EAD4FE-B44F-44A7-904E-FFA5096D91BD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application.Contracts", "modules\lt\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj", "{06D34108-01BA-4C77-A704-4DD9E6F7E32C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application", "modules\lt\LINGYUN.Abp.LocalizationManagement.Application\LINGYUN.Abp.LocalizationManagement.Application.csproj", "{A98C939C-9F48-414A-A2D3-853BE4447397}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\lt\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{A94BE05F-7DAB-461C-93E7-914CBDF4FA93}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi", "modules\lt\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj", "{FBE91498-D83B-4873-A67E-0FB9D1C366F0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi.Host", "services\localization\LINGYUN.Abp.LocalizationManagement.HttpApi.Host\LINGYUN.Abp.LocalizationManagement.HttpApi.Host.csproj", "{6FFC14FE-F659-4B23-9746-4B767CE520D2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules", "rules", "{6084D52D-775B-4A39-8CD5-AA2F362B5A61}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules", "modules\rules\LINGYUN.Abp.Rules\LINGYUN.Abp.Rules.csproj", "{D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules", "modules\rules\LINGYUN.Abp.Rules.NRules\LINGYUN.Abp.Rules.NRules.csproj", "{34BB9810-2983-4E55-A96A-132D32310145}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine", "modules\rules\LINGYUN.Abp.Rules.RulesEngine\LINGYUN.Abp.Rules.RulesEngine.csproj", "{4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine.Tests", "tests\LINGYUN.Abp.Rules.RulesEngine.Tests\LINGYUN.Abp.Rules.RulesEngine.Tests.csproj", "{8EF31071-3521-409D-9740-BBFBFC04C50E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "modules\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{13219C1C-23E1-4EBA-93FB-86830C93A800}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundWorkers.Hangfire", "modules\common\LINGYUN.Abp.BackgroundWorkers.Hangfire\LINGYUN.Abp.BackgroundWorkers.Hangfire.csproj", "{60D0BEF2-FEAF-4066-8377-6C873CB24858}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Dashboard", "modules\common\LINGYUN.Abp.Hangfire.Dashboard\LINGYUN.Abp.Hangfire.Dashboard.csproj", "{340BE5AC-68EC-41A5-9D0D-266037C58F13}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.Build.0 = Release|Any CPU
+ {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {40E217A9-46EA-48DE-BE0B-6CC824240E97}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57}.Release|Any CPU.Build.0 = Release|Any CPU
+ {269FF49F-97A3-4502-B424-D8CD55FC5727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {269FF49F-97A3-4502-B424-D8CD55FC5727}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {269FF49F-97A3-4502-B424-D8CD55FC5727}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {269FF49F-97A3-4502-B424-D8CD55FC5727}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87049236-4808-4C33-88BA-D3CA6BB1F786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87049236-4808-4C33-88BA-D3CA6BB1F786}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87049236-4808-4C33-88BA-D3CA6BB1F786}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87049236-4808-4C33-88BA-D3CA6BB1F786}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {089BE2D2-D579-47DA-B135-449C1153F27E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {089BE2D2-D579-47DA-B135-449C1153F27E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {089BE2D2-D579-47DA-B135-449C1153F27E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {089BE2D2-D579-47DA-B135-449C1153F27E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D137106D-DCD5-455B-A297-44831DF38EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D137106D-DCD5-455B-A297-44831DF38EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D137106D-DCD5-455B-A297-44831DF38EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D137106D-DCD5-455B-A297-44831DF38EE8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7DF65FB1-AFA3-4D50-83D6-A37318296E6D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C1F56ED5-E898-45F1-97B5-61F4AB30FB58}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FF4A3402-8DE2-4494-8F2B-614356DA72EA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EAE87281-4C33-4E8B-A489-480C55BA9E89}.Release|Any CPU.Build.0 = Release|Any CPU
+ {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85090598-6B03-43D3-BE61-1E9777252D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85090598-6B03-43D3-BE61-1E9777252D50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85090598-6B03-43D3-BE61-1E9777252D50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85090598-6B03-43D3-BE61-1E9777252D50}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9FA1A02-A2BF-480D-914E-0780DAE442FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {59619184-02E7-4C61-8F96-89320CD7A3AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {59619184-02E7-4C61-8F96-89320CD7A3AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {59619184-02E7-4C61-8F96-89320CD7A3AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {59619184-02E7-4C61-8F96-89320CD7A3AE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {865A2AE3-864B-4425-8FA6-AFD62F6466DB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35A23613-85BA-4E1B-835C-DB33AB4A2751}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6776BF7-5F73-4224-8915-C017F4EEDD28}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.Build.0 = Release|Any CPU
+ {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0D1DB712-B48D-4FB7-9A47-694C668A62E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.Build.0 = Release|Any CPU
+ {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0F14C850-7F4C-4791-9C6C-7E56F985C71D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87C7DDCF-F80D-4A15-9044-71552DCB5550}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7208C9AB-AB76-43E7-95FA-A0E463E82A3C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A2B4ECAE-DABE-40F7-9335-496A79EDE671}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.Build.0 = Release|Any CPU
+ {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.Build.0 = Release|Any CPU
+ {372123C3-3AFD-42C8-BB80-778322EA72C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {372123C3-3AFD-42C8-BB80-778322EA72C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {372123C3-3AFD-42C8-BB80-778322EA72C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {372123C3-3AFD-42C8-BB80-778322EA72C3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F85552D4-D22E-483A-B1F8-3DFB840F6F7C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8C3312E7-F51E-4780-A893-CE0E0B80B579}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.Build.0 = Release|Any CPU
+ {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4A9043FD-24A3-4A4A-956B-9CB71876F415}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6FFC14FE-F659-4B23-9746-4B767CE520D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.Build.0 = Release|Any CPU
+ {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.Build.0 = Release|Any CPU
+ {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {77BDEF2B-1A30-4E64-BC35-0DFC21091327} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
+ {573B7B0E-3065-42DE-A391-EE026CE7A366} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
+ {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}
+ {68ADC230-B563-4948-BBF1-2112DFE93BC1} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {40E217A9-46EA-48DE-BE0B-6CC824240E97} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {1026B28E-9A3D-47CD-B0EE-1C7E1CA92B57} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {269FF49F-97A3-4502-B424-D8CD55FC5727} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {87049236-4808-4C33-88BA-D3CA6BB1F786} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {3B6DD473-E87F-495E-80C9-D0A3A4C9F60B} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {089BE2D2-D579-47DA-B135-449C1153F27E} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {D137106D-DCD5-455B-A297-44831DF38EE8} = {68ADC230-B563-4948-BBF1-2112DFE93BC1}
+ {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {E2408063-FB1F-4513-B4A7-1FE50667C6E8} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {7DF65FB1-AFA3-4D50-83D6-A37318296E6D} = {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}
+ {9D9C2B07-5DB4-4513-B49A-06622F6E6FC9} = {19E6BD61-062B-4FAD-A51A-B55F5CE88B7A}
+ {C1F56ED5-E898-45F1-97B5-61F4AB30FB58} = {685188AC-A145-4A27-BF5F-9C970A59AA9C}
+ {0439B173-F41E-4CE0-A44A-CCB70328F272} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {A584D040-95AC-4422-93FF-7B80532213F0} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {76249548-4344-4CD0-A0AC-12AC54184B58} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {A5543E56-DA53-494D-A531-DA75091D46FF} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {FF4A3402-8DE2-4494-8F2B-614356DA72EA} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {EAE87281-4C33-4E8B-A489-480C55BA9E89} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {51305B1E-4B8B-40BC-87B9-C8BFA04C61E6} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {85090598-6B03-43D3-BE61-1E9777252D50} = {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0}
+ {8AC72641-30D3-4ACF-89FA-808FADC55C2E} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {AEC1E6D3-DC23-41BD-B456-3AAD26E34978} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {9E72FEB9-A626-4312-892B-CDD043879758} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {8B09385A-719C-4B83-B61E-0ECD5D2734BD} = {9E72FEB9-A626-4312-892B-CDD043879758}
+ {8E569C1C-2637-4D89-804C-50FBC83948FB} = {9E72FEB9-A626-4312-892B-CDD043879758}
+ {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D} = {9E72FEB9-A626-4312-892B-CDD043879758}
+ {FF1839EA-FB6B-4ED5-9804-E40427046D35} = {14CDBAD1-10C8-464A-B445-1F727C988010}
+ {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {6E4A0D87-C3CE-430F-A475-A6B68C116D96} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {A5851F0F-CB0D-4E29-A829-D1BDEADB807B} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {FDEECE0D-6F66-4053-948E-9AC021B97C8D} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {B9FA1A02-A2BF-480D-914E-0780DAE442FC} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {59619184-02E7-4C61-8F96-89320CD7A3AE} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {865A2AE3-864B-4425-8FA6-AFD62F6466DB} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {35A23613-85BA-4E1B-835C-DB33AB4A2751} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {F6776BF7-5F73-4224-8915-C017F4EEDD28} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {81DF3392-38F4-41E9-8499-4F7EA8ADF4F2} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {371B293B-0CA9-4385-8EBB-5224332066D2} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {0D1DB712-B48D-4FB7-9A47-694C668A62E3} = {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}
+ {9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {47CC8F7A-681D-42B9-AE04-78453782C1B6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {F595CB9F-B117-4D62-A1AE-48599927DB36} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {5CF403B2-47C9-4E4E-8856-0294BDD64884} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {059473BA-FAF9-405F-9985-33DDCA2E9F0D} = {14CDBAD1-10C8-464A-B445-1F727C988010}
+ {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {C8A00439-5B8D-4923-8FAA-AB75E2A786ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {31B03DCB-ED12-4412-867A-61E347D40D8C} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {AB984240-EF03-416F-A9B2-F5CF169E04B7} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
+ {65DDA934-B76B-4018-A565-CF6CEF0D6BB0} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {0F14C850-7F4C-4791-9C6C-7E56F985C71D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {376D8343-DF83-41D2-BF6E-2F5DC8DBF259} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {87C7DDCF-F80D-4A15-9044-71552DCB5550} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {7208C9AB-AB76-43E7-95FA-A0E463E82A3C} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {9CB71AC4-139C-40EA-8EFF-5CFEFDD80413} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {A2B4ECAE-DABE-40F7-9335-496A79EDE671} = {A5543E56-DA53-494D-A531-DA75091D46FF}
+ {1DA91161-8757-4A68-A0A1-8C94C36C9240} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {F4923692-D343-4318-AECA-96F580B1A563} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {F135B9E8-3FFE-44E9-835B-7B6A928F4823} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {75A6D078-C19D-4030-88CC-C2A8608FF604} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {2D895594-3FF5-4507-853A-CB65F2DB72ED} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {0655A0FB-59E8-4A9F-BAF5-47A89377F747} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE} = {F4923692-D343-4318-AECA-96F580B1A563}
+ {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {F3D9B137-32DE-4018-8058-78AB17FCDF9C} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {52B5D4F7-237B-4E0A-A167-68442164F70A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {F19C8B0F-A332-4190-9ABE-95790E0AE864} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {72DCA4CF-8B95-47C9-B02A-2671953B7987} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {7DDEAEA9-E392-469C-ACB6-908C5BAD669E} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {86A67B8C-EFA0-4103-B60F-312F07C15A7A} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {854E1A42-FEA4-420E-9E83-0A39EE03F1ED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {21FCEF89-9A3F-476E-833A-A9C2131B2AE6} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {372123C3-3AFD-42C8-BB80-778322EA72C3} = {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898}
+ {F359AAA1-C854-444A-88F2-1C0D8A07F864} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {5D0ED1FC-3A7C-4531-9512-832E73AD9555} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {2BF7FB73-0C62-4ECF-99F0-0583855D2777} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {6FE7E243-2D99-4567-8786-6C9283D608EF} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {685188AC-A145-4A27-BF5F-9C970A59AA9C} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {F85552D4-D22E-483A-B1F8-3DFB840F6F7C} = {E2408063-FB1F-4513-B4A7-1FE50667C6E8}
+ {6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {F12F4645-C0FE-4129-8C71-65B4039DC445} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {C457FA70-8732-44B8-A018-C96D14025D4B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {7071E78B-755B-410A-830B-AA05D7168944} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}
+ {87B65CBD-0FF4-4FB5-9ABC-161911A71179} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}
+ {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {F40F88F1-CA90-4A79-B772-80E287E25982} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
+ {AC3C8985-73C2-472A-8E76-A0B8786FEC3F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
+ {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}
+ {CC362C67-6FC1-42B3-A130-8120AA8D790C} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {B46D6DAF-98C6-441F-9FA5-3CAD7CF27727} = {CC362C67-6FC1-42B3-A130-8120AA8D790C}
+ {2D377D3A-70EC-4BB3-9F4C-6C933693DA98} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {A66D48C9-F141-4111-9169-CEB64AFFF61D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {524276E1-053D-4191-ABF7-4CDA01BFFBC3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {43083268-74DE-4C68-824A-FB0CEC77358D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {E92A1CAA-5758-41EF-B67E-C0D394E85417} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {F18DE651-A3E4-478F-A2B5-686429729EB8} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {42309C06-C0F2-490F-931B-CF41FA1970FF} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
+ {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {14CDBAD1-10C8-464A-B445-1F727C988010} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC} = {14CDBAD1-10C8-464A-B445-1F727C988010}
+ {97B4A37E-B93E-48C9-95D5-689CB9495D8B} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F}
+ {8C3312E7-F51E-4780-A893-CE0E0B80B579} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010}
+ {B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {3E5EBCEC-78C9-4A1A-BF04-A216AA6A921F} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}
+ {48DE251A-3482-4934-BC26-F99D2235AC9F} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {C892CD81-50AE-49E5-BF44-A0C28A1614CC} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {EEF03CC6-1013-4AAF-BEED-BB4BA5021039} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {90E88EAC-4291-4406-8D88-EFDF61B11292} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {84868710-ECBB-4025-900A-EEB99EC49534} = {90E88EAC-4291-4406-8D88-EFDF61B11292}
+ {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {4A9043FD-24A3-4A4A-956B-9CB71876F415} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {D3BAA44E-8395-4E8A-AA96-6B463356C537} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {5BE18D72-0D02-4854-966E-745CE5DAF77F} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {73EAD4FE-B44F-44A7-904E-FFA5096D91BD} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {06D34108-01BA-4C77-A704-4DD9E6F7E32C} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {A98C939C-9F48-414A-A2D3-853BE4447397} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {A94BE05F-7DAB-461C-93E7-914CBDF4FA93} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {FBE91498-D83B-4873-A67E-0FB9D1C366F0} = {D3BAA44E-8395-4E8A-AA96-6B463356C537}
+ {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
+ {6FFC14FE-F659-4B23-9746-4B767CE520D2} = {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B}
+ {6084D52D-775B-4A39-8CD5-AA2F362B5A61} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
+ {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
+ {34BB9810-2983-4E55-A96A-132D32310145} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
+ {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61}
+ {8EF31071-3521-409D-9740-BBFBFC04C50E} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}
+ {13219C1C-23E1-4EBA-93FB-86830C93A800} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {60D0BEF2-FEAF-4066-8377-6C873CB24858} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ {340BE5AC-68EC-41A5-9D0D-266037C58F13} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}
+ EndGlobalSection
+EndGlobal
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalROptions.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalROptions.cs
index 769be79bc..e0e0482bb 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalROptions.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalROptions.cs
@@ -1,19 +1,19 @@
-namespace LINGYUN.Abp.IM.SignalR
-{
- public class AbpIMSignalROptions
- {
- ///
- /// 自定义的客户端接收消息方法名称
- ///
- public string GetChatMessageMethod { get; set; }
- ///
- /// 用户上线接收方法名称
- ///
- public string UserOnlineMethod { get; set; }
- public AbpIMSignalROptions()
- {
- GetChatMessageMethod = "getChatMessage";
- UserOnlineMethod = "onUserOnlined";
- }
- }
-}
+namespace LINGYUN.Abp.IM.SignalR
+{
+ public class AbpIMSignalROptions
+ {
+ ///
+ /// 自定义的客户端接收消息方法名称
+ ///
+ public string GetChatMessageMethod { get; set; }
+ ///
+ /// 用户上线接收方法名称
+ ///
+ public string UserOnlineMethod { get; set; }
+ public AbpIMSignalROptions()
+ {
+ GetChatMessageMethod = "get-chat-message";
+ UserOnlineMethod = "on-user-onlined";
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs
index 9b9b9eb34..1b51b2f91 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs
@@ -1,124 +1,139 @@
-using LINGYUN.Abp.IM.Contract;
-using LINGYUN.Abp.IM.Group;
-using LINGYUN.Abp.IM.Messages;
-using LINGYUN.Abp.RealTime.Client;
-using LINGYUN.Abp.RealTime.SignalR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.SignalR;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
-using System;
-using System.Collections.Immutable;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.IM.SignalR.Hubs
-{
- [Authorize]
- public class MessagesHub : OnlineClientHubBase
- {
- protected AbpIMSignalROptions Options { get; }
- protected IFriendStore FriendStore { get; }
- protected IMessageStore MessageStore { get; }
- protected IUserGroupStore UserGroupStore { get; }
-
- public MessagesHub(
- IFriendStore friendStore,
- IMessageStore messageStore,
- IUserGroupStore userGroupStore,
- IOptions options)
- {
- FriendStore = friendStore;
- MessageStore = messageStore;
- UserGroupStore = userGroupStore;
- Options = options.Value;
- }
-
- protected override async Task OnClientConnectedAsync(IOnlineClient client)
- {
- await base.OnClientConnectedAsync(client);
- // 加入通讯组
- var userGroups = await UserGroupStore.GetUserGroupsAsync(client.TenantId, client.UserId.Value);
- foreach (var group in userGroups)
- {
- await Groups.AddToGroupAsync(client.ConnectionId, group.Name);
- var groupClient = Clients.Group(group.Name);
- if (groupClient != null)
- {
- // 发送用户上线通知
- await groupClient.SendAsync(Options.UserOnlineMethod, client.TenantId, client.UserId.Value);
- }
- }
-
- // 发送好友上线通知
- var userFriends = await FriendStore.GetListAsync(client.TenantId, client.UserId.Value);
- if (userFriends.Count > 0)
- {
- var friendClientIds = userFriends.Select(friend => friend.FriendId.ToString()).ToImmutableArray();
- var userClients = Clients.Users(friendClientIds);
- if (userClients != null)
- {
- await userClients.SendAsync(Options.UserOnlineMethod, client.TenantId, client.UserId.Value);
- }
- }
- }
- ///
- /// 客户端调用发送消息方法
- ///
- ///
- ///
- [HubMethodName("SendMessage")]
- public virtual async Task SendMessageAsync(ChatMessage chatMessage)
- {
- // 持久化
- await MessageStore.StoreMessageAsync(chatMessage, cancellationToken: Context.ConnectionAborted);
-
- if (!chatMessage.GroupId.IsNullOrWhiteSpace())
- {
- await SendMessageToGroupAsync(chatMessage);
- }
- else
- {
- await SendMessageToUserAsync(chatMessage);
- }
- }
-
- protected virtual async Task SendMessageToGroupAsync(ChatMessage chatMessage)
- {
- var signalRClient = Clients.Group(chatMessage.GroupId);
- if (signalRClient == null)
- {
- Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
- return;
- }
-
- await signalRClient.SendAsync(Options.GetChatMessageMethod, chatMessage, cancellationToken: Context.ConnectionAborted);
- }
-
- protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage)
- {
- var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault());
- var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext);
-
- foreach (var onlineClient in onlineClients)
- {
- try
- {
- var signalRClient = Clients.Client(onlineClient.ConnectionId);
- if (signalRClient == null)
- {
- Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
- continue;
- }
- await signalRClient.SendAsync(Options.GetChatMessageMethod, chatMessage, cancellationToken: Context.ConnectionAborted);
- }
- catch (Exception ex)
- {
- // 发送异常记录就行了,因为消息已经持久化
- Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
- Logger.LogWarning("Send to user message error: {0}", ex.Message);
- }
- }
- }
- }
-}
+using LINGYUN.Abp.IM.Contract;
+using LINGYUN.Abp.IM.Group;
+using LINGYUN.Abp.IM.Messages;
+using LINGYUN.Abp.RealTime.Client;
+using LINGYUN.Abp.RealTime.SignalR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.SignalR;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Immutable;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM.SignalR.Hubs
+{
+ [Authorize]
+ public class MessagesHub : OnlineClientHubBase
+ {
+ protected IMessageProcessor Processor => LazyServiceProvider.LazyGetRequiredService();
+
+ protected AbpIMSignalROptions Options { get; }
+ protected IFriendStore FriendStore { get; }
+ protected IMessageStore MessageStore { get; }
+ protected IUserGroupStore UserGroupStore { get; }
+
+ public MessagesHub(
+ IFriendStore friendStore,
+ IMessageStore messageStore,
+ IUserGroupStore userGroupStore,
+ IOptions options)
+ {
+ FriendStore = friendStore;
+ MessageStore = messageStore;
+ UserGroupStore = userGroupStore;
+ Options = options.Value;
+ }
+
+ protected override async Task OnClientConnectedAsync(IOnlineClient client)
+ {
+ await base.OnClientConnectedAsync(client);
+ // 加入通讯组
+ var userGroups = await UserGroupStore.GetUserGroupsAsync(client.TenantId, client.UserId.Value);
+ foreach (var group in userGroups)
+ {
+ await Groups.AddToGroupAsync(client.ConnectionId, group.Name);
+ var groupClient = Clients.Group(group.Name);
+ if (groupClient != null)
+ {
+ // 发送用户上线通知
+ await groupClient.SendAsync(Options.UserOnlineMethod, client.TenantId, client.UserId.Value);
+ }
+ }
+
+ // 发送好友上线通知
+ var userFriends = await FriendStore.GetListAsync(client.TenantId, client.UserId.Value);
+ if (userFriends.Count > 0)
+ {
+ var friendClientIds = userFriends.Select(friend => friend.FriendId.ToString()).ToImmutableArray();
+ var userClients = Clients.Users(friendClientIds);
+ if (userClients != null)
+ {
+ await userClients.SendAsync(Options.UserOnlineMethod, client.TenantId, client.UserId.Value);
+ }
+ }
+ }
+ ///
+ /// 客户端调用发送消息方法
+ ///
+ ///
+ ///
+ // [HubMethodName("SendMessage")]
+ [HubMethodName("send")]
+ public virtual async Task SendAsync(ChatMessage chatMessage)
+ {
+ // 持久化
+ await MessageStore.StoreMessageAsync(chatMessage, cancellationToken: Context.ConnectionAborted);
+
+ if (!chatMessage.GroupId.IsNullOrWhiteSpace())
+ {
+ await SendMessageToGroupAsync(chatMessage);
+ }
+ else
+ {
+ await SendMessageToUserAsync(chatMessage);
+ }
+ }
+
+ [HubMethodName("recall")]
+ public virtual async Task ReCallAsync(ChatMessage chatMessage)
+ {
+ await Processor.ReCallAsync(chatMessage);
+ }
+
+ [HubMethodName("read")]
+ public virtual async Task ReadAsync(ChatMessage chatMessage)
+ {
+ await Processor.ReadAsync(chatMessage);
+ }
+
+ protected virtual async Task SendMessageToGroupAsync(ChatMessage chatMessage)
+ {
+ var signalRClient = Clients.Group(chatMessage.GroupId);
+ if (signalRClient == null)
+ {
+ Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
+ return;
+ }
+
+ await signalRClient.SendAsync(Options.GetChatMessageMethod, chatMessage, cancellationToken: Context.ConnectionAborted);
+ }
+
+ protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage)
+ {
+ var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault());
+ var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext);
+
+ foreach (var onlineClient in onlineClients)
+ {
+ try
+ {
+ var signalRClient = Clients.Client(onlineClient.ConnectionId);
+ if (signalRClient == null)
+ {
+ Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
+ continue;
+ }
+ await signalRClient.SendAsync(Options.GetChatMessageMethod, chatMessage, cancellationToken: Context.ConnectionAborted);
+ }
+ catch (Exception ex)
+ {
+ // 发送异常记录就行了,因为消息已经持久化
+ Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
+ Logger.LogWarning("Send to user message error: {0}", ex.Message);
+ }
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs
index 237a9a486..fada32ad7 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs
@@ -1,161 +1,157 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.IM.Contract
-{
- public interface IFriendStore
- {
- ///
- /// 是否是好友关系
- ///
- ///
- ///
- ///
- ///
- Task IsFriendAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default
- );
- ///
- /// 查询好友列表
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetListAsync(
- Guid? tenantId,
- Guid userId,
- string sorting = nameof(UserFriend.UserId),
- bool reverse = false,
- CancellationToken cancellationToken = default
- );
- ///
- /// 获取好友数量
- ///
- ///
- ///
- ///
- ///
- Task GetCountAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- CancellationToken cancellationToken = default);
- ///
- /// 获取好友列表
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetPagedListAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- string sorting = nameof(UserFriend.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- ///
- /// 获取最近联系好友列表
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetLastContactListAsync(
- Guid? tenantId,
- Guid userId,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- ///
- /// 获取好友信息
- ///
- ///
- ///
- ///
- ///
- Task GetMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
- ///
- /// 添加好友
- ///
- ///
- ///
- ///
- ///
- Task AddMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- string remarkName = "",
- CancellationToken cancellationToken = default);
- ///
- /// 添加好友请求
- ///
- ///
- ///
- ///
- ///
- ///
- Task AddRequestAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- string remarkName = "",
- string description = "",
- CancellationToken cancellationToken = default);
- ///
- /// 移除好友
- ///
- ///
- ///
- ///
- ///
- Task RemoveMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
- ///
- /// 添加黑名单
- ///
- ///
- ///
- ///
- ///
- Task AddShieldMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
- ///
- /// 移除黑名单
- ///
- ///
- ///
- ///
- ///
- Task RemoveShieldMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM.Contract
+{
+ public interface IFriendStore
+ {
+ ///
+ /// 是否是好友关系
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task IsFriendAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default
+ );
+ ///
+ /// 查询好友列表
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetListAsync(
+ Guid? tenantId,
+ Guid userId,
+ string sorting = nameof(UserFriend.UserId),
+ CancellationToken cancellationToken = default
+ );
+ ///
+ /// 获取好友数量
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetCountAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取好友列表
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetPagedListAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ string sorting = nameof(UserFriend.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取最近联系好友列表
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetLastContactListAsync(
+ Guid? tenantId,
+ Guid userId,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取好友信息
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 添加好友
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task AddMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ string remarkName = "",
+ CancellationToken cancellationToken = default);
+ ///
+ /// 添加好友请求
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task AddRequestAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ string remarkName = "",
+ string description = "",
+ CancellationToken cancellationToken = default);
+ ///
+ /// 移除好友
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task RemoveMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 添加黑名单
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task AddShieldMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 移除黑名单
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task RemoveShieldMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs
index ea7212f7f..0cd6f9058 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs
@@ -1,108 +1,106 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.IM.Group
-{
- public interface IUserGroupStore
- {
- ///
- /// 成员是否在群组
- ///
- ///
- ///
- ///
- ///
- Task MemberHasInGroupAsync(
- Guid? tenantId,
- long groupId,
- Guid userId,
- CancellationToken cancellationToken = default);
- ///
- /// 获取群组用户身份
- ///
- ///
- ///
- ///
- ///
- Task GetUserGroupCardAsync(
- Guid? tenantId,
- long groupId,
- Guid userId,
- CancellationToken cancellationToken = default);
- ///
- /// 获取用户所在通讯组列表
- ///
- ///
- ///
- ///
- Task> GetUserGroupsAsync(
- Guid? tenantId,
- Guid userId,
- CancellationToken cancellationToken = default);
- ///
- /// 获取群组成员列表
- ///
- ///
- ///
- ///
- Task> GetMembersAsync(
- Guid? tenantId,
- long groupId,
- CancellationToken cancellationToken = default);
- ///
- /// 获取群组成员数
- ///
- ///
- ///
- ///
- Task GetMembersCountAsync(
- Guid? tenantId,
- long groupId,
- CancellationToken cancellationToken = default);
- ///
- /// 获取通讯组用户
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetMembersAsync(
- Guid? tenantId,
- long groupId,
- string sorting = nameof(GroupUserCard.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- ///
- /// 用户加入通讯组
- ///
- ///
- ///
- ///
- ///
- Task AddUserToGroupAsync(
- Guid? tenantId,
- Guid userId,
- long groupId,
- Guid acceptUserId,
- CancellationToken cancellationToken = default);
- ///
- /// 用户退出通讯组
- ///
- ///
- ///
- ///
- ///
- Task RemoveUserFormGroupAsync(
- Guid? tenantId,
- Guid userId,
- long groupId,
- CancellationToken cancellationToken = default);
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM.Group
+{
+ public interface IUserGroupStore
+ {
+ ///
+ /// 成员是否在群组
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task MemberHasInGroupAsync(
+ Guid? tenantId,
+ long groupId,
+ Guid userId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取群组用户身份
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetUserGroupCardAsync(
+ Guid? tenantId,
+ long groupId,
+ Guid userId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取用户所在通讯组列表
+ ///
+ ///
+ ///
+ ///
+ Task> GetUserGroupsAsync(
+ Guid? tenantId,
+ Guid userId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取群组成员列表
+ ///
+ ///
+ ///
+ ///
+ Task> GetMembersAsync(
+ Guid? tenantId,
+ long groupId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取群组成员数
+ ///
+ ///
+ ///
+ ///
+ Task GetMembersCountAsync(
+ Guid? tenantId,
+ long groupId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取通讯组用户
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetMembersAsync(
+ Guid? tenantId,
+ long groupId,
+ string sorting = nameof(GroupUserCard.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 用户加入通讯组
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task AddUserToGroupAsync(
+ Guid? tenantId,
+ Guid userId,
+ long groupId,
+ Guid acceptUserId,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 用户退出通讯组
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task RemoveUserFormGroupAsync(
+ Guid? tenantId,
+ Guid userId,
+ long groupId,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs
index cdbe9834c..0e82b9103 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs
@@ -1,60 +1,58 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.IM
-{
- ///
- /// IM用户资料查找接口
- ///
- public interface IUserCardFinder
- {
- ///
- /// 查询IM用户数量
- ///
- ///
- /// 用户名称
- /// 起止年龄
- /// 起止年龄
- /// 性别
- ///
- Task GetCountAsync(
- Guid? tenantId,
- string findUserName = "",
- int? startAge = null,
- int? endAge = null,
- Sex? sex = null);
- ///
- /// 查询IM用户列表
- ///
- ///
- /// 用户名称
- /// 起止年龄
- /// 起止年龄
- /// 性别
- /// 排序字段
- /// 是否倒序
- /// 起始记录位置
- /// 最大返回数量
- ///
- Task> GetListAsync(
- Guid? tenantId,
- string findUserName = "",
- int? startAge = null,
- int? endAge = null,
- Sex? sex = null,
- string sorting = nameof(UserCard.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10);
- ///
- /// 获取IM用户信息
- ///
- ///
- ///
- ///
- Task GetMemberAsync(
- Guid? tenantId,
- Guid findUserId);
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM
+{
+ ///
+ /// IM用户资料查找接口
+ ///
+ public interface IUserCardFinder
+ {
+ ///
+ /// 查询IM用户数量
+ ///
+ ///
+ /// 用户名称
+ /// 起止年龄
+ /// 起止年龄
+ /// 性别
+ ///
+ Task GetCountAsync(
+ Guid? tenantId,
+ string findUserName = "",
+ int? startAge = null,
+ int? endAge = null,
+ Sex? sex = null);
+ ///
+ /// 查询IM用户列表
+ ///
+ ///
+ /// 用户名称
+ /// 起止年龄
+ /// 起止年龄
+ /// 性别
+ /// 排序字段
+ /// 起始记录位置
+ /// 最大返回数量
+ ///
+ Task> GetListAsync(
+ Guid? tenantId,
+ string findUserName = "",
+ int? startAge = null,
+ int? endAge = null,
+ Sex? sex = null,
+ string sorting = nameof(UserCard.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10);
+ ///
+ /// 获取IM用户信息
+ ///
+ ///
+ ///
+ ///
+ Task GetMemberAsync(
+ Guid? tenantId,
+ Guid findUserId);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageBlocker.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageBlocker.cs
index 0d01a38c1..7704eb3d9 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageBlocker.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageBlocker.cs
@@ -2,6 +2,9 @@
namespace LINGYUN.Abp.IM.Messages
{
+ ///
+ /// 消息拦截器
+ ///
public interface IMessageBlocker
{
Task InterceptAsync(ChatMessage message);
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageProcessor.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageProcessor.cs
new file mode 100644
index 000000000..12f309078
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageProcessor.cs
@@ -0,0 +1,23 @@
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM.Messages
+{
+ ///
+ /// 消息处理器
+ ///
+ public interface IMessageProcessor
+ {
+ ///
+ /// 撤回
+ ///
+ ///
+ ///
+ Task ReCallAsync(ChatMessage message);
+ ///
+ /// 消息已读
+ ///
+ ///
+ ///
+ Task ReadAsync(ChatMessage message);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs
index 560548237..b6dae836c 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs
@@ -1,108 +1,103 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.IM.Messages
-{
- public interface IMessageStore
- {
- ///
- /// 存储聊天记录
- ///
- ///
- ///
- ///
- ///
- Task StoreMessageAsync(
- ChatMessage chatMessage,
- CancellationToken cancellationToken = default);
- ///
- /// 获取群组聊天记录总数
- ///
- ///
- ///
- ///
- ///
- ///
- Task GetGroupMessageCountAsync(
- Guid? tenantId,
- long groupId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
- ///
- /// 获取群组聊天记录
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetGroupMessageAsync(
- Guid? tenantId,
- long groupId,
- string filter = "",
- string sorting = nameof(ChatMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- ///
- /// 获取上一次通讯消息记录
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task> GetLastChatMessagesAsync(
- Guid? tenantId,
- Guid userId,
- string sorting = nameof(LastChatMessage.SendTime),
- bool reverse = true,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default
- );
- ///
- /// 获取与某个用户的聊天记录总数
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- Task GetChatMessageCountAsync(
- Guid? tenantId,
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
- ///
- /// 获取与某个用户的聊天记录
- ///
- ///
- ///
- ///
- ///
- Task> GetChatMessageAsync(
- Guid? tenantId,
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- string sorting = nameof(ChatMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IM.Messages
+{
+ public interface IMessageStore
+ {
+ ///
+ /// 存储聊天记录
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task StoreMessageAsync(
+ ChatMessage chatMessage,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取群组聊天记录总数
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetGroupMessageCountAsync(
+ Guid? tenantId,
+ long groupId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取群组聊天记录
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetGroupMessageAsync(
+ Guid? tenantId,
+ long groupId,
+ string filter = "",
+ string sorting = nameof(ChatMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取上一次通讯消息记录
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetLastChatMessagesAsync(
+ Guid? tenantId,
+ Guid userId,
+ string sorting = nameof(LastChatMessage.SendTime),
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default
+ );
+ ///
+ /// 获取与某个用户的聊天记录总数
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetChatMessageCountAsync(
+ Guid? tenantId,
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+ ///
+ /// 获取与某个用户的聊天记录
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetChatMessageAsync(
+ Guid? tenantId,
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ string sorting = nameof(ChatMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSendState.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageState.cs
similarity index 75%
rename from aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSendState.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageState.cs
index 3fbbfafe1..422347a87 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSendState.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageState.cs
@@ -1,25 +1,29 @@
-namespace LINGYUN.Abp.IM.Messages
-{
- ///
- /// 消息状态
- ///
- public enum MessageSendState : sbyte
- {
- ///
- /// 已发送
- ///
- Send = 0,
- ///
- /// 撤回
- ///
- ReCall = 10,
- ///
- /// 发送失败
- ///
- Failed = 50,
- ///
- /// 退回
- ///
- BackTo = 100
- }
-}
+namespace LINGYUN.Abp.IM.Messages
+{
+ ///
+ /// 消息状态
+ ///
+ public enum MessageState : sbyte
+ {
+ ///
+ /// 已发送
+ ///
+ Send = 0,
+ ///
+ /// 已读
+ ///
+ Read = 1,
+ ///
+ /// 撤回
+ ///
+ ReCall = 10,
+ ///
+ /// 发送失败
+ ///
+ Failed = 50,
+ ///
+ /// 退回
+ ///
+ BackTo = 100
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/NullMessageProcessor.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/NullMessageProcessor.cs
new file mode 100644
index 000000000..28eef382f
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/NullMessageProcessor.cs
@@ -0,0 +1,19 @@
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+
+namespace LINGYUN.Abp.IM.Messages
+{
+ [Dependency(TryRegister = true)]
+ public class NullMessageProcessor : IMessageProcessor, ISingletonDependency
+ {
+ public Task ReadAsync(ChatMessage message)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task ReCallAsync(ChatMessage message)
+ {
+ return Task.CompletedTask;
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Settings/AbpIMSettingNames.cs b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Settings/AbpIMSettingNames.cs
new file mode 100644
index 000000000..2ea585770
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Settings/AbpIMSettingNames.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace LINGYUN.Abp.IM.Settings
+{
+ public static class AbpIMSettingNames
+ {
+
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalROptions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalROptions.cs
index 9c9abceca..f5fdf7f10 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalROptions.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalROptions.cs
@@ -1,15 +1,15 @@
-namespace LINGYUN.Abp.Notifications.SignalR
-{
- public class AbpNotificationsSignalROptions
- {
- ///
- /// 自定义的客户端订阅通知方法名称
- ///
- public string MethodName { get; set; }
-
- public AbpNotificationsSignalROptions()
- {
- MethodName = "getNotification";
- }
- }
-}
+namespace LINGYUN.Abp.Notifications.SignalR
+{
+ public class AbpNotificationsSignalROptions
+ {
+ ///
+ /// 自定义的客户端订阅通知方法名称
+ ///
+ public string MethodName { get; set; }
+
+ public AbpNotificationsSignalROptions()
+ {
+ MethodName = "get-notification";
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs b/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs
index 978c8ce6d..159a3ab20 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs
@@ -1,78 +1,81 @@
-using LINGYUN.Abp.RealTime.Client;
-using LINGYUN.Abp.RealTime.SignalR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.SignalR;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Uow;
-using Volo.Abp.Users;
-
-namespace LINGYUN.Abp.Notifications.SignalR.Hubs
-{
- [Authorize]
- public class NotificationsHub : OnlineClientHubBase
- {
- protected INotificationStore NotificationStore => LazyServiceProvider.LazyGetRequiredService();
-
- protected override async Task OnClientConnectedAsync(IOnlineClient client)
- {
- await base.OnClientConnectedAsync(client);
-
- if (client.TenantId.HasValue)
- {
- // 以租户为分组,将用户加入租户通讯组
- await Groups.AddToGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
- }
- else
- {
- await Groups.AddToGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
- }
- }
-
- protected override async Task OnClientDisconnectedAsync(IOnlineClient client)
- {
- await base.OnClientDisconnectedAsync(client);
-
- if (client.TenantId.HasValue)
- {
- // 以租户为分组,将移除租户通讯组
- await Groups.RemoveFromGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
- }
- else
- {
- await Groups.RemoveFromGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
- }
- }
-
- [HubMethodName("MySubscriptions")]
- public virtual async Task> GetMySubscriptionsAsync()
- {
- var subscriptions = await NotificationStore
- .GetUserSubscriptionsAsync(CurrentTenant.Id, CurrentUser.GetId());
-
- return new ListResultDto(subscriptions);
- }
-
- [UnitOfWork]
- [HubMethodName("GetNotification")]
- public virtual async Task> GetNotificationAsync()
- {
- var userNotifications = await NotificationStore
- .GetUserNotificationsAsync(CurrentTenant.Id, CurrentUser.GetId(), NotificationReadState.UnRead, 10);
-
- return new ListResultDto(userNotifications);
- }
-
- [HubMethodName("ChangeState")]
- public virtual async Task ChangeStateAsync(string id, NotificationReadState readState = NotificationReadState.Read)
- {
- await NotificationStore
- .ChangeUserNotificationReadStateAsync(
- CurrentTenant.Id,
- CurrentUser.GetId(),
- long.Parse(id),
- readState,
- Context.ConnectionAborted);
- }
- }
-}
+using LINGYUN.Abp.RealTime.Client;
+using LINGYUN.Abp.RealTime.SignalR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.SignalR;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Uow;
+using Volo.Abp.Users;
+
+namespace LINGYUN.Abp.Notifications.SignalR.Hubs
+{
+ [Authorize]
+ public class NotificationsHub : OnlineClientHubBase
+ {
+ protected INotificationStore NotificationStore => LazyServiceProvider.LazyGetRequiredService();
+
+ protected override async Task OnClientConnectedAsync(IOnlineClient client)
+ {
+ await base.OnClientConnectedAsync(client);
+
+ if (client.TenantId.HasValue)
+ {
+ // 以租户为分组,将用户加入租户通讯组
+ await Groups.AddToGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
+ }
+ else
+ {
+ await Groups.AddToGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
+ }
+ }
+
+ protected override async Task OnClientDisconnectedAsync(IOnlineClient client)
+ {
+ await base.OnClientDisconnectedAsync(client);
+
+ if (client.TenantId.HasValue)
+ {
+ // 以租户为分组,将移除租户通讯组
+ await Groups.RemoveFromGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
+ }
+ else
+ {
+ await Groups.RemoveFromGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
+ }
+ }
+
+ // [HubMethodName("MySubscriptions")]
+ [HubMethodName("my-subscriptions")]
+ public virtual async Task> GetMySubscriptionsAsync()
+ {
+ var subscriptions = await NotificationStore
+ .GetUserSubscriptionsAsync(CurrentTenant.Id, CurrentUser.GetId());
+
+ return new ListResultDto(subscriptions);
+ }
+
+ [UnitOfWork]
+ // [HubMethodName("GetNotification")]
+ [HubMethodName("get-notifications")]
+ public virtual async Task> GetNotificationAsync()
+ {
+ var userNotifications = await NotificationStore
+ .GetUserNotificationsAsync(CurrentTenant.Id, CurrentUser.GetId(), NotificationReadState.UnRead, 10);
+
+ return new ListResultDto(userNotifications);
+ }
+
+ // [HubMethodName("ChangeState")]
+ [HubMethodName("change-state")]
+ public virtual async Task ChangeStateAsync(string id, NotificationReadState readState = NotificationReadState.Read)
+ {
+ await NotificationStore
+ .ChangeUserNotificationReadStateAsync(
+ CurrentTenant.Id,
+ CurrentUser.GetId(),
+ long.Parse(id),
+ readState,
+ Context.ConnectionAborted);
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs b/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs
index 9bbc95eb3..3e0f502f1 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs
@@ -1,126 +1,125 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.Notifications
-{
- public interface INotificationStore
- {
- Task InsertUserSubscriptionAsync(
- Guid? tenantId,
- UserIdentifier identifier,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task InsertUserSubscriptionAsync(
- Guid? tenantId,
- IEnumerable identifiers,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task DeleteUserSubscriptionAsync(
- Guid? tenantId,
- Guid userId,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task DeleteAllUserSubscriptionAsync(
- Guid? tenantId,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task DeleteUserSubscriptionAsync(
- Guid? tenantId,
- IEnumerable identifiers,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- string notificationName,
- IEnumerable identifiers = null,
- CancellationToken cancellationToken = default);
-
- Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- Guid userId,
- CancellationToken cancellationToken = default);
-
- Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- string userName,
- CancellationToken cancellationToken = default);
-
- Task IsSubscribedAsync(
- Guid? tenantId,
- Guid userId,
- string notificationName,
- CancellationToken cancellationToken = default);
-
- Task InsertNotificationAsync(
- NotificationInfo notification,
- CancellationToken cancellationToken = default);
-
- Task DeleteNotificationAsync(
- NotificationInfo notification,
- CancellationToken cancellationToken = default);
-
- Task DeleteNotificationAsync(
- int batchCount,
- CancellationToken cancellationToken = default);
-
- Task InsertUserNotificationAsync(
- NotificationInfo notification,
- Guid userId,
- CancellationToken cancellationToken = default);
-
- Task InsertUserNotificationsAsync(
- NotificationInfo notification,
- IEnumerable userIds,
- CancellationToken cancellationToken = default);
-
- Task DeleteUserNotificationAsync(
- Guid? tenantId,
- Guid userId,
- long notificationId,
- CancellationToken cancellationToken = default);
-
- Task GetNotificationOrNullAsync(
- Guid? tenantId,
- long notificationId,
- CancellationToken cancellationToken = default);
-
- Task> GetUserNotificationsAsync(
- Guid? tenantId,
- Guid userId,
- NotificationReadState? readState = null,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task GetUserNotificationsCountAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- NotificationReadState? readState = null,
- CancellationToken cancellationToken = default);
-
- Task> GetUserNotificationsAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- string sorting = nameof(NotificationInfo.CreationTime),
- bool reverse = true,
- NotificationReadState? readState = null,
- int skipCount = 1,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task ChangeUserNotificationReadStateAsync(
- Guid? tenantId,
- Guid userId,
- long notificationId,
- NotificationReadState readState,
- CancellationToken cancellationToken = default);
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.Notifications
+{
+ public interface INotificationStore
+ {
+ Task InsertUserSubscriptionAsync(
+ Guid? tenantId,
+ UserIdentifier identifier,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task InsertUserSubscriptionAsync(
+ Guid? tenantId,
+ IEnumerable identifiers,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteUserSubscriptionAsync(
+ Guid? tenantId,
+ Guid userId,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteAllUserSubscriptionAsync(
+ Guid? tenantId,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteUserSubscriptionAsync(
+ Guid? tenantId,
+ IEnumerable identifiers,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ string notificationName,
+ IEnumerable identifiers = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ Guid userId,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ string userName,
+ CancellationToken cancellationToken = default);
+
+ Task IsSubscribedAsync(
+ Guid? tenantId,
+ Guid userId,
+ string notificationName,
+ CancellationToken cancellationToken = default);
+
+ Task InsertNotificationAsync(
+ NotificationInfo notification,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteNotificationAsync(
+ NotificationInfo notification,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteNotificationAsync(
+ int batchCount,
+ CancellationToken cancellationToken = default);
+
+ Task InsertUserNotificationAsync(
+ NotificationInfo notification,
+ Guid userId,
+ CancellationToken cancellationToken = default);
+
+ Task InsertUserNotificationsAsync(
+ NotificationInfo notification,
+ IEnumerable userIds,
+ CancellationToken cancellationToken = default);
+
+ Task DeleteUserNotificationAsync(
+ Guid? tenantId,
+ Guid userId,
+ long notificationId,
+ CancellationToken cancellationToken = default);
+
+ Task GetNotificationOrNullAsync(
+ Guid? tenantId,
+ long notificationId,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserNotificationsAsync(
+ Guid? tenantId,
+ Guid userId,
+ NotificationReadState? readState = null,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task GetUserNotificationsCountAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ NotificationReadState? readState = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserNotificationsAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ string sorting = nameof(NotificationInfo.CreationTime),
+ NotificationReadState? readState = null,
+ int skipCount = 1,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task ChangeUserNotificationReadStateAsync(
+ Guid? tenantId,
+ Guid userId,
+ long notificationId,
+ NotificationReadState readState,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs b/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs
index 8062548a5..df221796b 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs
@@ -1,188 +1,187 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Volo.Abp.DependencyInjection;
-
-namespace LINGYUN.Abp.Notifications
-{
- [Dependency(TryRegister = true)]
- public class NullNotificationStore : INotificationStore, ISingletonDependency
- {
- public Task ChangeUserNotificationReadStateAsync(
- Guid? tenantId,
- Guid userId,
- long notificationId,
- NotificationReadState readState,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteAllUserSubscriptionAsync(
- Guid? tenantId,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteNotificationAsync(
- NotificationInfo notification,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteNotificationAsync(
- int batchCount,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteUserNotificationAsync(
- Guid? tenantId,
- Guid userId,
- long notificationId,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteUserSubscriptionAsync(
- Guid? tenantId,
- Guid userId,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task DeleteUserSubscriptionAsync(
- Guid? tenantId,
- IEnumerable identifiers,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task GetNotificationOrNullAsync(
- Guid? tenantId,
- long notificationId,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new NotificationInfo());
- }
-
- public Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- string notificationName,
- IEnumerable identifiers,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new List());
- }
-
- public Task> GetUserNotificationsAsync(
- Guid? tenantId,
- Guid userId,
- NotificationReadState? readState = null,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new List());
- }
-
- public Task GetUserNotificationsCountAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- NotificationReadState? readState = null,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(0);
- }
-
- public Task> GetUserNotificationsAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- string sorting = nameof(NotificationInfo.CreationTime),
- bool reverse = true,
- NotificationReadState? readState = null,
- int skipCount = 1,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new List());
- }
-
- public Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- Guid userId,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new List());
- }
-
- public Task> GetUserSubscriptionsAsync(
- Guid? tenantId,
- string userName,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(new List());
- }
-
- public Task InsertNotificationAsync(
- NotificationInfo notification,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task InsertUserNotificationAsync(
- NotificationInfo notification,
- Guid userId,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task InsertUserNotificationsAsync(
- NotificationInfo notification,
- IEnumerable userIds,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task InsertUserSubscriptionAsync(
- Guid? tenantId,
- UserIdentifier identifier,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task InsertUserSubscriptionAsync(
- Guid? tenantId,
- IEnumerable identifiers,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.CompletedTask;
- }
-
- public Task IsSubscribedAsync(
- Guid? tenantId,
- Guid userId,
- string notificationName,
- CancellationToken cancellationToken = default)
- {
- return Task.FromResult(false);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+
+namespace LINGYUN.Abp.Notifications
+{
+ [Dependency(TryRegister = true)]
+ public class NullNotificationStore : INotificationStore, ISingletonDependency
+ {
+ public Task ChangeUserNotificationReadStateAsync(
+ Guid? tenantId,
+ Guid userId,
+ long notificationId,
+ NotificationReadState readState,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteAllUserSubscriptionAsync(
+ Guid? tenantId,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteNotificationAsync(
+ NotificationInfo notification,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteNotificationAsync(
+ int batchCount,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteUserNotificationAsync(
+ Guid? tenantId,
+ Guid userId,
+ long notificationId,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteUserSubscriptionAsync(
+ Guid? tenantId,
+ Guid userId,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task DeleteUserSubscriptionAsync(
+ Guid? tenantId,
+ IEnumerable identifiers,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task GetNotificationOrNullAsync(
+ Guid? tenantId,
+ long notificationId,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new NotificationInfo());
+ }
+
+ public Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ string notificationName,
+ IEnumerable identifiers,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new List());
+ }
+
+ public Task> GetUserNotificationsAsync(
+ Guid? tenantId,
+ Guid userId,
+ NotificationReadState? readState = null,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new List());
+ }
+
+ public Task GetUserNotificationsCountAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ NotificationReadState? readState = null,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(0);
+ }
+
+ public Task> GetUserNotificationsAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ string sorting = nameof(NotificationInfo.CreationTime),
+ NotificationReadState? readState = null,
+ int skipCount = 1,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new List());
+ }
+
+ public Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ Guid userId,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new List());
+ }
+
+ public Task> GetUserSubscriptionsAsync(
+ Guid? tenantId,
+ string userName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(new List());
+ }
+
+ public Task InsertNotificationAsync(
+ NotificationInfo notification,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task InsertUserNotificationAsync(
+ NotificationInfo notification,
+ Guid userId,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task InsertUserNotificationsAsync(
+ NotificationInfo notification,
+ IEnumerable userIds,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task InsertUserSubscriptionAsync(
+ Guid? tenantId,
+ UserIdentifier identifier,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task InsertUserSubscriptionAsync(
+ Guid? tenantId,
+ IEnumerable identifiers,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public Task IsSubscribedAsync(
+ Guid? tenantId,
+ Guid userId,
+ string notificationName,
+ CancellationToken cancellationToken = default)
+ {
+ return Task.FromResult(false);
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN.Abp.RealTime.csproj b/aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN.Abp.RealTime.csproj
index 184bbf6c6..c69060b43 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN.Abp.RealTime.csproj
+++ b/aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN.Abp.RealTime.csproj
@@ -9,6 +9,7 @@
+
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetMyFriendsDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetMyFriendsDto.cs
index 25799aa99..007154f6e 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetMyFriendsDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetMyFriendsDto.cs
@@ -1,10 +1,9 @@
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class GetMyFriendsDto : ISortedResultRequest
- {
- public string Sorting { get; set; }
- public bool Reverse { get; set; }
- }
-}
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class GetMyFriendsDto : ISortedResultRequest
+ {
+ public string Sorting { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetUserLastMessageDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetUserLastMessageDto.cs
index 6c9382eaf..ede167fd4 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetUserLastMessageDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GetUserLastMessageDto.cs
@@ -1,11 +1,10 @@
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class GetUserLastMessageDto : ILimitedResultRequest, ISortedResultRequest
- {
- public int MaxResultCount { get; set; }
- public string Sorting { get; set; }
- public bool Reverse { get; set; }
- }
-}
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class GetUserLastMessageDto : ILimitedResultRequest, ISortedResultRequest
+ {
+ public int MaxResultCount { get; set; }
+ public string Sorting { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupMessageGetByPagedDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupMessageGetByPagedDto.cs
index 82ec7c4a5..36bb32ca6 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupMessageGetByPagedDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupMessageGetByPagedDto.cs
@@ -1,15 +1,14 @@
-using LINGYUN.Abp.IM.Messages;
-using System.ComponentModel.DataAnnotations;
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class GroupMessageGetByPagedDto : PagedAndSortedResultRequestDto
- {
- [Required]
- public long GroupId { get; set; }
- public bool Reverse { get; set; }
- public string Filter { get; set; }
- public MessageType? MessageType { get; set; }
- }
-}
+using LINGYUN.Abp.IM.Messages;
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class GroupMessageGetByPagedDto : PagedAndSortedResultRequestDto
+ {
+ [Required]
+ public long GroupId { get; set; }
+ public string Filter { get; set; }
+ public MessageType? MessageType { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupUserGetByPagedDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupUserGetByPagedDto.cs
index 3441332c8..d1a77cde7 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupUserGetByPagedDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/GroupUserGetByPagedDto.cs
@@ -1,15 +1,13 @@
-using System.ComponentModel.DataAnnotations;
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class GroupUserGetByPagedDto : PagedAndSortedResultRequestDto
- {
- [Required]
- public long GroupId { get; set; }
-
- public bool Reverse { get; set; }
-
- public string Filter { get; set; }
- }
-}
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class GroupUserGetByPagedDto : PagedAndSortedResultRequestDto
+ {
+ [Required]
+ public long GroupId { get; set; }
+
+ public string Filter { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/MyFriendGetByPagedDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/MyFriendGetByPagedDto.cs
index ae27bef2b..85af1d86a 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/MyFriendGetByPagedDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/MyFriendGetByPagedDto.cs
@@ -1,15 +1,13 @@
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class MyFriendGetByPagedDto : PagedAndSortedResultRequestDto
- {
- public string Filter { get; set; }
-
- public bool Reverse { get; set; }
- }
-
- public class MyLastContractFriendGetByPagedDto : PagedResultRequestDto
- {
- }
-}
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class MyFriendGetByPagedDto : PagedAndSortedResultRequestDto
+ {
+ public string Filter { get; set; }
+ }
+
+ public class MyLastContractFriendGetByPagedDto : PagedResultRequestDto
+ {
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/UserMessageGetByPagedDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/UserMessageGetByPagedDto.cs
index 514e5decc..c6620b82f 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/UserMessageGetByPagedDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Chat/Dto/UserMessageGetByPagedDto.cs
@@ -1,16 +1,15 @@
-using LINGYUN.Abp.IM.Messages;
-using System;
-using System.ComponentModel.DataAnnotations;
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class UserMessageGetByPagedDto : PagedAndSortedResultRequestDto
- {
- [Required]
- public Guid ReceiveUserId { get; set; }
- public bool Reverse { get; set; }
- public string Filter { get; set; }
- public MessageType? MessageType { get; set; }
- }
-}
+using LINGYUN.Abp.IM.Messages;
+using System;
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class UserMessageGetByPagedDto : PagedAndSortedResultRequestDto
+ {
+ [Required]
+ public Guid ReceiveUserId { get; set; }
+ public string Filter { get; set; }
+ public MessageType? MessageType { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Notifications/Dto/UserNotificationGetByPagedDto.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Notifications/Dto/UserNotificationGetByPagedDto.cs
index 4f4651498..542d59d70 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Notifications/Dto/UserNotificationGetByPagedDto.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application.Contracts/LINGYUN/Abp/MessageService/Notifications/Dto/UserNotificationGetByPagedDto.cs
@@ -1,14 +1,12 @@
-using LINGYUN.Abp.Notifications;
-using Volo.Abp.Application.Dtos;
-
-namespace LINGYUN.Abp.MessageService.Notifications
-{
- public class UserNotificationGetByPagedDto : PagedAndSortedResultRequestDto
- {
- public string Filter { get; set; }
-
- public bool Reverse { get; set; }
-
- public NotificationReadState? ReadState { get; set; }
- }
-}
+using LINGYUN.Abp.Notifications;
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.MessageService.Notifications
+{
+ public class UserNotificationGetByPagedDto : PagedAndSortedResultRequestDto
+ {
+ public string Filter { get; set; }
+
+ public NotificationReadState? ReadState { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/ChatAppService.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/ChatAppService.cs
index ee7f85368..0f37e2044 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/ChatAppService.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/ChatAppService.cs
@@ -1,136 +1,136 @@
-using LINGYUN.Abp.IM.Group;
-using LINGYUN.Abp.IM.Messages;
-using Microsoft.AspNetCore.Authorization;
-using System.Threading.Tasks;
-using Volo.Abp;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Application.Services;
-using Volo.Abp.Users;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- [Authorize]
- public class ChatAppService : ApplicationService, IChatAppService
- {
- protected IMessageSender MessageSender => LazyServiceProvider.LazyGetRequiredService();
-
- private readonly IUserGroupStore _userGroupStore;
- private readonly IMessageStore _messageStore;
-
- public ChatAppService(
- IMessageStore messageStore,
- IUserGroupStore userGroupStore)
- {
- _messageStore = messageStore;
- _userGroupStore = userGroupStore;
- }
-
- public virtual async Task> GetMyChatMessageAsync(UserMessageGetByPagedDto input)
- {
- var chatMessageCount = await _messageStore
- .GetChatMessageCountAsync(CurrentTenant.Id, CurrentUser.GetId(), input.ReceiveUserId,
- input.Filter, input.MessageType);
-
- var chatMessages = await _messageStore
- .GetChatMessageAsync(CurrentTenant.Id, CurrentUser.GetId(), input.ReceiveUserId,
- input.Filter, input.Sorting, input.Reverse,
- input.MessageType, input.SkipCount, input.MaxResultCount);
-
- return new PagedResultDto(chatMessageCount, chatMessages);
- }
-
- public virtual async Task> GetMyLastChatMessageAsync(GetUserLastMessageDto input)
- {
- var chatMessages = await _messageStore
- .GetLastChatMessagesAsync(CurrentTenant.Id, CurrentUser.GetId(),
- input.Sorting, input.Reverse, input.MaxResultCount);
-
- return new ListResultDto(chatMessages);
- }
-
- public virtual async Task> GetMyGroupMessageAsync(GroupMessageGetByPagedDto input)
- {
- if (! await _userGroupStore.MemberHasInGroupAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId()))
- {
- throw new BusinessException(MessageServiceErrorCodes.YouHaveNotJoinedGroup);
- }
-
- var groupMessageCount = await _messageStore
- .GetGroupMessageCountAsync(CurrentTenant.Id, input.GroupId,
- input.Filter, input.MessageType);
-
- var groupMessages = await _messageStore
- .GetGroupMessageAsync(CurrentTenant.Id, input.GroupId,
- input.Filter, input.Sorting, input.Reverse,
- input.MessageType, input.SkipCount, input.MaxResultCount);
-
- return new PagedResultDto(groupMessageCount, groupMessages);
- }
-
- //public virtual async Task> GetGroupUsersAsync(GroupUserGetByPagedDto input)
- //{
- // var groupUserCardCount = await _userGroupStore
- // .GetMembersCountAsync(CurrentTenant.Id, input.GroupId);
-
- // var groupUserCards = await _userGroupStore.GetMembersAsync(CurrentTenant.Id,
- // input.GroupId, input.Sorting, input.Reverse,
- // input.SkipCount, input.MaxResultCount);
-
- // return new PagedResultDto(groupUserCardCount, groupUserCards);
- //}
-
- //[Authorize]
- //public virtual async Task> GetMyGroupsAsync()
- //{
- // var myGroups = await _userGroupStore.GetUserGroupsAsync(CurrentTenant.Id, CurrentUser.GetId());
-
- // return new ListResultDto(myGroups.ToImmutableList());
- //}
-
- //public virtual async Task GroupAcceptUserAsync(GroupAcceptUserDto input)
- //{
- // var myGroupCard = await _userGroupStore
- // .GetUserGroupCardAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId());
- // if (myGroupCard == null)
- // {
- // // 当前登录用户不再用户组
- // throw new UserFriendlyException("");
- // }
- // if (!myGroupCard.IsAdmin)
- // {
- // // 当前登录用户没有加人权限
- // throw new UserFriendlyException("");
- // }
- // await _userGroupStore
- // .AddUserToGroupAsync(CurrentTenant.Id, input.UserId, input.GroupId, CurrentUser.GetId());
- //}
-
- //public virtual async Task GroupRemoveUserAsync(GroupRemoveUserDto input)
- //{
- // var myGroupCard = await _userGroupStore
- // .GetUserGroupCardAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId());
- // if (myGroupCard == null)
- // {
- // // 当前登录用户不再用户组
- // throw new UserFriendlyException("");
- // }
- // if (!myGroupCard.IsAdmin)
- // {
- // // 当前登录用户没有踢人权限
- // throw new UserFriendlyException("");
- // }
- // await _userGroupStore
- // .RemoveUserFormGroupAsync(CurrentTenant.Id, input.UserId, input.GroupId);
- //}
-
- public virtual async Task SendMessageAsync(ChatMessage input)
- {
- // TODO:向其他租户发送消息?
- input.TenantId ??= CurrentTenant.Id;
-
- var messageId = await MessageSender.SendMessageAsync(input);
-
- return new ChatMessageSendResultDto(messageId);
- }
- }
-}
+using LINGYUN.Abp.IM.Group;
+using LINGYUN.Abp.IM.Messages;
+using Microsoft.AspNetCore.Authorization;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Users;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ [Authorize]
+ public class ChatAppService : ApplicationService, IChatAppService
+ {
+ protected IMessageSender MessageSender => LazyServiceProvider.LazyGetRequiredService();
+
+ private readonly IUserGroupStore _userGroupStore;
+ private readonly IMessageStore _messageStore;
+
+ public ChatAppService(
+ IMessageStore messageStore,
+ IUserGroupStore userGroupStore)
+ {
+ _messageStore = messageStore;
+ _userGroupStore = userGroupStore;
+ }
+
+ public virtual async Task> GetMyChatMessageAsync(UserMessageGetByPagedDto input)
+ {
+ var chatMessageCount = await _messageStore
+ .GetChatMessageCountAsync(CurrentTenant.Id, CurrentUser.GetId(), input.ReceiveUserId,
+ input.Filter, input.MessageType);
+
+ var chatMessages = await _messageStore
+ .GetChatMessageAsync(CurrentTenant.Id, CurrentUser.GetId(), input.ReceiveUserId,
+ input.Filter, input.Sorting,
+ input.MessageType, input.SkipCount, input.MaxResultCount);
+
+ return new PagedResultDto(chatMessageCount, chatMessages);
+ }
+
+ public virtual async Task> GetMyLastChatMessageAsync(GetUserLastMessageDto input)
+ {
+ var chatMessages = await _messageStore
+ .GetLastChatMessagesAsync(CurrentTenant.Id, CurrentUser.GetId(),
+ input.Sorting, input.MaxResultCount);
+
+ return new ListResultDto(chatMessages);
+ }
+
+ public virtual async Task> GetMyGroupMessageAsync(GroupMessageGetByPagedDto input)
+ {
+ if (! await _userGroupStore.MemberHasInGroupAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId()))
+ {
+ throw new BusinessException(MessageServiceErrorCodes.YouHaveNotJoinedGroup);
+ }
+
+ var groupMessageCount = await _messageStore
+ .GetGroupMessageCountAsync(CurrentTenant.Id, input.GroupId,
+ input.Filter, input.MessageType);
+
+ var groupMessages = await _messageStore
+ .GetGroupMessageAsync(CurrentTenant.Id, input.GroupId,
+ input.Filter, input.Sorting,
+ input.MessageType, input.SkipCount, input.MaxResultCount);
+
+ return new PagedResultDto(groupMessageCount, groupMessages);
+ }
+
+ //public virtual async Task> GetGroupUsersAsync(GroupUserGetByPagedDto input)
+ //{
+ // var groupUserCardCount = await _userGroupStore
+ // .GetMembersCountAsync(CurrentTenant.Id, input.GroupId);
+
+ // var groupUserCards = await _userGroupStore.GetMembersAsync(CurrentTenant.Id,
+ // input.GroupId, input.Sorting, input.Reverse,
+ // input.SkipCount, input.MaxResultCount);
+
+ // return new PagedResultDto(groupUserCardCount, groupUserCards);
+ //}
+
+ //[Authorize]
+ //public virtual async Task> GetMyGroupsAsync()
+ //{
+ // var myGroups = await _userGroupStore.GetUserGroupsAsync(CurrentTenant.Id, CurrentUser.GetId());
+
+ // return new ListResultDto(myGroups.ToImmutableList());
+ //}
+
+ //public virtual async Task GroupAcceptUserAsync(GroupAcceptUserDto input)
+ //{
+ // var myGroupCard = await _userGroupStore
+ // .GetUserGroupCardAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId());
+ // if (myGroupCard == null)
+ // {
+ // // 当前登录用户不再用户组
+ // throw new UserFriendlyException("");
+ // }
+ // if (!myGroupCard.IsAdmin)
+ // {
+ // // 当前登录用户没有加人权限
+ // throw new UserFriendlyException("");
+ // }
+ // await _userGroupStore
+ // .AddUserToGroupAsync(CurrentTenant.Id, input.UserId, input.GroupId, CurrentUser.GetId());
+ //}
+
+ //public virtual async Task GroupRemoveUserAsync(GroupRemoveUserDto input)
+ //{
+ // var myGroupCard = await _userGroupStore
+ // .GetUserGroupCardAsync(CurrentTenant.Id, input.GroupId, CurrentUser.GetId());
+ // if (myGroupCard == null)
+ // {
+ // // 当前登录用户不再用户组
+ // throw new UserFriendlyException("");
+ // }
+ // if (!myGroupCard.IsAdmin)
+ // {
+ // // 当前登录用户没有踢人权限
+ // throw new UserFriendlyException("");
+ // }
+ // await _userGroupStore
+ // .RemoveUserFormGroupAsync(CurrentTenant.Id, input.UserId, input.GroupId);
+ //}
+
+ public virtual async Task SendMessageAsync(ChatMessage input)
+ {
+ // TODO:向其他租户发送消息?
+ input.TenantId ??= CurrentTenant.Id;
+
+ var messageId = await MessageSender.SendMessageAsync(input);
+
+ return new ChatMessageSendResultDto(messageId);
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/MyFriendAppService.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/MyFriendAppService.cs
index 501ebd55b..101dccaec 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/MyFriendAppService.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Chat/MyFriendAppService.cs
@@ -1,66 +1,68 @@
-using LINGYUN.Abp.IM.Contract;
-using LINGYUN.Abp.MessageService.Localization;
-using Microsoft.AspNetCore.Authorization;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Application.Services;
-using Volo.Abp.Users;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- [Authorize]
- public class MyFriendAppService : ApplicationService, IMyFriendAppService
- {
- protected IFriendStore FriendStore { get; }
-
- protected IUserChatCardRepository UserChatCardRepository { get; }
-
- public MyFriendAppService(
- IFriendStore friendStore,
- IUserChatCardRepository userChatCardRepository)
- {
- FriendStore = friendStore;
- UserChatCardRepository = userChatCardRepository;
-
- LocalizationResource = typeof(MessageServiceResource);
- }
-
- public virtual async Task CreateAsync(MyFriendCreateDto input)
- {
- var friendCard = await UserChatCardRepository.GetMemberAsync(input.FriendId);
-
- await FriendStore.AddMemberAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId, friendCard?.NickName ?? friendCard?.UserName ?? input.FriendId.ToString());
- }
-
- public virtual async Task AddRequestAsync(MyFriendAddRequestDto input)
- {
- await FriendStore.AddRequestAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId, input.RemarkName, L["AddNewFriendBySearchId"]);
- }
-
- public virtual async Task DeleteAsync(MyFriendOperationDto input)
- {
- await FriendStore.RemoveMemberAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId);
- }
-
- public virtual async Task> GetAllListAsync(GetMyFriendsDto input)
- {
- var myFriends = await FriendStore
- .GetListAsync(CurrentTenant.Id, CurrentUser.GetId(),
- input.Sorting, input.Reverse);
-
- return new ListResultDto(myFriends);
- }
-
- public virtual async Task> GetListAsync(MyFriendGetByPagedDto input)
- {
- var myFrientCount = await FriendStore.GetCountAsync(CurrentTenant.Id, CurrentUser.GetId());
-
- var myFriends = await FriendStore
- .GetPagedListAsync(CurrentTenant.Id, CurrentUser.GetId(),
- input.Filter, input.Sorting, input.Reverse,
- input.SkipCount, input.MaxResultCount);
-
- return new PagedResultDto(myFrientCount, myFriends);
- }
- }
-}
+using LINGYUN.Abp.IM.Contract;
+using LINGYUN.Abp.MessageService.Localization;
+using Microsoft.AspNetCore.Authorization;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Users;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ [Authorize]
+ public class MyFriendAppService : ApplicationService, IMyFriendAppService
+ {
+ protected IFriendStore FriendStore { get; }
+
+ protected IUserChatCardRepository UserChatCardRepository { get; }
+
+ public MyFriendAppService(
+ IFriendStore friendStore,
+ IUserChatCardRepository userChatCardRepository)
+ {
+ FriendStore = friendStore;
+ UserChatCardRepository = userChatCardRepository;
+
+ LocalizationResource = typeof(MessageServiceResource);
+ }
+
+ public virtual async Task CreateAsync(MyFriendCreateDto input)
+ {
+ var friendCard = await UserChatCardRepository.GetMemberAsync(input.FriendId);
+
+ await FriendStore.AddMemberAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId, friendCard?.NickName ?? friendCard?.UserName ?? input.FriendId.ToString());
+ }
+
+ public virtual async Task AddRequestAsync(MyFriendAddRequestDto input)
+ {
+ await FriendStore.AddRequestAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId, input.RemarkName, L["AddNewFriendBySearchId"]);
+ }
+
+ public virtual async Task DeleteAsync(MyFriendOperationDto input)
+ {
+ await FriendStore.RemoveMemberAsync(CurrentTenant.Id, CurrentUser.GetId(), input.FriendId);
+ }
+
+ public virtual async Task> GetAllListAsync(GetMyFriendsDto input)
+ {
+ var myFriends = await FriendStore
+ .GetListAsync(
+ CurrentTenant.Id,
+ CurrentUser.GetId(),
+ input.Sorting);
+
+ return new ListResultDto(myFriends);
+ }
+
+ public virtual async Task> GetListAsync(MyFriendGetByPagedDto input)
+ {
+ var myFrientCount = await FriendStore.GetCountAsync(CurrentTenant.Id, CurrentUser.GetId());
+
+ var myFriends = await FriendStore
+ .GetPagedListAsync(CurrentTenant.Id, CurrentUser.GetId(),
+ input.Filter, input.Sorting,
+ input.SkipCount, input.MaxResultCount);
+
+ return new PagedResultDto(myFrientCount, myFriends);
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Notifications/MyNotificationAppService.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Notifications/MyNotificationAppService.cs
index 17bda9d91..3a2cef825 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Notifications/MyNotificationAppService.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Application/LINGYUN/Abp/MessageService/Notifications/MyNotificationAppService.cs
@@ -1,121 +1,121 @@
-using LINGYUN.Abp.Notifications;
-using Microsoft.AspNetCore.Authorization;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Application.Services;
-using Volo.Abp.Users;
-
-namespace LINGYUN.Abp.MessageService.Notifications
-{
- [Authorize]
- public class MyNotificationAppService : ApplicationService, IMyNotificationAppService
- {
- protected INotificationSender NotificationSender { get; }
-
- protected INotificationStore NotificationStore { get; }
-
- protected INotificationDefinitionManager NotificationDefinitionManager { get; }
-
- public MyNotificationAppService(
- INotificationStore notificationStore,
- INotificationSender notificationSender,
- INotificationDefinitionManager notificationDefinitionManager)
- {
- NotificationStore = notificationStore;
- NotificationSender = notificationSender;
- NotificationDefinitionManager = notificationDefinitionManager;
- }
-
- public virtual async Task SendNofiterAsync(NotificationSendDto input)
- {
- UserIdentifier user = null;
- if (input.ToUserId.HasValue)
- {
- user = new UserIdentifier(input.ToUserId.Value, input.ToUserName);
- }
- await NotificationSender
- .SendNofiterAsync(
- input.Name,
- input.Data,
- user,
- CurrentTenant.Id,
- input.Severity);
- }
-
- public virtual async Task DeleteAsync(long id)
- {
- await NotificationStore
- .DeleteUserNotificationAsync(
- CurrentTenant.Id,
- CurrentUser.GetId(),
- id);
- }
-
- public virtual Task> GetAssignableNotifiersAsync()
- {
- var groups = new List();
-
- foreach (var group in NotificationDefinitionManager.GetGroups())
- {
- if (!group.AllowSubscriptionToClients)
- {
- continue;
-
- }
- var notificationGroup = new NotificationGroupDto
- {
- Name = group.Name,
- DisplayName = group.DisplayName.Localize(StringLocalizerFactory)
- };
-
- foreach (var notification in group.Notifications)
- {
- if (!notification.AllowSubscriptionToClients)
- {
- continue;
- }
-
- var notificationChildren = new NotificationDto
- {
- Name = notification.Name,
- DisplayName = notification.DisplayName.Localize(StringLocalizerFactory),
- Description = notification.Description.Localize(StringLocalizerFactory),
- Lifetime = notification.NotificationLifetime,
- Type = notification.NotificationType
- };
-
- notificationGroup.Notifications.Add(notificationChildren);
- }
-
- groups.Add(notificationGroup);
- }
-
- return Task.FromResult(new ListResultDto(groups));
- }
-
- public virtual async Task GetAsync(long id)
- {
- return await NotificationStore
- .GetNotificationOrNullAsync(CurrentTenant.Id, id);
- }
-
- public virtual async Task> GetListAsync(UserNotificationGetByPagedDto input)
- {
- var notificationCount = await NotificationStore
- .GetUserNotificationsCountAsync(
- CurrentTenant.Id,
- CurrentUser.GetId(),
- input.Filter,
- input.ReadState);
-
- var notifications = await NotificationStore
- .GetUserNotificationsAsync(
- CurrentTenant.Id, CurrentUser.GetId(),
- input.Filter, input.Sorting, input.Reverse,
- input.ReadState, input.SkipCount, input.MaxResultCount);
-
- return new PagedResultDto(notificationCount, notifications);
- }
- }
-}
+using LINGYUN.Abp.Notifications;
+using Microsoft.AspNetCore.Authorization;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Users;
+
+namespace LINGYUN.Abp.MessageService.Notifications
+{
+ [Authorize]
+ public class MyNotificationAppService : ApplicationService, IMyNotificationAppService
+ {
+ protected INotificationSender NotificationSender { get; }
+
+ protected INotificationStore NotificationStore { get; }
+
+ protected INotificationDefinitionManager NotificationDefinitionManager { get; }
+
+ public MyNotificationAppService(
+ INotificationStore notificationStore,
+ INotificationSender notificationSender,
+ INotificationDefinitionManager notificationDefinitionManager)
+ {
+ NotificationStore = notificationStore;
+ NotificationSender = notificationSender;
+ NotificationDefinitionManager = notificationDefinitionManager;
+ }
+
+ public virtual async Task SendNofiterAsync(NotificationSendDto input)
+ {
+ UserIdentifier user = null;
+ if (input.ToUserId.HasValue)
+ {
+ user = new UserIdentifier(input.ToUserId.Value, input.ToUserName);
+ }
+ await NotificationSender
+ .SendNofiterAsync(
+ input.Name,
+ input.Data,
+ user,
+ CurrentTenant.Id,
+ input.Severity);
+ }
+
+ public virtual async Task DeleteAsync(long id)
+ {
+ await NotificationStore
+ .DeleteUserNotificationAsync(
+ CurrentTenant.Id,
+ CurrentUser.GetId(),
+ id);
+ }
+
+ public virtual Task> GetAssignableNotifiersAsync()
+ {
+ var groups = new List();
+
+ foreach (var group in NotificationDefinitionManager.GetGroups())
+ {
+ if (!group.AllowSubscriptionToClients)
+ {
+ continue;
+
+ }
+ var notificationGroup = new NotificationGroupDto
+ {
+ Name = group.Name,
+ DisplayName = group.DisplayName.Localize(StringLocalizerFactory)
+ };
+
+ foreach (var notification in group.Notifications)
+ {
+ if (!notification.AllowSubscriptionToClients)
+ {
+ continue;
+ }
+
+ var notificationChildren = new NotificationDto
+ {
+ Name = notification.Name,
+ DisplayName = notification.DisplayName.Localize(StringLocalizerFactory),
+ Description = notification.Description.Localize(StringLocalizerFactory),
+ Lifetime = notification.NotificationLifetime,
+ Type = notification.NotificationType
+ };
+
+ notificationGroup.Notifications.Add(notificationChildren);
+ }
+
+ groups.Add(notificationGroup);
+ }
+
+ return Task.FromResult(new ListResultDto(groups));
+ }
+
+ public virtual async Task GetAsync(long id)
+ {
+ return await NotificationStore
+ .GetNotificationOrNullAsync(CurrentTenant.Id, id);
+ }
+
+ public virtual async Task> GetListAsync(UserNotificationGetByPagedDto input)
+ {
+ var notificationCount = await NotificationStore
+ .GetUserNotificationsCountAsync(
+ CurrentTenant.Id,
+ CurrentUser.GetId(),
+ input.Filter,
+ input.ReadState);
+
+ var notifications = await NotificationStore
+ .GetUserNotificationsAsync(
+ CurrentTenant.Id, CurrentUser.GetId(),
+ input.Filter, input.Sorting,
+ input.ReadState, input.SkipCount, input.MaxResultCount);
+
+ return new PagedResultDto(notificationCount, notifications);
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Localization/MessageServiceResource.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Localization/MessageServiceResource.cs
index 6f918bea7..589c4c003 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Localization/MessageServiceResource.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Localization/MessageServiceResource.cs
@@ -1,9 +1,9 @@
-using Volo.Abp.Localization;
-
-namespace LINGYUN.Abp.MessageService.Localization
-{
- [LocalizationResourceName("MessageService")]
- public class MessageServiceResource
- {
- }
-}
+using Volo.Abp.Localization;
+
+namespace LINGYUN.Abp.MessageService.Localization
+{
+ [LocalizationResourceName("AbpMessageService")]
+ public class MessageServiceResource
+ {
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceErrorCodes.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceErrorCodes.cs
index f804cc102..1245784b2 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceErrorCodes.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceErrorCodes.cs
@@ -1,99 +1,103 @@
-namespace LINGYUN.Abp.MessageService
-{
- ///
- /// 消息系统错误码设计
- /// 状态码分为两部分 前2位领域 后3位状态
- ///
- ///
- /// 领域部分:
- /// 01 输入
- /// 02 群组
- /// 03 用户
- /// 04 应用
- /// 05 内部
- /// 10 输出
- ///
- ///
- ///
- /// 状态部分:
- /// 200-299 成功
- /// 300-399 成功但有后续操作
- /// 400-499 业务异常
- /// 500-599 内部异常
- /// 900-999 输入输出异常
- ///
- ///
- ///
- public class MessageServiceErrorCodes
- {
- public const string Namespace = "LINGYUN.Abp.Message";
- ///
- /// 消息不完整
- ///
- public const string MessageIncomplete = Namespace + ":01400";
- ///
- /// 您还未加入群组,不能进行操作
- ///
- public const string YouHaveNotJoinedGroup = Namespace + ":01401";
- ///
- /// 已发送群组申请,等待管理员同意
- ///
- public const string YouHaveAddingToGroup = Namespace + ":02301";
- ///
- /// 你需要验证问题才能加入群聊
- ///
- public const string YouNeedValidationQuestingByAddGroup = Namespace + ":02302";
- ///
- /// 管理员已开启全员禁言
- ///
- public const string GroupNotAllowedToSpeak = Namespace + ":02400";
- ///
- /// 管理员已禁止用户发言
- ///
- public const string GroupUserHasBlack = Namespace + ":02403";
- ///
- /// 管理员不允许匿名发言
- ///
- public const string GroupNotAllowedToSpeakAnonymously = Namespace + ":02401";
- ///
- /// 群组不存在或已解散
- ///
- public const string GroupNotFount = Namespace + ":02404";
- ///
- /// 用户已拒接所有消息
- ///
- public const string UserHasRejectAllMessage = Namespace + ":03400";
- ///
- /// 用户已将发信人拉黑
- ///
- public const string UserHasBlack = Namespace + ":03401";
- ///
- /// 用户不允许匿名发言
- ///
- public const string UserNotAllowedToSpeakAnonymously = Namespace + ":03402";
- ///
- /// 用户不接收非好友发言
- ///
- public const string UserHasRejectNotFriendMessage = Namespace + ":03403";
- ///
- /// 接收消息用户不存在或已注销
- ///
- public const string UseNotFount = Namespace + ":03404";
- ///
- /// 用户拒绝添加好友
- ///
- public const string UseRefuseToAddFriend = Namespace + ":03410";
- ///
- /// 对方已是您的好友或已发送验证请求,不能重复操作
- ///
- public const string UseHasBeenAddedTheFriendOrSendAuthorization = Namespace + ":03411";
- ///
- /// 已发送好友申请,等待对方同意
- ///
- public const string YouHaveAddingTheUserToFriend = Namespace + ":03301";
- ///
- /// 你需要验证问题才能添加好友
- ///
- public const string YouNeedValidationQuestingByAddFriend = Namespace + ":03302";
- }
-}
+namespace LINGYUN.Abp.MessageService
+{
+ ///
+ /// 消息系统错误码设计
+ /// 状态码分为两部分 前2位领域 后3位状态
+ ///
+ ///
+ /// 领域部分:
+ /// 01 输入
+ /// 02 群组
+ /// 03 用户
+ /// 04 应用
+ /// 05 内部
+ /// 10 输出
+ ///
+ ///
+ ///
+ /// 状态部分:
+ /// 200-299 成功
+ /// 300-399 成功但有后续操作
+ /// 400-499 业务异常
+ /// 500-599 内部异常
+ /// 900-999 输入输出异常
+ ///
+ ///
+ ///
+ public class MessageServiceErrorCodes
+ {
+ public const string Namespace = "LINGYUN.Abp.Message";
+ ///
+ /// 试图撤回过期消息
+ ///
+ public const string ExpiredMessageCannotBeReCall = Namespace + ":01303";
+ ///
+ /// 消息不完整
+ ///
+ public const string MessageIncomplete = Namespace + ":01400";
+ ///
+ /// 您还未加入群组,不能进行操作
+ ///
+ public const string YouHaveNotJoinedGroup = Namespace + ":01401";
+ ///
+ /// 已发送群组申请,等待管理员同意
+ ///
+ public const string YouHaveAddingToGroup = Namespace + ":02301";
+ ///
+ /// 你需要验证问题才能加入群聊
+ ///
+ public const string YouNeedValidationQuestingByAddGroup = Namespace + ":02302";
+ ///
+ /// 管理员已开启全员禁言
+ ///
+ public const string GroupNotAllowedToSpeak = Namespace + ":02400";
+ ///
+ /// 管理员已禁止用户发言
+ ///
+ public const string GroupUserHasBlack = Namespace + ":02403";
+ ///
+ /// 管理员不允许匿名发言
+ ///
+ public const string GroupNotAllowedToSpeakAnonymously = Namespace + ":02401";
+ ///
+ /// 群组不存在或已解散
+ ///
+ public const string GroupNotFount = Namespace + ":02404";
+ ///
+ /// 用户已拒接所有消息
+ ///
+ public const string UserHasRejectAllMessage = Namespace + ":03400";
+ ///
+ /// 用户已将发信人拉黑
+ ///
+ public const string UserHasBlack = Namespace + ":03401";
+ ///
+ /// 用户不允许匿名发言
+ ///
+ public const string UserNotAllowedToSpeakAnonymously = Namespace + ":03402";
+ ///
+ /// 用户不接收非好友发言
+ ///
+ public const string UserHasRejectNotFriendMessage = Namespace + ":03403";
+ ///
+ /// 接收消息用户不存在或已注销
+ ///
+ public const string UseNotFount = Namespace + ":03404";
+ ///
+ /// 用户拒绝添加好友
+ ///
+ public const string UseRefuseToAddFriend = Namespace + ":03410";
+ ///
+ /// 对方已是您的好友或已发送验证请求,不能重复操作
+ ///
+ public const string UseHasBeenAddedTheFriendOrSendAuthorization = Namespace + ":03411";
+ ///
+ /// 已发送好友申请,等待对方同意
+ ///
+ public const string YouHaveAddingTheUserToFriend = Namespace + ":03301";
+ ///
+ /// 你需要验证问题才能添加好友
+ ///
+ public const string YouNeedValidationQuestingByAddFriend = Namespace + ":03302";
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs
new file mode 100644
index 000000000..208c993db
--- /dev/null
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs
@@ -0,0 +1,30 @@
+using LINGYUN.Abp.MessageService.Localization;
+using Volo.Abp.Localization;
+using Volo.Abp.Settings;
+
+namespace LINGYUN.Abp.MessageService.Settings
+{
+ public class MessageServiceSettingDefinitionProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ context.Add(
+ new SettingDefinition(
+ MessageServiceSettingNames.Messages.RecallExpirationTime,
+ "2",
+ L("DisplayName:RecallExpirationTime"),
+ L("Description:RecallExpirationTime"),
+ isVisibleToClients: false,
+ isEncrypted: false)
+ .WithProviders(
+ GlobalSettingValueProvider.ProviderName,
+ TenantSettingValueProvider.ProviderName)
+ );
+ }
+
+ protected ILocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceSettingNames.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingNames.cs
similarity index 53%
rename from aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceSettingNames.cs
rename to aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingNames.cs
index 0b4a121fe..700b1d35a 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/MessageServiceSettingNames.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingNames.cs
@@ -1,16 +1,25 @@
-namespace LINGYUN.Abp.MessageService
-{
- public class MessageServiceSettingNames
- {
- public const string GroupName = "Abp.MessageService";
-
- public class Notifications
- {
- public const string Default = GroupName + ".Notifications";
- ///
- /// 清理过期消息批次
- ///
- public const string CleanupExpirationBatchCount = Default + ".CleanupExpirationBatchCount";
- }
- }
-}
+namespace LINGYUN.Abp.MessageService.Settings
+{
+ public class MessageServiceSettingNames
+ {
+ public const string GroupName = "Abp.MessageService";
+
+ public class Notifications
+ {
+ public const string Default = GroupName + ".Notifications";
+ ///
+ /// 清理过期消息批次
+ ///
+ public const string CleanupExpirationBatchCount = Default + ".CleanupExpirationBatchCount";
+ }
+
+ public class Messages
+ {
+ public const string Default = GroupName + ".Messages";
+ ///
+ /// 撤回消息过期时间(分)
+ ///
+ public const string RecallExpirationTime = Default + ".RecallExpirationTime";
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/FriendStore.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/FriendStore.cs
index 04e744451..ba239fa32 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/FriendStore.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/FriendStore.cs
@@ -1,280 +1,277 @@
-using LINGYUN.Abp.IM.Contract;
-using Microsoft.Extensions.Logging;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Volo.Abp;
-using Volo.Abp.Caching;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.MultiTenancy;
-using Volo.Abp.Timing;
-using Volo.Abp.Uow;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class FriendStore : IFriendStore, ITransientDependency
- {
- private readonly IClock _clock;
- private readonly ILogger _logger;
- private readonly ICurrentTenant _currentTenant;
- private readonly IDistributedCache _cache;
- private readonly IUserChatFriendRepository _userChatFriendRepository;
- private readonly IUserChatSettingRepository _userChatSettingRepository;
-
- public FriendStore(
- IClock clock,
- ILogger logger,
- ICurrentTenant currentTenant,
- IDistributedCache cache,
- IUserChatFriendRepository userChatFriendRepository,
- IUserChatSettingRepository userChatSettingRepository
- )
- {
- _clock = clock;
- _cache = cache;
- _logger = logger;
- _currentTenant = currentTenant;
- _userChatFriendRepository = userChatFriendRepository;
- _userChatSettingRepository = userChatSettingRepository;
- }
-
- public virtual async Task IsFriendAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default
- )
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatFriendRepository.IsFriendAsync(userId, friendId, cancellationToken);
- }
- }
-
- [UnitOfWork]
- public virtual async Task AddMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- string remarkName = "",
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- if (!await _userChatFriendRepository.IsAddedAsync(userId, friendId))
- {
- var userFriend = new UserChatFriend(userId, friendId, remarkName);
- userFriend.SetStatus(UserFriendStatus.Added);
-
- await _userChatFriendRepository.InsertAsync(userFriend);
- }
-
- var userChatFriend = await _userChatFriendRepository
- .FindByUserFriendIdAsync(friendId, userId);
-
- userChatFriend.SetStatus(UserFriendStatus.Added);
-
- await _userChatFriendRepository.UpdateAsync(userChatFriend, cancellationToken: cancellationToken);
- }
- }
-
- [UnitOfWork]
- public virtual async Task AddRequestAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- string remarkName = "",
- string description = "",
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- if (await _userChatFriendRepository.IsAddedAsync(userId, friendId))
- {
- throw new BusinessException(MessageServiceErrorCodes.UseHasBeenAddedTheFriendOrSendAuthorization);
- }
-
- var status = UserFriendStatus.NeedValidation;
- var userChatSetting = await _userChatSettingRepository.FindByUserIdAsync(friendId, cancellationToken);
- if (userChatSetting != null)
- {
- if (!userChatSetting.AllowAddFriend)
- {
- throw new BusinessException(MessageServiceErrorCodes.UseRefuseToAddFriend);
- }
-
- status = userChatSetting.RequireAddFriendValition
- ? UserFriendStatus.NeedValidation
- : UserFriendStatus.Added;
- }
-
- var userChatFriend = new UserChatFriend(userId, friendId, remarkName, description, tenantId)
- {
- CreationTime = _clock.Now,
- CreatorId = userId,
- };
- userChatFriend.SetStatus(status);
-
- await _userChatFriendRepository.InsertAsync(userChatFriend, cancellationToken: cancellationToken);
-
- return new UserAddFriendResult(status);
- }
- }
-
- [UnitOfWork]
- public virtual async Task AddShieldMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default)
- {
- await ChangeFriendShieldAsync(tenantId, userId, friendId, true, cancellationToken);
- }
-
- public virtual async Task> GetListAsync(
- Guid? tenantId,
- Guid userId,
- string sorting = nameof(UserFriend.UserId),
- bool reverse = false,
- CancellationToken cancellationToken = default
- )
- {
- using (_currentTenant.Change(tenantId))
- {
- return await GetAllFriendByCacheItemAsync(userId, sorting, reverse, cancellationToken);
- }
- }
-
- public virtual async Task GetCountAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatFriendRepository
- .GetMembersCountAsync(userId, filter, cancellationToken);
- }
- }
-
- public virtual async Task> GetPagedListAsync(
- Guid? tenantId,
- Guid userId,
- string filter = "",
- string sorting = nameof(UserFriend.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatFriendRepository
- .GetMembersAsync(userId, filter, sorting, reverse,
- skipCount, maxResultCount, cancellationToken);
- }
- }
-
- public virtual async Task> GetLastContactListAsync(
- Guid? tenantId,
- Guid userId,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatFriendRepository
- .GetLastContactMembersAsync(userId,
- skipCount, maxResultCount, cancellationToken);
- }
- }
-
- public virtual async Task GetMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatFriendRepository
- .GetMemberAsync(userId, friendId, cancellationToken);
- }
- }
-
- [UnitOfWork]
- public virtual async Task RemoveMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- var userChatFriend = await _userChatFriendRepository.FindByUserFriendIdAsync(userId, friendId, cancellationToken);
- if (userChatFriend != null)
- {
- await _userChatFriendRepository.DeleteAsync(userChatFriend, cancellationToken: cancellationToken);
- }
- }
- }
-
- [UnitOfWork]
- public virtual async Task RemoveShieldMemberAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default)
- {
- await ChangeFriendShieldAsync(tenantId, userId, friendId, false, cancellationToken);
- }
-
-
- protected virtual async Task ChangeFriendShieldAsync(
- Guid? tenantId,
- Guid userId,
- Guid friendId,
- bool isBlack = false,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- var userChatFriend = await _userChatFriendRepository.FindByUserFriendIdAsync(userId, friendId, cancellationToken);
- if (userChatFriend != null)
- {
- userChatFriend.Black = isBlack;
- await _userChatFriendRepository.UpdateAsync(userChatFriend, cancellationToken: cancellationToken);
- }
- }
- }
-
- protected virtual async Task> GetAllFriendByCacheItemAsync(
- Guid userId,
- string sorting = nameof(UserFriend.UserId),
- bool reverse = false,
- CancellationToken cancellationToken = default
- )
- {
- var cacheKey = UserFriendCacheItem.CalculateCacheKey(userId.ToString());
- _logger.LogDebug($"FriendStore.GetCacheItemAsync: {cacheKey}");
-
- var cacheItem = await _cache.GetAsync(cacheKey, token: cancellationToken);
- if (cacheItem != null)
- {
- _logger.LogDebug($"Found in the cache: {cacheKey}");
- return cacheItem.Friends;
- }
-
- _logger.LogDebug($"Not found in the cache: {cacheKey}");
- var friends = await _userChatFriendRepository
- .GetAllMembersAsync(userId, sorting, reverse, cancellationToken);
- cacheItem = new UserFriendCacheItem(friends);
- _logger.LogDebug($"Set item in the cache: {cacheKey}");
- await _cache.SetAsync(cacheKey, cacheItem, token: cancellationToken);
- return friends;
- }
- }
-}
+using LINGYUN.Abp.IM.Contract;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Caching;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.Timing;
+using Volo.Abp.Uow;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class FriendStore : IFriendStore, ITransientDependency
+ {
+ private readonly IClock _clock;
+ private readonly ILogger _logger;
+ private readonly ICurrentTenant _currentTenant;
+ private readonly IDistributedCache _cache;
+ private readonly IUserChatFriendRepository _userChatFriendRepository;
+ private readonly IUserChatSettingRepository _userChatSettingRepository;
+
+ public FriendStore(
+ IClock clock,
+ ILogger logger,
+ ICurrentTenant currentTenant,
+ IDistributedCache cache,
+ IUserChatFriendRepository userChatFriendRepository,
+ IUserChatSettingRepository userChatSettingRepository
+ )
+ {
+ _clock = clock;
+ _cache = cache;
+ _logger = logger;
+ _currentTenant = currentTenant;
+ _userChatFriendRepository = userChatFriendRepository;
+ _userChatSettingRepository = userChatSettingRepository;
+ }
+
+ public virtual async Task IsFriendAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default
+ )
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _userChatFriendRepository.IsFriendAsync(userId, friendId, cancellationToken);
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task AddMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ string remarkName = "",
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ if (!await _userChatFriendRepository.IsAddedAsync(userId, friendId))
+ {
+ var userFriend = new UserChatFriend(userId, friendId, remarkName);
+ userFriend.SetStatus(UserFriendStatus.Added);
+
+ await _userChatFriendRepository.InsertAsync(userFriend);
+ }
+
+ var userChatFriend = await _userChatFriendRepository
+ .FindByUserFriendIdAsync(friendId, userId);
+
+ userChatFriend.SetStatus(UserFriendStatus.Added);
+
+ await _userChatFriendRepository.UpdateAsync(userChatFriend, cancellationToken: cancellationToken);
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task AddRequestAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ string remarkName = "",
+ string description = "",
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ if (await _userChatFriendRepository.IsAddedAsync(userId, friendId))
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UseHasBeenAddedTheFriendOrSendAuthorization);
+ }
+
+ var status = UserFriendStatus.NeedValidation;
+ var userChatSetting = await _userChatSettingRepository.FindByUserIdAsync(friendId, cancellationToken);
+ if (userChatSetting != null)
+ {
+ if (!userChatSetting.AllowAddFriend)
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UseRefuseToAddFriend);
+ }
+
+ status = userChatSetting.RequireAddFriendValition
+ ? UserFriendStatus.NeedValidation
+ : UserFriendStatus.Added;
+ }
+
+ var userChatFriend = new UserChatFriend(userId, friendId, remarkName, description, tenantId)
+ {
+ CreationTime = _clock.Now,
+ CreatorId = userId,
+ };
+ userChatFriend.SetStatus(status);
+
+ await _userChatFriendRepository.InsertAsync(userChatFriend, cancellationToken: cancellationToken);
+
+ return new UserAddFriendResult(status);
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task AddShieldMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default)
+ {
+ await ChangeFriendShieldAsync(tenantId, userId, friendId, true, cancellationToken);
+ }
+
+ public virtual async Task> GetListAsync(
+ Guid? tenantId,
+ Guid userId,
+ string sorting = nameof(UserFriend.UserId),
+ CancellationToken cancellationToken = default
+ )
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await GetAllFriendByCacheItemAsync(userId, sorting, cancellationToken);
+ }
+ }
+
+ public virtual async Task GetCountAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _userChatFriendRepository
+ .GetMembersCountAsync(userId, filter, cancellationToken);
+ }
+ }
+
+ public virtual async Task> GetPagedListAsync(
+ Guid? tenantId,
+ Guid userId,
+ string filter = "",
+ string sorting = nameof(UserFriend.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _userChatFriendRepository
+ .GetMembersAsync(userId, filter, sorting,
+ skipCount, maxResultCount, cancellationToken);
+ }
+ }
+
+ public virtual async Task> GetLastContactListAsync(
+ Guid? tenantId,
+ Guid userId,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _userChatFriendRepository
+ .GetLastContactMembersAsync(userId,
+ skipCount, maxResultCount, cancellationToken);
+ }
+ }
+
+ public virtual async Task GetMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _userChatFriendRepository
+ .GetMemberAsync(userId, friendId, cancellationToken);
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task RemoveMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ var userChatFriend = await _userChatFriendRepository.FindByUserFriendIdAsync(userId, friendId, cancellationToken);
+ if (userChatFriend != null)
+ {
+ await _userChatFriendRepository.DeleteAsync(userChatFriend, cancellationToken: cancellationToken);
+ }
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task RemoveShieldMemberAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default)
+ {
+ await ChangeFriendShieldAsync(tenantId, userId, friendId, false, cancellationToken);
+ }
+
+
+ protected virtual async Task ChangeFriendShieldAsync(
+ Guid? tenantId,
+ Guid userId,
+ Guid friendId,
+ bool isBlack = false,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ var userChatFriend = await _userChatFriendRepository.FindByUserFriendIdAsync(userId, friendId, cancellationToken);
+ if (userChatFriend != null)
+ {
+ userChatFriend.Black = isBlack;
+ await _userChatFriendRepository.UpdateAsync(userChatFriend, cancellationToken: cancellationToken);
+ }
+ }
+ }
+
+ protected virtual async Task> GetAllFriendByCacheItemAsync(
+ Guid userId,
+ string sorting = nameof(UserFriend.UserId),
+ CancellationToken cancellationToken = default
+ )
+ {
+ var cacheKey = UserFriendCacheItem.CalculateCacheKey(userId.ToString());
+ _logger.LogDebug($"FriendStore.GetCacheItemAsync: {cacheKey}");
+
+ var cacheItem = await _cache.GetAsync(cacheKey, token: cancellationToken);
+ if (cacheItem != null)
+ {
+ _logger.LogDebug($"Found in the cache: {cacheKey}");
+ return cacheItem.Friends;
+ }
+
+ _logger.LogDebug($"Not found in the cache: {cacheKey}");
+ var friends = await _userChatFriendRepository
+ .GetAllMembersAsync(userId, sorting, cancellationToken);
+ cacheItem = new UserFriendCacheItem(friends);
+ _logger.LogDebug($"Set item in the cache: {cacheKey}");
+ await _cache.SetAsync(cacheKey, cacheItem, token: cancellationToken);
+ return friends;
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IMessageRepository.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IMessageRepository.cs
index 43b45d938..920209bd5 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IMessageRepository.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IMessageRepository.cs
@@ -1,100 +1,104 @@
-using LINGYUN.Abp.IM.Messages;
-using LINGYUN.Abp.MessageService.Group;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public interface IMessageRepository
- {
- Task InsertUserMessageAsync(
- UserMessage userMessage,
- CancellationToken cancellationToken = default);
-
- Task InsertGroupMessageAsync(
- GroupMessage groupMessage,
- CancellationToken cancellationToken = default);
-
- Task GetUserMessageAsync(
- long id,
- CancellationToken cancellationToken = default);
-
- Task GetGroupMessageAsync(
- long id,
- CancellationToken cancellationToken = default);
-
- Task GetUserMessagesCountAsync(
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
-
- Task GetCountAsync(
- long groupId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
-
- Task GetCountAsync(
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
-
- Task> GetLastMessagesByOneFriendAsync(
- Guid userId,
- string sorting = nameof(LastChatMessage.SendTime),
- bool reverse = true,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task> GetUserMessagesAsync(
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- string sorting = nameof(UserMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task GetGroupMessagesCountAsync(
- long groupId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
-
- Task> GetGroupMessagesAsync(
- long groupId,
- string filter = "",
- string sorting = nameof(UserMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task GetUserGroupMessagesCountAsync(
- Guid sendUserId,
- long groupId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default);
-
- Task> GetUserGroupMessagesAsync(
- Guid sendUserId,
- long groupId,
- string filter = "",
- string sorting = nameof(UserMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
- }
-}
+using LINGYUN.Abp.IM.Messages;
+using LINGYUN.Abp.MessageService.Group;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public interface IMessageRepository
+ {
+ Task InsertUserMessageAsync(
+ UserMessage userMessage,
+ CancellationToken cancellationToken = default);
+
+ Task UpdateUserMessageAsync(
+ UserMessage userMessage,
+ CancellationToken cancellationToken = default);
+
+ Task InsertGroupMessageAsync(
+ GroupMessage groupMessage,
+ CancellationToken cancellationToken = default);
+
+ Task UpdateGroupMessageAsync(
+ GroupMessage groupMessage,
+ CancellationToken cancellationToken = default);
+
+ Task GetUserMessageAsync(
+ long id,
+ CancellationToken cancellationToken = default);
+
+ Task GetGroupMessageAsync(
+ long id,
+ CancellationToken cancellationToken = default);
+
+ Task GetUserMessagesCountAsync(
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+
+ Task GetCountAsync(
+ long groupId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+
+ Task GetCountAsync(
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetLastMessagesByOneFriendAsync(
+ Guid userId,
+ string sorting = nameof(LastChatMessage.SendTime),
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserMessagesAsync(
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ string sorting = nameof(UserMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task GetGroupMessagesCountAsync(
+ long groupId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetGroupMessagesAsync(
+ long groupId,
+ string filter = "",
+ string sorting = nameof(UserMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task GetUserGroupMessagesCountAsync(
+ Guid sendUserId,
+ long groupId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetUserGroupMessagesAsync(
+ Guid sendUserId,
+ long groupId,
+ string filter = "",
+ string sorting = nameof(UserMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatCardRepository.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatCardRepository.cs
index e55c9ab96..9cbbbd0d2 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatCardRepository.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatCardRepository.cs
@@ -1,38 +1,37 @@
-using LINGYUN.Abp.IM;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Volo.Abp.Domain.Repositories;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public interface IUserChatCardRepository : IBasicRepository
- {
- Task CheckUserIdExistsAsync(
- Guid userId,
- CancellationToken cancellationToken = default);
-
- Task GetMemberCountAsync(
- string findUserName = "",
- int? startAge = null,
- int? endAge = null,
- Sex? sex = null,
- CancellationToken cancellationToken = default);
-
- Task> GetMembersAsync(
- string findUserName = "",
- int? startAge = null,
- int? endAge = null,
- Sex? sex = null,
- string sorting = nameof(UserChatCard.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task GetMemberAsync(
- Guid findUserId,
- CancellationToken cancellationToken = default);
- }
-}
+using LINGYUN.Abp.IM;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public interface IUserChatCardRepository : IBasicRepository
+ {
+ Task CheckUserIdExistsAsync(
+ Guid userId,
+ CancellationToken cancellationToken = default);
+
+ Task GetMemberCountAsync(
+ string findUserName = "",
+ int? startAge = null,
+ int? endAge = null,
+ Sex? sex = null,
+ CancellationToken cancellationToken = default);
+
+ Task> GetMembersAsync(
+ string findUserName = "",
+ int? startAge = null,
+ int? endAge = null,
+ Sex? sex = null,
+ string sorting = nameof(UserChatCard.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task GetMemberAsync(
+ Guid findUserId,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatFriendRepository.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatFriendRepository.cs
index debc5aa57..a67c81fdb 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatFriendRepository.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/IUserChatFriendRepository.cs
@@ -1,58 +1,56 @@
-using LINGYUN.Abp.IM.Contract;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Volo.Abp.Domain.Repositories;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public interface IUserChatFriendRepository : IBasicRepository
- {
- Task IsFriendAsync(
- Guid userId,
- Guid frientId,
- CancellationToken cancellationToken = default);
-
- Task IsAddedAsync(
- Guid userId,
- Guid frientId,
- CancellationToken cancellationToken = default);
-
- Task FindByUserFriendIdAsync(
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
-
- Task> GetAllMembersAsync(
- Guid userId,
- string sorting = nameof(UserChatFriend.RemarkName),
- bool reverse = false,
- CancellationToken cancellationToken = default);
-
- Task GetMembersCountAsync(
- Guid userId,
- string filter = "",
- CancellationToken cancellationToken = default);
-
- Task> GetMembersAsync(
- Guid userId,
- string filter = "",
- string sorting = nameof(UserChatFriend.UserId),
- bool reverse = false,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task> GetLastContactMembersAsync(
- Guid userId,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default);
-
- Task GetMemberAsync(
- Guid userId,
- Guid friendId,
- CancellationToken cancellationToken = default);
- }
-}
+using LINGYUN.Abp.IM.Contract;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public interface IUserChatFriendRepository : IBasicRepository
+ {
+ Task IsFriendAsync(
+ Guid userId,
+ Guid frientId,
+ CancellationToken cancellationToken = default);
+
+ Task IsAddedAsync(
+ Guid userId,
+ Guid frientId,
+ CancellationToken cancellationToken = default);
+
+ Task FindByUserFriendIdAsync(
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+
+ Task> GetAllMembersAsync(
+ Guid userId,
+ string sorting = nameof(UserChatFriend.RemarkName),
+ CancellationToken cancellationToken = default);
+
+ Task GetMembersCountAsync(
+ Guid userId,
+ string filter = "",
+ CancellationToken cancellationToken = default);
+
+ Task> GetMembersAsync(
+ Guid userId,
+ string filter = "",
+ string sorting = nameof(UserChatFriend.UserId),
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task> GetLastContactMembersAsync(
+ Guid userId,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default);
+
+ Task GetMemberAsync(
+ Guid userId,
+ Guid friendId,
+ CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/Message.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/Message.cs
index bee4de691..d263a1fce 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/Message.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/Message.cs
@@ -1,51 +1,52 @@
-using LINGYUN.Abp.IM.Messages;
-using System;
-using Volo.Abp.Data;
-using Volo.Abp.Domain.Entities.Auditing;
-using Volo.Abp.MultiTenancy;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public abstract class Message : CreationAuditedAggregateRoot, IMultiTenant
- {
- ///
- /// 租户
- ///
- public virtual Guid? TenantId { get; protected set; }
- ///
- /// 消息标识
- ///
- public virtual long MessageId { get; protected set; }
- ///
- /// 发送用户名称
- ///
- public virtual string SendUserName { get; protected set; }
- ///
- /// 内容
- ///
- public virtual string Content { get; protected set; }
- ///
- /// 消息类型
- ///
- public virtual MessageType Type { get; protected set; }
- ///
- /// 发送状态
- ///
- public virtual MessageSendState SendState { get; protected set; }
- protected Message() { }
- public Message(long id, Guid sendUserId, string sendUserName, string content, MessageType type = MessageType.Text)
- {
- MessageId = id;
- CreatorId = sendUserId;
- SendUserName = sendUserName;
- Content = content;
- Type = type;
- CreationTime = DateTime.Now;
- }
-
- public void ChangeSendState(MessageSendState state = MessageSendState.Send)
- {
- SendState = state;
- }
- }
-}
+using LINGYUN.Abp.IM.Messages;
+using System;
+using Volo.Abp.Data;
+using Volo.Abp.Domain.Entities.Auditing;
+using Volo.Abp.MultiTenancy;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public abstract class Message : CreationAuditedAggregateRoot, IMultiTenant
+ {
+ ///
+ /// 租户
+ ///
+ public virtual Guid? TenantId { get; protected set; }
+ ///
+ /// 消息标识
+ ///
+ public virtual long MessageId { get; protected set; }
+ ///
+ /// 发送用户名称
+ ///
+ public virtual string SendUserName { get; protected set; }
+ ///
+ /// 内容
+ ///
+ public virtual string Content { get; protected set; }
+ ///
+ /// 消息类型
+ ///
+ public virtual MessageType Type { get; protected set; }
+ ///
+ /// 发送状态
+ ///
+ public virtual MessageState SendState { get; protected set; }
+ protected Message() { }
+ public Message(long id, Guid sendUserId, string sendUserName, string content, MessageType type = MessageType.Text)
+ {
+ MessageId = id;
+ CreatorId = sendUserId;
+ SendUserName = sendUserName;
+ Content = content;
+ Type = type;
+ CreationTime = DateTime.Now;
+ ChangeSendState();
+ }
+
+ public void ChangeSendState(MessageState state = MessageState.Send)
+ {
+ SendState = state;
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageProcessor.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageProcessor.cs
new file mode 100644
index 000000000..bda531003
--- /dev/null
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageProcessor.cs
@@ -0,0 +1,82 @@
+using LINGYUN.Abp.IM.Messages;
+using LINGYUN.Abp.MessageService.Settings;
+using System;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Settings;
+using Volo.Abp.Timing;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ [Dependency(ReplaceServices = true)]
+ public class MessageProcessor : IMessageProcessor, ITransientDependency
+ {
+ private readonly IClock _clock;
+ private readonly IMessageRepository _repository;
+ private readonly ISettingProvider _settingProvider;
+
+ public MessageProcessor(IMessageRepository repository)
+ {
+ _repository = repository;
+ }
+
+ public virtual async Task ReadAsync(ChatMessage message)
+ {
+ if (!message.GroupId.IsNullOrWhiteSpace())
+ {
+ long groupId = long.Parse(message.GroupId);
+ var groupMessage = await _repository.GetGroupMessageAsync(groupId);
+ groupMessage.ChangeSendState(MessageState.Read);
+
+ await _repository.UpdateGroupMessageAsync(groupMessage);
+ }
+ else
+ {
+ long messageId = long.Parse(message.MessageId);
+ var userMessage = await _repository.GetUserMessageAsync(messageId);
+ userMessage.ChangeSendState(MessageState.Read);
+
+ await _repository.UpdateUserMessageAsync(userMessage);
+ }
+ }
+
+ public virtual async Task ReCallAsync(ChatMessage message)
+ {
+ var expiration = await _settingProvider.GetAsync(
+ MessageServiceSettingNames.Messages.RecallExpirationTime, 2d);
+
+ Func hasExpiredMessage = (Message msg) =>
+ msg.CreationTime.AddMinutes(expiration) < _clock.Now;
+
+ if (!message.GroupId.IsNullOrWhiteSpace())
+ {
+ long groupId = long.Parse(message.GroupId);
+ var groupMessage = await _repository.GetGroupMessageAsync(groupId);
+ if (hasExpiredMessage(groupMessage))
+ {
+ throw new BusinessException(MessageServiceErrorCodes.ExpiredMessageCannotBeReCall)
+ .WithData("Time", expiration);
+ }
+
+ groupMessage.ChangeSendState(MessageState.ReCall);
+
+ await _repository.UpdateGroupMessageAsync(groupMessage);
+ }
+ else
+ {
+ long messageId = long.Parse(message.MessageId);
+ var userMessage = await _repository.GetUserMessageAsync(messageId);
+ if (hasExpiredMessage(userMessage))
+ {
+ throw new BusinessException(MessageServiceErrorCodes.ExpiredMessageCannotBeReCall)
+ .WithData("Time", expiration);
+ }
+
+ userMessage.ChangeSendState(MessageState.ReCall);
+
+ await _repository.UpdateUserMessageAsync(userMessage);
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageStore.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageStore.cs
index a9e128ef0..5254d8ae6 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageStore.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/MessageStore.cs
@@ -1,257 +1,254 @@
-using LINGYUN.Abp.IM.Contract;
-using LINGYUN.Abp.IM.Messages;
-using LINGYUN.Abp.MessageService.Group;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Volo.Abp;
-using Volo.Abp.Data;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.MultiTenancy;
-using Volo.Abp.ObjectMapping;
-using Volo.Abp.Uow;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class MessageStore : IMessageStore, ITransientDependency
- {
- private readonly IFriendStore _friendStore;
-
- private readonly IObjectMapper _objectMapper;
-
- private readonly ICurrentTenant _currentTenant;
-
- private readonly IUnitOfWorkManager _unitOfWorkManager;
-
- private readonly IGroupRepository _groupRepository;
-
- private readonly IMessageRepository _messageRepository;
-
- private readonly IUserChatSettingRepository _userChatSettingRepository;
- public MessageStore(
- IFriendStore friendStore,
- IObjectMapper objectMapper,
- ICurrentTenant currentTenant,
- IUnitOfWorkManager unitOfWorkManager,
- IGroupRepository groupRepository,
- IMessageRepository messageRepository,
- IUserChatSettingRepository userChatSettingRepository)
- {
- _friendStore = friendStore;
- _objectMapper = objectMapper;
- _currentTenant = currentTenant;
- _unitOfWorkManager = unitOfWorkManager;
- _groupRepository = groupRepository;
- _messageRepository = messageRepository;
- _userChatSettingRepository = userChatSettingRepository;
- }
-
- public virtual async Task StoreMessageAsync(
- ChatMessage chatMessage,
- CancellationToken cancellationToken = default)
- {
- using (var unitOfWork = _unitOfWorkManager.Begin())
- {
- using (_currentTenant.Change(chatMessage.TenantId))
- {
- if (!chatMessage.GroupId.IsNullOrWhiteSpace())
- {
- long groupId = long.Parse(chatMessage.GroupId);
- await StoreGroupMessageAsync(chatMessage, groupId, cancellationToken);
- }
- else
- {
- await StoreUserMessageAsync(chatMessage, cancellationToken);
- }
- await unitOfWork.SaveChangesAsync(cancellationToken);
- }
- }
- }
-
- public virtual async Task> GetGroupMessageAsync(
- Guid? tenantId,
- long groupId,
- string filter = "",
- string sorting = nameof(ChatMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- var groupMessages = await _messageRepository
- .GetGroupMessagesAsync(groupId, filter, sorting, reverse, type, skipCount, maxResultCount, cancellationToken);
-
- var chatMessages = _objectMapper.Map, List>(groupMessages);
-
- return chatMessages;
- }
- }
-
- public virtual async Task> GetChatMessageAsync(
- Guid? tenantId,
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- string sorting = nameof(ChatMessage.MessageId),
- bool reverse = true,
- MessageType? type = null,
- int skipCount = 0,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- var userMessages = await _messageRepository
- .GetUserMessagesAsync(sendUserId, receiveUserId, filter, sorting, reverse, type, skipCount, maxResultCount, cancellationToken);
-
- var chatMessages = _objectMapper.Map, List>(userMessages);
-
- return chatMessages;
- }
- }
-
- public virtual async Task> GetLastChatMessagesAsync(
- Guid? tenantId,
- Guid userId,
- string sorting = nameof(LastChatMessage.SendTime),
- bool reverse = true,
- int maxResultCount = 10,
- CancellationToken cancellationToken = default
- )
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _messageRepository
- .GetLastMessagesByOneFriendAsync(userId, sorting, reverse, maxResultCount, cancellationToken);
- }
- }
-
- public virtual async Task GetGroupMessageCountAsync(
- Guid? tenantId,
- long groupId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _messageRepository.GetCountAsync(groupId, filter, type, cancellationToken);
- }
- }
-
- public virtual async Task GetChatMessageCountAsync(
- Guid? tenantId,
- Guid sendUserId,
- Guid receiveUserId,
- string filter = "",
- MessageType? type = null,
- CancellationToken cancellationToken = default)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _messageRepository.GetCountAsync(sendUserId, receiveUserId, filter, type, cancellationToken);
- }
- }
-
- protected virtual async Task StoreUserMessageAsync(
- ChatMessage chatMessage,
- CancellationToken cancellationToken = default)
- {
- // 检查接收用户
- if (!chatMessage.ToUserId.HasValue)
- {
- throw new BusinessException(MessageServiceErrorCodes.UseNotFount);
- }
-
- var myFriend = await _friendStore
- .GetMemberAsync(chatMessage.TenantId, chatMessage.ToUserId.Value, chatMessage.FormUserId, cancellationToken);
-
- var userChatSetting = await _userChatSettingRepository
- .FindByUserIdAsync(chatMessage.ToUserId.Value, cancellationToken);
-
- if (userChatSetting != null)
- {
- if (!userChatSetting.AllowReceiveMessage)
- {
- // 当前发送的用户不接收消息
- throw new BusinessException(MessageServiceErrorCodes.UserHasRejectAllMessage);
- }
-
- if (myFriend == null && !chatMessage.IsAnonymous)
- {
- throw new BusinessException(MessageServiceErrorCodes.UserHasRejectNotFriendMessage);
- }
-
- if (chatMessage.IsAnonymous && !userChatSetting.AllowAnonymous)
- {
- // 当前用户不允许匿名发言
- throw new BusinessException(MessageServiceErrorCodes.UserNotAllowedToSpeakAnonymously);
- }
- }
- else
- {
- if (myFriend == null)
- {
- throw new BusinessException(MessageServiceErrorCodes.UserHasRejectNotFriendMessage);
- }
- }
- if (myFriend?.Black == true)
- {
- throw new BusinessException(MessageServiceErrorCodes.UserHasBlack);
- }
-
- var message = new UserMessage(
- long.Parse(chatMessage.MessageId),
- chatMessage.FormUserId,
- chatMessage.FormUserName,
- chatMessage.Content,
- chatMessage.MessageType);
-
- message.SendToUser(chatMessage.ToUserId.Value);
- message.SetProperty(nameof(ChatMessage.IsAnonymous), chatMessage.IsAnonymous);
-
- await _messageRepository.InsertUserMessageAsync(message, cancellationToken);
- }
-
- protected virtual async Task StoreGroupMessageAsync(
- ChatMessage chatMessage,
- long groupId,
- CancellationToken cancellationToken = default)
- {
- var userHasBlacked = await _groupRepository
- .UserHasBlackedAsync(groupId, chatMessage.FormUserId, cancellationToken);
- if (userHasBlacked)
- {
- // 当前发送的用户已被拉黑
- throw new BusinessException(MessageServiceErrorCodes.GroupUserHasBlack);
- }
- var group = await _groupRepository.GetByIdAsync(groupId, cancellationToken);
- if (!group.AllowSendMessage)
- {
- // 当前群组不允许发言
- throw new BusinessException(MessageServiceErrorCodes.GroupNotAllowedToSpeak);
- }
- if (chatMessage.IsAnonymous && !group.AllowAnonymous)
- {
- // 当前群组不允许匿名发言
- throw new BusinessException(MessageServiceErrorCodes.GroupNotAllowedToSpeakAnonymously);
- }
-
- var message = new GroupMessage(
- long.Parse(chatMessage.MessageId),
- chatMessage.FormUserId,
- chatMessage.FormUserName,
- chatMessage.Content,
- chatMessage.MessageType);
-
- message.SendToGroup(groupId);
- message.SetProperty(nameof(ChatMessage.IsAnonymous), chatMessage.IsAnonymous);
-
- await _messageRepository.InsertGroupMessageAsync(message, cancellationToken);
- }
- }
-}
+using LINGYUN.Abp.IM.Contract;
+using LINGYUN.Abp.IM.Messages;
+using LINGYUN.Abp.MessageService.Group;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.ObjectMapping;
+using Volo.Abp.Uow;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class MessageStore : IMessageStore, ITransientDependency
+ {
+ private readonly IFriendStore _friendStore;
+
+ private readonly IObjectMapper _objectMapper;
+
+ private readonly ICurrentTenant _currentTenant;
+
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+ private readonly IGroupRepository _groupRepository;
+
+ private readonly IMessageRepository _messageRepository;
+
+ private readonly IUserChatSettingRepository _userChatSettingRepository;
+ public MessageStore(
+ IFriendStore friendStore,
+ IObjectMapper objectMapper,
+ ICurrentTenant currentTenant,
+ IUnitOfWorkManager unitOfWorkManager,
+ IGroupRepository groupRepository,
+ IMessageRepository messageRepository,
+ IUserChatSettingRepository userChatSettingRepository)
+ {
+ _friendStore = friendStore;
+ _objectMapper = objectMapper;
+ _currentTenant = currentTenant;
+ _unitOfWorkManager = unitOfWorkManager;
+ _groupRepository = groupRepository;
+ _messageRepository = messageRepository;
+ _userChatSettingRepository = userChatSettingRepository;
+ }
+
+ public virtual async Task StoreMessageAsync(
+ ChatMessage chatMessage,
+ CancellationToken cancellationToken = default)
+ {
+ using (var unitOfWork = _unitOfWorkManager.Begin())
+ {
+ using (_currentTenant.Change(chatMessage.TenantId))
+ {
+ if (!chatMessage.GroupId.IsNullOrWhiteSpace())
+ {
+ long groupId = long.Parse(chatMessage.GroupId);
+ await StoreGroupMessageAsync(chatMessage, groupId, cancellationToken);
+ }
+ else
+ {
+ await StoreUserMessageAsync(chatMessage, cancellationToken);
+ }
+ await unitOfWork.SaveChangesAsync(cancellationToken);
+ }
+ }
+ }
+
+ public virtual async Task> GetGroupMessageAsync(
+ Guid? tenantId,
+ long groupId,
+ string filter = "",
+ string sorting = nameof(ChatMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ var groupMessages = await _messageRepository
+ .GetGroupMessagesAsync(groupId, filter, sorting, type, skipCount, maxResultCount, cancellationToken);
+
+ var chatMessages = _objectMapper.Map, List>(groupMessages);
+
+ return chatMessages;
+ }
+ }
+
+ public virtual async Task> GetChatMessageAsync(
+ Guid? tenantId,
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ string sorting = nameof(ChatMessage.MessageId),
+ MessageType? type = null,
+ int skipCount = 0,
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ var userMessages = await _messageRepository
+ .GetUserMessagesAsync(sendUserId, receiveUserId, filter, sorting, type, skipCount, maxResultCount, cancellationToken);
+
+ var chatMessages = _objectMapper.Map, List>(userMessages);
+
+ return chatMessages;
+ }
+ }
+
+ public virtual async Task> GetLastChatMessagesAsync(
+ Guid? tenantId,
+ Guid userId,
+ string sorting = nameof(LastChatMessage.SendTime),
+ int maxResultCount = 10,
+ CancellationToken cancellationToken = default
+ )
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _messageRepository
+ .GetLastMessagesByOneFriendAsync(userId, sorting, maxResultCount, cancellationToken);
+ }
+ }
+
+ public virtual async Task GetGroupMessageCountAsync(
+ Guid? tenantId,
+ long groupId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _messageRepository.GetCountAsync(groupId, filter, type, cancellationToken);
+ }
+ }
+
+ public virtual async Task GetChatMessageCountAsync(
+ Guid? tenantId,
+ Guid sendUserId,
+ Guid receiveUserId,
+ string filter = "",
+ MessageType? type = null,
+ CancellationToken cancellationToken = default)
+ {
+ using (_currentTenant.Change(tenantId))
+ {
+ return await _messageRepository.GetCountAsync(sendUserId, receiveUserId, filter, type, cancellationToken);
+ }
+ }
+
+ protected virtual async Task StoreUserMessageAsync(
+ ChatMessage chatMessage,
+ CancellationToken cancellationToken = default)
+ {
+ // 检查接收用户
+ if (!chatMessage.ToUserId.HasValue)
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UseNotFount);
+ }
+
+ var myFriend = await _friendStore
+ .GetMemberAsync(chatMessage.TenantId, chatMessage.ToUserId.Value, chatMessage.FormUserId, cancellationToken);
+
+ var userChatSetting = await _userChatSettingRepository
+ .FindByUserIdAsync(chatMessage.ToUserId.Value, cancellationToken);
+
+ if (userChatSetting != null)
+ {
+ if (!userChatSetting.AllowReceiveMessage)
+ {
+ // 当前发送的用户不接收消息
+ throw new BusinessException(MessageServiceErrorCodes.UserHasRejectAllMessage);
+ }
+
+ if (myFriend == null && !chatMessage.IsAnonymous)
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UserHasRejectNotFriendMessage);
+ }
+
+ if (chatMessage.IsAnonymous && !userChatSetting.AllowAnonymous)
+ {
+ // 当前用户不允许匿名发言
+ throw new BusinessException(MessageServiceErrorCodes.UserNotAllowedToSpeakAnonymously);
+ }
+ }
+ else
+ {
+ if (myFriend == null)
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UserHasRejectNotFriendMessage);
+ }
+ }
+ if (myFriend?.Black == true)
+ {
+ throw new BusinessException(MessageServiceErrorCodes.UserHasBlack);
+ }
+
+ var message = new UserMessage(
+ long.Parse(chatMessage.MessageId),
+ chatMessage.FormUserId,
+ chatMessage.FormUserName,
+ chatMessage.Content,
+ chatMessage.MessageType);
+
+ message.SendToUser(chatMessage.ToUserId.Value);
+ message.SetProperty(nameof(ChatMessage.IsAnonymous), chatMessage.IsAnonymous);
+
+ await _messageRepository.InsertUserMessageAsync(message, cancellationToken);
+ }
+
+ protected virtual async Task StoreGroupMessageAsync(
+ ChatMessage chatMessage,
+ long groupId,
+ CancellationToken cancellationToken = default)
+ {
+ var userHasBlacked = await _groupRepository
+ .UserHasBlackedAsync(groupId, chatMessage.FormUserId, cancellationToken);
+ if (userHasBlacked)
+ {
+ // 当前发送的用户已被拉黑
+ throw new BusinessException(MessageServiceErrorCodes.GroupUserHasBlack);
+ }
+ var group = await _groupRepository.GetByIdAsync(groupId, cancellationToken);
+ if (!group.AllowSendMessage)
+ {
+ // 当前群组不允许发言
+ throw new BusinessException(MessageServiceErrorCodes.GroupNotAllowedToSpeak);
+ }
+ if (chatMessage.IsAnonymous && !group.AllowAnonymous)
+ {
+ // 当前群组不允许匿名发言
+ throw new BusinessException(MessageServiceErrorCodes.GroupNotAllowedToSpeakAnonymously);
+ }
+
+ var message = new GroupMessage(
+ long.Parse(chatMessage.MessageId),
+ chatMessage.FormUserId,
+ chatMessage.FormUserName,
+ chatMessage.Content,
+ chatMessage.MessageType);
+
+ message.SendToGroup(groupId);
+ message.SetProperty(nameof(ChatMessage.IsAnonymous), chatMessage.IsAnonymous);
+
+ await _messageRepository.InsertGroupMessageAsync(message, cancellationToken);
+ }
+ }
+}
diff --git a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/UserCardFinder.cs b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/UserCardFinder.cs
index 8f8a50711..6e8f5184d 100644
--- a/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/UserCardFinder.cs
+++ b/aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain/LINGYUN/Abp/MessageService/Chat/UserCardFinder.cs
@@ -1,51 +1,64 @@
-using LINGYUN.Abp.IM;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.MultiTenancy;
-
-namespace LINGYUN.Abp.MessageService.Chat
-{
- public class UserCardFinder : IUserCardFinder, ITransientDependency
- {
- private readonly ICurrentTenant _currentTenant;
- private readonly IUserChatCardRepository _userChatCardRepository;
-
- public UserCardFinder(
- ICurrentTenant currentTenant,
- IUserChatCardRepository userChatCardRepository)
- {
- _currentTenant = currentTenant;
- _userChatCardRepository = userChatCardRepository;
- }
-
- public virtual async Task GetCountAsync(Guid? tenantId, string findUserName = "", int? startAge = null, int? endAge = null, Sex? sex = null)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatCardRepository
- .GetMemberCountAsync(findUserName, startAge, endAge, sex);
- }
- }
-
- public virtual async Task> GetListAsync(Guid? tenantId, string findUserName = "", int? startAge = null, int? endAge = null, Sex? sex = null, string sorting = nameof(UserCard.UserId), bool reverse = false, int skipCount = 0, int maxResultCount = 10)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatCardRepository
- .GetMembersAsync(findUserName, startAge, endAge, sex,
- sorting, reverse, skipCount, maxResultCount);
- }
- }
-
- public virtual async Task GetMemberAsync(Guid? tenantId, Guid findUserId)
- {
- using (_currentTenant.Change(tenantId))
- {
- return await _userChatCardRepository
- .GetMemberAsync(findUserId);
- }
- }
- }
-}
+using LINGYUN.Abp.IM;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.MultiTenancy;
+
+namespace LINGYUN.Abp.MessageService.Chat
+{
+ public class UserCardFinder : IUserCardFinder, ITransientDependency
+ {
+ private readonly ICurrentTenant _currentTenant;
+ private readonly IUserChatCardRepository _userChatCardRepository;
+
+ public UserCardFinder(
+ ICurrentTenant currentTenant,
+ IUserChatCardRepository userChatCardRepository)
+ {
+ _currentTenant = currentTenant;
+ _userChatCardRepository = userChatCardRepository;
+ }
+
+ public virtual async Task