Fix cyclomatic complexity warning

Fix cyclomatic complexity warning

--- src/Tgstation.Server.Host/Core/SwaggerConfiguration.cs
+++ src/Tgstation.Server.Host/Core/SwaggerConfiguration.cs
@@ -418,7 +418,7 @@
 		/// <param name="context">The current <see cref="SchemaFilterContext"/>.</param>
 		static void ApplyAttributesForRootSchema(OpenApiSchema rootSchema, SchemaFilterContext context)
 		{
-			//  tune up the descendants
+			// tune up the descendants
 			rootSchema.Nullable = false;
 			var rootSchemaId = GenerateSchemaId(context.Type);
 			var rootRequestSchema = rootSchemaId.EndsWith("Request", StringComparison.Ordinal);
@@ -439,16 +439,16 @@
 			}

 			var subSchemaStack = new Stack<Tuple<PropertyInfo, string, OpenApiSchema, IDictionary<string, OpenApiSchema>>>(
-				rootSchema.Properties.Select(x => GetTypeFromKvp(context.Type, x, rootSchema.Properties)));
+				rootSchema
+					.Properties
+					.Select(
+						x => GetTypeFromKvp(context.Type, x, rootSchema.Properties))
+					.Where(x => x.Item3.Reference == null));

 			while (subSchemaStack.Count > 0)
 			{
 				var tuple = subSchemaStack.Pop();
 				var subSchema = tuple.Item3;
-
-				if (subSchema.Reference != null)
-					// can't mangle references per request
-					continue;

 				var subSchemaPropertyInfo = tuple.Item1;

@@ -457,7 +457,7 @@
 						.PropertyType
 						.GetInterfaces()
 						.Any(x => x == typeof(IEnumerable)))
-					foreach (var kvp in subSchema.Properties)
+					foreach (var kvp in subSchema.Properties.Where(x => x.Value.Reference == null))
 						subSchemaStack.Push(GetTypeFromKvp(subSchemaPropertyInfo.PropertyType, kvp, subSchema.Properties));

 				var attributes = subSchemaPropertyInfo


Integrated bug fixes by James Eggers and Steven Robbins

--- src/Nancy.Tests/Unit/DynamicDictionaryFixture.cs
+++ src/Nancy.Tests/Unit/DynamicDictionaryFixture.cs
@@ -7,28 +7,19 @@
     public class DynamicDictionaryFixture
     {
         private readonly dynamic dictionary;
-        private dynamic _Dictionary;

-        /// <summary>
-        /// Initializes a new instance of the DynamicDictionaryFixture class.
-        /// </summary>
         public DynamicDictionaryFixture()
         {
             this.dictionary = new DynamicDictionary();
             this.dictionary["TestString"] = "Testing";
             this.dictionary["TestInt"] = 2;
-            _Dictionary = new DynamicDictionary();
-            _Dictionary["TestString"] = "Testing";
-            _Dictionary["TestInt"] = 2;
         }

         [Fact]
         public void Should_return_actual_string_value_when_tostring_called_on_string_entry()
-        public void Should_Return_Actual_String_Value_When_ToString_Called_On_String_Entry()
         {
             // Given, When
             string result = dictionary.TestString.ToString();
-            string result = _Dictionary.TestString.ToString();

             // Then
             result.ShouldEqual("Testing");
@@ -36,11 +27,9 @@

         [Fact]
         public void Should_return_string_representation_of_value_when_tostring_called_on_int_entry()
-        public void Should_Return_String_Representation_Of_Value_When_ToString_Called_On_Int_Entry()
         {
             // Given, When
             string result = dictionary.TestInt.ToString();
-            string result = _Dictionary.TestInt.ToString();

             // Then
             result.ShouldEqual("2");


Added "Stop()" to transport without host to properly shut down the transport after the test.

--- src/Transports/NetMQ/NetMQ.Test/NetMqTransportTests.cs
+++ src/Transports/NetMQ/NetMQ.Test/NetMqTransportTests.cs
@@ -90,6 +90,8 @@

             bool eventFired = mre.WaitOne(new TimeSpan(0, 0, 5));

+            transportWithoutHost.Stop();
+
             Assert.True(eventFired);
         }
     }


Tidy up the caching further. Hopefully this is clearer, and it now doesn't use biasing for either the year value or the day value, relying on sign extension instead.

--- src/NodaTime/Calendars/YearMonthDayCalculator.cs
+++ src/NodaTime/Calendars/YearMonthDayCalculator.cs
@@ -9,10 +9,12 @@
 {
     internal abstract class YearMonthDayCalculator
     {
-        private const int YearCacheShift = 10;
-        private const int YearCacheSize = 1 << YearCacheShift;
-        private const int YearCacheMask = YearCacheSize - 1;
-        private readonly YearInfo[] yearCache = new YearInfo[YearCacheSize];
+        /// <summary>
+        /// Cache to speed up working out when a particular year starts.
+        /// See the <see cref="YearStartCacheEntry"/> documentation and <see cref="GetStartOfYearInDays"/>
+        /// for more details.
+        /// </summary>
+        private readonly YearStartCacheEntry[] yearCache = new YearStartCacheEntry[YearStartCacheEntry.CacheSize];

         private readonly IList<Era> eras;
         internal IList<Era> Eras { get { return eras; } }
@@ -39,6 +41,9 @@
         protected YearMonthDayCalculator(int minYear, int maxYear, int monthsInYear,
             long ticksInNonLeapYear, long averageTicksPerYear, long ticksAtStartOfYear1, IList<Era> eras)
         {
+            // We should really check the minimum year as well, but constructing it hurts my brain.
+            Preconditions.CheckArgument(maxYear < YearStartCacheEntry.InvalidEntryYear, "maxYear",
+                "Calendar year range would invalidate caching.");
             this.minYear = minYear;
             this.maxYear = maxYear;
             this.monthsInYear = monthsInYear;
@@ -47,10 +52,10 @@
             this.ticksAtStartOfYear1 = ticksAtStartOfYear1;
             this.ticksInNonLeapYear = ticksInNonLeapYear;
             this.ticksInLeapYear = ticksInNonLeapYear + NodaConstants.TicksPerStandardDay;
-            // Effectively invalidate all cache entries.
+            // Invalidate all initial cache entries.
             for (int i = 0; i < yearCache.Length; i++)
             {
-                yearCache[i] = new YearInfo(63, 0);
+                yearCache[i] = YearStartCacheEntry.Invalid;
             }
         }

@@ -75,39 +80,15 @@
         /// <summary>
         /// Returns the number of ticks since the Unix epoch at the start of the given year.
         /// This is virtual to allow GregorianCalendarSystem to override it for an ultra-efficient
-        /// cache for modern years. This method can cope with a years outside the normal range, so long as they
-        /// don't actually overflow. This is useful for values which first involve estimates which might be out
+        /// cache for modern years. This method can cope with a value for <paramref name="year"/> outside
+        /// the normal range, so long as the resulting computation doesn't overflow. (Min and max years
+        /// are therefore chosen to be slightly more restrictive than we would otherwise need, for the
+        /// sake of simplicity.) This is useful for values which first involve estimates which might be out
         /// by a year either way.
         /// </summary>
         internal virtual long GetStartOfYearInTicks(int year)
         {
             return GetStartOfYearInDays(year) * NodaConstants.TicksPerStandardDay;
-        }
-
-        /// <summary>
-        /// Fetches the start of the year (in days since 1970-01-01 ISO) from the cache, or calculates
-        /// and caches it.
-        /// </summary>
-        protected int GetStartOfYearInDays(int year)
-        {
-            if (year < MinYear || year > MaxYear)
-            {
-                return CalculateStartOfYearDays(year);
-            }
-            unchecked
-            {
-                uint shiftedYear = (uint)(year - minYear);
-                uint yearBlock = shiftedYear >> 10;
-                uint cacheIndex = shiftedYear & YearCacheMask;
-                YearInfo info = yearCache[cacheIndex];
-                if (info.YearBlock != yearBlock)
-                {
-                    int days = CalculateStartOfYearDays(year);
-                    info = new YearInfo(yearBlock, days);
-                    yearCache[cacheIndex] = info;
-                }
-                return info.StartOfYearDays;
-            }
         }

         /// <summary>
@@ -196,52 +177,6 @@
             int index = Eras.IndexOf(era);
             Preconditions.CheckArgument(index != -1, "era", "Era is not used in this calendar");
             return index;
-        }
-
-        // The cache remembers the "days since the Unix epoch" - such that when multiplied
-        // by 864000000000 (ticks per standard day) we end up with the tick number.
-        // Each 32 bit entry consists of 6 bits indicating the "block of 1024" it is computed
-        // for (as the same slot will be used for multiple years through history) and 26 bits
-        // for the days.
-        // By fitting all the information into 32 bits, we never need to lock - assignments
-        // of 32 bits are always atomic, so we know that any value we fetch that has the right
-        // key part will also have the right value part.
-
-        /// <summary>
-        /// Immutable struct used as a cache entry. Only a single 32-bit value is stored,
-        /// which allows the cache array to be accessed without any locking. Each entry
-        /// consists of 6 bits indicating which "block" it's in (with the minimum year
-        ///
-        /// </summary>
-        private struct YearInfo
-        {
-            private readonly uint value;
-
-            private const int Shift = (int)(long.MinValue / NodaConstants.TicksPerStandardDay);
-            private const int Mask = (1 << 26) - 1;
-
-            internal YearInfo(uint yearBlock, int days)
-            {
-                unchecked
-                {
-                    int shiftedDays = (days - Shift);
-                    this.value = (yearBlock << 26) | (uint) shiftedDays;
-                }
-            }
-
-            internal uint YearBlock { get { return value >> 26; } }
-            internal int StartOfYearDays
-            {
-                get
-                {
-                    unchecked
-                    {
-                        int shiftedDays = (int) (value & Mask);
-                        int days = shiftedDays + Shift;
-                        return days;
-                    }
-                }
-            }
         }

         internal int GetYear(LocalInstant localInstant)
@@ -411,5 +346,104 @@
         {
             return MaxYear;
         }
+
+        /// <summary>
+        /// Fetches the start of the year (in days since 1970-01-01 ISO) from the cache, or calculates
+        /// and caches it.
+        /// </summary>
+        protected int GetStartOfYearInDays(int year)
+        {
+            if (year < MinYear || year > MaxYear)
+            {
+                return CalculateStartOfYearDays(year);
+            }
+            int cacheIndex = YearStartCacheEntry.GetCacheIndex(year);
+            YearStartCacheEntry cacheEntry = yearCache[cacheIndex];
+            if (!cacheEntry.IsValidForYear(year))
+            {
+                int days = CalculateStartOfYearDays(year);
+                cacheEntry = new YearStartCacheEntry(year, days);
+                yearCache[cacheIndex] = cacheEntry;
+            }
+            return cacheEntry.StartOfYearDays;
+        }
+
+        /// <summary>
+        /// Type containing as much logic as possible for how the cache of "start of year" data works.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// Each entry in the cache is a 32 bit number. The "value" part of the entry consists of the
+        /// number of days since the Unix epoch (negative for a value before the epoch). As Noda Time
+        /// only supports a number of ticks since the Unix epoch of between long.MinValue and long.MaxValue,
+        /// we only need to support a number of days in the range
+        /// [long.MinValue / TicksPerDay, long.MaxValue / TicksPerDay] which is [-10675200, 10675200] (rounding
+        /// away from 0). This value can be stored in 25 bits.
+        /// </para>
+        /// <para>
+        /// The remaining 7 bits of the value are used for validation. For any given year, the bottom
+        /// 10 bits are used as the index into the cache (which is an array). The next 7 most significant
+        /// bits are stored in the entry. So long as we have fewer than 17 significant bits in the year value,
+        /// this will be a unique combination. A single validation value (the most highly positive value) is
+        /// reserved to indicate an invalid entry. The cache is initialized with all entries invalid.
+        /// This gives us a range of over 60,000 years (both positive and negative) without any risk of collisions. By
+        /// constrast, the ISO calendar years are in the range [-27255, 31195] - so we'd have to be dealing with
+        /// a calendar with either very short years, or an epoch a long way ahead or behind the Unix epoch.
+        /// </para>
+        /// <para>
+        /// The fact that each cache entry is only 32 bits means that we can safely use the cache from multiple
+        /// threads without locking. 32-bit aligned values are guaranteed to be accessed atomically, so we know we'll
+        /// never get the value for one year with the validation bits for another, for example.
+        /// </para>
+        /// </remarks>
+        private struct YearStartCacheEntry
+        {
+            private const int CacheIndexBits = 10;
+            private const int CacheIndexMask = CacheSize - 1;
+            private const int EntryValidationBits = 7;
+            private const int EntryValidationMask = (1 << EntryValidationBits) - 1;
+
+            internal const int CacheSize = 1 << CacheIndexBits;
+            // Smallest year such that the validator is as high as possible.
+            internal const int InvalidEntryYear = (EntryValidationMask >> 1) << CacheIndexBits;
+
+            /// <summary>
+            /// Entry which is guaranteed to be obviously invalid for any real date, by having
+            /// a validation value which is larger than any valid year number.
+            /// </summary>
+            internal static readonly YearStartCacheEntry Invalid = new YearStartCacheEntry(InvalidEntryYear, 0);
+
+            /// <summary>
+            /// Entry value: least significant 8 bits are validation; remaining 24 bits are the number of days
+            /// since the Unix epoch.
+            /// </summary>
+            private readonly int value;
+
+            internal YearStartCacheEntry(int year, int days)
+            {
+                value = GetValidator(year) | (days << EntryValidationBits);
+            }
+
+            private static int GetValidator(int year)
+            {
+                return (year >> CacheIndexBits) & EntryValidationMask;
+            }
+
+            internal static int GetCacheIndex(int year)
+            {
+                // Effectively keep only the bottom CacheIndexBits bits.
+                return year & CacheIndexMask;
+            }
+
+            internal bool IsValidForYear(int year)
+            {
+                return GetValidator(year) == (value & EntryValidationMask);
+            }
+
+            internal int StartOfYearDays
+            {
+                get { return value >> EntryValidationBits; }
+            }
+        }
     }
 }


