I-Synergy.Framework.Core 2025.11207.11553-preview

Prefix Reserved
This is a prerelease version of I-Synergy.Framework.Core.
dotnet add package I-Synergy.Framework.Core --version 2025.11207.11553-preview
                    
NuGet\Install-Package I-Synergy.Framework.Core -Version 2025.11207.11553-preview
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I-Synergy.Framework.Core" Version="2025.11207.11553-preview" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="I-Synergy.Framework.Core" Version="2025.11207.11553-preview" />
                    
Directory.Packages.props
<PackageReference Include="I-Synergy.Framework.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add I-Synergy.Framework.Core --version 2025.11207.11553-preview
                    
#r "nuget: I-Synergy.Framework.Core, 2025.11207.11553-preview"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package I-Synergy.Framework.Core@2025.11207.11553-preview
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=I-Synergy.Framework.Core&version=2025.11207.11553-preview&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.Core&version=2025.11207.11553-preview&prerelease
                    
Install as a Cake Tool

I-Synergy Framework Core

Foundational library providing core abstractions, base classes, services, and utilities for building enterprise-grade .NET 10.0 applications. This package forms the foundation of the I-Synergy Framework ecosystem.

NuGet License .NET

Features

  • Observable base classes with automatic property change tracking and validation
  • Messenger service for loosely coupled component communication using weak references
  • Comprehensive extension methods for common types (string, datetime, collections, etc.)
  • Result pattern for robust error handling without exceptions
  • Scoped context service for managing tenant and user context across application layers
  • Busy service for managing application busy states in UI applications
  • Rich validation framework with data annotations support
  • Specialized collections (ObservableCollection, BinaryTree, Tree structures)
  • Utilities for common operations (file handling, regex, comparisons, etc.)
  • Type-safe serialization with JSON support
  • Attribute-based DI lifetime management for service registration
  • Async/await patterns with cancellation token support

Installation

Install the package via NuGet:

dotnet add package I-Synergy.Framework.Core

Quick Start

1. Observable Classes

Create observable objects with automatic property change notifications and dirty tracking:

using ISynergy.Framework.Core.Base;

public class Person : ObservableClass
{
    public string Name
    {
        get => GetValue<string>();
        set => SetValue(value);
    }

    public int Age
    {
        get => GetValue<int>();
        set => SetValue(value);
    }
}

// Usage
var person = new Person();
person.PropertyChanged += (s, e) => Console.WriteLine($"{e.PropertyName} changed");
person.Name = "John Doe"; // Triggers PropertyChanged event
Console.WriteLine(person.IsDirty); // true - object has unsaved changes

2. Observable Validated Classes

Add validation support to your models:

using ISynergy.Framework.Core.Base;
using System.ComponentModel.DataAnnotations;

public class Customer : ObservableValidatedClass
{
    [Required(ErrorMessage = "Email is required")]
    [EmailAddress(ErrorMessage = "Invalid email format")]
    public string Email
    {
        get => GetValue<string>();
        set => SetValue(value);
    }

    [Range(18, 120, ErrorMessage = "Age must be between 18 and 120")]
    public int Age
    {
        get => GetValue<int>();
        set => SetValue(value);
    }
}

// Usage
var customer = new Customer { Email = "invalid-email", Age = 15 };
if (!customer.IsValid)
{
    foreach (var error in customer.GetErrors())
    {
        Console.WriteLine(error.ErrorMessage);
    }
}

3. Messenger Service

Implement loosely coupled communication between components:

using ISynergy.Framework.Core.Abstractions.Services;
using ISynergy.Framework.Core.Services;

// Define a message
public record UserLoggedInMessage(string Username, DateTime LoginTime);

// Register a recipient
public class DashboardViewModel
{
    private readonly IMessengerService _messenger;

    public DashboardViewModel(IMessengerService messenger)
    {
        _messenger = messenger;
        _messenger.Register<UserLoggedInMessage>(this, OnUserLoggedIn);
    }

    private void OnUserLoggedIn(UserLoggedInMessage message)
    {
        Console.WriteLine($"User {message.Username} logged in at {message.LoginTime}");
    }
}

// Send a message
public class LoginService
{
    private readonly IMessengerService _messenger;

    public LoginService(IMessengerService messenger)
    {
        _messenger = messenger;
    }

    public async Task LoginAsync(string username)
    {
        // Perform login logic
        _messenger.Send(new UserLoggedInMessage(username, DateTime.UtcNow));
    }
}

// Configure in DI
services.AddScoped<IMessengerService, MessengerService>();

4. Result Pattern

Handle operations that may fail without throwing exceptions:

using ISynergy.Framework.Core.Models;

public class UserService
{
    public Result<User> GetUserById(int id)
    {
        var user = Database.FindUser(id);

        if (user is null)
            return Result<User>.Fail("User not found");

        return Result<User>.Success(user);
    }

