Foundatio.AzureServiceBus 10.5.0 The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved

.NET Standard 2.0
Install-Package Foundatio.AzureServiceBus -Version 10.5.0
dotnet add package Foundatio.AzureServiceBus --version 10.5.0
<PackageReference Include="Foundatio.AzureServiceBus" Version="10.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.AzureServiceBus --version 10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Foundatio.AzureServiceBus, 10.5.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Foundatio.AzureServiceBus as a Cake Addin
#addin nuget:?package=Foundatio.AzureServiceBus&version=10.5.0

// Install Foundatio.AzureServiceBus as a Cake Tool
#tool nuget:?package=Foundatio.AzureServiceBus&version=10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ 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 but found Azure support lacking and local set up a pain. 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.sln 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 the InMemoryCacheClient and uses the IMessageBus to keep the cache in sync across processes.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: This cache implementation uses both the RedisCacheClient and InMemoryCacheClient implementations and uses the RedisMessageBus to keep the in memory cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and call to Redis if the item exists in the local cache.
  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 lock = await locker.AcquireAsync("test");
// ...
await lock.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. 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")

Metrics

We provide five implementations that derive from the IMetricsClient interface:

  1. InMemoryMetricsClient: An in memory metrics implementation.
  2. RedisMetricsClient: An Redis metrics implementation.
  3. StatsDMetricsClient: An statsd metrics implementation.
  4. MetricsNETClient: An Metrics.NET implementation.
  5. AppMetricsClient: An AppMetrics implementation.
  6. CloudWatchMetricsClient: An AWS CloudWatch implementation.

We recommend using all of the IMetricsClient implementations as singletons.

Sample
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

Sample Application

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

Roadmap

This is a list of high level things that we are planning to do:

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Foundatio.AzureServiceBus:

Package Downloads
SoftwarePioniere.Fx.Hosting

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
10.5.0 323 5/18/2022
10.4.0 811 3/8/2022
10.3.0 365 1/20/2022
10.2.2 992 9/23/2021
10.2.0 9,203 7/8/2021
10.1.0 447 6/16/2021
10.0.2 1,784 1/20/2021
10.0.0 1,601 9/16/2020
10.0.0-beta9 338 8/25/2020
10.0.0-beta8 304 8/3/2020
10.0.0-beta7 313 7/29/2020
10.0.0-beta6 360 7/8/2020
10.0.0-beta5 479 6/20/2020
10.0.0-beta3 413 6/14/2020
10.0.0-beta2 400 6/6/2020
10.0.0-beta10 330 9/15/2020
10.0.0-beta1 371 5/26/2020
9.0.0 38,741 1/16/2020
8.1.1518 42,873 8/30/2019
8.0.1512 6,220 5/14/2019
8.0.1510 524 4/16/2019
8.0.1507 584 2/24/2019
8.0.1505 538 2/22/2019
7.0.1490 784 5/9/2018
6.0.1467 897 11/30/2017
5.1.1454 829 5/5/2017
5.0.1336 856 3/14/2017
5.0.1334 712 3/13/2017
5.0.1331 743 3/12/2017
5.0.1329-pre 669 3/12/2017
5.0.1328-pre 686 3/12/2017
5.0.1327-pre 690 3/12/2017
5.0.1326-pre 684 3/12/2017
5.0.1324-pre 674 3/12/2017
4.3.1323-pre 689 3/11/2017
4.3.1319 735 3/1/2017
4.3.1317 712 2/23/2017
4.3.1316 758 2/22/2017
4.3.1315 748 2/22/2017
4.3.1314 746 2/20/2017
4.3.1312 740 2/20/2017
4.3.1311-pre 741 2/20/2017
4.3.1307 756 2/16/2017
4.3.1306 750 2/15/2017
4.3.1305 741 2/15/2017
4.3.1304-pre 680 2/15/2017
4.3.1303-pre 705 2/14/2017
4.3.1301 730 2/14/2017
4.3.1299 727 2/14/2017
4.3.1293 758 2/12/2017
4.3.1292 718 2/10/2017
4.3.1291 781 2/10/2017
4.3.1290 743 2/10/2017
4.3.1289 743 2/9/2017
4.3.1288 725 2/9/2017
4.3.1286 740 2/8/2017
4.3.1282 726 2/5/2017
4.3.1281 730 2/5/2017
4.3.1280 723 2/5/2017
4.3.1276-pre 663 2/5/2017
4.3.1177-pre 715 9/2/2016
4.3.1164-pre 719 8/21/2016
4.2.1205-pre 1,030 9/19/2016
4.2.1183 882 9/9/2016
4.2.1179 760 9/8/2016
4.2.1176 756 9/2/2016
4.2.1172 733 9/1/2016
4.2.1171-pre 716 9/1/2016
4.2.1169 744 8/22/2016
4.2.1167-pre 673 8/22/2016
4.2.1166-pre 683 8/22/2016
4.2.1161 742 8/10/2016
4.2.1156-pre 711 8/2/2016
4.2.1155 752 8/1/2016
4.2.1150 769 7/20/2016
4.2.1149-pre 699 7/19/2016
4.2.1148-pre 702 7/19/2016
4.2.1147-pre 718 7/19/2016
4.2.1146-pre 691 7/19/2016
4.2.1137 800 7/19/2016
4.2.1129-pre 695 7/19/2016
4.2.1128-pre 727 7/19/2016
4.2.1127-pre 681 7/19/2016
4.2.1126-pre 703 7/19/2016
4.2.1125-pre 698 7/19/2016
4.2.1123-pre 714 7/19/2016
4.2.1119-pre 709 7/18/2016
4.2.1113-pre 740 7/16/2016
4.2.1108-pre 717 7/15/2016
4.2.1107-pre 730 7/15/2016
4.2.1104-pre 869 7/13/2016
4.2.1099-pre 889 7/12/2016
4.2.1098-pre 890 7/12/2016
4.2.1093-pre 756 7/8/2016
4.2.1091-pre 745 7/8/2016
4.2.1090-pre 748 7/8/2016
4.2.1089-pre 737 7/7/2016
4.2.1087-pre 756 7/7/2016
4.2.1083-pre 754 7/6/2016
4.2.1082-pre 738 7/6/2016
4.2.1081-pre 740 7/6/2016
4.2.1079-pre 759 7/6/2016
4.2.1078-pre 756 7/6/2016
4.2.1073-pre 758 7/5/2016
4.2.1070-pre 718 7/5/2016
4.2.1069-pre 716 7/1/2016
4.2.1059-pre 724 7/1/2016
4.2.1046-pre 686 6/24/2016
4.2.1031-pre 700 6/24/2016
4.2.1028-pre 704 6/24/2016
4.2.1027-pre 715 6/24/2016
4.1.1009 1,107 6/15/2016
4.1.1002-pre 1,011 6/14/2016
4.1.995-pre 1,096 6/13/2016
4.1.989-pre 706 5/26/2016
4.1.983-pre 704 5/25/2016
4.1.982-pre 731 5/25/2016
4.1.978-pre 719 5/6/2016
4.1.977-pre 725 5/5/2016
4.1.975-pre 702 5/5/2016
4.0.958 767 5/1/2016
4.0.957 959 4/29/2016
4.0.956 936 4/29/2016
4.0.955 760 4/28/2016
4.0.941 1,023 4/27/2016
4.0.940 993 4/27/2016
4.0.925 912 4/27/2016
4.0.922 900 4/27/2016
4.0.909 926 4/20/2016
4.0.880 797 4/7/2016
4.0.869 757 3/30/2016
4.0.864 777 3/29/2016
4.0.861 764 3/29/2016
4.0.860 766 3/29/2016
4.0.857 761 3/29/2016
4.0.855 746 3/29/2016
4.0.846 790 3/22/2016
4.0.842 974 3/21/2016
4.0.836 773 3/18/2016
4.0.835 769 3/18/2016
4.0.834 734 3/17/2016
4.0.832 782 3/17/2016
4.0.831 750 3/16/2016
4.0.829 745 3/16/2016
4.0.828 777 3/15/2016
4.0.827 785 3/15/2016
4.0.826 766 3/15/2016
4.0.825 825 3/13/2016
4.0.821 861 3/11/2016
4.0.819 789 3/11/2016
4.0.818 815 3/11/2016
4.0.816 827 3/11/2016
4.0.815 818 3/11/2016
4.0.814 841 3/11/2016
4.0.813 760 3/10/2016
4.0.812 866 3/10/2016
4.0.811 817 3/10/2016
4.0.810 776 3/10/2016
4.0.809 785 3/10/2016
4.0.805 736 3/9/2016
4.0.797 747 3/9/2016
4.0.796 764 3/9/2016
4.0.794 778 3/9/2016
4.0.793 745 3/9/2016
4.0.792 757 3/8/2016
4.0.791 738 3/8/2016
4.0.790 738 3/8/2016
4.0.788 787 3/8/2016
4.0.774 769 3/2/2016
4.0.773 917 3/1/2016
4.0.772 955 3/1/2016
4.0.770 755 3/1/2016
4.0.769 848 3/1/2016
4.0.762 792 3/1/2016
4.0.761 793 3/1/2016
4.0.760 803 2/29/2016
4.0.759 768 2/29/2016
4.0.758 763 2/29/2016
4.0.757 1,050 2/29/2016
4.0.756 1,079 2/27/2016
4.0.755 1,120 2/27/2016
4.0.754 1,090 2/27/2016
4.0.753 1,161 2/27/2016
4.0.752 854 2/27/2016
4.0.750 1,197 2/27/2016
4.0.749 1,223 2/27/2016
4.0.747 1,153 2/26/2016
4.0.746 1,175 2/26/2016
4.0.744 1,176 2/26/2016
4.0.743 873 2/26/2016
4.0.742 1,147 2/26/2016
4.0.741 1,023 2/26/2016
4.0.739 1,160 2/25/2016
4.0.738 1,003 2/25/2016
4.0.734 1,147 2/25/2016
4.0.733-beta 1,049 2/25/2016
4.0.672 797 2/16/2016
4.0.669 851 2/11/2016
4.0.668 852 2/11/2016
3.0.654 783 2/10/2016
3.0.646 783 2/5/2016
3.0.645 789 2/5/2016
3.0.644 743 2/5/2016
3.0.639 794 2/3/2016
3.0.638 774 2/2/2016
3.0.637 786 2/1/2016
3.0.635 748 2/1/2016
3.0.633 750 1/27/2016
3.0.632 782 1/27/2016
3.0.629 856 1/18/2016
3.0.626 827 1/18/2016
3.0.625 943 1/18/2016
3.0.624 787 12/17/2015
3.0.623 902 12/9/2015
3.0.622 777 12/9/2015
3.0.621 758 12/9/2015
3.0.620 761 12/8/2015
3.0.613 1,078 12/4/2015
3.0.611 1,047 12/3/2015
3.0.610 1,080 11/30/2015
3.0.606 1,057 11/30/2015
3.0.605 929 11/25/2015
3.0.603 870 11/23/2015
3.0.601 875 11/23/2015
3.0.600 864 11/19/2015
3.0.599 841 11/19/2015
3.0.598 838 11/17/2015
3.0.592 848 11/12/2015
3.0.589 822 11/10/2015
3.0.588 793 11/10/2015
3.0.586 833 11/10/2015
3.0.584 800 11/10/2015
3.0.583 817 11/10/2015
3.0.581 792 11/6/2015
3.0.579 796 11/6/2015
3.0.576 809 11/5/2015
3.0.575 793 11/4/2015
3.0.574 818 11/4/2015
3.0.569 808 11/3/2015
3.0.568 812 11/3/2015
3.0.566 804 11/3/2015
3.0.545 798 10/28/2015
3.0.538 822 10/22/2015
3.0.537 784 10/21/2015
3.0.536 775 10/21/2015
3.0.534 761 10/21/2015
3.0.532 820 10/21/2015
3.0.531 772 10/21/2015
3.0.524 796 10/15/2015
3.0.523 886 10/10/2015
3.0.522 809 10/10/2015
3.0.520 831 10/9/2015
3.0.519 885 10/9/2015
3.0.518 856 10/9/2015
3.0.517 807 10/9/2015
3.0.516 1,146 10/7/2015
3.0.514 935 10/6/2015
3.0.513 1,139 10/6/2015
3.0.512 1,020 10/6/2015
3.0.509 893 10/1/2015
3.0.507 904 10/1/2015
3.0.505 914 9/30/2015
3.0.503 937 9/30/2015
3.0.502 919 9/30/2015
3.0.479 884 9/25/2015
3.0.476 855 9/24/2015
3.0.471 877 9/24/2015
3.0.470 873 9/24/2015
3.0.469 864 9/24/2015
3.0.468 861 9/24/2015
3.0.467 850 9/24/2015
3.0.465 875 9/24/2015
3.0.459 878 9/23/2015
3.0.456 881 9/23/2015
3.0.455 864 9/22/2015
3.0.454 886 9/19/2015
3.0.453 910 9/19/2015
3.0.452 846 9/18/2015
3.0.451 873 9/18/2015
3.0.450 874 9/18/2015
3.0.447 835 9/18/2015
2.0.378 858 9/5/2015
2.0.372 833 9/4/2015
2.0.370 877 9/4/2015
2.0.368 828 9/4/2015
2.0.365 827 9/3/2015
2.0.363 811 9/3/2015
2.0.361 811 9/3/2015
1.0.360 804 9/1/2015
1.0.359 825 9/1/2015
1.0.358 822 9/1/2015
1.0.356 814 8/31/2015
1.0.355 888 8/31/2015
1.0.354 816 8/29/2015
1.0.305 839 8/19/2015
1.0.299 1,158 8/8/2015
1.0.293 856 7/20/2015
1.0.292 869 7/20/2015
1.0.289 831 7/10/2015
1.0.288 826 7/10/2015
1.0.286 855 7/7/2015
1.0.285 852 7/7/2015
1.0.284 840 7/7/2015
1.0.282 845 7/6/2015
1.0.281 825 7/6/2015
1.0.279 830 7/6/2015
1.0.277 781 6/18/2015
1.0.276 834 6/8/2015
1.0.275 825 6/8/2015
1.0.274 768 6/8/2015
1.0.272 854 6/1/2015
1.0.269 811 5/25/2015
1.0.268 831 5/24/2015
1.0.266 806 5/24/2015
1.0.263 832 5/21/2015
1.0.258 831 5/19/2015
1.0.257 815 5/18/2015
1.0.256 975 5/17/2015
1.0.254 781 5/13/2015
1.0.253 805 5/13/2015
1.0.250 817 5/13/2015
1.0.249 827 5/12/2015
1.0.248 805 5/12/2015
1.0.245 812 5/12/2015
1.0.241 837 5/12/2015
1.0.240 816 5/12/2015
1.0.237 821 5/11/2015
1.0.234 818 5/9/2015
1.0.233 794 5/9/2015
1.0.231 790 5/7/2015
1.0.230 842 5/7/2015
1.0.229 812 5/7/2015
1.0.226 819 5/7/2015
1.0.217 1,070 4/28/2015
1.0.215 958 4/27/2015
1.0.213 1,010 4/23/2015
1.0.210 957 4/23/2015
1.0.209 885 4/15/2015
1.0.202 898 4/15/2015
1.0.201 874 4/15/2015
1.0.198 898 4/15/2015
1.0.197 869 4/15/2015
1.0.196 875 4/15/2015
1.0.195 877 4/15/2015
1.0.194 875 4/15/2015
1.0.193 868 4/15/2015
1.0.192 901 4/15/2015
1.0.191 899 4/14/2015
1.0.189 881 4/10/2015
1.0.187 853 4/9/2015
1.0.186 881 4/8/2015
1.0.185 866 4/6/2015
1.0.183 854 4/3/2015
1.0.181 914 4/3/2015
1.0.180 878 4/2/2015
1.0.178 863 4/1/2015
1.0.177 867 4/1/2015
1.0.175 925 4/1/2015
1.0.171 861 3/31/2015
1.0.170 833 3/31/2015
1.0.168 840 3/31/2015
1.0.164 874 3/30/2015
1.0.162 841 3/28/2015
1.0.160 859 3/27/2015
1.0.159 831 3/26/2015
1.0.157 822 3/24/2015
1.0.156 862 3/24/2015
1.0.154 823 3/24/2015
1.0.152 811 3/24/2015
1.0.151 835 3/24/2015
1.0.150 870 3/23/2015
1.0.149 831 3/23/2015
1.0.148 813 3/23/2015
1.0.147 830 3/21/2015
1.0.146 829 3/20/2015
1.0.145 816 3/19/2015
1.0.143 909 3/18/2015
1.0.142 835 3/12/2015
1.0.141 804 3/12/2015
1.0.140 1,063 3/5/2015
1.0.139 857 3/5/2015
1.0.138 951 3/4/2015
1.0.137 808 3/3/2015
1.0.134 806 3/3/2015
1.0.129 1,059 3/3/2015
1.0.128 1,202 3/3/2015
1.0.125 1,125 2/28/2015
1.0.124 853 2/28/2015
1.0.122 1,294 2/28/2015
1.0.119 1,234 2/25/2015
1.0.117 1,186 2/24/2015
1.0.115 1,039 2/24/2015
1.0.114 1,175 2/23/2015
1.0.113 1,217 2/23/2015
1.0.112 1,231 2/23/2015
1.0.111 1,238 2/23/2015
1.0.110 1,260 2/23/2015
1.0.109 1,160 2/22/2015
1.0.108 1,160 2/22/2015
1.0.103 1,232 2/22/2015