Guard access to shared resource WordSimilarityChecker.s_pool

--- src/Workspaces/Core/Portable/Utilities/SpellChecker.cs
+++ src/Workspaces/Core/Portable/Utilities/SpellChecker.cs
@@ -140,7 +140,10 @@
             _source = null;
             _editDistance = null;
             _lastAreSimilarResult = default(CacheResult);
-            s_pool.Push(this);
+            lock (s_poolGate)
+            {
+                s_pool.Push(this);
+            }
         }

         public static bool AreSimilar(string originalText, string candidateText)


Making the Mapper class easier to use and adding a nullable callback function for further mapping.

--- src/Plato.TestHarness/Mapper/MapperPlayground.cs
+++ src/Plato.TestHarness/Mapper/MapperPlayground.cs
@@ -19,7 +19,11 @@
         public string TheAddress { get; set; }
     }

-    public class MyMapper : IMapper<MapperTestClass1, MapperTestClass2>
+    public interface IMyMapper : IMapper<MapperTestClass1, MapperTestClass2>
+    {
+    }
+
+    public class MyMapper : IMyMapper
     {
         public void Map(MapperTestClass1 source, MapperTestClass2 target)
         {
@@ -34,7 +38,7 @@
         {
             var class1 = new MapperTestClass1 { Name = "Ross", Address = "123 Main" };

-            var mapper = new MyMapper();
+            var mapper = new MyMapper() as IMyMapper;
             var class2a = mapper.Map(class1);
             var class2b = mapper.Map(class1, (source, target) =>
             {


Test to verify literals are not affected

--- src/PublicApiGeneratorTests/Method_parameters.cs
+++ src/PublicApiGeneratorTests/Method_parameters.cs
@@ -173,6 +173,22 @@
     }
 }");
         }
+
+        [Fact]
+        public void Should_output_default_values_even_if_they_look_like_attributes()
+        {
+            AssertPublicApi<MethodWithDefaultThatLooksLikeAnAttribute>(
+                @"namespace PublicApiGeneratorTests.Examples
+{
+    public class MethodWithDefaultThatLooksLikeAnAttribute
+    {
+        public MethodWithDefaultThatLooksLikeAnAttribute() { }
+        public void Method(string value2 = ""MyAttribute[()]"") { }
+    }
+}");
+        }
+
+

         [Fact]
         public void Should_output_ref_parameters()
@@ -357,6 +373,13 @@
             }
         }

+        public class MethodWithDefaultThatLooksLikeAnAttribute
+        {
+            public void Method(string value2 = "MyAttribute[()]")
+            {
+            }
+        }
+
         public class MethodWithRefParameter
         {
             public void Method(ref string value)
@@ -413,4 +436,4 @@
     // ReSharper restore ClassNeverInstantiated.Global
     // ReSharper restore UnusedParameter.Global
     // ReSharper restore UnusedMember.Global
-}+}


JonC changed restapi to dev version

JonC changed restapi to dev version

--- src/StockportWebapp/Controllers/SIAController.cs
+++ src/StockportWebapp/Controllers/SIAController.cs
@@ -17,8 +17,8 @@
     public class SIAController : Controller
     {
         //http://scnportwebdev2.stockport.gov.uk/siarestipa/api/values/?term=lorry
-        //string Baseurl = "http://scnportwebdev2.stockport.gov.uk/siarestipa/";
-        string Baseurl = "http://localhost:59356/";
+        string Baseurl = "http://scnportwebdev2.stockport.gov.uk/siarestipa/";
+        //string Baseurl = "http://localhost:59356/";

         [Route("/sia")]
         public async Task<ActionResult> Index(string term, string selectedArea, string SearchDepth)


Added missing documentation

Added missing documentation

--- Assets/Scripts/Models/Characters/Stats/Stats.cs
+++ Assets/Scripts/Models/Characters/Stats/Stats.cs
@@ -40,8 +40,14 @@
         /// </summary>
         private int critBonus;

+        /// <summary>
+        /// The current weapon.
+        /// </summary>
         private Weapon currentWeapon;

+        /// <summary>
+        /// The hit bonus.
+        /// </summary>
         private int hitBonus;

         /// <summary>


minor refactoring in CalculateLevenshteinDistance

--- src/Take.Blip.Builder/Models/StringExtensions.cs
+++ src/Take.Blip.Builder/Models/StringExtensions.cs
@@ -12,7 +12,7 @@
         /// <param name="s">The first of the two strings.</param>
         /// <param name="t">The second of the two strings.</param>
         /// <returns>The Levenshtein cost.</returns>
-        /// Source: http://rosettacode.org/wiki/Levenshtein_distance#C.23 - memory optimized
+        /// Adapted from: http://rosettacode.org/wiki/Levenshtein_distance#C.23
         public static int CalculateLevenshteinDistance(this string s, string t)
         {
             var n = s.Length;


Fixes: #U4-1113

Fixes: #U4-1113

--- src/Umbraco.Core/Configuration/GlobalSettings.cs
+++ src/Umbraco.Core/Configuration/GlobalSettings.cs
@@ -100,7 +100,7 @@
             get
             {
 				return ConfigurationManager.AppSettings.ContainsKey("umbracoPath")
-					? ConfigurationManager.AppSettings["umbracoPath"]
+					? IOHelper.ResolveUrl(ConfigurationManager.AppSettings["umbracoPath"])
 					: string.Empty;
             }
         }


Managed changes for FileTracker->FileTrackerXX

Port of internal VS repo commit 3071fdfce.

MSBuild provides a public API for divining the appropriate paths to
Tracker.exe and FileTracker.dll. This change returns a copy that is
appropriate now after the Detours-required rename to FileTracker32.dll and
FileTracker64.dll.

There is much confusion here.  First, there are now two DLLs where once
there was one. Fortunately, the native Detours code transparently handles
slecting the right DLL given a path to *either*. So I'm just returning the
32-bit version. That means that we no longer need to have the caller
indicate what type of tool will be called so that we can dig around for
the right binary. But that was part of our public interface, so I left the
parameter and now just ignore it.

Second, there was a lot of logic to find the right path to tracker.exe.
From spelunking through history, I *think* this is because tracker.exe
isn't shipped with the Framework version of MSBuild.  It is shipped in the
.NET SDK and with Build Tools.  Now that Build Tools exists, I think
that's the only place that it's needed, and the old tracker.exe isn't
compatible with the new filetracker.dll, so I removed the fallback logic:
it is now found within the MSBuild toolset, or not at all.

--- src/Utilities/TrackedDependencies/FileTracker.cs
+++ src/Utilities/TrackedDependencies/FileTracker.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft. All rights reserved.
+// Copyright (c) Microsoft. All rights reserved.
 // Licensed under the MIT license. See LICENSE file in the project root for full license information.

 using System;
@@ -87,8 +87,9 @@
         // The name of the standalone tracker tool.
         private static string s_TrackerFilename = "Tracker.exe";

-        // The name of the assembly that is injected into the executing process
-        private static string s_FileTrackerFilename = "FileTracker.dll";
+        // The name of the assembly that is injected into the executing process.
+        // Detours handles picking between FileTracker{32,64}.dll so only mention one.
+        private static string s_FileTrackerFilename = "FileTracker32.dll";
         #endregion

         #region Static constructor
@@ -587,60 +588,15 @@
                 if (!File.Exists(trackerPath))
                 {
                     // if an override path was specified, that's it -- we don't want to fall back if the file
-                    // is not found there.
+                    // is not found there.
                     trackerPath = null;
                 }
             }
             else
             {
-                switch (toolType)
-                {
-                    case ExecutableType.Native32Bit:
-                        // A native executable that's 32-bit.  Just return the 32-bit path
-                        trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness32);
-                        break;
-                    case ExecutableType.Native64Bit:
-                        // A native executable that's 64-bit.  Just return the 64-bit path
-                        trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness64);
-                        break;
-                    case ExecutableType.ManagedIL:
-                        // Next most likely -- the tool is a managed executable that has not been explicitly marked
-                        // either 32 or 64 bit.
-                        // This case is slightly tricky -- we have to return the path to the 64-bit tracker if we're running
-                        // on a 64-bit machine, and the 32-bit tracker if we're running on a 32-bit machine.
-                        trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness64);
-
-                        // If the path is null, that means there is no 64-bit framework -- that's fine, return the 32-bit path instead.
-                        if (trackerPath == null)
-                        {
-                            trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness32);
-                        }
-                        break;
-                    case ExecutableType.Managed32Bit:
-                        // A managed executable that has been explicitly marked 32-bit.  Just return the 32-bit path.
-                        trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness32);
-                        break;
-                    case ExecutableType.Managed64Bit:
-                        // A managed executable that has been explicitly marked 64-bit.  Just return the 64-bit path.  If this
-                        // is a 32-bit machine, then we will return null, and the error will be caught and handled appropriately
-                        // elsewhere.
-                        trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness64);
-                        break;
-                    case ExecutableType.SameAsCurrentProcess:
-                        // Figure out what bitness the current process is and return that bitness of Tracker.exe.
-                        if (IntPtr.Size == sizeof(Int32))
-                        {
-                            trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness32);
-                        }
-                        else
-                        {
-                            trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Bitness64);
-                        }
-                        break;
-                    default:
-                        ErrorUtilities.ThrowInternalErrorUnreachable();
-                        return null;
-                }
+                // Since Detours can handle cross-bitness process launches, the toolType
+                // can be ignored; just return the path corresponding to the current architecture.
+                trackerPath = GetPath(filename, DotNetFrameworkArchitecture.Current);
             }

             return trackerPath;
