anchor.diff:    protected
       [Context] URL: TMARSURL;
       [Context] Token: TMARSToken;
  -    [Context] ARequest: TWebRequest;
  -
  +    [Context] Request: TWebRequest;
  +    [Context] Response: TWebResponse;
  +
  +    function GetRazorAttributeValue<T: RazorSingleValueAttribute>(const AInstance: TObject; const ADefault: string = ''): string;
  +    function ContentTypeFromFileExt(const AFileExt: string): string; virtual;
  +
  +    function GetHomePage: string; virtual;
  +    function GetErrorPage: string; virtual;
  +    function GetFilesFolder: string; virtual;
       function GetTemplatesFolder: string; virtual;
  -    function GetFilesFolder: string; virtual;
  +
       procedure OnObjectForPathHandler(Sender: TObject; ExecData: TRazorExecData); virtual;
  +    procedure OnPageErrorHandler(Sender: TObject; pageInfo: TPageInfo); virtual;
  +
       function DoProvideContext(const APathInfo, APathParam: string): TArray<TContextEntry>; virtual;
  +    procedure DoError(APageInfo: TPageInfo); virtual;
  +    procedure SetResponseContentType(const APathInfo, APathParam, AInputFileName: string); virtual;
   
       property RazorEngine: TRlxRazorEngine read FRazorEngine;
     public
  
positive.code: 
    for LEntry in LContext do
      ExecData.razorProc.AddToDictionary(LEntry.Name, LEntry.Instance, LEntry.Owned);
  end;
  
  { TContextEntry }
  
negative.code:   );
  end;
  
  function TRazorResource.GetErrorPage: string;
  begin
    Result := GetRazorAttributeValue<RazorErrorPageAttribute>(Self, 'error.html');
  end;
  
  function TRazorResource.GetFilesFolder: string;
  begin
    Result := GetRazorAttributeValue<RazorFilesFolderAttribute>(Self,
      IncludeTrailingPathDelimiter(
        TPath.Combine(ExtractFilePath(ParamStr(0)), 'files')
      )
    );
  end;
  
  function TRazorResource.GetHomePage: string;
  begin
    Result := GetRazorAttributeValue<RazorHomePageAttribute>(Self, 'index');
  end;
  
  function TRazorResource.GetRazorAttributeValue<T>(const AInstance: TObject;
    const ADefault: string): string;
  var
    LValue: string;
  begin
    LValue := ADefault;
    TRttiHelper.IfHasAttribute<T>(Self
      , procedure (AAttrib: T)
        begin
          LValue := AAttrib.Value;
        end
    );
    Result := LValue;
  end;
  
  function TRazorResource.GetTemplatesFolder: string;
  begin
    Result := GetRazorAttributeValue<RazorTemplatesFolderAttribute>(Self,
      IncludeTrailingPathDelimiter(
        TPath.Combine(ExtractFilePath(ParamStr(0)), 'templates')
      )
    );
  end;
  
  