Foundatio 12.0.0

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Foundatio --version 12.0.0
                    
NuGet\Install-Package Foundatio -Version 12.0.0
                    
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="Foundatio" Version="12.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Foundatio" Version="12.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Foundatio" />
                    
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 Foundatio --version 12.0.0
                    
#r "nuget: Foundatio, 12.0.0"
                    
#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 Foundatio@12.0.0
                    
#: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=Foundatio&version=12.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Foundatio&version=12.0.0
                    
Install as a Cake Tool

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ, Kafka and in memory (for development).

Why Foundatio?

When building several big cloud applications we found a lack of great solutions (that's not to say there isn't solutions out there) for many key pieces to building scalable distributed applications while keeping the development experience simple. Here are a few examples of why we built and use Foundatio:

  • Wanted to build against abstract interfaces so that we could easily change implementations.
  • Wanted the blocks to be dependency injection friendly.
  • Caching: We were initially using an open source Redis cache client but then it turned into a commercial product with high licensing costs. Not only that, but there weren't any in memory implementations so every developer was required to set up and configure Redis.
  • Message Bus: We initially looked at NServiceBus (great product) but it had high licensing costs (they have to eat too) but was not OSS friendly. We also looked into MassTransit (another great product) but found Azure support lacking at the time and local set up a pain (for in memory). We wanted a simple message bus that just worked locally or in the cloud.
  • Storage: We couldn't find any existing project that was decoupled and supported in memory, file storage or Azure Blob Storage.

To summarize, if you want pain free development and testing while allowing your app to scale, use Foundatio!

Implementations

Getting Started (Development)

Foundatio can be installed via the NuGet package manager. If you need help, please open an issue or join our Discord chat room. We’re always here to help if you have any questions!

This section is for development purposes only! If you are trying to use the Foundatio libraries, please get them from NuGet.

  1. You will need to have Visual Studio Code installed.
  2. Open the Foundatio.slnx Visual Studio solution file.

Using Foundatio

The sections below contain a small subset of what's possible with Foundatio. We recommend taking a peek at the source code for more information. Please let us know if you have any questions or need assistance!

Caching

Caching allows you to store and access data lightning fast, saving you exspensive operations to create or get data. We provide four different cache implementations that derive from the ICacheClient interface:

  1. InMemoryCacheClient: An in memory cache client implementation. This cache implementation is only valid for the lifetime of the process. It's worth noting that the in memory cache client has the ability to cache the last X items via the MaxItems property. We use this in Exceptionless to only keep the last 250 resolved geoip results.
  2. HybridCacheClient: This cache implementation uses both an ICacheClient and the InMemoryCacheClient and uses an IMessageBus to keep the cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and a call to the remote cache if the item exists in the local cache.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: An implementation of HybridCacheClient that uses the RedisCacheClient as ICacheClient and the RedisMessageBus as IMessageBus.
  5. ScopedCacheClient: This cache implementation takes an instance of ICacheClient and a string scope. The scope is prefixed onto every cache key. This makes it really easy to scope all cache keys and remove them with ease.
Sample
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

Queues

Queues offer First In, First Out (FIFO) message delivery. We provide four different queue implementations that derive from the IQueue interface:

  1. InMemoryQueue: An in memory queue implementation. This queue implementation is only valid for the lifetime of the process.
  2. RedisQueue: An Redis queue implementation.
  3. AzureServiceBusQueue: An Azure Service Bus Queue implementation.
  4. AzureStorageQueue: An Azure Storage Queue implementation.
  5. SQSQueue: An AWS SQS implementation.
Sample
using Foundatio.Queues;

IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();

await queue.EnqueueAsync(new SimpleWorkItem {
    Data = "Hello"
});

var workItem = await queue.DequeueAsync();

Locks

Locks ensure a resource is only accessed by one consumer at any given time. We provide two different locking implementations that derive from the ILockProvider interface:

  1. CacheLockProvider: A lock implementation that uses cache to communicate between processes.
  2. ThrottlingLockProvider: A lock implementation that only allows a certain amount of locks through. You could use this to throttle api calls to some external service and it will throttle them across all processes asking for that lock.
  3. ScopedLockProvider: This lock implementation takes an instance of ILockProvider and a string scope. The scope is prefixed onto every lock key. This makes it really easy to scope all locks and release them with ease.