@@ -655,8 +611,6 @@
         /// <returns></returns>
         private static string GetPath(string filename, DotNetFrameworkArchitecture bitness)
         {
-            string trackerPath;
-
             // Make sure that if someone starts passing the wrong thing to this method we don't silently
             // eat it and do something possibly unexpected.
             ErrorUtilities.VerifyThrow(
@@ -666,31 +620,9 @@
                                        filename
                                        );

-            // Look for FileTracker.dll/FileTracker.exe first in the MSBuild tools directory, then fall back to .NET framework directory
-            // and finally to .NET SDK directories.
-            trackerPath = ToolLocationHelper.GetPathToBuildToolsFile(filename, ToolLocationHelper.CurrentToolsVersion, bitness);
-
-            if (String.IsNullOrEmpty(trackerPath))
-            {
-                trackerPath = ToolLocationHelper.GetPathToDotNetFrameworkFile(filename, TargetDotNetFrameworkVersion.VersionLatest, bitness);
-
-                if ((String.IsNullOrEmpty(trackerPath) || !File.Exists(trackerPath)) && s_TrackerFilename.Equals(filename, StringComparison.OrdinalIgnoreCase))
-                {
-                    // fall back to looking in the SDK directory -- this is where Tracker.exe will be in the typical VS case.  First check
-                    // in the SDK for the latest target framework and latest Visual Studio version, since we want to make sure that we get
-                    // the most up-to-date version of FileTracker.
-                    trackerPath = ToolLocationHelper.GetPathToDotNetFrameworkSdkFile(filename, TargetDotNetFrameworkVersion.Version45, VisualStudioVersion.VersionLatest, bitness);
-
-                    // If that didn't work, we may be in a scenario where, e.g., we have VS 10 on Windows 8, which comes with .NET 4.5
-                    // pre-installed.  In which case, the Dev11 (or other "latest" SDK) may not exist, but the Dev10 SDK might.  Check
-                    // for that here.
-                    if (trackerPath == null)
-                    {
-                        trackerPath = ToolLocationHelper.GetPathToDotNetFrameworkSdkFile(filename, TargetDotNetFrameworkVersion.Version40, bitness);
-                    }
-                }
-            }
-            return trackerPath;
+            // Look for FileTracker.dll/Tracker.exe in the MSBuild tools directory. They may exist elsewhere on disk,
+            // but other copies aren't guaranteed to be compatible with the latest.
+            return ToolLocationHelper.GetPathToBuildToolsFile(filename, ToolLocationHelper.CurrentToolsVersion, bitness);
         }

         /// <summary>


r   rename [applesauce]

r   rename [applesauce]


Fixed the page title

Fixed the page title

--- src/Website/Main.Web/Views/Shared/_Layout.cshtml
+++ src/Website/Main.Web/Views/Shared/_Layout.cshtml
@@ -3,7 +3,7 @@
 <head>
   <meta charset="utf-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>@ViewBag.Title - My ASP.NET Application</title>
+  <title>@ViewBag.Title - Schakra CI Application</title>
   @Styles.Render("~/Content/css")
   @Scripts.Render("~/bundles/modernizr")
 </head>


add CultureInfo.InvariantCulture to ReadDecimal.

--- Krs.Ats.IBNet/IBClient.cs
+++ Krs.Ats.IBNet/IBClient.cs
@@ -4414,7 +4414,7 @@
             if (string.IsNullOrEmpty(str))
                 return 0;
             decimal retVal;
-            return decimal.TryParse(str, NumberStyles.Float, null, out retVal) ? retVal : decimal.MaxValue;
+            return decimal.TryParse(str, NumberStyles.Float, CultureInfo.InvariantCulture, out retVal) ? retVal : decimal.MaxValue;
         }

         private double ReadDoubleMax()


Remove commands checks if value exists

Remove commands checks if value exists

--- Addons/Entitas.CodeGeneration.CodeGenerator.CLI/Commands/Helper.cs
+++ Addons/Entitas.CodeGeneration.CodeGenerator.CLI/Commands/Helper.cs
@@ -77,19 +77,25 @@
             fabl.Warn(question + ": '" + value + "' ? (y / n)");
             if (GetUserDecision()) {
                 var valueList = values.ToList();
-                valueList.Remove(value);
-                updateAction(valueList.ToArray());
-                Preferences.SaveProperties(properties);
-                fabl.Warn("Removed: " + value);
+                if (valueList.Remove(value)) {
+                    updateAction(valueList.ToArray());
+                    Preferences.SaveProperties(properties);
+                    fabl.Warn("Removed: " + value);
+                } else {
+                    fabl.Warn("Value does not exist: " + value);
+                }
             }
         }

         public static void RemoveValueSilently(string value, string[] values, Action<string[]> updateAction, Properties properties) {
             var valueList = values.ToList();
-            valueList.Remove(value);
-            updateAction(valueList.ToArray());
-            Preferences.SaveProperties(properties);
-            fabl.Warn("Removed: " + value);
+            if (valueList.Remove(value)) {
+                updateAction(valueList.ToArray());
+                Preferences.SaveProperties(properties);
+                fabl.Warn("Removed: " + value);
+            } else {
+                fabl.Warn("Value does not exist: " + value);
+            }
         }
     }
 }


Updated Task Details page as StartDateTime and EndDateTime are no longer nullable. (#971)

--- AllReadyApp/Web-App/AllReady/Areas/Admin/Views/Task/Details.cshtml
+++ AllReadyApp/Web-App/AllReady/Areas/Admin/Views/Task/Details.cshtml
@@ -21,14 +21,10 @@

@Model.Name

@Model.Description

-            <time value="Model.StartDateTime.Value"></time> - <time value="Model.EndDateTime.Value"></time>
-            @if (Model.EndDateTime.HasValue || Model.StartDateTime.HasValue)
-            {
+            <time value="Model.StartDateTime"></time> - <time value="Model.EndDateTime"></time>
                 <time-zone-name time-zone-id="@Model.TimeZoneId"></time-zone-name>
-            }

-        @if (!string.IsNullOrEmpty(userTimeZoneId) && Model.TimeZoneId != userTimeZoneId
-                    && (Model.EndDateTime.HasValue || Model.StartDateTime.HasValue))
+        @if (!string.IsNullOrEmpty(userTimeZoneId) && Model.TimeZoneId != userTimeZoneId)
         {

                 <time value="Model.StartDateTime" target-time-zone-id="@userTimeZoneId"></time> - <time value="Model.EndDateTime" target-time-zone-id="@userTimeZoneId"></time>


rearrange page path evaluation to attempt static path as a last resort

--- ExoWeb/Templates/Page.cs
+++ ExoWeb/Templates/Page.cs
@@ -168,6 +168,7 @@
 			// First see if the binding expression represents a model level source
 			if (path.StartsWith("window.context.model."))
 				path = path.Substring(7);
+
 			if (path.StartsWith("context.model."))
 			{
 				path = path.Substring(14);
@@ -188,12 +189,82 @@
 					// Trim the path down to the unevaluated portion
 					path = path.Substring(index + 1);
 				}
-
-
+				else
+					return result;
 			}

 			// Otherwise see if the path represents a static property
 			else
+			{
+			}
+
+			// Transform grouping
+			if (context is Transform.Grouping)
+			{
+				object groupResult;
+				if (((Transform.Grouping)context).TryGetValue(path, out path, out groupResult))
+				{
+					context = result.Value = groupResult;
+
+					if (string.IsNullOrEmpty(path))
+					{
+						result.IsValid = true;
+						return result;
+					}
+				}
+			}
+
+			// ModelInstance
+			if (context is ModelInstance)
+			{
+				result.Source = context as ModelInstance;
+
+				// Exit immediately if the path is not valid
+				ModelPath modelPath;
+				if (result.Source.Type.TryGetPath(path, out modelPath))
+				{
+					// Walk the path, honoring only first steps
+					for (var step = modelPath.FirstSteps.First(); step != null; step = step.NextSteps.FirstOrDefault())
+					{
+						if (step.NextSteps.Any())
+						{
+							// Exit immediately if an intermediary step is a list
+							if (step.Property.IsList)
+								return result;
+
+							// Attempt to walk the instance path if the current step is valid
+							if (result.Source != null)
+								result.Source = result.Source.Type.Properties.Contains(step.Property) ? result.Source.GetReference((ModelReferenceProperty)step.Property) : null;
+						}
+						else
+							result.Property = step.Property;
+					}
+
+					// Indicate that the result is now considered valid since the path could be walked
+					result.IsValid = true;
+
+					// Attempt to evaluate the last step along the path
+					if (result.Source != null)
+					{
+						// Evaluate the last step along the path
+						if (result.Property is ModelValueProperty)
+							result.Value = result.Source.GetValue((ModelValueProperty)result.Property);
+						else if (result.Property.IsList)
+							result.Value = result.Source.GetList((ModelReferenceProperty)result.Property);
+						else
+							result.Value = result.Source.GetReference((ModelReferenceProperty)result.Property);
+					}
+
+					return result;
+				}
+			}
+
+			// IBindable
+			if (context is IBindable)
+				result = ((IBindable)context).Evaluate(path);
+
+			// As a last resort, see if this is a static path
+			if (!result.IsValid)
 			{
 				ModelSource source;
 				// Return immediately if the path does not represent a valid static property
@@ -209,71 +280,6 @@
 				return result;
 			}

-			// Transform grouping
-			if (context is Transform.Grouping)
-			{
-				object groupResult;
-				if (((Transform.Grouping)context).TryGetValue(path, out path, out groupResult))
-				{
-					context = result.Value = groupResult;
-
-					if (string.IsNullOrEmpty(path))
-					{
-						result.IsValid = true;
-						return result;
-					}
-				}
-			}
-
-			// ModelInstance
-			if (context is ModelInstance)
-			{
-				result.Source = context as ModelInstance;
-
-				// Exit immediately if the path is not valid
-				ModelPath modelPath;
-				if (!result.Source.Type.TryGetPath(path, out modelPath))
-					return result;
-
-				// Walk the path, honoring only first steps
-				for (var step = modelPath.FirstSteps.First(); step != null; step = step.NextSteps.FirstOrDefault())
-				{
-					if (step.NextSteps.Any())
-					{
-						// Exit immediately if an intermediary step is a list
-						if (step.Property.IsList)
-							return result;
-
-						// Attempt to walk the instance path if the current step is valid
-						if (result.Source != null)
-							result.Source = result.Source.Type.Properties.Contains(step.Property) ? result.Source.GetReference((ModelReferenceProperty)step.Property) : null;
-					}
-					else
-						result.Property = step.Property;
-				}
-
-				// Indicate that the result is now considered valid since the path could be walked
-				result.IsValid = true;
-
-				// Attempt to evaluate the last step along the path
-				if (result.Source != null)
-				{
-					// Evaluate the last step along the path
-					if (result.Property is ModelValueProperty)
-						result.Value = result.Source.GetValue((ModelValueProperty)result.Property);
-					else if (result.Property.IsList)
-						result.Value = result.Source.GetList((ModelReferenceProperty)result.Property);
-					else
-						result.Value = result.Source.GetReference((ModelReferenceProperty)result.Property);
-				}
-
-				return result;
-			}
-
-			// IBindable
-			if (context is IBindable)
-				return ((IBindable)context).Evaluate(path);
-
 			// Invalid
 			return result;
 		}


Not intented change

Not intented change

