Skip to content

Commit

Permalink
Update cef. Move to x64
Browse files Browse the repository at this point in the history
  • Loading branch information
SHADOWDANCH committed Jun 22, 2023
1 parent 59cfe01 commit 72654a3
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 114 deletions.
6 changes: 2 additions & 4 deletions hooks/hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ const size_t whitelist_size = sizeof(whitelist) / sizeof(whitelist[0]);
const size_t blacklist_size = sizeof(blacklist) / sizeof(blacklist[0]);

#if _DEBUG
std::ofstream logfile("adblock_log.txt", std::ios_base::trunc);

void printlog(const std::string& text) {
// Write to file
std::ofstream logfile("adblock_log.txt", std::ios_base::out | std::ios_base::app);
logfile << text << std::endl;
}
#endif
Expand Down Expand Up @@ -62,8 +62,6 @@ cef_urlrequest_t* cef_urlrequest_createHook(_cef_request_t* request, struct _cef
extern "C" void __declspec(dllexport) __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* inRemoteInfo);
void __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* inRemoteInfo) {
#if _DEBUG
// Init logging
std::remove("adblock_log.txt");
printlog("NativeInjectionEntryPoint called");
#endif

Expand Down
73 changes: 26 additions & 47 deletions hooks/hooks.vcxproj
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props')" />
<Import Project="..\packages\cef.sdk.86.0.24\build\cef.sdk.props" Condition="Exists('..\packages\cef.sdk.86.0.24\build\cef.sdk.props')" />
<Import Project="..\packages\cef.sdk.113.3.5\build\cef.sdk.props" Condition="Exists('..\packages\cef.sdk.113.3.5\build\cef.sdk.props')" />
<Import Project="..\packages\cef.redist.x86.113.3.5\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.113.3.5\build\cef.redist.x86.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
Expand All @@ -20,83 +20,62 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<LibraryPath>..\packages\cef.sdk.86.0.24\CEF\win32\debug\VS2017;..\packages\cef.sdk.86.0.24\CEF\win32\debug;..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\Win32\v141\Debug;$(LibraryPath)</LibraryPath>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LibraryPath>..\packages\cef.sdk.113.3.5\CEF\x64\debug\VS2019;..\packages\cef.sdk.113.3.5\CEF\x64\debug;..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\x64\v141\debug;$(LibraryPath)</LibraryPath>
<IncludePath>..\packages\cef.sdk.113.3.5\CEF\include;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<LibraryPath>..\packages\cef.sdk.86.0.24\CEF\win32\release\VS2017;..\packages\cef.sdk.86.0.24\CEF\win32\release;..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\Win32\v141\Release;$(LibraryPath)</LibraryPath>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>..\packages\cef.sdk.113.3.5\CEF\include;$(IncludePath)</IncludePath>
<LibraryPath>..\packages\cef.sdk.113.3.5\CEF\x64\release;..\packages\cef.sdk.113.3.5\CEF\x64\release\VS2019;..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\x64\v141\Release;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;HOOKS_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PreprocessorDefinitions>WIN32;NDEBUG;HOOKS_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>..\packages\cef.sdk.86.0.24\CEF;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\packages\cef.sdk.113.3.5\CEF;</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;EasyHook32.lib;libcef_dll_wrapper.lib;libcef.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;EasyHook64.lib;libcef_dll_wrapper.lib;libcef.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;HOOKS_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>..\packages\cef.sdk.86.0.24\CEF;</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\packages\cef.sdk.113.3.5\CEF;</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;EasyHook32.lib;libcef_dll_wrapper.lib;libcef.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;EasyHook64.lib;libcef_dll_wrapper.lib;libcef.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="hooks.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
Expand All @@ -116,9 +95,9 @@
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\cef.sdk.86.0.24\build\cef.sdk.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.sdk.86.0.24\build\cef.sdk.props'))" />
<Error Condition="!Exists('..\packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props'))" />
<Error Condition="!Exists('..\packages\EasyHookNativePackage.redist.2.7.7097\build\native\EasyHookNativePackage.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EasyHookNativePackage.redist.2.7.7097\build\native\EasyHookNativePackage.redist.targets'))" />
<Error Condition="!Exists('..\packages\EasyHookNativePackage.2.7.7097\build\native\EasyHookNativePackage.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EasyHookNativePackage.2.7.7097\build\native\EasyHookNativePackage.targets'))" />
<Error Condition="!Exists('..\packages\cef.redist.x86.113.3.5\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x86.113.3.5\build\cef.redist.x86.props'))" />
<Error Condition="!Exists('..\packages\cef.sdk.113.3.5\build\cef.sdk.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.sdk.113.3.5\build\cef.sdk.props'))" />
</Target>
</Project>
4 changes: 2 additions & 2 deletions hooks/packages.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="cef.redist.x86" version="86.0.24" targetFramework="native" />
<package id="cef.sdk" version="86.0.24" targetFramework="native" />
<package id="cef.redist.x86" version="113.3.5" targetFramework="native" />
<package id="cef.sdk" version="113.3.5" targetFramework="native" />
<package id="EasyHookNativePackage" version="2.7.7097" targetFramework="native" />
<package id="EasyHookNativePackage.redist" version="2.7.7097" targetFramework="native" />
</packages>
Binary file modified injector/injector.cpp
Binary file not shown.
66 changes: 17 additions & 49 deletions injector/injector.vcxproj
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
Expand All @@ -18,13 +18,13 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
Expand All @@ -36,57 +36,25 @@
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<LibraryPath>..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\Win32\v141\Debug;$(LibraryPath)</LibraryPath>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LibraryPath>..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\x64\v141\Release;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<LibraryPath>..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\Win32\v141\Release;$(LibraryPath)</LibraryPath>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LibraryPath>..\packages\EasyHookNativePackage.2.7.7097\build\native\lib\x64\v141\Debug;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
</ClCompile>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>EasyHook32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>EasyHook64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
</ClCompile>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>EasyHook64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>EasyHook32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
Expand Down
24 changes: 12 additions & 12 deletions spotify-win-adblock.sln
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2036
# Visual Studio Version 17
VisualStudioVersion = 17.6.33723.286
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hooks", "hooks\hooks.vcxproj", "{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "injector", "injector\injector.vcxproj", "{0F8ACEF1-C27F-434E-9990-F87568437A63}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Debug|x86.ActiveCfg = Debug|Win32
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Debug|x86.Build.0 = Debug|Win32
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Release|x86.ActiveCfg = Release|Win32
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Release|x86.Build.0 = Release|Win32
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Debug|x86.ActiveCfg = Debug|Win32
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Debug|x86.Build.0 = Debug|Win32
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Release|x86.ActiveCfg = Release|Win32
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Release|x86.Build.0 = Release|Win32
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Debug|x64.ActiveCfg = Debug|x64
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Debug|x64.Build.0 = Debug|x64
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Release|x64.ActiveCfg = Release|x64
{9BC16542-C2B2-4B15-B87C-F9FFD3F78322}.Release|x64.Build.0 = Release|x64
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Debug|x64.ActiveCfg = Debug|x64
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Debug|x64.Build.0 = Debug|x64
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Release|x64.ActiveCfg = Release|x64
{0F8ACEF1-C27F-434E-9990-F87568437A63}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down

0 comments on commit 72654a3

Please sign in to comment.