It's worth noting that all lock providers take a ICacheClient. This allows you to ensure your code locks properly across machines.

Sample
using Foundatio.Lock;

ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();

ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();

Messaging

Allows you to publish and subscribe to messages flowing through your application. We provide four different message bus implementations that derive from the IMessageBus interface:

  1. InMemoryMessageBus: An in memory message bus implementation. This message bus implementation is only valid for the lifetime of the process.
  2. RedisMessageBus: A Redis message bus implementation.
  3. RabbitMQMessageBus: A RabbitMQ implementation.
  4. KafkaMessageBus: A Kafka implementation.
  5. AzureServiceBusMessageBus: An Azure Service Bus implementation.
Sample
using Foundatio.Messaging;

IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
  // Got message
});

await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });

Jobs

Allows you to run a long running process (in process or out of process) without worrying about it being terminated prematurely. We provide three different ways of defining a job, based on your use case:

  1. Jobs: All jobs must derive from the IJob interface. We also have a JobBase base class you can derive from which provides a JobContext and logging. You can then run jobs by calling RunAsync() on the job or by creating a instance of the JobRunner class and calling one of the Run methods. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldJob : JobBase {
  public int RunCount { get; set; }

  protected override Task<JobResult> RunInternalAsync(JobContext context) {
     RunCount++;
     return Task.FromResult(JobResult.Success);
  }
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
  1. Queue Processor Jobs: A queue processor job works great for working with jobs that will be driven from queued data. Queue Processor jobs must derive from QueueJobBase<T> class. You can then run jobs by calling RunAsync() on the job or passing it to the JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
  public int RunCount { get; set; }

  public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}

  protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
     RunCount++;

     return Task.FromResult(JobResult.Success);
  }
}

public class HelloWorldQueueItem {
  public string Message { get; set; }
}
 // Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());

// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue

IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
  1. Work Item Jobs: A work item job will run in a job pool among other work item jobs. This type of job works great for things that don't happen often but should be in a job (Example: Deleting an entity that has many children.). It will be triggered when you publish a message on the message bus. The job must derive from the WorkItemHandlerBase class. You can then run all shared jobs via JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using System.Threading.Tasks;
using Foundatio.Jobs;

public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
  public override async Task HandleItemAsync(WorkItemContext ctx) {
    var workItem = ctx.GetData<HelloWorldWorkItem>();

    // We can report the progress over the message bus easily.
    // To receive these messages just inject IMessageSubscriber
    // and Subscribe to messages of type WorkItemStatus
    await ctx.ReportProgressAsync(0, "Starting Hello World Job");
    await Task.Delay(TimeSpan.FromSeconds(2.5));
    await ctx.ReportProgressAsync(50, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(70, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(90, "Reading value.");
    await Task.Delay(TimeSpan.FromSeconds(.5));

    await ctx.ReportProgressAsync(100, workItem.Message);
  }
}

public class HelloWorldWorkItem {
  public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();

// Register the handlers with dependency injection.
container.AddSingleton(handlers);

// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());

// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
 // To trigger the job we need to queue the HelloWorldWorkItem message.
 // This assumes that we injected an instance of IQueue<WorkItemData> queue

 // NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
 // Foundatio has an extension method that takes the model you post and serializes it to the
 // WorkItemData.Data property.
 await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });

File Storage

We provide different file storage implementations that derive from the IFileStorage interface:

  1. InMemoryFileStorage: An in memory file implementation. This file storage implementation is only valid for the lifetime of the process.
  2. FolderFileStorage: An file storage implementation that uses the hard drive for storage.
  3. AzureFileStorage: An Azure Blob storage implementation.
  4. S3FileStorage: An AWS S3 file storage implementation.
  5. RedisFileStorage: An Redis file storage implementation.
  6. MinioFileStorage An Minio file storage implementation.
  7. AliyunFileStorage: An Aliyun file storage implementation.
  8. SshNetFileStorage: An SFTP file storage implementation.

We recommend using all of the IFileStorage implementations as singletons.