--- src/Abp.AutoMapper/AutoMapper/AutoMapExtensions.cs
+++ src/Abp.AutoMapper/AutoMapper/AutoMapExtensions.cs
@@ -41,7 +41,8 @@
             where TMultiLingualEntity : IMultiLingualEntity<TTranslation>
         {
             configuration.CreateMap<TTranslation, TDestination>();
-            configuration.CreateMap<TMultiLingualEntity, TDestination>().AfterMap((source, destination, context) =>
+
+            configuration.CreateMap<TMultiLingualEntity, TDestination>().BeforeMap((source, destination, context) =>
             {
                 var translation = source.Translations.FirstOrDefault(pt => pt.Language == CultureInfo.CurrentUICulture.Name);
                 if (translation != null)


[Debugger] slight code cleanup

[Debugger] slight code cleanup

--- Mono.Debugging/Mono.Debugging.Client/ObjectValue.cs
+++ Mono.Debugging/Mono.Debugging.Client/ObjectValue.cs
@@ -189,8 +189,8 @@
 			get {
 				if (name == null)
 					return path [path.Length - 1];
-				else
-					return name;
+
+				return name;
 			}
 			set {
 				name = value;
@@ -723,8 +723,9 @@
 				if (updateCallback == null)
 					updateCallback = new UpdateCallback (new UpdateCallbackProxy (this), path);
 				return updateCallback;
-			} else
-				return null;
+			}
+
+			return null;
 		}

 		~ObjectValue ()


Removed extra logging

Removed extra logging

--- MusicPlayer.iOS/Native/BackgroundDownloadManager.cs
+++ MusicPlayer.iOS/Native/BackgroundDownloadManager.cs
@@ -224,16 +224,13 @@
 		NSUrlSessionConfiguration configuration;
 		NSUrlSession InitBackgroundSession(string identifier)
 		{
-			LogManager.Shared.Log("Background Session Init");
 			Console.WriteLine("InitBackgroundSession");
 			configuration = Device.IsIos8
 					? NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(identifier)
 				: NSUrlSessionConfiguration.BackgroundSessionConfiguration(identifier);
 			configuration.AllowsCellularAccess = true;
-			LogManager.Shared.Log(configuration != null ? "Background configuration is null" : "Background configuration created");
 			var ses = NSUrlSession.FromConfiguration(configuration, new UrlSessionDelegate(), null);
 			ses.GetTasks2((data, upload, downloads) => { restoreTasks(ses, data, upload, downloads); });
-			LogManager.Shared.Log("Session created");
 			return ses;

 		}
@@ -352,7 +349,6 @@
 			NSError removeCopy;

 			fileManager.Remove(destinationURL, out removeCopy);
-			LogManager.Shared.Log("Copying Downloaded File", value:"Destination",key: dest);
 			var success = fileManager.Copy(location, destinationURL, out errorCopy);
 			if (success)
 				file.Status = BackgroundDownloadFile.FileStatus.Completed;
@@ -363,7 +359,6 @@
 			file.Destination = dest;
 			await ProcessFile(file);
 			FileCompleted?.InvokeOnMainThread(downloadTask, new CompletedArgs {File = file});
-			LogManager.Shared.Log ("Download Completed", key: "Data", value: downloadTask.TaskDescription);
 		}

 		NSObject invoker = new NSObject();
@@ -429,7 +424,6 @@

 			public override void DidFinishDownloading(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, NSUrl location)
 			{
-				LogManager.Shared.Log($"File downloaded",key:"File path",value:location.ToString());
 				if (downloadTask.Error == null)
 					Shared.Completed(downloadTask, location);
 				else


Add to components menu

Add to components menu

--- Assets/MixedRealityToolkit.SDK/Experimental/FollowSolver/Follow.cs
+++ Assets/MixedRealityToolkit.SDK/Experimental/FollowSolver/Follow.cs
@@ -11,7 +11,8 @@
     /// Follow solver positions an element in front of the of the tracked target (relative to its local forward axis).
     /// The element can be loosely constrained (a.k.a. tag-along) so that it doesn't follow until the tracked target moves
     /// beyond user defined bounds.
-    /// </summary>
+    /// </summary>
+    [AddComponentMenu("Scripts/MRTK/Experimental/Solver/Follow")]
     public class Follow : Solver
     {
         [SerializeField]


bc why not?

bc why not?

--- Assets/MixedRealityToolkit/InputSystem/MixedRealityInputManager.cs
+++ Assets/MixedRealityToolkit/InputSystem/MixedRealityInputManager.cs
@@ -102,7 +102,6 @@
             {
                 if (Application.isEditor)
                 {
-#if UNITY_EDITOR
                     bool addedComponents = false;
                     var eventSystems = UnityEngine.Object.FindObjectsOfType<EventSystem>();
                     var standaloneInputModules = UnityEngine.Object.FindObjectsOfType<StandaloneInputModule>();
@@ -121,6 +120,7 @@
                         addedComponents = true;
                     }

+#if UNITY_EDITOR
                     if (addedComponents) { UnityEditor.EditorGUIUtility.PingObject(FocusProvider.UIRaycastCamera); }
 #endif
                 }


Experiment state was saved

Experiment state was saved

--- src/Utils/WaveletCodesListDecodingAnalyzer/Program.cs
+++ src/Utils/WaveletCodesListDecodingAnalyzer/Program.cs
@@ -580,7 +580,7 @@
                     8,
                     2,
                     3,
-                    field.CreateElementsVector(1, 0, 0, 2, 0, 1, 2, 2, 2, 2, 0, 2)
+                    field.CreateElementsVector(1, 2, 0, 1, 0, 0, 2, 2, 1, 0, 1, 2)
                 );
             }
             catch (Exception exception)


fix code smell

fix code smell

--- Oberon0.Generator.Msil/CodeGenerator.Expressions.cs
+++ Oberon0.Generator.Msil/CodeGenerator.Expressions.cs
@@ -143,12 +143,9 @@
                     throw new NotImplementedException();
             }