    public Result UpdateUser(User user)
    {
        try
        {
            Database.Update(user);
            return Result.Success();
        }
        catch (Exception ex)
        {
            return Result.Fail($"Update failed: {ex.Message}");
        }
    }
}

// Usage
var result = userService.GetUserById(123);
if (result.IsSuccess)
{
    var user = result.Value;
    Console.WriteLine($"Found user: {user.Name}");
}
else
{
    Console.WriteLine($"Error: {result.ErrorMessage}");
}

5. Scoped Context Service

Manage tenant and user context across application layers:

using ISynergy.Framework.Core.Abstractions;
using ISynergy.Framework.Core.Abstractions.Services;
using ISynergy.Framework.Core.Extensions;

// Define your context
public class AppContext : IContext
{
    public Guid TenantId { get; set; }
    public string Username { get; set; }
    public List<string> Roles { get; set; }
}

// Configure in DI
services.AddScopedContext<AppContext>();

// Use in middleware or controllers
public class TenantMiddleware
{
    private readonly RequestDelegate _next;

    public TenantMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext httpContext, IScopedContextService contextService)
    {
        var tenantId = httpContext.Request.Headers["X-Tenant-ID"].FirstOrDefault();

        if (Guid.TryParse(tenantId, out var parsedTenantId))
        {
            contextService.SetContext(new AppContext
            {
                TenantId = parsedTenantId,
                Username = httpContext.User.Identity?.Name ?? "Anonymous"
            });
        }

        await _next(httpContext);
    }
}

// Access context in services
public class OrderService
{
    private readonly IScopedContextService _contextService;

    public OrderService(IScopedContextService contextService)
    {
        _contextService = contextService;
    }

    public async Task<List<Order>> GetOrdersAsync()
    {
        var context = _contextService.GetContext<AppContext>();
        return await Database.Orders
            .Where(o => o.TenantId == context.TenantId)
            .ToListAsync();
    }
}

Core Components

Base Classes

ISynergy.Framework.Core.Base/
├── ObservableClass              # INotifyPropertyChanged implementation with dirty tracking
├── ObservableValidatedClass     # ObservableClass + DataAnnotations validation
├── ModelClass                   # Base for domain models with identity
└── Property<T>                  # Property wrapper with change tracking

Services

ISynergy.Framework.Core.Services/
├── MessengerService             # Weak reference-based messaging
├── ScopedContextService         # Request-scoped context management
├── BusyService                  # UI busy state management
├── InfoService                  # Application info (version, name, etc.)
├── LanguageService              # Localization support
└── RequestCancellationService   # Centralized cancellation token management

Extensions

The Core library includes 35+ extension method classes:

  • String extensions: IsNullOrEmpty, IsValidEmail, ToTitleCase, SplitCamelCase, etc.
  • DateTime extensions: StartOfDay, EndOfDay, IsWeekend, AddWorkDays, etc.
  • Collection extensions: AddRange, RemoveWhere, ForEach, Distinct, etc.
  • Enum extensions: ToList, GetDescription, GetDisplayName, etc.
  • Type extensions: IsNullableType, GetDefaultValue, ImplementsInterface, etc.
  • Object extensions: ToJson, FromJson, DeepClone, etc.
  • Task extensions: SafeFireAndForget, WithCancellation, WithTimeout, etc.

Usage Examples

Managing UI Busy States

using ISynergy.Framework.Core.Abstractions.Services;

public class DataLoadViewModel
{
    private readonly IBusyService _busyService;
    private readonly IDataService _dataService;

    public DataLoadViewModel(IBusyService busyService, IDataService dataService)
    {
        _busyService = busyService;
        _dataService = dataService;
    }

    public async Task LoadDataAsync()
    {
        try
        {
            _busyService.StartBusy("Loading data...");

            var data = await _dataService.GetDataAsync();

            _busyService.UpdateMessage("Processing data...");
            ProcessData(data);
        }
        finally
        {
            _busyService.StopBusy();
        }
    }
}

// Bind to UI
<ProgressRing IsActive="{Binding BusyService.IsBusy}" />
<TextBlock Text="{Binding BusyService.BusyMessage}" />

Using Extension Methods

using ISynergy.Framework.Core.Extensions;

// String extensions
string email = "  john.doe@example.com  ";
bool isValid = email.IsValidEmail(); // true
string clean = email.Trim().ToLower();

// DateTime extensions
var date = DateTime.Now;
var startOfWeek = date.StartOfWeek();
var endOfMonth = date.EndOfMonth();
bool isWeekend = date.IsWeekend();

// Collection extensions
var list = new List<int> { 1, 2, 3, 4, 5 };
list.RemoveWhere(x => x % 2 == 0); // Removes even numbers
var chunks = list.Chunk(2); // Split into chunks of 2

// Enum extensions
public enum OrderStatus
{
    [Description("Pending approval")]
    Pending,
    [Description("Approved and processing")]
    Approved,
    Completed
}

