Strong name signature could not be verified Error

Posts   
 
    
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 22-Dec-2009 23:06:22   

For some reason I get this error when I deploy to a real production server. This error doesnt come up on my development box. I've deployed the following:

MyApp.dll (ASP.NET Web App dll) MyApp.DataObject.dll (dll that was produced using LLBLGen) SD.LLBLGen.Pro.DQE.SqlServer.NET20.dll SD.LLBLGen.Pro.LinqSupportClasses.NET35.dll SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll

These dlls are sitting in my \bin directory.

I get this error regardless if the site is built as a web site or web application.


Server Error in '/' Application.
--------------------------------------------------------------------------------

Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045) 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Assembly Load Trace: The following information can be helpful to determine why the assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' could not be loaded.


WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].



Stack Trace: 


[FileLoadException: Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)]

[FileLoadException: Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)]
   System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
   System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
   System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +127
   System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +142
   System.Reflection.Assembly.Load(String assemblyString) +28
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +46

[ConfigurationErrorsException: Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +613
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +203
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +105
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +178
   System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
   System.Web.Compilation.CodeDirectoryCompiler.GetCodeDirectoryAssembly(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories, Boolean isDirectoryAllowed) +600
   System.Web.Compilation.BuildManager.CompileCodeDirectory(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories) +128
   System.Web.Compilation.BuildManager.CompileResourcesDirectory() +31
   System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +304

[HttpException (0x80004005): Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)]
   System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +58
   System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +512
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729

[HttpException (0x80004005): Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8894031
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +85
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +333




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.4200; ASP.NET Version:2.0.50727.4016 

Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 22-Dec-2009 23:11:57   

I reran it with EnableLog on.


Assembly Load Trace: The following information can be helpful to determine why the assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' could not be loaded.


=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = SD.LLBLGen.Pro.ORMSupportClasses.NET20
 (Partial)
LOG: Appbase = file:///C:/pxs_data/http/
LOG: Initial PrivatePath = C:\pxs_data\http\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\pxs_data\http\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/e4737075/9eb19a34/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/e4737075/9eb19a34/SD.LLBLGen.Pro.ORMSupportClasses.NET20/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Attempting download of new URL file:///C:/pxs_data/http/bin/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Using application configuration file: C:\pxs_data\http\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27
ERR: Failed to complete setup of assembly (hr = 0x80131045). Probing terminated.




daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 23-Dec-2009 06:21:57   

Please provide more invironment information (Machine, SO, DB, LLBLGen runtime library version). Also, maybe this is not exactly your case, but could be related: http://llblgen.com/TinyForum/Messages.aspx?ThreadID=16567

David Elizondo | LLBLGen Support Team
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 07:03:19   

Environment = Windows 2008 Server 64-bit, .NET 3.5, ASP.NET, IIS 7 LLBLGen Versions = SD.LLBLGen.Pro.DQE.SqlServer.NET20.dll (version 2.6.0.0), SD.LLBLGen.Pro.LinqSupportClasses.NET35.dll (version 2.6.0.0), SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll (version 2.6.0.0)

I looked at the link you provided earlier but couldnt make sense of how this would help me. Here's why, they're using IBM's DB2 database and from what I could tell there were issues with the DB client library install into the GAC, etc.

I'm using SQL Server 2008 here in which all the client libs should already be in place based on the System.Data lib which ships with .NET.

Something interesting though. I've set up another server exactly like this server and I can run my windows services that use the same LLBGen libs and generated lib with no problems. Same libs, same generated code, same database. The only difference is that one is a Windows Service and the other is a Web App.

Any suggestions?

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 23-Dec-2009 09:23:39   

Most probably you are referencing a wrong version of a dll somewhere.

Please remove all ORMSupportClasses dll references and also remove any reference to the SQL DQE dll.

And add them again carefully.

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 23-Dec-2009 11:13:00   

Also, if you've installed it into the GAC (which isn't recommended!) please note that if you installed it into the 64bit GAC and your webapp is ran under the 32bit CLR (configurable in IIS), it can't find the DLL.

So store the assemblies locally to the application, in its bin folder, not in the GAC. Also, make sure you remove the temp folders for this webapp before you re-test as it otherwise isn't sufficient.

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 13:53:03   

I removed all references and added them back carefully. No change. Same issue.

And I haven't installed them into the GAC either. The dlls are only in the \bin folder under the web application.

I removed the folders and files in my root temp directory as well. No change. Same issue.

Another note: My web application was compiled as x86 and my web site in iis is set to run in 32-bit mode.