-            if (targetType != null && targetType.Type.HasFlag(BaseTypes.Simple))
-            {
-                if (targetType.Type != expression.TargetType.Type)
-                {
-                    Code.Emit("call", Code.GetTypeName(targetType), BuildConvertString(targetType.Type, expression.TargetType.Type));
-                }
+            if (targetType != null && targetType.Type.HasFlag(BaseTypes.Simple) && targetType.Type != expression.TargetType.Type)
+            {
+                Code.Emit("call", Code.GetTypeName(targetType), BuildConvertString(targetType.Type, expression.TargetType.Type));
             }

             return result;
@@ -158,10 +155,6 @@
         {
             switch (target)
             {
-                case BaseTypes.Int:
-                    return $"[mscorlib]System.Convert::ToInt32({Code.GetTypeName(source)})";
-                case BaseTypes.String:
-                    return $"{Code.GetTypeName(source)}::ToString()";
                 case BaseTypes.Decimal:
                     return $"[mscorlib]System.Convert::ToDouble({Code.GetTypeName(source)})";
                 case BaseTypes.Bool:


Covariant Type parameters in IOneSkyResponse

--- OneSky.CSharp/OneSky.CSharp/Json/IOneSkyResponse.cs
+++ OneSky.CSharp/OneSky.CSharp/Json/IOneSkyResponse.cs
@@ -1,6 +1,6 @@
 namespace OneSky.CSharp.Json
 {
-    public interface IOneSkyResponse<TMeta, TData>
+    public interface IOneSkyResponse<out TMeta, out TData>
     {
         int StatusCode { get; }


Simplified GetSessionToken

Simplified GetSessionToken

--- OpenIIoT.Core/Security/WebApi/SecurityController.cs
+++ OpenIIoT.Core/Security/WebApi/SecurityController.cs
@@ -455,7 +455,7 @@
         /// <returns>The retrieved token, or an empty string if it does not exist.</returns>
         private string GetSessionToken(HttpRequestMessage request)
         {
-            return Request.GetOwinContext()?.Authentication?.User?.Claims?.Where(c => c.Type == ClaimTypes.Hash).FirstOrDefault().Value ?? string.Empty;
+            return Request.GetOwinContext()?.Authentication.User.Claims.Where(c => c.Type == ClaimTypes.Hash).FirstOrDefault().Value ?? string.Empty;
         }

         #endregion Private Methods


make logging less verbose when loading iars

--- OpenSim/Framework/Communications/Osp/OspResolver.cs
+++ OpenSim/Framework/Communications/Osp/OspResolver.cs
@@ -93,7 +93,7 @@
             if (!ospa.StartsWith(OSPA_PREFIX))
                 return UUID.Zero;

-            m_log.DebugFormat("[OSP RESOLVER]: Resolving {0}", ospa);
+//            m_log.DebugFormat("[OSP RESOLVER]: Resolving {0}", ospa);

             string ospaMeat = ospa.Substring(OSPA_PREFIX.Length);
             string[] ospaTuples = ospaMeat.Split(OSPA_TUPLE_SEPARATOR_ARRAY);


some changes parcels AABB math etc

some changes parcels AABB math etc

--- OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -93,6 +93,8 @@
         private Vector2 m_startPoint = Vector2.Zero;
         private Vector2 m_endPoint = Vector2.Zero;
         private Vector2 m_centerPoint = Vector2.Zero;
+        private Vector2 m_AABBmin = Vector2.Zero;
+        private Vector2 m_AABBmax = Vector2.Zero;

         public Vector2 StartPoint
         {
@@ -757,7 +759,7 @@
         /// </summary>
         public void ForceUpdateLandInfo()
         {
-            UpdateAABBAndAreaValues();
+            UpdateGeometryValues();
             UpdateLandBitmapByteArray();
         }

@@ -767,11 +769,10 @@
         }

         /// <summary>
-        /// Updates the AABBMin and AABBMax values after area/shape modification of the land object
+        /// Updates geomtric values after area/shape modification of the land object
         /// </summary>
-        private void UpdateAABBAndAreaValues()
-        {
-
+        private void UpdateGeometryValues()
+        {
             int min_x = Int32.MaxValue;
             int min_y = Int32.MaxValue;
             int max_x = Int32.MinValue;
@@ -784,7 +785,7 @@
             float avgx = 0f;
             float avgy = 0f;

-            bool needStart = true;
+            bool needFirst = true;

             for (x = 0; x < LandBitmap.GetLength(0); x++)
             {
@@ -801,16 +802,17 @@
                         if (max_y < y)
                             max_y = y;

-                        if(needStart)
+                        if(needFirst)
                         {
                             avgx = x;
                             avgy = y;
                             m_startPoint.X = x * landUnit;
                             m_startPoint.Y = y * landUnit;
-                            needStart = false;
+                            needFirst = false;
                         }
                         else
                         {
+                            // keeping previus odd average
                             avgx = (avgx * tempArea + x) / (tempArea + 1);
                             avgy = (avgy * tempArea + y) / (tempArea + 1);
                         }
@@ -831,46 +833,52 @@
             m_endPoint.X = lastX * landUnit + landUnit;
             m_endPoint.Y = lastY * landUnit + landUnit;

+            // next tests should not be needed
+            // if they fail, something is wrong
+
+            int regionSizeX = (int)Constants.RegionSize;
+            int regionSizeY = (int)Constants.RegionSize;
+
+            if(m_scene != null)
+            {
+                regionSizeX = (int)m_scene.RegionInfo.RegionSizeX;
+                regionSizeY = (int)m_scene.RegionInfo.RegionSizeX;
+            }
+
             int tx = min_x * landUnit;
-            if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1))
-                tx = ((int)m_scene.RegionInfo.RegionSizeX - 1);
-            int htx;
-            if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
-                htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
+            if (tx >= regionSizeX)
+                tx = regionSizeX - 1;
+
+            int ty = min_y * landUnit;
+            if (ty >= regionSizeY)
+                ty = regionSizeY - 1;
+
+            m_AABBmin.X = tx;
+            m_AABBmin.Y = ty;
+
+            if(m_scene == null)
+                LandData.AABBMin = new Vector3(tx, ty, 0f);
             else
-                htx = tx;
-
-            int ty = min_y * landUnit;
-            int hty;
-
-            if (ty >= ((int)m_scene.RegionInfo.RegionSizeY))
-                hty = (int)m_scene.RegionInfo.RegionSizeY - 1;
-            else
-                hty = ty;
-
-            LandData.AABBMin =
-                new Vector3(
-                    (float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
-
+                LandData.AABBMin = new Vector3(tx, ty, (float)m_scene.Heightmap[tx, ty]);
+
             max_x++;
             tx = max_x * landUnit;
-            if (tx >= ((int)m_scene.RegionInfo.RegionSizeX))
-                htx = (int)m_scene.RegionInfo.RegionSizeX - 1;
+            if (tx > regionSizeX)
+                tx = regionSizeX;
+
+            max_y++;
+            ty = max_y * landUnit;
+            if (ty > regionSizeY)
+                ty = regionSizeY;
+
+            m_AABBmax.X = tx;
+            m_AABBmax.Y = ty;
+
+            if(m_scene == null)
+                LandData.AABBMax = new Vector3(tx, ty, 0f);
             else
-                htx = tx;
-
-            max_y++;
-            ty = max_y * 4;
-
-            if (ty >= ((int)m_scene.RegionInfo.RegionSizeY))
-                hty = (int)m_scene.RegionInfo.RegionSizeY - 1;
-            else
-                hty = ty;
-
-            LandData.AABBMax
-                = new Vector3(
-                    (float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0);
-
+                LandData.AABBMax = new Vector3(tx, ty, (float)m_scene.Heightmap[tx - 1, ty - 1]);
+
             LandData.Area = tempArea * landUnit * landUnit;
         }

@@ -1223,23 +1231,6 @@
             if(tempByte != 0 && byteNum < 512)
                 tempConvertArr[byteNum] = (byte)tempByte;

-
-/*
-                    tempByte = Convert.ToByte(tempByte | Convert.ToByte(LandBitmap[x, y]) << (i++ % 8));
-                    if (i % 8 == 0)
-                    {
-                        tempConvertArr[byteNum] = tempByte;
-                        tempByte = (byte) 0;
-                        i = 0;
-                        byteNum++;
-                    }
-<<<<<<< HEAD
-                }
-            }
-            // m_log.DebugFormat("{0} ConvertLandBitmapToBytes. BitmapSize=<{1},{2}>",
-            //                         LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1));
-=======
- */
             return tempConvertArr;
         }


remove repeated set of group rotation to physics

--- OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3527,14 +3527,15 @@
         public void UpdateGroupRotationR(Quaternion rot)
         {
             m_rootPart.UpdateRotation(rot);
-
+
+/* this is done by rootpart RotationOffset set called by UpdateRotation
             PhysicsActor actor = m_rootPart.PhysActor;
             if (actor != null)
             {
                 actor.Orientation = m_rootPart.RotationOffset;
                 m_scene.PhysicsScene.AddPhysicsActorTaint(actor);
             }
-
+*/
             HasGroupChanged = true;
             ScheduleGroupForTerseUpdate();
         }


Mantis #7713: fixed bug introduced by 1st MOSES patch.

--- OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
+++ OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
@@ -226,7 +226,7 @@
         // the Total, Simulation, Physics, and Network Frame Time; It is set to
         // 10 by default but can be changed by the OpenSim.ini configuration file
         // NumberOfFrames parameter
-        private int m_numberFramesStored = Scene.m_defaultNumberFramesStored;
+        private int m_numberFramesStored;

         // The arrays that will hold the time it took to run the past N frames,
         // where N is the num_frames_to_average given by the configuration file
@@ -259,7 +259,15 @@
         private IEstateModule estateModule;

         public SimStatsReporter(Scene scene)
-        {
+            : this(scene, Scene.m_defaultNumberFramesStored)
+        {
+        }
+
+        public SimStatsReporter(Scene scene, int numberOfFrames)
+        {
+            // Store the number of frames from the OpenSim.ini configuration file
+            m_numberFramesStored = numberOfFrames;
+
             // Initialize the different frame time arrays to the correct sizes
             m_totalFrameTimeMilliseconds = new double[m_numberFramesStored];
             m_simulationFrameTimeMilliseconds = new double[m_numberFramesStored];
@@ -300,13 +308,7 @@
                     StatVerbosity.Info);

             StatsManager.RegisterStat(SlowFramesStat);
-        }
-
-
-        public SimStatsReporter(Scene scene, int numberOfFrames) : this (scene)
-        {
-            // Store the number of frames from the OpenSim.ini configuration file
-            m_numberFramesStored = numberOfFrames;
+
         }


PagerDuty: fix initial load race

PagerDuty: fix initial load race

--- Opserver.Core/Data/Pagerduty/PagerDutyAPI.OnCall.cs
+++ Opserver.Core/Data/Pagerduty/PagerDutyAPI.OnCall.cs
@@ -45,7 +45,7 @@
                     foreach (var u in p)
                     {
                         u.SharedLevelCount = p.Count(tu => tu.EscalationLevel == u.EscalationLevel);
-                        if (p.Count(pu => pu.AssignedUser?.Id == u.AssignedUser?.Id) > 1)
+                        if (p.Count(pu => pu.User?.Id == u.User?.Id) > 1)
                         {
                             u.MonitorStatus = MonitorStatus.Warning;
                             u.MonitorStatusReason = "Multiple escalations for the same user";


fix for uwp isnotifying

fix for uwp isnotifying

--- Plugin.BluetoothLE/Platforms/Uwp/GattCharacteristic.cs
+++ Plugin.BluetoothLE/Platforms/Uwp/GattCharacteristic.cs
@@ -119,7 +119,9 @@
                 if (status != GattCommunicationStatus.Success)
                     throw new BleException($"Failed to write client characteristic configuration descriptor - {status}");

-                this.context.SetNotifyCharacteristic(this.Native, value != GattClientCharacteristicConfigurationDescriptorValue.None);
+                var enable = value != GattClientCharacteristicConfigurationDescriptorValue.None;
+                this.context.SetNotifyCharacteristic(this.Native, enable);
+                this.IsNotifying = enable;
                 return new CharacteristicGattResult(this, null);
             });


Fixes read time out Fixes that the server will wait when receiving a player list ping packet from an old client.

--- Pdelvo.Minecraft.Protocol/Packets/PlayerListPing.cs
+++ Pdelvo.Minecraft.Protocol/Packets/PlayerListPing.cs
@@ -30,13 +30,19 @@
         {
             if (reader == null)
                 throw new System.ArgumentNullException("reader");
+            var timeOut = reader.ReadTimeout;
             try
             {
+                reader.ReadTimeout = 0;
                 MagicByte = reader.ReadByte();
             }
             catch (Exception)
             {
                 MagicByte = 0;
+            }
+            finally
+            {
+                reader.ReadTimeout = timeOut;
             }
         }


Just get last 50 posts by default

Just get last 50 posts by default

--- PinboardLinkBlogger/PinboardLinkBlogger/MainForm.cs
+++ PinboardLinkBlogger/PinboardLinkBlogger/MainForm.cs
@@ -102,7 +102,7 @@
             // List<Delicious.Post> posts = Delicious.Post.Get();

-            List<Pinboard.Post> posts = Pinboard.Post.Get();
+            List<Pinboard.Post> posts = Pinboard.Post.GetRecentPosts(null, 50);

             _postItems.Clear();


Update FFTools_MemoryManager.cs

Update FFTools_MemoryManager.cs

Formatting.

--- FFTools_MemoryManager.cs
+++ FFTools_MemoryManager.cs
@@ -43,10 +43,10 @@

         // Other fields.

-    public MemoryManager() {}
-
-    public int initialize() {
-    Process[] pList = Process.GetProcessesByName("ffxiv");
+        public MemoryManager() {}
+
+        public int initialize() {
+        Process[] pList = Process.GetProcessesByName("ffxiv");
             if (pList.Length == 0) {
                 System.Console.WriteLine("Could not find the FFXIV process.");
                 return 1;
@@ -70,9 +70,9 @@
             System.Console.WriteLine("Setting fish bite status address as 0x" + AddrFishBite.ToString("X8"));

             return 0;
-    }
-
-    private IntPtr pointerWalk(IntPtr addrBase, int[] addrOffs) {
+        }
+
+        private IntPtr pointerWalk(IntPtr addrBase, int[] addrOffs) {
             if (addrOffs.Length == 0) return addrBase;
             IntPtr addrCurrent = addrBase;
             for (int i = 0; i < addrOffs.Length; i++) {
@@ -208,4 +208,4 @@
             else return false;
         }
     }
-}+}


Changing $'s to _ when looking up Resource Names in GlobalResources since $ is an invalid identifier.

--- FormBuilder/FormField.cs
+++ FormBuilder/FormField.cs
@@ -54,7 +54,7 @@
                     return helpAttribute.Help;
                 }

-                var resourceObj = HttpContext.GetGlobalResourceObject("FormBuilderHelp", Id);
+                var resourceObj = HttpContext.GetGlobalResourceObject("FormBuilderHelp", Id.Replace("$", "_"));
                 if (resourceObj != null)
                 {
                     return (string)resourceObj;


提交遗漏文件

提交遗漏文件

--- ResDiffAnalyse/CompareBySize.cs
+++ ResDiffAnalyse/CompareBySize.cs
@@ -7,7 +7,7 @@
         //排序
         public int Compare(ResInfo x, ResInfo y)
         {
-            return y.filesize.CompareTo(x.filesize);
+            return y.Filesize.CompareTo(x.Filesize);
         }

         //int IComparer<ResInfo>.Compare(ResInfo x, ResInfo y)


Fixed Error on renaming entity property name - With records in Static Data

--- Blueprint41.Modeller/Schemas/Logic/Primitive.cs
+++ Blueprint41.Modeller/Schemas/Logic/Primitive.cs
@@ -18,7 +18,7 @@
             {
                 if (e.OldValue != e.NewValue)
                 {
-                    Guid = Model.GenerateGuid(e.NewValue).ToString();
+                    //Guid = Model.GenerateGuid(e.NewValue).ToString();
                     Name = e.NewValue;
                 }
             };


Removed a unicode oddity from clone.cshtml

--- Bonobo.Git.Server/Views/Repository/Clone.cshtml
+++ Bonobo.Git.Server/Views/Repository/Clone.cshtml
@@ -1,5 +1,5 @@
 @using MvcCheckBoxList.Model
-@model RepositoryDetailModel
+@model RepositoryDetailModel
 @{
     ViewBag.Title = Resources.Repository_Clone_Title;
 }


Pass unused terrain parameter block which is now required.

--- convoar/ConvoarTerrain.cs
+++ convoar/ConvoarTerrain.cs
@@ -82,7 +82,8 @@
             if (ConvOAR.Globals.parms.P<bool>("CreateTerrainSplat")) {
                 // Use the OpenSim maptile generator to create a texture for the terrain
                 var terrainRenderer = new TexturedMapTileRenderer();
-                terrainRenderer.Initialise(scene, null);    // doesn't use config param
+                Nini.Config.IConfigSource config = new Nini.Config.IniConfigSource();
+                terrainRenderer.Initialise(scene, config);

                 var mapbmp = new Bitmap(terrainDef.Width, terrainDef.Height,
                                         System.Drawing.Imaging.PixelFormat.Format24bppRgb);


Tests for WriteCache methods

Tests for WriteCache methods

--- Source/ChattelTests/TestWriteCache.cs
+++ Source/ChattelTests/TestWriteCache.cs
@@ -25,7 +25,9 @@

 using System;
 using System.IO;
+using System.Linq;
 using Chattel;
+using InWorldz.Data.Assets.Stratus;
 using NUnit.Framework;

 #pragma warning disable RECS0026 // Possible unassigned object created by 'new'
@@ -62,7 +64,7 @@
 		#region Ctor

 		[Test]
-		public void TestCtorMinimal_DoesntThrow() {
+		public void TestCtor_Minimal_DoesntThrow() {
 			Assert.DoesNotThrow(() => new WriteCache(
 				WriteCacheFileInfo,
 				2,
@@ -72,7 +74,7 @@
 		}

 		[Test]
-		public void TestCtorNullFile_ArgumentNullException() {
+		public void TestCtor_NullFile_ArgumentNullException() {
 			Assert.Throws<ArgumentNullException>(() => new WriteCache(
 				null,
 				WRITE_CACHE_MAX_RECORD_COUNT,
@@ -82,7 +84,7 @@
 		}

 		[Test]
-		public void TestCtorZeroRecords_ArgumentOutOfRangeException() {
+		public void TestCtor_ZeroRecords_ArgumentOutOfRangeException() {
 			Assert.Throws<ArgumentOutOfRangeException>(() => new WriteCache(
 				WriteCacheFileInfo,
 				0,
@@ -223,5 +225,210 @@
 		// TODO: test for cases where the write cache has pending entries.  Should use a mocked ChattelWriter and IChattelCache.

 		#endregion
+
+		#region ClearNode
+
+		[Test]
+		public void TestClearNode_Null_ArgumentNullException() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			Assert.Throws<ArgumentNullException>(() => wc.ClearNode(null));
+		}
+
+		[Test]
+		public void TestClearNode_DoesntThrow() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var node = wc.WriteNode(new StratusAsset {
+				Id = Guid.NewGuid(),
+			});
+
+			Assert.DoesNotThrow(() => wc.ClearNode(node));
+		}
+
+		[Test]
+		public void TestClearNode_SetFileByteCorrectly() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var node = wc.WriteNode(new StratusAsset {
+				Id = Guid.NewGuid(),
+			});
+
+			wc.ClearNode(node);
+
+			using (var fs = new FileStream(WriteCacheFileInfo.FullName, FileMode.Open, FileAccess.Read)) {
+				try {
+					fs.Seek((long)node.FileOffset, SeekOrigin.Begin);
+
+					// Check each row.
+					var buffer = new byte[1];
+					fs.Read(buffer, 0, buffer.Length);
+					Assert.AreEqual(0, buffer[0]);
+				}
+				finally {
+					fs.Close();
+				}
+			}
+		}
+
+		[Test]
+		public void TestClearNode_LeftGuidIntact() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var id = Guid.NewGuid();
+
+			var node = wc.WriteNode(new StratusAsset {
+				Id = id,
+			});
+
+			wc.ClearNode(node);
+
+			using (var fs = new FileStream(WriteCacheFileInfo.FullName, FileMode.Open, FileAccess.Read)) {
+				try {
+					fs.Seek((long)node.FileOffset, SeekOrigin.Begin);
+
+					// Check each row.
+					var buffer = new byte[WriteCacheNode.BYTE_SIZE];
+					fs.Read(buffer, 0, buffer.Length);
+					Assert.AreEqual(id.ToByteArray(), buffer.Skip(1));
+				}
+				finally {
+					fs.Close();
+				}
+			}
+		}
+
+		#endregion
+
+		#region WriteNode
+
+		[Test]
+		public void TestWriteNode_Null_ArgumentNullException() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			Assert.Throws<ArgumentNullException>(() => wc.WriteNode(null));
+		}
+
+		[Test]
+		public void TestWriteNode_DoesntThrow() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			Assert.DoesNotThrow(() => wc.WriteNode(new StratusAsset {
+				Id = Guid.NewGuid(),
+			}));
+		}
+
+
+		[Test]
+		public void TestWriteNode_SetFileByteCorrectly() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var node = wc.WriteNode(new StratusAsset {
+				Id = Guid.NewGuid(),
+			});
+
+			using (var fs = new FileStream(WriteCacheFileInfo.FullName, FileMode.Open, FileAccess.Read)) {
+				try {
+					fs.Seek((long)node.FileOffset, SeekOrigin.Begin);
+
+					// Check each row.
+					var buffer = new byte[1];
+					fs.Read(buffer, 0, buffer.Length);
+					Assert.AreEqual(1, buffer[0]);
+				}
+				finally {
+					fs.Close();
+				}
+			}
+		}
+
+		[Test]
+		public void TestWriteNode_WroteCorrectGuid() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var id = Guid.NewGuid();
+
+			var node = wc.WriteNode(new StratusAsset {
+				Id = id,
+			});
+
+			using (var fs = new FileStream(WriteCacheFileInfo.FullName, FileMode.Open, FileAccess.Read)) {
+				try {
+					fs.Seek((long)node.FileOffset, SeekOrigin.Begin);
+
+					// Check each row.
+					var buffer = new byte[WriteCacheNode.BYTE_SIZE];
+					fs.Read(buffer, 0, buffer.Length);
+					Assert.AreEqual(id.ToByteArray(), buffer.Skip(1));
+				}
+				finally {
+					fs.Close();
+				}
+			}
+		}
+
+		[Test]
+		public void TestWriteNode_TwiceDoesntReturnSameNode() {
+			var wc = new WriteCache(
+				WriteCacheFileInfo,
+				WRITE_CACHE_MAX_RECORD_COUNT,
+				null,
+				null
+			);
+
+			var id = Guid.NewGuid();
+
+			var node1 = wc.WriteNode(new StratusAsset {
+				Id = id,
+			});
+
+			var node2 = wc.WriteNode(new StratusAsset {
+				Id = id,
+			});
+
+			Assert.AreNotSame(node1, node2);
+		}
+
+		#endregion
 	}
 }


Added unit test bugid: 955

Added unit test
bugid: 955

--- Source/Csla.test/Data/ContextTests.cs
+++ Source/Csla.test/Data/ContextTests.cs
@@ -5,11 +5,15 @@
 // </copyright>
 // <summary>no summary</summary>
 //-----------------------------------------------------------------------
+
+using System;
+using System.Data.Entity.Infrastructure;
 using System.Linq;
 using System.Data;
 using System.Data.SqlClient;
 using Csla.Data;
 using System.Configuration;
+using Csla.Data.EF4;

 #if !NUNIT
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -32,6 +36,25 @@
     private const string ConnectionWithMissingDB = "DataPortalTestDatabaseConnectionString_with_invalid_DB_value";
     private const string EntityConnectionWithMissingDB = "DataPortalTestDatabaseEntities_with_invalid_DB_value";

+    [ClassInitialize]
+    public static void InitDbContextDatabase(TestContext context)
+    {
+       using (var dbContextManager = DbContextManager<DataPortalDbContext>.GetManager())
+       {
+         dbContextManager.DbContext.Database.CreateIfNotExists();
+         dbContextManager.DbContext.Database.Initialize(true);
+
+         dbContextManager.DbContext.Table2.Add(new Csla.Data.EF4.Table2()
+                                                 {
+                                                   FirstName = "Rocky",
+                                                   Id = 1,
+                                                   LastName = "Lhotka",
+                                                   SmallColumns = "Test"
+                                                 });
+         dbContextManager.DbContext.SaveChanges();
+       }
+    }
+
     #region Invalid connection strings
     [TestMethod]
     [ExpectedException(typeof(ConfigurationErrorsException))]
@@ -59,6 +82,7 @@
       {
       }
     }
+
 #endif

     [TestMethod]
@@ -94,6 +118,27 @@
         //Throws EntityException
         var table = (from p in objectContextManager.ObjectContext.Table2
                      select p).ToList();
+      }
+    }
+
+    [TestMethod]
+    [ExpectedException(typeof(EntityException))]
+    public void ConnectionSetting_with_Invalid_DB_Throws_ConfigurationErrorsException_for_DbContextDataContext()
+    {
+      var conn = ConfigurationManager.ConnectionStrings[EntityConnectionWithMissingDB].ConnectionString;
+      using (var context = new DataPortalTestDatabaseEntities(conn))
+      {
+        using (
+          var dbContextManager = DbContextManager<DataPortalDbContext>.GetManager(context))
+        {
+          Assert.IsNotNull(dbContextManager);
+
+          // Make sure the context is set in DbContext
+          Assert.AreSame(context, 	((IObjectContextAdapter)dbContextManager.DbContext).ObjectContext);
+          //Throws EntityException
+          var table = (from p in context.Table2
+                       select p).ToList();
+        }
       }
     }
 #endif
@@ -137,6 +182,18 @@
                     select p;

         Assert.IsTrue(query.ToList().Count > 0, "Data in table is missing");
+      }
+    }
+
+    [TestMethod]
+    public void Table2_retreived_through_DbContextDataContext_has_records()
+    {
+      using (var dbContextManager = DbContextManager<DataPortalDbContext>.GetManager())
+      {
+        Assert.IsNotNull(dbContextManager);
+
+        var query = dbContextManager.DbContext.Table2;
+        Assert.IsTrue(query.Any(), "Data in table is missing");
       }
     }
 #endif


Added a missing menu label.

Added a missing menu label.

--- GUI/MainForm.Designer.cs
+++ GUI/MainForm.Designer.cs
@@ -373,6 +373,11 @@
 					this.runWebServerMenuItem,
 					this.serverPortMenuItem});
 			this.webMenuItem.Text = "Remote Web Server";
+      //
+      // runWebServerMenuItem
+      //
+      this.runWebServerMenuItem.Index = 0;
+      this.runWebServerMenuItem.Text = "Run";
 			//
 			// serverPortMenuItem
 			//


Added TransitionManager.SetFaded() method so that the scene could be started at the faded state if needed.

--- GUI/TransitionManager.cs
+++ GUI/TransitionManager.cs
@@ -40,6 +40,12 @@
         Instance.Image.color = color;

         Instance.StartCoroutine(Instance.StartFade(finishedCallback));
+    }
+
+    public static void SetFaded(bool isFaded, Color color) {
+        Instance.Image.color = color;
+        Instance.Image.SetAlpha(isFaded ? 1 : 0);
+        Instance.Image.raycastTarget = Instance.Image.IsVisible();
     }

     private static TransitionManager _Instance = null;