Sample
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

Resilience

Resilience policies provide a powerful way to handle transient failures and make your applications more robust by implementing retry logic, circuit breakers, and timeouts. The resilience system allows you to configure policies globally or per-operation, giving you fine-grained control over how Foundatio components handle failures.

The resilience system is built around the IResiliencePolicy interface and provides:

  1. Retry Logic: Automatically retry failed operations with configurable delays and maximum attempts
  2. Circuit Breaker: Temporarily stop calling failing services to prevent cascading failures
  3. Timeout: Set maximum execution time for operations
  4. Exponential Backoff: Gradually increase delays between retries with optional jitter
  5. Exception Filtering: Configure which exceptions should trigger retries

You can customize resilience behavior throughout Foundatio by implementing IResiliencePolicyProvider and passing it via options. This allows you to replace the default retry behavior in caching, queues, storage, and other Foundatio components.

Resilience Policy Sample
using Foundatio.Resilience;

// Create a basic resilience policy
var policy = new ResiliencePolicyBuilder()
    .WithMaxAttempts(5)
    .WithExponentialDelay(TimeSpan.FromSeconds(1))
    .WithTimeout(TimeSpan.FromMinutes(5))
    .WithJitter()
    .Build();

// Execute an operation with resilience
await policy.ExecuteAsync(async ct => {
    // Your operation that might fail
    await SomeUnreliableOperationAsync(ct);
});
Circuit Breaker Sample
using Foundatio.Resilience;

// Create a policy with circuit breaker
var policy = new ResiliencePolicyBuilder()
    .WithMaxAttempts(3)
    .WithCircuitBreaker(cb => cb
        .WithFailureRatio(0.5) // Open circuit at 50% failure rate
        .WithMinimumCalls(10)  // Need at least 10 calls before opening
        .WithBreakDuration(TimeSpan.FromMinutes(1)))
    .Build();

await policy.ExecuteAsync(async ct => {
    // This will be protected by the circuit breaker
    await CallExternalServiceAsync(ct);
});
Custom Resilience Provider Sample
using Foundatio.Resilience;

// Create a custom resilience provider for your application
var resilienceProvider = new ResiliencePolicyProvider()
    .WithDefaultPolicy(builder => builder
        .WithMaxAttempts(3)
        .WithExponentialDelay(TimeSpan.FromSeconds(1))
        .WithTimeout(TimeSpan.FromMinutes(2)))
    .WithPolicy("external-api", builder => builder
        .WithMaxAttempts(5)
        .WithCircuitBreaker()
        .WithTimeout(TimeSpan.FromSeconds(30)))
    .WithPolicy<MyService>(builder => builder
        .WithMaxAttempts(3)
        .WithLinearDelay()
        .WithTimeout(TimeSpan.FromSeconds(30)));

// Use named policies
var apiPolicy = resilienceProvider.GetPolicy("external-api");
await apiPolicy.ExecuteAsync(async ct => {
    await CallExternalApiAsync(ct);
});

// Use class based policies
var apiPolicy = resilienceProvider.GetPolicy<MyService>();
await apiPolicy.ExecuteAsync(async ct => {
    await CallMyServiceAsync(ct);
});

Sample Application

We have both slides and a sample application that shows off how to use Foundatio.

Thanks to all the people who have contributed

contributors

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (54)

Showing the top 5 NuGet packages that depend on Foundatio:

Package Downloads
Foundatio.Redis

Pluggable foundation blocks for building distributed apps.

Foundatio.JsonNet

Pluggable foundation blocks for building distributed apps.

Foundatio.MetricsNET

Pluggable foundation blocks for building distributed apps.

Foundatio.AzureStorage

Pluggable foundation blocks for building distributed apps.

Foundatio.AWS

Pluggable foundation blocks for building distributed apps.

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on Foundatio:

Repository Stars
Kaioru/Edelstein
A v.95.1 Mushroom game server emulator written in C# .NET
FoundatioFx/Foundatio.Redis
Foundatio Redis
Version Downloads Last Updated
13.0.0-beta1 767 1/12/2026
12.0.0 73,517 8/20/2025
11.1.0 42,010 5/9/2025
11.0.8 93,306 1/31/2025
11.0.7 7,998 1/31/2025
11.0.6 46,699 11/26/2024
11.0.5 28,927 9/27/2024
11.0.4 8,252 9/27/2024
11.0.3 12,797 9/16/2024
11.0.2 38,020 8/31/2024
11.0.1 7,898 8/31/2024
11.0.0 8,317 8/30/2024
10.7.1 3,762,777 3/27/2024
10.7.0 192,512 1/5/2024
10.6.1 390,744 6/23/2023
10.6.0 438,538 1/1/2023
10.5.0 170,315 5/18/2022
10.4.0 47,172 3/7/2022
10.3.1 42,373 1/20/2022
10.3.0 12,086 1/20/2022
10.2.5 168,382 12/7/2021
10.2.4 12,501 12/3/2021
10.2.3 16,273 11/22/2021
10.2.2 215,558 9/23/2021
10.2.1 40,896 7/19/2021
10.2.0 110,260 7/8/2021
10.1.4 28,643 6/16/2021
10.1.3 38,669 4/23/2021
10.1.2 10,966 4/23/2021
10.1.1 14,029 4/15/2021
10.1.0 11,779 4/13/2021
10.0.2 99,731 1/20/2021
10.0.1 46,943 11/2/2020
10.0.0 55,024 9/16/2020
10.0.0-beta9 7,075 8/25/2020
10.0.0-beta8 6,231 8/3/2020
10.0.0-beta7 5,254 7/29/2020
10.0.0-beta6 6,566 7/7/2020
10.0.0-beta5 5,964 6/20/2020
10.0.0-beta3 5,580 6/14/2020
10.0.0-beta2 5,574 6/6/2020
10.0.0-beta10 5,147 9/15/2020
10.0.0-beta1 6,297 5/26/2020
10.0.0-alpha3 3,404 5/5/2020
10.0.0-alpha2 3,416 4/27/2020
10.0.0-alpha1 3,274 4/25/2020
9.1.1 160,384 4/28/2020
9.1.0 12,030 4/28/2020
9.0.0 156,132 1/16/2020
8.1.2126 397,304 8/30/2019
8.1.2058 105,562 5/14/2019
8.1.2027 26,557 4/16/2019
8.0.1965 72,080 2/24/2019
8.0.1948 17,909 2/22/2019
7.1.1845 270,936 11/3/2018
7.1.1841 13,514 11/3/2018
7.1.1837 13,525 11/1/2018
7.1.1833 34,872 11/1/2018
7.0.1831 13,558 11/1/2018
7.0.1818 14,138 10/30/2018
7.0.1738 86,166 9/7/2018
7.0.1706 108,252 5/9/2018
6.0.1586 65,089 11/30/2017
5.1.1562 18,634 10/30/2017
5.1.1521 20,003 9/27/2017
5.1.1515 13,750 9/26/2017
5.1.1501 19,885 9/14/2017
5.1.1498 14,121 8/28/2017
5.1.1492 13,789 8/28/2017
5.1.1490 22,001 8/16/2017
5.1.1474 33,150 8/1/2017
5.1.1470 13,138 7/31/2017
5.1.1457 35,522 6/23/2017
5.1.1448 20,680 5/5/2017
5.1.1443 14,790 5/5/2017
5.0.1336 17,856 3/14/2017
5.0.1334 13,916 3/13/2017
5.0.1331 14,862 3/12/2017
5.0.1329-pre 5,511 3/12/2017
5.0.1328-pre 5,484 3/12/2017
5.0.1327-pre 5,467 3/12/2017
5.0.1326-pre 5,537 3/12/2017
5.0.1324-pre 5,530 3/12/2017
4.3.1323-pre 5,560 3/11/2017
4.3.1319 15,450 3/1/2017
4.3.1317 16,409 2/23/2017
4.3.1316 13,972 2/22/2017
4.3.1315 13,940 2/22/2017
4.3.1314 20,355 2/20/2017
4.3.1312 13,682 2/20/2017
4.3.1311-pre 5,378 2/20/2017
4.3.1307 18,856 2/16/2017
4.3.1306 13,742 2/15/2017
4.3.1305 14,815 2/15/2017
4.3.1304-pre 5,398 2/15/2017
4.3.1303-pre 5,267 2/14/2017
4.3.1301 14,209 2/14/2017
4.3.1299 14,333 2/14/2017
4.3.1297 11,782 2/14/2017
4.3.1293 13,745 2/12/2017
4.3.1292 13,714 2/10/2017
4.3.1291 13,669 2/10/2017
4.3.1290 13,815 2/10/2017
4.3.1289 13,810 2/9/2017
4.3.1288 13,742 2/9/2017
4.3.1286 13,879 2/8/2017
4.3.1282 15,474 2/5/2017
4.3.1281 11,848 2/5/2017
4.3.1280 11,918 2/5/2017
4.3.1276-pre 4,339 2/5/2017
4.3.1177-pre 8,703 9/2/2016
4.3.1164-pre 9,804 8/21/2016
4.2.1205-pre 4,471 9/19/2016
4.2.1183 67,724 9/9/2016
4.2.1179 11,732 9/8/2016
4.2.1176 17,074 9/2/2016
4.2.1172 11,642 9/1/2016
4.2.1171-pre 4,125 9/1/2016
4.2.1169 26,509 8/22/2016
4.2.1167-pre 4,135 8/22/2016
4.2.1166-pre 4,189 8/22/2016
4.2.1161 18,307 8/10/2016
4.2.1156-pre 4,108 8/2/2016
4.2.1155 13,183 8/1/2016
4.2.1150 15,142 7/20/2016
4.2.1149-pre 4,671 7/19/2016
4.2.1148-pre 4,634 7/19/2016
4.2.1147-pre 4,661 7/19/2016
4.2.1146-pre 4,655 7/19/2016
4.2.1137 11,703 7/19/2016
4.2.1129-pre 4,137 7/19/2016
4.2.1128-pre 4,144 7/19/2016
4.2.1127-pre 4,159 7/19/2016
4.2.1126-pre 4,175 7/19/2016
4.2.1125-pre 4,127 7/19/2016
4.2.1123-pre 4,126 7/19/2016
4.2.1119-pre 4,157 7/18/2016
4.2.1113-pre 4,697 7/16/2016
4.2.1108-pre 4,651 7/15/2016
4.2.1107-pre 4,712 7/15/2016
4.2.1104-pre 4,828 7/13/2016
4.2.1099-pre 8,104 7/12/2016
4.2.1098-pre 4,688 7/12/2016
4.2.1093-pre 4,575 7/8/2016
4.2.1091-pre 4,609 7/8/2016
4.2.1090-pre 4,715 7/8/2016
4.2.1089-pre 4,658 7/7/2016
4.2.1087-pre 4,595 7/7/2016
4.2.1083-pre 4,637 7/6/2016
4.2.1082-pre 4,649 7/6/2016
4.2.1081-pre 4,557 7/6/2016
4.2.1079-pre 4,716 7/6/2016
4.2.1078-pre 4,622 7/6/2016
4.2.1073-pre 4,544 7/5/2016
4.2.1070-pre 4,661 7/5/2016
4.2.1069-pre 4,610 7/1/2016
4.2.1059-pre 4,630 7/1/2016
4.2.1046-pre 4,492 6/24/2016
4.2.1031-pre 4,144 6/24/2016
4.2.1028-pre 4,150 6/24/2016
4.2.1027-pre 4,169 6/24/2016
4.1.1009 21,088 6/15/2016
4.1.1002-pre 5,621 6/14/2016
4.1.995-pre 5,843 6/13/2016
4.1.989-pre 5,655 5/26/2016
4.1.983-pre 5,294 5/25/2016
4.1.982-pre 5,269 5/25/2016
4.1.978-pre 5,470 5/6/2016
4.1.977-pre 5,382 5/5/2016
4.1.975-pre 5,878 5/5/2016
4.0.958 16,134 5/1/2016
4.0.957 14,238 4/29/2016
4.0.956 14,253 4/29/2016
4.0.955 14,206 4/28/2016
4.0.941 14,160 4/27/2016
4.0.940 14,232 4/27/2016
4.0.925 14,110 4/27/2016
4.0.922 13,948 4/27/2016
4.0.909 14,146 4/20/2016
4.0.880 14,593 4/7/2016
4.0.869 14,110 3/30/2016
4.0.864 13,934 3/29/2016
4.0.861 14,059 3/29/2016
4.0.860 14,086 3/29/2016
4.0.857 13,967 3/29/2016
4.0.855 14,025 3/29/2016
4.0.846 13,798 3/22/2016
4.0.842 13,921 3/21/2016
4.0.836 13,821 3/18/2016
4.0.835 13,916 3/18/2016
4.0.834 13,901 3/17/2016
4.0.832 13,722 3/17/2016
4.0.831 13,819 3/16/2016
4.0.829 13,743 3/16/2016
4.0.828 13,717 3/15/2016
4.0.827 13,804 3/15/2016
4.0.826 13,558 3/15/2016
4.0.825 13,911 3/13/2016
4.0.821 13,993 3/11/2016
4.0.819 13,773 3/11/2016
4.0.818 13,835 3/11/2016
4.0.816 13,972 3/11/2016
4.0.815 13,614 3/11/2016
4.0.814 13,953 3/11/2016
4.0.813 13,763 3/10/2016
4.0.812 14,012 3/10/2016
4.0.811 13,639 3/10/2016
4.0.810 13,751 3/10/2016
4.0.809 13,792 3/10/2016
4.0.805 13,797 3/9/2016
4.0.797 13,761 3/9/2016
4.0.796 13,733 3/9/2016
4.0.794 13,810 3/9/2016
4.0.793 13,714 3/9/2016
4.0.792 13,709 3/8/2016
4.0.791 19,271 3/8/2016
4.0.790 13,712 3/8/2016
4.0.788 13,766 3/8/2016
4.0.774 14,022 3/2/2016
4.0.773 13,861 3/1/2016
4.0.772 13,911 3/1/2016
4.0.770 13,762 3/1/2016
4.0.769 13,827 3/1/2016
4.0.762 13,793 3/1/2016
4.0.761 14,093 3/1/2016
4.0.760 15,194 2/29/2016
4.0.759 13,802 2/29/2016
4.0.758 14,007 2/29/2016
4.0.757 13,596 2/29/2016
4.0.756 14,127 2/27/2016
4.0.755 14,225 2/27/2016
4.0.754 14,112 2/27/2016
4.0.753 14,098 2/27/2016
4.0.752 13,918 2/27/2016
4.0.750 14,196 2/27/2016
4.0.749 14,131 2/27/2016
4.0.747 14,214 2/26/2016
4.0.746 14,170 2/26/2016
4.0.744 14,087 2/26/2016
4.0.743 14,194 2/26/2016
4.0.742 14,159 2/26/2016
4.0.741 14,026 2/26/2016
4.0.739 13,799 2/25/2016
4.0.738 13,874 2/25/2016
4.0.734 13,621 2/25/2016
4.0.733-beta 5,258 2/25/2016
4.0.672 14,263 2/16/2016
4.0.669 13,735 2/11/2016
4.0.668 44,766 2/11/2016
3.0.654 14,810 2/10/2016
3.0.646 13,427 2/5/2016
3.0.645 13,420 2/5/2016
3.0.644 13,269 2/5/2016
3.0.639 13,287 2/3/2016
3.0.638 13,434 2/2/2016
3.0.637 13,270 2/1/2016
3.0.635 13,299 2/1/2016
3.0.633 17,523 1/27/2016
3.0.632 13,319 1/27/2016
3.0.629 13,475 1/18/2016
3.0.626 13,209 1/18/2016
3.0.625 13,165 1/18/2016
3.0.624 23,644 12/17/2015
3.0.623 13,510 12/9/2015
3.0.622 13,358 12/9/2015
3.0.621 13,443 12/9/2015
3.0.620 13,318 12/8/2015
3.0.613 13,921 12/4/2015
3.0.611 13,462 12/3/2015
3.0.610 13,686 11/30/2015
3.0.606 13,642 11/30/2015
3.0.605 13,628 11/25/2015
3.0.603 13,569 11/23/2015
3.0.601 13,380 11/23/2015
3.0.600 13,347 11/19/2015
3.0.599 13,338 11/19/2015
3.0.598 13,333 11/17/2015
3.0.592 13,267 11/12/2015
3.0.589 13,444 11/10/2015
3.0.588 13,400 11/10/2015
3.0.586 13,408 11/10/2015
3.0.584 13,381 11/10/2015
3.0.583 13,399 11/10/2015
3.0.581 13,670 11/6/2015
3.0.579 13,266 11/6/2015
3.0.576 13,343 11/5/2015
3.0.575 13,308 11/4/2015
3.0.574 13,223 11/4/2015
3.0.569 13,342 11/3/2015
3.0.568 13,371 11/3/2015
3.0.566 13,335 11/3/2015
3.0.548 11,683 11/3/2015
3.0.545 13,550 10/28/2015
3.0.538 13,469 10/22/2015
3.0.537 13,388 10/21/2015
3.0.536 13,409 10/21/2015
3.0.534 13,367 10/21/2015
3.0.532 13,305 10/21/2015
3.0.531 13,401 10/21/2015
3.0.524 13,344 10/15/2015
3.0.523 13,571 10/10/2015
3.0.522 13,318 10/10/2015
3.0.520 13,386 10/9/2015
3.0.519 13,669 10/9/2015
3.0.518 13,515 10/9/2015
3.0.517 13,615 10/9/2015
3.0.516 13,529 10/7/2015
3.0.514 13,617 10/6/2015
3.0.513 13,417 10/6/2015
3.0.512 13,445 10/6/2015
3.0.509 13,583 10/1/2015
3.0.507 13,456 10/1/2015
3.0.505 13,382 9/30/2015
3.0.503 13,475 9/30/2015
3.0.502 13,435 9/30/2015
3.0.479 13,469 9/25/2015
3.0.476 13,377 9/24/2015
3.0.471 13,425 9/24/2015
3.0.470 13,465 9/24/2015
3.0.469 13,393 9/24/2015
3.0.468 13,361 9/24/2015
3.0.467 13,387 9/24/2015
3.0.465 13,394 9/24/2015
3.0.459 13,358 9/23/2015
3.0.456 13,438 9/23/2015
3.0.455 13,415 9/22/2015
3.0.454 13,575 9/19/2015
3.0.453 13,395 9/19/2015
3.0.452 13,297 9/18/2015
3.0.451 13,333 9/18/2015
3.0.450 13,344 9/18/2015
3.0.447 14,733 9/18/2015
2.0.378 13,465 9/5/2015
2.0.372 13,353 9/4/2015
2.0.370 13,408 9/4/2015
2.0.368 13,323 9/4/2015
2.0.365 14,294 9/3/2015
2.0.363 13,284 9/3/2015
2.0.361 13,336 9/3/2015
1.0.360 13,413 9/1/2015
1.0.359 13,335 9/1/2015
1.0.358 13,376 9/1/2015
1.0.356 13,360 8/31/2015
1.0.355 13,399 8/31/2015
1.0.354 13,344 8/29/2015
1.0.305 13,393 8/19/2015
1.0.299 13,825 8/8/2015
1.0.293 13,447 7/20/2015
1.0.292 13,446 7/20/2015
1.0.289 13,541 7/10/2015
1.0.288 13,454 7/10/2015
1.0.286 13,427 7/7/2015
1.0.285 13,502 7/7/2015
1.0.284 13,406 7/7/2015
1.0.282 13,392 7/6/2015
1.0.281 13,403 7/6/2015
1.0.279 13,370 7/6/2015
1.0.277 13,480 6/18/2015
1.0.276 13,456 6/8/2015
1.0.275 13,390 6/8/2015
1.0.274 13,204 6/8/2015
1.0.272 14,084 6/1/2015
1.0.269 13,355 5/25/2015
1.0.268 13,351 5/24/2015
1.0.266 13,295 5/24/2015
1.0.263 13,382 5/21/2015
1.0.258 13,377 5/19/2015
1.0.257 13,404 5/18/2015
1.0.256 13,701 5/17/2015
1.0.254 13,456 5/13/2015
1.0.253 13,339 5/13/2015
1.0.250 13,310 5/13/2015
1.0.249 13,446 5/12/2015
1.0.248 13,350 5/12/2015
1.0.245 13,306 5/12/2015
1.0.241 13,342 5/12/2015
1.0.240 13,136 5/12/2015
1.0.237 13,160 5/11/2015
1.0.234 13,123 5/9/2015
1.0.233 12,995 5/9/2015
1.0.231 13,088 5/7/2015
1.0.230 13,214 5/7/2015
1.0.229 13,081 5/7/2015
1.0.226 13,075 5/7/2015
1.0.217 13,330 4/28/2015
1.0.215 13,224 4/27/2015
1.0.213 13,317 4/23/2015
1.0.210 13,092 4/23/2015
1.0.209 13,086 4/15/2015
1.0.202 13,177 4/15/2015
1.0.201 13,142 4/15/2015
1.0.198 13,054 4/15/2015
1.0.197 13,113 4/15/2015
1.0.196 13,211 4/15/2015
1.0.195 13,173 4/15/2015
1.0.194 13,166 4/15/2015
1.0.193 13,140 4/15/2015
1.0.192 13,090 4/15/2015
1.0.191 13,247 4/14/2015
1.0.189 13,080 4/10/2015
1.0.187 13,169 4/9/2015
1.0.186 13,222 4/8/2015
1.0.185 13,300 4/6/2015
1.0.183 12,999 4/3/2015
1.0.181 13,152 4/3/2015
1.0.180 13,188 4/2/2015
1.0.178 13,111 4/1/2015
1.0.177 13,162 4/1/2015
1.0.175 13,035 4/1/2015
1.0.171 13,045 3/31/2015
1.0.170 12,989 3/31/2015
1.0.168 13,055 3/31/2015
1.0.164 13,368 3/30/2015
1.0.162 13,306 3/28/2015
1.0.160 13,323 3/27/2015
1.0.159 13,333 3/26/2015
1.0.157 12,872 3/24/2015
1.0.156 13,286 3/24/2015
1.0.154 13,235 3/24/2015
1.0.152 13,466 3/24/2015
1.0.151 13,270 3/23/2015
1.0.150 13,326 3/23/2015
1.0.149 13,356 3/23/2015
1.0.148 13,314 3/23/2015
1.0.147 13,224 3/21/2015
1.0.146 13,325 3/20/2015
1.0.145 13,317 3/19/2015
1.0.143 13,456 3/18/2015
1.0.142 13,454 3/12/2015
1.0.141 13,284 3/12/2015
1.0.140 13,261 3/5/2015
1.0.139 13,307 3/5/2015
1.0.138 13,290 3/4/2015
1.0.137 13,223 3/3/2015
1.0.134 13,660 3/3/2015
1.0.129 13,470 3/3/2015
1.0.128 13,377 3/3/2015
1.0.125 13,349 2/28/2015
1.0.124 13,631 2/28/2015
1.0.122 13,388 2/28/2015
1.0.119 13,666 2/25/2015
1.0.117 13,966 2/24/2015
1.0.115 13,715 2/24/2015
1.0.114 13,522 2/23/2015
1.0.113 13,493 2/23/2015
1.0.112 13,614 2/23/2015
1.0.111 13,692 2/23/2015
1.0.110 13,696 2/23/2015
1.0.109 13,599 2/22/2015
1.0.108 13,509 2/22/2015
1.0.103 13,719 2/22/2015
1.0.37 12,359 2/18/2015
1.0.36 12,461 2/18/2015
1.0.35 12,528 2/17/2015
1.0.34 12,480 2/17/2015
1.0.33 12,547 2/17/2015
1.0.32 12,501 2/15/2015
1.0.31 12,493 2/15/2015
1.0.30 11,869 2/15/2015
1.0.28 12,079 2/15/2015
1.0.27 11,936 2/15/2015
1.0.26 12,003 2/13/2015
1.0.25 11,973 2/13/2015
1.0.24 11,905 2/12/2015
1.0.23 11,949 2/12/2015
1.0.0 14,091 2/21/2015