anchor.diff:        LParametersSliceName := AName;
       Result.Parameters.CopyFrom(Parameters, LParametersSliceName);
   
  -    Applications.Add(
  -      TMARSURL.CombinePath([BasePath, ABasePath]).ToLower
  -      , Result
  -    );
  +    FCriticalSection.Enter;
  +    try
  +      Applications.Add(
  +        TMARSURL.CombinePath([BasePath, ABasePath]).ToLower
  +        , Result
  +      );
  +    finally
  +      FCriticalSection.Leave;
  +    end;
     except
       Result.Free;
       raise
  
positive.code:   TMARSEngineRegistry=class
    private
      FItems: TDictionary<string, TMARSEngine>;
      function GetCount: Integer;
    protected
      class var _Instance: TMARSEngineRegistry;
      class function GetInstance: TMARSEngineRegistry; static;
      function GetEngine(const AName: string): TMARSEngine;
      class function GetDefaultEngine: TMARSEngine; static;
    public
      constructor Create; virtual;
      destructor Destroy; override;
  
      procedure RegisterEngine(const AEngine: TMARSEngine);
      procedure UnregisterEngine(const AEngine: TMARSEngine); overload;
      procedure UnregisterEngine(const AEngineName: string); overload;
  
      property Engine[const AName: string]: TMARSEngine read GetEngine; default;
  
  
negative.code:     FParameters: TMARSParameters;
      FName: string;
      FOnBeforeHandleRequest: TMARSEngineBeforeHandleRequestEvent;
    protected
      function GetBasePath: string; virtual;
      function GetPort: Integer; virtual;
      function GetThreadPoolSize: Integer; virtual;
      procedure SetBasePath(const Value: string); virtual;
      procedure SetPort(const Value: Integer); virtual;
      procedure SetThreadPoolSize(const Value: Integer); virtual;
      procedure PatchCORS(const ARequest: TWebRequest; const AResponse: TWebResponse); virtual;
    public
      constructor Create(const AName: string = DEFAULT_ENGINE_NAME); virtual;
      destructor Destroy; override;
  
      function HandleRequest(ARequest: TWebRequest; AResponse: TWebResponse): Boolean; virtual;
  
      function AddApplication(const AName, ABasePath: string;
        const AResources: array of string; const AParametersSliceName: string = ''): TMARSApplication; virtual;
  
      procedure EnumerateApplications(const ADoSomething: TProc<string, TMARSApplication>); virtual;
  
      property Applications: TMARSApplicationDictionary read FApplications;
      property Parameters: TMARSParameters read FParameters;
  