Fixed input for SetLayerRecursively

Fixed input for SetLayerRecursively

--- ComLib.Unity/Extensions/GameObjectExtensions.cs
+++ ComLib.Unity/Extensions/GameObjectExtensions.cs
@@ -10,7 +10,7 @@
         /// </summary>
         /// <param name="go">root gameObject</param>
         /// <param name="newLayer">new Layer</param>
-        public static void SetLayerRecursively(this GameObject go, int newLayer)
+        public static void SetLayerRecursively(this GameObject go, LayerMask newLayer)
         {
             go.layer = newLayer;


兼容Unity 2018

兼容Unity 2018

兼容Unity 2018

--- core/src/api/Bmob.Task.cs
+++ core/src/api/Bmob.Task.cs
@@ -1,4 +1,4 @@
-#if UNITY_5 || UNITY_4 || UNITY_4_6 || UNITY_2017
+#if UNITY_5 || UNITY_4 || UNITY_4_6 || UNITY_2017 || UNITY_2018
 #define Unity
 #endif

@@ -274,4 +274,4 @@

 }

-#endif+#endif


Fix flicker on resize under D2D.

Fix flicker on resize under D2D.

Still getting a "rubber banding" effect that needs to be fixed though.

--- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
+++ src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
@@ -185,36 +185,40 @@

             try
             {
-                using (var context = _renderTarget.CreateDrawingContext(this))
-                {
-                    if (scene != null && scene.Size != Size.Empty)
-                    {
-                        if (scene.Generation != _lastSceneId)
+                if (scene != null && scene.Size != Size.Empty)
+                {
+                    IDrawingContextImpl context = null;
+
+                    if (scene.Generation != _lastSceneId)
+                    {
+                        context = _renderTarget.CreateDrawingContext(this);
+                        _layers.Update(scene, context);
+
+                        RenderToLayers(scene);
+
+                        if (DebugFramesPath != null)
                         {
-                            _layers.Update(scene, context);
-
-                            RenderToLayers(scene);
-
-                            if (DebugFramesPath != null)
-                            {
-                                SaveDebugFrames(scene.Generation);
-                            }
-
-                            _lastSceneId = scene.Generation;
-
-                            composite = true;
+                            SaveDebugFrames(scene.Generation);
                         }

-                        if (renderOverlay)
-                        {
-                            RenderOverlay(scene, context);
-                            RenderComposite(scene, context);
-                        }
-                        else if (composite)
-                        {
-                            RenderComposite(scene, context);
-                        }
-                    }
+                        _lastSceneId = scene.Generation;
+
+                        composite = true;
+                    }
+
+                    if (renderOverlay)
+                    {
+                        context = context ?? _renderTarget.CreateDrawingContext(this);
+                        RenderOverlay(scene, context);
+                        RenderComposite(scene, context);
+                    }
+                    else if (composite)
+                    {
+                        context = context ?? _renderTarget.CreateDrawingContext(this);
+                        RenderComposite(scene, context);
+                    }
+
+                    context?.Dispose();
                 }
             }
             catch (RenderTargetCorruptedException ex)


no message

no message

--- DEV/Assets/Scripts/Behaviours/PickUps/PickUp.cs
+++ DEV/Assets/Scripts/Behaviours/PickUps/PickUp.cs
@@ -29,4 +29,15 @@

         AddPickUp();
     }