Nother note: I'm using the assemblies that are installed with the trial version of LLBLGen. Are they different than the full version?

Any other suggestions?

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 23-Dec-2009 14:13:54   

Reginald wrote:

I removed all references and added them back carefully. No change. Same issue.

And I haven't installed them into the GAC either. The dlls are only in the \bin folder under the web application.

I removed the folders and files in my root temp directory as well. No change. Same issue.

Another note: My web application was compiled as x86 and my web site in iis is set to run in 32-bit mode.

Nother note: I'm using the assemblies that are installed with the trial version of LLBLGen. Are they different than the full version?

Any other suggestions?

they're not different but 'trial' and 'production' are not two things which can be used in the same sentence. If you have a valid license, use the latest release builds. If you don't have a valid license, you can't use them in production (part of the demo license).

Try compiling your webapp as AnyCPU btw,

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 15:05:30   

I understand the license rules. I'm a 1.0 full license user. Trying to get 2.0 fully working first before I buy the full license. This server running aside from my dev box but I wouldnt call it production just yet. Nothing works. LOL. This is a box we're setting up for deployment testing purposes for now. this will be the model for production servers once we get it working.

I also tried compiling my web app as AnyCPU and there was no change.

Then I also set my web site to run in 64-bit mode and got a bad image format error for the dll that was generated use LLBLGen. Then I recompiled that generated dll as AnyCPU and I was back to the original error.


Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)

The only difference now is that the log info is now rooted in Framework64 versus Framework.


=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = SD.LLBLGen.Pro.ORMSupportClasses.NET20
 (Partial)
LOG: Appbase = file:///C:/pxs_data/http/
LOG: Initial PrivatePath = C:\pxs_data\http\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\pxs_data\http\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/Temporary ASP.NET Files/root/57c222a8/9eb19a34/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/Temporary ASP.NET Files/root/57c222a8/9eb19a34/SD.LLBLGen.Pro.ORMSupportClasses.NET20/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Attempting download of new URL file:///C:/pxs_data/http/bin/SD.LLBLGen.Pro.ORMSupportClasses.NET20.DLL.
LOG: Using application configuration file: C:\pxs_data\http\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Post-policy reference: SD.LLBLGen.Pro.ORMSupportClasses.NET20, Version=2.6.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27
ERR: Failed to complete setup of assembly (hr = 0x80131045). Probing terminated.


Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 15:13:31   

Something else I forgot. I've got this running on a 32-bit server as a web site (not web application) as well with the same issue.

I've had the 32-bit system working prior using LLBLGen 1.x which i have a license for. It was connecting to Firebird. I'm switching over to SqlServer and ripping out Firebird. I upgraded everything locally to use SqlServer (code, dlls, etc) and the new LLBLGen libs 2.6. When I uploaded everything to the web site it gave me this error. After unsuccessful attempts to get it working I figured I'd start off fresh with Win2008 Server 64-bit. Once I got the minimal files in place I got the same error. The web app on the 64-bit system isnt even my full site but only 1 or 2 pages. The page I'm calling doesnt even make any calls to LLBLGen stuff.

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 23-Dec-2009 15:14:41   

Could it be that you have generated the code for the wrong .NET Framework? To which .NET Framework version have you generated the code? (Please check the Designer).

Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 15:24:43   

The designer says .NET Framework 3.5 for the web site and the lib generated using llblgen.

The application pool version in IIS7 is set to .NET 2.0 which I verified is correct.

Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 15:32:33   

also made sure the web site has "full trust" for the .net trust level.

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 23-Dec-2009 15:37:20   