var statuses = EnumExtensions.ToList<OrderStatus>();
string description = OrderStatus.Pending.GetDescription(); // "Pending approval"

// Object extensions
var person = new Person { Name = "John", Age = 30 };
string json = person.ToJson();
var clone = person.DeepClone();

Custom Collections

using ISynergy.Framework.Core.Collections;

// ObservableCollection with item property change tracking
var products = new ObservableCollection<Product>();
products.CollectionChanged += (s, e) => Console.WriteLine("Collection changed");
products.ItemPropertyChanged += (s, e) =>
    Console.WriteLine($"Item property {e.PropertyName} changed");

var product = new Product { Name = "Widget", Price = 9.99m };
products.Add(product);
product.Price = 12.99m; // Triggers ItemPropertyChanged

// Binary Tree
var tree = new BinaryTree<int>();
tree.Add(5);
tree.Add(3);
tree.Add(7);
tree.Add(1);
tree.Add(9);

bool contains = tree.Contains(7); // true
tree.InOrderTraversal(value => Console.WriteLine(value)); // 1, 3, 5, 7, 9

Configuration

Dependency Injection Setup

using ISynergy.Framework.Core.Extensions;
using ISynergy.Framework.Core.Abstractions.Services;
using ISynergy.Framework.Core.Services;

public void ConfigureServices(IServiceCollection services)
{
    // Core services
    services.AddSingleton<IMessengerService, MessengerService>();
    services.AddSingleton<IBusyService, BusyService>();
    services.AddSingleton<IInfoService, InfoService>();
    services.AddSingleton<ILanguageService, LanguageService>();

    // Context management
    services.AddScopedContext<AppContext>();

    // Or use lifetime attributes
    services.Scan(scan => scan
        .FromAssemblyOf<Startup>()
        .AddClasses()
        .UsingRegistrationStrategy(RegistrationStrategy.Skip)
        .UsingAttributes());
}

Using Lifetime Attributes

using ISynergy.Framework.Core.Attributes;

[Lifetime(Lifetimes.Transient)]
public class TransientService : ITransientService
{
    // Service implementation
}

[Lifetime(Lifetimes.Scoped)]
public class ScopedService : IScopedService
{
    // Service implementation
}

[Lifetime(Lifetimes.Singleton)]
public class SingletonService : ISingletonService
{
    // Service implementation
}

Advanced Features

Custom Validation Rules

using ISynergy.Framework.Core.Base;
using ISynergy.Framework.Core.Validation;

public class Order : ObservableValidatedClass
{
    public decimal Amount { get; set; }
    public string CustomerEmail { get; set; }

    protected override IEnumerable<ValidationResult> Validate()
    {
        // Custom validation logic
        if (Amount < 0)
            yield return new ValidationResult(
                "Amount cannot be negative",
                new[] { nameof(Amount) });

        if (Amount > 10000 && string.IsNullOrEmpty(CustomerEmail))
            yield return new ValidationResult(
                "Email required for orders over $10,000",
                new[] { nameof(CustomerEmail) });
    }
}

Safe Fire and Forget

using ISynergy.Framework.Core.Extensions;

public class NotificationService
{
    public void SendNotification(string message)
    {
        // Fire and forget without blocking
        SendEmailAsync(message).SafeFireAndForget(
            onException: ex => Console.WriteLine($"Error: {ex.Message}"));
    }

    private async Task SendEmailAsync(string message)
    {
        await Task.Delay(1000);
        // Send email logic
    }
}

Object Pooling

using ISynergy.Framework.Core.Extensions;
using Microsoft.Extensions.ObjectPool;

public class BufferPool
{
    private readonly ObjectPool<byte[]> _pool;

    public BufferPool()
    {
        var policy = new DefaultPooledObjectPolicy<byte[]>();
        _pool = new DefaultObjectPool<byte[]>(policy);
    }

    public async Task ProcessDataAsync(Stream stream)
    {
        var buffer = _pool.Get();
        try
        {
            await stream.ReadAsync(buffer, 0, buffer.Length);
            // Process buffer
        }
        finally
        {
            _pool.Return(buffer);
        }
    }
}

Best Practices

Use ObservableClass as the base for all ViewModels and models that need property change notifications.

Always call Dispose() or use using statements with ObservableClass instances to prevent memory leaks from event handlers.

The MessengerService uses weak references by default. Set keepTargetAlive: true only when using closures in message handlers.

Observable Class Usage

  • Always use GetValue<T>() and SetValue() for properties that need change tracking
  • Call MarkAsClean() after saving changes to reset dirty tracking
  • Use Revert() to restore original values before committing
  • Dispose instances properly to clean up event handlers

Messenger Service Usage

  • Prefer constructor injection over MessengerService.Default singleton
  • Unregister recipients in cleanup/dispose methods to prevent memory leaks
  • Use tokens to create isolated message channels
  • Keep message types immutable (use records)