+
+    void Update()
+    {
+        CheckIfOnScreen();
+    }
+
+    void CheckIfOnScreen()
+    {
+        if (transform.position.x < -5)
+            Destroy(this.gameObject);
+    }
 }


font added to content types

font added to content types

--- src/Blogifier.Core/Middleware/EmbeddedResources.cs
+++ src/Blogifier.Core/Middleware/EmbeddedResources.cs
@@ -85,7 +85,8 @@
 				resource.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
 				resource.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
 				resource.EndsWith(".woff", StringComparison.OrdinalIgnoreCase) ||
-				resource.EndsWith(".ttf", StringComparison.OrdinalIgnoreCase)
+                resource.EndsWith(".woff2", StringComparison.OrdinalIgnoreCase) ||
+                resource.EndsWith(".ttf", StringComparison.OrdinalIgnoreCase)
 				)
 				return true;


BL-4910 change Android WiFi instructions to match BR

--- src/BloomExe/Publish/Android/wifi/WiFiPublisher.cs
+++ src/BloomExe/Publish/Android/wifi/WiFiPublisher.cs
@@ -75,7 +75,7 @@
 			_wifiAdvertiser.Start();

 			_progress.Message(id: "WifiInstructions1",
-				message:"On the Android, run Bloom Reader, open the menu and choose 'Receive Books from WiFi'.");
+				message:"On the Android, run Bloom Reader, open the menu and choose 'Receive Books over WiFi'.");
 			_progress.Message(id: "WifiInstructions2",
 				message:"You can do this on as many devices as you like. Make sure each device is connected to the same network as this computer.");
 		}


Fixing issue #179

Fixing issue #179

--- src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs
+++ src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs
@@ -2359,7 +2359,12 @@

 		virtual protected void ProcessMemberReferenceExpression(MemberReferenceExpression node)
 		{
-			var entity = ResolveMember(node);
+            if (node.Target.ExpressionType is Unknown)
+            {
+                FixUnknownExpression(node.Target);
+            }
+
+            var entity = ResolveMember(node);
 			if (null == entity)
 				return;

@@ -2429,7 +2434,46 @@
 			PostProcessReferenceExpression(node);
 		}

-		private static Node MemberAnchorFor(Node node)
+        void FixUnknownExpression(Expression target)
+        {
+            var entity = (target.Entity as ITypedEntity);
+            if (entity == null)
+                return;
+            var type = FixEntityType(entity);
+            if (type != null)
+                target.ExpressionType = type;
+        }
+
+        IType FixEntityType(ITypedEntity entity)
+        {
+            var internalType = entity as IInternalEntity;
+            if (internalType != null)
+            {
+                var node = internalType.Node;
+                var oldNamespace = CurrentNamespace;
+                try
+                {
+                    Visit(node);
+                }
+                finally
+                {
+                    //hack because there's no more accessible way to set the CurrentNamespace property
+                    My<CurrentScope>.Instance.Value = oldNamespace;
+                }
+                var nodeEntity = node.Entity as ITypedEntity;
+                return nodeEntity == null ? null : nodeEntity.Type;
+
+            }
+            var gen = entity as IGenericMappedMember;
+            if (gen != null)
+            {
+                FixEntityType(gen.SourceMember);
+                return gen.Type;
+            }
+            return null;
+        }
+
+        private static Node MemberAnchorFor(Node node)
 		{
 			return AstUtil.GetMemberAnchor(node);
 		}


Added open project ToolStripButton.

Added open project ToolStripButton.

--- Gui/MainForm.Designer.cs
+++ Gui/MainForm.Designer.cs
@@ -131,6 +131,7 @@
 			this.classesView = new ReClassNET.ClassNodeView();
 			this.memoryViewControl = new ReClassNET.MemoryViewControl();
 			this.processUpdateTimer = new System.Windows.Forms.Timer(this.components);
+			this.openProjectToolStripButton = new System.Windows.Forms.ToolStripButton();
 			this.statusStrip.SuspendLayout();
 			this.mainMenuStrip.SuspendLayout();
 			this.toolStrip.SuspendLayout();
@@ -401,6 +402,7 @@
             this.selectProcessToolStripButton,
             this.pluginsToolStripButton,
             this.toolStripSeparator6,
+            this.openProjectToolStripButton,
             this.saveToolStripButton,
             this.toolStripSeparator7,
             this.newClassToolStripButton,
@@ -1086,6 +1088,7 @@
 			this.classesView.Dock = System.Windows.Forms.DockStyle.Fill;
 			this.classesView.Location = new System.Drawing.Point(0, 0);
 			this.classesView.Name = "classesView";
+			this.classesView.SelectedClass = null;
 			this.classesView.Size = new System.Drawing.Size(201, 524);
 			this.classesView.TabIndex = 0;
 			this.classesView.ClassSelected += new ReClassNET.ClassNodeView.ClassSelectedEvent(this.classesView_ClassSelected);
@@ -1107,6 +1110,16 @@
 			this.processUpdateTimer.Enabled = true;
 			this.processUpdateTimer.Interval = 5000;
 			this.processUpdateTimer.Tick += new System.EventHandler(this.processUpdateTimer_Tick);
+			//
+			// openProjectToolStripButton
+			//
+			this.openProjectToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+			this.openProjectToolStripButton.Image = global::ReClassNET.Properties.Resources.folder;
+			this.openProjectToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+			this.openProjectToolStripButton.Name = "openProjectToolStripButton";
+			this.openProjectToolStripButton.Size = new System.Drawing.Size(23, 22);
+			this.openProjectToolStripButton.ToolTipText = "Open Project...";
+			this.openProjectToolStripButton.Click += new System.EventHandler(this.openProjectToolStripMenuItem_Click);
 			//
 			// MainForm
 			//
@@ -1239,6 +1252,7 @@
 		private System.Windows.Forms.Timer processUpdateTimer;
 		private System.Windows.Forms.ToolStripSeparator toolStripSeparator17;
 		private System.Windows.Forms.ToolStripMenuItem loadSymbolToolStripMenuItem;
+		private System.Windows.Forms.ToolStripButton openProjectToolStripButton;
 	}
 }


add UT

add UT

--- src/Build.UnitTests/BackEnd/TargetBuilder_Tests.cs
+++ src/Build.UnitTests/BackEnd/TargetBuilder_Tests.cs
@@ -1255,6 +1255,31 @@
         }

         /// <summary>
+        /// Tests a circular dependency target.
+        /// </summary>
+        [Fact]
+        public void TestCircularDependencyTarget()
+        {
+            string projectContents = @"
+<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+    <Target Name=""TargetA"" AfterTargets=""Build"" DependsOnTargets=""TargetB"">
+        <Message Text=""TargetA""></Message>
+    </Target>
+    <Target Name=""TargetB"" DependsOnTargets=""TargetC"">
+        <Message Text=""TargetB""></Message>
+    </Target>
+    <Target Name=""TargetC"" DependsOnTargets=""TargetA"">
+        <Message Text=""TargetC""></Message>
+    </Target>
+</Project>
+      ";
+            StringReader reader = new StringReader(projectContents);
+            Project project = new Project(new XmlTextReader(reader), null, null);
+            bool success = project.Build(_mockLogger);
+            Assert.False(success);
+        }
+
+        /// <summary>
         /// Tests that cancel with no entries after building does not fail.
         /// </summary>
         [Fact]


send revision date with collection edits

--- src/Core/Services/Implementations/CipherService.cs
+++ src/Core/Services/Implementations/CipherService.cs
@@ -215,7 +215,8 @@
                     throw new BadRequestException("Not enough storage available for this organization.");
                 }

-                await _attachmentStorageService.UploadShareAttachmentAsync(stream, cipher.Id, organizationId, attachmentId);
+                await _attachmentStorageService.UploadShareAttachmentAsync(stream, cipher.Id, organizationId,
+                    attachmentId);
             }
             catch
             {
@@ -246,7 +247,8 @@
             await _pushService.PushSyncCiphersAsync(deletingUserId);
         }

-        public async Task DeleteAttachmentAsync(Cipher cipher, string attachmentId, Guid deletingUserId, bool orgAdmin = false)
+        public async Task DeleteAttachmentAsync(Cipher cipher, string attachmentId, Guid deletingUserId,
+            bool orgAdmin = false)
         {
             if(!orgAdmin && !(await UserCanEditAsync(cipher, deletingUserId)))
             {
@@ -364,7 +366,8 @@
                     // migrate attachments
                     foreach(var attachment in attachments)
                     {
-                        await _attachmentStorageService.StartShareAttachmentAsync(cipher.Id, organizationId, attachment.Key);
+                        await _attachmentStorageService.StartShareAttachmentAsync(cipher.Id, organizationId,
+                            attachment.Key);
                         migratedAttachments = true;
                     }
                 }
@@ -390,7 +393,8 @@

                 foreach(var attachment in attachments)
                 {
-                    await _attachmentStorageService.RollbackShareAttachmentAsync(cipher.Id, organizationId, attachment.Key);
+                    await _attachmentStorageService.RollbackShareAttachmentAsync(cipher.Id, organizationId,
+                        attachment.Key);
                 }

                 await _attachmentStorageService.CleanupAsync(cipher.Id);
@@ -450,7 +454,8 @@
             await _pushService.PushSyncCiphersAsync(sharingUserId);
         }