Could you right-click on the ormsupportclasses dll in the bin folder, go to properties (in explorer) and verify you have 2.6 in that folder? (and not 1.0.2005.1's version wink )

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 15:53:51   

yep, just verified and it's version 2.6.9.1005

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 23-Dec-2009 15:58:11   

Could you please cook a repro solution, which should give you the same error and attach it here, so we can debug it.

Thanks.

Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 23-Dec-2009 16:37:16   

In the repro all I did was created a web app with a hello world page, uploaded to the server and accessed the page. All was fine.

Then I added the 3 LLBLGen references to the web app and uploaded again and the error comes up.

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 24-Dec-2009 08:50:01   

Can't reproduce it. It works fine over here. I can see the Hello World popin, without errors. !!

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 24-Dec-2009 12:56:16   

After I had managed to work around the System.Web.AspNetHostingPermission error I got, I can properly load the application on windows 7 64bit IIS 7. Works OK. (framework64, 32bit applications enabled through application pool). So not sure what you're doing wrong in the 'production' box, but it might be some configuration issue.

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 24-Dec-2009 15:59:24   

this info helps. I just tried everything under the sun from settings, config, permissions, vdirs, etc. Nothing has panned out.

Then I just built a Win2008 64-bit Server locally in VMWare, copied the site and it worked as well.

My deployment test server is in the GoGrid cloud so I plan to wipe it out and start over fresh. I've got a hunch but need to test it out and confirm. I'll definitely report back.

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 24-Dec-2009 16:49:08   

Reginald wrote:

this info helps. I just tried everything under the sun from settings, config, permissions, vdirs, etc. Nothing has panned out.

Then I just built a Win2008 64-bit Server locally in VMWare, copied the site and it worked as well.

My deployment test server is in the GoGrid cloud so I plan to wipe it out and start over fresh. I've got a hunch but need to test it out and confirm. I'll definitely report back.

Ok, one thing to make sure is that you use the Framework64 version of aspnet_regiis.exe, as that will register the 64bit version.

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 29-Dec-2009 22:28:59   

Ok, my hunch didnt work. I'm closer but still dont have it working.

Here's what I found out...

If I add refs to...

SD.LLBLGen.Pro.LinqSupportClasses.NET35.dll SD.LLBLGen.Pro.DQE.SqlServer.NET20.dll

I have no issues. Everything loads fine. Only when I add SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll does the web app fail.


Could not load file or assembly 'SD.LLBLGen.Pro.ORMSupportClasses.NET20' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)

So I was thinking that maybe I needed remove some specifics based on this http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/7a2bfc71-f2b9-4744-be60-00ba326003ba

Didnt work either. Then I figured it might be a security issue in ASP.NET or just .NET since my Windows Service apps can load this and work fine.

I downloaded the .NET 2.0 Configuration Tool (included in the .NET 2.0 SDK).

I launched the tool and went to the "Configure Code Access Security Policy" section. Then I clicked on "Increase Assembly Trust". I selected the SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll and attempted to increase the trust but got an error saying "Unable to load assembly". Hmmmm, then I clicked on "Evaluate Assembly" and got the same error msg "Unable to load assembly". I tried these same 2 things on the other 2 assemblies SD.LLBLGen.Pro.LinqSupportClasses.NET35.dll SD.LLBLGen.Pro.DQE.SqlServer.NET20.dll and it worked/loaded fine.

Is it possible you can try the same thing on your side and let me know what you get?

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39863
Joined: 17-Aug-2003
# Posted on: 30-Dec-2009 10:20:32   

If the signature fails, your dll is perhaps corrupt, please try with a dll you downloaded from the website?

Other than that, I don't know what the problem could be. Trust issues are reported as SecurityExceptions so that's not it. (you get the error during trust level configuration as it needs to load the dll).

Could you try on a command line the command: sn -vF SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll ?

sn is a tool of .NET, in the SDK, so you've to upload that as well.

What the link on the ms website suggests is not important: as the error is with the ormsupportclasses dll which is signed by us.

Also keep in mind that the user under which the website runs is the one which verifies the strong name. It might be that that user isn't allowed to do anything in that area. So also try to run the website under a different account than NETWORK_SERVICE. And of course make sure NETWORK_SERVICE has access rights to the ormsupportclasses dll simple_smile

Frans Bouma | Lead developer LLBLGen Pro
Reginald
User
Posts: 24
Joined: 20-Jan-2006
# Posted on: 30-Dec-2009 15:35:28   

got it figured out!!!!!

Ok so I ran the sn -vf command line and on my dev box it said it was valid. On the server it said failed to verify assembly. So I got to thinking crap. The one locally is valid but the one on the server is somehow bad? I'm thinking it cant be because I've uploaded this file too many times using FileZilla FTP and the VS.NET 2008 Publish FTP. Surely both of those can screw up uploading the same file.

That is the case though. I downloaded Febooti Hash and CRC check to my dev box and the server. The other dlls checked out fine but the SupportClasses dll had different values. And with the dll being signed it's not supposed to work anyways because it shows that the file has been tampered with (something like that).

Anyways, I took a different approach and zipped up the file locally. Then I ftp'd it, unzipped on the server and POOOOOF. It worked!!!!

Guys, thanks so much for the time and effort. Your support is superb.

So moral of the story is check to make sure your file is not corrupted as mine was.

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 30-Dec-2009 16:29:36   

Glad you've figured it out. And thanks for the feedback.