Result Pattern Usage

  • Return Result<T> for operations that may fail
  • Use Result.Success() and Result.Fail() factory methods
  • Check IsSuccess before accessing Value
  • Include meaningful error messages

Context Service Usage

  • Set context early in the request pipeline (middleware/filters)
  • Don't store context in long-lived services
  • Use context for tenant isolation and user-specific operations
  • Clear context at the end of the request scope

Testing

The Core library is designed for testability:

[Fact]
public void ObservableClass_PropertyChange_RaisesEvent()
{
    // Arrange
    var person = new Person();
    var eventRaised = false;
    person.PropertyChanged += (s, e) =>
    {
        if (e.PropertyName == nameof(Person.Name))
            eventRaised = true;
    };

    // Act
    person.Name = "John";

    // Assert
    Assert.True(eventRaised);
    Assert.True(person.IsDirty);
}

[Fact]
public void Messenger_SendMessage_DeliversToRecipient()
{
    // Arrange
    var messenger = new MessengerService();
    var received = false;
    var recipient = new object();

    messenger.Register<string>(recipient, msg => received = true);

    // Act
    messenger.Send("Test message");

    // Assert
    Assert.True(received);
}

Dependencies

  • Microsoft.Extensions.DependencyInjection - Dependency injection support
  • Microsoft.Extensions.Logging.Abstractions - Logging infrastructure
  • Microsoft.Extensions.ObjectPool - Object pooling
  • Microsoft.Extensions.Hosting - Application lifetime management
  • Microsoft.Extensions.Options.DataAnnotations - Configuration validation
  • Microsoft.Extensions.Configuration.Binder - Configuration binding

Documentation

For more information about the I-Synergy Framework:

  • I-Synergy.Framework.Mvvm - MVVM framework building on Core abstractions
  • I-Synergy.Framework.CQRS - CQRS implementation using Core messaging
  • I-Synergy.Framework.EntityFramework - EF Core integration with Core models
  • I-Synergy.Framework.AspNetCore - ASP.NET Core integration

Support

For issues, questions, or contributions, please visit the GitHub repository.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (35)

Showing the top 5 NuGet packages that depend on I-Synergy.Framework.Core:

Package Downloads
I-Synergy.Framework.AspNetCore

I-Synergy Framework AspNetCore

I-Synergy.Framework.Mvvm

I-Synergy Framework Mvvm

I-Synergy.Framework.MessageBus

I-Synergy Framework MessageBus

I-Synergy.Framework.Storage

I-Synergy Framework Storage

I-Synergy.Framework.Geography