-        public async Task SaveCollectionsAsync(Cipher cipher, IEnumerable<Guid> collectionIds, Guid savingUserId, bool orgAdmin)
+        public async Task SaveCollectionsAsync(Cipher cipher, IEnumerable<Guid> collectionIds, Guid savingUserId,
+            bool orgAdmin)
         {
             if(cipher.Id == default(Guid))
             {
@@ -462,11 +467,14 @@
                 throw new BadRequestException("Cipher must belong to an organization.");
             }

-            // The sprocs will validate that all collections belong to this org/user and that they have proper write permissions.
+            cipher.RevisionDate = DateTime.UtcNow;
+
+            // The sprocs will validate that all collections belong to this org/user and that they have
+            // proper write permissions.
             if(orgAdmin)
             {
-                await _collectionCipherRepository.UpdateCollectionsForAdminAsync(cipher.Id, cipher.OrganizationId.Value,
-                    collectionIds);
+                await _collectionCipherRepository.UpdateCollectionsForAdminAsync(cipher.Id,
+                    cipher.OrganizationId.Value, collectionIds);
             }
             else
             {


Minor

Minor

--- CSharpFunctionalExtensions.Tests/ResultTests/CombineMethodTests.cs
+++ CSharpFunctionalExtensions.Tests/ResultTests/CombineMethodTests.cs
@@ -1,7 +1,7 @@
-using System.Collections.Generic;
+using FluentAssertions;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
-using FluentAssertions;
 using Xunit;

@@ -99,7 +99,7 @@
         [Fact]
         public void Combine_works_with_array_of_Generic_results_success()
         {
-            Result<string>[] results = new Result<string>[]{ Result.Ok(""), Result.Ok("") };
+            Result<string>[] results = new Result<string>[] { Result.Ok(""), Result.Ok("") };

             Result result = Result.Combine(";", results);

@@ -115,7 +115,7 @@

             result.IsSuccess.Should().BeFalse();
         }
-
+
         [Fact]
         public void Combine_combines_all_collection_errors_together()
         {
@@ -146,7 +146,7 @@

             result.IsSuccess.Should().BeTrue();
         }
-
+
         [Fact]
         public void Combine_combines_all_Generic_results_collection_errors_together()
         {
@@ -242,7 +242,7 @@
             result.IsFailure.Should().BeTrue();
             result.Error.Should().Be("e;r;r");
         }
-
+
         [Fact]
         public async Task Combine_combines_all_tasks_of_Generic_results_collection_errors_together()
         {
@@ -258,7 +258,7 @@
             result.IsSuccess.Should().BeFalse();
             result.Error.Should().Be("Error 1;Error 2");
         }
-
+
         [Fact]
         public async Task Combine_returns_Ok_if_no_failures_in_Generic_results_collection_of_tasks()
         {
@@ -274,7 +274,7 @@
             result.IsSuccess.Should().BeTrue();
             result.Value.Should().BeEquivalentTo(new[] { 8, 16, 32 });
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_results_success()
         {
@@ -290,7 +290,7 @@

             result.IsSuccess.Should().BeTrue();
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_results_failure()
         {
@@ -307,7 +307,7 @@
             result.IsSuccess.Should().BeFalse();
             result.Error.Should().Be("b;y");
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_Generic_results_success()
         {
@@ -324,7 +324,7 @@
             result.IsSuccess.Should().BeTrue();
             result.Value.Should().BeEquivalentTo("1", "3", "7");
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_of_collection_of_Generic_results_failure()
         {
@@ -341,7 +341,7 @@
             result.IsSuccess.Should().BeFalse();
             result.Error.Should().Be("b;2");
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_tasks_of_results_success()
         {
@@ -357,7 +357,7 @@

             result.IsSuccess.Should().BeTrue();
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_tasks_of_results_failure()
         {
@@ -375,7 +375,7 @@
             result.IsSuccess.Should().BeFalse();
             result.Error.Should().Be("x;y;z");
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_tasks_of_Generic_results_success()
         {
@@ -392,7 +392,7 @@
             result.IsSuccess.Should().BeTrue();
             result.Value.Should().BeEquivalentTo(7, 77, 777);
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_with_collection_of_tasks_of_Generic_results_failure()
         {
@@ -443,7 +443,7 @@
             result.IsFailure.Should().BeTrue();
             result.Error.Should().Be("error 1;error 2");
         }
-
+
         [Fact]
         public async Task Combine_works_with_collection_of_tasks_of_results_and_compose_to_new_result_success()
         {
@@ -477,7 +477,7 @@
             result.IsFailure.Should().BeTrue();
             result.Error.Should().Be("exc 1;exc 2");
         }
-
+
         [Fact]
         public async Task Combine_works_with_task_of_collection_of_tasks_of_results_and_compose_to_new_result_success()
         {


Remove MessageBox that synchronizazion of distribution lists is only supported for SOGo.

--- CalDavSynchronizer/Ui/Options/ViewModels/OutlookFolderViewModel.cs
+++ CalDavSynchronizer/Ui/Options/ViewModels/OutlookFolderViewModel.cs
@@ -75,15 +75,6 @@
           MessageBox.Show(wrongFolderMessage, "Configuration Error");
           return;
         }
-
-        if (folder.DefaultItemType == OlItemType.olContactItem)
-        {
-          MessageBox.Show(
-              "Synchronization of Outlook distribution lists is only supported for SOGo at the moment!",
-              ComponentContainer.MessageBoxTitle,
-              MessageBoxButton.OK,
-              MessageBoxImage.Warning);
-        }
       }
     }


GetTypeInfo() for .Net Core

GetTypeInfo() for .Net Core

--- SpecLight/Output/RazorTemplateBase.cs
+++ SpecLight/Output/RazorTemplateBase.cs
@@ -2,6 +2,7 @@
 using System.Globalization;
 using System.IO;
 using System.Net;
+using System.Reflection;
 using System.Text;
 using System.Web.WebPages;
 using SpecLight.Output.ViewModel;
@@ -97,7 +98,11 @@
             return new HelperResult(writer =>
             {
                 var type = GetType();
+#if NETCOREAPP1_1
+                var stream = type.GetTypeInfo().Assembly.GetManifestResourceStream(type.Namespace + "." + s);
+#else
                 var stream = type.Assembly.GetManifestResourceStream(type.Namespace + "." + s);
+#endif
                 WriteLiteralTo(writer, new StreamReader(stream).ReadToEnd());
             });
         }


added credits entries. (translation todo)

--- RelhaxModpack/RelhaxModpack/Windows/Credits.xaml.cs
+++ RelhaxModpack/RelhaxModpack/Windows/Credits.xaml.cs
@@ -11,7 +11,6 @@
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Shapes;
-using System.Text;

 namespace RelhaxModpack.Windows
 {
@@ -20,6 +19,9 @@
     /// </summary>
     public partial class Credits : RelhaxWindow
     {
+
+        private readonly string nl = Environment.NewLine;
+
         public Credits()
         {
             InitializeComponent();
@@ -31,7 +33,43 @@
             Title = Translations.GetTranslatedString(nameof(Credits));

             StringBuilder creditsBuilder = new StringBuilder();
+            //project lead and database managers
+            creditsBuilder.AppendFormat("{0}: Willster419{1}{1}", "Project Leader", nl);
+            creditsBuilder.AppendFormat("{0}:{1}", "Database Managers", nl);
+            creditsBuilder.AppendLine(string.Join(", ",new string[] { "Elektrosmoker", "Dirty20067", "123GAUSS", "TheIllusion"}));
+            creditsBuilder.AppendLine();

+            //Translators
+            creditsBuilder.AppendFormat("{0}:{1}", "Translators", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "English", string.Join(", ",new string[] { "Rkk1945", "Willster419"}), nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "German", string.Join(", ", new string[] {"Grumpelumpf", "Dirty20067", "123GAUSS", "Elektrosmoker" }), nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "French", string.Join(", ", new string[] {"Merkk", "Toshiro" }), nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "Spanish", "LordFelix", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "Polish", string.Join(", ", new string[] {"Neoros","Nullmaruzero" }), nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "Russian", "DrWeb7_1", nl);
+            creditsBuilder.AppendLine();
+
+            //Open source
+            creditsBuilder.AppendFormat("{0}:{1}", "Relhax Modpack uses the following Open Source projects", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "Json.NET", "https://www.newtonsoft.com/json", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "DotNetZip", "https://github.com/haf/DotNetZip.Semverd", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "TeximpNet", "https://bitbucket.org/Starnick/teximpnet", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "NAudio", "https://github.com/naudio/NAudio", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "WindowsApiCodePack", "https://github.com/contre/Windows-API-Code-Pack-1.1", nl);
+            creditsBuilder.AppendFormat("{0}: {1}{2}", "SpriteSheetPacker", "https://github.com/amakaseev/sprite-sheet-packer", nl);
+            creditsBuilder.AppendLine();
+
+            //Special thanks
+            creditsBuilder.AppendFormat("{0}:{1}", "Special thanks", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Grumpelumpf", "Project leader of OMC, allowed us to pick up where he left off", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Rkk1945", "The first beta tester who worked with me for months to get the project running", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Relic Gaming Community", "Sponsoring the modpack and being my first beta tester group", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Our Beta Testing team", "Continuing to test and report issues in the application before it goes live", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Silvers", "Helping with the community outreach and social networking", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Xantier", "Initial IT support and setting up our server", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Javier Arevalo and Markus Ewald", "Developing the sprite sheet packer algorithm and porting to .NET", nl);
+            creditsBuilder.AppendFormat("{0}: {1}.{2}", "Wargaming", "Making an easy to automate modding system", nl);
+            creditsBuilder.Append("Users like you!");

             CreditsTextBox.Text = creditsBuilder.ToString();
         }


Fix, incorrect variable is compared to null after conversion

--- Controls/Chart/Chart.UWP/Engine/DataPoints/CategoricalDataPoint.cs
+++ Controls/Chart/Chart.UWP/Engine/DataPoints/CategoricalDataPoint.cs
@@ -62,7 +62,7 @@
             if (axis is NumericalAxisModel)
             {
                 this.numericalPlot = newValue as NumericalAxisPlotInfo;
-                if (newValue != null)
+                if (numericalPlot != null)
                 {
                     this.isInNumericalRange = true;
                     this.isPositive = this.numericalPlot.NormalizedValue >= this.numericalPlot.NormalizedOrigin;


Deleted orphaned file.

Deleted orphaned file.

This file was removed in 53e22adc35a232be8e59841de9b83b8c02275136, but it
seems I subsequently accidentally reintroduced it to the repository in
2c81087a99d512f69ef239a03dde4200d4c99c65, when moving files in to the /Src
directory. This was in the spring of 2010, and I think we were using
Mercurial at the time. Apparently I didn't fully understand how to use Hg
at the time.

--- Src/AutoFixture/IInstanceGenerator.cs
+++ Src/AutoFixture/IInstanceGenerator.cs
@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Reflection;
-
-namespace Ploeh.AutoFixture
-{
-    /// <summary>
-    /// Represents types that hold the potential to generate instances based on a given
-    /// description.
-    /// </summary>
-    public interface IInstanceGenerator
-    {
-        /// <summary>
-        /// Indicates whether the current instance can generate object instances based on the given
-        /// <see cref="ICustomAttributeProvider"/>.
-        /// </summary>
-        /// <param name="attributeProvider">
-        /// Provides a description upon which the current instance can base its decision.
-        /// </param>
-        /// <returns>
-        /// <see langword="true"/> if the current instance can generate object instances based on
-        /// <paramref name="attributeProvider"/>; otherwise, <see langword="false"/>.
-        /// </returns>
-        bool CanGenerate(ICustomAttributeProvider attributeProvider);
-
-        /// <summary>
-        /// Generates object instances based on the given <see cref="ICustomAttributeProvider"/>.
-        /// </summary>
-        /// <param name="attributeProvider">
-        /// Provides a description that guides the current instance in generating object instances.
-        /// </param>
-        /// <returns>A new object based on <paramref name="attributeProvider"/>.</returns>
-        object Generate(ICustomAttributeProvider attributeProvider);
-    }
-}


Exclude anything that runs through the .axd processing pipeline.

--- HttpCompress/Settings.cs
+++ HttpCompress/Settings.cs
@@ -28,7 +28,7 @@
       _compressionLevel = CompressionLevels.Default;
       _excludedTypes = new StringCollection();
       _excludedPaths = new StringCollection();
-      _excludedPaths.Add("WebResource.axd");
+      _excludedPaths.Add(".axd");
     }

     /// <summary>


Minor text fix

Minor text fix

--- HttpMockPlayer/Player.cs
+++ HttpMockPlayer/Player.cs
@@ -660,7 +660,7 @@
                                             {
                                                 var differencesMessage = string.Join(", ",
                                                     differences.Select(d =>
-                                                        $"{d.Property} (Recorded={d.ThisValue}, Requested={d.OtherValue}"));
+                                                        $"{d.Property} (Recorded='{d.ThisValue}', Requested='{d.OtherValue}')"));
                                                 var message =
                                                     $"Player could not play the request at {playerRequest.Url.PathAndQuery}. " +
                                                     $"The request doesn't match the current recorded one: {differencesMessage}";