I-Synergy Framework Geography

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2025.11207.11553-preview 33 12/7/2025
2025.11204.11448-preview 153 12/4/2025
2025.11130.12248 603 11/30/2025
2025.11130.12134-preview 536 11/30/2025
2025.11130.11725-preview 539 11/30/2025
2025.11130.11553-preview 530 11/30/2025
2025.11130.11515-preview 534 11/30/2025
2025.11130.11420.59-preview 545 11/30/2025
2025.11130.11323.56-preview 443 11/30/2025
2025.11129.10227.14-preview 288 11/29/2025
2025.11120.10114 610 11/20/2025
2025.11119.12324.6-preview 461 11/19/2025
2025.11119.10110 628 11/19/2025
2025.11118.12340.33-preview 607 11/18/2025
2025.11117.12349.4-preview 575 11/17/2025
2025.11117.11937.47-preview 581 11/17/2025
2025.11113.11532.29-preview 472 11/13/2025
2025.11113.10128.57-preview 465 11/13/2025
2025.11110.10306.55-preview 304 11/10/2025
2025.11109.10018.48-preview 214 11/8/2025
2025.11108.10119.29-preview 202 11/8/2025
2025.11106.10037.1-preview 266 11/6/2025
2025.11105.10254.54-preview 268 11/5/2025
2025.11105.10141.16-preview 262 11/5/2025
2025.11104.12308.54-preview 266 11/4/2025
2025.11104.10144.47-preview 273 11/4/2025
2025.11102.12003.8-preview 260 11/2/2025
2025.11102.11228.52-preview 259 11/2/2025
2025.11102.10309.42-preview 195 11/2/2025
2025.11029.11433.38-preview 263 10/29/2025
2025.11029.10201.38-preview 252 10/29/2025
2025.11027.11947.55-preview 247 10/27/2025
2025.11022.12207.12-preview 235 10/22/2025
2025.11019.12053.37-preview 237 10/19/2025
2025.11016.11750.24-preview 230 10/16/2025
2025.11015.10219.44-preview 231 10/15/2025
2025.11014.10245.12-preview 238 10/14/2025
2025.11012.10130.11-preview 324 10/12/2025
2025.11010.10052.52-preview 392 10/9/2025
2025.11001.12118.13-preview 402 10/1/2025
2025.10925.10144.25-preview 465 9/25/2025
2025.10921.11353.29-preview 460 9/21/2025
2025.10913.11841.29-preview 350 9/13/2025
2025.10912.12351.59-preview 301 9/12/2025
2025.10912.10210.52-preview 367 9/12/2025
2025.10911.10131.43-preview 343 9/10/2025
2025.10910.12340.34-preview 360 9/10/2025
2025.10910.11327.15-preview 360 9/10/2025
2025.10910.11206.45-preview 360 9/10/2025
2025.10910.10230.58-preview 375 9/10/2025
2025.10908.12343.47-preview 567 9/8/2025
2025.10904.12337.35-preview 558 9/4/2025
2025.10904.12245.51-preview 584 9/4/2025
2025.10904.11425.5-preview 596 9/4/2025
2025.10904.10323.39-preview 571 9/4/2025
2025.10826.11425.3-preview 661 8/26/2025
2025.10825.12350.9-preview 574 8/25/2025
2025.10810.10248-preview 557 8/10/2025
2025.10809.10146.35-preview 555 8/9/2025
2025.10806.12031.49-preview 639 8/6/2025
2025.10806.11955.54-preview 647 8/6/2025
2025.10806.11433.24-preview 647 8/6/2025
2025.10709.10105.39-preview 571 7/8/2025
2025.10707.12320.3-preview 572 7/7/2025
2025.10706.11957.9-preview 579 7/6/2025
2025.10702.11752.47-preview 587 7/2/2025
2025.10702.11256.17-preview 583 7/2/2025
2025.10702.11119.10-preview 587 7/2/2025
2025.10702.10000.31-preview 569 7/1/2025
2025.10701.11524.1-preview 580 7/1/2025
2025.10701.11310.13-preview 573 7/1/2025
2025.10630.12022.58-preview 554 6/30/2025
2025.10612.12134.8-preview 778 6/12/2025
2025.10611.12313.53-preview 704 6/11/2025
2025.10603.10159.54-preview 520 6/3/2025
2025.10602.11908.9-preview 548 6/2/2025
2025.10601.10124.29-preview 494 5/31/2025
2025.10531.12235.29-preview 479 5/31/2025
2025.10530.10121.50-preview 544 5/29/2025
2025.10527.12202.4-preview 555 5/27/2025
2025.10526.12034.25-preview 546 5/26/2025
2025.10521.11828.30-preview 530 5/21/2025
2025.10520.11715.6-preview 538 5/20/2025
2025.10520.11515.16-preview 573 5/20/2025
2025.10518.12303.43-preview 555 5/18/2025
2025.10518.11257.36-preview 558 5/18/2025
2025.10517.12347.27-preview 499 5/17/2025
2025.10517.12003.6-preview 483 5/17/2025
2025.10516.11720.13-preview 566 5/16/2025
2025.10514.12334.2-preview 648 5/14/2025
2025.10514.10015.27-preview 609 5/13/2025
2025.10511.11032.32-preview 580 5/11/2025
2025.10413.11530 611 4/13/2025
2025.10413.11434.33-preview 614 4/13/2025
2025.10413.10205.50-preview 530 4/13/2025
2025.10412.11526.4-preview 502 4/12/2025
2025.10412.10141 531 4/12/2025
2025.10411.11811.23-preview 544 4/11/2025
2025.10411.11645.1-preview 535 4/11/2025
2025.10410.11458.35-preview 597 4/10/2025
2025.10405.10143.28-preview 484 4/5/2025
2025.10403.12208.1-preview 564 4/3/2025
2025.10403.11954.16-preview 544 4/3/2025
2025.10401.11908.24-preview 537 4/1/2025
2025.10401.11559.45-preview 556 4/1/2025
2025.10331.12215.59-preview 527 3/31/2025
2025.10331.12130.34-preview 590 3/31/2025
2025.10331.10056.40-preview 532 3/30/2025
2025.10328.10150.21-preview 805 3/28/2025
2025.10323.11359-preview 974 3/23/2025
2025.10320.11800 814 3/20/2025
2025.10320.11616.45-preview 805 3/20/2025
2025.10320.10000 787 3/19/2025
2025.10319.12311.26-preview 789 3/19/2025
2025.10319.12238.6-preview 837 3/19/2025
2025.10319.12057.59-preview 817 3/19/2025
2025.10318.10055 857 3/18/2025
2025.10317.11728.13-preview 830 3/17/2025
2025.10317.11201.3-preview 856 3/17/2025
2025.10315.11523.14-preview 761 3/15/2025
2025.10305.12342 1,095 3/5/2025
2025.10305.12321.9-preview 875 3/5/2025
2025.10301.12313 993 3/1/2025
2025.10301.12129.38-preview 827 3/1/2025
2025.10221.10043.29-preview 841 2/21/2025
2025.1051.1246 925 2/20/2025
2025.1051.44.54-preview 766 2/20/2025
2025.1044.1 995 2/13/2025
2025.1044.0.2-preview 795 2/13/2025
2025.1043.0.2-preview 815 2/12/2025
2025.1041.0.1-preview 830 2/10/2025
2025.1038.1 982 2/7/2025
2025.1038.0.1-preview 847 2/7/2025
2025.1035.1 934 2/4/2025
2025.1035.0.1-preview 838 2/4/2025
2025.1034.1 903 2/3/2025
2025.1034.0.1-preview 803 2/3/2025
2025.1033.0.5-preview 830 2/2/2025
2025.1033.0.3-preview 797 2/2/2025
2025.1033.0.2-preview 814 2/2/2025
2025.1033.0.1-preview 792 2/2/2025
2025.1025.1 1,017 1/25/2025
2025.1025.0.1-preview 869 1/25/2025
2025.1021.1 1,054 1/21/2025
2025.1021.0.1-preview 897 1/21/2025
2025.1020.1 1,074 1/20/2025
2025.1020.0.3-preview 901 1/20/2025
2025.1020.0.1-preview 906 1/20/2025
2025.1018.0.7-preview 938 1/18/2025
2025.1018.0.5-preview 892 1/18/2025
2025.1018.0.4-preview 893 1/18/2025
2025.1017.0.2-preview 920 1/17/2025
2025.1017.0.1-preview 867 1/17/2025
2025.1016.0.1-preview 840 1/16/2025
2025.1010.1 989 1/10/2025
2025.1010.0.1-preview 857 1/9/2025
2025.1009.0.3-preview 867 1/9/2025
2025.1007.1 1,052 1/7/2025
2025.1007.0.5-preview 895 1/7/2025
2025.1007.0.3-preview 910 1/7/2025
2025.1006.1 1,029 1/7/2025
2025.1005.1 1,031 1/5/2025
2025.1005.0.2-preview 876 1/5/2025
2025.1004.1 1,040 1/4/2025
2024.1366.1 1,020 12/31/2024
2024.1366.0.2-preview 958 12/31/2024
2024.1366.0.1-preview 919 12/31/2024
2024.1365.0.2-preview 901 12/30/2024
2024.1365.0.1-preview 950 12/30/2024
2024.1361.0.2-preview 898 12/26/2024
2024.1353.0.1-preview 900 12/18/2024
2024.1352.0.3-preview 911 12/17/2024
2024.1352.0.2-preview 936 12/17/2024
2024.1352.0.1-preview 874 12/17/2024
2024.1351.1 1,075 12/16/2024
2024.1351.0.3-preview 911 12/16/2024
2024.1350.1 1,087 12/15/2024
2024.1343.1 1,060 12/8/2024
2024.1339.1 1,062 12/4/2024
2024.1336.1 1,104 12/1/2024
2024.1332.1 1,067 11/27/2024
2024.1330.1 1,052 11/25/2024
2024.1328.1 1,100 11/23/2024
2024.1325.1 1,070 11/20/2024
2024.1323.1 1,069 11/18/2024
2024.1316.1 131 11/11/2024
2024.1307.1 143 11/2/2024
2024.1300.1 157 10/26/2024
2024.1294.1 164 10/20/2024
2024.1290.1 1,062 10/16/2024
2024.1283.1 1,185 10/8/2024
2024.1282.1 1,083 10/8/2024
2024.1278.1 1,138 10/4/2024
2024.1277.1 1,093 10/3/2024
2024.1275.2 631 10/1/2024
2024.1275.1 574 10/1/2024
2024.1274.1 589 9/30/2024
2024.1263.1 579 9/19/2024
2024.1261.1 730 9/17/2024
2024.1258.1 626 9/13/2024
2024.1257.1 662 9/13/2024
2024.1256.1 616 9/12/2024
2024.1254.1 648 9/10/2024
2024.1250.1 687 9/6/2024
2024.1249.1 659 9/5/2024
2024.1246.1 659 9/2/2024
2024.1245.1 624 9/1/2024
2024.1237.1 661 8/24/2024
2024.1235.0.1-preview 640 8/23/2024
2024.1230.1 624 8/18/2024
2024.1229.1 640 8/16/2024
2024.1228.1 634 8/15/2024
2024.1222.1 727 8/8/2024
2024.1221.1 684 8/7/2024
2024.1221.0.2-preview 558 8/8/2024
2024.1221.0.1-preview 587 8/8/2024
2024.1220.1 609 8/7/2024
2024.1219.0.2-preview 563 8/6/2024
2024.1219.0.1-preview 549 8/6/2024
2024.1217.0.2-preview 517 8/4/2024
2024.1217.0.1-preview 515 8/4/2024
2024.1216.0.2-preview 532 8/3/2024
2024.1216.0.1-preview 527 8/3/2024
2024.1208.0.1-preview 506 7/26/2024
2024.1207.0.7-preview 525 7/25/2024
2024.1207.0.5-preview 488 7/25/2024
2024.1166.1 689 6/14/2024
2024.1165.1 587 6/13/2024
2024.1164.1 555 6/12/2024
2024.1162.1 590 6/10/2024
2024.1158.1 665 6/6/2024
2024.1156.1 627 6/4/2024
2024.1152.1 743 5/31/2024
2024.1151.1 656 5/29/2024
2024.1150.2 611 5/29/2024
2024.1150.1 605 5/29/2024
2024.1149.1 584 5/28/2024
2024.1147.1 605 5/26/2024
2024.1146.2 553 5/25/2024
2024.1146.1 577 5/25/2024
2024.1145.1 575 5/24/2024
2024.1135.2 579 5/14/2024
2024.1135.1 555 5/14/2024
2024.1134.1 582 5/13/2024
2024.1130.1 640 5/9/2024
2024.1123.1 631 5/2/2024
2024.1121.1 600 4/30/2024
2024.1114.1 666 4/22/2024
2024.1113.0.5-preview 602 4/22/2024
2024.1113.0.3-preview 580 4/22/2024
2024.1113.0.2-preview 588 4/22/2024
2024.1113.0.1-preview 561 4/22/2024
2024.1108.0.1-preview 565 4/17/2024
2024.1107.0.1-preview 598 4/16/2024
2024.1094.2 668 4/3/2024
2024.1094.1 581 4/3/2024
2024.1092.1 628 4/1/2024
2024.1088.1 647 3/28/2024
2024.1085.1 674 3/25/2024
2024.1080.2 722 3/20/2024
2024.1080.1 704 3/20/2024
2024.1078.1 727 3/18/2024
2024.1077.1 640 3/17/2024
2024.1073.1 745 3/13/2024
2024.1070.1 797 3/10/2024
2024.1069.1 787 3/9/2024
2024.1068.1 781 3/8/2024
2024.1066.2 709 3/6/2024
2024.1066.1 741 3/6/2024
2024.1065.1 796 3/5/2024
2024.1065.0.1-preview 722 3/5/2024
2024.1063.2 817 3/3/2024
2024.1063.1 771 3/3/2024
2024.1062.1 733 3/2/2024
2024.1061.2 800 3/1/2024
2024.1061.1 803 3/1/2024
2024.1060.2 736 2/29/2024
2024.1060.1 828 2/29/2024
2024.1060.0.5-preview 715 2/29/2024
2024.1060.0.3-preview 698 2/29/2024
2024.1059.0.1-preview 713 2/28/2024
2024.1058.1 775 2/27/2024
2024.1056.1 774 2/25/2024
2024.1055.1 810 2/24/2024
2024.1052.1 884 2/21/2024
2024.1050.2 859 2/20/2024
2024.1050.1 836 2/19/2024
2024.1049.1 828 2/18/2024
2024.1048.1 836 2/17/2024
2024.1047.1 860 2/16/2024
2024.1035.1 993 2/4/2024
2024.1034.2 938 2/3/2024
2024.1029.1 2,278 1/29/2024
2024.1023.1 2,351 1/23/2024
2024.1022.1 2,290 1/22/2024
2024.1020.1 2,226 1/20/2024
2024.1019.1 2,245 1/19/2024
2024.1017.1 2,257 1/17/2024
2024.1012.1 2,340 1/12/2024
2024.1010.1 2,344 1/10/2024
2024.1008.1 2,493 1/8/2024
2024.1007.1 2,447 1/7/2024
2024.1005.1 2,434 1/5/2024
2024.1004.1 2,447 1/4/2024
2023.1365.1 2,473 12/31/2023
2023.1362.1 2,429 12/28/2023
2023.1361.1 2,561 12/27/2023
2023.1359.1 2,486 12/25/2023
2023.1358.1 2,482 12/24/2023
2023.1357.1 2,484 12/23/2023
2023.1342.1 2,769 12/8/2023
2023.1336.1 2,820 12/2/2023
2023.1332.1 2,814 11/28/2023
2023.1330.1 2,689 11/26/2023
2023.1325.1 2,783 11/21/2023
2023.1323.1 1,122 11/19/2023
2023.1320.1 1,155 11/17/2023
2023.1318.1 2,724 11/15/2023
2023.1317.1 1,028 11/13/2023
2023.1307.1 1,096 11/3/2023
2023.1305.1 1,109 11/1/2023
2023.1304.1 1,072 10/31/2023
2023.1294.1 1,122 10/21/2023
2023.1290.1 1,057 10/16/2023
2023.1289.1 1,136 10/16/2023
2023.1284.1 1,156 10/11/2023
2023.1276.1 1,184 10/3/2023
2023.1275.1 1,213 10/2/2023
2023.1272.1 1,254 9/29/2023
2023.1269.1 1,233 9/26/2023
2023.1242.1 3,208 8/30/2023
2023.1231.1 3,454 8/19/2023
2023.1229.1 3,457 8/17/2023
2023.1228.1 3,301 8/16/2023
2023.1227.1 3,362 8/15/2023
2023.1224.2 3,441 8/12/2023
2023.1224.1 3,474 8/12/2023
2023.1213.2 3,646 8/1/2023
2023.1213.1 3,655 8/1/2023
2023.1209.1 3,616 7/27/2023
2023.1201.1 3,727 7/20/2023
2023.1197.1 3,737 7/16/2023
2023.1178.1 3,824 6/27/2023
2023.1175.1 3,939 6/24/2023
2023.1174.1 3,826 6/22/2023
2023.1169.1 3,964 6/18/2023
2023.1165.1 3,881 6/14/2023
2023.1161.1 4,135 6/11/2023
2023.1159.1 4,142 6/7/2023
2023.1157.1 4,228 6/6/2023
2023.1146.1 4,121 5/27/2023
2023.1139.1 4,328 5/19/2023
2023.1137.1 4,392 5/17/2023
2023.1136.1 4,471 5/16/2023
2023.1118.1 4,774 4/28/2023
2023.1111.1 4,795 4/21/2023
2023.1110.1 4,835 4/20/2023
2023.1105.1 4,816 4/15/2023
2023.1103.1 4,752 4/13/2023
2023.1102.1 4,874 4/12/2023
2023.1101.1 4,943 4/11/2023
2023.1090.1 5,487 3/31/2023
2023.1089.1 5,350 3/30/2023
2023.1088.1 5,227 3/29/2023
2023.1082.1 5,294 3/23/2023
2023.1078.1 5,663 3/19/2023
2023.1070.1 5,711 3/11/2023
2023.1069.1 5,634 3/10/2023
2023.1064.1 5,715 3/5/2023
2023.1060.1 5,805 3/1/2023
2023.1057.1 5,967 2/26/2023
2023.1046.1 6,330 2/15/2023
2023.1043.2 6,494 2/12/2023
2023.1043.1 6,314 2/12/2023
2023.1042.1 6,460 2/11/2023
2023.1041.1 6,289 2/10/2023
2023.1039.1 6,363 2/8/2023
2023.1036.1 6,260 2/5/2023
2023.1035.1 6,458 2/4/2023
2023.1033.1 6,491 2/2/2023
2023.1030.1 6,706 1/30/2023
2023.1028.1 6,732 1/28/2023
2023.1026.1 6,767 1/26/2023
2023.1025.1 6,743 1/25/2023
2023.1024.1 6,752 1/24/2023
2023.1023.1 6,833 1/23/2023
2022.1319.1 7,127 11/15/2022
2022.1309.1 8,061 11/5/2022
2022.1307.1 8,163 11/3/2022
2022.1295.1 9,052 10/22/2022
2022.1290.1 9,240 10/17/2022
2022.1289.2 9,137 10/16/2022
2022.1289.1 8,541 10/16/2022
2022.1283.1 8,901 10/10/2022
2022.1282.1 8,647 10/9/2022
2022.1278.1 8,628 10/5/2022
2022.1272.2 8,919 9/29/2022
2022.1272.1 8,958 9/29/2022
2022.1271.1 9,033 9/28/2022
2022.1266.1 9,266 9/23/2022
2022.1259.1 9,193 9/16/2022
2022.1257.1 9,163 9/14/2022
2022.1250.1 9,234 9/7/2022
2022.1250.0.2-preview 2,874 9/7/2022
2022.1249.0.2-preview 2,877 9/6/2022
2022.1249.0.1-preview 2,911 9/6/2022
2022.1197.1 8,903 7/16/2022
2022.1196.1 8,956 7/15/2022
2022.1194.1 8,925 7/13/2022
2022.1182.1 8,993 7/1/2022
2022.1178.1 8,901 6/27/2022
2022.1166.1 8,925 6/15/2022
2022.1157.1 9,098 6/6/2022
2022.1150.1 8,969 5/30/2022
2022.1149.1 9,018 5/29/2022
2022.1144.1 9,117 5/24/2022
0.6.2 9,090 5/23/2022
0.6.1 9,031 5/23/2022
0.6.0 9,075 5/14/2022
0.5.3 9,356 5/8/2022
0.5.2 9,193 5/1/2022
0.5.1 9,135 5/1/2022
0.5.0 9,047 4/23/2022
0.4.1 9,742 4/15/2022
0.4.0 9,701 4/9/2022
0.3.3 9,736 4/8/2022
0.3.2 9,870 4/1/2022
0.3.1 9,843 3/29/2022
0.3.0 9,627 3/28/2022
0.2.3 9,811 3/28/2022
0.2.2 9,715 3/25/2022
0.2.1 9,863 3/21/2022
0.2.0 9,694 3/18/2022