diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 6ec071be2fc9..17a371079ad3 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -21,7 +21,7 @@
]
},
"ppy.localisationanalyser.tools": {
- "version": "2024.802.0",
+ "version": "2025.1208.0",
"commands": [
"localisation"
]
diff --git a/.github/workflows/update-web-mod-definitions.yml b/.github/workflows/update-web-mod-definitions.yml
index b19f03ad7dd3..160872a9a114 100644
--- a/.github/workflows/update-web-mod-definitions.yml
+++ b/.github/workflows/update-web-mod-definitions.yml
@@ -38,8 +38,12 @@ jobs:
run: ./UseLocalOsu.sh
working-directory: ./osu-tools
+ - name: Build tools
+ run: dotnet build PerformanceCalculator --nologo --verbosity quiet
+ working-directory: ./osu-tools
+
- name: Regenerate mod definitions
- run: dotnet run --project PerformanceCalculator -- mods > ../osu-web/database/mods.json
+ run: dotnet run --project PerformanceCalculator --no-build -- mods > ../osu-web/database/mods.json
working-directory: ./osu-tools
- name: Create pull request with changes
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ebe1e0807477..347e0f558a09 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -55,9 +55,7 @@ When in doubt, it's probably best to start with a discussion first. We will esca
While pull requests from unaffiliated contributors are welcome, please note that due to significant community interest and limited review throughput, the core team's primary focus is on the issues which are currently [on the roadmap](https://github.com/orgs/ppy/projects/7/views/6). Reviewing PRs that fall outside of the scope of the roadmap is done on a best-effort basis, so please be aware that it may take a while before a core maintainer gets around to review your change.
-The [issue tracker](https://github.com/ppy/osu/issues) should provide plenty of issues to start with. We also have a [`good first issue`](https://github.com/ppy/osu/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label, although from experience it is not used very often, as it is relatively rare that we can spot an issue that will definitively be a good first issue for a new contributor regardless of their programming experience.
-
-In the case of simple issues, a direct PR is okay. However, if you decide to work on an existing issue which doesn't seem trivial, **please ask us first**. This way we can try to estimate if it is a good fit for you and provide the correct direction on how to address it. In addition, note that while we do not rule out external contributors from working on roadmapped issues, we will generally prefer to handle them ourselves unless they're not very time sensitive.
+The [issue tracker](https://github.com/ppy/osu/issues) should provide plenty of issues to start with. In the case of simple issues, a direct PR is okay. However, if you decide to work on an existing issue which doesn't seem trivial, **please ask us first**. This way we can try to estimate if it is a good fit for you and provide the correct direction on how to address it. In addition, note that while we do not rule out external contributors from working on roadmapped issues, we will generally prefer to handle them ourselves unless they're not very time sensitive.
If you'd like to propose a subjective change to one of the visual aspects of the game, or there is a bigger task you'd like to work on, but there is no corresponding issue or discussion thread yet for it, **please open a discussion or issue first** to avoid wasted effort. This in particular applies if you want to work on [one of the available designs from the osu! Figma master library](https://www.figma.com/file/VIkXMYNPMtQem2RJg9k2iQ/Master-Library).
@@ -73,6 +71,9 @@ Aside from the above, below is a brief checklist of things to watch out when you
After you're done with your changes and you wish to open the PR, please observe the following recommendations:
- Please submit the pull request from a [topic branch](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows#_topic_branch) (not `master`), and keep the *Allow edits from maintainers* check box selected, so that we can push fixes to your PR if necessary.
+- Please pick the following target branch for your pull request:
+ - `pp-dev`, if the change impacts star rating or performance points calculations for any of the rulesets,
+ - `master`, otherwise.
- Please avoid pushing untested or incomplete code.
- Please do not force-push or rebase unless we ask you to.
- Please do not merge `master` continually if there are no conflicts to resolve. We will do this for you when the change is ready for merge.
diff --git a/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform.Tests/osu.Game.Rulesets.EmptyFreeform.Tests.csproj b/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform.Tests/osu.Game.Rulesets.EmptyFreeform.Tests.csproj
index 86f73a37d4d2..4fa8b9409900 100644
--- a/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform.Tests/osu.Game.Rulesets.EmptyFreeform.Tests.csproj
+++ b/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform.Tests/osu.Game.Rulesets.EmptyFreeform.Tests.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/EmptyFreeformDifficultyCalculator.cs b/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/EmptyFreeformDifficultyCalculator.cs
index 312d3d5e9a64..c7851cc12f02 100644
--- a/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/EmptyFreeformDifficultyCalculator.cs
+++ b/Templates/Rulesets/ruleset-empty/osu.Game.Rulesets.EmptyFreeform/EmptyFreeformDifficultyCalculator.cs
@@ -19,13 +19,13 @@ public EmptyFreeformDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap b
{
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty();
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty();
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty();
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty();
}
}
diff --git a/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj b/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
index 51c0233942c7..bb95c675fcf8 100644
--- a/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
+++ b/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs b/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
index f6addab279e7..852576958446 100644
--- a/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
+++ b/Templates/Rulesets/ruleset-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
@@ -19,13 +19,13 @@ public PippidonDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatma
{
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty();
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty();
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty();
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty();
}
}
diff --git a/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling.Tests/osu.Game.Rulesets.EmptyScrolling.Tests.csproj b/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling.Tests/osu.Game.Rulesets.EmptyScrolling.Tests.csproj
index ed4e8631eafa..fc170b2c24e3 100644
--- a/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling.Tests/osu.Game.Rulesets.EmptyScrolling.Tests.csproj
+++ b/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling.Tests/osu.Game.Rulesets.EmptyScrolling.Tests.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/EmptyScrollingDifficultyCalculator.cs b/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/EmptyScrollingDifficultyCalculator.cs
index a4dc1762d520..17139218a52d 100644
--- a/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/EmptyScrollingDifficultyCalculator.cs
+++ b/Templates/Rulesets/ruleset-scrolling-empty/osu.Game.Rulesets.EmptyScrolling/EmptyScrollingDifficultyCalculator.cs
@@ -19,13 +19,13 @@ public EmptyScrollingDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap
{
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty();
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty();
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty();
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty();
}
}
diff --git a/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj b/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
index 51c0233942c7..bb95c675fcf8 100644
--- a/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
+++ b/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon.Tests/osu.Game.Rulesets.Pippidon.Tests.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs b/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
index f6addab279e7..852576958446 100644
--- a/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
+++ b/Templates/Rulesets/ruleset-scrolling-example/osu.Game.Rulesets.Pippidon/PippidonDifficultyCalculator.cs
@@ -19,13 +19,13 @@ public PippidonDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatma
{
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
return new DifficultyAttributes(mods, 0);
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate) => Enumerable.Empty();
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods) => Enumerable.Empty();
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => Array.Empty();
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => Array.Empty();
}
}
diff --git a/osu.Android.props b/osu.Android.props
index 8917bc9339f8..85c0378eced0 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -10,7 +10,7 @@
true
-
+
-
-
-
-
+ android:roundIcon="@mipmap/ic_launcher">
+
+
+
+
diff --git a/osu.Android/Resources/xml/filepaths.xml b/osu.Android/Resources/xml/filepaths.xml
new file mode 100644
index 000000000000..a2356c4aabf4
--- /dev/null
+++ b/osu.Android/Resources/xml/filepaths.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/osu.Desktop/OsuGameDesktop.cs b/osu.Desktop/OsuGameDesktop.cs
index 885ee0620eed..2530f34939b4 100644
--- a/osu.Desktop/OsuGameDesktop.cs
+++ b/osu.Desktop/OsuGameDesktop.cs
@@ -146,9 +146,13 @@ public override void SetHost(GameHost host)
{
base.SetHost(host);
- var iconStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetType(), "lazer.ico");
- if (iconStream != null)
- host.Window.SetIconFromStream(iconStream);
+ // Apple operating systems use a better icon provided via external assets.
+ if (!RuntimeInfo.IsApple)
+ {
+ var iconStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetType(), "lazer.ico");
+ if (iconStream != null)
+ host.Window.SetIconFromStream(iconStream);
+ }
host.Window.Title = Name;
}
diff --git a/osu.Desktop/Security/ElevatedPrivilegesChecker.cs b/osu.Desktop/Security/ElevatedPrivilegesChecker.cs
index 4b6ebc9b5675..1ac0a8153a3c 100644
--- a/osu.Desktop/Security/ElevatedPrivilegesChecker.cs
+++ b/osu.Desktop/Security/ElevatedPrivilegesChecker.cs
@@ -7,6 +7,7 @@
using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites;
using osu.Game.Graphics;
+using osu.Game.Localisation;
using osu.Game.Overlays;
using osu.Game.Overlays.Notifications;
@@ -32,7 +33,7 @@ private partial class ElevatedPrivilegesNotification : SimpleNotification
{
public ElevatedPrivilegesNotification()
{
- Text = $"Running osu! as {(RuntimeInfo.IsUnix ? "root" : "administrator")} does not improve performance, may break integrations and poses a security risk. Please run the game as a normal user.";
+ Text = NotificationsStrings.ElevatedPrivileges(RuntimeInfo.IsUnix ? "root" : "Administrator");
}
[BackgroundDependencyLoader]
diff --git a/osu.Desktop/osu.Desktop.csproj b/osu.Desktop/osu.Desktop.csproj
index b0c5c953d43c..bd0f4448fc8e 100644
--- a/osu.Desktop/osu.Desktop.csproj
+++ b/osu.Desktop/osu.Desktop.csproj
@@ -24,8 +24,8 @@
-
-
+
+
diff --git a/osu.Game.Benchmarks/BenchmarkCarouselFilter.cs b/osu.Game.Benchmarks/BenchmarkCarouselFilter.cs
index 8f7027da1772..ecd76872d184 100644
--- a/osu.Game.Benchmarks/BenchmarkCarouselFilter.cs
+++ b/osu.Game.Benchmarks/BenchmarkCarouselFilter.cs
@@ -5,7 +5,7 @@
using osu.Game.Beatmaps;
using osu.Game.Rulesets;
using osu.Game.Screens.Select;
-using osu.Game.Screens.Select.Carousel;
+using osu.Game.Tests.NonVisual.Filtering;
namespace osu.Game.Benchmarks
{
@@ -42,7 +42,7 @@ public class BenchmarkCarouselFilter : BenchmarkTest
Status = BeatmapOnlineStatus.Loved
};
- private CarouselBeatmap carouselBeatmap = null!;
+ private FilterMatchingTest.CarouselBeatmap carouselBeatmap = null!;
private FilterCriteria criteria1 = null!;
private FilterCriteria criteria2 = null!;
private FilterCriteria criteria3 = null!;
@@ -55,7 +55,7 @@ public override void SetUp()
var beatmap = getExampleBeatmap();
beatmap.OnlineID = 20201010;
beatmap.BeatmapSet = new BeatmapSetInfo { OnlineID = 1535 };
- carouselBeatmap = new CarouselBeatmap(beatmap);
+ carouselBeatmap = new FilterMatchingTest.CarouselBeatmap(beatmap);
criteria1 = new FilterCriteria();
criteria2 = new FilterCriteria
{
diff --git a/osu.Game.Benchmarks/osu.Game.Benchmarks.csproj b/osu.Game.Benchmarks/osu.Game.Benchmarks.csproj
index 8a353eb2f502..104ee50fe105 100644
--- a/osu.Game.Benchmarks/osu.Game.Benchmarks.csproj
+++ b/osu.Game.Benchmarks/osu.Game.Benchmarks.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
diff --git a/osu.Game.Rulesets.Catch.Tests.iOS/Info.plist b/osu.Game.Rulesets.Catch.Tests.iOS/Info.plist
index f87043e1d1be..a3b9dda48c2d 100644
--- a/osu.Game.Rulesets.Catch.Tests.iOS/Info.plist
+++ b/osu.Game.Rulesets.Catch.Tests.iOS/Info.plist
@@ -35,11 +35,9 @@
UIInterfaceOrientationLandscapeRight
UIInterfaceOrientationLandscapeLeft
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
UIApplicationSupportsIndirectInputEvents
CADisableMinimumFrameDurationOnPhone
-
\ No newline at end of file
+
diff --git a/osu.Game.Rulesets.Catch.Tests/CatchSkinColourDecodingTest.cs b/osu.Game.Rulesets.Catch.Tests/CatchSkinColourDecodingTest.cs
index 74b02bab9b55..3a0dea3e8ce5 100644
--- a/osu.Game.Rulesets.Catch.Tests/CatchSkinColourDecodingTest.cs
+++ b/osu.Game.Rulesets.Catch.Tests/CatchSkinColourDecodingTest.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.IO.Stores;
using osu.Game.Rulesets.Catch.Skinning;
using osu.Game.Rulesets.Catch.Skinning.Legacy;
@@ -21,9 +22,9 @@ public void TestCatchSkinColourDecoding()
var skinSource = new SkinProvidingContainer(rawSkin);
var skin = new CatchLegacySkinTransformer(skinSource);
- Assert.AreEqual(new Color4(232, 185, 35, 255), skin.GetConfig(CatchSkinColour.HyperDash)?.Value);
- Assert.AreEqual(new Color4(232, 74, 35, 255), skin.GetConfig(CatchSkinColour.HyperDashAfterImage)?.Value);
- Assert.AreEqual(new Color4(0, 255, 255, 255), skin.GetConfig(CatchSkinColour.HyperDashFruit)?.Value);
+ ClassicAssert.AreEqual(new Color4(232, 185, 35, 255), skin.GetConfig(CatchSkinColour.HyperDash)?.Value);
+ ClassicAssert.AreEqual(new Color4(232, 74, 35, 255), skin.GetConfig(CatchSkinColour.HyperDashAfterImage)?.Value);
+ ClassicAssert.AreEqual(new Color4(0, 255, 255, 255), skin.GetConfig(CatchSkinColour.HyperDashFruit)?.Value);
}
private class TestLegacySkin : LegacySkin
diff --git a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
index fc1b13f3ad18..132bc4bed1f3 100644
--- a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
+++ b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj
@@ -1,9 +1,9 @@
-
-
-
+
+
+
WinExe
diff --git a/osu.Game.Rulesets.Catch/CatchRuleset.cs b/osu.Game.Rulesets.Catch/CatchRuleset.cs
index 02d266228ad7..eb8cf137faf7 100644
--- a/osu.Game.Rulesets.Catch/CatchRuleset.cs
+++ b/osu.Game.Rulesets.Catch/CatchRuleset.cs
@@ -176,15 +176,20 @@ public override IEnumerable GetModsFor(ModType type)
public override Drawable CreateIcon() => new SpriteIcon { Icon = OsuIcon.RulesetCatch };
- protected override IEnumerable GetValidHitResults()
+ public override IEnumerable GetValidHitResults()
{
return new[]
{
HitResult.Great,
+ HitResult.Miss,
HitResult.LargeTickHit,
+ HitResult.LargeTickMiss,
HitResult.SmallTickHit,
+ HitResult.SmallTickMiss,
HitResult.LargeBonus,
+ HitResult.IgnoreHit,
+ HitResult.IgnoreMiss,
};
}
@@ -300,7 +305,7 @@ public override IEnumerable GetBeatmapAttributesForDisp
Description = "Affects how early fruits fade in on the screen.",
AdditionalMetrics =
[
- new RulesetBeatmapAttribute.AdditionalMetric("Fade-in time", LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRange(effectiveDifficulty.ApproachRate, CatchHitObject.PREEMPT_RANGE):#,0.##} ms"))
+ new RulesetBeatmapAttribute.AdditionalMetric("Fade-in time", LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRangeInt(effectiveDifficulty.ApproachRate, CatchHitObject.PREEMPT_RANGE):#,0.##} ms"))
]
};
yield return new RulesetBeatmapAttribute(SongSelectStrings.HPDrain, @"HP", originalDifficulty.DrainRate, effectiveDifficulty.DrainRate, 10)
diff --git a/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyCalculator.cs b/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyCalculator.cs
index dd69b5de128a..75db566009da 100644
--- a/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyCalculator.cs
+++ b/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyCalculator.cs
@@ -15,6 +15,7 @@
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Difficulty.Skills;
using osu.Game.Rulesets.Mods;
+using osu.Game.Utils;
namespace osu.Game.Rulesets.Catch.Difficulty
{
@@ -22,8 +23,6 @@ public class CatchDifficultyCalculator : DifficultyCalculator
{
private const double difficulty_multiplier = 4.59;
- private float halfCatcherWidth;
-
public override int Version => 20251020;
public CatchDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap)
@@ -31,7 +30,7 @@ public CatchDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap)
{
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
if (beatmap.HitObjects.Count == 0)
return new CatchDifficultyAttributes { Mods = mods };
@@ -46,12 +45,19 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return attributes;
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate)
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods)
{
CatchHitObject? lastObject = null;
List objects = new List();
+ double clockRate = ModUtils.CalculateRateWithMods(mods);
+
+ float halfCatcherWidth = Catcher.CalculateCatchWidth(beatmap.Difficulty) * 0.5f;
+
+ // For circle sizes above 5.5, reduce the catcher width further to simulate imperfect gameplay.
+ halfCatcherWidth *= 1 - (Math.Max(0, beatmap.Difficulty.CircleSize - 5.5f) * 0.0625f);
+
// In 2B beatmaps, it is possible that a normal Fruit is placed in the middle of a JuiceStream.
foreach (var hitObject in CatchBeatmap.GetPalpableObjects(beatmap.HitObjects))
{
@@ -68,16 +74,11 @@ protected override IEnumerable CreateDifficultyHitObjects(I
return objects;
}
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate)
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods)
{
- halfCatcherWidth = Catcher.CalculateCatchWidth(beatmap.Difficulty) * 0.5f;
-
- // For circle sizes above 5.5, reduce the catcher width further to simulate imperfect gameplay.
- halfCatcherWidth *= 1 - (Math.Max(0, beatmap.Difficulty.CircleSize - 5.5f) * 0.0625f);
-
return new Skill[]
{
- new Movement(mods, halfCatcherWidth, clockRate),
+ new Movement(mods),
};
}
diff --git a/osu.Game.Rulesets.Catch/Difficulty/Evaluators/MovementEvaluator.cs b/osu.Game.Rulesets.Catch/Difficulty/Evaluators/MovementEvaluator.cs
index 618b18394341..8c44cd35693c 100644
--- a/osu.Game.Rulesets.Catch/Difficulty/Evaluators/MovementEvaluator.cs
+++ b/osu.Game.Rulesets.Catch/Difficulty/Evaluators/MovementEvaluator.cs
@@ -11,12 +11,16 @@ public static class MovementEvaluator
{
private const double direction_change_bonus = 21.0;
- public static double EvaluateDifficultyOf(DifficultyHitObject current, double catcherSpeedMultiplier)
+ public static double EvaluateDifficultyOf(DifficultyHitObject current)
{
var catchCurrent = (CatchDifficultyHitObject)current;
var catchLast = (CatchDifficultyHitObject)current.Previous(0);
var catchLastLast = (CatchDifficultyHitObject)current.Previous(1);
+ // In catch, clockrate adjustments do not only affect the timings of hitobjects,
+ // but also the speed of the player's catcher, which has an impact on difficulty
+ double catcherSpeedMultiplier = current.ClockRate;
+
double weightedStrainTime = catchCurrent.StrainTime + 13 + (3 / catcherSpeedMultiplier);
double distanceAddition = (Math.Pow(Math.Abs(catchCurrent.DistanceMoved), 1.3) / 510);
diff --git a/osu.Game.Rulesets.Catch/Difficulty/Skills/Movement.cs b/osu.Game.Rulesets.Catch/Difficulty/Skills/Movement.cs
index 90055b9aa384..332ef7e17bf9 100644
--- a/osu.Game.Rulesets.Catch/Difficulty/Skills/Movement.cs
+++ b/osu.Game.Rulesets.Catch/Difficulty/Skills/Movement.cs
@@ -17,28 +17,14 @@ public class Movement : StrainDecaySkill
protected override int SectionLength => 750;
- protected readonly float HalfCatcherWidth;
-
- ///
- /// The speed multiplier applied to the player's catcher.
- ///
- private readonly double catcherSpeedMultiplier;
-
- public Movement(Mod[] mods, float halfCatcherWidth, double clockRate)
+ public Movement(Mod[] mods)
: base(mods)
{
- HalfCatcherWidth = halfCatcherWidth;
-
- // In catch, clockrate adjustments do not only affect the timings of hitobjects,
- // but also the speed of the player's catcher, which has an impact on difficulty
- // TODO: Support variable clockrates caused by mods such as ModTimeRamp
- // (perhaps by using IApplicableToRate within the CatchDifficultyHitObject constructor to set a catcher speed for each object before processing)
- catcherSpeedMultiplier = clockRate;
}
protected override double StrainValueOf(DifficultyHitObject current)
{
- return MovementEvaluator.EvaluateDifficultyOf(current, catcherSpeedMultiplier);
+ return MovementEvaluator.EvaluateDifficultyOf(current);
}
}
}
diff --git a/osu.Game.Rulesets.Catch/Edit/Blueprints/BananaShowerPlacementBlueprint.cs b/osu.Game.Rulesets.Catch/Edit/Blueprints/BananaShowerPlacementBlueprint.cs
index 971c98cafd69..bd5886cb8289 100644
--- a/osu.Game.Rulesets.Catch/Edit/Blueprints/BananaShowerPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Catch/Edit/Blueprints/BananaShowerPlacementBlueprint.cs
@@ -19,7 +19,7 @@ public partial class BananaShowerPlacementBlueprint : CatchPlacementBlueprint Precision.DefinitelyBigger(HitObject.Duration, 0);
+ protected override bool IsValidForPlacement => base.IsValidForPlacement && (PlacementActive == PlacementState.Waiting || Precision.DefinitelyBigger(HitObject.Duration, 0));
public BananaShowerPlacementBlueprint()
{
diff --git a/osu.Game.Rulesets.Catch/Edit/Blueprints/JuiceStreamPlacementBlueprint.cs b/osu.Game.Rulesets.Catch/Edit/Blueprints/JuiceStreamPlacementBlueprint.cs
index 292175353a33..cce3b93d902d 100644
--- a/osu.Game.Rulesets.Catch/Edit/Blueprints/JuiceStreamPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Catch/Edit/Blueprints/JuiceStreamPlacementBlueprint.cs
@@ -25,7 +25,7 @@ public partial class JuiceStreamPlacementBlueprint : CatchPlacementBlueprint Precision.DefinitelyBigger(HitObject.Duration, 0);
+ protected override bool IsValidForPlacement => base.IsValidForPlacement && (PlacementActive == PlacementState.Waiting || Precision.DefinitelyBigger(HitObject.Duration, 0));
public JuiceStreamPlacementBlueprint()
{
diff --git a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs
index 370eb37d16bb..be9685ce9af8 100644
--- a/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs
+++ b/osu.Game.Rulesets.Catch/Edit/CatchHitObjectComposer.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using osu.Framework.Allocation;
@@ -224,7 +225,8 @@ private void updateDistanceSnapGrid()
#region Clipboard handling
public override string ConvertSelectionToString()
- => string.Join(',', EditorBeatmap.SelectedHitObjects.Cast().OrderBy(h => h.StartTime).Select(h => (h.IndexInCurrentCombo + 1).ToString()));
+ => string.Join(',', EditorBeatmap.SelectedHitObjects.Cast().OrderBy(h => h.StartTime)
+ .Select(h => (h.IndexInCurrentCombo + 1).ToString(CultureInfo.InvariantCulture)));
// 1,2,3,4 ...
private static readonly Regex selection_regex = new Regex(@"^\d+(,\d+)*$", RegexOptions.Compiled);
diff --git a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs
index 41deaa0d82f4..2f186f5ab4ce 100644
--- a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs
+++ b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs
@@ -150,7 +150,7 @@ protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, I
{
base.ApplyDefaultsToSelf(controlPointInfo, difficulty);
- TimePreempt = (float)IBeatmapDifficultyInfo.DifficultyRange(difficulty.ApproachRate, PREEMPT_RANGE);
+ TimePreempt = IBeatmapDifficultyInfo.DifficultyRangeInt(difficulty.ApproachRate, PREEMPT_RANGE);
Scale = LegacyRulesetExtensions.CalculateScaleFromCircleSize(difficulty.CircleSize);
}
diff --git a/osu.Game.Rulesets.Catch/Skinning/Legacy/CatchLegacySkinTransformer.cs b/osu.Game.Rulesets.Catch/Skinning/Legacy/CatchLegacySkinTransformer.cs
index 4f9048b988b1..4704e83b7684 100644
--- a/osu.Game.Rulesets.Catch/Skinning/Legacy/CatchLegacySkinTransformer.cs
+++ b/osu.Game.Rulesets.Catch/Skinning/Legacy/CatchLegacySkinTransformer.cs
@@ -72,6 +72,9 @@ public CatchLegacySkinTransformer(ISkin skin)
leaderboard.Origin = Anchor.CentreLeft;
leaderboard.X = 10;
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
Children = new Drawable[]
diff --git a/osu.Game.Rulesets.Mania.Tests.iOS/Info.plist b/osu.Game.Rulesets.Mania.Tests.iOS/Info.plist
index 740036309fe1..83cb8f2e8ccd 100644
--- a/osu.Game.Rulesets.Mania.Tests.iOS/Info.plist
+++ b/osu.Game.Rulesets.Mania.Tests.iOS/Info.plist
@@ -35,11 +35,9 @@
UIInterfaceOrientationLandscapeRight
UIInterfaceOrientationLandscapeLeft
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
UIApplicationSupportsIndirectInputEvents
CADisableMinimumFrameDurationOnPhone
-
\ No newline at end of file
+
diff --git a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneHoldNoteTailDrag.cs b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneHoldNoteTailDrag.cs
new file mode 100644
index 000000000000..bdbf24bb95b3
--- /dev/null
+++ b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneHoldNoteTailDrag.cs
@@ -0,0 +1,351 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System.Linq;
+using NUnit.Framework;
+using osu.Framework.Testing;
+using osu.Game.Rulesets.Mania.Objects;
+using osu.Game.Tests.Visual;
+using osuTK;
+using osuTK.Input;
+using DragArea = osu.Game.Screens.Edit.Compose.Components.Timeline.TimelineHitObjectBlueprint.DragArea;
+
+namespace osu.Game.Rulesets.Mania.Tests.Editor
+{
+ public partial class TestSceneHoldNoteTailDrag : EditorTestScene
+ {
+ protected override Ruleset CreateEditorRuleset() => new ManiaRuleset();
+
+ [SetUpSteps]
+ public override void SetUpSteps()
+ {
+ base.SetUpSteps();
+ AddStep("Clear objects", () => EditorBeatmap.Clear());
+ }
+
+ [Test]
+ public void TestSimpleTailDragForward()
+ {
+ AddStep("Add hold note", () =>
+ {
+ EditorBeatmap.Add(new HoldNote { StartTime = 2170, Duration = 937.5 });
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().Single();
+ dragForward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is higher", () => ((HoldNote)EditorBeatmap.HitObjects.First())!.Duration > 937.5f);
+ }
+
+ [Test]
+ public void TestSimpleTailDragBackwards()
+ {
+ AddStep("Add hold note", () =>
+ {
+ EditorBeatmap.Add(new HoldNote { StartTime = 2170, Duration = 937.5 });
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().Single();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is lower", () => ((HoldNote)EditorBeatmap.HitObjects[0]).Duration < 937.5f);
+ }
+
+ [Test]
+ public void TestSamePositionButNotSelectedDragForward()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragForward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is higher, other is unchanged", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration > 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration == 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSamePositionButNotSelectedDragBackward()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is lower, other is unchanged", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration < 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration == 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSamePositionSelectedDragForward()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragForward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Both durations are higher", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration > 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration > 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSamePositionSelectedDragBackward()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Both durations are lower", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration < 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration < 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSelectedButDifferentPositions()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2404, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is unchanged, other is lower", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration == 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration < 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSelectedSameStartTimeDifferentDurations()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 1171.8, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag until both match", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ InputManager.MoveMouseTo(blueprintDragArea);
+ InputManager.PressKey(Key.LShift);
+ InputManager.PressButton(MouseButton.Left);
+ InputManager.MoveMouseTo(new Vector2(1000, 110));
+ });
+
+ AddStep("Continue the drag", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is unchanged, other is lower", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration == 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration < 937.5f
+ );
+ }
+
+ [Test]
+ public void TestSelectedSameDurationDifferentStartTimes()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2638.7, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is unchanged, other is lower", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration == 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration < 937.5f
+ );
+ }
+
+ [Test]
+ public void TestDragNoteOutsideOfSelection()
+ {
+ AddStep("Add hold notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 1 }
+ ]);
+ });
+
+ AddStep("Select the back stack slider", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.Add(EditorBeatmap.HitObjects.Last());
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Duration is lower, other is unchanged", () =>
+ ((HoldNote)EditorBeatmap.HitObjects[0]).Duration < 937.5f &&
+ ((HoldNote)EditorBeatmap.HitObjects[^1]).Duration == 937.5f
+ );
+ }
+
+ [Test]
+ public void TestDragHoldNoteWithNotes()
+ {
+ AddStep("Add notes", () =>
+ {
+ EditorBeatmap.AddRange([
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 0 },
+ new Note { StartTime = 2170, Column = 1 },
+ new Note { StartTime = 3107.5, Column = 2 },
+ new HoldNote { StartTime = 2170, Duration = 937.5, Column = 3 }
+ ]);
+ });
+
+ AddStep("Select all", () =>
+ {
+ EditorBeatmap.SelectedHitObjects.AddRange(EditorBeatmap.HitObjects);
+ });
+
+ AddStep("Drag tail", () =>
+ {
+ var blueprintDragArea = this.ChildrenOfType().First();
+ dragBackward(blueprintDragArea);
+ });
+
+ AddStep("Release tail", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddAssert("Both durations are lower", () =>
+ {
+ var holdNotes = EditorBeatmap.HitObjects.OfType();
+ return holdNotes.First().Duration < 937.5f && holdNotes.Last().Duration < 937.5f;
+ }
+ );
+ }
+
+ private void dragForward(DragArea dragArea)
+ {
+ InputManager.MoveMouseTo(dragArea);
+ InputManager.PressButton(MouseButton.Left);
+ InputManager.MoveMouseTo(new Vector2(1100, 110));
+ }
+
+ private void dragBackward(DragArea dragArea)
+ {
+ InputManager.MoveMouseTo(dragArea);
+ InputManager.PressButton(MouseButton.Left);
+ InputManager.MoveMouseTo(new Vector2(700, 110));
+ }
+ }
+}
diff --git a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneNotePlacementBlueprint.cs b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneNotePlacementBlueprint.cs
index 0cb9639cd177..a18b7652337f 100644
--- a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneNotePlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneNotePlacementBlueprint.cs
@@ -5,6 +5,7 @@
using System.Linq;
using NUnit.Framework;
+using osu.Framework.Allocation;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Testing;
using osu.Game.Rulesets.Edit;
@@ -16,6 +17,7 @@
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.UI;
using osu.Game.Rulesets.UI.Scrolling;
+using osu.Game.Screens.Edit;
using osu.Game.Tests.Visual;
using osuTK.Input;
@@ -36,29 +38,31 @@ public void Setup() => Schedule(() =>
[Test]
public void TestPlaceBeforeCurrentTimeDownwards()
{
+ AddStep("seek to 200", () => HitObjectContainer.Dependencies.Get().Seek(200));
AddStep("move mouse before current time", () =>
{
var column = this.ChildrenOfType().Single();
- InputManager.MoveMouseTo(column.ScreenSpacePositionAtTime(-100));
+ InputManager.MoveMouseTo(column.ScreenSpacePositionAtTime(100));
});
AddStep("click", () => InputManager.Click(MouseButton.Left));
- AddAssert("note start time < 0", () => getNote().StartTime < 0);
+ AddAssert("note start time < 200", () => getNote().StartTime < 200);
}
[Test]
public void TestPlaceAfterCurrentTimeDownwards()
{
+ AddStep("seek to 200", () => HitObjectContainer.Dependencies.Get().Seek(200));
AddStep("move mouse after current time", () =>
{
var column = this.ChildrenOfType().Single();
- InputManager.MoveMouseTo(column.ScreenSpacePositionAtTime(100));
+ InputManager.MoveMouseTo(column.ScreenSpacePositionAtTime(300));
});
AddStep("click", () => InputManager.Click(MouseButton.Left));
- AddAssert("note start time > 0", () => getNote().StartTime > 0);
+ AddAssert("note start time > 200", () => getNote().StartTime > 200);
}
private Note getNote() => this.ChildrenOfType().FirstOrDefault()?.HitObject;
diff --git a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneObjectPlacement.cs b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneObjectPlacement.cs
index 13a116b20918..94b832e43ad9 100644
--- a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneObjectPlacement.cs
+++ b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneObjectPlacement.cs
@@ -42,7 +42,7 @@ public void TestSeekOnNotePlacement()
AddStep("change seek setting to true", () => config.SetValue(OsuSetting.EditorAutoSeekOnPlacement, true));
placeObject();
AddUntilStep("wait for seek to complete", () => !EditorClock.IsSeeking);
- AddAssert("seeked forward to object", () => EditorClock.CurrentTime, () => Is.GreaterThan(initialTime));
+ AddAssert("seeked forward to object", () => EditorClock.CurrentTime, () => Is.GreaterThan(initialTime!));
}
[Test]
diff --git a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneOpenEditorTimestampInMania.cs b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneOpenEditorTimestampInMania.cs
index 05c881d284e9..ad41ad9be470 100644
--- a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneOpenEditorTimestampInMania.cs
+++ b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneOpenEditorTimestampInMania.cs
@@ -18,15 +18,11 @@ public partial class TestSceneOpenEditorTimestampInMania : EditorTestScene
public void TestNormalSelection()
{
addStepClickLink("00:05:920 (5920|3,6623|3,6857|2,7326|1)");
- AddAssert("selected group", () => checkSnapAndSelectColumn(5_920, new List<(int, int)>
- { (5_920, 3), (6_623, 3), (6_857, 2), (7_326, 1) }
- ));
+ AddAssert("selected group", () => checkSnapAndSelectColumn(5_920, [(5_920, 3), (6_623, 3), (6_857, 2), (7_326, 1)]));
addReset();
addStepClickLink("00:42:716 (42716|3,43420|2,44123|0,44357|1,45295|1)");
- AddAssert("selected ungrouped", () => checkSnapAndSelectColumn(42_716, new List<(int, int)>
- { (42_716, 3), (43_420, 2), (44_123, 0), (44_357, 1), (45_295, 1) }
- ));
+ AddAssert("selected ungrouped", () => checkSnapAndSelectColumn(42_716, [(42_716, 3), (43_420, 2), (44_123, 0), (44_357, 1), (45_295, 1)]));
addReset();
AddStep("add notes to row", () =>
@@ -41,15 +37,20 @@ public void TestNormalSelection()
EditorBeatmap.AddRange(new[] { second, third, forth });
});
addStepClickLink("00:11:545 (11545|0,11545|1,11545|2,11545|3)");
- AddAssert("selected in row", () => checkSnapAndSelectColumn(11_545, new List<(int, int)>
- { (11_545, 0), (11_545, 1), (11_545, 2), (11_545, 3) }
- ));
+ AddAssert("selected in row", () => checkSnapAndSelectColumn(11_545, [(11_545, 0), (11_545, 1), (11_545, 2), (11_545, 3)]));
addReset();
addStepClickLink("01:36:623 (96623|1,97560|1,97677|1,97795|1,98966|1)");
- AddAssert("selected in column", () => checkSnapAndSelectColumn(96_623, new List<(int, int)>
- { (96_623, 1), (97_560, 1), (97_677, 1), (97_795, 1), (98_966, 1) }
- ));
+ AddAssert("selected in column", () => checkSnapAndSelectColumn(96_623, [(96_623, 1), (97_560, 1), (97_677, 1), (97_795, 1), (98_966, 1)]));
+ }
+
+ [Test]
+ public void TestRoundingToNearestMillisecondApplied()
+ {
+ AddStep("resnap note to have fractional coordinates",
+ () => EditorBeatmap.HitObjects.OfType().Single(ho => ho.StartTime == 85_373 && ho.Column == 1).StartTime = 85_373.125);
+ addStepClickLink("01:25:373 (85373|1)");
+ AddAssert("selected note", () => checkSnapAndSelectColumn(85_373.125, [(85_373.125, 1)]));
}
[Test]
@@ -75,7 +76,7 @@ private void addStepClickLink(string timestamp, string step = "", bool displayTi
private void addReset() => addStepClickLink("00:00:000", "reset", false);
- private bool checkSnapAndSelectColumn(double startTime, IReadOnlyCollection<(int, int)>? columnPairs = null)
+ private bool checkSnapAndSelectColumn(double startTime, IReadOnlyCollection<(double, int)>? columnPairs = null)
{
bool checkColumns = columnPairs != null
? EditorBeatmap.SelectedHitObjects.All(x => columnPairs.Any(col => isNoteAt(x, col.Item1, col.Item2)))
diff --git a/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs b/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
index b4f084a07c9a..823538919b60 100644
--- a/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
+++ b/osu.Game.Rulesets.Mania.Tests/ManiaBeatmapSampleConversionTest.cs
@@ -24,6 +24,7 @@ public class ManiaBeatmapSampleConversionTest : BeatmapConversionTest base.Test(name);
protected override IEnumerable CreateConvertValue(HitObject hitObject)
diff --git a/osu.Game.Rulesets.Mania.Tests/ManiaFilterCriteriaTest.cs b/osu.Game.Rulesets.Mania.Tests/ManiaFilterCriteriaTest.cs
index ad3cf4e05f22..49fb8ecb2ce6 100644
--- a/osu.Game.Rulesets.Mania.Tests/ManiaFilterCriteriaTest.cs
+++ b/osu.Game.Rulesets.Mania.Tests/ManiaFilterCriteriaTest.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Mods;
using osu.Game.Screens.Select;
@@ -18,19 +19,19 @@ public void TestKeysEqualSingleValue()
var criteria = new ManiaFilterCriteria();
criteria.TryParseCustomKeywordCriteria("keys", Operator.Equal, "1");
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 1 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 2 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new RulesetInfo { OnlineID = 0 }, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria
{
@@ -44,19 +45,19 @@ public void TestKeysEqualMultipleValues()
var criteria = new ManiaFilterCriteria();
criteria.TryParseCustomKeywordCriteria("keys", Operator.Equal, "1,3,5,7");
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 1 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 2 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new RulesetInfo { OnlineID = 0 }, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria
{
@@ -70,19 +71,19 @@ public void TestKeysNotEqualSingleValue()
var criteria = new ManiaFilterCriteria();
criteria.TryParseCustomKeywordCriteria("keys", Operator.NotEqual, "1");
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 1 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 2 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new RulesetInfo { OnlineID = 0 }, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria
{
@@ -96,19 +97,19 @@ public void TestKeysNotEqualMultipleValues()
var criteria = new ManiaFilterCriteria();
criteria.TryParseCustomKeywordCriteria("keys", Operator.NotEqual, "1,3,5,7");
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 1 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 2 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new RulesetInfo { OnlineID = 0 }, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria
{
@@ -122,23 +123,23 @@ public void TestKeysGreaterOrEqualThan()
var criteria = new ManiaFilterCriteria();
criteria.TryParseCustomKeywordCriteria("keys", Operator.GreaterOrEqual, "4");
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 1 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 2 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 5 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new RulesetInfo { OnlineID = 0 }, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria
{
@@ -153,23 +154,23 @@ public void TestKeysFilterIntersection()
criteria.TryParseCustomKeywordCriteria("keys", Operator.Greater, "4");
criteria.TryParseCustomKeywordCriteria("keys", Operator.NotEqual, "7");
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 3 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 4 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 5 }),
new FilterCriteria()));
- Assert.False(criteria.Matches(
+ ClassicAssert.False(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 7 }),
new FilterCriteria()));
- Assert.True(criteria.Matches(
+ ClassicAssert.True(criteria.Matches(
new BeatmapInfo(new ManiaRuleset().RulesetInfo, new BeatmapDifficulty { CircleSize = 9 }),
new FilterCriteria()));
}
@@ -179,9 +180,9 @@ public void TestInvalidKeysFilters()
{
var criteria = new ManiaFilterCriteria();
- Assert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.Equal, "some text"));
- Assert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.NotEqual, "4,some text"));
- Assert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.GreaterOrEqual, "4,5,6"));
+ ClassicAssert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.Equal, "some text"));
+ ClassicAssert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.NotEqual, "4,some text"));
+ ClassicAssert.False(criteria.TryParseCustomKeywordCriteria("keys", Operator.GreaterOrEqual, "4,5,6"));
}
[TestCase]
@@ -199,7 +200,7 @@ public void TestLnsEqual()
TotalObjectCount = 0,
EndTimeObjectCount = 0
};
- Assert.True(criteria.Matches(beatmapInfo1, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo1, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "0");
BeatmapInfo beatmapInfo2 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -207,7 +208,7 @@ public void TestLnsEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 0
};
- Assert.True(criteria.Matches(beatmapInfo2, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo2, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "100");
BeatmapInfo beatmapInfo3 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -215,7 +216,7 @@ public void TestLnsEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 100
};
- Assert.True(criteria.Matches(beatmapInfo3, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo3, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "1");
BeatmapInfo beatmapInfo4 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -223,7 +224,7 @@ public void TestLnsEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 1
};
- Assert.True(criteria.Matches(beatmapInfo4, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo4, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "0.1");
BeatmapInfo beatmapInfo5 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -231,7 +232,7 @@ public void TestLnsEqual()
TotalObjectCount = 1000,
EndTimeObjectCount = 1
};
- Assert.True(criteria.Matches(beatmapInfo5, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo5, filterCriteria));
}
[TestCase]
@@ -249,7 +250,7 @@ public void TestLnsGreaterOrEqual()
TotalObjectCount = 0,
EndTimeObjectCount = 0
};
- Assert.True(criteria.Matches(beatmapInfo1, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo1, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "0");
BeatmapInfo beatmapInfo2 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -257,7 +258,7 @@ public void TestLnsGreaterOrEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 0
};
- Assert.True(criteria.Matches(beatmapInfo2, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo2, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "100");
BeatmapInfo beatmapInfo3 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -265,7 +266,7 @@ public void TestLnsGreaterOrEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 100
};
- Assert.True(criteria.Matches(beatmapInfo3, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo3, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "1");
BeatmapInfo beatmapInfo4 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -273,7 +274,7 @@ public void TestLnsGreaterOrEqual()
TotalObjectCount = 100,
EndTimeObjectCount = 1
};
- Assert.True(criteria.Matches(beatmapInfo4, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo4, filterCriteria));
criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "0.1");
BeatmapInfo beatmapInfo5 = new BeatmapInfo(new ManiaRuleset().RulesetInfo)
@@ -281,7 +282,7 @@ public void TestLnsGreaterOrEqual()
TotalObjectCount = 1000,
EndTimeObjectCount = 1
};
- Assert.True(criteria.Matches(beatmapInfo5, filterCriteria));
+ ClassicAssert.True(criteria.Matches(beatmapInfo5, filterCriteria));
}
[TestCase]
@@ -299,7 +300,7 @@ public void TestLnsNotManiaRuleset()
TotalObjectCount = 100,
EndTimeObjectCount = 50
};
- Assert.False(criteria.Matches(beatmapInfo, filterCriteria));
+ ClassicAssert.False(criteria.Matches(beatmapInfo, filterCriteria));
}
[TestCase]
@@ -307,8 +308,8 @@ public void TestInvalidLnsFilters()
{
var criteria = new ManiaFilterCriteria();
- Assert.False(criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "some text"));
- Assert.False(criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "1some text"));
+ ClassicAssert.False(criteria.TryParseCustomKeywordCriteria("lns", Operator.Equal, "some text"));
+ ClassicAssert.False(criteria.TryParseCustomKeywordCriteria("lns", Operator.GreaterOrEqual, "1some text"));
}
}
}
diff --git a/osu.Game.Rulesets.Mania.Tests/ManiaSpecialColumnTest.cs b/osu.Game.Rulesets.Mania.Tests/ManiaSpecialColumnTest.cs
index ff1f9e68940d..726d0af945a0 100644
--- a/osu.Game.Rulesets.Mania.Tests/ManiaSpecialColumnTest.cs
+++ b/osu.Game.Rulesets.Mania.Tests/ManiaSpecialColumnTest.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using osu.Game.Rulesets.Mania.Beatmaps;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
namespace osu.Game.Rulesets.Mania.Tests
{
@@ -35,7 +36,7 @@ public void Test(IEnumerable special, int columns)
{
var definition = new StageDefinition(columns);
var results = getResults(definition);
- Assert.AreEqual(special, results);
+ ClassicAssert.AreEqual(special, results);
}
private IEnumerable getResults(StageDefinition definition)
diff --git a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModHoldOff.cs b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModHoldOff.cs
index f5117b61af5f..a06d389f957b 100644
--- a/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModHoldOff.cs
+++ b/osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModHoldOff.cs
@@ -3,6 +3,7 @@
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Mods;
using osu.Game.Tests.Visual;
@@ -20,7 +21,7 @@ public partial class TestSceneManiaModHoldOff : ModTestScene
public void TestMapHasNoHoldNotes()
{
var testBeatmap = createModdedBeatmap();
- Assert.False(testBeatmap.HitObjects.OfType().Any());
+ ClassicAssert.False(testBeatmap.HitObjects.OfType().Any());
}
[Test]
diff --git a/osu.Game.Rulesets.Mania.Tests/Resources/SampleLookups/convert-beatmap-custom-sample-bank.osu b/osu.Game.Rulesets.Mania.Tests/Resources/SampleLookups/convert-beatmap-custom-sample-bank.osu
new file mode 100644
index 000000000000..bccaf49023bf
--- /dev/null
+++ b/osu.Game.Rulesets.Mania.Tests/Resources/SampleLookups/convert-beatmap-custom-sample-bank.osu
@@ -0,0 +1,10 @@
+osu file format v14
+
+[General]
+Mode: 0
+
+[TimingPoints]
+0,300,4,0,2,100,1,0
+
+[HitObjects]
+444,320,1000,5,2,0:0:0:0:
diff --git a/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples-expected-conversion.json b/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples-expected-conversion.json
new file mode 100644
index 000000000000..6a4ce67ec131
--- /dev/null
+++ b/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples-expected-conversion.json
@@ -0,0 +1,16 @@
+{
+ "Mappings": [{
+ "StartTime": 1000.0,
+ "Objects": [{
+ "StartTime": 1000.0,
+ "EndTime": 8000.0,
+ "Column": 0,
+ "PlaySlidingSamples": false,
+ "NodeSamples": [
+ ["Gameplay/soft-hitnormal"],
+ ["Gameplay/soft-hitnormal", "Gameplay/soft-hitfinish"]
+ ],
+ "Samples": ["Gameplay/soft-hitnormal", "Gameplay/soft-hitfinish"],
+ }]
+ }]
+}
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples.osu b/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples.osu
new file mode 100644
index 000000000000..b68c5cc05504
--- /dev/null
+++ b/osu.Game.Rulesets.Mania.Tests/Resources/Testing/Beatmaps/spinner-convert-samples.osu
@@ -0,0 +1,18 @@
+osu file format v14
+
+[General]
+Mode: 0
+
+[Difficulty]
+HPDrainRate:5
+CircleSize:5
+OverallDifficulty:5
+ApproachRate:5
+SliderMultiplier:1.4
+SliderTickRate:1
+
+[TimingPoints]
+0,500,4,2,0,100,1,0
+
+[HitObjects]
+256,192,1000,8,4,8000,0:2:0:0:
diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneAutoGeneration.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneAutoGeneration.cs
index 9a3167b97f64..fd4eb9855c06 100644
--- a/osu.Game.Rulesets.Mania.Tests/TestSceneAutoGeneration.cs
+++ b/osu.Game.Rulesets.Mania.Tests/TestSceneAutoGeneration.cs
@@ -3,6 +3,7 @@
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.Testing;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Rulesets.Mania.Objects;
@@ -33,11 +34,11 @@ public void TestSingleNote()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
- Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
+ ClassicAssert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
}
[Test]
@@ -54,11 +55,11 @@ public void TestSingleHoldNote()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
- Assert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
+ ClassicAssert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
}
[Test]
@@ -74,11 +75,11 @@ public void TestSingleNoteChord()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
- Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
+ ClassicAssert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released");
}
[Test]
@@ -96,13 +97,13 @@ public void TestHoldNoteChord()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 2, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
- Assert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect hit time");
+ ClassicAssert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released");
}
[Test]
@@ -119,15 +120,15 @@ public void TestSingleNoteStair()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 4, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
- Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect first note release time");
- Assert.AreEqual(2000, generated.Frames[frame_offset + 2].Time, "Incorrect second note hit time");
- Assert.AreEqual(2000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 3].Time, "Incorrect second note release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 3], ManiaAction.Key2), "Key2 has not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 4, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
+ ClassicAssert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 1].Time, "Incorrect first note release time");
+ ClassicAssert.AreEqual(2000, generated.Frames[frame_offset + 2].Time, "Incorrect second note hit time");
+ ClassicAssert.AreEqual(2000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 3].Time, "Incorrect second note release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 3], ManiaAction.Key2), "Key2 has not been released");
}
[Test]
@@ -146,16 +147,16 @@ public void TestHoldNoteStair()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 4, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
- Assert.AreEqual(3000, generated.Frames[frame_offset + 2].Time, "Incorrect first note release time");
- Assert.AreEqual(2000, generated.Frames[frame_offset + 1].Time, "Incorrect second note hit time");
- Assert.AreEqual(4000, generated.Frames[frame_offset + 3].Time, "Incorrect second note release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key1), "Key1 has not been released");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has been released");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 3], ManiaAction.Key2), "Key2 has not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 4, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
+ ClassicAssert.AreEqual(3000, generated.Frames[frame_offset + 2].Time, "Incorrect first note release time");
+ ClassicAssert.AreEqual(2000, generated.Frames[frame_offset + 1].Time, "Incorrect second note hit time");
+ ClassicAssert.AreEqual(4000, generated.Frames[frame_offset + 3].Time, "Incorrect second note release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key1), "Key1 has not been released");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has been released");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 3], ManiaAction.Key2), "Key2 has not been released");
}
[Test]
@@ -173,14 +174,14 @@ public void TestHoldNoteWithReleasePress()
var generated = new ManiaAutoGenerator(beatmap).Generate();
- Assert.AreEqual(generated.Frames.Count, frame_offset + 3, "Incorrect number of frames");
- Assert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
- Assert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect second note press time + first note release time");
- Assert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 2].Time, "Incorrect second note release time");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
- Assert.IsTrue(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key2), "Key2 has not been pressed");
- Assert.IsFalse(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has not been released");
+ ClassicAssert.AreEqual(generated.Frames.Count, frame_offset + 3, "Incorrect number of frames");
+ ClassicAssert.AreEqual(1000, generated.Frames[frame_offset].Time, "Incorrect first note hit time");
+ ClassicAssert.AreEqual(3000, generated.Frames[frame_offset + 1].Time, "Incorrect second note press time + first note release time");
+ ClassicAssert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[frame_offset + 2].Time, "Incorrect second note release time");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset], ManiaAction.Key1), "Key1 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key1), "Key1 has not been released");
+ ClassicAssert.True(checkContains(generated.Frames[frame_offset + 1], ManiaAction.Key2), "Key2 has not been pressed");
+ ClassicAssert.False(checkContains(generated.Frames[frame_offset + 2], ManiaAction.Key2), "Key2 has not been released");
}
private bool checkContains(ReplayFrame frame, params ManiaAction[] actions) => actions.All(action => ((ManiaReplayFrame)frame).Actions.Contains(action));
diff --git a/osu.Game.Rulesets.Mania.Tests/TestSceneManiaHitObjectSamples.cs b/osu.Game.Rulesets.Mania.Tests/TestSceneManiaHitObjectSamples.cs
index 36ecbdb098f6..bbac75f74fe3 100644
--- a/osu.Game.Rulesets.Mania.Tests/TestSceneManiaHitObjectSamples.cs
+++ b/osu.Game.Rulesets.Mania.Tests/TestSceneManiaHitObjectSamples.cs
@@ -45,5 +45,19 @@ public void TestManiaHitObjectCustomSampleBank()
AssertBeatmapLookup(expected_sample);
AssertNoLookup(unwanted_sample);
}
+
+ [Test]
+ public void TestConvertHitObjectCustomSampleBank()
+ {
+ const string beatmap_sample = "normal-hitwhistle2";
+ const string user_skin_sample = "normal-hitnormal";
+
+ SetupSkins(beatmap_sample, user_skin_sample);
+
+ CreateTestWithBeatmap("convert-beatmap-custom-sample-bank.osu");
+
+ AssertBeatmapLookup(beatmap_sample);
+ AssertUserLookup(user_skin_sample);
+ }
}
}
diff --git a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
index edb01b044ed6..8d5c4d9da61b 100644
--- a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
+++ b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj
@@ -1,9 +1,9 @@
-
-
-
+
+
+
WinExe
diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/SpinnerPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/SpinnerPatternGenerator.cs
index 39896d3e13ae..f2ca2888c7fb 100644
--- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/SpinnerPatternGenerator.cs
+++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/SpinnerPatternGenerator.cs
@@ -85,7 +85,11 @@ private void addToPattern(Pattern pattern, int column, bool holdNote)
Duration = endTime - HitObject.StartTime,
Column = column,
Samples = HitObject.Samples,
- NodeSamples = (HitObject as IHasRepeats)?.NodeSamples
+ NodeSamples =
+ [
+ HitObject.Samples.Where(s => s.Name == HitSampleInfo.HIT_NORMAL).ToList(),
+ HitObject.Samples
+ ]
};
}
else
diff --git a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
index bcf16e68088c..1bfa3bec6d7c 100644
--- a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
+++ b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
@@ -19,6 +19,7 @@
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Scoring;
+using osu.Game.Utils;
namespace osu.Game.Rulesets.Mania.Difficulty
{
@@ -36,7 +37,7 @@ public ManiaDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap)
isForCurrentRuleset = beatmap.BeatmapInfo.Ruleset.MatchesOnlineID(ruleset);
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
if (beatmap.HitObjects.Count == 0)
return new ManiaDifficultyAttributes { Mods = mods };
@@ -62,11 +63,13 @@ private static int maxComboForObject(HitObject hitObject)
return 1;
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate)
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods)
{
var sortedObjects = beatmap.HitObjects.ToArray();
int totalColumns = ((ManiaBeatmap)beatmap).TotalColumns;
+ double clockRate = ModUtils.CalculateRateWithMods(mods);
+
LegacySortHelper.Sort(sortedObjects, Comparer.Create((a, b) => (int)Math.Round(a.StartTime) - (int)Math.Round(b.StartTime)));
List objects = new List();
@@ -88,7 +91,7 @@ protected override IEnumerable CreateDifficultyHitObjects(I
// Sorting is done in CreateDifficultyHitObjects, since the full list of hitobjects is required.
protected override IEnumerable SortObjects(IEnumerable input) => input;
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate) => new Skill[]
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods) => new Skill[]
{
new Strain(mods, ((ManiaBeatmap)Beatmap).TotalColumns)
};
diff --git a/osu.Game.Rulesets.Mania/Edit/Blueprints/HoldNotePlacementBlueprint.cs b/osu.Game.Rulesets.Mania/Edit/Blueprints/HoldNotePlacementBlueprint.cs
index 094c59da4637..2674ab4d7502 100644
--- a/osu.Game.Rulesets.Mania/Edit/Blueprints/HoldNotePlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Mania/Edit/Blueprints/HoldNotePlacementBlueprint.cs
@@ -26,7 +26,7 @@ public partial class HoldNotePlacementBlueprint : ManiaPlacementBlueprint Precision.DefinitelyBigger(HitObject.Duration, 0);
+ protected override bool IsValidForPlacement => base.IsValidForPlacement && (PlacementActive == PlacementState.Waiting || Precision.DefinitelyBigger(HitObject.Duration, 0));
public HoldNotePlacementBlueprint()
: base(new HoldNote())
diff --git a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs
index bc20456722b4..7da501063dfe 100644
--- a/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs
+++ b/osu.Game.Rulesets.Mania/Edit/ManiaHitObjectComposer.cs
@@ -1,10 +1,12 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using osu.Framework.Allocation;
+using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Edit.Tools;
@@ -54,7 +56,8 @@ protected override ComposeBlueprintContainer CreateBlueprintContainer()
};
public override string ConvertSelectionToString()
- => string.Join(',', EditorBeatmap.SelectedHitObjects.Cast().OrderBy(h => h.StartTime).Select(h => $"{h.StartTime}|{h.Column}"));
+ => string.Join(',', EditorBeatmap.SelectedHitObjects.Cast().OrderBy(h => h.StartTime)
+ .Select(h => FormattableString.Invariant($"{Math.Round(h.StartTime)}|{h.Column}")));
// 123|0,456|1,789|2 ...
private static readonly Regex selection_regex = new Regex(@"^\d+\|\d+(,\d+\|\d+)*$", RegexOptions.Compiled);
@@ -73,10 +76,10 @@ public override void SelectFromTimestamp(double timestamp, string objectDescript
if (split.Length != 2)
continue;
- if (!double.TryParse(split[0], out double time) || !int.TryParse(split[1], out int column))
+ if (!int.TryParse(split[0], out int time) || !int.TryParse(split[1], out int column))
continue;
- ManiaHitObject? current = remainingHitObjects.FirstOrDefault(h => h.StartTime == time && h.Column == column);
+ ManiaHitObject? current = remainingHitObjects.FirstOrDefault(h => Precision.AlmostEquals(h.StartTime, time, 0.5) && h.Column == column);
if (current == null)
continue;
diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs
index cc64ee0d6986..3fad9d1047b6 100644
--- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs
+++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs
@@ -383,7 +383,7 @@ private PlayfieldType getPlayfieldType(int variant)
return (PlayfieldType)Enum.GetValues(typeof(PlayfieldType)).Cast().OrderDescending().First(v => variant >= v);
}
- protected override IEnumerable GetValidHitResults()
+ public override IEnumerable GetValidHitResults()
{
return new[]
{
@@ -392,9 +392,11 @@ protected override IEnumerable GetValidHitResults()
HitResult.Good,
HitResult.Ok,
HitResult.Meh,
+ HitResult.Miss,
- // HitResult.SmallBonus is used for awarding perfect bonus score but is not included here as
- // it would be a bit redundant to show this to the user.
+ HitResult.IgnoreHit,
+ HitResult.ComboBreak,
+ HitResult.IgnoreMiss,
};
}
diff --git a/osu.Game.Rulesets.Mania/ManiaSettingsSubsection.cs b/osu.Game.Rulesets.Mania/ManiaSettingsSubsection.cs
index 791f46d40739..b1884aab6fa1 100644
--- a/osu.Game.Rulesets.Mania/ManiaSettingsSubsection.cs
+++ b/osu.Game.Rulesets.Mania/ManiaSettingsSubsection.cs
@@ -7,7 +7,7 @@
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Localisation;
-using osu.Game.Graphics.UserInterface;
+using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Localisation;
using osu.Game.Overlays.Settings;
using osu.Game.Rulesets.Mania.Configuration;
@@ -31,47 +31,45 @@ private void load()
Children = new Drawable[]
{
- new SettingsEnumDropdown
+ new SettingsItemV2(new FormEnumDropdown
{
- LabelText = RulesetSettingsStrings.ScrollingDirection,
+ Caption = RulesetSettingsStrings.ScrollingDirection,
Current = config.GetBindable(ManiaRulesetSetting.ScrollDirection)
- },
- new SettingsSlider
+ }),
+ new SettingsItemV2(new FormSliderBar
{
- LabelText = RulesetSettingsStrings.ScrollSpeed,
+ Caption = RulesetSettingsStrings.ScrollSpeed,
Current = config.GetBindable(ManiaRulesetSetting.ScrollSpeed),
- KeyboardStep = 1
- },
- new SettingsCheckbox
+ KeyboardStep = 1,
+ LabelFormat = v => RulesetSettingsStrings.ScrollSpeedTooltip((int)DrawableManiaRuleset.ComputeScrollTime(v), v),
+ }),
+ new SettingsItemV2(new FormCheckBox
{
- Keywords = new[] { "color" },
- LabelText = RulesetSettingsStrings.TimingBasedColouring,
+ Caption = RulesetSettingsStrings.TimingBasedColouring,
Current = config.GetBindable(ManiaRulesetSetting.TimingBasedNoteColouring),
+ })
+ {
+ Keywords = new[] { "color" },
},
};
- Add(new SettingsCheckbox
+ Add(new SettingsItemV2(new FormCheckBox
{
- LabelText = RulesetSettingsStrings.TouchOverlay,
+ Caption = RulesetSettingsStrings.TouchOverlay,
Current = config.GetBindable(ManiaRulesetSetting.TouchOverlay)
- });
+ }));
if (RuntimeInfo.IsMobile)
{
- Add(new SettingsEnumDropdown
+ Add(new SettingsItemV2(new FormEnumDropdown
{
- LabelText = RulesetSettingsStrings.MobileLayout,
+ Caption = RulesetSettingsStrings.MobileLayout,
Current = config.GetBindable(ManiaRulesetSetting.MobileLayout),
#pragma warning disable CS0618 // Type or member is obsolete
Items = Enum.GetValues().Where(l => l != ManiaMobileLayout.LandscapeWithOverlay),
#pragma warning restore CS0618 // Type or member is obsolete
- });
+ }));
}
}
-
- private partial class ManiaScrollSlider : RoundedSliderBar
- {
- public override LocalisableString TooltipText => RulesetSettingsStrings.ScrollSpeedTooltip((int)DrawableManiaRuleset.ComputeScrollTime(Current.Value), Current.Value);
- }
}
}
diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModCover.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModCover.cs
index 3ebfcedfd107..f51a7774a582 100644
--- a/osu.Game.Rulesets.Mania/Mods/ManiaModCover.cs
+++ b/osu.Game.Rulesets.Mania/Mods/ManiaModCover.cs
@@ -30,7 +30,7 @@ public class ManiaModCover : ManiaModWithPlayfieldCover
typeof(ManiaModFadeIn)
}).ToArray();
- public override bool Ranked => false;
+ public override bool Ranked => true;
public override bool ValidForFreestyleAsRequiredMod => false;
diff --git a/osu.Game.Rulesets.Mania/Skinning/Argon/ManiaArgonSkinTransformer.cs b/osu.Game.Rulesets.Mania/Skinning/Argon/ManiaArgonSkinTransformer.cs
index a71b8aa98267..81cc52e9259b 100644
--- a/osu.Game.Rulesets.Mania/Skinning/Argon/ManiaArgonSkinTransformer.cs
+++ b/osu.Game.Rulesets.Mania/Skinning/Argon/ManiaArgonSkinTransformer.cs
@@ -57,6 +57,9 @@ public ManiaArgonSkinTransformer(ISkin skin, IBeatmap beatmap)
if (spectatorList != null)
spectatorList.Position = new Vector2(36, -66);
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
new DrawableGameplayLeaderboard(),
diff --git a/osu.Game.Rulesets.Mania/Skinning/Legacy/ManiaLegacySkinTransformer.cs b/osu.Game.Rulesets.Mania/Skinning/Legacy/ManiaLegacySkinTransformer.cs
index f0d8430f71e6..690705664d2f 100644
--- a/osu.Game.Rulesets.Mania/Skinning/Legacy/ManiaLegacySkinTransformer.cs
+++ b/osu.Game.Rulesets.Mania/Skinning/Legacy/ManiaLegacySkinTransformer.cs
@@ -64,11 +64,13 @@ private static readonly IReadOnlyDictionary default_hit_resul
private readonly Lazy hasKeyTexture;
private readonly ManiaBeatmap beatmap;
+ private readonly bool isBeatmapConverted;
public ManiaLegacySkinTransformer(ISkin skin, IBeatmap beatmap)
: base(skin)
{
this.beatmap = (ManiaBeatmap)beatmap;
+ isBeatmapConverted = !beatmap.BeatmapInfo.Ruleset.Equals(new ManiaRuleset().RulesetInfo);
isLegacySkin = new Lazy(() => GetConfig(SkinConfiguration.LegacySetting.Version) != null);
hasKeyTexture = new Lazy(() =>
@@ -120,6 +122,9 @@ public override Drawable GetDrawableComponent(ISkinComponentLookup lookup)
leaderboard.Origin = Anchor.CentreLeft;
leaderboard.X = 10;
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
new LegacyManiaComboCounter(),
@@ -196,8 +201,8 @@ private Drawable getResult(HitResult result)
public override ISample GetSample(ISampleInfo sampleInfo)
{
- // layered hit sounds never play in mania
- if (sampleInfo is ConvertHitObjectParser.LegacyHitSampleInfo legacySample && legacySample.IsLayered)
+ // layered hit sounds never play in mania-native beatmaps (but do play on converts)
+ if (sampleInfo is ConvertHitObjectParser.LegacyHitSampleInfo legacySample && legacySample.IsLayered && !isBeatmapConverted)
return new SampleVirtual();
return base.GetSample(sampleInfo);
diff --git a/osu.Game.Rulesets.Mania/UI/Stage.cs b/osu.Game.Rulesets.Mania/UI/Stage.cs
index faa9fc318c0d..d5a92a986bab 100644
--- a/osu.Game.Rulesets.Mania/UI/Stage.cs
+++ b/osu.Game.Rulesets.Mania/UI/Stage.cs
@@ -154,7 +154,7 @@ public Stage(int firstColumnIndex, StageDefinition definition, ref ManiaAction c
var hitWindows = new ManiaHitWindows();
- AddInternal(judgementPooler = new JudgementPooler(Enum.GetValues().Where(r => hitWindows.IsHitResultAllowed(r))));
+ AddInternal(judgementPooler = new JudgementPooler(Enum.GetValues().Where(hitWindows.IsHitResultAllowed)));
RegisterPool(50, 200);
}
diff --git a/osu.Game.Rulesets.Osu.Tests.iOS/Info.plist b/osu.Game.Rulesets.Osu.Tests.iOS/Info.plist
index 7f489874e745..6f0ea841076d 100644
--- a/osu.Game.Rulesets.Osu.Tests.iOS/Info.plist
+++ b/osu.Game.Rulesets.Osu.Tests.iOS/Info.plist
@@ -35,11 +35,9 @@
UIInterfaceOrientationLandscapeRight
UIInterfaceOrientationLandscapeLeft
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
UIApplicationSupportsIndirectInputEvents
CADisableMinimumFrameDurationOnPhone
-
\ No newline at end of file
+
diff --git a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneOsuEditorGrids.cs b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneOsuEditorGrids.cs
index c6893a5bdfb4..b9258f0053ca 100644
--- a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneOsuEditorGrids.cs
+++ b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneOsuEditorGrids.cs
@@ -245,13 +245,13 @@ public void TestGridPlacementTool()
AddAssert("grid spacing is distance to slider tail", () =>
{
var composer = Editor.ChildrenOfType().Single();
- return Precision.AlmostEquals(composer.Spacing.Value.X, 32.05, 0.01)
+ return Precision.AlmostEquals(composer.Spacing.Value.X, 32.05, 0.1)
&& Precision.AlmostEquals(composer.Spacing.Value.X, composer.Spacing.Value.Y);
});
AddAssert("grid rotation points to slider tail", () =>
{
var composer = Editor.ChildrenOfType().Single();
- return Precision.AlmostEquals(composer.GridLineRotation.Value, 0.09, 0.01);
+ return Precision.AlmostEquals(composer.GridLineRotation.Value, 0.09, 0.1);
});
AddStep("start grid placement", () => InputManager.Key(Key.Number5));
@@ -280,9 +280,9 @@ public void TestGridPlacementTool()
AddAssert("grid spacing and rotation unchanged", () =>
{
var composer = Editor.ChildrenOfType().Single();
- return Precision.AlmostEquals(composer.Spacing.Value.X, 32.05, 0.01)
+ return Precision.AlmostEquals(composer.Spacing.Value.X, 32.05, 0.1)
&& Precision.AlmostEquals(composer.Spacing.Value.X, composer.Spacing.Value.Y)
- && Precision.AlmostEquals(composer.GridLineRotation.Value, 0.09, 0.01);
+ && Precision.AlmostEquals(composer.GridLineRotation.Value, 0.09, 0.1);
});
}
diff --git a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderDrawing.cs b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderDrawing.cs
index 0e36c1dc4582..74474c0b6ecd 100644
--- a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderDrawing.cs
+++ b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderDrawing.cs
@@ -8,6 +8,7 @@
using osu.Framework.Input;
using osu.Framework.Testing;
using osu.Game.Beatmaps;
+using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders;
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Rulesets.UI;
@@ -22,7 +23,12 @@ namespace osu.Game.Rulesets.Osu.Tests.Editor
[TestFixture]
public partial class TestSceneSliderDrawing : TestSceneOsuEditor
{
- protected override IBeatmap CreateBeatmap(RulesetInfo ruleset) => new TestBeatmap(ruleset, false);
+ protected override IBeatmap CreateBeatmap(RulesetInfo ruleset)
+ {
+ var beatmap = new TestBeatmap(ruleset, false);
+ beatmap.ControlPointInfo.Add(0, new TimingControlPoint());
+ return beatmap;
+ }
[Test]
public void TestTouchInputPlaceHitCircleDirectly()
diff --git a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderReversal.cs b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderReversal.cs
index a44c16a2e03d..058776c527b7 100644
--- a/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderReversal.cs
+++ b/osu.Game.Rulesets.Osu.Tests/Editor/TestSceneSliderReversal.cs
@@ -3,10 +3,13 @@
using System.Linq;
using NUnit.Framework;
+using osu.Framework.Testing;
using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Types;
+using osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders;
+using osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components;
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Rulesets.Osu.UI;
using osu.Game.Tests.Beatmaps;
@@ -30,6 +33,16 @@ public partial class TestSceneSliderReversal : TestSceneOsuEditor
PathType.LINEAR,
new Vector2(100, 0),
new Vector2(100, 100)
+ ),
+ createPathSegment(
+ PathType.PERFECT_CURVE,
+ new Vector2(100.009f, -50.0009f),
+ new Vector2(200.0089f, -100)
+ ),
+ createPathSegment(
+ PathType.PERFECT_CURVE,
+ new Vector2(25, -50),
+ new Vector2(100, 75)
)
};
@@ -48,9 +61,13 @@ private static PathControlPoint[] createPathSegment(PathType type, params Vector
[TestCase(0, 250)]
[TestCase(0, 200)]
- [TestCase(1, 120)]
- [TestCase(1, 80)]
- public void TestSliderReversal(int pathIndex, double length)
+ [TestCase(1, 120, false, false)]
+ [TestCase(1, 80, false, false)]
+ [TestCase(2, 250)]
+ [TestCase(2, 190)]
+ [TestCase(3, 250)]
+ [TestCase(3, 190)]
+ public void TestSliderReversal(int pathIndex, double length, bool assertEqualDistances = true, bool assertSliderReduction = true)
{
var controlPoints = paths[pathIndex];
@@ -90,6 +107,215 @@ public void TestSliderReversal(int pathIndex, double length)
InputManager.ReleaseKey(Key.LControl);
});
+ if (pathIndex == 2)
+ {
+ AddRepeatStep("Reverse slider again", () =>
+ {
+ InputManager.PressKey(Key.LControl);
+ InputManager.Key(Key.G);
+ InputManager.ReleaseKey(Key.LControl);
+ }, 2);
+ }
+
+ if (assertEqualDistances)
+ {
+ AddAssert("Middle control point has the same distance from start to end", () =>
+ {
+ var pathControlPoints = selectedSlider.Path.ControlPoints;
+ float middleToStart = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[0].Position);
+ float middleToEnd = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[^1].Position);
+
+ return Precision.AlmostEquals(middleToStart, middleToEnd, 1f);
+ });
+ }
+
+ AddAssert("Middle control point is not at start or end", () =>
+ Vector2.Distance(selectedSlider.Path.ControlPoints[^2].Position, oldStartPos) > 1 &&
+ Vector2.Distance(selectedSlider.Path.ControlPoints[^2].Position, oldEndPos) > 1
+ );
+
+ AddAssert("Slider has correct length", () =>
+ Precision.AlmostEquals(selectedSlider.Path.Distance, oldDistance));
+
+ AddAssert("Slider has correct start position", () =>
+ Vector2.Distance(selectedSlider.Position, oldEndPos) < 1);
+
+ AddAssert("Slider has correct end position", () =>
+ Vector2.Distance(selectedSlider.EndPosition, oldStartPos) < 1);
+
+ AddAssert("Control points have correct types", () =>
+ {
+ var newControlPointTypes = selectedSlider.Path.ControlPoints.Select(p => p.Type).ToArray();
+
+ return oldControlPointTypes.Take(newControlPointTypes.Length).SequenceEqual(newControlPointTypes);
+ });
+
+ if (assertSliderReduction)
+ {
+ AddStep("Move to marker", () =>
+ {
+ var marker = this.ChildrenOfType().Single();
+ var markerPos = (marker.ScreenSpaceDrawQuad.TopRight + marker.ScreenSpaceDrawQuad.BottomRight) / 2;
+ // sometimes the cursor may miss the marker's hitbox so we
+ // add a little offset here to be sure it lands in a clickable position.
+ var position = new Vector2(markerPos.X + 2f, markerPos.Y);
+ InputManager.MoveMouseTo(position);
+ });
+ AddStep("Click", () => InputManager.PressButton(MouseButton.Left));
+ AddStep("Reduce slider", () =>
+ {
+ var middleControlPoint = this.ChildrenOfType>().ToArray()[^2];
+ InputManager.MoveMouseTo(middleControlPoint);
+ });
+ AddStep("Release click", () => InputManager.ReleaseButton(MouseButton.Left));
+
+ AddStep("Save half slider info", () =>
+ {
+ oldStartPos = selectedSlider.Position;
+ oldEndPos = selectedSlider.EndPosition;
+ oldDistance = selectedSlider.Path.Distance;
+ });
+
+ AddStep("Reverse slider", () =>
+ {
+ InputManager.PressKey(Key.LControl);
+ InputManager.Key(Key.G);
+ InputManager.ReleaseKey(Key.LControl);
+ });
+
+ AddAssert("Middle control point has the same distance from start to end", () =>
+ {
+ var pathControlPoints = selectedSlider.Path.ControlPoints;
+ float middleToStart = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[0].Position);
+ float middleToEnd = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[^1].Position);
+
+ return Precision.AlmostEquals(middleToStart, middleToEnd, 1f);
+ });
+
+ AddAssert("Middle control point is not at start or end", () =>
+ Vector2.Distance(selectedSlider.Path.ControlPoints[^2].Position, oldStartPos) > 1 &&
+ Vector2.Distance(selectedSlider.Path.ControlPoints[^2].Position, oldEndPos) > 1
+ );
+
+ AddAssert("Slider has correct length", () =>
+ Precision.AlmostEquals(selectedSlider.Path.Distance, oldDistance));
+
+ AddAssert("Slider has correct start position", () =>
+ Vector2.Distance(selectedSlider.Position, oldEndPos) < 1);
+
+ AddAssert("Slider has correct end position", () =>
+ Vector2.Distance(selectedSlider.EndPosition, oldStartPos) < 1);
+
+ AddAssert("Control points have correct types", () =>
+ {
+ var newControlPointTypes = selectedSlider.Path.ControlPoints.Select(p => p.Type).ToArray();
+
+ return oldControlPointTypes.Take(newControlPointTypes.Length).SequenceEqual(newControlPointTypes);
+ });
+ }
+ }
+
+ [Test]
+ public void TestSegmentedSliderReversal()
+ {
+ PathControlPoint[] segmentedSliderPath =
+ [
+ new PathControlPoint
+ {
+ Position = new Vector2(0, 0),
+ Type = PathType.PERFECT_CURVE
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(100, 150),
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(75, -50),
+ Type = PathType.PERFECT_CURVE
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(225, -75),
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(350, 50),
+ Type = PathType.PERFECT_CURVE
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(500, -75),
+ },
+ new PathControlPoint
+ {
+ Position = new Vector2(350, -120),
+ },
+ ];
+
+ Vector2 oldStartPos = default;
+ Vector2 oldEndPos = default;
+ double oldDistance = default;
+
+ var oldControlPointTypes = segmentedSliderPath.Select(p => p.Type);
+
+ AddStep("Add slider", () =>
+ {
+ var slider = new Slider
+ {
+ Position = new Vector2(0, 200),
+ Path = new SliderPath(segmentedSliderPath)
+ {
+ ExpectedDistance = { Value = 1314 }
+ }
+ };
+
+ EditorBeatmap.Add(slider);
+
+ oldStartPos = slider.Position;
+ oldEndPos = slider.EndPosition;
+ oldDistance = slider.Path.Distance;
+ });
+
+ AddStep("Select slider", () =>
+ {
+ var slider = (Slider)EditorBeatmap.HitObjects[0];
+ EditorBeatmap.SelectedHitObjects.Add(slider);
+ });
+
+ AddRepeatStep("Reverse slider", () =>
+ {
+ InputManager.PressKey(Key.LControl);
+ InputManager.Key(Key.G);
+ InputManager.ReleaseKey(Key.LControl);
+ }, 3);
+
+ AddAssert("First arc's control is not at the slider's middle", () =>
+ Vector2.Distance(selectedSlider.Path.ControlPoints[^2].Position, selectedSlider.Path.PositionAt(0.5)) > 1
+ );
+
+ AddAssert("Last arc's control is not at the slider's middle", () =>
+ Vector2.Distance(selectedSlider.Path.ControlPoints[1].Position, selectedSlider.Path.PositionAt(0.5)) > 1
+ );
+
+ AddAssert("First arc centered middle control point", () =>
+ {
+ var pathControlPoints = selectedSlider.Path.ControlPoints;
+ float middleToStart = Vector2.Distance(pathControlPoints[1].Position, pathControlPoints[0].Position);
+ float middleToEnd = Vector2.Distance(pathControlPoints[1].Position, pathControlPoints[2].Position);
+
+ return Precision.AlmostEquals(middleToStart, middleToEnd, 1f);
+ });
+
+ AddAssert("Last arc centered middle control point", () =>
+ {
+ var pathControlPoints = selectedSlider.Path.ControlPoints;
+ float middleToStart = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[^3].Position);
+ float middleToEnd = Vector2.Distance(pathControlPoints[^2].Position, pathControlPoints[^1].Position);
+
+ return Precision.AlmostEquals(middleToStart, middleToEnd, 1f);
+ });
+
AddAssert("Slider has correct length", () =>
Precision.AlmostEquals(selectedSlider.Path.Distance, oldDistance));
diff --git a/osu.Game.Rulesets.Osu.Tests/Editor/TestSliderScaling.cs b/osu.Game.Rulesets.Osu.Tests/Editor/TestSliderScaling.cs
index 52a170b84e99..4a1935061946 100644
--- a/osu.Game.Rulesets.Osu.Tests/Editor/TestSliderScaling.cs
+++ b/osu.Game.Rulesets.Osu.Tests/Editor/TestSliderScaling.cs
@@ -6,6 +6,7 @@
using System;
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.Graphics.Primitives;
using osu.Framework.Testing;
using osu.Framework.Utils;
@@ -102,7 +103,7 @@ public void TestScalingSliderFlat()
for (int i = 0; i < 100; i++)
{
- Assert.True(Precision.AlmostEquals(sliderPathPerfect.PositionAt(i / 100.0f), sliderPathBezier.PositionAt(i / 100.0f)));
+ ClassicAssert.True(Precision.AlmostEquals(sliderPathPerfect.PositionAt(i / 100.0f), sliderPathBezier.PositionAt(i / 100.0f)));
}
}
@@ -174,7 +175,7 @@ private void assertMatchesPerfectCircle(SliderPath path)
double theta = circularArcProperties.ThetaStart + (circularArcProperties.Direction * progress * circularArcProperties.ThetaRange);
Vector2 vector = new Vector2((float)Math.Cos(theta), (float)Math.Sin(theta)) * circularArcProperties.Radius;
- Assert.True(Precision.AlmostEquals(circularArcProperties.Centre + vector, path.PositionAt(progress), 0.01f),
+ ClassicAssert.True(Precision.AlmostEquals(circularArcProperties.Centre + vector, path.PositionAt(progress), 0.01f),
"A perfect circle with points " + string.Join(", ", path.ControlPoints.Select(x => x.Position)) + " and radius" + circularArcProperties.Radius + "from SliderPath does not almost equal a theoretical perfect circle with " + subpoints + " subpoints"
+ ": " + (circularArcProperties.Centre + vector) + " - " + path.PositionAt(progress)
+ " = " + (circularArcProperties.Centre + vector - path.PositionAt(progress))
diff --git a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModEasy.cs b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModEasy.cs
new file mode 100644
index 000000000000..1b5d9da02bae
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModEasy.cs
@@ -0,0 +1,88 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System.Linq;
+using NUnit.Framework;
+using osu.Game.Beatmaps;
+using osu.Game.Rulesets.Mods;
+using osu.Game.Rulesets.Osu.Mods;
+using osu.Game.Tests.Beatmaps;
+using osu.Game.Tests.Visual;
+
+namespace osu.Game.Rulesets.Osu.Tests.Mods
+{
+ public partial class TestSceneOsuModEasy : OsuModTestScene
+ {
+ protected override bool AllowFail => true;
+
+ [Test]
+ public void TestMultipleApplication()
+ {
+ bool reapplied = false;
+ CreateModTest(new ModTestData
+ {
+ Mods = [new OsuModEasy { Retries = { Value = 1 } }],
+ Autoplay = false,
+ CreateBeatmap = () =>
+ {
+ // do stuff to speed up fails
+ var b = new TestBeatmap(new OsuRuleset().RulesetInfo)
+ {
+ Difficulty = { DrainRate = 10 }
+ };
+
+ foreach (var ho in b.HitObjects)
+ ho.StartTime /= 4;
+
+ return b;
+ },
+ PassCondition = () =>
+ {
+ if (((ModEasyTestPlayer)Player).FailuresSuppressed > 0 && !reapplied)
+ {
+ try
+ {
+ foreach (var mod in Player.GameplayState.Mods.OfType())
+ mod.ApplyToDifficulty(new BeatmapDifficulty());
+
+ foreach (var mod in Player.GameplayState.Mods.OfType())
+ mod.ApplyToPlayer(Player);
+ }
+ catch
+ {
+ // don't care if this fails. in fact a failure here is probably better than the alternative.
+ }
+ finally
+ {
+ reapplied = true;
+ }
+ }
+
+ return Player.GameplayState.HasFailed && ((ModEasyTestPlayer)Player).FailuresSuppressed <= 1;
+ }
+ });
+ }
+
+ protected override TestPlayer CreateModPlayer(Ruleset ruleset) => new ModEasyTestPlayer(CurrentTestData, AllowFail);
+
+ private partial class ModEasyTestPlayer : ModTestPlayer
+ {
+ public int FailuresSuppressed { get; private set; }
+
+ public ModEasyTestPlayer(ModTestData data, bool allowFail)
+ : base(data, allowFail)
+ {
+ }
+
+ protected override bool CheckModsAllowFailure()
+ {
+ bool failureAllowed = GameplayState.Mods.OfType().All(m => m.PerformFail());
+
+ if (!failureAllowed)
+ FailuresSuppressed++;
+
+ return failureAllowed;
+ }
+ }
+ }
+}
diff --git a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModFreezeFrame.cs b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModFreezeFrame.cs
index 57d2b9418809..31498295da80 100644
--- a/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModFreezeFrame.cs
+++ b/osu.Game.Rulesets.Osu.Tests/Mods/TestSceneOsuModFreezeFrame.cs
@@ -2,7 +2,10 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
+using osu.Game.Rulesets.Osu.Beatmaps;
using osu.Game.Rulesets.Osu.Mods;
+using osu.Game.Rulesets.Osu.Objects;
+using osu.Game.Rulesets.Osu.UI;
namespace osu.Game.Rulesets.Osu.Tests.Mods
{
@@ -18,5 +21,39 @@ public void TestFreezeFrame()
Autoplay = false,
});
}
+
+ [Test]
+ public void TestSkipToFirstCircleNotSuppressed()
+ {
+ CreateModTest(new ModTestData
+ {
+ Mod = new OsuModFreezeFrame(),
+ CreateBeatmap = () => new OsuBeatmap
+ {
+ HitObjects =
+ {
+ new HitCircle { StartTime = 5000, Position = OsuPlayfield.BASE_SIZE / 2 }
+ }
+ },
+ PassCondition = () => Player.GameplayClockContainer.GameplayStartTime > 0
+ });
+ }
+
+ [Test]
+ public void TestSkipToFirstSpinnerNotSuppressed()
+ {
+ CreateModTest(new ModTestData
+ {
+ Mod = new OsuModFreezeFrame(),
+ CreateBeatmap = () => new OsuBeatmap
+ {
+ HitObjects =
+ {
+ new Spinner { StartTime = 5000, Position = OsuPlayfield.BASE_SIZE / 2 }
+ }
+ },
+ PassCondition = () => Player.GameplayClockContainer.GameplayStartTime > 0
+ });
+ }
}
}
diff --git a/osu.Game.Rulesets.Osu.Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu.Tests/OsuBeatmapConversionTest.cs
index 838bd35dd446..b91dcaf7576f 100644
--- a/osu.Game.Rulesets.Osu.Tests/OsuBeatmapConversionTest.cs
+++ b/osu.Game.Rulesets.Osu.Tests/OsuBeatmapConversionTest.cs
@@ -27,6 +27,9 @@ public class OsuBeatmapConversionTest : BeatmapConversionTest
[TestCase("multi-segment-slider")]
[TestCase("nan-slider")]
[TestCase("1124896")]
+ [TestCase("1341554")]
+ [TestCase("2593923")]
+ [TestCase("801165")]
public void Test(string name) => base.Test(name);
protected override IEnumerable CreateConvertValue(HitObject hitObject)
diff --git a/osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs b/osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs
index e7a6d8ecffc2..94768c15a515 100644
--- a/osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs
+++ b/osu.Game.Rulesets.Osu.Tests/OsuDifficultyCalculatorTest.cs
@@ -34,6 +34,30 @@ public void TestClockRateAdjusted(double expectedStarRating, int expectedMaxComb
public void TestClassicMod(double expectedStarRating, int expectedMaxCombo, string name)
=> Test(expectedStarRating, expectedMaxCombo, name, new OsuModClassic());
+ [TestCase(239, "diffcalc-test")]
+ [TestCase(54, "zero-length-sliders")]
+ [TestCase(4, "very-fast-slider")]
+ public void TestOffsetChanges(int expectedMaxCombo, string name)
+ {
+ const double offset_iterations = 400;
+ var beatmap = GetBeatmap(name);
+
+ var attributes = CreateDifficultyCalculator(beatmap).Calculate();
+ double expectedStarRating = attributes.StarRating;
+
+ for (int i = 0; i < offset_iterations; i++)
+ {
+ foreach (var beatmapHitObject in beatmap.Beatmap.HitObjects)
+ beatmapHitObject.StartTime++;
+
+ attributes = CreateDifficultyCalculator(beatmap).Calculate();
+
+ // Platform-dependent math functions (Pow, Cbrt, Exp, etc) may result in minute differences.
+ Assert.That(attributes.StarRating, Is.EqualTo(expectedStarRating).Within(0.00001));
+ Assert.That(attributes.MaxCombo, Is.EqualTo(expectedMaxCombo));
+ }
+ }
+
protected override DifficultyCalculator CreateDifficultyCalculator(IWorkingBeatmap beatmap) => new OsuDifficultyCalculator(new OsuRuleset().RulesetInfo, beatmap);
protected override Ruleset CreateRuleset() => new OsuRuleset();
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554-expected-conversion.json b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554-expected-conversion.json
new file mode 100644
index 000000000000..687676ff091c
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554-expected-conversion.json
@@ -0,0 +1 @@
+{"Mappings":[{"StartTime":763.0,"Objects":[{"StartTime":763.0,"EndTime":763.0,"X":309.0,"Y":230.0}]},{"StartTime":985.0,"Objects":[{"StartTime":985.0,"EndTime":985.0,"X":485.0,"Y":146.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1060.0,"EndTime":1060.0,"X":419.765442,"Y":163.340836,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":1207.0,"Objects":[{"StartTime":1207.0,"EndTime":1207.0,"X":374.0,"Y":249.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1282.0,"EndTime":1282.0,"X":309.2291,"Y":230.000534,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":1429.0,"Objects":[{"StartTime":1429.0,"EndTime":1429.0,"X":196.0,"Y":91.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1484.0,"EndTime":1484.0,"X":192.451233,"Y":57.64155,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1540.0,"EndTime":1540.0,"X":195.978485,"Y":90.79783,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1559.0,"EndTime":1559.0,"X":192.429718,"Y":57.439373,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":1651.0,"Objects":[{"StartTime":1651.0,"EndTime":1651.0,"X":124.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1725.0,"EndTime":1725.0,"X":130.363968,"Y":217.547729,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1763.0,"EndTime":1763.0,"X":124.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":1874.0,"Objects":[{"StartTime":1874.0,"EndTime":1874.0,"X":221.0,"Y":284.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1949.0,"EndTime":1949.0,"X":213.933777,"Y":216.87088,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":2096.0,"Objects":[{"StartTime":2096.0,"EndTime":2096.0,"X":292.0,"Y":86.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":2393.0,"EndTime":2393.0,"X":309.657043,"Y":231.180191,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":2540.0,"Objects":[{"StartTime":2540.0,"EndTime":2540.0,"X":314.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":2726.0,"EndTime":2726.0,"X":309.559021,"Y":230.758438,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":2874.0,"Objects":[{"StartTime":2874.0,"EndTime":2874.0,"X":421.0,"Y":300.0}]},{"StartTime":2985.0,"Objects":[{"StartTime":2985.0,"EndTime":2985.0,"X":421.0,"Y":300.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3060.0,"EndTime":3060.0,"X":484.22522,"Y":265.267273,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":3207.0,"Objects":[{"StartTime":3207.0,"EndTime":3207.0,"X":309.0,"Y":231.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3282.0,"EndTime":3282.0,"X":302.5318,"Y":158.8925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":3429.0,"Objects":[{"StartTime":3429.0,"EndTime":3429.0,"X":394.0,"Y":22.0}]},{"StartTime":3540.0,"Objects":[{"StartTime":3540.0,"EndTime":3540.0,"X":461.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3615.0,"EndTime":3615.0,"X":463.561279,"Y":140.796448,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":3762.0,"Objects":[{"StartTime":3762.0,"EndTime":3762.0,"X":378.0,"Y":183.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3948.0,"EndTime":3948.0,"X":229.684937,"Y":160.580276,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":4096.0,"Objects":[{"StartTime":4096.0,"EndTime":4096.0,"X":229.0,"Y":161.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4171.0,"EndTime":4171.0,"X":217.931763,"Y":234.559952,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":4318.0,"Objects":[{"StartTime":4318.0,"EndTime":4318.0,"X":61.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4393.0,"EndTime":4393.0,"X":120.672028,"Y":339.566,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":4540.0,"Objects":[{"StartTime":4540.0,"EndTime":4540.0,"X":317.0,"Y":310.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4615.0,"EndTime":4615.0,"X":243.821945,"Y":296.973145,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":4762.0,"Objects":[{"StartTime":4762.0,"EndTime":4762.0,"X":141.0,"Y":110.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4948.0,"EndTime":4948.0,"X":155.885971,"Y":196.653961,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5096.0,"Objects":[{"StartTime":5096.0,"EndTime":5096.0,"X":155.0,"Y":196.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":5282.0,"EndTime":5282.0,"X":76.3823242,"Y":283.3981,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5429.0,"Objects":[{"StartTime":5429.0,"EndTime":5429.0,"X":212.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":5504.0,"EndTime":5504.0,"X":197.554764,"Y":312.149841,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5651.0,"Objects":[{"StartTime":5651.0,"EndTime":5651.0,"X":206.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":5726.0,"EndTime":5726.0,"X":259.9921,"Y":299.971252,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5874.0,"Objects":[{"StartTime":5874.0,"EndTime":5874.0,"X":281.0,"Y":321.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":5949.0,"EndTime":5949.0,"X":241.450119,"Y":360.213837,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":6096.0,"Objects":[{"StartTime":6096.0,"EndTime":6096.0,"X":124.0,"Y":246.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":6282.0,"EndTime":6282.0,"X":253.519653,"Y":211.447388,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":6429.0,"Objects":[{"StartTime":6429.0,"EndTime":6429.0,"X":253.0,"Y":211.0}]},{"StartTime":6540.0,"Objects":[{"StartTime":6540.0,"EndTime":6540.0,"X":276.0,"Y":99.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":6726.0,"EndTime":6726.0,"X":368.0168,"Y":208.521942,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":6874.0,"Objects":[{"StartTime":6874.0,"EndTime":6874.0,"X":368.0,"Y":208.0}]},{"StartTime":6985.0,"Objects":[{"StartTime":6985.0,"EndTime":6985.0,"X":430.0,"Y":96.0}]},{"StartTime":7096.0,"Objects":[{"StartTime":7096.0,"EndTime":7096.0,"X":497.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7171.0,"EndTime":7171.0,"X":501.344818,"Y":219.752075,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7318.0,"Objects":[{"StartTime":7318.0,"EndTime":7318.0,"X":414.0,"Y":379.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7504.0,"EndTime":7504.0,"X":421.0,"Y":298.0719,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7651.0,"Objects":[{"StartTime":7651.0,"EndTime":7651.0,"X":421.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7726.0,"EndTime":7726.0,"X":349.034271,"Y":308.736725,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7874.0,"Objects":[{"StartTime":7874.0,"EndTime":7874.0,"X":270.0,"Y":170.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7949.0,"EndTime":7949.0,"X":269.442352,"Y":242.5049,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8096.0,"Objects":[{"StartTime":8096.0,"EndTime":8096.0,"X":94.0,"Y":300.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8171.0,"EndTime":8171.0,"X":152.3368,"Y":258.00412,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8318.0,"Objects":[{"StartTime":8318.0,"EndTime":8318.0,"X":261.0,"Y":374.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8393.0,"EndTime":8393.0,"X":186.416916,"Y":366.102966,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8540.0,"Objects":[{"StartTime":8540.0,"EndTime":8540.0,"X":38.0,"Y":377.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8837.0,"EndTime":8837.0,"X":53.8668938,"Y":208.9976,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8985.0,"Objects":[{"StartTime":8985.0,"EndTime":8985.0,"X":123.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9060.0,"EndTime":9060.0,"X":130.897034,"Y":99.5830841,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9207.0,"Objects":[{"StartTime":9207.0,"EndTime":9207.0,"X":217.0,"Y":242.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9282.0,"EndTime":9282.0,"X":236.568176,"Y":169.597748,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9429.0,"Objects":[{"StartTime":9429.0,"EndTime":9429.0,"X":48.0,"Y":92.0}]},{"StartTime":9540.0,"Objects":[{"StartTime":9540.0,"EndTime":9540.0,"X":63.0,"Y":176.0}]},{"StartTime":9651.0,"Objects":[{"StartTime":9651.0,"EndTime":9651.0,"X":83.0,"Y":259.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9837.0,"EndTime":9837.0,"X":217.469971,"Y":242.57399,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9985.0,"Objects":[{"StartTime":9985.0,"EndTime":9985.0,"X":274.0,"Y":312.0}]},{"StartTime":10096.0,"Objects":[{"StartTime":10096.0,"EndTime":10096.0,"X":274.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":10171.0,"EndTime":10171.0,"X":346.760681,"Y":293.8098,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":10318.0,"Objects":[{"StartTime":10318.0,"EndTime":10318.0,"X":459.0,"Y":225.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":10393.0,"EndTime":10393.0,"X":386.239319,"Y":206.80983,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":10540.0,"Objects":[{"StartTime":10540.0,"EndTime":10540.0,"X":269.0,"Y":107.0}]},{"StartTime":10651.0,"Objects":[{"StartTime":10651.0,"EndTime":10651.0,"X":276.0,"Y":54.0}]},{"StartTime":10762.0,"Objects":[{"StartTime":10762.0,"EndTime":10762.0,"X":313.0,"Y":17.0}]},{"StartTime":10874.0,"Objects":[{"StartTime":10874.0,"EndTime":10874.0,"X":363.0,"Y":9.0}]},{"StartTime":11096.0,"Objects":[{"StartTime":11096.0,"EndTime":11096.0,"X":363.0,"Y":9.0}]},{"StartTime":11207.0,"Objects":[{"StartTime":11207.0,"EndTime":11207.0,"X":432.0,"Y":68.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11282.0,"EndTime":11282.0,"X":435.697968,"Y":139.207626,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11429.0,"Objects":[{"StartTime":11429.0,"EndTime":11429.0,"X":309.0,"Y":252.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11504.0,"EndTime":11504.0,"X":302.164825,"Y":181.178833,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11651.0,"Objects":[{"StartTime":11651.0,"EndTime":11651.0,"X":450.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11726.0,"EndTime":11726.0,"X":375.075623,"Y":312.6326,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11874.0,"Objects":[{"StartTime":11874.0,"EndTime":11874.0,"X":160.0,"Y":341.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12060.0,"EndTime":12060.0,"X":186.339523,"Y":248.443192,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12207.0,"Objects":[{"StartTime":12207.0,"EndTime":12207.0,"X":116.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12504.0,"EndTime":12504.0,"X":104.929565,"Y":274.1413,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12762.0,"Objects":[{"StartTime":12762.0,"EndTime":12762.0,"X":297.0,"Y":91.0}]},{"StartTime":12874.0,"Objects":[{"StartTime":12874.0,"EndTime":12874.0,"X":276.0,"Y":44.0}]},{"StartTime":12985.0,"Objects":[{"StartTime":12985.0,"EndTime":12985.0,"X":226.0,"Y":27.0}]},{"StartTime":13096.0,"Objects":[{"StartTime":13096.0,"EndTime":13096.0,"X":187.0,"Y":63.0}]},{"StartTime":13207.0,"Objects":[{"StartTime":13207.0,"EndTime":13207.0,"X":196.0,"Y":115.0}]},{"StartTime":13429.0,"Objects":[{"StartTime":13429.0,"EndTime":13429.0,"X":376.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13503.0,"EndTime":13503.0,"X":377.443817,"Y":127.395988,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13541.0,"EndTime":13541.0,"X":376.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13651.0,"Objects":[{"StartTime":13651.0,"EndTime":13651.0,"X":436.0,"Y":220.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13837.0,"EndTime":13837.0,"X":288.903961,"Y":191.322586,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13985.0,"Objects":[{"StartTime":13985.0,"EndTime":13985.0,"X":276.0,"Y":44.0}]},{"StartTime":14096.0,"Objects":[{"StartTime":14096.0,"EndTime":14096.0,"X":196.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14151.0,"EndTime":14151.0,"X":159.292587,"Y":120.795906,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14207.0,"EndTime":14207.0,"X":196.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14262.0,"EndTime":14262.0,"X":159.292587,"Y":120.795906,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14282.0,"EndTime":14282.0,"X":196.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":14429.0,"Objects":[{"StartTime":14429.0,"EndTime":14429.0,"X":82.0,"Y":69.0}]},{"StartTime":14540.0,"Objects":[{"StartTime":14540.0,"EndTime":14540.0,"X":106.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14615.0,"EndTime":14615.0,"X":122.98851,"Y":263.0506,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":14762.0,"Objects":[{"StartTime":14762.0,"EndTime":14762.0,"X":218.0,"Y":383.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14837.0,"EndTime":14837.0,"X":233.84996,"Y":309.693939,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":14985.0,"Objects":[{"StartTime":14985.0,"EndTime":14985.0,"X":26.0,"Y":231.0}]},{"StartTime":15207.0,"Objects":[{"StartTime":15207.0,"EndTime":15207.0,"X":253.0,"Y":202.0}]},{"StartTime":15318.0,"Objects":[{"StartTime":15318.0,"EndTime":15318.0,"X":331.0,"Y":271.0}]},{"StartTime":15429.0,"Objects":[{"StartTime":15429.0,"EndTime":15429.0,"X":233.0,"Y":309.0}]},{"StartTime":15651.0,"Objects":[{"StartTime":15651.0,"EndTime":15651.0,"X":389.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":15948.0,"EndTime":15948.0,"X":455.8205,"Y":109.365822,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":16096.0,"Objects":[{"StartTime":16096.0,"EndTime":16096.0,"X":391.0,"Y":165.0}]},{"StartTime":16207.0,"Objects":[{"StartTime":16207.0,"EndTime":16207.0,"X":377.0,"Y":177.0}]},{"StartTime":16318.0,"Objects":[{"StartTime":16318.0,"EndTime":16318.0,"X":365.0,"Y":187.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":16615.0,"EndTime":16615.0,"X":108.454308,"Y":184.412933,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":16762.0,"Objects":[{"StartTime":16762.0,"EndTime":16762.0,"X":73.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17059.0,"EndTime":17059.0,"X":151.4236,"Y":251.735245,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17207.0,"Objects":[{"StartTime":17207.0,"EndTime":17207.0,"X":139.0,"Y":258.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17504.0,"EndTime":17504.0,"X":92.1605453,"Y":322.692932,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17762.0,"Objects":[{"StartTime":17762.0,"EndTime":17762.0,"X":92.0,"Y":323.0}]},{"StartTime":17874.0,"Objects":[{"StartTime":17874.0,"EndTime":17874.0,"X":43.0,"Y":245.0}]},{"StartTime":17985.0,"Objects":[{"StartTime":17985.0,"EndTime":17985.0,"X":4.0,"Y":322.0}]},{"StartTime":18096.0,"Objects":[{"StartTime":18096.0,"EndTime":18096.0,"X":133.0,"Y":245.0}]},{"StartTime":18318.0,"Objects":[{"StartTime":18318.0,"EndTime":18318.0,"X":29.0,"Y":105.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18373.0,"EndTime":18373.0,"X":36.6683846,"Y":49.6172256,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18429.0,"EndTime":18429.0,"X":29.0464745,"Y":104.664345,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18448.0,"EndTime":18448.0,"X":36.71486,"Y":49.28157,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18540.0,"Objects":[{"StartTime":18540.0,"EndTime":18540.0,"X":50.0,"Y":30.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18726.0,"EndTime":18726.0,"X":187.203888,"Y":30.4987259,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18985.0,"Objects":[{"StartTime":18985.0,"EndTime":18985.0,"X":240.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19171.0,"EndTime":19171.0,"X":377.9097,"Y":110.78511,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19318.0,"Objects":[{"StartTime":19318.0,"EndTime":19318.0,"X":409.0,"Y":213.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19504.0,"EndTime":19504.0,"X":263.653748,"Y":204.007446,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19651.0,"Objects":[{"StartTime":19651.0,"EndTime":19651.0,"X":119.0,"Y":187.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19726.0,"EndTime":19726.0,"X":125.040916,"Y":261.756317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19874.0,"Objects":[{"StartTime":19874.0,"EndTime":19874.0,"X":179.0,"Y":338.0}]},{"StartTime":19985.0,"Objects":[{"StartTime":19985.0,"EndTime":19985.0,"X":45.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20040.0,"EndTime":20040.0,"X":8.848415,"Y":298.3925,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20060.0,"EndTime":20060.0,"X":45.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":20207.0,"Objects":[{"StartTime":20207.0,"EndTime":20207.0,"X":103.0,"Y":380.0}]},{"StartTime":20318.0,"Objects":[{"StartTime":20318.0,"EndTime":20318.0,"X":212.0,"Y":257.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20393.0,"EndTime":20393.0,"X":234.732208,"Y":187.976425,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":20540.0,"Objects":[{"StartTime":20540.0,"EndTime":20540.0,"X":111.0,"Y":118.0}]},{"StartTime":20762.0,"Objects":[{"StartTime":20762.0,"EndTime":20762.0,"X":111.0,"Y":118.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20948.0,"EndTime":20948.0,"X":185.592651,"Y":110.193794,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21096.0,"Objects":[{"StartTime":21096.0,"EndTime":21096.0,"X":256.0,"Y":18.0}]},{"StartTime":21207.0,"Objects":[{"StartTime":21207.0,"EndTime":21207.0,"X":337.0,"Y":121.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21337.0,"EndTime":21337.0,"X":383.95816,"Y":25.23836,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21429.0,"Objects":[{"StartTime":21429.0,"EndTime":21429.0,"X":384.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21559.0,"EndTime":21559.0,"X":443.158325,"Y":114.866982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21651.0,"Objects":[{"StartTime":21651.0,"EndTime":21651.0,"X":443.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21781.0,"EndTime":21781.0,"X":336.563934,"Y":123.06649,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21874.0,"Objects":[{"StartTime":21874.0,"EndTime":21874.0,"X":352.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21949.0,"EndTime":21949.0,"X":458.863068,"Y":242.7167,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22096.0,"Objects":[{"StartTime":22096.0,"EndTime":22096.0,"X":322.0,"Y":343.0}]},{"StartTime":22207.0,"Objects":[{"StartTime":22207.0,"EndTime":22207.0,"X":259.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22318.0,"EndTime":22318.0,"X":186.556473,"Y":265.58252,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22393.0,"EndTime":22393.0,"X":259.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22540.0,"Objects":[{"StartTime":22540.0,"EndTime":22540.0,"X":86.0,"Y":360.0}]},{"StartTime":22651.0,"Objects":[{"StartTime":22651.0,"EndTime":22651.0,"X":15.0,"Y":295.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22762.0,"EndTime":22762.0,"X":3.18144321,"Y":220.937042,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22837.0,"EndTime":22837.0,"X":15.0,"Y":295.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22985.0,"Objects":[{"StartTime":22985.0,"EndTime":22985.0,"X":94.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23282.0,"EndTime":23282.0,"X":112.333351,"Y":278.012543,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23429.0,"Objects":[{"StartTime":23429.0,"EndTime":23429.0,"X":0.0,"Y":211.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23504.0,"EndTime":23504.0,"X":73.58056,"Y":196.477524,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23651.0,"Objects":[{"StartTime":23651.0,"EndTime":23651.0,"X":215.0,"Y":134.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23726.0,"EndTime":23726.0,"X":142.0318,"Y":116.661018,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23874.0,"Objects":[{"StartTime":23874.0,"EndTime":23874.0,"X":33.0,"Y":124.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24060.0,"EndTime":24060.0,"X":42.19049,"Y":11.8760223,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24318.0,"Objects":[{"StartTime":24318.0,"EndTime":24318.0,"X":150.0,"Y":269.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24504.0,"EndTime":24504.0,"X":161.849289,"Y":194.941956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24651.0,"Objects":[{"StartTime":24651.0,"EndTime":24651.0,"X":229.0,"Y":134.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24726.0,"EndTime":24726.0,"X":339.500732,"Y":155.114792,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24874.0,"Objects":[{"StartTime":24874.0,"EndTime":24874.0,"X":486.0,"Y":268.0}]},{"StartTime":24985.0,"Objects":[{"StartTime":24985.0,"EndTime":24985.0,"X":410.0,"Y":119.0}]},{"StartTime":25096.0,"Objects":[{"StartTime":25096.0,"EndTime":25096.0,"X":381.0,"Y":213.0}]},{"StartTime":25207.0,"Objects":[{"StartTime":25207.0,"EndTime":25207.0,"X":512.0,"Y":120.0}]},{"StartTime":25429.0,"Objects":[{"StartTime":25429.0,"EndTime":25429.0,"X":247.0,"Y":36.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25484.0,"EndTime":25484.0,"X":210.424835,"Y":28.8155918,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25540.0,"EndTime":25540.0,"X":246.778336,"Y":35.95646,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25559.0,"EndTime":25559.0,"X":210.203171,"Y":28.77205,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25651.0,"Objects":[{"StartTime":25651.0,"EndTime":25651.0,"X":185.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25837.0,"EndTime":25837.0,"X":171.310989,"Y":155.469345,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26096.0,"Objects":[{"StartTime":26096.0,"EndTime":26096.0,"X":253.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26282.0,"EndTime":26282.0,"X":248.797211,"Y":354.1396,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26429.0,"Objects":[{"StartTime":26429.0,"EndTime":26429.0,"X":100.0,"Y":363.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26615.0,"EndTime":26615.0,"X":249.760269,"Y":354.523,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26762.0,"Objects":[{"StartTime":26762.0,"EndTime":26762.0,"X":404.0,"Y":262.0}]},{"StartTime":26874.0,"Objects":[{"StartTime":26874.0,"EndTime":26874.0,"X":390.0,"Y":352.0}]},{"StartTime":26985.0,"Objects":[{"StartTime":26985.0,"EndTime":26985.0,"X":314.0,"Y":295.0}]},{"StartTime":27096.0,"Objects":[{"StartTime":27096.0,"EndTime":27096.0,"X":425.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27151.0,"EndTime":27151.0,"X":461.755035,"Y":250.514175,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27171.0,"EndTime":27171.0,"X":425.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":27318.0,"Objects":[{"StartTime":27318.0,"EndTime":27318.0,"X":329.0,"Y":216.0}]},{"StartTime":27429.0,"Objects":[{"StartTime":27429.0,"EndTime":27429.0,"X":193.0,"Y":177.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27504.0,"EndTime":27504.0,"X":266.260956,"Y":160.94281,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":27651.0,"Objects":[{"StartTime":27651.0,"EndTime":27651.0,"X":322.0,"Y":107.0}]},{"StartTime":27874.0,"Objects":[{"StartTime":27874.0,"EndTime":27874.0,"X":322.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28060.0,"EndTime":28060.0,"X":311.7376,"Y":219.030945,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28207.0,"Objects":[{"StartTime":28207.0,"EndTime":28207.0,"X":110.0,"Y":299.0}]},{"StartTime":28318.0,"Objects":[{"StartTime":28318.0,"EndTime":28318.0,"X":164.0,"Y":231.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28448.0,"EndTime":28448.0,"X":135.6063,"Y":327.122955,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28540.0,"Objects":[{"StartTime":28540.0,"EndTime":28540.0,"X":30.0,"Y":284.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28670.0,"EndTime":28670.0,"X":127.158829,"Y":259.8269,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28762.0,"Objects":[{"StartTime":28762.0,"EndTime":28762.0,"X":148.0,"Y":371.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28892.0,"EndTime":28892.0,"X":78.25478,"Y":298.6825,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28985.0,"Objects":[{"StartTime":28985.0,"EndTime":28985.0,"X":194.0,"Y":201.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":29060.0,"EndTime":29060.0,"X":299.8987,"Y":225.443588,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":29207.0,"Objects":[{"StartTime":29207.0,"EndTime":29207.0,"X":492.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":29282.0,"EndTime":29282.0,"X":422.503,"Y":138.437851,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":29429.0,"Objects":[{"StartTime":29429.0,"EndTime":29429.0,"X":324.0,"Y":102.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":29504.0,"EndTime":29504.0,"X":281.7771,"Y":42.667614,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":29651.0,"Objects":[{"StartTime":29651.0,"EndTime":29651.0,"X":418.0,"Y":17.0}]},{"StartTime":29874.0,"Objects":[{"StartTime":29874.0,"EndTime":29874.0,"X":495.0,"Y":201.0}]},{"StartTime":30096.0,"Objects":[{"StartTime":30096.0,"EndTime":30096.0,"X":221.0,"Y":136.0}]},{"StartTime":30207.0,"Objects":[{"StartTime":30207.0,"EndTime":30207.0,"X":299.0,"Y":188.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30393.0,"EndTime":30393.0,"X":281.51004,"Y":328.410828,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30540.0,"Objects":[{"StartTime":30540.0,"EndTime":30540.0,"X":115.0,"Y":334.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30837.0,"EndTime":30837.0,"X":166.044785,"Y":247.203171,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30985.0,"Objects":[{"StartTime":30985.0,"EndTime":30985.0,"X":216.0,"Y":326.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":31012.0,"EndTime":31012.0,"X":279.647339,"Y":329.616333,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":31429.0,"Objects":[{"StartTime":31429.0,"EndTime":31429.0,"X":280.0,"Y":330.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":31504.0,"EndTime":31504.0,"X":290.840027,"Y":255.7875,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":31651.0,"Objects":[{"StartTime":31651.0,"EndTime":31651.0,"X":426.0,"Y":252.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":31726.0,"EndTime":31726.0,"X":436.840027,"Y":177.7875,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":31874.0,"Objects":[{"StartTime":31874.0,"EndTime":31874.0,"X":253.0,"Y":158.0}]},{"StartTime":31985.0,"Objects":[{"StartTime":31985.0,"EndTime":31985.0,"X":258.0,"Y":132.0}]},{"StartTime":32096.0,"Objects":[{"StartTime":32096.0,"EndTime":32096.0,"X":337.0,"Y":111.0}]},{"StartTime":32207.0,"Objects":[{"StartTime":32207.0,"EndTime":32207.0,"X":341.0,"Y":85.0}]},{"StartTime":32318.0,"Objects":[{"StartTime":32318.0,"EndTime":32318.0,"X":271.0,"Y":30.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32448.0,"EndTime":32448.0,"X":162.253082,"Y":25.8848,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32540.0,"Objects":[{"StartTime":32540.0,"EndTime":32540.0,"X":163.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32726.0,"EndTime":32726.0,"X":144.749512,"Y":174.88559,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32985.0,"Objects":[{"StartTime":32985.0,"EndTime":32985.0,"X":445.0,"Y":343.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33171.0,"EndTime":33171.0,"X":404.5491,"Y":255.923309,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":33429.0,"Objects":[{"StartTime":33429.0,"EndTime":33429.0,"X":240.0,"Y":257.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33615.0,"EndTime":33615.0,"X":280.0188,"Y":182.645447,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":33874.0,"Objects":[{"StartTime":33874.0,"EndTime":33874.0,"X":68.0,"Y":333.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34060.0,"EndTime":34060.0,"X":40.12644,"Y":256.4784,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34318.0,"Objects":[{"StartTime":34318.0,"EndTime":34318.0,"X":344.0,"Y":347.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34393.0,"EndTime":34393.0,"X":464.08136,"Y":329.892731,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34540.0,"Objects":[{"StartTime":34540.0,"EndTime":34540.0,"X":452.0,"Y":255.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34726.0,"EndTime":34726.0,"X":338.6652,"Y":265.867065,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34874.0,"Objects":[{"StartTime":34874.0,"EndTime":34874.0,"X":256.0,"Y":220.0}]},{"StartTime":34985.0,"Objects":[{"StartTime":34985.0,"EndTime":34985.0,"X":256.0,"Y":220.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35060.0,"EndTime":35060.0,"X":256.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35207.0,"Objects":[{"StartTime":35207.0,"EndTime":35207.0,"X":256.0,"Y":70.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35282.0,"EndTime":35282.0,"X":256.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35429.0,"Objects":[{"StartTime":35429.0,"EndTime":35429.0,"X":112.0,"Y":312.0}]},{"StartTime":35540.0,"Objects":[{"StartTime":35540.0,"EndTime":35540.0,"X":60.0,"Y":255.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35726.0,"EndTime":35726.0,"X":173.334808,"Y":265.867065,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35874.0,"Objects":[{"StartTime":35874.0,"EndTime":35874.0,"X":169.0,"Y":350.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36282.0,"EndTime":36282.0,"X":48.1567,"Y":333.550873,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36429.0,"Objects":[{"StartTime":36429.0,"EndTime":36429.0,"X":62.0,"Y":169.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36540.0,"EndTime":36540.0,"X":72.6066055,"Y":243.246216,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36615.0,"EndTime":36615.0,"X":62.0,"Y":169.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36762.0,"Objects":[{"StartTime":36762.0,"EndTime":36762.0,"X":134.0,"Y":61.0}]},{"StartTime":36874.0,"Objects":[{"StartTime":36874.0,"EndTime":36874.0,"X":201.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36985.0,"EndTime":36985.0,"X":211.6066,"Y":187.246216,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37060.0,"EndTime":37060.0,"X":201.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37207.0,"Objects":[{"StartTime":37207.0,"EndTime":37207.0,"X":298.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37282.0,"EndTime":37282.0,"X":312.225616,"Y":198.361481,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37429.0,"Objects":[{"StartTime":37429.0,"EndTime":37429.0,"X":330.0,"Y":114.0}]},{"StartTime":37540.0,"Objects":[{"StartTime":37540.0,"EndTime":37540.0,"X":446.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37726.0,"EndTime":37726.0,"X":312.0408,"Y":197.883438,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37874.0,"Objects":[{"StartTime":37874.0,"EndTime":37874.0,"X":231.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37949.0,"EndTime":37949.0,"X":229.158188,"Y":166.818878,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38096.0,"Objects":[{"StartTime":38096.0,"EndTime":38096.0,"X":325.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38171.0,"EndTime":38171.0,"X":175.573792,"Y":298.107574,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38540.0,"Objects":[{"StartTime":38540.0,"EndTime":38540.0,"X":175.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38615.0,"EndTime":38615.0,"X":165.884415,"Y":372.44397,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38762.0,"Objects":[{"StartTime":38762.0,"EndTime":38762.0,"X":75.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38837.0,"EndTime":38837.0,"X":65.8844147,"Y":282.44397,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38985.0,"Objects":[{"StartTime":38985.0,"EndTime":38985.0,"X":233.0,"Y":74.0}]},{"StartTime":39096.0,"Objects":[{"StartTime":39096.0,"EndTime":39096.0,"X":231.0,"Y":98.0}]},{"StartTime":39207.0,"Objects":[{"StartTime":39207.0,"EndTime":39207.0,"X":156.0,"Y":139.0}]},{"StartTime":39318.0,"Objects":[{"StartTime":39318.0,"EndTime":39318.0,"X":155.0,"Y":165.0}]},{"StartTime":39429.0,"Objects":[{"StartTime":39429.0,"EndTime":39429.0,"X":227.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":39559.0,"EndTime":39559.0,"X":336.996735,"Y":222.441727,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":39651.0,"Objects":[{"StartTime":39651.0,"EndTime":39651.0,"X":336.0,"Y":222.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":39837.0,"EndTime":39837.0,"X":364.5033,"Y":74.73303,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":40096.0,"Objects":[{"StartTime":40096.0,"EndTime":40096.0,"X":81.0,"Y":35.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":40282.0,"EndTime":40282.0,"X":127.2737,"Y":104.866875,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":40540.0,"Objects":[{"StartTime":40540.0,"EndTime":40540.0,"X":272.0,"Y":158.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":40726.0,"EndTime":40726.0,"X":224.732422,"Y":227.8874,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":40985.0,"Objects":[{"StartTime":40985.0,"EndTime":40985.0,"X":423.0,"Y":36.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":41171.0,"EndTime":41171.0,"X":443.179352,"Y":116.766846,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41429.0,"Objects":[{"StartTime":41429.0,"EndTime":41429.0,"X":512.0,"Y":278.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":41504.0,"EndTime":41504.0,"X":373.7834,"Y":280.097351,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41651.0,"Objects":[{"StartTime":41651.0,"EndTime":41651.0,"X":359.0,"Y":302.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":41781.0,"EndTime":41781.0,"X":312.524048,"Y":206.435242,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41874.0,"Objects":[{"StartTime":41874.0,"EndTime":41874.0,"X":322.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42004.0,"EndTime":42004.0,"X":433.261749,"Y":173.354538,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42096.0,"Objects":[{"StartTime":42096.0,"EndTime":42096.0,"X":443.0,"Y":159.0}]},{"StartTime":42318.0,"Objects":[{"StartTime":42318.0,"EndTime":42318.0,"X":240.0,"Y":52.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42393.0,"EndTime":42393.0,"X":244.301,"Y":121.796005,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42540.0,"Objects":[{"StartTime":42540.0,"EndTime":42540.0,"X":177.0,"Y":166.0}]},{"StartTime":42651.0,"Objects":[{"StartTime":42651.0,"EndTime":42651.0,"X":163.0,"Y":151.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42837.0,"EndTime":42837.0,"X":189.527557,"Y":288.624542,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42985.0,"Objects":[{"StartTime":42985.0,"EndTime":42985.0,"X":131.0,"Y":365.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":43171.0,"EndTime":43171.0,"X":263.826355,"Y":333.7347,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":43318.0,"Objects":[{"StartTime":43318.0,"EndTime":43318.0,"X":335.0,"Y":377.0}]},{"StartTime":43429.0,"Objects":[{"StartTime":43429.0,"EndTime":43429.0,"X":442.0,"Y":239.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":43726.0,"EndTime":43726.0,"X":444.975067,"Y":103.950119,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":43874.0,"Objects":[{"StartTime":43874.0,"EndTime":43874.0,"X":444.0,"Y":103.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":43949.0,"EndTime":43949.0,"X":371.940247,"Y":120.881523,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44096.0,"Objects":[{"StartTime":44096.0,"EndTime":44096.0,"X":249.0,"Y":28.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44171.0,"EndTime":44171.0,"X":320.874725,"Y":46.2887573,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44318.0,"Objects":[{"StartTime":44318.0,"EndTime":44318.0,"X":364.0,"Y":201.0}]},{"StartTime":44429.0,"Objects":[{"StartTime":44429.0,"EndTime":44429.0,"X":332.0,"Y":195.0}]},{"StartTime":44540.0,"Objects":[{"StartTime":44540.0,"EndTime":44540.0,"X":251.0,"Y":135.0}]},{"StartTime":44651.0,"Objects":[{"StartTime":44651.0,"EndTime":44651.0,"X":281.0,"Y":123.0}]},{"StartTime":44762.0,"Objects":[{"StartTime":44762.0,"EndTime":44762.0,"X":332.0,"Y":195.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44948.0,"EndTime":44948.0,"X":306.331055,"Y":299.344849,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45207.0,"Objects":[{"StartTime":45207.0,"EndTime":45207.0,"X":61.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45282.0,"EndTime":45282.0,"X":83.3818054,"Y":135.2511,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45651.0,"Objects":[{"StartTime":45651.0,"EndTime":45651.0,"X":84.0,"Y":136.0}]},{"StartTime":46096.0,"Objects":[{"StartTime":46096.0,"EndTime":46096.0,"X":84.0,"Y":136.0}]},{"StartTime":46207.0,"Objects":[{"StartTime":46207.0,"EndTime":46207.0,"X":176.0,"Y":33.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46282.0,"EndTime":46282.0,"X":166.495789,"Y":88.44125,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46429.0,"Objects":[{"StartTime":46429.0,"EndTime":46429.0,"X":219.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46504.0,"EndTime":46504.0,"X":231.938934,"Y":152.258362,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46651.0,"Objects":[{"StartTime":46651.0,"EndTime":46651.0,"X":312.0,"Y":65.0}]},{"StartTime":46762.0,"Objects":[{"StartTime":46762.0,"EndTime":46762.0,"X":312.0,"Y":65.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46837.0,"EndTime":46837.0,"X":365.301147,"Y":82.97364,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46985.0,"Objects":[{"StartTime":46985.0,"EndTime":46985.0,"X":512.0,"Y":176.0}]},{"StartTime":47096.0,"Objects":[{"StartTime":47096.0,"EndTime":47096.0,"X":421.0,"Y":192.0}]},{"StartTime":47429.0,"Objects":[{"StartTime":47429.0,"EndTime":47429.0,"X":421.0,"Y":192.0}]},{"StartTime":47651.0,"Objects":[{"StartTime":47651.0,"EndTime":47651.0,"X":402.0,"Y":357.0}]},{"StartTime":47762.0,"Objects":[{"StartTime":47762.0,"EndTime":47762.0,"X":394.0,"Y":277.0}]},{"StartTime":47874.0,"Objects":[{"StartTime":47874.0,"EndTime":47874.0,"X":328.0,"Y":324.0}]},{"StartTime":48318.0,"Objects":[{"StartTime":48318.0,"EndTime":48318.0,"X":328.0,"Y":324.0}]},{"StartTime":48540.0,"Objects":[{"StartTime":48540.0,"EndTime":48540.0,"X":110.0,"Y":357.0}]},{"StartTime":48651.0,"Objects":[{"StartTime":48651.0,"EndTime":48651.0,"X":118.0,"Y":277.0}]},{"StartTime":48763.0,"Objects":[{"StartTime":48763.0,"EndTime":48763.0,"X":184.0,"Y":324.0}]},{"StartTime":48874.0,"Objects":[{"StartTime":48874.0,"EndTime":48874.0,"X":110.0,"Y":357.0}]},{"StartTime":49207.0,"Objects":[{"StartTime":49207.0,"EndTime":49207.0,"X":110.0,"Y":357.0}]},{"StartTime":49651.0,"Objects":[{"StartTime":49651.0,"EndTime":49651.0,"X":110.0,"Y":357.0}]},{"StartTime":49762.0,"Objects":[{"StartTime":49762.0,"EndTime":49762.0,"X":0.0,"Y":283.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":49837.0,"EndTime":49837.0,"X":52.00481,"Y":302.320679,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49985.0,"Objects":[{"StartTime":49985.0,"EndTime":49985.0,"X":188.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50060.0,"EndTime":50060.0,"X":139.90033,"Y":245.560135,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50207.0,"Objects":[{"StartTime":50207.0,"EndTime":50207.0,"X":49.0,"Y":137.0}]},{"StartTime":50318.0,"Objects":[{"StartTime":50318.0,"EndTime":50318.0,"X":49.0,"Y":137.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50393.0,"EndTime":50393.0,"X":68.7774048,"Y":188.112656,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50540.0,"Objects":[{"StartTime":50540.0,"EndTime":50540.0,"X":107.0,"Y":67.0}]},{"StartTime":50651.0,"Objects":[{"StartTime":50651.0,"EndTime":50651.0,"X":32.0,"Y":15.0}]},{"StartTime":50985.0,"Objects":[{"StartTime":50985.0,"EndTime":50985.0,"X":32.0,"Y":15.0}]},{"StartTime":51207.0,"Objects":[{"StartTime":51207.0,"EndTime":51207.0,"X":265.0,"Y":114.0}]},{"StartTime":51318.0,"Objects":[{"StartTime":51318.0,"EndTime":51318.0,"X":254.0,"Y":196.0}]},{"StartTime":51429.0,"Objects":[{"StartTime":51429.0,"EndTime":51429.0,"X":241.0,"Y":279.0}]},{"StartTime":51651.0,"Objects":[{"StartTime":51651.0,"EndTime":51651.0,"X":241.0,"Y":279.0}]},{"StartTime":51762.0,"Objects":[{"StartTime":51762.0,"EndTime":51762.0,"X":336.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52059.0,"EndTime":52059.0,"X":391.603638,"Y":270.527466,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52318.0,"Objects":[{"StartTime":52318.0,"EndTime":52318.0,"X":83.0,"Y":206.0}]},{"StartTime":52429.0,"Objects":[{"StartTime":52429.0,"EndTime":52429.0,"X":83.0,"Y":206.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52504.0,"EndTime":52504.0,"X":100.787811,"Y":259.363434,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52651.0,"Objects":[{"StartTime":52651.0,"EndTime":52651.0,"X":40.0,"Y":383.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52726.0,"EndTime":52726.0,"X":78.99291,"Y":342.874847,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52874.0,"Objects":[{"StartTime":52874.0,"EndTime":52874.0,"X":214.0,"Y":334.0}]},{"StartTime":52985.0,"Objects":[{"StartTime":52985.0,"EndTime":52985.0,"X":214.0,"Y":334.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":53060.0,"EndTime":53060.0,"X":160.677017,"Y":317.0179,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":53207.0,"Objects":[{"StartTime":53207.0,"EndTime":53207.0,"X":151.0,"Y":160.0}]},{"StartTime":53318.0,"Objects":[{"StartTime":53318.0,"EndTime":53318.0,"X":188.0,"Y":135.0}]},{"StartTime":53429.0,"Objects":[{"StartTime":53429.0,"EndTime":53429.0,"X":232.0,"Y":129.0}]},{"StartTime":53540.0,"Objects":[{"StartTime":53540.0,"EndTime":53540.0,"X":273.0,"Y":146.0}]},{"StartTime":53651.0,"Objects":[{"StartTime":53651.0,"EndTime":53651.0,"X":339.0,"Y":198.0}]},{"StartTime":53762.0,"Objects":[{"StartTime":53762.0,"EndTime":53762.0,"X":383.0,"Y":199.0}]},{"StartTime":53874.0,"Objects":[{"StartTime":53874.0,"EndTime":53874.0,"X":426.0,"Y":185.0}]},{"StartTime":53985.0,"Objects":[{"StartTime":53985.0,"EndTime":53985.0,"X":450.0,"Y":147.0}]},{"StartTime":54096.0,"Objects":[{"StartTime":54096.0,"EndTime":54096.0,"X":444.0,"Y":61.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54171.0,"EndTime":54171.0,"X":404.198761,"Y":22.7040062,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54318.0,"Objects":[{"StartTime":54318.0,"EndTime":54318.0,"X":301.0,"Y":28.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54393.0,"EndTime":54393.0,"X":259.281525,"Y":62.49509,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54540.0,"Objects":[{"StartTime":54540.0,"EndTime":54540.0,"X":189.0,"Y":271.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54615.0,"EndTime":54615.0,"X":208.7961,"Y":220.140625,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54762.0,"Objects":[{"StartTime":54762.0,"EndTime":54762.0,"X":186.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54837.0,"EndTime":54837.0,"X":149.98996,"Y":73.19951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54985.0,"Objects":[{"StartTime":54985.0,"EndTime":54985.0,"X":27.0,"Y":137.0}]},{"StartTime":55096.0,"Objects":[{"StartTime":55096.0,"EndTime":55096.0,"X":34.0,"Y":167.0}]},{"StartTime":55207.0,"Objects":[{"StartTime":55207.0,"EndTime":55207.0,"X":122.0,"Y":204.0}]},{"StartTime":55318.0,"Objects":[{"StartTime":55318.0,"EndTime":55318.0,"X":116.0,"Y":178.0}]},{"StartTime":55429.0,"Objects":[{"StartTime":55429.0,"EndTime":55429.0,"X":48.0,"Y":249.0}]},{"StartTime":55540.0,"Objects":[{"StartTime":55540.0,"EndTime":55540.0,"X":54.0,"Y":274.0}]},{"StartTime":55651.0,"Objects":[{"StartTime":55651.0,"EndTime":55651.0,"X":124.0,"Y":329.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":55726.0,"EndTime":55726.0,"X":179.117538,"Y":319.596771,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":55874.0,"Objects":[{"StartTime":55874.0,"EndTime":55874.0,"X":320.0,"Y":185.0}]},{"StartTime":55985.0,"Objects":[{"StartTime":55985.0,"EndTime":55985.0,"X":287.0,"Y":175.0}]},{"StartTime":56096.0,"Objects":[{"StartTime":56096.0,"EndTime":56096.0,"X":254.0,"Y":181.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56171.0,"EndTime":56171.0,"X":262.399933,"Y":236.321579,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56318.0,"Objects":[{"StartTime":56318.0,"EndTime":56318.0,"X":337.0,"Y":347.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56393.0,"EndTime":56393.0,"X":350.0131,"Y":293.286041,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56540.0,"Objects":[{"StartTime":56540.0,"EndTime":56540.0,"X":418.0,"Y":197.0}]},{"StartTime":56651.0,"Objects":[{"StartTime":56651.0,"EndTime":56651.0,"X":418.0,"Y":197.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56726.0,"EndTime":56726.0,"X":472.82196,"Y":184.405762,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56874.0,"Objects":[{"StartTime":56874.0,"EndTime":56874.0,"X":329.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56949.0,"EndTime":56949.0,"X":275.1002,"Y":97.91051,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":57096.0,"Objects":[{"StartTime":57096.0,"EndTime":57096.0,"X":436.0,"Y":59.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57171.0,"EndTime":57171.0,"X":417.73645,"Y":112.2025,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":57318.0,"Objects":[{"StartTime":57318.0,"EndTime":57318.0,"X":332.0,"Y":194.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57429.0,"EndTime":57429.0,"X":349.292969,"Y":247.525848,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57504.0,"EndTime":57504.0,"X":332.0,"Y":194.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":57651.0,"Objects":[{"StartTime":57651.0,"EndTime":57651.0,"X":202.0,"Y":194.0}]},{"StartTime":57762.0,"Objects":[{"StartTime":57762.0,"EndTime":57762.0,"X":224.0,"Y":233.0}]},{"StartTime":57874.0,"Objects":[{"StartTime":57874.0,"EndTime":57874.0,"X":222.0,"Y":279.0}]},{"StartTime":57985.0,"Objects":[{"StartTime":57985.0,"EndTime":57985.0,"X":193.0,"Y":314.0}]},{"StartTime":58096.0,"Objects":[{"StartTime":58096.0,"EndTime":58096.0,"X":144.0,"Y":244.0}]},{"StartTime":58207.0,"Objects":[{"StartTime":58207.0,"EndTime":58207.0,"X":127.0,"Y":214.0}]},{"StartTime":58318.0,"Objects":[{"StartTime":58318.0,"EndTime":58318.0,"X":126.0,"Y":180.0}]},{"StartTime":58429.0,"Objects":[{"StartTime":58429.0,"EndTime":58429.0,"X":139.0,"Y":149.0}]},{"StartTime":58540.0,"Objects":[{"StartTime":58540.0,"EndTime":58540.0,"X":224.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58726.0,"EndTime":58726.0,"X":198.29718,"Y":184.3571,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58874.0,"Objects":[{"StartTime":58874.0,"EndTime":58874.0,"X":299.0,"Y":319.0}]},{"StartTime":58985.0,"Objects":[{"StartTime":58985.0,"EndTime":58985.0,"X":299.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59282.0,"EndTime":59282.0,"X":356.653656,"Y":227.930466,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59429.0,"Objects":[{"StartTime":59429.0,"EndTime":59429.0,"X":428.0,"Y":181.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59615.0,"EndTime":59615.0,"X":418.7787,"Y":18.6044426,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59874.0,"Objects":[{"StartTime":59874.0,"EndTime":59874.0,"X":418.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59911.0,"EndTime":59911.0,"X":393.055359,"Y":16.3370247,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59948.0,"EndTime":59948.0,"X":418.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59985.0,"EndTime":59985.0,"X":393.055359,"Y":16.3370247,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60022.0,"EndTime":60022.0,"X":418.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60059.0,"EndTime":60059.0,"X":393.055359,"Y":16.3370247,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60060.0,"EndTime":60060.0,"X":418.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60207.0,"Objects":[{"StartTime":60207.0,"EndTime":60207.0,"X":428.0,"Y":181.0}]},{"StartTime":60318.0,"Objects":[{"StartTime":60318.0,"EndTime":60318.0,"X":352.0,"Y":209.0}]},{"StartTime":60429.0,"Objects":[{"StartTime":60429.0,"EndTime":60429.0,"X":278.0,"Y":177.0}]},{"StartTime":60540.0,"Objects":[{"StartTime":60540.0,"EndTime":60540.0,"X":208.0,"Y":225.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60595.0,"EndTime":60595.0,"X":219.751709,"Y":260.255127,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60615.0,"EndTime":60615.0,"X":208.0,"Y":225.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60762.0,"Objects":[{"StartTime":60762.0,"EndTime":60762.0,"X":71.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60799.0,"EndTime":60799.0,"X":66.7759,"Y":119.359444,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60836.0,"EndTime":60836.0,"X":71.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60837.0,"EndTime":60837.0,"X":66.7759,"Y":119.359444,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60985.0,"Objects":[{"StartTime":60985.0,"EndTime":60985.0,"X":145.0,"Y":86.0}]},{"StartTime":61096.0,"Objects":[{"StartTime":61096.0,"EndTime":61096.0,"X":163.0,"Y":127.0}]},{"StartTime":61207.0,"Objects":[{"StartTime":61207.0,"EndTime":61207.0,"X":161.0,"Y":171.0}]},{"StartTime":61318.0,"Objects":[{"StartTime":61318.0,"EndTime":61318.0,"X":136.0,"Y":208.0}]},{"StartTime":61429.0,"Objects":[{"StartTime":61429.0,"EndTime":61429.0,"X":99.0,"Y":231.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":61504.0,"EndTime":61504.0,"X":106.705917,"Y":300.142578,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":61651.0,"Objects":[{"StartTime":61651.0,"EndTime":61651.0,"X":177.0,"Y":378.0}]},{"StartTime":61762.0,"Objects":[{"StartTime":61762.0,"EndTime":61762.0,"X":177.0,"Y":378.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":61948.0,"EndTime":61948.0,"X":336.375977,"Y":319.826965,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62096.0,"Objects":[{"StartTime":62096.0,"EndTime":62096.0,"X":417.0,"Y":293.0}]},{"StartTime":62207.0,"Objects":[{"StartTime":62207.0,"EndTime":62207.0,"X":438.0,"Y":263.0}]},{"StartTime":62318.0,"Objects":[{"StartTime":62318.0,"EndTime":62318.0,"X":436.0,"Y":225.0}]},{"StartTime":62429.0,"Objects":[{"StartTime":62429.0,"EndTime":62429.0,"X":412.0,"Y":196.0}]},{"StartTime":62540.0,"Objects":[{"StartTime":62540.0,"EndTime":62540.0,"X":320.0,"Y":172.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62567.0,"EndTime":62567.0,"X":296.5699,"Y":200.555862,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62651.0,"Objects":[{"StartTime":62651.0,"EndTime":62651.0,"X":291.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62678.0,"EndTime":62678.0,"X":256.037964,"Y":156.462814,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62762.0,"Objects":[{"StartTime":62762.0,"EndTime":62762.0,"X":276.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62789.0,"EndTime":62789.0,"X":241.446152,"Y":101.1804,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62874.0,"Objects":[{"StartTime":62874.0,"EndTime":62874.0,"X":283.0,"Y":81.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62901.0,"EndTime":62901.0,"X":261.449921,"Y":51.34725,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62985.0,"Objects":[{"StartTime":62985.0,"EndTime":62985.0,"X":365.0,"Y":31.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63060.0,"EndTime":63060.0,"X":437.0226,"Y":49.0166931,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63207.0,"Objects":[{"StartTime":63207.0,"EndTime":63207.0,"X":512.0,"Y":169.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63282.0,"EndTime":63282.0,"X":438.3405,"Y":168.621353,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63429.0,"Objects":[{"StartTime":63429.0,"EndTime":63429.0,"X":350.0,"Y":107.0}]},{"StartTime":63540.0,"Objects":[{"StartTime":63540.0,"EndTime":63540.0,"X":293.0,"Y":237.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63615.0,"EndTime":63615.0,"X":277.221954,"Y":163.678436,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63762.0,"Objects":[{"StartTime":63762.0,"EndTime":63762.0,"X":428.0,"Y":269.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63948.0,"EndTime":63948.0,"X":287.108154,"Y":253.30072,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64096.0,"Objects":[{"StartTime":64096.0,"EndTime":64096.0,"X":191.0,"Y":318.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":64171.0,"EndTime":64171.0,"X":204.152679,"Y":384.5369,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64318.0,"Objects":[{"StartTime":64318.0,"EndTime":64318.0,"X":192.0,"Y":186.0}]},{"StartTime":64429.0,"Objects":[{"StartTime":64429.0,"EndTime":64429.0,"X":135.0,"Y":253.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":64540.0,"EndTime":64540.0,"X":61.6784363,"Y":268.778046,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":64615.0,"EndTime":64615.0,"X":135.0,"Y":253.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64762.0,"Objects":[{"StartTime":64762.0,"EndTime":64762.0,"X":24.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":64892.0,"EndTime":64892.0,"X":146.587021,"Y":69.97707,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64985.0,"Objects":[{"StartTime":64985.0,"EndTime":64985.0,"X":160.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65115.0,"EndTime":65115.0,"X":236.668945,"Y":106.661751,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65207.0,"Objects":[{"StartTime":65207.0,"EndTime":65207.0,"X":276.0,"Y":34.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65337.0,"EndTime":65337.0,"X":288.3495,"Y":191.015091,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65429.0,"Objects":[{"StartTime":65429.0,"EndTime":65429.0,"X":291.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65559.0,"EndTime":65559.0,"X":309.903473,"Y":136.769836,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65651.0,"Objects":[{"StartTime":65651.0,"EndTime":65651.0,"X":381.0,"Y":111.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65726.0,"EndTime":65726.0,"X":453.075073,"Y":126.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65874.0,"Objects":[{"StartTime":65874.0,"EndTime":65874.0,"X":221.0,"Y":163.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65949.0,"EndTime":65949.0,"X":152.07077,"Y":150.219,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":66096.0,"Objects":[{"StartTime":66096.0,"EndTime":66096.0,"X":41.0,"Y":231.0}]},{"StartTime":66207.0,"Objects":[{"StartTime":66207.0,"EndTime":66207.0,"X":49.0,"Y":267.0}]},{"StartTime":66318.0,"Objects":[{"StartTime":66318.0,"EndTime":66318.0,"X":56.0,"Y":303.0}]},{"StartTime":66429.0,"Objects":[{"StartTime":66429.0,"EndTime":66429.0,"X":67.0,"Y":288.0}]},{"StartTime":66540.0,"Objects":[{"StartTime":66540.0,"EndTime":66540.0,"X":77.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":66837.0,"EndTime":66837.0,"X":83.81238,"Y":364.51593,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":66985.0,"Objects":[{"StartTime":66985.0,"EndTime":66985.0,"X":95.0,"Y":356.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67171.0,"EndTime":67171.0,"X":169.229614,"Y":345.277954,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67318.0,"Objects":[{"StartTime":67318.0,"EndTime":67318.0,"X":274.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67393.0,"EndTime":67393.0,"X":276.6237,"Y":355.8248,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67540.0,"Objects":[{"StartTime":67540.0,"EndTime":67540.0,"X":191.0,"Y":227.0}]},{"StartTime":67651.0,"Objects":[{"StartTime":67651.0,"EndTime":67651.0,"X":255.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67706.0,"EndTime":67706.0,"X":261.337677,"Y":131.382233,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67726.0,"EndTime":67726.0,"X":255.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67874.0,"Objects":[{"StartTime":67874.0,"EndTime":67874.0,"X":147.0,"Y":83.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67911.0,"EndTime":67911.0,"X":153.740753,"Y":107.0741,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67948.0,"EndTime":67948.0,"X":147.0,"Y":83.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67949.0,"EndTime":67949.0,"X":153.740753,"Y":107.0741,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":68096.0,"Objects":[{"StartTime":68096.0,"EndTime":68096.0,"X":80.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":68171.0,"EndTime":68171.0,"X":97.28498,"Y":220.981018,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":68318.0,"Objects":[{"StartTime":68318.0,"EndTime":68318.0,"X":125.0,"Y":356.0}]},{"StartTime":68429.0,"Objects":[{"StartTime":68429.0,"EndTime":68429.0,"X":0.0,"Y":319.0}]},{"StartTime":68540.0,"Objects":[{"StartTime":68540.0,"EndTime":68540.0,"X":0.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":68615.0,"EndTime":68615.0,"X":71.24443,"Y":295.564331,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":68762.0,"Objects":[{"StartTime":68762.0,"EndTime":68762.0,"X":277.0,"Y":219.0}]},{"StartTime":68874.0,"Objects":[{"StartTime":68874.0,"EndTime":68874.0,"X":277.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69060.0,"EndTime":69060.0,"X":216.0241,"Y":166.850388,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69207.0,"Objects":[{"StartTime":69207.0,"EndTime":69207.0,"X":157.0,"Y":273.0}]},{"StartTime":69318.0,"Objects":[{"StartTime":69318.0,"EndTime":69318.0,"X":175.0,"Y":316.0}]},{"StartTime":69429.0,"Objects":[{"StartTime":69429.0,"EndTime":69429.0,"X":212.0,"Y":334.0}]},{"StartTime":69540.0,"Objects":[{"StartTime":69540.0,"EndTime":69540.0,"X":254.0,"Y":333.0}]},{"StartTime":69651.0,"Objects":[{"StartTime":69651.0,"EndTime":69651.0,"X":332.0,"Y":268.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69678.0,"EndTime":69678.0,"X":334.774872,"Y":230.961487,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69762.0,"Objects":[{"StartTime":69762.0,"EndTime":69762.0,"X":373.0,"Y":265.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69789.0,"EndTime":69789.0,"X":392.524567,"Y":235.296951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69874.0,"Objects":[{"StartTime":69874.0,"EndTime":69874.0,"X":413.0,"Y":284.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69901.0,"EndTime":69901.0,"X":444.2059,"Y":266.886841,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69985.0,"Objects":[{"StartTime":69985.0,"EndTime":69985.0,"X":433.0,"Y":318.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70012.0,"EndTime":70012.0,"X":467.539429,"Y":329.4084,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70096.0,"Objects":[{"StartTime":70096.0,"EndTime":70096.0,"X":401.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70171.0,"EndTime":70171.0,"X":332.06134,"Y":363.130951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70318.0,"Objects":[{"StartTime":70318.0,"EndTime":70318.0,"X":251.0,"Y":251.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70393.0,"EndTime":70393.0,"X":244.703979,"Y":178.914719,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70540.0,"Objects":[{"StartTime":70540.0,"EndTime":70540.0,"X":401.0,"Y":18.0}]},{"StartTime":70651.0,"Objects":[{"StartTime":70651.0,"EndTime":70651.0,"X":401.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70726.0,"EndTime":70726.0,"X":398.149,"Y":89.727005,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70874.0,"Objects":[{"StartTime":70874.0,"EndTime":70874.0,"X":327.0,"Y":193.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71060.0,"EndTime":71060.0,"X":303.965668,"Y":44.77916,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":71207.0,"Objects":[{"StartTime":71207.0,"EndTime":71207.0,"X":290.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71282.0,"EndTime":71282.0,"X":305.8338,"Y":129.799271,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":71429.0,"Objects":[{"StartTime":71429.0,"EndTime":71429.0,"X":272.0,"Y":302.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71504.0,"EndTime":71504.0,"X":197.997055,"Y":289.811279,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":71651.0,"Objects":[{"StartTime":71651.0,"EndTime":71651.0,"X":33.0,"Y":217.0}]},{"StartTime":71762.0,"Objects":[{"StartTime":71762.0,"EndTime":71762.0,"X":27.0,"Y":187.0}]},{"StartTime":71874.0,"Objects":[{"StartTime":71874.0,"EndTime":71874.0,"X":20.0,"Y":157.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72004.0,"EndTime":72004.0,"X":145.504913,"Y":80.92537,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":72096.0,"Objects":[{"StartTime":72096.0,"EndTime":72096.0,"X":145.0,"Y":82.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72171.0,"EndTime":72171.0,"X":200.993164,"Y":76.63079,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":72318.0,"Objects":[{"StartTime":72318.0,"EndTime":72318.0,"X":336.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72448.0,"EndTime":72448.0,"X":263.034,"Y":231.6351,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":72540.0,"Objects":[{"StartTime":72540.0,"EndTime":72540.0,"X":263.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72615.0,"EndTime":72615.0,"X":275.1168,"Y":286.929474,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":72762.0,"Objects":[{"StartTime":72762.0,"EndTime":72762.0,"X":183.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72837.0,"EndTime":72837.0,"X":175.045044,"Y":328.315338,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":72985.0,"Objects":[{"StartTime":72985.0,"EndTime":72985.0,"X":37.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73171.0,"EndTime":73171.0,"X":63.65956,"Y":142.217728,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73651.0,"Objects":[{"StartTime":73651.0,"EndTime":73651.0,"X":275.0,"Y":372.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73837.0,"EndTime":73837.0,"X":380.158661,"Y":364.386444,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74096.0,"Objects":[{"StartTime":74096.0,"EndTime":74096.0,"X":380.0,"Y":364.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74171.0,"EndTime":74171.0,"X":435.9299,"Y":358.0075,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74318.0,"Objects":[{"StartTime":74318.0,"EndTime":74318.0,"X":495.0,"Y":271.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74393.0,"EndTime":74393.0,"X":439.413177,"Y":279.61203,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74540.0,"Objects":[{"StartTime":74540.0,"EndTime":74540.0,"X":339.0,"Y":270.0}]},{"StartTime":74651.0,"Objects":[{"StartTime":74651.0,"EndTime":74651.0,"X":339.0,"Y":270.0}]},{"StartTime":74762.0,"Objects":[{"StartTime":74762.0,"EndTime":74762.0,"X":339.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74837.0,"EndTime":74837.0,"X":331.467133,"Y":214.256668,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74985.0,"Objects":[{"StartTime":74985.0,"EndTime":74985.0,"X":408.0,"Y":46.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":75060.0,"EndTime":75060.0,"X":396.112518,"Y":100.979546,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75207.0,"Objects":[{"StartTime":75207.0,"EndTime":75207.0,"X":220.0,"Y":230.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":75282.0,"EndTime":75282.0,"X":211.729385,"Y":174.361359,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75429.0,"Objects":[{"StartTime":75429.0,"EndTime":75429.0,"X":282.0,"Y":7.0}]},{"StartTime":75540.0,"Objects":[{"StartTime":75540.0,"EndTime":75540.0,"X":300.0,"Y":98.0}]},{"StartTime":75651.0,"Objects":[{"StartTime":75651.0,"EndTime":75651.0,"X":197.0,"Y":25.0}]},{"StartTime":75762.0,"Objects":[{"StartTime":75762.0,"EndTime":75762.0,"X":222.0,"Y":103.0}]},{"StartTime":75874.0,"Objects":[{"StartTime":75874.0,"EndTime":75874.0,"X":126.0,"Y":69.0}]},{"StartTime":75985.0,"Objects":[{"StartTime":75985.0,"EndTime":75985.0,"X":153.0,"Y":134.0}]},{"StartTime":76096.0,"Objects":[{"StartTime":76096.0,"EndTime":76096.0,"X":76.0,"Y":145.0}]},{"StartTime":76207.0,"Objects":[{"StartTime":76207.0,"EndTime":76207.0,"X":116.0,"Y":179.0}]},{"StartTime":76318.0,"Objects":[{"StartTime":76318.0,"EndTime":76318.0,"X":70.0,"Y":222.0}]},{"StartTime":76429.0,"Objects":[{"StartTime":76429.0,"EndTime":76429.0,"X":111.0,"Y":222.0}]},{"StartTime":76540.0,"Objects":[{"StartTime":76540.0,"EndTime":76540.0,"X":134.0,"Y":253.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":76615.0,"EndTime":76615.0,"X":130.626953,"Y":307.164856,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":76762.0,"Objects":[{"StartTime":76762.0,"EndTime":76762.0,"X":21.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77059.0,"EndTime":77059.0,"X":236.973511,"Y":377.8362,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77207.0,"Objects":[{"StartTime":77207.0,"EndTime":77207.0,"X":384.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77282.0,"EndTime":77282.0,"X":391.613525,"Y":291.387451,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77429.0,"Objects":[{"StartTime":77429.0,"EndTime":77429.0,"X":499.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77504.0,"EndTime":77504.0,"X":485.8507,"Y":135.838318,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77651.0,"Objects":[{"StartTime":77651.0,"EndTime":77651.0,"X":507.0,"Y":237.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77781.0,"EndTime":77781.0,"X":403.789581,"Y":202.548569,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77874.0,"Objects":[{"StartTime":77874.0,"EndTime":77874.0,"X":404.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77949.0,"EndTime":77949.0,"X":329.872131,"Y":214.4043,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78096.0,"Objects":[{"StartTime":78096.0,"EndTime":78096.0,"X":113.0,"Y":212.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78226.0,"EndTime":78226.0,"X":115.534233,"Y":319.9018,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78318.0,"Objects":[{"StartTime":78318.0,"EndTime":78318.0,"X":115.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78393.0,"EndTime":78393.0,"X":188.335175,"Y":334.7147,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78540.0,"Objects":[{"StartTime":78540.0,"EndTime":78540.0,"X":274.0,"Y":371.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78726.0,"EndTime":78726.0,"X":257.52887,"Y":191.7552,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78874.0,"Objects":[{"StartTime":78874.0,"EndTime":78874.0,"X":128.0,"Y":139.0}]},{"StartTime":78985.0,"Objects":[{"StartTime":78985.0,"EndTime":78985.0,"X":128.0,"Y":139.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79060.0,"EndTime":79060.0,"X":202.567627,"Y":130.958389,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79207.0,"Objects":[{"StartTime":79207.0,"EndTime":79207.0,"X":365.0,"Y":34.0}]},{"StartTime":79318.0,"Objects":[{"StartTime":79318.0,"EndTime":79318.0,"X":430.0,"Y":114.0}]},{"StartTime":79429.0,"Objects":[{"StartTime":79429.0,"EndTime":79429.0,"X":361.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79559.0,"EndTime":79559.0,"X":277.9352,"Y":126.286682,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79651.0,"Objects":[{"StartTime":79651.0,"EndTime":79651.0,"X":278.0,"Y":126.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79726.0,"EndTime":79726.0,"X":203.2309,"Y":131.880722,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79874.0,"Objects":[{"StartTime":79874.0,"EndTime":79874.0,"X":64.0,"Y":263.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":80004.0,"EndTime":80004.0,"X":47.32452,"Y":160.905121,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":80096.0,"Objects":[{"StartTime":80096.0,"EndTime":80096.0,"X":66.0,"Y":119.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":80171.0,"EndTime":80171.0,"X":77.40429,"Y":193.127869,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":80318.0,"Objects":[{"StartTime":80318.0,"EndTime":80318.0,"X":71.0,"Y":361.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":80504.0,"EndTime":80504.0,"X":231.5679,"Y":298.4993,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":80651.0,"Objects":[{"StartTime":80651.0,"EndTime":80651.0,"X":302.0,"Y":247.0}]},{"StartTime":80762.0,"Objects":[{"StartTime":80762.0,"EndTime":80762.0,"X":222.0,"Y":211.0}]},{"StartTime":80985.0,"Objects":[{"StartTime":80985.0,"EndTime":80985.0,"X":478.0,"Y":344.0}]},{"StartTime":81096.0,"Objects":[{"StartTime":81096.0,"EndTime":81096.0,"X":491.0,"Y":309.0}]},{"StartTime":81207.0,"Objects":[{"StartTime":81207.0,"EndTime":81207.0,"X":498.0,"Y":265.0}]},{"StartTime":81318.0,"Objects":[{"StartTime":81318.0,"EndTime":81318.0,"X":485.0,"Y":223.0}]},{"StartTime":81429.0,"Objects":[{"StartTime":81429.0,"EndTime":81429.0,"X":458.0,"Y":179.0}]},{"StartTime":81540.0,"Objects":[{"StartTime":81540.0,"EndTime":81540.0,"X":418.0,"Y":147.0}]},{"StartTime":81651.0,"Objects":[{"StartTime":81651.0,"EndTime":81651.0,"X":352.0,"Y":126.0}]},{"StartTime":81762.0,"Objects":[{"StartTime":81762.0,"EndTime":81762.0,"X":281.0,"Y":149.0}]},{"StartTime":81874.0,"Objects":[{"StartTime":81874.0,"EndTime":81874.0,"X":239.0,"Y":221.0}]},{"StartTime":81985.0,"Objects":[{"StartTime":81985.0,"EndTime":81985.0,"X":159.0,"Y":262.0}]},{"StartTime":82096.0,"Objects":[{"StartTime":82096.0,"EndTime":82096.0,"X":66.0,"Y":234.0}]},{"StartTime":82207.0,"Objects":[{"StartTime":82207.0,"EndTime":82207.0,"X":11.0,"Y":145.0}]},{"StartTime":82318.0,"Objects":[{"StartTime":82318.0,"EndTime":82318.0,"X":55.0,"Y":33.0}]},{"StartTime":82540.0,"Objects":[{"StartTime":82540.0,"EndTime":82540.0,"X":273.0,"Y":44.0}]},{"StartTime":82651.0,"Objects":[{"StartTime":82651.0,"EndTime":82651.0,"X":320.0,"Y":103.0}]},{"StartTime":82762.0,"Objects":[{"StartTime":82762.0,"EndTime":82762.0,"X":394.0,"Y":118.0}]},{"StartTime":82874.0,"Objects":[{"StartTime":82874.0,"EndTime":82874.0,"X":468.0,"Y":100.0}]},{"StartTime":82985.0,"Objects":[{"StartTime":82985.0,"EndTime":82985.0,"X":507.0,"Y":36.0}]},{"StartTime":83207.0,"Objects":[{"StartTime":83207.0,"EndTime":83207.0,"X":495.0,"Y":19.0}]},{"StartTime":83318.0,"Objects":[{"StartTime":83318.0,"EndTime":83318.0,"X":335.0,"Y":83.0}]},{"StartTime":83429.0,"Objects":[{"StartTime":83429.0,"EndTime":83429.0,"X":453.0,"Y":81.0}]},{"StartTime":83540.0,"Objects":[{"StartTime":83540.0,"EndTime":83540.0,"X":283.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83689.0,"EndTime":83689.0,"X":154.807114,"Y":79.37676,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":83874.0,"Objects":[{"StartTime":83874.0,"EndTime":83874.0,"X":60.0,"Y":238.0}]},{"StartTime":83985.0,"Objects":[{"StartTime":83985.0,"EndTime":83985.0,"X":21.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84134.0,"EndTime":84134.0,"X":160.221619,"Y":176.913727,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84318.0,"Objects":[{"StartTime":84318.0,"EndTime":84318.0,"X":252.0,"Y":206.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84393.0,"EndTime":84393.0,"X":268.054169,"Y":136.0318,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84540.0,"Objects":[{"StartTime":84540.0,"EndTime":84540.0,"X":139.0,"Y":257.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84615.0,"EndTime":84615.0,"X":140.643234,"Y":328.635956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84762.0,"Objects":[{"StartTime":84762.0,"EndTime":84762.0,"X":240.0,"Y":379.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84892.0,"EndTime":84892.0,"X":311.649658,"Y":350.824829,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84985.0,"Objects":[{"StartTime":84985.0,"EndTime":84985.0,"X":312.0,"Y":351.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85060.0,"EndTime":85060.0,"X":270.3759,"Y":292.868469,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85207.0,"Objects":[{"StartTime":85207.0,"EndTime":85207.0,"X":359.0,"Y":165.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85337.0,"EndTime":85337.0,"X":372.53064,"Y":264.7404,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85429.0,"Objects":[{"StartTime":85429.0,"EndTime":85429.0,"X":373.0,"Y":265.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85504.0,"EndTime":85504.0,"X":446.400818,"Y":280.405121,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85651.0,"Objects":[{"StartTime":85651.0,"EndTime":85651.0,"X":498.0,"Y":139.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85837.0,"EndTime":85837.0,"X":394.23114,"Y":13.5172443,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85985.0,"Objects":[{"StartTime":85985.0,"EndTime":85985.0,"X":394.0,"Y":13.0}]},{"StartTime":86096.0,"Objects":[{"StartTime":86096.0,"EndTime":86096.0,"X":301.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86171.0,"EndTime":86171.0,"X":226.398117,"Y":84.28256,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86318.0,"Objects":[{"StartTime":86318.0,"EndTime":86318.0,"X":66.0,"Y":66.0}]},{"StartTime":86429.0,"Objects":[{"StartTime":86429.0,"EndTime":86429.0,"X":13.0,"Y":136.0}]},{"StartTime":86540.0,"Objects":[{"StartTime":86540.0,"EndTime":86540.0,"X":72.0,"Y":193.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86670.0,"EndTime":86670.0,"X":176.5301,"Y":191.3274,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86762.0,"Objects":[{"StartTime":86762.0,"EndTime":86762.0,"X":176.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86837.0,"EndTime":86837.0,"X":153.167648,"Y":261.1704,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86985.0,"Objects":[{"StartTime":86985.0,"EndTime":86985.0,"X":309.0,"Y":370.0}]},{"StartTime":87096.0,"Objects":[{"StartTime":87096.0,"EndTime":87096.0,"X":359.0,"Y":310.0}]},{"StartTime":87207.0,"Objects":[{"StartTime":87207.0,"EndTime":87207.0,"X":283.0,"Y":297.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87282.0,"EndTime":87282.0,"X":210.457672,"Y":316.042358,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87429.0,"Objects":[{"StartTime":87429.0,"EndTime":87429.0,"X":4.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87615.0,"EndTime":87615.0,"X":127.740509,"Y":264.675873,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87762.0,"Objects":[{"StartTime":87762.0,"EndTime":87762.0,"X":238.0,"Y":217.0}]},{"StartTime":87874.0,"Objects":[{"StartTime":87874.0,"EndTime":87874.0,"X":183.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87949.0,"EndTime":87949.0,"X":108.341415,"Y":112.851837,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88096.0,"Objects":[{"StartTime":88096.0,"EndTime":88096.0,"X":98.0,"Y":33.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88171.0,"EndTime":88171.0,"X":23.3245468,"Y":26.03029,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88318.0,"Objects":[{"StartTime":88318.0,"EndTime":88318.0,"X":306.0,"Y":182.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88393.0,"EndTime":88393.0,"X":380.658569,"Y":174.851837,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88540.0,"Objects":[{"StartTime":88540.0,"EndTime":88540.0,"X":391.0,"Y":95.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88615.0,"EndTime":88615.0,"X":465.6667,"Y":87.9369354,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88762.0,"Objects":[{"StartTime":88762.0,"EndTime":88762.0,"X":232.0,"Y":28.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88789.0,"EndTime":88789.0,"X":225.089172,"Y":64.85771,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88874.0,"Objects":[{"StartTime":88874.0,"EndTime":88874.0,"X":243.0,"Y":39.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88901.0,"EndTime":88901.0,"X":236.089172,"Y":75.85771,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88985.0,"Objects":[{"StartTime":88985.0,"EndTime":88985.0,"X":256.0,"Y":50.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89012.0,"EndTime":89012.0,"X":250.978073,"Y":87.16222,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89207.0,"Objects":[{"StartTime":89207.0,"EndTime":89207.0,"X":485.0,"Y":87.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89262.0,"EndTime":89262.0,"X":493.085876,"Y":50.6135063,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89318.0,"EndTime":89318.0,"X":485.049,"Y":86.77947,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89337.0,"EndTime":89337.0,"X":493.1349,"Y":50.3929863,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89429.0,"Objects":[{"StartTime":89429.0,"EndTime":89429.0,"X":396.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89504.0,"EndTime":89504.0,"X":410.34082,"Y":193.61618,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89651.0,"Objects":[{"StartTime":89651.0,"EndTime":89651.0,"X":471.0,"Y":317.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89837.0,"EndTime":89837.0,"X":330.6769,"Y":326.25708,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90096.0,"Objects":[{"StartTime":90096.0,"EndTime":90096.0,"X":61.0,"Y":239.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90282.0,"EndTime":90282.0,"X":201.32309,"Y":248.2571,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90540.0,"Objects":[{"StartTime":90540.0,"EndTime":90540.0,"X":367.0,"Y":21.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90615.0,"EndTime":90615.0,"X":328.4434,"Y":82.729866,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90762.0,"Objects":[{"StartTime":90762.0,"EndTime":90762.0,"X":163.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90837.0,"EndTime":90837.0,"X":201.556625,"Y":157.729874,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90985.0,"Objects":[{"StartTime":90985.0,"EndTime":90985.0,"X":190.0,"Y":346.0}]},{"StartTime":91096.0,"Objects":[{"StartTime":91096.0,"EndTime":91096.0,"X":328.0,"Y":272.0}]},{"StartTime":91207.0,"Objects":[{"StartTime":91207.0,"EndTime":91207.0,"X":154.0,"Y":272.0}]},{"StartTime":91318.0,"Objects":[{"StartTime":91318.0,"EndTime":91318.0,"X":365.0,"Y":338.0}]},{"StartTime":91429.0,"Objects":[{"StartTime":91429.0,"EndTime":91429.0,"X":257.0,"Y":382.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":91615.0,"EndTime":91615.0,"X":259.5329,"Y":236.323334,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":91762.0,"Objects":[{"StartTime":91762.0,"EndTime":91762.0,"X":325.0,"Y":196.0}]},{"StartTime":91874.0,"Objects":[{"StartTime":91874.0,"EndTime":91874.0,"X":325.0,"Y":196.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92004.0,"EndTime":92004.0,"X":429.818634,"Y":189.708939,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92096.0,"Objects":[{"StartTime":92096.0,"EndTime":92096.0,"X":430.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92171.0,"EndTime":92171.0,"X":418.874451,"Y":115.829781,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92318.0,"Objects":[{"StartTime":92318.0,"EndTime":92318.0,"X":313.0,"Y":19.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92448.0,"EndTime":92448.0,"X":201.559357,"Y":34.4023666,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92540.0,"Objects":[{"StartTime":92540.0,"EndTime":92540.0,"X":201.0,"Y":34.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92615.0,"EndTime":92615.0,"X":212.6055,"Y":108.096649,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92762.0,"Objects":[{"StartTime":92762.0,"EndTime":92762.0,"X":209.0,"Y":252.0}]},{"StartTime":92874.0,"Objects":[{"StartTime":92874.0,"EndTime":92874.0,"X":156.0,"Y":261.0}]},{"StartTime":92985.0,"Objects":[{"StartTime":92985.0,"EndTime":92985.0,"X":112.0,"Y":231.0}]},{"StartTime":93096.0,"Objects":[{"StartTime":93096.0,"EndTime":93096.0,"X":60.0,"Y":222.0}]},{"StartTime":93207.0,"Objects":[{"StartTime":93207.0,"EndTime":93207.0,"X":13.0,"Y":247.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93282.0,"EndTime":93282.0,"X":13.18664,"Y":318.8803,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93429.0,"Objects":[{"StartTime":93429.0,"EndTime":93429.0,"X":173.0,"Y":186.0}]},{"StartTime":93540.0,"Objects":[{"StartTime":93540.0,"EndTime":93540.0,"X":215.0,"Y":120.0}]},{"StartTime":93651.0,"Objects":[{"StartTime":93651.0,"EndTime":93651.0,"X":162.0,"Y":49.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93726.0,"EndTime":93726.0,"X":90.69035,"Y":49.0886574,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93874.0,"Objects":[{"StartTime":93874.0,"EndTime":93874.0,"X":234.0,"Y":138.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93949.0,"EndTime":93949.0,"X":303.1729,"Y":152.77562,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94096.0,"Objects":[{"StartTime":94096.0,"EndTime":94096.0,"X":385.0,"Y":39.0}]},{"StartTime":94318.0,"Objects":[{"StartTime":94318.0,"EndTime":94318.0,"X":337.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":94393.0,"EndTime":94393.0,"X":324.257,"Y":359.909515,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94540.0,"Objects":[{"StartTime":94540.0,"EndTime":94540.0,"X":409.0,"Y":327.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":94837.0,"EndTime":94837.0,"X":285.0893,"Y":225.489716,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94985.0,"Objects":[{"StartTime":94985.0,"EndTime":94985.0,"X":239.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95060.0,"EndTime":95060.0,"X":190.987534,"Y":371.081482,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95207.0,"Objects":[{"StartTime":95207.0,"EndTime":95207.0,"X":34.0,"Y":344.0}]},{"StartTime":95318.0,"Objects":[{"StartTime":95318.0,"EndTime":95318.0,"X":21.0,"Y":309.0}]},{"StartTime":95429.0,"Objects":[{"StartTime":95429.0,"EndTime":95429.0,"X":14.0,"Y":265.0}]},{"StartTime":95540.0,"Objects":[{"StartTime":95540.0,"EndTime":95540.0,"X":27.0,"Y":223.0}]},{"StartTime":95651.0,"Objects":[{"StartTime":95651.0,"EndTime":95651.0,"X":54.0,"Y":179.0}]},{"StartTime":95762.0,"Objects":[{"StartTime":95762.0,"EndTime":95762.0,"X":94.0,"Y":147.0}]},{"StartTime":95873.0,"Objects":[{"StartTime":95873.0,"EndTime":95873.0,"X":160.0,"Y":126.0}]},{"StartTime":95984.0,"Objects":[{"StartTime":95984.0,"EndTime":95984.0,"X":231.0,"Y":149.0}]},{"StartTime":96096.0,"Objects":[{"StartTime":96096.0,"EndTime":96096.0,"X":273.0,"Y":221.0}]},{"StartTime":96207.0,"Objects":[{"StartTime":96207.0,"EndTime":96207.0,"X":353.0,"Y":262.0}]},{"StartTime":96318.0,"Objects":[{"StartTime":96318.0,"EndTime":96318.0,"X":446.0,"Y":234.0}]},{"StartTime":96429.0,"Objects":[{"StartTime":96429.0,"EndTime":96429.0,"X":501.0,"Y":145.0}]},{"StartTime":96540.0,"Objects":[{"StartTime":96540.0,"EndTime":96540.0,"X":450.0,"Y":36.0}]},{"StartTime":96762.0,"Objects":[{"StartTime":96762.0,"EndTime":96762.0,"X":239.0,"Y":44.0}]},{"StartTime":96873.0,"Objects":[{"StartTime":96873.0,"EndTime":96873.0,"X":192.0,"Y":103.0}]},{"StartTime":96984.0,"Objects":[{"StartTime":96984.0,"EndTime":96984.0,"X":118.0,"Y":118.0}]},{"StartTime":97096.0,"Objects":[{"StartTime":97096.0,"EndTime":97096.0,"X":44.0,"Y":100.0}]},{"StartTime":97207.0,"Objects":[{"StartTime":97207.0,"EndTime":97207.0,"X":5.0,"Y":36.0}]},{"StartTime":97429.0,"Objects":[{"StartTime":97429.0,"EndTime":97429.0,"X":17.0,"Y":19.0}]},{"StartTime":97540.0,"Objects":[{"StartTime":97540.0,"EndTime":97540.0,"X":146.0,"Y":51.0}]},{"StartTime":97651.0,"Objects":[{"StartTime":97651.0,"EndTime":97651.0,"X":29.0,"Y":122.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97781.0,"EndTime":97781.0,"X":36.8451042,"Y":177.700241,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97874.0,"Objects":[{"StartTime":97874.0,"EndTime":97874.0,"X":44.0,"Y":197.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97949.0,"EndTime":97949.0,"X":144.239655,"Y":225.070267,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98096.0,"Objects":[{"StartTime":98096.0,"EndTime":98096.0,"X":301.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98226.0,"EndTime":98226.0,"X":377.703552,"Y":135.967728,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98318.0,"Objects":[{"StartTime":98318.0,"EndTime":98318.0,"X":398.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98393.0,"EndTime":98393.0,"X":420.6091,"Y":246.7476,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98540.0,"Objects":[{"StartTime":98540.0,"EndTime":98540.0,"X":265.0,"Y":371.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98615.0,"EndTime":98615.0,"X":190.5137,"Y":362.2369,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98762.0,"Objects":[{"StartTime":98762.0,"EndTime":98762.0,"X":127.0,"Y":202.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98837.0,"EndTime":98837.0,"X":138.654449,"Y":127.911041,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98985.0,"Objects":[{"StartTime":98985.0,"EndTime":98985.0,"X":193.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99115.0,"EndTime":99115.0,"X":91.16292,"Y":289.2349,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99207.0,"Objects":[{"StartTime":99207.0,"EndTime":99207.0,"X":91.0,"Y":290.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99282.0,"EndTime":99282.0,"X":80.26821,"Y":364.2282,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99429.0,"Objects":[{"StartTime":99429.0,"EndTime":99429.0,"X":20.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99559.0,"EndTime":99559.0,"X":23.5322342,"Y":77.30794,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99651.0,"Objects":[{"StartTime":99651.0,"EndTime":99651.0,"X":23.0,"Y":78.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99726.0,"EndTime":99726.0,"X":97.15753,"Y":89.20986,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99874.0,"Objects":[{"StartTime":99874.0,"EndTime":99874.0,"X":271.0,"Y":74.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99949.0,"EndTime":99949.0,"X":231.432739,"Y":15.2187185,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":100096.0,"Objects":[{"StartTime":100096.0,"EndTime":100096.0,"X":186.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":100171.0,"EndTime":100171.0,"X":253.138412,"Y":157.416565,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":100318.0,"Objects":[{"StartTime":100318.0,"EndTime":100318.0,"X":132.0,"Y":63.0}]},{"StartTime":100540.0,"Objects":[{"StartTime":100540.0,"EndTime":100540.0,"X":253.0,"Y":157.0}]},{"StartTime":100651.0,"Objects":[{"StartTime":100651.0,"EndTime":100651.0,"X":285.0,"Y":167.0}]},{"StartTime":100762.0,"Objects":[{"StartTime":100762.0,"EndTime":100762.0,"X":357.0,"Y":129.0}]},{"StartTime":100873.0,"Objects":[{"StartTime":100873.0,"EndTime":100873.0,"X":389.0,"Y":139.0}]},{"StartTime":100985.0,"Objects":[{"StartTime":100985.0,"EndTime":100985.0,"X":422.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":101060.0,"EndTime":101060.0,"X":410.5588,"Y":219.494064,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":101207.0,"Objects":[{"StartTime":101207.0,"EndTime":101207.0,"X":459.0,"Y":377.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":101282.0,"EndTime":101282.0,"X":465.133026,"Y":305.73877,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":101429.0,"Objects":[{"StartTime":101429.0,"EndTime":101429.0,"X":398.0,"Y":242.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":101504.0,"EndTime":101504.0,"X":324.167938,"Y":255.1843,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":101651.0,"Objects":[{"StartTime":101651.0,"EndTime":101651.0,"X":165.0,"Y":354.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":101948.0,"EndTime":101948.0,"X":197.2489,"Y":249.27066,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102096.0,"Objects":[{"StartTime":102096.0,"EndTime":102096.0,"X":302.0,"Y":165.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102171.0,"EndTime":102171.0,"X":292.2159,"Y":90.64093,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102318.0,"Objects":[{"StartTime":102318.0,"EndTime":102318.0,"X":392.0,"Y":91.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102393.0,"EndTime":102393.0,"X":382.340851,"Y":16.6245956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102540.0,"Objects":[{"StartTime":102540.0,"EndTime":102540.0,"X":192.0,"Y":229.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102615.0,"EndTime":102615.0,"X":207.768524,"Y":155.676361,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"X":107.0,"Y":172.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102837.0,"EndTime":102837.0,"X":122.768524,"Y":98.67637,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102985.0,"Objects":[{"StartTime":102985.0,"EndTime":102985.0,"X":314.0,"Y":332.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103012.0,"EndTime":103012.0,"X":307.835052,"Y":295.010223,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103096.0,"Objects":[{"StartTime":103096.0,"EndTime":103096.0,"X":343.0,"Y":345.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103123.0,"EndTime":103123.0,"X":336.835052,"Y":308.010223,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103207.0,"Objects":[{"StartTime":103207.0,"EndTime":103207.0,"X":370.0,"Y":358.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103234.0,"EndTime":103234.0,"X":363.835052,"Y":321.010223,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103429.0,"Objects":[{"StartTime":103429.0,"EndTime":103429.0,"X":380.0,"Y":117.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103484.0,"EndTime":103484.0,"X":374.728638,"Y":80.1005249,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103540.0,"EndTime":103540.0,"X":379.968048,"Y":116.776367,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103559.0,"EndTime":103559.0,"X":374.6967,"Y":79.87689,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103651.0,"Objects":[{"StartTime":103651.0,"EndTime":103651.0,"X":444.0,"Y":166.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103726.0,"EndTime":103726.0,"X":378.552429,"Y":197.3988,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103874.0,"Objects":[{"StartTime":103874.0,"EndTime":103874.0,"X":392.0,"Y":2.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103949.0,"EndTime":103949.0,"X":451.723328,"Y":43.11612,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104096.0,"Objects":[{"StartTime":104096.0,"EndTime":104096.0,"X":271.0,"Y":129.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104171.0,"EndTime":104171.0,"X":275.70752,"Y":56.6180077,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104318.0,"Objects":[{"StartTime":104318.0,"EndTime":104318.0,"X":505.0,"Y":113.0}]},{"StartTime":104540.0,"Objects":[{"StartTime":104540.0,"EndTime":104540.0,"X":269.0,"Y":217.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104595.0,"EndTime":104595.0,"X":231.732529,"Y":216.296829,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104651.0,"EndTime":104651.0,"X":268.774139,"Y":216.995743,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104670.0,"EndTime":104670.0,"X":231.506683,"Y":216.292572,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104762.0,"Objects":[{"StartTime":104762.0,"EndTime":104762.0,"X":360.0,"Y":220.0}]},{"StartTime":104874.0,"Objects":[{"StartTime":104874.0,"EndTime":104874.0,"X":296.0,"Y":384.0}]},{"StartTime":105096.0,"Objects":[{"StartTime":105096.0,"EndTime":105096.0,"X":102.0,"Y":307.0}]},{"StartTime":105207.0,"Objects":[{"StartTime":105207.0,"EndTime":105207.0,"X":102.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":105504.0,"EndTime":105504.0,"X":359.15506,"Y":319.9753,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":105651.0,"Objects":[{"StartTime":105651.0,"EndTime":105651.0,"X":439.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":105948.0,"EndTime":105948.0,"X":360.576447,"Y":251.735214,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106096.0,"Objects":[{"StartTime":106096.0,"EndTime":106096.0,"X":373.0,"Y":258.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106393.0,"EndTime":106393.0,"X":419.839447,"Y":322.692932,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106651.0,"Objects":[{"StartTime":106651.0,"EndTime":106651.0,"X":420.0,"Y":323.0}]},{"StartTime":106763.0,"Objects":[{"StartTime":106763.0,"EndTime":106763.0,"X":469.0,"Y":245.0}]},{"StartTime":106874.0,"Objects":[{"StartTime":106874.0,"EndTime":106874.0,"X":508.0,"Y":322.0}]},{"StartTime":106985.0,"Objects":[{"StartTime":106985.0,"EndTime":106985.0,"X":379.0,"Y":245.0}]},{"StartTime":107207.0,"Objects":[{"StartTime":107207.0,"EndTime":107207.0,"X":483.0,"Y":105.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":107262.0,"EndTime":107262.0,"X":475.3316,"Y":49.6172256,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":107318.0,"EndTime":107318.0,"X":482.953522,"Y":104.664345,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":107337.0,"EndTime":107337.0,"X":475.285126,"Y":49.28157,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":107429.0,"Objects":[{"StartTime":107429.0,"EndTime":107429.0,"X":462.0,"Y":30.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":107615.0,"EndTime":107615.0,"X":324.7961,"Y":30.4987278,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":107874.0,"Objects":[{"StartTime":107874.0,"EndTime":107874.0,"X":272.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108060.0,"EndTime":108060.0,"X":134.090317,"Y":110.785133,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108207.0,"Objects":[{"StartTime":108207.0,"EndTime":108207.0,"X":103.0,"Y":213.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108393.0,"EndTime":108393.0,"X":243.658188,"Y":205.751328,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108540.0,"Objects":[{"StartTime":108540.0,"EndTime":108540.0,"X":393.0,"Y":187.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108615.0,"EndTime":108615.0,"X":386.959076,"Y":261.756317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108763.0,"Objects":[{"StartTime":108763.0,"EndTime":108763.0,"X":333.0,"Y":338.0}]},{"StartTime":108874.0,"Objects":[{"StartTime":108874.0,"EndTime":108874.0,"X":467.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108929.0,"EndTime":108929.0,"X":503.151581,"Y":298.3925,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108949.0,"EndTime":108949.0,"X":467.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109096.0,"Objects":[{"StartTime":109096.0,"EndTime":109096.0,"X":409.0,"Y":380.0}]},{"StartTime":109207.0,"Objects":[{"StartTime":109207.0,"EndTime":109207.0,"X":300.0,"Y":257.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109282.0,"EndTime":109282.0,"X":277.2678,"Y":187.976425,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109429.0,"Objects":[{"StartTime":109429.0,"EndTime":109429.0,"X":401.0,"Y":118.0}]},{"StartTime":109651.0,"Objects":[{"StartTime":109651.0,"EndTime":109651.0,"X":401.0,"Y":118.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109837.0,"EndTime":109837.0,"X":326.407349,"Y":110.193794,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109985.0,"Objects":[{"StartTime":109985.0,"EndTime":109985.0,"X":256.0,"Y":15.0}]},{"StartTime":110096.0,"Objects":[{"StartTime":110096.0,"EndTime":110096.0,"X":175.0,"Y":121.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110226.0,"EndTime":110226.0,"X":128.04184,"Y":25.2383614,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110318.0,"Objects":[{"StartTime":110318.0,"EndTime":110318.0,"X":128.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110448.0,"EndTime":110448.0,"X":68.84166,"Y":114.866982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110540.0,"Objects":[{"StartTime":110540.0,"EndTime":110540.0,"X":69.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110670.0,"EndTime":110670.0,"X":175.436081,"Y":123.06649,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110762.0,"Objects":[{"StartTime":110762.0,"EndTime":110762.0,"X":160.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110837.0,"EndTime":110837.0,"X":52.99624,"Y":242.365173,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110985.0,"Objects":[{"StartTime":110985.0,"EndTime":110985.0,"X":193.0,"Y":334.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111060.0,"EndTime":111060.0,"X":237.04248,"Y":301.937531,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111207.0,"Objects":[{"StartTime":111207.0,"EndTime":111207.0,"X":335.0,"Y":325.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111282.0,"EndTime":111282.0,"X":372.85437,"Y":365.2907,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111429.0,"Objects":[{"StartTime":111429.0,"EndTime":111429.0,"X":273.0,"Y":383.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111726.0,"EndTime":111726.0,"X":303.272858,"Y":216.98761,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111874.0,"Objects":[{"StartTime":111874.0,"EndTime":111874.0,"X":383.0,"Y":255.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111949.0,"EndTime":111949.0,"X":454.046539,"Y":273.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":112096.0,"Objects":[{"StartTime":112096.0,"EndTime":112096.0,"X":209.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":112171.0,"EndTime":112171.0,"X":136.491043,"Y":208.167511,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":112318.0,"Objects":[{"StartTime":112318.0,"EndTime":112318.0,"X":403.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":112615.0,"EndTime":112615.0,"X":236.823761,"Y":114.722252,"StackOffset":{"X":0.0,"Y":0.0}}]}]}
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554.osu b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554.osu
new file mode 100644
index 000000000000..e118bc2db2db
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/1341554.osu
@@ -0,0 +1,941 @@
+osu file format v14
+
+[General]
+AudioLeadIn: 0
+PreviewTime: 76429
+Countdown: 0
+SampleSet: Soft
+StackLeniency: 0.2
+Mode: 0
+LetterboxInBreaks: 0
+WidescreenStoryboard: 1
+
+[Difficulty]
+HPDrainRate:5
+CircleSize:4.3
+OverallDifficulty:8
+ApproachRate:9.3
+SliderMultiplier:2.99999995231628
+SliderTickRate:1
+
+[Events]
+//Background and Video events
+//Break Periods
+//Storyboard Layer 0 (Background)
+//Storyboard Layer 1 (Fail)
+//Storyboard Layer 2 (Pass)
+//Storyboard Layer 3 (Foreground)
+//Storyboard Sound Samples
+
+[TimingPoints]
+763,444.444444444444,4,2,1,60,1,0
+763,-111.111111111111,4,2,1,60,0,0
+1929,-100,4,2,1,5,0,0
+1985,-100,4,2,1,60,0,0
+2040,-100,4,2,1,5,0,0
+2096,-153.846153846153,4,2,1,60,0,0
+2429,-133.333333333333,4,2,1,5,0,0
+2540,-71.4285714285714,4,2,1,70,0,1
+2985,-100,4,2,1,70,0,1
+4485,-100,4,2,1,5,0,1
+4540,-100,4,2,1,70,0,1
+4707,-100,4,2,1,5,0,1
+4762,-100,4,2,1,70,0,1
+4929,-100,4,2,1,5,0,1
+4985,-100,4,2,1,70,0,1
+5096,-83.3333333333333,4,2,1,70,0,1
+5429,-133.333333333333,4,2,1,70,0,1
+5596,-133.333333333333,4,2,1,70,0,1
+5652,-133.333333333333,4,2,1,70,0,1
+5818,-133.333333333333,4,2,1,70,0,1
+5874,-133.333333333333,4,2,1,70,0,1
+6040,-133.333333333333,4,2,1,70,0,1
+6096,-100,4,2,1,70,0,1
+6540,-100,4,2,1,70,0,1
+8040,-100,4,2,1,5,0,1
+8096,-100,4,2,1,70,0,1
+8262,-100,4,2,1,5,0,1
+8318,-100,4,2,1,70,0,1
+8485,-100,4,2,1,5,0,1
+8540,-133.333333333333,4,2,1,70,0,1
+8874,-100,4,2,1,5,0,1
+8985,-100,4,2,1,70,0,1
+9651,-100,4,2,1,70,0,1
+10096,-100,4,2,1,70,0,1
+11596,-100,4,2,1,5,0,1
+11651,-100,4,2,1,70,0,1
+11818,-100,4,2,1,5,0,1
+11873,-100,4,2,1,70,0,1
+11874,-80,4,2,1,70,0,1
+12040,-80,4,2,1,5,0,1
+12096,-80,4,2,1,70,0,1
+12207,-133.333333333333,4,2,1,70,0,1
+12429,-100,4,2,1,5,0,1
+12540,-100,4,2,1,70,0,1
+12707,-100,4,2,1,70,0,1
+12763,-100,4,2,1,70,0,1
+12929,-100,4,2,1,70,0,1
+12985,-100,4,2,1,70,0,1
+13429,-300,4,2,1,70,0,1
+13651,-83.3333333333333,4,2,1,70,0,1
+13874,-100,4,2,1,70,0,1
+15151,-100,4,2,1,5,0,1
+15207,-100,4,2,1,70,0,1
+15373,-100,4,2,1,5,0,1
+15429,-100,4,2,1,70,0,1
+15596,-100,4,2,1,5,0,1
+15651,-100,4,2,1,70,0,1
+15985,-100,4,2,1,5,0,1
+16096,-100,4,2,1,70,0,1
+16262,-100,4,2,1,70,0,1
+16318,-83.3333333333333,4,2,1,70,0,1
+16651,-100,4,2,1,70,0,1
+16762,-133.333333333333,4,2,1,60,0,0
+17096,-133.333333333333,4,2,1,5,0,0
+17207,-200,4,2,1,60,0,0
+18096,-66.6666666666667,4,2,1,60,0,0
+18262,-66.6666666666667,4,2,1,5,0,0
+18318,-66.6666666666667,4,2,1,60,0,0
+18540,-100,4,2,1,60,0,0
+18874,-100,4,2,1,5,0,0
+18985,-100,4,2,1,60,0,0
+19985,-100,4,2,1,60,0,0
+20485,-100,4,2,1,5,0,0
+20540,-100,4,2,1,60,0,0
+20707,-100,4,2,1,5,0,0
+20762,-200,4,2,1,60,0,0
+20985,-100,4,2,1,60,0,0
+21095,-100,4,2,1,60,0,0
+21374,-100,4,2,1,5,0,0
+21429,-100,4,2,1,60,0,0
+21596,-100,4,2,1,5,0,0
+21651,-100,4,2,1,60,0,0
+21818,-100,4,2,1,5,0,0
+21874,-66.6666666666667,4,2,1,60,0,0
+21985,-100,4,2,1,60,0,0
+22096,-100,4,2,1,60,0,0
+22985,-200,4,2,1,60,0,0
+23318,-100,4,2,1,60,0,0
+23429,-100,4,2,1,60,0,0
+23540,-100,4,2,1,60,0,0
+23651,-100,4,2,1,60,0,0
+23762,-100,4,2,1,60,0,0
+23874,-133.333333333333,4,2,1,60,0,0
+24208,-133.333333333333,4,2,1,5,0,0
+24318,-200,4,2,1,5,0,0
+24319,-200,4,2,1,60,0,0
+24540,-100,4,2,1,60,0,0
+24651,-66.6666666666667,4,2,1,60,0,0
+24874,-100,4,2,1,60,0,0
+25374,-100,4,2,1,5,0,0
+25429,-100,4,2,1,60,0,0
+27096,-100,4,2,1,60,0,0
+27596,-100,4,2,1,5,0,0
+27651,-100,4,2,1,60,0,0
+27818,-100,4,2,1,5,0,0
+27873,-133.333333333333,4,2,1,60,0,0
+28096,-100,4,2,1,60,0,0
+28206,-100,4,2,1,60,0,0
+28485,-100,4,2,1,5,0,0
+28540,-100,4,2,1,60,0,0
+28707,-100,4,2,1,5,0,0
+28762,-100,4,2,1,60,0,0
+28929,-100,4,2,1,5,0,0
+28985,-66.6666666666667,4,2,1,60,0,0
+29151,-100,4,2,1,60,0,0
+29207,-100,4,2,1,60,0,0
+29651,-100,4,2,1,60,0,0
+30429,-100,4,2,1,60,0,0
+30540,-58.8235294117647,4,2,1,60,0,0
+30874,-58.8235294117647,4,2,1,5,0,0
+30985,-58.8235294117647,4,2,1,60,0,0
+31040,-100,4,2,1,5,0,0
+31429,-100,4,2,1,60,0,0
+32485,-100,4,2,1,60,0,0
+32540,-100,4,2,1,60,0,0
+32707,-100,4,2,1,60,0,0
+32762,-100,4,2,1,60,0,0
+32985,-100,4,2,1,60,0,0
+34318,-50,4,2,1,60,0,0
+34485,-100,4,2,1,5,0,0
+34540,-100,4,2,1,60,0,0
+35151,-100,4,2,1,5,0,0
+35207,-100,4,2,1,60,0,0
+35374,-100,4,2,1,5,0,0
+35430,-100,4,2,1,60,0,0
+35818,-100,4,2,1,5,0,0
+35874,-200,4,2,1,60,0,0
+36429,-100,4,2,1,60,0,0
+37818,-100,4,2,1,5,0,0
+37874,-100,4,2,1,60,0,0
+38040,-100,4,2,1,5,0,0
+38096,-50,4,2,1,60,0,0
+38151,-100,4,2,1,5,0,0
+38540,-100,4,2,1,60,0,0
+39596,-100,4,2,1,5,0,0
+39651,-100,4,2,1,60,0,0
+39818,-100,4,2,1,60,0,0
+39873,-100,4,2,1,60,0,0
+40096,-100,4,2,1,60,0,0
+41429,-50,4,2,1,60,0,0
+41596,-100,4,2,1,5,0,0
+41651,-100,4,2,1,60,0,0
+41818,-100,4,2,1,5,0,0
+41874,-100,4,2,1,60,0,0
+42040,-100,4,2,1,5,0,0
+42096,-100,4,2,1,60,0,0
+44318,-100,4,2,1,60,0,0
+44762,-83.3333333333333,4,2,1,60,0,0
+45207,-66.6666666666667,4,2,1,45,0,0
+45651,-133.333333333333,4,2,1,45,0,0
+51540,-133.333333333333,4,2,1,50,0,0
+51651,-133.333333333333,4,2,1,45,0,0
+52318,-133.333333333333,4,2,1,45,0,0
+58540,-76.9230769230769,4,2,1,45,0,0
+58818,-100,4,2,1,45,0,0
+58874,-111.111111111111,4,2,1,45,0,0
+59318,-111.111111111111,4,2,1,45,0,0
+59429,-83.3333333333333,4,2,1,60,0,0
+59540,-83.3333333333333,4,2,1,5,0,0
+59874,-100,4,2,1,60,0,0
+60096,-100,4,2,1,5,0,0
+60207,-100,4,2,1,60,0,0
+60707,-100,4,2,1,5,0,0
+60763,-100,4,2,1,60,0,0
+60818,-100,4,2,1,5,0,0
+60874,-100,4,2,1,60,0,0
+60929,-100,4,2,1,5,0,0
+60985,-100,4,2,1,60,0,0
+61040,-100,4,2,1,5,0,0
+61096,-100,4,2,1,60,0,0
+61151,-100,4,2,1,5,0,0
+61207,-100,4,2,1,60,0,0
+61596,-100,4,2,1,5,0,0
+61651,-100,4,2,1,60,0,0
+61762,-83.3333333333333,4,2,1,60,0,0
+61985,-100,4,2,1,5,0,0
+62096,-100,4,2,1,60,0,0
+62151,-100,4,2,1,5,0,0
+62207,-100,4,2,1,60,0,0
+62262,-100,4,2,1,5,0,0
+62318,-100,4,2,1,60,0,0
+62374,-100,4,2,1,5,0,0
+62430,-100,4,2,1,60,0,0
+62485,-100,4,2,1,5,0,0
+62540,-100,4,2,1,60,0,0
+62596,-100,4,2,1,5,0,0
+62651,-100,4,2,1,60,0,0
+62707,-100,4,2,1,5,0,0
+62762,-100,4,2,1,60,0,0
+62818,-100,4,2,1,5,0,0
+62874,-100,4,2,1,60,0,0
+62929,-100,4,2,1,60,0,0
+62930,-100,4,2,1,5,0,0
+62985,-100,4,2,1,60,0,0
+63707,-100,4,2,1,5,0,0
+63762,-100,4,2,1,60,0,0
+64262,-100,4,2,1,5,0,0
+64318,-100,4,2,1,60,0,0
+64485,-100,4,2,1,5,0,0
+64540,-100,4,2,1,60,0,0
+64596,-100,4,2,1,5,0,0
+64651,-100,4,2,1,60,0,0
+64707,-100,4,2,1,5,0,0
+64762,-71.4285714285714,4,2,1,60,0,0
+64929,-71.4285714285714,4,2,1,5,0,0
+64984,-133.333333333333,4,2,1,60,0,0
+65151,-133.333333333333,4,2,1,5,0,0
+65206,-71.4285714285714,4,2,1,60,0,0
+65374,-71.4285714285714,4,2,1,5,0,0
+65429,-133.333333333333,4,2,1,60,0,0
+65596,-133.333333333333,4,2,1,5,0,0
+65651,-100,4,2,1,60,0,0
+66540,-66.6666666666667,4,2,1,60,0,0
+66596,-66.6666666666667,4,2,1,5,0,0
+66929,-100,4,2,1,5,0,0
+66985,-200,4,2,1,60,0,0
+67207,-200,4,2,1,5,0,0
+67318,-100,4,2,1,60,0,0
+67818,-100,4,2,1,5,0,0
+67874,-100,4,2,1,60,0,0
+67929,-100,4,2,1,5,0,0
+67985,-100,4,2,1,60,0,0
+68040,-100,4,2,1,5,0,0
+68096,-100,4,2,1,60,0,0
+68151,-100,4,2,1,5,0,0
+68207,-100,4,2,1,60,0,0
+68262,-100,4,2,1,5,0,0
+68318,-100,4,2,1,60,0,0
+68874,-83.3333333333333,4,2,1,60,0,0
+69096,-100,4,2,1,60,0,0
+69097,-100,4,2,1,5,0,0
+69207,-100,4,2,1,60,0,0
+69263,-100,4,2,1,5,0,0
+69319,-100,4,2,1,60,0,0
+69374,-100,4,2,1,5,0,0
+69430,-100,4,2,1,60,0,0
+69486,-100,4,2,1,5,0,0
+69542,-100,4,2,1,60,0,0
+69597,-100,4,2,1,5,0,0
+69651,-100,4,2,1,60,0,0
+69707,-100,4,2,1,5,0,0
+69762,-100,4,2,1,60,0,0
+69818,-100,4,2,1,5,0,0
+69874,-100,4,2,1,60,0,0
+69929,-100,4,2,1,5,0,0
+69985,-100,4,2,1,60,0,0
+70040,-100,4,2,1,60,0,0
+70041,-100,4,2,1,5,0,0
+70096,-100,4,2,1,60,0,0
+70818,-100,4,2,1,5,0,0
+70873,-100,4,2,1,60,0,0
+71207,-71.4285714285714,4,2,1,60,0,0
+71429,-100,4,2,1,60,0,0
+71874,-71.4285714285714,4,2,1,60,0,0
+72041,-71.4285714285714,4,2,1,5,0,0
+72096,-133.333333333333,4,2,1,60,0,0
+72263,-133.333333333333,4,2,1,5,0,0
+72318,-71.4285714285714,4,2,1,60,0,0
+72485,-71.4285714285714,4,2,1,5,0,0
+72540,-133.333333333333,4,2,1,60,0,0
+72985,-66.6666666666667,4,2,1,60,0,0
+73207,-100,4,2,1,60,0,0
+73651,-133.333333333333,4,2,1,45,0,0
+75318,-133.333333333333,4,2,1,5,0,0
+75429,-133.333333333333,4,2,1,45,0,0
+76762,-100,4,2,1,45,0,0
+77096,-100,4,2,1,5,0,0
+77207,-100,4,2,1,70,0,1
+77818,-100,4,2,1,5,0,1
+77874,-100,4,2,1,70,0,1
+78262,-100,4,2,1,5,0,1
+78318,-100,4,2,1,70,0,1
+78540,-83.3333333333333,4,2,1,70,0,1
+78985,-100,4,2,1,70,0,1
+79596,-100,4,2,1,5,0,1
+79651,-100,4,2,1,70,0,1
+80040,-100,4,2,1,5,0,1
+80096,-100,4,2,1,70,0,1
+80318,-83.3333333333333,4,2,1,70,0,1
+84318,-100,4,2,1,70,0,1
+84929,-100,4,2,1,5,0,1
+84985,-100,4,2,1,70,0,1
+85207,-100,4,2,1,70,0,1
+85374,-100,4,2,1,5,0,1
+85429,-100,4,2,1,70,0,1
+85651,-83.3333333333333,4,2,1,70,0,1
+86096,-100,4,2,1,70,0,1
+86707,-100,4,2,1,5,0,1
+86762,-100,4,2,1,70,0,1
+88818,-100,4,2,1,5,0,1
+88874,-100,4,2,1,70,0,1
+88929,-100,4,2,1,5,0,1
+88985,-100,4,2,1,70,0,1
+89040,-100,4,2,1,5,0,1
+89096,-100,4,2,1,70,0,1
+92040,-100,4,2,1,5,0,1
+92096,-100,4,2,1,70,0,1
+92485,-100,4,2,1,5,0,1
+92540,-100,4,2,1,70,0,1
+97651,-200,4,2,1,70,0,1
+97818,-200,4,2,1,5,0,1
+97874,-66.6666666666667,4,2,1,70,0,1
+97985,-66.6666666666667,4,2,1,70,0,1
+98040,-66.6666666666667,4,2,1,5,0,1
+98096,-133.333333333333,4,2,1,70,0,1
+98262,-133.333333333333,4,2,1,5,0,1
+98318,-66.6666666666667,4,2,1,70,0,1
+98540,-100,4,2,1,70,0,1
+99151,-100,4,2,1,5,0,1
+99207,-100,4,2,1,70,0,1
+99596,-100,4,2,1,5,0,1
+99651,-100,4,2,1,70,0,1
+103040,-100,4,2,1,5,0,1
+103096,-100,4,2,1,70,0,1
+103151,-100,4,2,1,5,0,1
+103207,-100,4,2,1,70,0,1
+103262,-100,4,2,1,5,0,1
+103318,-100,4,2,1,70,0,1
+105207,-83.3333333333333,4,2,1,70,0,1
+105540,-83.3333333333333,4,2,1,70,0,1
+105651,-133.333333333333,4,2,1,60,0,0
+105985,-133.333333333333,4,2,1,5,0,0
+106096,-200,4,2,1,60,0,0
+106985,-66.6666666666667,4,2,1,60,0,0
+107151,-66.6666666666667,4,2,1,5,0,0
+107207,-66.6666666666667,4,2,1,60,0,0
+107429,-100,4,2,1,60,0,0
+107763,-100,4,2,1,5,0,0
+107874,-100,4,2,1,60,0,0
+108874,-100,4,2,1,60,0,0
+109374,-100,4,2,1,5,0,0
+109429,-100,4,2,1,60,0,0
+109596,-100,4,2,1,5,0,0
+109651,-200,4,2,1,60,0,0
+109929,-100,4,2,1,60,0,0
+109984,-100,4,2,1,60,0,0
+110262,-100,4,2,1,5,0,0
+110318,-100,4,2,1,60,0,0
+110485,-100,4,2,1,5,0,0
+110540,-100,4,2,1,60,0,0
+110707,-100,4,2,1,5,0,0
+110762,-66.6666666666667,4,2,1,60,0,0
+110929,-100,4,2,1,60,0,0
+110985,-133.333333333333,4,2,1,60,0,0
+111429,-133.333333333333,4,2,1,60,0,0
+111596,-133.333333333333,4,2,1,60,0,0
+111651,-133.333333333333,4,2,1,60,0,0
+111818,-133.333333333333,4,2,1,60,0,0
+111874,-100,4,2,1,60,0,1
+112318,-83.3333333333333,4,2,1,60,0,1
+112429,-100,4,2,1,5,0,0
+
+
+[Colours]
+Combo1 : 112,75,180
+Combo2 : 0,255,255
+Combo3 : 255,15,117
+Combo4 : 255,135,15
+
+[HitObjects]
+309,230,763,37,0,3:0:0:0:
+485,146,985,2,0,L|406:167,1,67.4999968671799,8|0,3:0|0:0,0:0:0:0:
+374,249,1207,2,0,L|299:227,1,67.4999968671799,8|0,3:0|0:0,0:0:0:0:
+196,91,1429,2,0,L|191:44,3,33.7499984335899,0|0|0|0,3:0|3:0|3:0|3:0,0:0:0:0:
+124,173,1651,2,0,L|131:222,2,44.9999979114532,0|0|0,3:0|3:0|3:0,0:0:0:0:
+221,284,1874,2,0,L|213:208,1,67.4999968671799,0|0,3:0|3:0,0:0:0:0:
+292,86,2096,38,0,L|310:234,1,146.249990980625,12|0,3:0|0:0,0:0:0:0:
+314,328,2540,38,0,B|280:359|280:359|230:320|252:242|313:230,1,209.999990253448,0|0,3:0|0:0,0:0:0:0:
+421,300,2874,1,0,0:0:0:0:
+421,300,2985,2,0,P|461:288|491:253,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+309,231,3207,2,0,P|297:190|305:153,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+394,22,3429,5,0,3:0:0:0:
+461,72,3540,2,0,B|477:103|477:103|461:148,1,74.999998807907,0|4,0:0|0:0,0:0:0:0:
+378,183,3762,2,0,L|206:157,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+229,161,4096,2,0,P|227:202|211:250,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+61,384,4318,38,0,P|101:359|134:322,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+317,310,4540,2,0,P|267:305|226:288,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+141,110,4762,2,0,B|121:175|152:226|152:226|152:202|161:183,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+155,196,5096,6,0,P|67:211|79:286,1,179.999991645813,0|0,0:0|0:0,0:0:0:0:
+212,366,5429,38,0,P|207:335|174:281,1,56.2500012516975,4|0,0:0|0:0,0:0:0:0:
+206,286,5651,2,0,P|236:297|299:295,1,56.2500012516975,8|0,3:0|0:0,0:0:0:0:
+281,321,5874,2,0,P|257:340|227:396,1,56.2500012516975,4|0,0:0|0:0,0:0:0:0:
+124,246,6096,6,0,P|198:198|277:232,1,149.999997615814,0|0,3:0|0:0,0:0:0:0:
+253,211,6429,1,0,0:0:0:0:
+276,99,6540,2,0,P|335:139|369:215,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+368,208,6874,1,0,0:0:0:0:
+430,96,6985,37,0,3:0:0:0:
+497,147,7096,2,0,P|507:189|488:244,1,74.999998807907,0|4,0:0|0:0,0:0:0:0:
+414,379,7318,2,0,B|383:322|421:267|421:267|421:308,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+421,298,7651,2,0,P|378:312|336:304,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+270,170,7874,6,0,P|275:228|236:278,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+94,300,8096,2,0,P|133:263|208:274,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+261,374,8318,2,0,L|176:365,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+38,377,8540,2,0,L|55:197,1,168.750003755093,4|0,0:0|0:0,0:0:0:0:
+123,25,8985,38,0,L|132:110,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+217,242,9207,2,0,L|237:168,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+48,92,9429,5,4,0:0:0:0:
+63,176,9540,1,0,0:0:0:0:
+83,259,9651,38,0,P|167:223|231:255,1,149.999997615814,0|0,3:0|0:0,0:0:0:0:
+274,312,9985,1,0,0:0:0:0:
+274,312,10096,2,0,L|354:292,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+459,225,10318,2,0,L|375:204,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+269,107,10540,1,0,3:0:0:0:
+276,54,10651,1,0,0:0:0:0:
+313,17,10762,1,4,0:0:0:0:
+363,9,10874,1,0,0:0:0:0:
+363,9,11096,5,0,0:0:0:0:
+432,68,11207,2,0,P|444:107|425:154,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+309,252,11429,38,0,P|297:195|321:158,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+450,316,11651,2,0,L|361:312,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+160,341,11874,2,0,B|187:380|187:380|233:309|177:235,1,187.499997019767,8|4,3:0|0:0,0:0:0:0:
+116,200,12207,6,0,P|52:224|122:264,1,168.750003755093,0|4,0:0|0:0,0:0:0:0:
+297,91,12762,37,8,3:0:0:0:
+276,44,12874,1,0,0:0:0:0:
+226,27,12985,1,4,0:0:0:0:
+187,63,13096,1,0,0:0:0:0:
+196,115,13207,1,0,0:0:0:0:
+376,144,13429,2,0,L|378:121,2,16.6666664017571,0|0|0,0:0|0:0|0:0,0:0:0:0:
+436,220,13651,6,0,B|395:211|373:164|373:164|332:208|264:185,1,179.999991645813,8|4,3:0|0:0,0:0:0:0:
+276,44,13985,1,0,0:0:0:0:
+196,115,14096,38,0,L|139:124,4,37.4999994039535,0|0|0|0|4,3:0|0:0|0:0|0:0|0:0,0:0:0:0:
+82,69,14429,1,0,0:0:0:0:
+106,190,14540,2,0,L|126:276,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+218,383,14762,2,0,L|234:309,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+26,231,14985,5,0,3:0:0:0:
+253,202,15207,37,0,0:0:0:0:
+331,271,15318,1,0,0:0:0:0:
+233,309,15429,1,8,3:0:0:0:
+389,73,15651,6,0,P|410:22|447:112,1,224.999996423721,4|0,3:0|0:0,0:0:0:0:
+391,165,16096,1,0,0:0:0:0:
+377,177,16207,1,0,0:0:0:0:
+365,187,16318,38,0,B|253:261|221:119|94:192,1,269.999987468719,0|0,0:0|0:0,0:0:0:0:
+73,319,16762,22,0,P|133:336|116:236,1,168.750003755093,4|0,3:0|0:0,0:0:0:0:
+139,258,17207,6,0,P|138:315|69:283,1,112.500002503395,8|0,3:0|0:0,0:0:0:0:
+92,323,17762,37,0,0:0:0:0:
+43,245,17874,1,4,0:0:0:0:
+4,322,17985,1,0,0:0:0:0:
+133,245,18096,1,0,3:0:0:0:
+29,105,18318,6,0,L|38:40,3,56.2500012516975,4|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+50,30,18540,38,0,P|111:56|193:25,1,149.999997615814,0|0,3:0|0:0,0:0:0:0:
+240,120,18985,2,0,P|328:91|394:125,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+409,213,19318,2,0,B|377:226|377:226|243:200,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+119,187,19651,2,0,L|127:286,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+179,338,19874,1,8,3:0:0:0:
+45,307,19985,6,0,L|3:297,2,37.4999994039535,0|0|4,0:0|0:0|0:0,0:0:0:0:
+103,380,20207,1,0,3:0:0:0:
+212,257,20318,38,0,P|233:218|231:171,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+111,118,20540,1,4,0:0:0:0:
+111,118,20762,6,0,L|197:109,1,74.999998807907,8|4,3:0|0:0,0:0:0:0:
+256,18,21096,37,0,0:0:0:0:
+337,121,21207,2,0,P|350:60|403:16,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+384,26,21429,2,0,P|406:86|465:122,1,112.49999821186,0|0,0:0|0:0,0:0:0:0:
+443,114,21651,2,0,P|377:105|327:131,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+352,223,21874,6,0,B|369:230|369:230|391:228|391:228|416:239|416:239|440:235|440:235|462:244|462:244|489:249,1,112.500002503395,4|0,0:0|0:0,0:0:0:0:
+322,343,22096,37,0,3:0:0:0:
+259,270,22207,2,0,P|223:276|182:263,2,74.999998807907,0|4|0,0:0|0:0|0:0,0:0:0:0:
+86,360,22540,5,8,3:0:0:0:
+15,295,22651,2,0,L|0:201,2,74.999998807907,0|4|0,0:0|0:0|0:0,0:0:0:0:
+94,384,22985,38,0,P|118:328|112:277,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+0,211,23429,22,0,L|76:196,1,74.999998807907,12|0,3:0|0:0,0:0:0:0:
+215,134,23651,2,0,L|114:110,1,74.999998807907,12|0,3:0|0:0,0:0:0:0:
+33,124,23874,22,0,L|43:2,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+150,269,24318,2,0,L|162:194,1,74.999998807907,0|4,3:0|0:0,0:0:0:0:
+229,134,24651,6,0,L|386:164,1,112.500002503395,12|0,3:0|0:0,0:0:0:0:
+486,268,24874,37,0,0:0:0:0:
+410,119,24985,1,4,0:0:0:0:
+381,213,25096,1,0,0:0:0:0:
+512,120,25207,1,0,3:0:0:0:
+247,36,25429,6,0,L|191:25,3,37.4999994039535,4|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+185,24,25651,2,0,B|145:72|145:72|174:164,1,149.999997615814,0|0,3:0|0:0,0:0:0:0:
+253,219,26096,2,0,B|281:311|281:311|228:382,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+100,363,26429,38,0,L|259:354,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+404,262,26762,1,4,0:0:0:0:
+390,352,26874,1,0,0:0:0:0:
+314,295,26985,1,8,3:0:0:0:
+425,256,27096,6,0,L|492:246,2,37.4999994039535,0|0|4,0:0|0:0|0:0,0:0:0:0:
+329,216,27318,1,0,3:0:0:0:
+193,177,27429,38,0,L|266:161,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+322,107,27651,1,4,0:0:0:0:
+322,107,27874,2,0,L|310:238,1,112.500002503395,8|4,3:0|0:0,0:0:0:0:
+110,299,28207,5,0,0:0:0:0:
+164,231,28318,2,0,B|168:303|168:303|121:338,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+30,284,28540,2,0,B|90:244|90:244|144:267,1,112.49999821186,0|0,0:0|0:0,0:0:0:0:
+148,371,28762,2,0,B|83:338|83:338|76:280,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+194,201,28985,38,0,B|207:210|207:210|227:210|227:210|243:217|243:217|265:218|265:218|282:227|282:227|305:225|305:225|325:238,1,112.500002503395,4|0,0:0|0:0,0:0:0:0:
+492,114,29207,6,0,P|445:136|410:138,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+324,102,29429,2,0,P|291:68|280:29,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+418,17,29651,1,8,3:0:0:0:
+495,201,29874,1,4,3:2:0:0:
+221,136,30096,37,0,3:0:0:0:
+299,188,30207,2,0,B|316:251|316:251|271:352,1,149.999997615814,4|0,3:0|0:0,0:0:0:0:
+115,334,30540,6,0,P|11:252|167:266,1,382.500001215934,0|0,0:0|0:0,0:0:0:0:
+216,326,30985,38,0,L|304:331,1,63.7500002026557,4|0,3:0|0:0,0:0:0:0:
+280,330,31429,6,0,L|293:241,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+426,252,31651,2,0,L|439:163,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+253,158,31874,37,0,3:0:0:0:
+258,132,31985,1,0,0:0:0:0:
+337,111,32096,5,4,0:0:0:0:
+341,85,32207,1,0,0:0:0:0:
+271,30,32318,38,0,B|212:42|212:42|141:19,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+163,26,32540,2,0,L|144:181,1,149.999997615814,4|0,0:0|3:0,0:0:0:0:
+445,343,32985,22,0,B|439:234|439:234|384:269,1,149.999997615814,4|8,0:0|3:0,0:0:0:0:
+240,257,33429,2,0,B|263:148|263:148|291:205,1,149.999997615814,4|0,0:0|3:0,0:0:0:0:
+68,333,33874,2,0,B|83:233|83:233|41:256,1,149.999997615814,4|8,0:0|3:0,0:0:0:0:
+344,347,34318,22,0,B|368:372|368:372|455:355|455:355|472:308,1,149.999997615814,4|0,0:0|0:0,0:0:0:0:
+452,255,34540,2,0,B|389:212|389:212|332:273,1,149.999997615814,0|4,3:0|0:0,0:0:0:0:
+256,220,34874,5,0,0:0:0:0:
+256,220,34985,2,0,B|256:128,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+256,70,35207,2,0,B|256:162,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+112,312,35429,37,0,3:0:0:0:
+60,255,35540,2,0,B|123:212|123:212|180:273,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+169,350,35874,6,0,B|144:375|144:375|57:358|57:358|40:311,1,149.999997615814,8|0,3:0|3:0,0:0:0:0:
+62,169,36429,6,0,L|76:267,2,74.999998807907,0|4|0,0:0|0:0|0:0,0:0:0:0:
+134,61,36762,1,8,3:0:0:0:
+201,113,36874,2,0,L|215:211,2,74.999998807907,0|4|0,0:0|0:0|0:0,0:0:0:0:
+298,272,37207,6,0,L|315:184,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+330,114,37429,1,4,0:0:0:0:
+446,176,37540,2,0,B|404:214|404:214|307:197,1,149.999997615814,4|0,3:0|0:0,0:0:0:0:
+231,240,37874,2,0,P|223:199|231:162,1,74.999998807907,4|0,3:0|0:0,0:0:0:0:
+325,285,38096,6,0,L|154:300,1,149.999997615814,4|0,3:0|0:0,0:0:0:0:
+175,298,38540,6,0,L|163:396,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+75,208,38762,2,0,L|63:306,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+233,74,38985,37,0,3:0:0:0:
+231,98,39096,1,0,0:0:0:0:
+156,139,39207,5,4,0:0:0:0:
+155,165,39318,1,0,0:0:0:0:
+227,215,39429,38,0,P|282:209|352:230,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+336,222,39651,2,0,L|366:67,1,149.999997615814,4|0,0:0|3:0,0:0:0:0:
+81,35,40096,22,0,B|82:105|82:105|118:136|118:136|132:89,1,149.999997615814,4|8,0:0|3:0,0:0:0:0:
+272,158,40540,2,0,B|270:228|270:228|234:259|234:259|220:212,1,149.999997615814,4|0,0:0|3:0,0:0:0:0:
+423,36,40985,2,0,B|400:102|400:102|423:143|423:143|453:104,1,149.999997615814,4|8,0:0|3:0,0:0:0:0:
+512,278,41429,6,0,P|415:258|361:293,1,149.999997615814,4|0,0:0|0:0,0:0:0:0:
+359,302,41651,6,0,B|320:264|320:264|310:187,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+322,190,41874,2,0,L|449:171,1,112.49999821186,4|0,0:0|0:0,0:0:0:0:
+443,159,42096,1,8,3:0:0:0:
+240,52,42318,6,0,B|255:79|255:79|241:135,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+177,166,42540,1,0,3:0:0:0:
+163,151,42651,2,0,B|161:207|161:207|192:240|192:240|189:299,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+131,365,42985,2,0,P|198:322|280:345,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+335,377,43318,1,0,0:0:0:0:
+442,239,43429,38,0,B|456:178|456:178|422:136|422:136|427:68|427:68|449:112,1,224.999996423721,0|0,3:0|0:0,0:0:0:0:
+444,103,43874,2,0,P|402:118|356:120,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+249,28,44096,2,0,P|295:35|324:48,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+364,201,44318,5,0,0:0:0:0:
+332,195,44429,1,0,0:0:0:0:
+251,135,44540,37,0,0:0:0:0:
+281,123,44651,1,0,0:0:0:0:
+332,195,44762,6,0,B|356:269|324:333|324:333|303:293,1,179.999991645813,4|0,0:3|0:0,0:0:0:0:
+61,25,45207,38,0,L|88:158,1,112.500002503395,0|0,3:0|0:0,0:0:0:0:
+84,136,45651,1,8,3:0:0:0:
+84,136,46096,1,0,3:0:0:0:
+176,33,46207,2,0,L|164:103,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+219,207,46429,2,0,L|232:152,1,56.2500012516975,0|8,0:0|3:0,0:0:0:0:
+312,65,46651,1,0,0:0:0:0:
+312,65,46762,2,0,L|398:94,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+512,176,46985,5,0,3:0:0:0:
+421,192,47096,1,0,0:0:0:0:
+421,192,47429,1,8,3:0:0:0:
+402,357,47651,37,0,0:0:0:0:
+394,277,47762,1,0,0:0:0:0:
+328,324,47874,1,0,3:0:0:0:
+328,324,48318,1,8,3:0:0:0:
+110,357,48540,5,0,0:0:0:0:
+118,277,48651,1,0,0:0:0:0:
+184,324,48763,1,0,3:0:0:0:
+110,357,48874,1,0,0:0:0:0:
+110,357,49207,1,8,3:0:0:0:
+110,357,49651,1,0,3:0:0:0:
+0,283,49762,38,0,P|41:301|97:295,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+188,219,49985,2,0,P|168:236|137:246,1,56.2500012516975,0|8,0:0|3:0,0:0:0:0:
+49,137,50207,1,0,0:0:0:0:
+49,137,50318,2,0,P|65:184|93:205,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+107,67,50540,5,0,3:0:0:0:
+32,15,50651,1,0,0:0:0:0:
+32,15,50985,1,8,3:0:0:0:
+265,114,51207,37,0,0:0:0:0:
+254,196,51318,1,0,0:0:0:0:
+241,279,51429,1,0,3:0:0:0:
+241,279,51651,1,0,0:0:0:0:
+336,207,51762,6,0,P|397:191|371:274,1,168.750003755093,0|0,0:0|0:0,0:0:0:0:
+83,206,52318,5,0,3:0:0:0:
+83,206,52429,2,0,L|101:260,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+40,383,52651,2,0,P|70:355|90:324,1,56.2500012516975,0|8,0:0|3:0,0:0:0:0:
+214,334,52874,1,0,0:0:0:0:
+214,334,52985,2,0,P|171:322|140:304,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+151,160,53207,5,0,3:0:0:0:
+188,135,53318,1,0,0:0:0:0:
+232,129,53429,1,0,0:0:0:0:
+273,146,53540,1,0,0:0:0:0:
+339,198,53651,37,8,3:0:0:0:
+383,199,53762,1,0,0:0:0:0:
+426,185,53874,1,0,0:0:0:0:
+450,147,53985,1,0,0:0:0:0:
+444,61,54096,6,0,P|414:28|377:15,1,56.2500012516975,0|0,3:0|0:0,0:0:0:0:
+301,28,54318,2,0,P|268:48|255:77,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+189,271,54540,38,0,P|209:222|204:198,1,56.2500012516975,8|0,3:0|0:0,0:0:0:0:
+186,114,54762,2,0,P|152:74|124:68,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+27,137,54985,5,0,3:0:0:0:
+34,167,55096,1,0,0:0:0:0:
+122,204,55207,37,0,0:0:0:0:
+116,178,55318,1,0,0:0:0:0:
+48,249,55429,5,8,3:0:0:0:
+54,274,55540,1,0,0:0:0:0:
+124,329,55651,38,0,P|157:326|200:310,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+320,185,55874,5,0,3:0:0:0:
+287,175,55985,1,0,0:0:0:0:
+254,181,56096,2,0,P|258:221|264:241,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+337,347,56318,2,0,P|348:321|350:293,1,56.2500012516975,8|0,3:0|0:0,0:0:0:0:
+418,197,56540,37,0,0:0:0:0:
+418,197,56651,2,0,L|492:180,1,56.2500012516975,0|0,0:0|3:0,0:0:0:0:
+329,114,56874,2,0,L|262:94,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+436,59,57096,6,0,L|413:126,1,56.2500012516975,0|8,0:0|3:0,0:0:0:0:
+332,194,57318,2,0,L|353:259,2,56.2500012516975,0|0|0,0:0|0:0|0:0,0:0:0:0:
+202,194,57651,37,0,3:0:0:0:
+224,233,57762,1,0,0:0:0:0:
+222,279,57874,1,0,0:0:0:0:
+193,314,57985,1,0,0:0:0:0:
+144,244,58096,5,0,0:0:0:0:
+127,214,58207,1,0,0:0:0:0:
+126,180,58318,1,0,0:0:0:0:
+139,149,58429,1,0,0:0:0:0:
+224,113,58540,38,0,B|262:88|235:70|189:83|189:83|224:138|194:193,1,194.999987974167
+299,319,58874,1,0,0:0:0:0:
+299,319,58985,2,0,B|316:283|314:237|314:237|278:226|278:226|320:243|359:227,1,202.49999060154,4|0,0:0|0:0,0:0:0:0:
+428,181,59429,22,0,P|454:129|399:4,1,179.999991645813,0|0,3:0|0:0,0:0:0:0:
+418,18,59874,2,0,L|373:15,6,24.9999996026357,8|0|0|0|0|0|4,3:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0:
+428,181,60207,5,0,0:0:0:0:
+352,209,60318,1,0,3:0:0:0:
+278,177,60429,1,0,0:0:0:0:
+208,225,60540,2,0,L|222:267,2,37.4999994039535,4|0|0,0:0|0:0|0:0,0:0:0:0:
+71,144,60762,38,0,L|65:109,3,24.9999996026357,8|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+145,86,60985,1,4,0:0:0:0:
+163,127,61096,1,0,0:0:0:0:
+161,171,61207,1,0,3:0:0:0:
+136,208,61318,1,0,0:0:0:0:
+99,231,61429,2,0,B|91:279|91:279|117:314,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+177,378,61651,5,8,3:0:0:0:
+177,378,61762,2,0,B|231:371|231:371|272:326|272:326|345:319,1,179.999991645813
+417,293,62096,1,0,3:0:0:0:
+438,263,62207,1,0,0:0:0:0:
+436,225,62318,1,4,0:0:0:0:
+412,196,62429,1,0,0:0:0:0:
+320,172,62540,6,0,P|307:192|291:204,1,37.4999994039535,8|0,3:0|0:0,0:0:0:0:
+291,147,62651,2,0,P|274:156|245:153,1,37.4999994039535,0|0,0:0|0:0,0:0:0:0:
+276,114,62762,2,0,P|250:107|234:94,1,37.4999994039535,4|0,0:0|0:0,0:0:0:0:
+283,81,62874,2,0,P|265:61|260:45,1,37.4999994039535,0|0,0:0|0:0,0:0:0:0:
+365,31,62985,38,0,P|398:44|442:49,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+512,169,63207,2,0,P|466:163|421:176,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+350,107,63429,1,8,3:0:0:0:
+293,237,63540,38,0,L|276:158,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+428,269,63762,2,0,B|373:275|373:275|338:249|338:249|267:255,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+191,318,64096,2,0,B|182:355|182:355|212:395,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+192,186,64318,5,8,3:0:0:0:
+135,253,64429,2,0,L|56:270,2,74.999998807907,0|4|0,0:0|0:0|0:0,0:0:0:0:
+24,136,64762,38,0,P|69:76|158:75,1,157.499992690086,0|0,3:0|0:0,0:0:0:0:
+160,80,64985,6,0,P|193:102|255:102,1,84.3750018775463,4|0,0:0|0:0,0:0:0:0:
+276,34,65207,38,0,L|290:212,1,157.499992690086,8|0,3:0|0:0,0:0:0:0:
+291,219,65429,6,0,L|311:132,1,84.3750018775463,4|0,0:0|0:0,0:0:0:0:
+381,111,65651,38,0,B|418:126|418:126|460:126,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+221,163,65874,2,0,B|186:143|186:143|139:153,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+41,231,66096,1,8,3:0:0:0:
+49,267,66207,1,0,0:0:0:0:
+56,303,66318,1,4,0:0:0:0:
+67,288,66429,1,4,0:0:0:0:
+77,270,66540,6,0,P|171:255|72:350,1,337.500007510185,0|0,0:0|0:0,0:0:0:0:
+95,356,66985,38,0,L|185:343,1,74.999998807907,8|4,3:0|0:0,0:0:0:0:
+274,286,67318,6,0,B|289:324|289:324|268:378,1,74.999998807907,0|0,0:0|3:0,0:0:0:0:
+191,227,67540,1,0,0:0:0:0:
+255,168,67651,2,0,L|264:116,2,37.4999994039535,4|0|0,0:0|0:0|0:0,0:0:0:0:
+147,83,67874,2,0,L|154:108,3,24.9999996026357,8|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+80,148,68096,38,0,L|98:224,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+125,356,68318,1,0,3:0:0:0:
+0,319,68429,1,0,0:0:0:0:
+0,319,68540,2,0,L|76:294,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+277,219,68762,5,8,3:0:0:0:
+277,219,68874,2,0,B|327:199|327:199|293:138|197:173,1,179.999991645813,0|0,0:0|0:0,0:0:0:0:
+157,273,69207,37,0,3:0:0:0:
+175,316,69318,1,0,0:0:0:0:
+212,334,69429,1,4,0:0:0:0:
+254,333,69540,1,0,0:0:0:0:
+332,268,69651,38,0,P|333:237|343:213,1,37.4999994039535,8|0,3:0|0:0,0:0:0:0:
+373,265,69762,2,0,P|386:239|404:232,1,37.4999994039535,0|0,0:0|0:0,0:0:0:0:
+413,284,69874,2,0,P|430:269|454:269,1,37.4999994039535,4|0,0:0|0:0,0:0:0:0:
+433,318,69985,2,0,P|452:320|474:337,1,37.4999994039535,4|0,0:0|0:0,0:0:0:0:
+401,384,70096,6,0,P|353:378|319:346,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+251,251,70318,2,0,P|240:196|260:154,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+401,18,70540,1,8,3:0:0:0:
+401,18,70651,2,0,P|409:54|398:90,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+327,193,70874,2,0,L|304:45,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+290,26,71207,6,0,L|308:144,1,104.999995126724,0|0,0:0|0:0,0:0:0:0:
+272,302,71429,2,0,L|187:288,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+33,217,71651,37,4,0:0:0:0:
+27,187,71762,1,4,0:0:0:0:
+20,157,71874,2,0,B|103:140|103:140|162:58,1,157.499992690086,0|0,3:0|0:0,0:0:0:0:
+145,82,72096,6,0,L|218:75,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+336,136,72318,38,0,P|331:213|231:208,1,157.499992690086
+263,232,72540,6,0,L|278:300,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+183,384,72762,2,0,L|172:307,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+37,140,72985,38,0,B|10:168|10:168|17:204|17:204|54:220|54:220|89:196|89:196|87:157|87:157|57:138,1,225.00000500679
+275,372,73651,6,0,P|320:352|387:369,1,112.500002503395
+380,364,74096,2,0,L|436:358,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+495,271,74318,2,0,L|424:282,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+339,270,74540,1,0,0:0:0:0:
+339,270,74651,1,0,0:0:0:0:
+339,270,74762,2,0,L|329:196,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+408,46,74985,38,0,L|392:120,1,56.2500012516975
+220,230,75207,2,0,L|209:156,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+282,7,75429,37,0,0:0:0:0:
+300,98,75540,1,0,0:0:0:0:
+197,25,75651,5,0,0:0:0:0:
+222,103,75762,1,0,0:0:0:0:
+126,69,75874,5,0,0:0:0:0:
+153,134,75985,1,0,0:0:0:0:
+76,145,76096,5,0,0:0:0:0:
+116,179,76207,1,0,0:0:0:0:
+70,222,76318,5,0,0:0:0:0:
+111,222,76429,1,0,0:0:0:0:
+134,253,76540,6,0,P|135:298|126:314,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+21,384,76762,2,0,P|124:354|260:391,1,224.999996423721,0|0,0:0|0:0,0:0:0:0:
+384,366,77207,22,0,L|394:268,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+499,62,77429,2,0,L|486:135,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+507,237,77651,2,0,P|450:231|388:184,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+404,203,77874,2,0,L|313:217,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+113,212,78096,6,0,P|128:267|111:328,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+115,319,78318,2,0,L|213:340,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+274,371,78540,38,0,L|257:186,1,179.999991645813,8|0,3:0|0:0,0:0:0:0:
+128,139,78874,1,0,0:0:0:0:
+128,139,78985,6,0,L|230:128,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+365,34,79207,37,4,0:0:0:0:
+430,114,79318,1,0,0:0:0:0:
+361,184,79429,2,0,P|304:170|277:110,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+278,126,79651,2,0,L|189:133,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+64,263,79874,6,0,B|37:230|37:230|50:143,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+66,119,80096,2,0,L|80:210,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+71,361,80318,38,0,B|135:350|135:350|182:305|182:305|243:297,1,179.999991645813,8|0,3:0|0:0,0:0:0:0:
+302,247,80651,1,0,0:0:0:0:
+222,211,80762,1,0,3:0:0:0:
+478,344,80985,5,4,0:0:0:0:
+491,309,81096,5,0,0:0:0:0:
+498,265,81207,5,8,3:0:0:0:
+485,223,81318,5,0,0:0:0:0:
+458,179,81429,5,4,0:0:0:0:
+418,147,81540,5,0,0:0:0:0:
+352,126,81651,5,0,3:0:0:0:
+281,149,81762,5,0,0:0:0:0:
+239,221,81874,5,4,0:0:0:0:
+159,262,81985,5,0,0:0:0:0:
+66,234,82096,5,8,3:0:0:0:
+11,145,82207,5,0,0:0:0:0:
+55,33,82318,5,4,0:0:0:0:
+273,44,82540,37,0,3:0:0:0:
+320,103,82651,1,0,0:0:0:0:
+394,118,82762,1,4,0:0:0:0:
+468,100,82874,1,0,0:0:0:0:
+507,36,82985,1,8,3:0:0:0:
+495,19,83207,5,4,0:0:0:0:
+335,83,83318,1,0,0:0:0:0:
+453,81,83429,1,0,3:0:0:0:
+283,24,83540,2,0,P|196:37|141:120,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+60,238,83874,1,8,3:0:0:0:
+21,164,83985,2,0,P|59:149|175:193,1,149.999997615814,0|8,0:0|3:0,0:0:0:0:
+252,206,84318,38,0,P|271:160|264:125,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+139,257,84540,2,0,P|131:302|149:340,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+240,379,84762,2,0,B|330:360|330:360|298:344,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+312,351,84985,2,0,P|279:321|270:287,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+359,165,85207,6,0,B|389:202|389:202|368:282,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+373,265,85429,2,0,L|454:282,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+498,139,85651,38,0,P|446:120|396:0,1,179.999991645813,8|0,3:0|0:0,0:0:0:0:
+394,13,85985,1,0,0:0:0:0:
+301,92,86096,6,0,L|214:83,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+66,66,86318,1,4,0:0:0:0:
+13,136,86429,1,0,0:0:0:0:
+72,193,86540,2,0,P|120:210|190:178,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+176,192,86762,2,0,P|154:237|160:288,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+309,370,86985,37,0,3:0:0:0:
+359,310,87096,1,0,0:0:0:0:
+283,297,87207,2,0,L|203:318,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+4,203,87429,2,0,B|55:211|55:211|82:255|82:255|134:266,1,149.999997615814,8|0,3:0|0:0,0:0:0:0:
+238,217,87762,1,0,0:0:0:0:
+183,120,87874,6,0,L|89:111,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+98,33,88096,2,0,L|23:26,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+306,182,88318,38,0,L|400:173,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+391,95,88540,2,0,L|465:88,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+232,28,88762,2,0,L|220:92,1,37.4999994039535,0|0,3:0|0:0,0:0:0:0:
+243,39,88874,2,0,L|231:103,1,37.4999994039535,0|0,0:0|0:0,0:0:0:0:
+256,50,88985,2,0,L|251:87,1,37.4999994039535,4|0,0:0|0:0,0:0:0:0:
+485,87,89207,6,0,L|493:51,3,37.4999994039535,8|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+396,120,89429,2,0,L|411:197,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+471,317,89651,38,0,P|411:299|320:336,1,149.999997615814,0|4,3:0|0:0,0:0:0:0:
+61,239,90096,2,0,P|121:221|212:258,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+367,21,90540,6,0,P|336:57|328:104,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+163,96,90762,2,0,P|194:132|202:179,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+190,346,90985,37,8,3:0:0:0:
+328,272,91096,1,0,0:0:0:0:
+154,272,91207,5,8,3:0:0:0:
+365,338,91318,1,0,0:0:0:0:
+257,382,91429,38,0,B|290:333|224:286|269:219,1,149.999997615814,4|4,3:0|0:0,0:0:0:0:
+325,196,91762,1,0,0:0:0:0:
+325,196,91874,2,0,P|365:210|436:184,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+430,190,92096,2,0,B|418:110,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+313,19,92318,2,0,L|190:36,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+201,34,92540,2,0,B|214:117,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+209,252,92762,5,8,3:0:0:0:
+156,261,92874,1,0,0:0:0:0:
+112,231,92985,1,4,0:0:0:0:
+60,222,93096,1,0,0:0:0:0:
+13,247,93207,38,0,P|4:288|19:328,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+173,186,93429,1,4,0:0:0:0:
+215,120,93540,1,0,0:0:0:0:
+162,49,93651,2,0,P|125:39|76:61,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+234,138,93874,2,0,P|273:157|313:148,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+385,39,94096,5,0,3:0:0:0:
+337,286,94318,2,0,L|322:373,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+409,327,94540,2,0,P|418:277|280:230,1,224.999996423721,8|0,3:0|0:0,0:0:0:0:
+239,319,94985,2,0,P|218:357|173:373,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+34,344,95207,37,4,0:0:0:0:
+21,309,95318,5,0,0:0:0:0:
+14,265,95429,5,8,3:0:0:0:
+27,223,95540,5,0,0:0:0:0:
+54,179,95651,5,4,0:0:0:0:
+94,147,95762,5,0,0:0:0:0:
+160,126,95873,5,0,3:0:0:0:
+231,149,95984,5,0,0:0:0:0:
+273,221,96096,5,4,0:0:0:0:
+353,262,96207,5,0,0:0:0:0:
+446,234,96318,5,8,3:0:0:0:
+501,145,96429,5,0,0:0:0:0:
+450,36,96540,5,4,0:0:0:0:
+239,44,96762,5,0,3:0:0:0:
+192,103,96873,1,0,0:0:0:0:
+118,118,96984,1,4,0:0:0:0:
+44,100,97096,1,0,0:0:0:0:
+5,36,97207,1,8,3:0:0:0:
+17,19,97429,37,4,0:0:0:0:
+146,51,97540,1,0,0:0:0:0:
+29,122,97651,2,0,L|39:193,1,56.2499991059302,0|0,3:0|0:0,0:0:0:0:
+44,197,97874,6,0,P|100:231|176:201,1,112.500002503395,4|0,0:0|0:0,0:0:0:0:
+301,160,98096,38,0,P|329:140|382:137,1,84.3750018775463,8|0,3:0|0:0,0:0:0:0:
+398,147,98318,6,0,B|431:187|431:187|415:279,1,112.500002503395,4|0,0:0|0:0,0:0:0:0:
+265,371,98540,38,0,L|180:361,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+127,202,98762,2,0,L|141:113,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+193,260,98985,2,0,P|144:291|68:278,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+91,290,99207,2,0,L|79:373,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+20,184,99429,6,0,B|4:141|4:141|27:66,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+23,78,99651,2,0,L|109:91,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+271,74,99874,2,0,P|254:31|222:12,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+186,180,100096,2,0,P|232:175|260:147,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+132,63,100318,37,0,3:0:0:0:
+253,157,100540,1,4,0:0:0:0:
+285,167,100651,1,0,0:0:0:0:
+357,129,100762,5,8,3:0:0:0:
+389,139,100873,1,0,0:0:0:0:
+422,148,100985,2,0,P|407:200|416:233,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+459,377,101207,38,0,P|472:333|459:295,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+398,242,101429,2,0,L|314:257,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+165,354,101651,2,0,P|116:332|211:264,1,224.999996423721,8|0,3:0|0:0,0:0:0:0:
+302,165,102096,6,0,L|292:89,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+392,91,102318,2,0,L|382:14,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+192,229,102540,38,0,L|212:136,1,74.999998807907,8|0,3:0|0:0,0:0:0:0:
+107,172,102762,2,0,L|127:79,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+314,332,102985,6,0,L|305:278,1,37.4999994039535,0|0,3:0|0:0,0:0:0:0:
+343,345,103096,2,0,L|334:291,1,37.4999994039535,0|0,0:0|0:0,0:0:0:0:
+370,358,103207,2,0,L|361:304,1,37.4999994039535,4|0,0:0|0:0,0:0:0:0:
+380,117,103429,38,0,L|374:75,3,37.4999994039535,8|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+444,166,103651,2,0,P|417:188|346:191,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+392,2,103874,2,0,P|424:14|462:74,1,74.999998807907,4|0,3:0|0:0,0:0:0:0:
+271,129,104096,2,0,P|265:94|298:31,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+505,113,104318,5,8,3:0:0:0:
+269,217,104540,38,0,L|216:216,3,37.4999994039535,0|0|0|0,3:0|3:0|3:0|3:0,0:0:0:0:
+360,220,104762,1,0,3:0:0:0:
+296,384,104874,1,4,3:0:0:0:
+102,307,105096,5,0,0:0:0:0:
+102,307,105207,2,0,B|206:381|258:244|374:330,1,269.999987468719,12|0,3:0|0:0,0:0:0:0:
+439,319,105651,6,0,P|379:336|396:236,1,168.750003755093,0|0,3:0|0:0,0:0:0:0:
+373,258,106096,6,0,P|374:315|443:283,1,112.500002503395,8|0,3:0|0:0,0:0:0:0:
+420,323,106651,37,0,0:0:0:0:
+469,245,106763,1,4,0:0:0:0:
+508,322,106874,1,0,0:0:0:0:
+379,245,106985,1,8,3:0:0:0:
+483,105,107207,6,0,L|474:40,3,56.2500012516975,4|0|0|0,3:0|0:0|0:0|0:0,0:0:0:0:
+462,30,107429,38,0,P|401:56|319:25,1,149.999997615814,0|0,3:0|0:0,0:0:0:0:
+272,120,107874,2,0,P|184:91|118:125,1,149.999997615814,8|4,3:0|0:0,0:0:0:0:
+103,213,108207,2,0,B|128:232|128:232|269:200,1,149.999997615814,0|0,0:0|0:0,0:0:0:0:
+393,187,108540,2,0,L|385:286,1,74.999998807907,4|0,0:0|0:0,0:0:0:0:
+333,338,108763,1,8,3:0:0:0:
+467,307,108874,6,0,L|509:297,2,37.4999994039535,0|0|4,0:0|0:0|0:0,0:0:0:0:
+409,380,109096,1,0,0:0:0:0:
+300,257,109207,38,0,P|279:218|281:171,1,74.999998807907,0|0,3:0|0:0,0:0:0:0:
+401,118,109429,1,4,0:0:0:0:
+401,118,109651,6,0,L|315:109,1,74.999998807907,8|4,3:0|0:0,0:0:0:0:
+256,15,109985,37,0,0:0:0:0:
+175,121,110096,2,0,P|162:60|109:16,1,112.49999821186,0|0,3:0|0:0,0:0:0:0:
+128,26,110318,2,0,P|106:86|47:122,1,112.49999821186,0|0,0:0|0:0,0:0:0:0:
+69,114,110540,2,0,P|135:105|185:131,1,112.49999821186,8|0,3:0|0:0,0:0:0:0:
+160,223,110762,6,0,B|142:230|142:230|120:228|120:228|95:239|95:239|71:235|71:235|49:244|49:244|22:249,1,112.500002503395,4|0,0:0|0:0,0:0:0:0:
+193,334,110985,38,0,P|216:310|242:301,1,56.2500012516975,0|0,3:0|0:0,0:0:0:0:
+335,325,111207,2,0,P|366:353|378:379,1,56.2500012516975,0|0,0:0|0:0,0:0:0:0:
+273,383,111429,2,0,L|304:213,1,168.750003755093,0|0,0:0|0:0,0:0:0:0:
+383,255,111874,22,0,B|422:273|422:273|476:273,1,74.999998807907,8|0,3:0|3:0,0:0:0:0:
+209,219,112096,2,0,B|169:221|169:221|131:206,1,74.999998807907,0|0,0:0|0:0,0:0:0:0:
+403,147,112318,2,0,B|352:114|352:114|337:43|337:43|295:109|295:109|234:115,1,269.999987468719,8|0,3:0|0:0,0:0:0:0:
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923-expected-conversion.json b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923-expected-conversion.json
new file mode 100644
index 000000000000..4eb70e836b90
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923-expected-conversion.json
@@ -0,0 +1 @@
+{"Mappings":[{"StartTime":1433.0,"Objects":[{"StartTime":1433.0,"EndTime":1433.0,"X":493.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1595.0,"EndTime":1595.0,"X":482.0946,"Y":367.449646,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":1721.0,"EndTime":1721.0,"X":493.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":1919.0,"Objects":[{"StartTime":1919.0,"EndTime":1919.0,"X":442.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":2081.0,"EndTime":2081.0,"X":431.959137,"Y":180.4078,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":2207.0,"EndTime":2207.0,"X":442.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":2405.0,"Objects":[{"StartTime":2405.0,"EndTime":2405.0,"X":394.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":2531.0,"EndTime":2531.0,"X":335.6331,"Y":323.993469,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":2730.0,"Objects":[{"StartTime":2730.0,"EndTime":2730.0,"X":277.0,"Y":272.0}]},{"StartTime":2892.0,"Objects":[{"StartTime":2892.0,"EndTime":2892.0,"X":183.0,"Y":169.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3018.0,"EndTime":3018.0,"X":194.8645,"Y":105.722687,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":3216.0,"Objects":[{"StartTime":3216.0,"EndTime":3216.0,"X":257.0,"Y":66.0}]},{"StartTime":3378.0,"Objects":[{"StartTime":3378.0,"EndTime":3378.0,"X":178.0,"Y":178.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":3666.0,"EndTime":3666.0,"X":63.2089653,"Y":223.380814,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":3865.0,"Objects":[{"StartTime":3865.0,"EndTime":3865.0,"X":196.0,"Y":303.0}]},{"StartTime":4027.0,"Objects":[{"StartTime":4027.0,"EndTime":4027.0,"X":53.0,"Y":214.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4351.0,"EndTime":4351.0,"X":168.013245,"Y":216.502319,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4513.0,"EndTime":4513.0,"X":188.218781,"Y":275.762878,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4675.0,"EndTime":4675.0,"X":168.013245,"Y":216.502319,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":4963.0,"EndTime":4963.0,"X":53.0,"Y":214.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5162.0,"Objects":[{"StartTime":5162.0,"EndTime":5162.0,"X":194.0,"Y":105.0}]},{"StartTime":5324.0,"Objects":[{"StartTime":5324.0,"EndTime":5324.0,"X":31.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":5612.0,"EndTime":5612.0,"X":133.993271,"Y":43.15782,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":5811.0,"Objects":[{"StartTime":5811.0,"EndTime":5811.0,"X":257.0,"Y":153.0}]},{"StartTime":5973.0,"Objects":[{"StartTime":5973.0,"EndTime":5973.0,"X":311.0,"Y":30.0}]},{"StartTime":6135.0,"Objects":[{"StartTime":6135.0,"EndTime":6135.0,"X":146.0,"Y":171.0}]},{"StartTime":6297.0,"Objects":[{"StartTime":6297.0,"EndTime":6297.0,"X":320.0,"Y":103.0}]},{"StartTime":6460.0,"Objects":[{"StartTime":6460.0,"EndTime":6460.0,"X":428.0,"Y":231.0}]},{"StartTime":6622.0,"Objects":[{"StartTime":6622.0,"EndTime":6622.0,"X":469.0,"Y":166.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":6946.0,"EndTime":6946.0,"X":351.395355,"Y":178.384933,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7072.0,"EndTime":7072.0,"X":326.584534,"Y":236.296982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7270.0,"Objects":[{"StartTime":7270.0,"EndTime":7270.0,"X":234.0,"Y":379.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7396.0,"EndTime":7396.0,"X":295.6874,"Y":361.119446,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7595.0,"Objects":[{"StartTime":7595.0,"EndTime":7595.0,"X":155.0,"Y":291.0}]},{"StartTime":7757.0,"Objects":[{"StartTime":7757.0,"EndTime":7757.0,"X":326.88028,"Y":236.88028}]},{"StartTime":7838.0,"Objects":[{"StartTime":7838.0,"EndTime":7838.0,"X":330.440155,"Y":240.44014}]},{"StartTime":7919.0,"Objects":[{"StartTime":7919.0,"EndTime":7919.0,"X":334.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8243.0,"EndTime":8243.0,"X":217.1122,"Y":283.230347,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8369.0,"EndTime":8369.0,"X":154.385681,"Y":290.712372,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8568.0,"Objects":[{"StartTime":8568.0,"EndTime":8568.0,"X":43.0,"Y":93.0}]},{"StartTime":8730.0,"Objects":[{"StartTime":8730.0,"EndTime":8730.0,"X":213.0,"Y":180.0}]},{"StartTime":8892.0,"Objects":[{"StartTime":8892.0,"EndTime":8892.0,"X":50.0,"Y":278.0}]},{"StartTime":9054.0,"Objects":[{"StartTime":9054.0,"EndTime":9054.0,"X":179.0,"Y":92.0}]},{"StartTime":9216.0,"Objects":[{"StartTime":9216.0,"EndTime":9216.0,"X":298.440155,"Y":318.440155}]},{"StartTime":9541.0,"Objects":[{"StartTime":9541.0,"EndTime":9541.0,"X":302.0,"Y":322.0}]},{"StartTime":9703.0,"Objects":[{"StartTime":9703.0,"EndTime":9703.0,"X":213.0,"Y":180.0}]},{"StartTime":9865.0,"Objects":[{"StartTime":9865.0,"EndTime":9865.0,"X":156.0,"Y":290.0}]},{"StartTime":10027.0,"Objects":[{"StartTime":10027.0,"EndTime":10027.0,"X":276.0,"Y":88.0}]},{"StartTime":10189.0,"Objects":[{"StartTime":10189.0,"EndTime":10189.0,"X":370.0,"Y":237.0}]},{"StartTime":10351.0,"Objects":[{"StartTime":10351.0,"EndTime":10351.0,"X":179.0,"Y":92.0}]},{"StartTime":10514.0,"Objects":[{"StartTime":10514.0,"EndTime":10514.0,"X":327.0,"Y":10.0}]},{"StartTime":10676.0,"Objects":[{"StartTime":10676.0,"EndTime":10676.0,"X":239.0,"Y":267.0}]},{"StartTime":10838.0,"Objects":[{"StartTime":10838.0,"EndTime":10838.0,"X":92.0,"Y":0.0}]},{"StartTime":11000.0,"Objects":[{"StartTime":11000.0,"EndTime":11000.0,"X":360.0,"Y":142.0}]},{"StartTime":11162.0,"Objects":[{"StartTime":11162.0,"EndTime":11162.0,"X":17.0,"Y":198.0}]},{"StartTime":11324.0,"Objects":[{"StartTime":11324.0,"EndTime":11324.0,"X":327.0,"Y":10.0}]},{"StartTime":11487.0,"Objects":[{"StartTime":11487.0,"EndTime":11487.0,"X":213.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11694.0,"EndTime":11694.0,"X":203.7394,"Y":124.416283,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11811.0,"Objects":[{"StartTime":11811.0,"EndTime":11811.0,"X":179.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12099.0,"EndTime":12099.0,"X":360.0068,"Y":142.989914,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12297.0,"Objects":[{"StartTime":12297.0,"EndTime":12297.0,"X":161.0,"Y":247.0}]},{"StartTime":12460.0,"Objects":[{"StartTime":12460.0,"EndTime":12460.0,"X":333.0,"Y":351.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12586.0,"EndTime":12586.0,"X":237.9624,"Y":377.402344,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12784.0,"Objects":[{"StartTime":12784.0,"EndTime":12784.0,"X":355.440155,"Y":230.44014,"StackOffset":{"X":-3.559845,"Y":-3.55986023}},{"StartTime":12991.0,"EndTime":12991.0,"X":475.1857,"Y":275.841736,"StackOffset":{"X":-3.559845,"Y":-3.55986023}}]},{"StartTime":13108.0,"Objects":[{"StartTime":13108.0,"EndTime":13108.0,"X":478.0,"Y":279.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13234.0,"EndTime":13234.0,"X":465.9604,"Y":377.18808,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13432.0,"Objects":[{"StartTime":13432.0,"EndTime":13432.0,"X":262.0,"Y":177.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13558.0,"EndTime":13558.0,"X":276.4605,"Y":275.036957,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13757.0,"Objects":[{"StartTime":13757.0,"EndTime":13757.0,"X":462.0,"Y":114.0}]},{"StartTime":13919.0,"Objects":[{"StartTime":13919.0,"EndTime":13919.0,"X":330.0,"Y":16.0}]},{"StartTime":14081.0,"Objects":[{"StartTime":14081.0,"EndTime":14081.0,"X":424.0,"Y":194.0}]},{"StartTime":14243.0,"Objects":[{"StartTime":14243.0,"EndTime":14243.0,"X":492.88028,"Y":18.8802814}]},{"StartTime":14324.0,"Objects":[{"StartTime":14324.0,"EndTime":14324.0,"X":496.440155,"Y":22.4401417}]},{"StartTime":14405.0,"Objects":[{"StartTime":14405.0,"EndTime":14405.0,"X":500.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":14693.0,"EndTime":14693.0,"X":329.573761,"Y":91.81665,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":14892.0,"Objects":[{"StartTime":14892.0,"EndTime":14892.0,"X":194.0,"Y":239.0}]},{"StartTime":15054.0,"Objects":[{"StartTime":15054.0,"EndTime":15054.0,"X":145.0,"Y":179.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":15180.0,"EndTime":15180.0,"X":162.32164,"Y":81.54735,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":15378.0,"Objects":[{"StartTime":15378.0,"EndTime":15378.0,"X":334.0,"Y":205.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":15585.0,"EndTime":15585.0,"X":351.839874,"Y":352.5982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":15703.0,"Objects":[{"StartTime":15703.0,"EndTime":15703.0,"X":280.0,"Y":384.0}]},{"StartTime":15865.0,"Objects":[{"StartTime":15865.0,"EndTime":15865.0,"X":428.0,"Y":267.0}]},{"StartTime":16027.0,"Objects":[{"StartTime":16027.0,"EndTime":16027.0,"X":267.0,"Y":152.0}]},{"StartTime":16189.0,"Objects":[{"StartTime":16189.0,"EndTime":16189.0,"X":435.0,"Y":350.0}]},{"StartTime":16351.0,"Objects":[{"StartTime":16351.0,"EndTime":16351.0,"X":512.0,"Y":117.0}]},{"StartTime":16514.0,"Objects":[{"StartTime":16514.0,"EndTime":16514.0,"X":317.0,"Y":254.0}]},{"StartTime":16595.0,"Objects":[{"StartTime":16595.0,"EndTime":16595.0,"X":274.0,"Y":268.0}]},{"StartTime":16676.0,"Objects":[{"StartTime":16676.0,"EndTime":16676.0,"X":231.0,"Y":240.0}]},{"StartTime":16757.0,"Objects":[{"StartTime":16757.0,"EndTime":16757.0,"X":225.0,"Y":184.0}]},{"StartTime":16838.0,"Objects":[{"StartTime":16838.0,"EndTime":16838.0,"X":267.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":16883.0,"EndTime":16883.0,"X":314.118317,"Y":167.4607,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":17000.0,"X":163.0,"Y":356.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17288.0,"EndTime":17288.0,"X":90.0459442,"Y":235.082169,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17487.0,"Objects":[{"StartTime":17487.0,"EndTime":17487.0,"X":267.0,"Y":152.0}]},{"StartTime":17649.0,"Objects":[{"StartTime":17649.0,"EndTime":17649.0,"X":133.0,"Y":23.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17775.0,"EndTime":17775.0,"X":149.881119,"Y":120.732796,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17973.0,"Objects":[{"StartTime":17973.0,"EndTime":17973.0,"X":355.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18180.0,"EndTime":18180.0,"X":388.59436,"Y":206.28183,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18297.0,"Objects":[{"StartTime":18297.0,"EndTime":18297.0,"X":345.0,"Y":146.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18585.0,"EndTime":18585.0,"X":167.093735,"Y":210.64801,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18784.0,"Objects":[{"StartTime":18784.0,"EndTime":18784.0,"X":381.0,"Y":76.0}]},{"StartTime":18946.0,"Objects":[{"StartTime":18946.0,"EndTime":18946.0,"X":234.0,"Y":23.0}]},{"StartTime":19108.0,"Objects":[{"StartTime":19108.0,"EndTime":19108.0,"X":316.0,"Y":229.0}]},{"StartTime":19270.0,"Objects":[{"StartTime":19270.0,"EndTime":19270.0,"X":456.0,"Y":47.0}]},{"StartTime":19432.0,"Objects":[{"StartTime":19432.0,"EndTime":19432.0,"X":243.0,"Y":135.0}]},{"StartTime":19514.0,"Objects":[{"StartTime":19514.0,"EndTime":19514.0,"X":247.0,"Y":124.0}]},{"StartTime":19595.0,"Objects":[{"StartTime":19595.0,"EndTime":19595.0,"X":252.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19721.0,"EndTime":19721.0,"X":345.13028,"Y":145.5859,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19919.0,"Objects":[{"StartTime":19919.0,"EndTime":19919.0,"X":477.0,"Y":348.0}]},{"StartTime":20081.0,"Objects":[{"StartTime":20081.0,"EndTime":20081.0,"X":316.0,"Y":229.0}]},{"StartTime":20243.0,"Objects":[{"StartTime":20243.0,"EndTime":20243.0,"X":490.0,"Y":131.0}]},{"StartTime":20405.0,"Objects":[{"StartTime":20405.0,"EndTime":20405.0,"X":350.0,"Y":315.0}]},{"StartTime":20487.0,"Objects":[{"StartTime":20487.0,"EndTime":20487.0,"X":331.0,"Y":326.0}]},{"StartTime":20568.0,"Objects":[{"StartTime":20568.0,"EndTime":20568.0,"X":307.0,"Y":324.0}]},{"StartTime":20730.0,"Objects":[{"StartTime":20730.0,"EndTime":20730.0,"X":149.44014,"Y":172.44014}]},{"StartTime":21054.0,"Objects":[{"StartTime":21054.0,"EndTime":21054.0,"X":153.0,"Y":176.0}]},{"StartTime":21216.0,"Objects":[{"StartTime":21216.0,"EndTime":21216.0,"X":216.0,"Y":241.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21504.0,"EndTime":21504.0,"X":195.1709,"Y":367.652924,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21703.0,"Objects":[{"StartTime":21703.0,"EndTime":21703.0,"X":69.0,"Y":222.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21829.0,"EndTime":21829.0,"X":81.0571747,"Y":285.124634,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22189.0,"Objects":[{"StartTime":22189.0,"EndTime":22189.0,"X":109.0,"Y":82.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22513.0,"EndTime":22513.0,"X":4.257408,"Y":47.9354248,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22801.0,"EndTime":22801.0,"X":109.0,"Y":82.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23000.0,"Objects":[{"StartTime":23000.0,"EndTime":23000.0,"X":172.0,"Y":127.0}]},{"StartTime":23162.0,"Objects":[{"StartTime":23162.0,"EndTime":23162.0,"X":277.0,"Y":0.0}]},{"StartTime":23324.0,"Objects":[{"StartTime":23324.0,"EndTime":23324.0,"X":209.0,"Y":33.0}]},{"StartTime":23487.0,"Objects":[{"StartTime":23487.0,"EndTime":23487.0,"X":330.0,"Y":148.0}]},{"StartTime":23649.0,"Objects":[{"StartTime":23649.0,"EndTime":23649.0,"X":379.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23775.0,"EndTime":23775.0,"X":361.026459,"Y":30.37888,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23973.0,"Objects":[{"StartTime":23973.0,"EndTime":23973.0,"X":230.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24261.0,"EndTime":24261.0,"X":211.478638,"Y":312.3779,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24460.0,"Objects":[{"StartTime":24460.0,"EndTime":24460.0,"X":57.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24586.0,"EndTime":24586.0,"X":67.68643,"Y":195.35968,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24784.0,"Objects":[{"StartTime":24784.0,"EndTime":24784.0,"X":0.0,"Y":365.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25072.0,"EndTime":25072.0,"X":104.24324,"Y":330.343933,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25432.0,"Objects":[{"StartTime":25432.0,"EndTime":25432.0,"X":352.0,"Y":146.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25720.0,"EndTime":25720.0,"X":229.388351,"Y":184.353943,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25919.0,"Objects":[{"StartTime":25919.0,"EndTime":25919.0,"X":346.0,"Y":306.0}]},{"StartTime":26081.0,"Objects":[{"StartTime":26081.0,"EndTime":26081.0,"X":283.0,"Y":346.0}]},{"StartTime":26243.0,"Objects":[{"StartTime":26243.0,"EndTime":26243.0,"X":352.0,"Y":229.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26369.0,"EndTime":26369.0,"X":412.114777,"Y":251.14682,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26568.0,"Objects":[{"StartTime":26568.0,"EndTime":26568.0,"X":257.0,"Y":75.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26856.0,"EndTime":26856.0,"X":229.16745,"Y":182.521591,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":27054.0,"Objects":[{"StartTime":27054.0,"EndTime":27054.0,"X":401.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27180.0,"EndTime":27180.0,"X":389.483368,"Y":9.658455,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":27378.0,"Objects":[{"StartTime":27378.0,"EndTime":27378.0,"X":486.0,"Y":170.0}]},{"StartTime":27541.0,"Objects":[{"StartTime":27541.0,"EndTime":27541.0,"X":291.88028,"Y":67.88028}]},{"StartTime":27622.0,"Objects":[{"StartTime":27622.0,"EndTime":27622.0,"X":295.440155,"Y":71.44014}]},{"StartTime":27703.0,"Objects":[{"StartTime":27703.0,"EndTime":27703.0,"X":299.0,"Y":75.0}]},{"StartTime":27865.0,"Objects":[{"StartTime":27865.0,"EndTime":27865.0,"X":352.0,"Y":229.0}]},{"StartTime":28027.0,"Objects":[{"StartTime":28027.0,"EndTime":28027.0,"X":480.88028,"Y":83.88028}]},{"StartTime":28108.0,"Objects":[{"StartTime":28108.0,"EndTime":28108.0,"X":484.440155,"Y":87.44014}]},{"StartTime":28189.0,"Objects":[{"StartTime":28189.0,"EndTime":28189.0,"X":488.0,"Y":91.0}]},{"StartTime":28351.0,"Objects":[{"StartTime":28351.0,"EndTime":28351.0,"X":302.0,"Y":157.0}]},{"StartTime":28514.0,"Objects":[{"StartTime":28514.0,"EndTime":28514.0,"X":492.0,"Y":249.0}]},{"StartTime":28676.0,"Objects":[{"StartTime":28676.0,"EndTime":28676.0,"X":249.0,"Y":350.0}]},{"StartTime":28838.0,"Objects":[{"StartTime":28838.0,"EndTime":28838.0,"X":351.88028,"Y":230.88028}]},{"StartTime":28919.0,"Objects":[{"StartTime":28919.0,"EndTime":28919.0,"X":355.440155,"Y":234.44014}]},{"StartTime":29000.0,"Objects":[{"StartTime":29000.0,"EndTime":29000.0,"X":359.0,"Y":238.0}]},{"StartTime":29162.0,"Objects":[{"StartTime":29162.0,"EndTime":29162.0,"X":399.0,"Y":383.0}]},{"StartTime":29324.0,"Objects":[{"StartTime":29324.0,"EndTime":29324.0,"X":216.88028,"Y":239.88028}]},{"StartTime":29405.0,"Objects":[{"StartTime":29405.0,"EndTime":29405.0,"X":220.44014,"Y":243.44014}]},{"StartTime":29487.0,"Objects":[{"StartTime":29487.0,"EndTime":29487.0,"X":224.0,"Y":247.0}]},{"StartTime":29649.0,"Objects":[{"StartTime":29649.0,"EndTime":29649.0,"X":370.0,"Y":257.0}]},{"StartTime":29811.0,"Objects":[{"StartTime":29811.0,"EndTime":29811.0,"X":159.0,"Y":384.0}]},{"StartTime":29973.0,"Objects":[{"StartTime":29973.0,"EndTime":29973.0,"X":329.0,"Y":329.0}]},{"StartTime":30135.0,"Objects":[{"StartTime":30135.0,"EndTime":30135.0,"X":217.0,"Y":278.0}]},{"StartTime":30297.0,"Objects":[{"StartTime":30297.0,"EndTime":30297.0,"X":254.0,"Y":376.0}]},{"StartTime":30460.0,"Objects":[{"StartTime":30460.0,"EndTime":30460.0,"X":340.0,"Y":232.0}]},{"StartTime":30622.0,"Objects":[{"StartTime":30622.0,"EndTime":30622.0,"X":176.0,"Y":159.0}]},{"StartTime":30784.0,"Objects":[{"StartTime":30784.0,"EndTime":30784.0,"X":329.0,"Y":329.0}]},{"StartTime":30946.0,"Objects":[{"StartTime":30946.0,"EndTime":30946.0,"X":124.0,"Y":235.0}]},{"StartTime":31108.0,"Objects":[{"StartTime":31108.0,"EndTime":31108.0,"X":390.0,"Y":102.0}]},{"StartTime":31270.0,"Objects":[{"StartTime":31270.0,"EndTime":31270.0,"X":254.0,"Y":376.0}]},{"StartTime":31432.0,"Objects":[{"StartTime":31432.0,"EndTime":31432.0,"X":176.0,"Y":36.0}]},{"StartTime":32081.0,"Objects":[{"StartTime":32081.0,"EndTime":32081.0,"X":11.0,"Y":207.0}]},{"StartTime":32162.0,"Objects":[{"StartTime":32162.0,"EndTime":32162.0,"X":9.0,"Y":195.0}]},{"StartTime":32243.0,"Objects":[{"StartTime":32243.0,"EndTime":32243.0,"X":12.0,"Y":183.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32450.0,"EndTime":32450.0,"X":165.248047,"Y":205.856049,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32568.0,"Objects":[{"StartTime":32568.0,"EndTime":32568.0,"X":230.0,"Y":258.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32694.0,"EndTime":32694.0,"X":241.458481,"Y":338.973267,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32892.0,"Objects":[{"StartTime":32892.0,"EndTime":32892.0,"X":412.0,"Y":228.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33018.0,"EndTime":33018.0,"X":427.511627,"Y":147.704559,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":33216.0,"Objects":[{"StartTime":33216.0,"EndTime":33216.0,"X":289.0,"Y":55.0}]},{"StartTime":33378.0,"Objects":[{"StartTime":33378.0,"EndTime":33378.0,"X":307.0,"Y":126.0}]},{"StartTime":33541.0,"Objects":[{"StartTime":33541.0,"EndTime":33541.0,"X":420.0,"Y":29.0}]},{"StartTime":33703.0,"Objects":[{"StartTime":33703.0,"EndTime":33703.0,"X":356.0,"Y":0.0}]},{"StartTime":33865.0,"Objects":[{"StartTime":33865.0,"EndTime":33865.0,"X":228.0,"Y":103.0}]},{"StartTime":34027.0,"Objects":[{"StartTime":34027.0,"EndTime":34027.0,"X":169.0,"Y":156.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34153.0,"EndTime":34153.0,"X":89.55082,"Y":173.8051,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34351.0,"Objects":[{"StartTime":34351.0,"EndTime":34351.0,"X":225.0,"Y":321.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34558.0,"EndTime":34558.0,"X":330.9766,"Y":360.775024,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34676.0,"Objects":[{"StartTime":34676.0,"EndTime":34676.0,"X":394.0,"Y":318.0}]},{"StartTime":34838.0,"Objects":[{"StartTime":34838.0,"EndTime":34838.0,"X":456.0,"Y":156.0}]},{"StartTime":35000.0,"Objects":[{"StartTime":35000.0,"EndTime":35000.0,"X":387.0,"Y":182.0}]},{"StartTime":35162.0,"Objects":[{"StartTime":35162.0,"EndTime":35162.0,"X":491.0,"Y":363.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35288.0,"EndTime":35288.0,"X":500.417938,"Y":282.124268,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35487.0,"Objects":[{"StartTime":35487.0,"EndTime":35487.0,"X":302.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35613.0,"EndTime":35613.0,"X":313.509155,"Y":229.585571,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35811.0,"Objects":[{"StartTime":35811.0,"EndTime":35811.0,"X":456.0,"Y":63.0}]},{"StartTime":35973.0,"Objects":[{"StartTime":35973.0,"EndTime":35973.0,"X":386.0,"Y":37.0}]},{"StartTime":36135.0,"Objects":[{"StartTime":36135.0,"EndTime":36135.0,"X":456.0,"Y":156.0}]},{"StartTime":36297.0,"Objects":[{"StartTime":36297.0,"EndTime":36297.0,"X":387.0,"Y":182.0}]},{"StartTime":36460.0,"Objects":[{"StartTime":36460.0,"EndTime":36460.0,"X":456.0,"Y":63.0}]},{"StartTime":36622.0,"Objects":[{"StartTime":36622.0,"EndTime":36622.0,"X":302.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36748.0,"EndTime":36748.0,"X":231.357132,"Y":120.073067,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36946.0,"Objects":[{"StartTime":36946.0,"EndTime":36946.0,"X":127.0,"Y":34.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37234.0,"EndTime":37234.0,"X":104.682526,"Y":195.795059,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37432.0,"Objects":[{"StartTime":37432.0,"EndTime":37432.0,"X":229.0,"Y":33.0}]},{"StartTime":37595.0,"Objects":[{"StartTime":37595.0,"EndTime":37595.0,"X":-7.119718,"Y":148.88028}]},{"StartTime":37676.0,"Objects":[{"StartTime":37676.0,"EndTime":37676.0,"X":-3.559859,"Y":152.44014}]},{"StartTime":37757.0,"Objects":[{"StartTime":37757.0,"EndTime":37757.0,"X":0.0,"Y":156.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38045.0,"EndTime":38045.0,"X":105.247383,"Y":196.403824,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38243.0,"Objects":[{"StartTime":38243.0,"EndTime":38243.0,"X":223.0,"Y":324.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38369.0,"EndTime":38369.0,"X":145.465851,"Y":298.830627,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38568.0,"Objects":[{"StartTime":38568.0,"EndTime":38568.0,"X":261.0,"Y":217.0}]},{"StartTime":38730.0,"Objects":[{"StartTime":38730.0,"EndTime":38730.0,"X":105.0,"Y":196.0}]},{"StartTime":38892.0,"Objects":[{"StartTime":38892.0,"EndTime":38892.0,"X":159.0,"Y":384.0}]},{"StartTime":39054.0,"Objects":[{"StartTime":39054.0,"EndTime":39054.0,"X":57.0,"Y":263.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":39180.0,"EndTime":39180.0,"X":44.4304,"Y":343.747,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":39378.0,"Objects":[{"StartTime":39378.0,"EndTime":39378.0,"X":185.0,"Y":183.0}]},{"StartTime":39541.0,"Objects":[{"StartTime":39541.0,"EndTime":39541.0,"X":344.0,"Y":308.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":39829.0,"EndTime":39829.0,"X":326.713867,"Y":145.787735,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":40027.0,"Objects":[{"StartTime":40027.0,"EndTime":40027.0,"X":223.0,"Y":324.0}]},{"StartTime":40189.0,"Objects":[{"StartTime":40189.0,"EndTime":40189.0,"X":436.0,"Y":193.0}]},{"StartTime":40351.0,"Objects":[{"StartTime":40351.0,"EndTime":40351.0,"X":244.0,"Y":93.0}]},{"StartTime":40514.0,"Objects":[{"StartTime":40514.0,"EndTime":40514.0,"X":413.88028,"Y":280.88028}]},{"StartTime":40595.0,"Objects":[{"StartTime":40595.0,"EndTime":40595.0,"X":417.440155,"Y":284.440155}]},{"StartTime":40676.0,"Objects":[{"StartTime":40676.0,"EndTime":40676.0,"X":421.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":40883.0,"EndTime":40883.0,"X":343.534119,"Y":307.5015,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41000.0,"Objects":[{"StartTime":41000.0,"EndTime":41000.0,"X":103.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":41288.0,"EndTime":41288.0,"X":199.702286,"Y":178.3348,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41487.0,"Objects":[{"StartTime":41487.0,"EndTime":41487.0,"X":410.88028,"Y":12.8802814}]},{"StartTime":41568.0,"Objects":[{"StartTime":41568.0,"EndTime":41568.0,"X":414.440155,"Y":16.4401417}]},{"StartTime":41649.0,"Objects":[{"StartTime":41649.0,"EndTime":41649.0,"X":418.0,"Y":20.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":41856.0,"EndTime":41856.0,"X":316.865723,"Y":65.63147,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":41973.0,"Objects":[{"StartTime":41973.0,"EndTime":41973.0,"X":375.0,"Y":116.0}]},{"StartTime":42135.0,"Objects":[{"StartTime":42135.0,"EndTime":42135.0,"X":181.0,"Y":32.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42261.0,"EndTime":42261.0,"X":80.84002,"Y":-0.0190725327,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42460.0,"Objects":[{"StartTime":42460.0,"EndTime":42460.0,"X":280.0,"Y":169.0}]},{"StartTime":42622.0,"Objects":[{"StartTime":42622.0,"EndTime":42622.0,"X":78.0,"Y":332.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42829.0,"EndTime":42829.0,"X":123.77272,"Y":225.780655,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42946.0,"Objects":[{"StartTime":42946.0,"EndTime":42946.0,"X":189.0,"Y":264.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42991.0,"EndTime":42991.0,"X":240.3147,"Y":280.623077,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":43108.0,"Objects":[{"StartTime":43108.0,"EndTime":43108.0,"X":381.0,"Y":384.0}]},{"StartTime":43270.0,"Objects":[{"StartTime":43270.0,"EndTime":43270.0,"X":444.0,"Y":339.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":43396.0,"EndTime":43396.0,"X":455.20694,"Y":284.4595,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":43595.0,"Objects":[{"StartTime":43595.0,"EndTime":43595.0,"X":280.0,"Y":169.0}]},{"StartTime":43757.0,"Objects":[{"StartTime":43757.0,"EndTime":43757.0,"X":397.440155,"Y":165.44014}]},{"StartTime":43919.0,"Objects":[{"StartTime":43919.0,"EndTime":43919.0,"X":240.0,"Y":280.0}]},{"StartTime":44081.0,"Objects":[{"StartTime":44081.0,"EndTime":44081.0,"X":401.0,"Y":169.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44369.0,"EndTime":44369.0,"X":323.41684,"Y":41.0436325,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44568.0,"Objects":[{"StartTime":44568.0,"EndTime":44568.0,"X":455.0,"Y":284.0}]},{"StartTime":44730.0,"Objects":[{"StartTime":44730.0,"EndTime":44730.0,"X":280.0,"Y":169.0}]},{"StartTime":44892.0,"Objects":[{"StartTime":44892.0,"EndTime":44892.0,"X":446.0,"Y":58.0}]},{"StartTime":45054.0,"Objects":[{"StartTime":45054.0,"EndTime":45054.0,"X":313.88028,"Y":237.88028}]},{"StartTime":45135.0,"Objects":[{"StartTime":45135.0,"EndTime":45135.0,"X":317.440155,"Y":241.44014}]},{"StartTime":45216.0,"Objects":[{"StartTime":45216.0,"EndTime":45216.0,"X":321.0,"Y":245.0}]},{"StartTime":45378.0,"Objects":[{"StartTime":45378.0,"EndTime":45378.0,"X":224.0,"Y":19.0}]},{"StartTime":45541.0,"Objects":[{"StartTime":45541.0,"EndTime":45541.0,"X":401.0,"Y":169.0}]},{"StartTime":45703.0,"Objects":[{"StartTime":45703.0,"EndTime":45703.0,"X":144.0,"Y":285.0}]},{"StartTime":45865.0,"Objects":[{"StartTime":45865.0,"EndTime":45865.0,"X":98.0,"Y":221.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45991.0,"EndTime":45991.0,"X":108.747459,"Y":166.3671,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46108.0,"Objects":[{"StartTime":46108.0,"EndTime":46108.0,"X":127.0,"Y":95.0}]},{"StartTime":46189.0,"Objects":[{"StartTime":46189.0,"EndTime":46189.0,"X":130.0,"Y":81.0}]},{"StartTime":46351.0,"Objects":[{"StartTime":46351.0,"EndTime":46351.0,"X":0.0,"Y":173.0}]},{"StartTime":46514.0,"Objects":[{"StartTime":46514.0,"EndTime":46514.0,"X":133.0,"Y":68.0}]},{"StartTime":46676.0,"Objects":[{"StartTime":46676.0,"EndTime":46676.0,"X":273.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46883.0,"EndTime":46883.0,"X":143.723663,"Y":284.335815,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":47000.0,"Objects":[{"StartTime":47000.0,"EndTime":47000.0,"X":98.0,"Y":221.0}]},{"StartTime":47162.0,"Objects":[{"StartTime":47162.0,"EndTime":47162.0,"X":278.0,"Y":94.0}]},{"StartTime":47324.0,"Objects":[{"StartTime":47324.0,"EndTime":47324.0,"X":216.0,"Y":52.0}]},{"StartTime":47487.0,"Objects":[{"StartTime":47487.0,"EndTime":47487.0,"X":325.0,"Y":319.0}]},{"StartTime":47649.0,"Objects":[{"StartTime":47649.0,"EndTime":47649.0,"X":193.0,"Y":209.0}]},{"StartTime":47730.0,"Objects":[{"StartTime":47730.0,"EndTime":47730.0,"X":195.0,"Y":195.0}]},{"StartTime":47811.0,"Objects":[{"StartTime":47811.0,"EndTime":47811.0,"X":198.0,"Y":180.0}]},{"StartTime":47973.0,"Objects":[{"StartTime":47973.0,"EndTime":47973.0,"X":356.0,"Y":70.0}]},{"StartTime":48135.0,"Objects":[{"StartTime":48135.0,"EndTime":48135.0,"X":424.0,"Y":119.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":48261.0,"EndTime":48261.0,"X":437.1501,"Y":190.887146,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":48378.0,"Objects":[{"StartTime":48378.0,"EndTime":48378.0,"X":452.0,"Y":263.0}]},{"StartTime":48460.0,"Objects":[{"StartTime":48460.0,"EndTime":48460.0,"X":455.0,"Y":283.0}]},{"StartTime":48622.0,"Objects":[{"StartTime":48622.0,"EndTime":48622.0,"X":338.0,"Y":197.0}]},{"StartTime":48784.0,"Objects":[{"StartTime":48784.0,"EndTime":48784.0,"X":235.0,"Y":343.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":48946.0,"EndTime":48946.0,"X":249.644958,"Y":271.402435,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":49072.0,"EndTime":49072.0,"X":235.0,"Y":343.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49270.0,"Objects":[{"StartTime":49270.0,"EndTime":49270.0,"X":48.8802834,"Y":199.88028}]},{"StartTime":49351.0,"Objects":[{"StartTime":49351.0,"EndTime":49351.0,"X":52.44014,"Y":203.44014}]},{"StartTime":49432.0,"Objects":[{"StartTime":49432.0,"EndTime":49432.0,"X":56.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":49558.0,"EndTime":49558.0,"X":127.47998,"Y":191.791489,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49676.0,"Objects":[{"StartTime":49676.0,"EndTime":49676.0,"X":198.0,"Y":180.0}]},{"StartTime":49757.0,"Objects":[{"StartTime":49757.0,"EndTime":49757.0,"X":222.0,"Y":175.0}]},{"StartTime":49919.0,"Objects":[{"StartTime":49919.0,"EndTime":49919.0,"X":344.0,"Y":84.0}]},{"StartTime":50081.0,"Objects":[{"StartTime":50081.0,"EndTime":50081.0,"X":239.0,"Y":6.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50207.0,"EndTime":50207.0,"X":249.335068,"Y":78.34551,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50405.0,"Objects":[{"StartTime":50405.0,"EndTime":50405.0,"X":385.0,"Y":177.0}]},{"StartTime":50568.0,"Objects":[{"StartTime":50568.0,"EndTime":50568.0,"X":465.88028,"Y":67.88028}]},{"StartTime":50649.0,"Objects":[{"StartTime":50649.0,"EndTime":50649.0,"X":469.440155,"Y":71.44014}]},{"StartTime":50730.0,"Objects":[{"StartTime":50730.0,"EndTime":50730.0,"X":473.0,"Y":75.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50856.0,"EndTime":50856.0,"X":464.6807,"Y":147.604919,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50973.0,"Objects":[{"StartTime":50973.0,"EndTime":50973.0,"X":453.0,"Y":220.0}]},{"StartTime":51054.0,"Objects":[{"StartTime":51054.0,"EndTime":51054.0,"X":451.0,"Y":236.0}]},{"StartTime":51216.0,"Objects":[{"StartTime":51216.0,"EndTime":51216.0,"X":321.0,"Y":132.0}]},{"StartTime":51378.0,"Objects":[{"StartTime":51378.0,"EndTime":51378.0,"X":218.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":51504.0,"EndTime":51504.0,"X":289.1127,"Y":263.157532,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":51703.0,"Objects":[{"StartTime":51703.0,"EndTime":51703.0,"X":198.0,"Y":180.0}]},{"StartTime":51865.0,"Objects":[{"StartTime":51865.0,"EndTime":51865.0,"X":289.88028,"Y":264.88028}]},{"StartTime":51946.0,"Objects":[{"StartTime":51946.0,"EndTime":51946.0,"X":293.440155,"Y":268.440155}]},{"StartTime":52027.0,"Objects":[{"StartTime":52027.0,"EndTime":52027.0,"X":297.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52153.0,"EndTime":52153.0,"X":287.091919,"Y":344.4052,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52270.0,"Objects":[{"StartTime":52270.0,"EndTime":52270.0,"X":223.44014,"Y":380.440155}]},{"StartTime":52351.0,"Objects":[{"StartTime":52351.0,"EndTime":52351.0,"X":227.0,"Y":384.0}]},{"StartTime":52514.0,"Objects":[{"StartTime":52514.0,"EndTime":52514.0,"X":55.8802834,"Y":234.88028}]},{"StartTime":52595.0,"Objects":[{"StartTime":52595.0,"EndTime":52595.0,"X":59.44014,"Y":238.44014}]},{"StartTime":52676.0,"Objects":[{"StartTime":52676.0,"EndTime":52676.0,"X":63.0,"Y":242.0}]},{"StartTime":52757.0,"Objects":[{"StartTime":52757.0,"EndTime":52757.0,"X":91.0,"Y":196.0}]},{"StartTime":52838.0,"Objects":[{"StartTime":52838.0,"EndTime":52838.0,"X":138.0,"Y":186.0}]},{"StartTime":52919.0,"Objects":[{"StartTime":52919.0,"EndTime":52919.0,"X":186.0,"Y":209.0}]},{"StartTime":53000.0,"Objects":[{"StartTime":53000.0,"EndTime":53000.0,"X":187.0,"Y":230.0}]},{"StartTime":53081.0,"Objects":[{"StartTime":53081.0,"EndTime":53081.0,"X":234.0,"Y":278.0}]},{"StartTime":53162.0,"Objects":[{"StartTime":53162.0,"EndTime":53162.0,"X":297.0,"Y":272.0}]},{"StartTime":53243.0,"Objects":[{"StartTime":53243.0,"EndTime":53243.0,"X":330.0,"Y":217.0}]},{"StartTime":53324.0,"Objects":[{"StartTime":53324.0,"EndTime":53324.0,"X":291.440155,"Y":157.44014}]},{"StartTime":53649.0,"Objects":[{"StartTime":53649.0,"EndTime":53649.0,"X":295.0,"Y":161.0}]},{"StartTime":53811.0,"Objects":[{"StartTime":53811.0,"EndTime":53811.0,"X":401.0,"Y":308.0}]},{"StartTime":53973.0,"Objects":[{"StartTime":53973.0,"EndTime":53973.0,"X":187.0,"Y":230.0}]},{"StartTime":54135.0,"Objects":[{"StartTime":54135.0,"EndTime":54135.0,"X":383.0,"Y":113.0}]},{"StartTime":54297.0,"Objects":[{"StartTime":54297.0,"EndTime":54297.0,"X":268.0,"Y":345.0}]},{"StartTime":54460.0,"Objects":[{"StartTime":54460.0,"EndTime":54460.0,"X":181.0,"Y":103.0}]},{"StartTime":54622.0,"Objects":[{"StartTime":54622.0,"EndTime":54622.0,"X":353.0,"Y":192.0}]},{"StartTime":54784.0,"Objects":[{"StartTime":54784.0,"EndTime":54784.0,"X":125.0,"Y":325.0}]},{"StartTime":54946.0,"Objects":[{"StartTime":54946.0,"EndTime":54946.0,"X":253.0,"Y":53.0}]},{"StartTime":55108.0,"Objects":[{"StartTime":55108.0,"EndTime":55108.0,"X":349.0,"Y":356.0}]},{"StartTime":55270.0,"Objects":[{"StartTime":55270.0,"EndTime":55270.0,"X":107.0,"Y":207.0}]},{"StartTime":55432.0,"Objects":[{"StartTime":55432.0,"EndTime":55432.0,"X":408.0,"Y":39.0}]},{"StartTime":55595.0,"Objects":[{"StartTime":55595.0,"EndTime":55595.0,"X":93.0,"Y":84.0}]},{"StartTime":55757.0,"Objects":[{"StartTime":55757.0,"EndTime":55757.0,"X":434.0,"Y":284.0}]},{"StartTime":55919.0,"Objects":[{"StartTime":55919.0,"EndTime":55919.0,"X":189.0,"Y":384.0}]},{"StartTime":56081.0,"Objects":[{"StartTime":56081.0,"EndTime":56081.0,"X":261.0,"Y":22.0}]},{"StartTime":56730.0,"Objects":[{"StartTime":56730.0,"EndTime":56730.0,"X":261.0,"Y":22.0}]},{"StartTime":56892.0,"Objects":[{"StartTime":56892.0,"EndTime":56892.0,"X":349.0,"Y":270.0}]},{"StartTime":57054.0,"Objects":[{"StartTime":57054.0,"EndTime":57054.0,"X":403.0,"Y":210.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57261.0,"EndTime":57261.0,"X":266.4971,"Y":168.565536,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":57378.0,"Objects":[{"StartTime":57378.0,"EndTime":57378.0,"X":192.0,"Y":141.0}]},{"StartTime":57541.0,"Objects":[{"StartTime":57541.0,"EndTime":57541.0,"X":0.0,"Y":284.0}]},{"StartTime":57703.0,"Objects":[{"StartTime":57703.0,"EndTime":57703.0,"X":94.0,"Y":384.0}]},{"StartTime":57865.0,"Objects":[{"StartTime":57865.0,"EndTime":57865.0,"X":3.880282,"Y":172.88028}]},{"StartTime":57946.0,"Objects":[{"StartTime":57946.0,"EndTime":57946.0,"X":7.44014072,"Y":176.44014}]},{"StartTime":58027.0,"Objects":[{"StartTime":58027.0,"EndTime":58027.0,"X":11.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58072.0,"EndTime":58072.0,"X":60.9864349,"Y":199.046555,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58189.0,"Objects":[{"StartTime":58189.0,"EndTime":58189.0,"X":227.0,"Y":293.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58396.0,"EndTime":58396.0,"X":176.743668,"Y":315.771759,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58514.0,"Objects":[{"StartTime":58514.0,"EndTime":58514.0,"X":117.0,"Y":261.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58802.0,"EndTime":58802.0,"X":290.002,"Y":336.26297,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59000.0,"Objects":[{"StartTime":59000.0,"EndTime":59000.0,"X":403.0,"Y":210.0}]},{"StartTime":59162.0,"Objects":[{"StartTime":59162.0,"EndTime":59162.0,"X":512.0,"Y":346.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59288.0,"EndTime":59288.0,"X":419.275238,"Y":315.02655,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59487.0,"Objects":[{"StartTime":59487.0,"EndTime":59487.0,"X":292.0,"Y":168.0}]},{"StartTime":59649.0,"Objects":[{"StartTime":59649.0,"EndTime":59649.0,"X":438.88028,"Y":99.88028}]},{"StartTime":59730.0,"Objects":[{"StartTime":59730.0,"EndTime":59730.0,"X":442.440155,"Y":103.44014}]},{"StartTime":59811.0,"Objects":[{"StartTime":59811.0,"EndTime":59811.0,"X":446.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60099.0,"EndTime":60099.0,"X":291.098572,"Y":167.505417,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60297.0,"Objects":[{"StartTime":60297.0,"EndTime":60297.0,"X":117.0,"Y":261.0}]},{"StartTime":60460.0,"Objects":[{"StartTime":60460.0,"EndTime":60460.0,"X":38.0,"Y":79.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60586.0,"EndTime":60586.0,"X":130.721649,"Y":113.926353,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60784.0,"Objects":[{"StartTime":60784.0,"EndTime":60784.0,"X":249.0,"Y":284.0}]},{"StartTime":60946.0,"Objects":[{"StartTime":60946.0,"EndTime":60946.0,"X":43.8802834,"Y":358.88028}]},{"StartTime":61027.0,"Objects":[{"StartTime":61027.0,"EndTime":61027.0,"X":47.44014,"Y":362.440155}]},{"StartTime":61108.0,"Objects":[{"StartTime":61108.0,"EndTime":61108.0,"X":51.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":61396.0,"EndTime":61396.0,"X":53.8655739,"Y":214.24295,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":61595.0,"Objects":[{"StartTime":61595.0,"EndTime":61595.0,"X":189.0,"Y":366.0}]},{"StartTime":61757.0,"Objects":[{"StartTime":61757.0,"EndTime":61757.0,"X":197.0,"Y":181.0}]},{"StartTime":61919.0,"Objects":[{"StartTime":61919.0,"EndTime":61919.0,"X":25.0,"Y":290.0}]},{"StartTime":62081.0,"Objects":[{"StartTime":62081.0,"EndTime":62081.0,"X":130.0,"Y":113.0}]},{"StartTime":62243.0,"Objects":[{"StartTime":62243.0,"EndTime":62243.0,"X":247.88028,"Y":282.88028}]},{"StartTime":62324.0,"Objects":[{"StartTime":62324.0,"EndTime":62324.0,"X":251.44014,"Y":286.440155}]},{"StartTime":62405.0,"Objects":[{"StartTime":62405.0,"EndTime":62405.0,"X":255.0,"Y":290.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62612.0,"EndTime":62612.0,"X":387.1793,"Y":342.8401,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62730.0,"Objects":[{"StartTime":62730.0,"EndTime":62730.0,"X":448.0,"Y":294.0}]},{"StartTime":62892.0,"Objects":[{"StartTime":62892.0,"EndTime":62892.0,"X":266.0,"Y":384.0}]},{"StartTime":63054.0,"Objects":[{"StartTime":63054.0,"EndTime":63054.0,"X":330.0,"Y":157.0}]},{"StartTime":63216.0,"Objects":[{"StartTime":63216.0,"EndTime":63216.0,"X":464.0,"Y":369.0}]},{"StartTime":63297.0,"Objects":[{"StartTime":63297.0,"EndTime":63297.0,"X":476.0,"Y":372.0}]},{"StartTime":63378.0,"Objects":[{"StartTime":63378.0,"EndTime":63378.0,"X":486.0,"Y":376.0}]},{"StartTime":63541.0,"Objects":[{"StartTime":63541.0,"EndTime":63541.0,"X":332.88028,"Y":236.88028}]},{"StartTime":63622.0,"Objects":[{"StartTime":63622.0,"EndTime":63622.0,"X":336.440155,"Y":240.44014}]},{"StartTime":63703.0,"Objects":[{"StartTime":63703.0,"EndTime":63703.0,"X":340.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63991.0,"EndTime":63991.0,"X":159.834656,"Y":305.091217,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64189.0,"Objects":[{"StartTime":64189.0,"EndTime":64189.0,"X":330.0,"Y":157.0}]},{"StartTime":64351.0,"Objects":[{"StartTime":64351.0,"EndTime":64351.0,"X":191.0,"Y":35.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":64477.0,"EndTime":64477.0,"X":277.459381,"Y":65.24982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64676.0,"Objects":[{"StartTime":64676.0,"EndTime":64676.0,"X":114.0,"Y":169.0}]},{"StartTime":64838.0,"Objects":[{"StartTime":64838.0,"EndTime":64838.0,"X":276.0,"Y":284.0}]},{"StartTime":65000.0,"Objects":[{"StartTime":65000.0,"EndTime":65000.0,"X":191.0,"Y":35.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65126.0,"EndTime":65126.0,"X":203.19455,"Y":133.42746,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65324.0,"Objects":[{"StartTime":65324.0,"EndTime":65324.0,"X":69.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65531.0,"EndTime":65531.0,"X":50.3194847,"Y":213.134308,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65649.0,"Objects":[{"StartTime":65649.0,"EndTime":65649.0,"X":114.0,"Y":169.0}]},{"StartTime":65811.0,"Objects":[{"StartTime":65811.0,"EndTime":65811.0,"X":276.0,"Y":284.0}]},{"StartTime":65973.0,"Objects":[{"StartTime":65973.0,"EndTime":65973.0,"X":385.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":66099.0,"EndTime":66099.0,"X":291.745331,"Y":168.527618,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":66297.0,"Objects":[{"StartTime":66297.0,"EndTime":66297.0,"X":426.0,"Y":382.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":66585.0,"EndTime":66585.0,"X":449.0037,"Y":226.493729,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":66784.0,"Objects":[{"StartTime":66784.0,"EndTime":66784.0,"X":277.0,"Y":65.0}]},{"StartTime":66946.0,"Objects":[{"StartTime":66946.0,"EndTime":66946.0,"X":466.0,"Y":140.0}]},{"StartTime":67108.0,"Objects":[{"StartTime":67108.0,"EndTime":67108.0,"X":276.0,"Y":284.0}]},{"StartTime":67270.0,"Objects":[{"StartTime":67270.0,"EndTime":67270.0,"X":370.0,"Y":44.0}]},{"StartTime":67432.0,"Objects":[{"StartTime":67432.0,"EndTime":67432.0,"X":449.0,"Y":226.0}]},{"StartTime":67595.0,"Objects":[{"StartTime":67595.0,"EndTime":67595.0,"X":218.0,"Y":127.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67802.0,"EndTime":67802.0,"X":78.44003,"Y":170.844543,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67919.0,"Objects":[{"StartTime":67919.0,"EndTime":67919.0,"X":17.0,"Y":215.0}]},{"StartTime":68000.0,"Objects":[{"StartTime":68000.0,"EndTime":68000.0,"X":0.0,"Y":184.0}]},{"StartTime":68081.0,"Objects":[{"StartTime":68081.0,"EndTime":68081.0,"X":12.0,"Y":147.0}]},{"StartTime":68243.0,"Objects":[{"StartTime":68243.0,"EndTime":68243.0,"X":178.44014,"Y":264.440155}]},{"StartTime":68405.0,"Objects":[{"StartTime":68405.0,"EndTime":68405.0,"X":5.0,"Y":376.0}]},{"StartTime":68568.0,"Objects":[{"StartTime":68568.0,"EndTime":68568.0,"X":182.0,"Y":268.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":68775.0,"EndTime":68775.0,"X":308.081726,"Y":309.018158,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":68892.0,"Objects":[{"StartTime":68892.0,"EndTime":68892.0,"X":352.0,"Y":379.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69180.0,"EndTime":69180.0,"X":322.055725,"Y":182.913208,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69378.0,"Objects":[{"StartTime":69378.0,"EndTime":69378.0,"X":452.0,"Y":288.0}]},{"StartTime":69541.0,"Objects":[{"StartTime":69541.0,"EndTime":69541.0,"X":236.0,"Y":384.0}]},{"StartTime":69703.0,"Objects":[{"StartTime":69703.0,"EndTime":69703.0,"X":428.0,"Y":187.0}]},{"StartTime":69865.0,"Objects":[{"StartTime":69865.0,"EndTime":69865.0,"X":449.0,"Y":384.0}]},{"StartTime":70027.0,"Objects":[{"StartTime":70027.0,"EndTime":70027.0,"X":229.88028,"Y":175.88028}]},{"StartTime":70108.0,"Objects":[{"StartTime":70108.0,"EndTime":70108.0,"X":233.44014,"Y":179.44014}]},{"StartTime":70189.0,"Objects":[{"StartTime":70189.0,"EndTime":70189.0,"X":237.0,"Y":183.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70396.0,"EndTime":70396.0,"X":311.577423,"Y":106.287315,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70514.0,"Objects":[{"StartTime":70514.0,"EndTime":70514.0,"X":302.0,"Y":117.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70640.0,"EndTime":70640.0,"X":210.930847,"Y":150.767288,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70838.0,"Objects":[{"StartTime":70838.0,"EndTime":70838.0,"X":335.0,"Y":2.0}]},{"StartTime":71000.0,"Objects":[{"StartTime":71000.0,"EndTime":71000.0,"X":428.88028,"Y":187.88028}]},{"StartTime":71081.0,"Objects":[{"StartTime":71081.0,"EndTime":71081.0,"X":432.440155,"Y":191.44014}]},{"StartTime":71162.0,"Objects":[{"StartTime":71162.0,"EndTime":71162.0,"X":436.0,"Y":195.0}]},{"StartTime":71324.0,"Objects":[{"StartTime":71324.0,"EndTime":71324.0,"X":311.0,"Y":106.0}]},{"StartTime":71487.0,"Objects":[{"StartTime":71487.0,"EndTime":71487.0,"X":224.0,"Y":322.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71775.0,"EndTime":71775.0,"X":95.6513062,"Y":234.867325,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":71973.0,"Objects":[{"StartTime":71973.0,"EndTime":71973.0,"X":49.0,"Y":175.0}]},{"StartTime":72135.0,"Objects":[{"StartTime":72135.0,"EndTime":72135.0,"X":177.0,"Y":84.0}]},{"StartTime":72297.0,"Objects":[{"StartTime":72297.0,"EndTime":72297.0,"X":20.0,"Y":260.0}]},{"StartTime":72460.0,"Objects":[{"StartTime":72460.0,"EndTime":72460.0,"X":86.0,"Y":94.0}]},{"StartTime":72622.0,"Objects":[{"StartTime":72622.0,"EndTime":72622.0,"X":241.0,"Y":246.0}]},{"StartTime":72784.0,"Objects":[{"StartTime":72784.0,"EndTime":72784.0,"X":80.0,"Y":332.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72910.0,"EndTime":72910.0,"X":95.6374,"Y":234.060516,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73108.0,"Objects":[{"StartTime":73108.0,"EndTime":73108.0,"X":306.0,"Y":124.0}]},{"StartTime":73270.0,"Objects":[{"StartTime":73270.0,"EndTime":73270.0,"X":154.0,"Y":169.0}]},{"StartTime":73432.0,"Objects":[{"StartTime":73432.0,"EndTime":73432.0,"X":342.0,"Y":313.0}]},{"StartTime":73595.0,"Objects":[{"StartTime":73595.0,"EndTime":73595.0,"X":215.0,"Y":354.0}]},{"StartTime":73676.0,"Objects":[{"StartTime":73676.0,"EndTime":73676.0,"X":199.0,"Y":318.0}]},{"StartTime":73757.0,"Objects":[{"StartTime":73757.0,"EndTime":73757.0,"X":214.0,"Y":277.0}]},{"StartTime":73919.0,"Objects":[{"StartTime":73919.0,"EndTime":73919.0,"X":417.0,"Y":248.0}]},{"StartTime":74000.0,"Objects":[{"StartTime":74000.0,"EndTime":74000.0,"X":428.0,"Y":270.0}]},{"StartTime":74081.0,"Objects":[{"StartTime":74081.0,"EndTime":74081.0,"X":413.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74207.0,"EndTime":74207.0,"X":341.732971,"Y":312.8005,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74405.0,"Objects":[{"StartTime":74405.0,"EndTime":74405.0,"X":464.0,"Y":175.0}]},{"StartTime":74568.0,"Objects":[{"StartTime":74568.0,"EndTime":74568.0,"X":395.0,"Y":145.0}]},{"StartTime":74730.0,"Objects":[{"StartTime":74730.0,"EndTime":74730.0,"X":498.0,"Y":35.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74856.0,"EndTime":74856.0,"X":506.846649,"Y":107.542564,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75054.0,"Objects":[{"StartTime":75054.0,"EndTime":75054.0,"X":378.0,"Y":40.0}]},{"StartTime":75216.0,"Objects":[{"StartTime":75216.0,"EndTime":75216.0,"X":278.88028,"Y":141.88028}]},{"StartTime":75297.0,"Objects":[{"StartTime":75297.0,"EndTime":75297.0,"X":282.440155,"Y":145.44014}]},{"StartTime":75378.0,"Objects":[{"StartTime":75378.0,"EndTime":75378.0,"X":286.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":75504.0,"EndTime":75504.0,"X":300.0564,"Y":77.30375,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75703.0,"Objects":[{"StartTime":75703.0,"EndTime":75703.0,"X":436.0,"Y":241.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":75829.0,"EndTime":75829.0,"X":367.113739,"Y":265.2332,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":76027.0,"Objects":[{"StartTime":76027.0,"EndTime":76027.0,"X":241.0,"Y":384.0}]},{"StartTime":76270.0,"Objects":[{"StartTime":76270.0,"EndTime":76270.0,"X":464.0,"Y":175.0}]},{"StartTime":76514.0,"Objects":[{"StartTime":76514.0,"EndTime":76514.0,"X":210.0,"Y":32.0}]},{"StartTime":76676.0,"Objects":[{"StartTime":76676.0,"EndTime":76676.0,"X":280.0,"Y":204.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":76964.0,"EndTime":76964.0,"X":235.7542,"Y":130.475433,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77162.0,"Objects":[{"StartTime":77162.0,"EndTime":77162.0,"X":367.0,"Y":265.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77369.0,"EndTime":77369.0,"X":496.5096,"Y":318.670868,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77487.0,"Objects":[{"StartTime":77487.0,"EndTime":77487.0,"X":501.88028,"Y":239.88028}]},{"StartTime":77568.0,"Objects":[{"StartTime":77568.0,"EndTime":77568.0,"X":505.440155,"Y":243.44014}]},{"StartTime":77649.0,"Objects":[{"StartTime":77649.0,"EndTime":77649.0,"X":509.0,"Y":247.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77856.0,"EndTime":77856.0,"X":488.1183,"Y":99.71859,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77973.0,"Objects":[{"StartTime":77973.0,"EndTime":77973.0,"X":428.0,"Y":51.0}]},{"StartTime":78135.0,"Objects":[{"StartTime":78135.0,"EndTime":78135.0,"X":280.0,"Y":204.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78342.0,"EndTime":78342.0,"X":297.461823,"Y":56.3390465,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78460.0,"Objects":[{"StartTime":78460.0,"EndTime":78460.0,"X":353.0,"Y":6.0}]},{"StartTime":78622.0,"Objects":[{"StartTime":78622.0,"EndTime":78622.0,"X":175.0,"Y":118.0}]},{"StartTime":78784.0,"Objects":[{"StartTime":78784.0,"EndTime":78784.0,"X":367.0,"Y":265.0}]},{"StartTime":78946.0,"Objects":[{"StartTime":78946.0,"EndTime":78946.0,"X":301.0,"Y":135.0}]},{"StartTime":79108.0,"Objects":[{"StartTime":79108.0,"EndTime":79108.0,"X":131.88028,"Y":228.88028}]},{"StartTime":79189.0,"Objects":[{"StartTime":79189.0,"EndTime":79189.0,"X":135.44014,"Y":232.44014}]},{"StartTime":79270.0,"Objects":[{"StartTime":79270.0,"EndTime":79270.0,"X":139.0,"Y":236.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79477.0,"EndTime":79477.0,"X":261.5925,"Y":303.983337,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79595.0,"Objects":[{"StartTime":79595.0,"EndTime":79595.0,"X":330.0,"Y":335.0}]},{"StartTime":79757.0,"Objects":[{"StartTime":79757.0,"EndTime":79757.0,"X":231.0,"Y":178.0}]},{"StartTime":79919.0,"Objects":[{"StartTime":79919.0,"EndTime":79919.0,"X":391.0,"Y":241.0}]},{"StartTime":80081.0,"Objects":[{"StartTime":80081.0,"EndTime":80081.0,"X":228.0,"Y":375.0}]},{"StartTime":80243.0,"Objects":[{"StartTime":80243.0,"EndTime":80243.0,"X":311.0,"Y":114.0}]},{"StartTime":80405.0,"Objects":[{"StartTime":80405.0,"EndTime":80405.0,"X":442.0,"Y":339.0}]},{"StartTime":80568.0,"Objects":[{"StartTime":80568.0,"EndTime":80568.0,"X":386.0,"Y":52.0}]},{"StartTime":80730.0,"Objects":[{"StartTime":80730.0,"EndTime":80730.0,"X":327.0,"Y":359.0}]},{"StartTime":81541.0,"Objects":[{"StartTime":81541.0,"EndTime":81541.0,"X":62.0,"Y":133.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":81748.0,"EndTime":81748.0,"X":206.079437,"Y":76.30348,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":81865.0,"Objects":[{"StartTime":81865.0,"EndTime":81865.0,"X":256.0,"Y":133.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":81991.0,"EndTime":81991.0,"X":238.8628,"Y":204.038742,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":82189.0,"Objects":[{"StartTime":82189.0,"EndTime":82189.0,"X":399.0,"Y":329.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":82315.0,"EndTime":82315.0,"X":391.4031,"Y":256.37088,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":82514.0,"Objects":[{"StartTime":82514.0,"EndTime":82514.0,"X":203.0,"Y":313.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":82640.0,"EndTime":82640.0,"X":271.74295,"Y":337.270447,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":82838.0,"Objects":[{"StartTime":82838.0,"EndTime":82838.0,"X":406.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":82964.0,"EndTime":82964.0,"X":337.526459,"Y":192.858139,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":83162.0,"Objects":[{"StartTime":83162.0,"EndTime":83162.0,"X":209.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83450.0,"EndTime":83450.0,"X":328.328674,"Y":92.72046,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":83649.0,"Objects":[{"StartTime":83649.0,"EndTime":83649.0,"X":239.0,"Y":204.0}]},{"StartTime":83811.0,"Objects":[{"StartTime":83811.0,"EndTime":83811.0,"X":328.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83937.0,"EndTime":83937.0,"X":395.987061,"Y":65.98791,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84135.0,"Objects":[{"StartTime":84135.0,"EndTime":84135.0,"X":507.0,"Y":193.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84261.0,"EndTime":84261.0,"X":438.416,"Y":169.361435,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84460.0,"Objects":[{"StartTime":84460.0,"EndTime":84460.0,"X":274.0,"Y":337.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":84748.0,"EndTime":84748.0,"X":385.897217,"Y":352.294159,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84946.0,"Objects":[{"StartTime":84946.0,"EndTime":84946.0,"X":239.0,"Y":204.0}]},{"StartTime":85108.0,"Objects":[{"StartTime":85108.0,"EndTime":85108.0,"X":186.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85234.0,"EndTime":85234.0,"X":115.1999,"Y":278.111664,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85432.0,"Objects":[{"StartTime":85432.0,"EndTime":85432.0,"X":281.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85558.0,"EndTime":85558.0,"X":352.092682,"Y":152.926834,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85757.0,"Objects":[{"StartTime":85757.0,"EndTime":85757.0,"X":161.0,"Y":5.0}]},{"StartTime":85919.0,"Objects":[{"StartTime":85919.0,"EndTime":85919.0,"X":239.0,"Y":204.0}]},{"StartTime":86081.0,"Objects":[{"StartTime":86081.0,"EndTime":86081.0,"X":273.0,"Y":44.0}]},{"StartTime":86243.0,"Objects":[{"StartTime":86243.0,"EndTime":86243.0,"X":124.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86531.0,"EndTime":86531.0,"X":303.0346,"Y":255.0868,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86730.0,"Objects":[{"StartTime":86730.0,"EndTime":86730.0,"X":161.0,"Y":5.0}]},{"StartTime":86811.0,"Objects":[{"StartTime":86811.0,"EndTime":86811.0,"X":138.0,"Y":37.0}]},{"StartTime":86892.0,"Objects":[{"StartTime":86892.0,"EndTime":86892.0,"X":147.0,"Y":70.0}]},{"StartTime":87054.0,"Objects":[{"StartTime":87054.0,"EndTime":87054.0,"X":352.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87342.0,"EndTime":87342.0,"X":403.287628,"Y":316.874359,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87541.0,"Objects":[{"StartTime":87541.0,"EndTime":87541.0,"X":239.0,"Y":204.0}]},{"StartTime":87703.0,"Objects":[{"StartTime":87703.0,"EndTime":87703.0,"X":183.0,"Y":253.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87829.0,"EndTime":87829.0,"X":200.273987,"Y":350.475433,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88027.0,"Objects":[{"StartTime":88027.0,"EndTime":88027.0,"X":303.440155,"Y":252.44014}]},{"StartTime":88189.0,"Objects":[{"StartTime":88189.0,"EndTime":88189.0,"X":193.0,"Y":142.0}]},{"StartTime":88351.0,"Objects":[{"StartTime":88351.0,"EndTime":88351.0,"X":307.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88639.0,"EndTime":88639.0,"X":126.771782,"Y":318.279968,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88838.0,"Objects":[{"StartTime":88838.0,"EndTime":88838.0,"X":323.0,"Y":165.0}]},{"StartTime":89000.0,"Objects":[{"StartTime":89000.0,"EndTime":89000.0,"X":171.0,"Y":32.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89126.0,"EndTime":89126.0,"X":258.739349,"Y":64.95778,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89324.0,"Objects":[{"StartTime":89324.0,"EndTime":89324.0,"X":166.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89531.0,"EndTime":89531.0,"X":84.73328,"Y":172.269424,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89649.0,"Objects":[{"StartTime":89649.0,"EndTime":89649.0,"X":54.0,"Y":183.0}]},{"StartTime":89811.0,"Objects":[{"StartTime":89811.0,"EndTime":89811.0,"X":282.0,"Y":51.0}]},{"StartTime":89973.0,"Objects":[{"StartTime":89973.0,"EndTime":89973.0,"X":153.0,"Y":20.0}]},{"StartTime":90135.0,"Objects":[{"StartTime":90135.0,"EndTime":90135.0,"X":339.0,"Y":174.0}]},{"StartTime":90297.0,"Objects":[{"StartTime":90297.0,"EndTime":90297.0,"X":126.0,"Y":318.0}]},{"StartTime":90460.0,"Objects":[{"StartTime":90460.0,"EndTime":90460.0,"X":238.0,"Y":125.0}]},{"StartTime":90541.0,"Objects":[{"StartTime":90541.0,"EndTime":90541.0,"X":242.0,"Y":141.0}]},{"StartTime":90622.0,"Objects":[{"StartTime":90622.0,"EndTime":90622.0,"X":244.0,"Y":158.0}]},{"StartTime":90784.0,"Objects":[{"StartTime":90784.0,"EndTime":90784.0,"X":338.0,"Y":281.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":91072.0,"EndTime":91072.0,"X":438.117,"Y":323.4276,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":91270.0,"Objects":[{"StartTime":91270.0,"EndTime":91270.0,"X":481.0,"Y":138.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":91396.0,"EndTime":91396.0,"X":427.0648,"Y":151.829544,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":91514.0,"Objects":[{"StartTime":91514.0,"EndTime":91514.0,"X":356.0,"Y":170.0}]},{"StartTime":91595.0,"Objects":[{"StartTime":91595.0,"EndTime":91595.0,"X":339.0,"Y":174.0}]},{"StartTime":91757.0,"Objects":[{"StartTime":91757.0,"EndTime":91757.0,"X":463.0,"Y":235.0}]},{"StartTime":91919.0,"Objects":[{"StartTime":91919.0,"EndTime":91919.0,"X":369.440155,"Y":91.44014,"StackOffset":{"X":-3.559845,"Y":-3.55986023}},{"StartTime":92126.0,"EndTime":92126.0,"X":385.6048,"Y":9.84262,"StackOffset":{"X":-3.559845,"Y":-3.55986023}}]},{"StartTime":92243.0,"Objects":[{"StartTime":92243.0,"EndTime":92243.0,"X":389.0,"Y":13.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92531.0,"EndTime":92531.0,"X":270.5224,"Y":51.6697578,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92892.0,"Objects":[{"StartTime":92892.0,"EndTime":92892.0,"X":126.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93018.0,"EndTime":93018.0,"X":196.3784,"Y":187.659012,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93216.0,"Objects":[{"StartTime":93216.0,"EndTime":93216.0,"X":75.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93342.0,"EndTime":93342.0,"X":145.749725,"Y":57.7823524,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93541.0,"Objects":[{"StartTime":93541.0,"EndTime":93541.0,"X":42.0,"Y":128.0}]},{"StartTime":93703.0,"Objects":[{"StartTime":93703.0,"EndTime":93703.0,"X":126.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93991.0,"EndTime":93991.0,"X":102.604004,"Y":351.27533,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94189.0,"Objects":[{"StartTime":94189.0,"EndTime":94189.0,"X":260.0,"Y":235.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":94315.0,"EndTime":94315.0,"X":271.253265,"Y":307.208374,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94514.0,"Objects":[{"StartTime":94514.0,"EndTime":94514.0,"X":404.0,"Y":168.0}]},{"StartTime":94676.0,"Objects":[{"StartTime":94676.0,"EndTime":94676.0,"X":329.0,"Y":138.0}]},{"StartTime":94838.0,"Objects":[{"StartTime":94838.0,"EndTime":94838.0,"X":389.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95126.0,"EndTime":95126.0,"X":512.510864,"Y":209.161926,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95487.0,"Objects":[{"StartTime":95487.0,"EndTime":95487.0,"X":512.0,"Y":209.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95613.0,"EndTime":95613.0,"X":443.248566,"Y":185.697754,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95811.0,"Objects":[{"StartTime":95811.0,"EndTime":95811.0,"X":306.0,"Y":51.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95937.0,"EndTime":95937.0,"X":375.1769,"Y":29.8420277,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":96135.0,"Objects":[{"StartTime":96135.0,"EndTime":96135.0,"X":265.0,"Y":196.0}]},{"StartTime":96297.0,"Objects":[{"StartTime":96297.0,"EndTime":96297.0,"X":169.0,"Y":81.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":96423.0,"EndTime":96423.0,"X":237.498428,"Y":105.515129,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":96622.0,"Objects":[{"StartTime":96622.0,"EndTime":96622.0,"X":106.0,"Y":191.0}]},{"StartTime":96784.0,"Objects":[{"StartTime":96784.0,"EndTime":96784.0,"X":220.0,"Y":333.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":96946.0,"EndTime":96946.0,"X":210.935547,"Y":260.484344,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97072.0,"EndTime":97072.0,"X":220.0,"Y":333.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97432.0,"Objects":[{"StartTime":97432.0,"EndTime":97432.0,"X":208.0,"Y":345.0}]},{"StartTime":97595.0,"Objects":[{"StartTime":97595.0,"EndTime":97595.0,"X":365.88028,"Y":250.88028}]},{"StartTime":97676.0,"Objects":[{"StartTime":97676.0,"EndTime":97676.0,"X":369.440155,"Y":254.44014}]},{"StartTime":97757.0,"Objects":[{"StartTime":97757.0,"EndTime":97757.0,"X":373.0,"Y":258.0}]},{"StartTime":97919.0,"Objects":[{"StartTime":97919.0,"EndTime":97919.0,"X":286.0,"Y":206.0}]},{"StartTime":98081.0,"Objects":[{"StartTime":98081.0,"EndTime":98081.0,"X":396.88028,"Y":337.88028}]},{"StartTime":98162.0,"Objects":[{"StartTime":98162.0,"EndTime":98162.0,"X":400.440155,"Y":341.440155}]},{"StartTime":98243.0,"Objects":[{"StartTime":98243.0,"EndTime":98243.0,"X":404.0,"Y":345.0}]},{"StartTime":98405.0,"Objects":[{"StartTime":98405.0,"EndTime":98405.0,"X":295.0,"Y":285.0}]},{"StartTime":98568.0,"Objects":[{"StartTime":98568.0,"EndTime":98568.0,"X":447.88028,"Y":183.88028}]},{"StartTime":98649.0,"Objects":[{"StartTime":98649.0,"EndTime":98649.0,"X":451.440155,"Y":187.44014}]},{"StartTime":98730.0,"Objects":[{"StartTime":98730.0,"EndTime":98730.0,"X":455.0,"Y":191.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98856.0,"EndTime":98856.0,"X":444.882874,"Y":118.623688,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98973.0,"Objects":[{"StartTime":98973.0,"EndTime":98973.0,"X":433.0,"Y":49.0}]},{"StartTime":99054.0,"Objects":[{"StartTime":99054.0,"EndTime":99054.0,"X":430.0,"Y":33.0}]},{"StartTime":99216.0,"Objects":[{"StartTime":99216.0,"EndTime":99216.0,"X":322.0,"Y":120.0}]},{"StartTime":99378.0,"Objects":[{"StartTime":99378.0,"EndTime":99378.0,"X":236.0,"Y":48.0}]},{"StartTime":99460.0,"Objects":[{"StartTime":99460.0,"EndTime":99460.0,"X":237.0,"Y":36.0}]},{"StartTime":99541.0,"Objects":[{"StartTime":99541.0,"EndTime":99541.0,"X":239.0,"Y":20.0}]},{"StartTime":99703.0,"Objects":[{"StartTime":99703.0,"EndTime":99703.0,"X":322.0,"Y":120.0}]},{"StartTime":99865.0,"Objects":[{"StartTime":99865.0,"EndTime":99865.0,"X":166.0,"Y":190.0}]},{"StartTime":99946.0,"Objects":[{"StartTime":99946.0,"EndTime":99946.0,"X":165.0,"Y":177.0}]},{"StartTime":100027.0,"Objects":[{"StartTime":100027.0,"EndTime":100027.0,"X":163.0,"Y":166.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":100315.0,"EndTime":100315.0,"X":311.452423,"Y":199.964645,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":100514.0,"Objects":[{"StartTime":100514.0,"EndTime":100514.0,"X":136.0,"Y":71.0}]},{"StartTime":100676.0,"Objects":[{"StartTime":100676.0,"EndTime":100676.0,"X":322.0,"Y":120.0}]},{"StartTime":100838.0,"Objects":[{"StartTime":100838.0,"EndTime":100838.0,"X":119.0,"Y":280.0}]},{"StartTime":101000.0,"Objects":[{"StartTime":101000.0,"EndTime":101000.0,"X":236.0,"Y":48.0}]},{"StartTime":101162.0,"Objects":[{"StartTime":101162.0,"EndTime":101162.0,"X":346.0,"Y":315.0}]},{"StartTime":101324.0,"Objects":[{"StartTime":101324.0,"EndTime":101324.0,"X":47.0,"Y":167.0}]},{"StartTime":101487.0,"Objects":[{"StartTime":101487.0,"EndTime":101487.0,"X":384.0,"Y":47.0}]},{"StartTime":102135.0,"Objects":[{"StartTime":102135.0,"EndTime":102135.0,"X":384.88028,"Y":45.8802834}]},{"StartTime":102216.0,"Objects":[{"StartTime":102216.0,"EndTime":102216.0,"X":388.440155,"Y":49.44014}]},{"StartTime":102297.0,"Objects":[{"StartTime":102297.0,"EndTime":102297.0,"X":392.0,"Y":53.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102504.0,"EndTime":102504.0,"X":287.890961,"Y":117.336929,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102622.0,"Objects":[{"StartTime":102622.0,"EndTime":102622.0,"X":229.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102910.0,"EndTime":102910.0,"X":382.2425,"Y":229.177368,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"X":438.0,"Y":175.0}]},{"StartTime":103270.0,"Objects":[{"StartTime":103270.0,"EndTime":103270.0,"X":285.0,"Y":287.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103396.0,"EndTime":103396.0,"X":204.35733,"Y":300.591461,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103595.0,"Objects":[{"StartTime":103595.0,"EndTime":103595.0,"X":343.0,"Y":378.0}]},{"StartTime":103757.0,"Objects":[{"StartTime":103757.0,"EndTime":103757.0,"X":363.0,"Y":307.0}]},{"StartTime":103919.0,"Objects":[{"StartTime":103919.0,"EndTime":103919.0,"X":194.0,"Y":121.0}]},{"StartTime":104081.0,"Objects":[{"StartTime":104081.0,"EndTime":104081.0,"X":229.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104207.0,"EndTime":104207.0,"X":308.993835,"Y":205.998688,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104405.0,"Objects":[{"StartTime":104405.0,"EndTime":104405.0,"X":146.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104612.0,"EndTime":104612.0,"X":122.078148,"Y":267.7327,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104730.0,"Objects":[{"StartTime":104730.0,"EndTime":104730.0,"X":95.0,"Y":201.0}]},{"StartTime":104892.0,"Objects":[{"StartTime":104892.0,"EndTime":104892.0,"X":272.0,"Y":122.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":105099.0,"EndTime":105099.0,"X":284.801727,"Y":18.6999683,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":105216.0,"Objects":[{"StartTime":105216.0,"EndTime":105216.0,"X":214.0,"Y":1.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":105504.0,"EndTime":105504.0,"X":60.34272,"Y":42.0378342,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":105703.0,"Objects":[{"StartTime":105703.0,"EndTime":105703.0,"X":194.0,"Y":121.0}]},{"StartTime":105865.0,"Objects":[{"StartTime":105865.0,"EndTime":105865.0,"X":95.0,"Y":201.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":105991.0,"EndTime":105991.0,"X":108.977585,"Y":120.423355,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106189.0,"Objects":[{"StartTime":106189.0,"EndTime":106189.0,"X":279.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106396.0,"EndTime":106396.0,"X":293.2297,"Y":340.8419,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106514.0,"Objects":[{"StartTime":106514.0,"EndTime":106514.0,"X":231.0,"Y":382.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106640.0,"EndTime":106640.0,"X":205.732849,"Y":318.131958,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106838.0,"Objects":[{"StartTime":106838.0,"EndTime":106838.0,"X":369.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106964.0,"EndTime":106964.0,"X":447.2368,"Y":208.8112,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":107162.0,"Objects":[{"StartTime":107162.0,"EndTime":107162.0,"X":310.0,"Y":88.0}]},{"StartTime":107324.0,"Objects":[{"StartTime":107324.0,"EndTime":107324.0,"X":300.0,"Y":16.0}]},{"StartTime":107487.0,"Objects":[{"StartTime":107487.0,"EndTime":107487.0,"X":194.0,"Y":121.0}]},{"StartTime":107649.0,"Objects":[{"StartTime":107649.0,"EndTime":107649.0,"X":370.88028,"Y":187.88028}]},{"StartTime":107730.0,"Objects":[{"StartTime":107730.0,"EndTime":107730.0,"X":374.440155,"Y":191.44014}]},{"StartTime":107811.0,"Objects":[{"StartTime":107811.0,"EndTime":107811.0,"X":378.0,"Y":195.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108099.0,"EndTime":108099.0,"X":228.641785,"Y":248.379822,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108297.0,"Objects":[{"StartTime":108297.0,"EndTime":108297.0,"X":122.0,"Y":87.0}]},{"StartTime":108460.0,"Objects":[{"StartTime":108460.0,"EndTime":108460.0,"X":194.0,"Y":121.0}]},{"StartTime":108622.0,"Objects":[{"StartTime":108622.0,"EndTime":108622.0,"X":48.0,"Y":214.0}]},{"StartTime":108784.0,"Objects":[{"StartTime":108784.0,"EndTime":108784.0,"X":37.0,"Y":137.0}]},{"StartTime":108946.0,"Objects":[{"StartTime":108946.0,"EndTime":108946.0,"X":136.88028,"Y":200.88028}]},{"StartTime":109027.0,"Objects":[{"StartTime":109027.0,"EndTime":109027.0,"X":140.44014,"Y":204.44014}]},{"StartTime":109108.0,"Objects":[{"StartTime":109108.0,"EndTime":109108.0,"X":144.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109315.0,"EndTime":109315.0,"X":124.652115,"Y":329.134583,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109432.0,"Objects":[{"StartTime":109432.0,"EndTime":109432.0,"X":58.0,"Y":361.0}]},{"StartTime":109595.0,"Objects":[{"StartTime":109595.0,"EndTime":109595.0,"X":244.0,"Y":241.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109883.0,"EndTime":109883.0,"X":372.25354,"Y":294.5455,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110081.0,"Objects":[{"StartTime":110081.0,"EndTime":110081.0,"X":194.0,"Y":121.0}]},{"StartTime":110243.0,"Objects":[{"StartTime":110243.0,"EndTime":110243.0,"X":354.0,"Y":43.0}]},{"StartTime":110405.0,"Objects":[{"StartTime":110405.0,"EndTime":110405.0,"X":290.0,"Y":0.0}]},{"StartTime":110568.0,"Objects":[{"StartTime":110568.0,"EndTime":110568.0,"X":394.88028,"Y":124.88028}]},{"StartTime":110649.0,"Objects":[{"StartTime":110649.0,"EndTime":110649.0,"X":398.440155,"Y":128.44014}]},{"StartTime":110730.0,"Objects":[{"StartTime":110730.0,"EndTime":110730.0,"X":402.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110937.0,"EndTime":110937.0,"X":321.508484,"Y":160.5931,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111054.0,"Objects":[{"StartTime":111054.0,"EndTime":111054.0,"X":117.0,"Y":295.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111342.0,"EndTime":111342.0,"X":293.832336,"Y":321.662231,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111541.0,"Objects":[{"StartTime":111541.0,"EndTime":111541.0,"X":101.88028,"Y":156.88028}]},{"StartTime":111622.0,"Objects":[{"StartTime":111622.0,"EndTime":111622.0,"X":105.44014,"Y":160.44014}]},{"StartTime":111703.0,"Objects":[{"StartTime":111703.0,"EndTime":111703.0,"X":109.0,"Y":164.0}]},{"StartTime":111865.0,"Objects":[{"StartTime":111865.0,"EndTime":111865.0,"X":279.0,"Y":95.0}]},{"StartTime":112027.0,"Objects":[{"StartTime":112027.0,"EndTime":112027.0,"X":99.0,"Y":38.0}]},{"StartTime":112189.0,"Objects":[{"StartTime":112189.0,"EndTime":112189.0,"X":216.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":112396.0,"EndTime":112396.0,"X":195.586136,"Y":83.47279,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":112514.0,"Objects":[{"StartTime":112514.0,"EndTime":112514.0,"X":245.0,"Y":28.0}]},{"StartTime":112676.0,"Objects":[{"StartTime":112676.0,"EndTime":112676.0,"X":23.0,"Y":186.0}]},{"StartTime":112838.0,"Objects":[{"StartTime":112838.0,"EndTime":112838.0,"X":179.0,"Y":352.0}]},{"StartTime":112919.0,"Objects":[{"StartTime":112919.0,"EndTime":112919.0,"X":159.0,"Y":363.0}]},{"StartTime":113000.0,"Objects":[{"StartTime":113000.0,"EndTime":113000.0,"X":138.0,"Y":355.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":113045.0,"EndTime":113045.0,"X":149.7844,"Y":302.363037,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":113162.0,"Objects":[{"StartTime":113162.0,"EndTime":113162.0,"X":331.0,"Y":171.0}]},{"StartTime":113324.0,"Objects":[{"StartTime":113324.0,"EndTime":113324.0,"X":397.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":113450.0,"EndTime":113450.0,"X":406.577026,"Y":269.8502,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":113649.0,"Objects":[{"StartTime":113649.0,"EndTime":113649.0,"X":252.0,"Y":149.0}]},{"StartTime":113811.0,"Objects":[{"StartTime":113811.0,"EndTime":113811.0,"X":411.0,"Y":51.0}]},{"StartTime":113973.0,"Objects":[{"StartTime":113973.0,"EndTime":113973.0,"X":347.0,"Y":16.0}]},{"StartTime":114135.0,"Objects":[{"StartTime":114135.0,"EndTime":114135.0,"X":457.0,"Y":161.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":114423.0,"EndTime":114423.0,"X":272.994629,"Y":240.572388,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":114622.0,"Objects":[{"StartTime":114622.0,"EndTime":114622.0,"X":126.0,"Y":120.0}]},{"StartTime":114784.0,"Objects":[{"StartTime":114784.0,"EndTime":114784.0,"X":267.0,"Y":55.0}]},{"StartTime":114946.0,"Objects":[{"StartTime":114946.0,"EndTime":114946.0,"X":130.0,"Y":257.0}]},{"StartTime":115108.0,"Objects":[{"StartTime":115108.0,"EndTime":115108.0,"X":171.88028,"Y":28.8802814}]},{"StartTime":115189.0,"Objects":[{"StartTime":115189.0,"EndTime":115189.0,"X":175.44014,"Y":32.44014}]},{"StartTime":115270.0,"Objects":[{"StartTime":115270.0,"EndTime":115270.0,"X":179.0,"Y":36.0}]},{"StartTime":115432.0,"Objects":[{"StartTime":115432.0,"EndTime":115432.0,"X":353.0,"Y":157.0}]},{"StartTime":115595.0,"Objects":[{"StartTime":115595.0,"EndTime":115595.0,"X":130.0,"Y":257.0}]},{"StartTime":115757.0,"Objects":[{"StartTime":115757.0,"EndTime":115757.0,"X":353.0,"Y":74.0}]},{"StartTime":115919.0,"Objects":[{"StartTime":115919.0,"EndTime":115919.0,"X":259.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":116045.0,"EndTime":116045.0,"X":267.296478,"Y":55.0584335,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":116162.0,"Objects":[{"StartTime":116162.0,"EndTime":116162.0,"X":280.0,"Y":124.0}]},{"StartTime":116243.0,"Objects":[{"StartTime":116243.0,"EndTime":116243.0,"X":283.0,"Y":135.0}]},{"StartTime":116405.0,"Objects":[{"StartTime":116405.0,"EndTime":116405.0,"X":441.0,"Y":224.0}]},{"StartTime":116568.0,"Objects":[{"StartTime":116568.0,"EndTime":116568.0,"X":353.0,"Y":74.0}]},{"StartTime":116730.0,"Objects":[{"StartTime":116730.0,"EndTime":116730.0,"X":203.0,"Y":217.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":117018.0,"EndTime":117018.0,"X":301.176636,"Y":253.817078,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":117216.0,"Objects":[{"StartTime":117216.0,"EndTime":117216.0,"X":180.0,"Y":111.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":117342.0,"EndTime":117342.0,"X":74.6470947,"Y":87.78665,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":117541.0,"Objects":[{"StartTime":117541.0,"EndTime":117541.0,"X":241.0,"Y":8.0}]},{"StartTime":117703.0,"Objects":[{"StartTime":117703.0,"EndTime":117703.0,"X":76.0,"Y":228.0}]},{"StartTime":117784.0,"Objects":[{"StartTime":117784.0,"EndTime":117784.0,"X":80.0,"Y":217.0}]},{"StartTime":117865.0,"Objects":[{"StartTime":117865.0,"EndTime":117865.0,"X":85.0,"Y":205.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":117910.0,"EndTime":117910.0,"X":136.95993,"Y":219.480637,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":118027.0,"Objects":[{"StartTime":118027.0,"EndTime":118027.0,"X":334.0,"Y":361.0}]},{"StartTime":118108.0,"Objects":[{"StartTime":118108.0,"EndTime":118108.0,"X":328.0,"Y":344.0}]},{"StartTime":118189.0,"Objects":[{"StartTime":118189.0,"EndTime":118189.0,"X":321.0,"Y":329.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":118315.0,"EndTime":118315.0,"X":249.125366,"Y":342.218323,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":118432.0,"Objects":[{"StartTime":118432.0,"EndTime":118432.0,"X":180.0,"Y":358.0}]},{"StartTime":118514.0,"Objects":[{"StartTime":118514.0,"EndTime":118514.0,"X":164.0,"Y":362.0}]},{"StartTime":118676.0,"Objects":[{"StartTime":118676.0,"EndTime":118676.0,"X":301.0,"Y":253.0}]},{"StartTime":118838.0,"Objects":[{"StartTime":118838.0,"EndTime":118838.0,"X":407.0,"Y":282.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":118964.0,"EndTime":118964.0,"X":478.0228,"Y":299.217651,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":119162.0,"Objects":[{"StartTime":119162.0,"EndTime":119162.0,"X":321.0,"Y":172.0}]},{"StartTime":119324.0,"Objects":[{"StartTime":119324.0,"EndTime":119324.0,"X":445.0,"Y":94.0}]},{"StartTime":119405.0,"Objects":[{"StartTime":119405.0,"EndTime":119405.0,"X":431.0,"Y":98.0}]},{"StartTime":119487.0,"Objects":[{"StartTime":119487.0,"EndTime":119487.0,"X":416.0,"Y":103.0}]},{"StartTime":119649.0,"Objects":[{"StartTime":119649.0,"EndTime":119649.0,"X":316.0,"Y":12.0}]},{"StartTime":119730.0,"Objects":[{"StartTime":119730.0,"EndTime":119730.0,"X":331.0,"Y":16.0}]},{"StartTime":119811.0,"Objects":[{"StartTime":119811.0,"EndTime":119811.0,"X":342.0,"Y":22.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":119937.0,"EndTime":119937.0,"X":325.503876,"Y":93.19385,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":120135.0,"Objects":[{"StartTime":120135.0,"EndTime":120135.0,"X":194.0,"Y":229.0}]},{"StartTime":120216.0,"Objects":[{"StartTime":120216.0,"EndTime":120216.0,"X":150.0,"Y":214.0}]},{"StartTime":120297.0,"Objects":[{"StartTime":120297.0,"EndTime":120297.0,"X":132.0,"Y":178.0}]},{"StartTime":120378.0,"Objects":[{"StartTime":120378.0,"EndTime":120378.0,"X":143.0,"Y":139.0}]},{"StartTime":120460.0,"Objects":[{"StartTime":120460.0,"EndTime":120460.0,"X":175.0,"Y":120.0}]},{"StartTime":120622.0,"Objects":[{"StartTime":120622.0,"EndTime":120622.0,"X":323.88028,"Y":265.88028}]},{"StartTime":120703.0,"Objects":[{"StartTime":120703.0,"EndTime":120703.0,"X":327.440155,"Y":269.440155}]},{"StartTime":120784.0,"Objects":[{"StartTime":120784.0,"EndTime":120784.0,"X":331.0,"Y":273.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":120910.0,"EndTime":120910.0,"X":260.102,"Y":290.724518,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":121027.0,"Objects":[{"StartTime":121027.0,"EndTime":121027.0,"X":189.0,"Y":306.0}]},{"StartTime":121108.0,"Objects":[{"StartTime":121108.0,"EndTime":121108.0,"X":172.0,"Y":311.0}]},{"StartTime":121270.0,"Objects":[{"StartTime":121270.0,"EndTime":121270.0,"X":278.0,"Y":193.0}]},{"StartTime":121432.0,"Objects":[{"StartTime":121432.0,"EndTime":121432.0,"X":175.0,"Y":120.0}]},{"StartTime":121514.0,"Objects":[{"StartTime":121514.0,"EndTime":121514.0,"X":174.0,"Y":109.0}]},{"StartTime":121595.0,"Objects":[{"StartTime":121595.0,"EndTime":121595.0,"X":173.0,"Y":98.0}]},{"StartTime":121757.0,"Objects":[{"StartTime":121757.0,"EndTime":121757.0,"X":276.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":121883.0,"EndTime":121883.0,"X":263.553436,"Y":72.01228,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":122000.0,"Objects":[{"StartTime":122000.0,"EndTime":122000.0,"X":311.440155,"Y":122.44014}]},{"StartTime":122081.0,"Objects":[{"StartTime":122081.0,"EndTime":122081.0,"X":315.0,"Y":126.0}]},{"StartTime":122243.0,"Objects":[{"StartTime":122243.0,"EndTime":122243.0,"X":177.0,"Y":210.0}]},{"StartTime":122324.0,"Objects":[{"StartTime":122324.0,"EndTime":122324.0,"X":162.0,"Y":214.0}]},{"StartTime":122405.0,"Objects":[{"StartTime":122405.0,"EndTime":122405.0,"X":150.0,"Y":217.0}]},{"StartTime":122568.0,"Objects":[{"StartTime":122568.0,"EndTime":122568.0,"X":260.0,"Y":290.0}]},{"StartTime":122730.0,"Objects":[{"StartTime":122730.0,"EndTime":122730.0,"X":312.0,"Y":208.0}]},{"StartTime":122811.0,"Objects":[{"StartTime":122811.0,"EndTime":122811.0,"X":346.0,"Y":188.0}]},{"StartTime":122892.0,"Objects":[{"StartTime":122892.0,"EndTime":122892.0,"X":384.0,"Y":199.0}]},{"StartTime":122973.0,"Objects":[{"StartTime":122973.0,"EndTime":122973.0,"X":406.0,"Y":233.0}]},{"StartTime":123054.0,"Objects":[{"StartTime":123054.0,"EndTime":123054.0,"X":391.0,"Y":250.0}]},{"StartTime":123135.0,"Objects":[{"StartTime":123135.0,"EndTime":123135.0,"X":413.0,"Y":304.0}]},{"StartTime":123216.0,"Objects":[{"StartTime":123216.0,"EndTime":123216.0,"X":474.0,"Y":312.0}]},{"StartTime":123297.0,"Objects":[{"StartTime":123297.0,"EndTime":123297.0,"X":512.0,"Y":266.0}]},{"StartTime":123378.0,"Objects":[{"StartTime":123378.0,"EndTime":123378.0,"X":512.0,"Y":251.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":123504.0,"EndTime":123504.0,"X":499.302948,"Y":161.415314,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":123703.0,"Objects":[{"StartTime":123703.0,"EndTime":123703.0,"X":260.0,"Y":290.0}]},{"StartTime":123865.0,"Objects":[{"StartTime":123865.0,"EndTime":123865.0,"X":324.0,"Y":73.0}]},{"StartTime":124027.0,"Objects":[{"StartTime":124027.0,"EndTime":124027.0,"X":413.0,"Y":304.0}]},{"StartTime":124189.0,"Objects":[{"StartTime":124189.0,"EndTime":124189.0,"X":222.0,"Y":147.0}]},{"StartTime":124351.0,"Objects":[{"StartTime":124351.0,"EndTime":124351.0,"X":437.0,"Y":36.0}]},{"StartTime":124514.0,"Objects":[{"StartTime":124514.0,"EndTime":124514.0,"X":346.0,"Y":188.0}]},{"StartTime":124676.0,"Objects":[{"StartTime":124676.0,"EndTime":124676.0,"X":192.0,"Y":21.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":124802.0,"EndTime":124802.0,"X":104.078423,"Y":-0.3641224,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":125000.0,"Objects":[{"StartTime":125000.0,"EndTime":125000.0,"X":222.0,"Y":147.0}]},{"StartTime":125162.0,"Objects":[{"StartTime":125162.0,"EndTime":125162.0,"X":22.0,"Y":215.0}]},{"StartTime":125324.0,"Objects":[{"StartTime":125324.0,"EndTime":125324.0,"X":107.55986,"Y":3.559859}]},{"StartTime":125487.0,"Objects":[{"StartTime":125487.0,"EndTime":125487.0,"X":240.0,"Y":244.0}]},{"StartTime":125568.0,"Objects":[{"StartTime":125568.0,"EndTime":125568.0,"X":238.0,"Y":231.0}]},{"StartTime":125649.0,"Objects":[{"StartTime":125649.0,"EndTime":125649.0,"X":235.0,"Y":218.0}]},{"StartTime":125811.0,"Objects":[{"StartTime":125811.0,"EndTime":125811.0,"X":59.0,"Y":133.0}]},{"StartTime":125892.0,"Objects":[{"StartTime":125892.0,"EndTime":125892.0,"X":62.0,"Y":122.0}]},{"StartTime":125973.0,"Objects":[{"StartTime":125973.0,"EndTime":125973.0,"X":64.0,"Y":111.0}]},{"StartTime":126135.0,"Objects":[{"StartTime":126135.0,"EndTime":126135.0,"X":22.0,"Y":215.0}]},{"StartTime":126297.0,"Objects":[{"StartTime":126297.0,"EndTime":126297.0,"X":157.0,"Y":96.0}]},{"StartTime":126460.0,"Objects":[{"StartTime":126460.0,"EndTime":126460.0,"X":104.0,"Y":270.0}]},{"StartTime":126622.0,"Objects":[{"StartTime":126622.0,"EndTime":126622.0,"X":241.0,"Y":72.0}]},{"StartTime":126784.0,"Objects":[{"StartTime":126784.0,"EndTime":126784.0,"X":198.0,"Y":320.0}]},{"StartTime":126946.0,"Objects":[{"StartTime":126946.0,"EndTime":126946.0,"X":330.0,"Y":46.0}]},{"StartTime":127108.0,"Objects":[{"StartTime":127108.0,"EndTime":127108.0,"X":294.0,"Y":371.0}]},{"StartTime":127270.0,"Objects":[{"StartTime":127270.0,"EndTime":127270.0,"X":436.0,"Y":24.0}]},{"StartTime":127432.0,"Objects":[{"StartTime":127432.0,"EndTime":127432.0,"X":128.0,"Y":184.0}]},{"StartTime":127595.0,"Objects":[{"StartTime":127595.0,"EndTime":127595.0,"X":446.0,"Y":344.0}]},{"StartTime":127757.0,"Objects":[{"StartTime":127757.0,"EndTime":127757.0,"X":262.440155,"Y":-3.559859}]},{"StartTime":127919.0,"Objects":[{"StartTime":127919.0,"EndTime":127919.0,"X":152.0,"Y":384.0}]},{"StartTime":128081.0,"Objects":[{"StartTime":128081.0,"EndTime":128081.0,"X":512.0,"Y":170.0}]},{"StartTime":128243.0,"Objects":[{"StartTime":128243.0,"EndTime":128243.0,"X":266.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128369.0,"EndTime":128369.0,"X":278.288239,"Y":133.415283,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":128487.0,"Objects":[{"StartTime":128487.0,"EndTime":128487.0,"X":378.0,"Y":196.0}]},{"StartTime":128568.0,"Objects":[{"StartTime":128568.0,"EndTime":128568.0,"X":396.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128856.0,"EndTime":128856.0,"X":218.724335,"Y":206.941788,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":129054.0,"Objects":[{"StartTime":129054.0,"EndTime":129054.0,"X":365.0,"Y":56.0}]},{"StartTime":129216.0,"Objects":[{"StartTime":129216.0,"EndTime":129216.0,"X":312.0,"Y":299.0}]},{"StartTime":129378.0,"Objects":[{"StartTime":129378.0,"EndTime":129378.0,"X":196.0,"Y":119.0}]},{"StartTime":129541.0,"Objects":[{"StartTime":129541.0,"EndTime":129541.0,"X":396.0,"Y":176.0}]},{"StartTime":129703.0,"Objects":[{"StartTime":129703.0,"EndTime":129703.0,"X":208.0,"Y":302.0}]},{"StartTime":129865.0,"Objects":[{"StartTime":129865.0,"EndTime":129865.0,"X":298.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130153.0,"EndTime":130153.0,"X":491.098358,"Y":263.395782,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130351.0,"Objects":[{"StartTime":130351.0,"EndTime":130351.0,"X":281.0,"Y":90.0}]},{"StartTime":130514.0,"Objects":[{"StartTime":130514.0,"EndTime":130514.0,"X":484.0,"Y":174.0}]},{"StartTime":130676.0,"Objects":[{"StartTime":130676.0,"EndTime":130676.0,"X":312.0,"Y":299.0}]},{"StartTime":130838.0,"Objects":[{"StartTime":130838.0,"EndTime":130838.0,"X":504.0,"Y":380.0}]},{"StartTime":131000.0,"Objects":[{"StartTime":131000.0,"EndTime":131000.0,"X":299.88028,"Y":190.88028}]},{"StartTime":131081.0,"Objects":[{"StartTime":131081.0,"EndTime":131081.0,"X":303.440155,"Y":194.44014}]},{"StartTime":131162.0,"Objects":[{"StartTime":131162.0,"EndTime":131162.0,"X":307.0,"Y":198.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":131369.0,"EndTime":131369.0,"X":166.610275,"Y":253.783371,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":131487.0,"Objects":[{"StartTime":131487.0,"EndTime":131487.0,"X":110.0,"Y":300.0}]},{"StartTime":131649.0,"Objects":[{"StartTime":131649.0,"EndTime":131649.0,"X":0.0,"Y":176.0}]},{"StartTime":131811.0,"Objects":[{"StartTime":131811.0,"EndTime":131811.0,"X":144.0,"Y":107.0}]},{"StartTime":131973.0,"Objects":[{"StartTime":131973.0,"EndTime":131973.0,"X":3.0,"Y":282.0}]},{"StartTime":132135.0,"Objects":[{"StartTime":132135.0,"EndTime":132135.0,"X":208.44014,"Y":182.44014}]},{"StartTime":132297.0,"Objects":[{"StartTime":132297.0,"EndTime":132297.0,"X":77.0,"Y":31.0}]},{"StartTime":132460.0,"Objects":[{"StartTime":132460.0,"EndTime":132460.0,"X":212.0,"Y":186.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":132586.0,"EndTime":132586.0,"X":307.203156,"Y":207.722458,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":132784.0,"Objects":[{"StartTime":132784.0,"EndTime":132784.0,"X":455.0,"Y":384.0}]},{"StartTime":132946.0,"Objects":[{"StartTime":132946.0,"EndTime":132946.0,"X":297.0,"Y":290.0}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"X":430.0,"Y":145.0}]},{"StartTime":133270.0,"Objects":[{"StartTime":133270.0,"EndTime":133270.0,"X":339.0,"Y":362.0}]},{"StartTime":133432.0,"Objects":[{"StartTime":133432.0,"EndTime":133432.0,"X":512.0,"Y":239.0}]},{"StartTime":133595.0,"Objects":[{"StartTime":133595.0,"EndTime":133595.0,"X":336.88028,"Y":84.88028}]},{"StartTime":133676.0,"Objects":[{"StartTime":133676.0,"EndTime":133676.0,"X":340.440155,"Y":88.44014}]},{"StartTime":133757.0,"Objects":[{"StartTime":133757.0,"EndTime":133757.0,"X":344.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":133964.0,"EndTime":133964.0,"X":366.340729,"Y":252.2704,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":134081.0,"Objects":[{"StartTime":134081.0,"EndTime":134081.0,"X":297.0,"Y":290.0}]},{"StartTime":134243.0,"Objects":[{"StartTime":134243.0,"EndTime":134243.0,"X":430.0,"Y":145.0}]},{"StartTime":134405.0,"Objects":[{"StartTime":134405.0,"EndTime":134405.0,"X":277.0,"Y":8.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":134531.0,"EndTime":134531.0,"X":249.166824,"Y":99.0191956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":134730.0,"Objects":[{"StartTime":134730.0,"EndTime":134730.0,"X":442.0,"Y":257.0}]},{"StartTime":134892.0,"Objects":[{"StartTime":134892.0,"EndTime":134892.0,"X":344.0,"Y":92.0}]},{"StartTime":135054.0,"Objects":[{"StartTime":135054.0,"EndTime":135054.0,"X":205.0,"Y":225.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":135180.0,"EndTime":135180.0,"X":100.106705,"Y":249.039276,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":135378.0,"Objects":[{"StartTime":135378.0,"EndTime":135378.0,"X":268.0,"Y":363.0}]},{"StartTime":135541.0,"Objects":[{"StartTime":135541.0,"EndTime":135541.0,"X":91.0,"Y":241.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":135829.0,"EndTime":135829.0,"X":170.039261,"Y":105.009521,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":136027.0,"Objects":[{"StartTime":136027.0,"EndTime":136027.0,"X":331.0,"Y":242.0}]},{"StartTime":136189.0,"Objects":[{"StartTime":136189.0,"EndTime":136189.0,"X":128.0,"Y":372.0}]},{"StartTime":136351.0,"Objects":[{"StartTime":136351.0,"EndTime":136351.0,"X":223.0,"Y":299.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":136558.0,"EndTime":136558.0,"X":360.467651,"Y":366.594482,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":136676.0,"Objects":[{"StartTime":136676.0,"EndTime":136676.0,"X":433.0,"Y":383.0}]},{"StartTime":136838.0,"Objects":[{"StartTime":136838.0,"EndTime":136838.0,"X":257.0,"Y":167.0}]},{"StartTime":137000.0,"Objects":[{"StartTime":137000.0,"EndTime":137000.0,"X":491.0,"Y":120.0}]},{"StartTime":137162.0,"Objects":[{"StartTime":137162.0,"EndTime":137162.0,"X":330.88028,"Y":240.88028}]},{"StartTime":137243.0,"Objects":[{"StartTime":137243.0,"EndTime":137243.0,"X":334.440155,"Y":244.44014}]},{"StartTime":137324.0,"Objects":[{"StartTime":137324.0,"EndTime":137324.0,"X":338.0,"Y":248.0}]},{"StartTime":137487.0,"Objects":[{"StartTime":137487.0,"EndTime":137487.0,"X":198.0,"Y":103.0}]},{"StartTime":137649.0,"Objects":[{"StartTime":137649.0,"EndTime":137649.0,"X":435.0,"Y":212.0}]},{"StartTime":137811.0,"Objects":[{"StartTime":137811.0,"EndTime":137811.0,"X":208.0,"Y":351.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":137856.0,"EndTime":137856.0,"X":222.192551,"Y":298.960632,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":137973.0,"Objects":[{"StartTime":137973.0,"EndTime":137973.0,"X":69.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138054.0,"EndTime":138054.0,"X":79.83893,"Y":225.839767,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138099.0,"EndTime":138099.0,"X":69.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138297.0,"Objects":[{"StartTime":138297.0,"EndTime":138297.0,"X":208.0,"Y":50.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138342.0,"EndTime":138342.0,"X":197.973,"Y":102.999832,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138460.0,"Objects":[{"StartTime":138460.0,"EndTime":138460.0,"X":46.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138505.0,"EndTime":138505.0,"X":95.8045349,"Y":3.86346078,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138622.0,"Objects":[{"StartTime":138622.0,"EndTime":138622.0,"X":256.440155,"Y":201.44014,"StackOffset":{"X":-3.559845,"Y":-3.55986023}},{"StartTime":138667.0,"EndTime":138667.0,"X":206.76033,"Y":180.891571,"StackOffset":{"X":-3.559845,"Y":-3.55986023}}]},{"StartTime":138784.0,"Objects":[{"StartTime":138784.0,"EndTime":138784.0,"X":343.0,"Y":15.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138829.0,"EndTime":138829.0,"X":355.401733,"Y":65.85758,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138946.0,"Objects":[{"StartTime":138946.0,"EndTime":138946.0,"X":210.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":139234.0,"EndTime":139234.0,"X":362.085327,"Y":234.37854,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":139432.0,"Objects":[{"StartTime":139432.0,"EndTime":139432.0,"X":512.0,"Y":353.0}]},{"StartTime":139595.0,"Objects":[{"StartTime":139595.0,"EndTime":139595.0,"X":435.0,"Y":378.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":139721.0,"EndTime":139721.0,"X":455.4719,"Y":272.080231,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":139919.0,"Objects":[{"StartTime":139919.0,"EndTime":139919.0,"X":274.0,"Y":125.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":140126.0,"EndTime":140126.0,"X":280.4883,"Y":280.441528,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":140243.0,"Objects":[{"StartTime":140243.0,"EndTime":140243.0,"X":289.0,"Y":361.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":140531.0,"EndTime":140531.0,"X":208.826126,"Y":293.6522,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":140730.0,"Objects":[{"StartTime":140730.0,"EndTime":140730.0,"X":387.0,"Y":151.0}]},{"StartTime":140892.0,"Objects":[{"StartTime":140892.0,"EndTime":140892.0,"X":187.0,"Y":95.0}]},{"StartTime":141054.0,"Objects":[{"StartTime":141054.0,"EndTime":141054.0,"X":368.0,"Y":321.0}]},{"StartTime":141216.0,"Objects":[{"StartTime":141216.0,"EndTime":141216.0,"X":287.0,"Y":41.0}]},{"StartTime":141378.0,"Objects":[{"StartTime":141378.0,"EndTime":141378.0,"X":101.0,"Y":196.0}]},{"StartTime":141541.0,"Objects":[{"StartTime":141541.0,"EndTime":141541.0,"X":308.0,"Y":124.0}]},{"StartTime":141703.0,"Objects":[{"StartTime":141703.0,"EndTime":141703.0,"X":107.0,"Y":7.0}]},{"StartTime":141865.0,"Objects":[{"StartTime":141865.0,"EndTime":141865.0,"X":226.0,"Y":219.0}]},{"StartTime":142027.0,"Objects":[{"StartTime":142027.0,"EndTime":142027.0,"X":374.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":142315.0,"EndTime":142315.0,"X":508.23288,"Y":152.034592,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":142514.0,"Objects":[{"StartTime":142514.0,"EndTime":142514.0,"X":287.0,"Y":41.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":142640.0,"EndTime":142640.0,"X":181.518585,"Y":18.5109634,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":142838.0,"Objects":[{"StartTime":142838.0,"EndTime":142838.0,"X":29.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":143045.0,"EndTime":143045.0,"X":167.568069,"Y":175.772644,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":143162.0,"Objects":[{"StartTime":143162.0,"EndTime":143162.0,"X":226.0,"Y":219.0}]},{"StartTime":143324.0,"Objects":[{"StartTime":143324.0,"EndTime":143324.0,"X":356.88028,"Y":340.88028}]},{"StartTime":143405.0,"Objects":[{"StartTime":143405.0,"EndTime":143405.0,"X":360.440155,"Y":344.440155}]},{"StartTime":143487.0,"Objects":[{"StartTime":143487.0,"EndTime":143487.0,"X":364.0,"Y":348.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":143532.0,"EndTime":143532.0,"X":311.31073,"Y":359.54834,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":143649.0,"Objects":[{"StartTime":143649.0,"EndTime":143649.0,"X":429.0,"Y":222.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":143694.0,"EndTime":143694.0,"X":480.925385,"Y":236.604019,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":143811.0,"Objects":[{"StartTime":143811.0,"EndTime":143811.0,"X":344.0,"Y":142.0}]},{"StartTime":143892.0,"Objects":[{"StartTime":143892.0,"EndTime":143892.0,"X":313.0,"Y":113.0}]},{"StartTime":143973.0,"Objects":[{"StartTime":143973.0,"EndTime":143973.0,"X":311.0,"Y":72.0}]},{"StartTime":144054.0,"Objects":[{"StartTime":144054.0,"EndTime":144054.0,"X":342.0,"Y":40.0}]},{"StartTime":144135.0,"Objects":[{"StartTime":144135.0,"EndTime":144135.0,"X":403.0,"Y":74.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144423.0,"EndTime":144423.0,"X":204.603455,"Y":131.8075,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":144622.0,"Objects":[{"StartTime":144622.0,"EndTime":144622.0,"X":365.0,"Y":267.0}]},{"StartTime":144784.0,"Objects":[{"StartTime":144784.0,"EndTime":144784.0,"X":232.0,"Y":48.0}]},{"StartTime":144946.0,"Objects":[{"StartTime":144946.0,"EndTime":144946.0,"X":106.0,"Y":218.0}]},{"StartTime":145108.0,"Objects":[{"StartTime":145108.0,"EndTime":145108.0,"X":313.0,"Y":113.0}]},{"StartTime":145270.0,"Objects":[{"StartTime":145270.0,"EndTime":145270.0,"X":99.88028,"Y":-7.119718}]},{"StartTime":145351.0,"Objects":[{"StartTime":145351.0,"EndTime":145351.0,"X":103.44014,"Y":-3.559859}]},{"StartTime":145432.0,"Objects":[{"StartTime":145432.0,"EndTime":145432.0,"X":107.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":145558.0,"EndTime":145558.0,"X":122.551392,"Y":106.59304,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":145757.0,"Objects":[{"StartTime":145757.0,"EndTime":145757.0,"X":325.0,"Y":27.0}]},{"StartTime":145919.0,"Objects":[{"StartTime":145919.0,"EndTime":145919.0,"X":256.0,"Y":238.0}]},{"StartTime":146081.0,"Objects":[{"StartTime":146081.0,"EndTime":146081.0,"X":149.0,"Y":107.0}]},{"StartTime":146243.0,"Objects":[{"StartTime":146243.0,"EndTime":146243.0,"X":368.0,"Y":228.0}]},{"StartTime":146405.0,"Objects":[{"StartTime":146405.0,"EndTime":146405.0,"X":120.0,"Y":384.0}]},{"StartTime":146568.0,"Objects":[{"StartTime":146568.0,"EndTime":146568.0,"X":329.0,"Y":316.0}]},{"StartTime":146730.0,"Objects":[{"StartTime":146730.0,"EndTime":146730.0,"X":149.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":147018.0,"EndTime":147018.0,"X":166.077515,"Y":252.1589,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":147216.0,"Objects":[{"StartTime":147216.0,"EndTime":147216.0,"X":113.0,"Y":306.0}]},{"StartTime":147378.0,"Objects":[{"StartTime":147378.0,"EndTime":147378.0,"X":318.0,"Y":147.0}]},{"StartTime":147541.0,"Objects":[{"StartTime":147541.0,"EndTime":147541.0,"X":145.44014,"Y":67.44014}]},{"StartTime":147703.0,"Objects":[{"StartTime":147703.0,"EndTime":147703.0,"X":149.0,"Y":71.0}]},{"StartTime":147865.0,"Objects":[{"StartTime":147865.0,"EndTime":147865.0,"X":246.0,"Y":15.0}]},{"StartTime":148027.0,"Objects":[{"StartTime":148027.0,"EndTime":148027.0,"X":199.0,"Y":171.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":148153.0,"EndTime":148153.0,"X":128.68573,"Y":190.439545,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":148351.0,"Objects":[{"StartTime":148351.0,"EndTime":148351.0,"X":256.0,"Y":101.0}]},{"StartTime":148514.0,"Objects":[{"StartTime":148514.0,"EndTime":148514.0,"X":356.0,"Y":225.0}]},{"StartTime":148676.0,"Objects":[{"StartTime":148676.0,"EndTime":148676.0,"X":424.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":148802.0,"EndTime":148802.0,"X":436.841553,"Y":113.358727,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149000.0,"Objects":[{"StartTime":149000.0,"EndTime":149000.0,"X":270.0,"Y":245.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":149126.0,"EndTime":149126.0,"X":283.376617,"Y":316.208832,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149324.0,"Objects":[{"StartTime":149324.0,"EndTime":149324.0,"X":360.0,"Y":339.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":149612.0,"EndTime":149612.0,"X":221.613678,"Y":376.0835,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149811.0,"Objects":[{"StartTime":149811.0,"EndTime":149811.0,"X":356.0,"Y":225.0}]},{"StartTime":149973.0,"Objects":[{"StartTime":149973.0,"EndTime":149973.0,"X":168.0,"Y":96.0}]},{"StartTime":150216.0,"Objects":[{"StartTime":150216.0,"EndTime":150216.0,"X":360.0,"Y":339.0}]},{"StartTime":150460.0,"Objects":[{"StartTime":150460.0,"EndTime":150460.0,"X":242.0,"Y":25.0}]},{"StartTime":150622.0,"Objects":[{"StartTime":150622.0,"EndTime":150622.0,"X":86.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":150784.0,"EndTime":150784.0,"X":22.42053,"Y":160.525543,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":150910.0,"EndTime":150910.0,"X":86.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151108.0,"Objects":[{"StartTime":151108.0,"EndTime":151108.0,"X":140.0,"Y":240.0}]},{"StartTime":151270.0,"Objects":[{"StartTime":151270.0,"EndTime":151270.0,"X":256.0,"Y":131.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":151396.0,"EndTime":151396.0,"X":327.1842,"Y":114.462257,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151514.0,"Objects":[{"StartTime":151514.0,"EndTime":151514.0,"X":399.0,"Y":95.0}]},{"StartTime":151595.0,"Objects":[{"StartTime":151595.0,"EndTime":151595.0,"X":419.0,"Y":89.0}]},{"StartTime":151757.0,"Objects":[{"StartTime":151757.0,"EndTime":151757.0,"X":319.0,"Y":36.0}]},{"StartTime":151919.0,"Objects":[{"StartTime":151919.0,"EndTime":151919.0,"X":416.0,"Y":229.0}]},{"StartTime":152081.0,"Objects":[{"StartTime":152081.0,"EndTime":152081.0,"X":489.0,"Y":32.0}]},{"StartTime":152243.0,"Objects":[{"StartTime":152243.0,"EndTime":152243.0,"X":327.0,"Y":114.0}]},{"StartTime":152568.0,"Objects":[{"StartTime":152568.0,"EndTime":152568.0,"X":331.0,"Y":126.0}]},{"StartTime":152892.0,"Objects":[{"StartTime":152892.0,"EndTime":152892.0,"X":335.0,"Y":138.0}]},{"StartTime":153216.0,"Objects":[{"StartTime":153216.0,"EndTime":153216.0,"X":488.0,"Y":256.0}]},{"StartTime":153541.0,"Objects":[{"StartTime":153541.0,"EndTime":153541.0,"X":488.0,"Y":244.0}]},{"StartTime":153865.0,"Objects":[{"StartTime":153865.0,"EndTime":153865.0,"X":489.0,"Y":228.0}]},{"StartTime":154027.0,"Objects":[{"StartTime":154027.0,"EndTime":154027.0,"X":315.0,"Y":330.0}]},{"StartTime":154189.0,"Objects":[{"StartTime":154189.0,"EndTime":154189.0,"X":426.0,"Y":384.0}]},{"StartTime":154351.0,"Objects":[{"StartTime":154351.0,"EndTime":154351.0,"X":328.88028,"Y":225.88028}]},{"StartTime":154432.0,"Objects":[{"StartTime":154432.0,"EndTime":154432.0,"X":332.440155,"Y":229.44014}]},{"StartTime":154514.0,"Objects":[{"StartTime":154514.0,"EndTime":154514.0,"X":336.0,"Y":233.0}]},{"StartTime":154676.0,"Objects":[{"StartTime":154676.0,"EndTime":154676.0,"X":137.0,"Y":361.0}]},{"StartTime":154838.0,"Objects":[{"StartTime":154838.0,"EndTime":154838.0,"X":202.0,"Y":170.0}]},{"StartTime":155162.0,"Objects":[{"StartTime":155162.0,"EndTime":155162.0,"X":205.0,"Y":190.0}]},{"StartTime":155487.0,"Objects":[{"StartTime":155487.0,"EndTime":155487.0,"X":208.0,"Y":209.0}]},{"StartTime":155811.0,"Objects":[{"StartTime":155811.0,"EndTime":155811.0,"X":80.0,"Y":122.0}]},{"StartTime":155973.0,"Objects":[{"StartTime":155973.0,"EndTime":155973.0,"X":230.0,"Y":48.0}]},{"StartTime":156135.0,"Objects":[{"StartTime":156135.0,"EndTime":156135.0,"X":61.0,"Y":0.0}]},{"StartTime":156297.0,"Objects":[{"StartTime":156297.0,"EndTime":156297.0,"X":193.0,"Y":148.0}]},{"StartTime":156378.0,"Objects":[{"StartTime":156378.0,"EndTime":156378.0,"X":217.0,"Y":158.0}]},{"StartTime":156460.0,"Objects":[{"StartTime":156460.0,"EndTime":156460.0,"X":244.0,"Y":152.0}]},{"StartTime":156622.0,"Objects":[{"StartTime":156622.0,"EndTime":156622.0,"X":120.0,"Y":246.0}]},{"StartTime":156784.0,"Objects":[{"StartTime":156784.0,"EndTime":156784.0,"X":294.0,"Y":99.0}]},{"StartTime":156865.0,"Objects":[{"StartTime":156865.0,"EndTime":156865.0,"X":318.0,"Y":82.0}]},{"StartTime":156946.0,"Objects":[{"StartTime":156946.0,"EndTime":156946.0,"X":351.0,"Y":87.0}]},{"StartTime":157108.0,"Objects":[{"StartTime":157108.0,"EndTime":157108.0,"X":428.0,"Y":207.0}]},{"StartTime":157270.0,"Objects":[{"StartTime":157270.0,"EndTime":157270.0,"X":230.0,"Y":48.0}]},{"StartTime":157432.0,"Objects":[{"StartTime":157432.0,"EndTime":157432.0,"X":120.0,"Y":246.0}]},{"StartTime":157757.0,"Objects":[{"StartTime":157757.0,"EndTime":157757.0,"X":122.0,"Y":229.0}]},{"StartTime":158081.0,"Objects":[{"StartTime":158081.0,"EndTime":158081.0,"X":124.0,"Y":213.0}]},{"StartTime":158243.0,"Objects":[{"StartTime":158243.0,"EndTime":158243.0,"X":295.0,"Y":314.0}]},{"StartTime":158405.0,"Objects":[{"StartTime":158405.0,"EndTime":158405.0,"X":122.0,"Y":384.0}]},{"StartTime":158568.0,"Objects":[{"StartTime":158568.0,"EndTime":158568.0,"X":324.0,"Y":222.0}]},{"StartTime":158730.0,"Objects":[{"StartTime":158730.0,"EndTime":158730.0,"X":428.0,"Y":368.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158856.0,"EndTime":158856.0,"X":358.3122,"Y":345.993317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":159054.0,"Objects":[{"StartTime":159054.0,"EndTime":159054.0,"X":380.0,"Y":162.0}]},{"StartTime":159216.0,"Objects":[{"StartTime":159216.0,"EndTime":159216.0,"X":242.0,"Y":215.0}]},{"StartTime":159378.0,"Objects":[{"StartTime":159378.0,"EndTime":159378.0,"X":428.0,"Y":368.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":159585.0,"EndTime":159585.0,"X":447.453766,"Y":260.12,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":159703.0,"Objects":[{"StartTime":159703.0,"EndTime":159703.0,"X":380.0,"Y":162.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":159910.0,"EndTime":159910.0,"X":426.5376,"Y":66.61574,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":160027.0,"Objects":[{"StartTime":160027.0,"EndTime":160027.0,"X":484.0,"Y":116.0}]},{"StartTime":160189.0,"Objects":[{"StartTime":160189.0,"EndTime":160189.0,"X":242.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":160477.0,"EndTime":160477.0,"X":143.721771,"Y":108.139114,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":160676.0,"Objects":[{"StartTime":160676.0,"EndTime":160676.0,"X":327.0,"Y":235.0}]},{"StartTime":160838.0,"Objects":[{"StartTime":160838.0,"EndTime":160838.0,"X":167.88028,"Y":369.88028}]},{"StartTime":160919.0,"Objects":[{"StartTime":160919.0,"EndTime":160919.0,"X":171.44014,"Y":373.440155}]},{"StartTime":161000.0,"Objects":[{"StartTime":161000.0,"EndTime":161000.0,"X":175.0,"Y":377.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":161126.0,"EndTime":161126.0,"X":150.120163,"Y":290.917664,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":161324.0,"Objects":[{"StartTime":161324.0,"EndTime":161324.0,"X":330.0,"Y":156.0}]},{"StartTime":161487.0,"Objects":[{"StartTime":161487.0,"EndTime":161487.0,"X":471.0,"Y":341.0}]},{"StartTime":161568.0,"Objects":[{"StartTime":161568.0,"EndTime":161568.0,"X":434.0,"Y":364.0}]},{"StartTime":161649.0,"Objects":[{"StartTime":161649.0,"EndTime":161649.0,"X":399.0,"Y":355.0}]},{"StartTime":161811.0,"Objects":[{"StartTime":161811.0,"EndTime":161811.0,"X":328.0,"Y":258.0}]},{"StartTime":161973.0,"Objects":[{"StartTime":161973.0,"EndTime":161973.0,"X":474.0,"Y":149.0}]},{"StartTime":162054.0,"Objects":[{"StartTime":162054.0,"EndTime":162054.0,"X":466.0,"Y":186.0}]},{"StartTime":162135.0,"Objects":[{"StartTime":162135.0,"EndTime":162135.0,"X":458.0,"Y":219.0}]},{"StartTime":162297.0,"Objects":[{"StartTime":162297.0,"EndTime":162297.0,"X":363.0,"Y":82.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":162585.0,"EndTime":162585.0,"X":195.744888,"Y":149.32608,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":162784.0,"Objects":[{"StartTime":162784.0,"EndTime":162784.0,"X":139.0,"Y":96.0}]},{"StartTime":162946.0,"Objects":[{"StartTime":162946.0,"EndTime":162946.0,"X":35.0,"Y":225.0}]},{"StartTime":163108.0,"Objects":[{"StartTime":163108.0,"EndTime":163108.0,"X":60.0,"Y":152.0}]},{"StartTime":163270.0,"Objects":[{"StartTime":163270.0,"EndTime":163270.0,"X":223.0,"Y":298.0}]},{"StartTime":163432.0,"Objects":[{"StartTime":163432.0,"EndTime":163432.0,"X":210.0,"Y":223.0}]},{"StartTime":163595.0,"Objects":[{"StartTime":163595.0,"EndTime":163595.0,"X":45.0,"Y":321.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":163721.0,"EndTime":163721.0,"X":137.6757,"Y":355.2489,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":163919.0,"Objects":[{"StartTime":163919.0,"EndTime":163919.0,"X":283.440155,"Y":242.44014}]},{"StartTime":164081.0,"Objects":[{"StartTime":164081.0,"EndTime":164081.0,"X":139.0,"Y":96.0}]},{"StartTime":164243.0,"Objects":[{"StartTime":164243.0,"EndTime":164243.0,"X":287.0,"Y":246.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":164369.0,"EndTime":164369.0,"X":381.60495,"Y":218.029053,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":164568.0,"Objects":[{"StartTime":164568.0,"EndTime":164568.0,"X":228.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":164775.0,"EndTime":164775.0,"X":178.179764,"Y":177.656937,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":164892.0,"Objects":[{"StartTime":164892.0,"EndTime":164892.0,"X":187.0,"Y":251.0}]},{"StartTime":165054.0,"Objects":[{"StartTime":165054.0,"EndTime":165054.0,"X":362.0,"Y":95.0}]},{"StartTime":165216.0,"Objects":[{"StartTime":165216.0,"EndTime":165216.0,"X":181.55986,"Y":180.55986}]},{"StartTime":165378.0,"Objects":[{"StartTime":165378.0,"EndTime":165378.0,"X":393.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":165504.0,"EndTime":165504.0,"X":406.0307,"Y":240.255035,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":165703.0,"Objects":[{"StartTime":165703.0,"EndTime":165703.0,"X":224.0,"Y":352.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":165829.0,"EndTime":165829.0,"X":127.282745,"Y":373.0001,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166027.0,"Objects":[{"StartTime":166027.0,"EndTime":166027.0,"X":38.0,"Y":139.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166315.0,"EndTime":166315.0,"X":94.76893,"Y":202.286728,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166514.0,"Objects":[{"StartTime":166514.0,"EndTime":166514.0,"X":224.0,"Y":352.0}]},{"StartTime":166676.0,"Objects":[{"StartTime":166676.0,"EndTime":166676.0,"X":312.88028,"Y":211.88028}]},{"StartTime":166757.0,"Objects":[{"StartTime":166757.0,"EndTime":166757.0,"X":316.440155,"Y":215.44014}]},{"StartTime":166838.0,"Objects":[{"StartTime":166838.0,"EndTime":166838.0,"X":320.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166964.0,"EndTime":166964.0,"X":335.705536,"Y":316.9286,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":167162.0,"Objects":[{"StartTime":167162.0,"EndTime":167162.0,"X":208.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":167369.0,"EndTime":167369.0,"X":314.63,"Y":110.89566,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":167487.0,"Objects":[{"StartTime":167487.0,"EndTime":167487.0,"X":383.440155,"Y":81.44014}]},{"StartTime":167811.0,"Objects":[{"StartTime":167811.0,"EndTime":167811.0,"X":387.0,"Y":85.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":167937.0,"EndTime":167937.0,"X":402.5302,"Y":182.887451,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168135.0,"Objects":[{"StartTime":168135.0,"EndTime":168135.0,"X":247.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168261.0,"EndTime":168261.0,"X":227.808548,"Y":96.07656,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168460.0,"Objects":[{"StartTime":168460.0,"EndTime":168460.0,"X":51.0,"Y":253.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168667.0,"EndTime":168667.0,"X":160.370071,"Y":209.627731,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168784.0,"Objects":[{"StartTime":168784.0,"EndTime":168784.0,"X":184.0,"Y":282.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168910.0,"EndTime":168910.0,"X":277.386383,"Y":312.846649,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169108.0,"Objects":[{"StartTime":169108.0,"EndTime":169108.0,"X":402.0,"Y":182.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":169234.0,"EndTime":169234.0,"X":307.239227,"Y":209.268143,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169432.0,"Objects":[{"StartTime":169432.0,"EndTime":169432.0,"X":414.0,"Y":367.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":169558.0,"EndTime":169558.0,"X":429.1886,"Y":278.648743,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169757.0,"Objects":[{"StartTime":169757.0,"EndTime":169757.0,"X":223.0,"Y":116.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":169883.0,"EndTime":169883.0,"X":233.536072,"Y":214.5363,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170081.0,"Objects":[{"StartTime":170081.0,"EndTime":170081.0,"X":488.0,"Y":67.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170288.0,"EndTime":170288.0,"X":367.508942,"Y":32.84226,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170405.0,"Objects":[{"StartTime":170405.0,"EndTime":170405.0,"X":319.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170531.0,"EndTime":170531.0,"X":222.873062,"Y":115.492477,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170730.0,"Objects":[{"StartTime":170730.0,"EndTime":170730.0,"X":393.0,"Y":237.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170856.0,"EndTime":170856.0,"X":487.852,"Y":265.337646,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171054.0,"Objects":[{"StartTime":171054.0,"EndTime":171054.0,"X":308.0,"Y":384.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171180.0,"EndTime":171180.0,"X":293.36615,"Y":298.094452,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171378.0,"Objects":[{"StartTime":171378.0,"EndTime":171378.0,"X":195.0,"Y":44.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171585.0,"EndTime":171585.0,"X":177.52536,"Y":191.740128,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171703.0,"Objects":[{"StartTime":171703.0,"EndTime":171703.0,"X":230.0,"Y":247.0}]},{"StartTime":171865.0,"Objects":[{"StartTime":171865.0,"EndTime":171865.0,"X":31.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172153.0,"EndTime":172153.0,"X":98.42071,"Y":234.214081,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172351.0,"Objects":[{"StartTime":172351.0,"EndTime":172351.0,"X":204.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172558.0,"EndTime":172558.0,"X":71.31268,"Y":15.4140854,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172676.0,"Objects":[{"StartTime":172676.0,"EndTime":172676.0,"X":14.0,"Y":62.0}]},{"StartTime":172838.0,"Objects":[{"StartTime":172838.0,"EndTime":172838.0,"X":161.0,"Y":175.0}]},{"StartTime":173000.0,"Objects":[{"StartTime":173000.0,"EndTime":173000.0,"X":35.0,"Y":149.0}]},{"StartTime":173162.0,"Objects":[{"StartTime":173162.0,"EndTime":173162.0,"X":204.0,"Y":62.0}]},{"StartTime":173324.0,"Objects":[{"StartTime":173324.0,"EndTime":173324.0,"X":262.0,"Y":266.0}]},{"StartTime":173487.0,"Objects":[{"StartTime":173487.0,"EndTime":173487.0,"X":124.0,"Y":91.0}]},{"StartTime":173649.0,"Objects":[{"StartTime":173649.0,"EndTime":173649.0,"X":123.0,"Y":310.0}]},{"StartTime":173811.0,"Objects":[{"StartTime":173811.0,"EndTime":173811.0,"X":265.0,"Y":107.0}]},{"StartTime":173973.0,"Objects":[{"StartTime":173973.0,"EndTime":173973.0,"X":319.0,"Y":381.0}]},{"StartTime":174135.0,"Objects":[{"StartTime":174135.0,"EndTime":174135.0,"X":161.0,"Y":175.0}]},{"StartTime":174297.0,"Objects":[{"StartTime":174297.0,"EndTime":174297.0,"X":363.0,"Y":258.0}]},{"StartTime":174460.0,"Objects":[{"StartTime":174460.0,"EndTime":174460.0,"X":155.0,"Y":384.0}]},{"StartTime":174622.0,"Objects":[{"StartTime":174622.0,"EndTime":174622.0,"X":364.0,"Y":59.0}]},{"StartTime":174784.0,"Objects":[{"StartTime":174784.0,"EndTime":174784.0,"X":410.0,"Y":341.0}]},{"StartTime":174946.0,"Objects":[{"StartTime":174946.0,"EndTime":174946.0,"X":205.0,"Y":35.0}]},{"StartTime":175108.0,"Objects":[{"StartTime":175108.0,"EndTime":175108.0,"X":123.0,"Y":310.0}]},{"StartTime":175270.0,"Objects":[{"StartTime":175270.0,"EndTime":175270.0,"X":411.0,"Y":183.0}]},{"StartTime":175432.0,"Objects":[{"StartTime":175432.0,"EndTime":175432.0,"X":80.0,"Y":49.0}]},{"StartTime":176081.0,"Objects":[{"StartTime":176081.0,"EndTime":176081.0,"X":67.0,"Y":42.0}]},{"StartTime":176243.0,"Objects":[{"StartTime":176243.0,"EndTime":176243.0,"X":231.0,"Y":249.0}]},{"StartTime":176405.0,"Objects":[{"StartTime":176405.0,"EndTime":176405.0,"X":433.0,"Y":101.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":176612.0,"EndTime":176612.0,"X":374.4514,"Y":152.1901,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":176730.0,"Objects":[{"StartTime":176730.0,"EndTime":176730.0,"X":427.0,"Y":207.0}]},{"StartTime":176892.0,"Objects":[{"StartTime":176892.0,"EndTime":176892.0,"X":281.0,"Y":95.0}]},{"StartTime":177054.0,"Objects":[{"StartTime":177054.0,"EndTime":177054.0,"X":471.0,"Y":27.0}]},{"StartTime":177216.0,"Objects":[{"StartTime":177216.0,"EndTime":177216.0,"X":265.88028,"Y":211.88028}]},{"StartTime":177297.0,"Objects":[{"StartTime":177297.0,"EndTime":177297.0,"X":269.440155,"Y":215.44014}]},{"StartTime":177378.0,"Objects":[{"StartTime":177378.0,"EndTime":177378.0,"X":273.0,"Y":219.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":177423.0,"EndTime":177423.0,"X":221.380753,"Y":195.4054,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177541.0,"Objects":[{"StartTime":177541.0,"EndTime":177541.0,"X":377.0,"Y":361.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":177748.0,"EndTime":177748.0,"X":429.262421,"Y":340.613739,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177865.0,"Objects":[{"StartTime":177865.0,"EndTime":177865.0,"X":465.0,"Y":274.0}]},{"StartTime":182892.0,"Objects":[{"StartTime":182892.0,"EndTime":182892.0,"X":100.0,"Y":334.0}]},{"StartTime":183054.0,"Objects":[{"StartTime":183054.0,"EndTime":183054.0,"X":72.0,"Y":268.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183378.0,"EndTime":183378.0,"X":176.303543,"Y":275.243622,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183504.0,"EndTime":183504.0,"X":206.569153,"Y":320.91394,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":183703.0,"Objects":[{"StartTime":183703.0,"EndTime":183703.0,"X":328.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183991.0,"EndTime":183991.0,"X":219.648621,"Y":165.7105,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":184189.0,"Objects":[{"StartTime":184189.0,"EndTime":184189.0,"X":341.88028,"Y":296.88028}]},{"StartTime":184270.0,"Objects":[{"StartTime":184270.0,"EndTime":184270.0,"X":345.440155,"Y":300.440155}]},{"StartTime":184351.0,"Objects":[{"StartTime":184351.0,"EndTime":184351.0,"X":349.0,"Y":304.0}]},{"StartTime":184838.0,"Objects":[{"StartTime":184838.0,"EndTime":184838.0,"X":349.0,"Y":304.0}]},{"StartTime":185000.0,"Objects":[{"StartTime":185000.0,"EndTime":185000.0,"X":219.0,"Y":165.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":185126.0,"EndTime":185126.0,"X":230.723755,"Y":110.568245,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":185324.0,"Objects":[{"StartTime":185324.0,"EndTime":185324.0,"X":353.0,"Y":62.0}]},{"StartTime":185568.0,"Objects":[{"StartTime":185568.0,"EndTime":185568.0,"X":121.0,"Y":275.0}]},{"StartTime":185649.0,"Objects":[{"StartTime":185649.0,"EndTime":185649.0,"X":129.0,"Y":262.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":185775.0,"EndTime":185775.0,"X":200.858246,"Y":248.692917,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":185892.0,"Objects":[{"StartTime":185892.0,"EndTime":185892.0,"X":272.0,"Y":234.0}]},{"StartTime":185973.0,"Objects":[{"StartTime":185973.0,"EndTime":185973.0,"X":295.0,"Y":231.0}]},{"StartTime":186135.0,"Objects":[{"StartTime":186135.0,"EndTime":186135.0,"X":219.0,"Y":165.0}]},{"StartTime":186297.0,"Objects":[{"StartTime":186297.0,"EndTime":186297.0,"X":349.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":186423.0,"EndTime":186423.0,"X":334.49353,"Y":375.625732,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":186622.0,"Objects":[{"StartTime":186622.0,"EndTime":186622.0,"X":468.0,"Y":214.0}]},{"StartTime":186784.0,"Objects":[{"StartTime":186784.0,"EndTime":186784.0,"X":398.0,"Y":238.0}]},{"StartTime":186946.0,"Objects":[{"StartTime":186946.0,"EndTime":186946.0,"X":432.0,"Y":55.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":187072.0,"EndTime":187072.0,"X":446.1718,"Y":126.692726,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":187189.0,"Objects":[{"StartTime":187189.0,"EndTime":187189.0,"X":464.0,"Y":196.0}]},{"StartTime":187270.0,"Objects":[{"StartTime":187270.0,"EndTime":187270.0,"X":468.0,"Y":214.0}]},{"StartTime":187432.0,"Objects":[{"StartTime":187432.0,"EndTime":187432.0,"X":338.0,"Y":93.0}]},{"StartTime":187595.0,"Objects":[{"StartTime":187595.0,"EndTime":187595.0,"X":219.0,"Y":165.0}]},{"StartTime":187676.0,"Objects":[{"StartTime":187676.0,"EndTime":187676.0,"X":187.0,"Y":181.0}]},{"StartTime":187757.0,"Objects":[{"StartTime":187757.0,"EndTime":187757.0,"X":157.0,"Y":164.0}]},{"StartTime":187838.0,"Objects":[{"StartTime":187838.0,"EndTime":187838.0,"X":152.0,"Y":127.0}]},{"StartTime":187919.0,"Objects":[{"StartTime":187919.0,"EndTime":187919.0,"X":177.0,"Y":105.0}]},{"StartTime":188081.0,"Objects":[{"StartTime":188081.0,"EndTime":188081.0,"X":309.88028,"Y":225.88028}]},{"StartTime":188162.0,"Objects":[{"StartTime":188162.0,"EndTime":188162.0,"X":313.440155,"Y":229.44014}]},{"StartTime":188243.0,"Objects":[{"StartTime":188243.0,"EndTime":188243.0,"X":317.0,"Y":233.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":188450.0,"EndTime":188450.0,"X":296.006622,"Y":340.591,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":188568.0,"Objects":[{"StartTime":188568.0,"EndTime":188568.0,"X":353.0,"Y":384.0}]},{"StartTime":188730.0,"Objects":[{"StartTime":188730.0,"EndTime":188730.0,"X":216.0,"Y":275.0}]},{"StartTime":188892.0,"Objects":[{"StartTime":188892.0,"EndTime":188892.0,"X":385.0,"Y":171.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":189018.0,"EndTime":189018.0,"X":398.602173,"Y":242.736786,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":189216.0,"Objects":[{"StartTime":189216.0,"EndTime":189216.0,"X":194.0,"Y":34.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":189342.0,"EndTime":189342.0,"X":176.858063,"Y":104.771019,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":189460.0,"Objects":[{"StartTime":189460.0,"EndTime":189460.0,"X":118.44014,"Y":152.44014}]},{"StartTime":189541.0,"Objects":[{"StartTime":189541.0,"EndTime":189541.0,"X":122.0,"Y":156.0}]},{"StartTime":189703.0,"Objects":[{"StartTime":189703.0,"EndTime":189703.0,"X":293.88028,"Y":37.8802834}]},{"StartTime":189784.0,"Objects":[{"StartTime":189784.0,"EndTime":189784.0,"X":297.440155,"Y":41.44014}]},{"StartTime":189865.0,"Objects":[{"StartTime":189865.0,"EndTime":189865.0,"X":301.0,"Y":45.0}]},{"StartTime":190027.0,"Objects":[{"StartTime":190027.0,"EndTime":190027.0,"X":385.0,"Y":171.0}]},{"StartTime":190189.0,"Objects":[{"StartTime":190189.0,"EndTime":190189.0,"X":186.88028,"Y":26.8802814}]},{"StartTime":190270.0,"Objects":[{"StartTime":190270.0,"EndTime":190270.0,"X":190.44014,"Y":30.4401417}]},{"StartTime":190351.0,"Objects":[{"StartTime":190351.0,"EndTime":190351.0,"X":194.0,"Y":34.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":190396.0,"EndTime":190396.0,"X":199.64093,"Y":70.10196,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":190514.0,"Objects":[{"StartTime":190514.0,"EndTime":190514.0,"X":34.8802834,"Y":240.88028}]},{"StartTime":190595.0,"Objects":[{"StartTime":190595.0,"EndTime":190595.0,"X":38.44014,"Y":244.44014}]},{"StartTime":190676.0,"Objects":[{"StartTime":190676.0,"EndTime":190676.0,"X":42.0,"Y":248.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":190721.0,"EndTime":190721.0,"X":47.64093,"Y":211.898041,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":190838.0,"Objects":[{"StartTime":190838.0,"EndTime":190838.0,"X":16.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":191162.0,"EndTime":191162.0,"X":119.469978,"Y":147.29715,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":191288.0,"EndTime":191288.0,"X":148.708221,"Y":193.475845,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":191487.0,"Objects":[{"StartTime":191487.0,"EndTime":191487.0,"X":296.0,"Y":345.0}]},{"StartTime":191568.0,"Objects":[{"StartTime":191568.0,"EndTime":191568.0,"X":261.0,"Y":370.0}]},{"StartTime":191649.0,"Objects":[{"StartTime":191649.0,"EndTime":191649.0,"X":221.0,"Y":354.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":191694.0,"EndTime":191694.0,"X":213.887466,"Y":298.299835,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":191811.0,"Objects":[{"StartTime":191811.0,"EndTime":191811.0,"X":378.0,"Y":138.0}]},{"StartTime":191892.0,"Objects":[{"StartTime":191892.0,"EndTime":191892.0,"X":343.0,"Y":113.0}]},{"StartTime":191973.0,"Objects":[{"StartTime":191973.0,"EndTime":191973.0,"X":303.0,"Y":129.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":192018.0,"EndTime":192018.0,"X":295.887482,"Y":184.700165,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":192135.0,"Objects":[{"StartTime":192135.0,"EndTime":192135.0,"X":352.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":192423.0,"EndTime":192423.0,"X":169.461578,"Y":325.467743,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":192622.0,"Objects":[{"StartTime":192622.0,"EndTime":192622.0,"X":295.0,"Y":184.0}]},{"StartTime":192784.0,"Objects":[{"StartTime":192784.0,"EndTime":192784.0,"X":129.0,"Y":67.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":192910.0,"EndTime":192910.0,"X":214.250961,"Y":97.42061,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":193108.0,"Objects":[{"StartTime":193108.0,"EndTime":193108.0,"X":87.0,"Y":223.0}]},{"StartTime":193270.0,"Objects":[{"StartTime":193270.0,"EndTime":193270.0,"X":223.88028,"Y":72.88028}]},{"StartTime":193351.0,"Objects":[{"StartTime":193351.0,"EndTime":193351.0,"X":227.44014,"Y":76.44014}]},{"StartTime":193432.0,"Objects":[{"StartTime":193432.0,"EndTime":193432.0,"X":231.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":193639.0,"EndTime":193639.0,"X":355.849518,"Y":39.56346,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":193757.0,"Objects":[{"StartTime":193757.0,"EndTime":193757.0,"X":414.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":193883.0,"EndTime":193883.0,"X":393.473846,"Y":185.032715,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":194081.0,"Objects":[{"StartTime":194081.0,"EndTime":194081.0,"X":273.0,"Y":328.0}]},{"StartTime":194243.0,"Objects":[{"StartTime":194243.0,"EndTime":194243.0,"X":486.0,"Y":204.0}]},{"StartTime":194405.0,"Objects":[{"StartTime":194405.0,"EndTime":194405.0,"X":307.0,"Y":111.0}]},{"StartTime":194568.0,"Objects":[{"StartTime":194568.0,"EndTime":194568.0,"X":431.0,"Y":324.0}]},{"StartTime":194649.0,"Objects":[{"StartTime":194649.0,"EndTime":194649.0,"X":434.0,"Y":307.0}]},{"StartTime":194730.0,"Objects":[{"StartTime":194730.0,"EndTime":194730.0,"X":437.0,"Y":293.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":195018.0,"EndTime":195018.0,"X":272.098663,"Y":327.366364,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":195216.0,"Objects":[{"StartTime":195216.0,"EndTime":195216.0,"X":119.0,"Y":181.0}]},{"StartTime":195378.0,"Objects":[{"StartTime":195378.0,"EndTime":195378.0,"X":30.0,"Y":306.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":195504.0,"EndTime":195504.0,"X":126.266693,"Y":283.16925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":195703.0,"Objects":[{"StartTime":195703.0,"EndTime":195703.0,"X":231.0,"Y":143.0}]},{"StartTime":195865.0,"Objects":[{"StartTime":195865.0,"EndTime":195865.0,"X":94.88028,"Y":25.8802814}]},{"StartTime":195946.0,"Objects":[{"StartTime":195946.0,"EndTime":195946.0,"X":98.44014,"Y":29.4401417}]},{"StartTime":196027.0,"Objects":[{"StartTime":196027.0,"EndTime":196027.0,"X":102.0,"Y":33.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":196153.0,"EndTime":196153.0,"X":197.922256,"Y":56.95418,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":196351.0,"Objects":[{"StartTime":196351.0,"EndTime":196351.0,"X":89.0,"Y":175.0}]},{"StartTime":196514.0,"Objects":[{"StartTime":196514.0,"EndTime":196514.0,"X":260.0,"Y":250.0}]},{"StartTime":196676.0,"Objects":[{"StartTime":196676.0,"EndTime":196676.0,"X":97.0,"Y":370.0}]},{"StartTime":196838.0,"Objects":[{"StartTime":196838.0,"EndTime":196838.0,"X":239.88028,"Y":155.88028}]},{"StartTime":196919.0,"Objects":[{"StartTime":196919.0,"EndTime":196919.0,"X":243.44014,"Y":159.44014}]},{"StartTime":197000.0,"Objects":[{"StartTime":197000.0,"EndTime":197000.0,"X":247.0,"Y":163.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":197045.0,"EndTime":197045.0,"X":295.152618,"Y":174.852951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":197162.0,"Objects":[{"StartTime":197162.0,"EndTime":197162.0,"X":473.0,"Y":339.0}]},{"StartTime":197243.0,"Objects":[{"StartTime":197243.0,"EndTime":197243.0,"X":441.0,"Y":363.0}]},{"StartTime":197324.0,"Objects":[{"StartTime":197324.0,"EndTime":197324.0,"X":403.0,"Y":349.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":197531.0,"EndTime":197531.0,"X":422.4077,"Y":201.501343,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":197649.0,"Objects":[{"StartTime":197649.0,"EndTime":197649.0,"X":472.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":197775.0,"EndTime":197775.0,"X":497.565216,"Y":225.263321,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":197973.0,"Objects":[{"StartTime":197973.0,"EndTime":197973.0,"X":344.0,"Y":101.0}]},{"StartTime":198135.0,"Objects":[{"StartTime":198135.0,"EndTime":198135.0,"X":470.0,"Y":38.0}]},{"StartTime":198297.0,"Objects":[{"StartTime":198297.0,"EndTime":198297.0,"X":347.0,"Y":231.0}]},{"StartTime":198460.0,"Objects":[{"StartTime":198460.0,"EndTime":198460.0,"X":200.88028,"Y":1.88028193}]},{"StartTime":198541.0,"Objects":[{"StartTime":198541.0,"EndTime":198541.0,"X":204.44014,"Y":5.44014072}]},{"StartTime":198622.0,"Objects":[{"StartTime":198622.0,"EndTime":198622.0,"X":208.0,"Y":9.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":198748.0,"EndTime":198748.0,"X":301.888275,"Y":39.795578,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":198946.0,"Objects":[{"StartTime":198946.0,"EndTime":198946.0,"X":189.0,"Y":186.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":199153.0,"EndTime":199153.0,"X":49.7648544,"Y":228.957153,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":199270.0,"Objects":[{"StartTime":199270.0,"EndTime":199270.0,"X":-3.559859,"Y":171.44014}]},{"StartTime":199432.0,"Objects":[{"StartTime":199432.0,"EndTime":199432.0,"X":192.0,"Y":352.0}]},{"StartTime":199595.0,"Objects":[{"StartTime":199595.0,"EndTime":199595.0,"X":0.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":199721.0,"EndTime":199721.0,"X":22.2606564,"Y":78.42636,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":199919.0,"Objects":[{"StartTime":199919.0,"EndTime":199919.0,"X":244.0,"Y":262.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":200126.0,"EndTime":200126.0,"X":227.027512,"Y":114.432533,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":200243.0,"Objects":[{"StartTime":200243.0,"EndTime":200243.0,"X":174.0,"Y":61.0}]},{"StartTime":200405.0,"Objects":[{"StartTime":200405.0,"EndTime":200405.0,"X":49.0,"Y":228.0}]},{"StartTime":200568.0,"Objects":[{"StartTime":200568.0,"EndTime":200568.0,"X":259.0,"Y":127.0}]},{"StartTime":200730.0,"Objects":[{"StartTime":200730.0,"EndTime":200730.0,"X":78.88028,"Y":-5.119718}]},{"StartTime":200811.0,"Objects":[{"StartTime":200811.0,"EndTime":200811.0,"X":82.44014,"Y":-1.559859}]},{"StartTime":200892.0,"Objects":[{"StartTime":200892.0,"EndTime":200892.0,"X":86.0,"Y":2.0}]},{"StartTime":201054.0,"Objects":[{"StartTime":201054.0,"EndTime":201054.0,"X":244.0,"Y":262.0}]},{"StartTime":201216.0,"Objects":[{"StartTime":201216.0,"EndTime":201216.0,"X":23.0,"Y":124.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201342.0,"EndTime":201342.0,"X":118.862045,"Y":99.96171,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201541.0,"Objects":[{"StartTime":201541.0,"EndTime":201541.0,"X":293.0,"Y":0.0}]},{"StartTime":201703.0,"Objects":[{"StartTime":201703.0,"EndTime":201703.0,"X":447.0,"Y":147.0}]},{"StartTime":201784.0,"Objects":[{"StartTime":201784.0,"EndTime":201784.0,"X":428.0,"Y":166.0}]},{"StartTime":201865.0,"Objects":[{"StartTime":201865.0,"EndTime":201865.0,"X":397.0,"Y":165.0}]},{"StartTime":202027.0,"Objects":[{"StartTime":202027.0,"EndTime":202027.0,"X":483.0,"Y":51.0}]},{"StartTime":202189.0,"Objects":[{"StartTime":202189.0,"EndTime":202189.0,"X":380.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202396.0,"EndTime":202396.0,"X":257.8795,"Y":176.7536,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202514.0,"Objects":[{"StartTime":202514.0,"EndTime":202514.0,"X":186.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202802.0,"EndTime":202802.0,"X":368.3096,"Y":273.459625,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":203000.0,"Objects":[{"StartTime":203000.0,"EndTime":203000.0,"X":208.0,"Y":96.0}]},{"StartTime":203162.0,"Objects":[{"StartTime":203162.0,"EndTime":203162.0,"X":261.0,"Y":329.0}]},{"StartTime":203324.0,"Objects":[{"StartTime":203324.0,"EndTime":203324.0,"X":380.0,"Y":149.0}]},{"StartTime":203487.0,"Objects":[{"StartTime":203487.0,"EndTime":203487.0,"X":186.0,"Y":215.0}]},{"StartTime":203649.0,"Objects":[{"StartTime":203649.0,"EndTime":203649.0,"X":378.0,"Y":364.0}]},{"StartTime":203811.0,"Objects":[{"StartTime":203811.0,"EndTime":203811.0,"X":279.0,"Y":239.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":204099.0,"EndTime":204099.0,"X":98.91592,"Y":298.552063,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":204297.0,"Objects":[{"StartTime":204297.0,"EndTime":204297.0,"X":281.0,"Y":153.0}]},{"StartTime":204460.0,"Objects":[{"StartTime":204460.0,"EndTime":204460.0,"X":110.0,"Y":46.0}]},{"StartTime":204622.0,"Objects":[{"StartTime":204622.0,"EndTime":204622.0,"X":186.0,"Y":215.0}]},{"StartTime":204784.0,"Objects":[{"StartTime":204784.0,"EndTime":204784.0,"X":315.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":204991.0,"EndTime":204991.0,"X":435.8663,"Y":118.276,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":205108.0,"Objects":[{"StartTime":205108.0,"EndTime":205108.0,"X":512.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":205396.0,"EndTime":205396.0,"X":380.2276,"Y":228.202179,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":205595.0,"Objects":[{"StartTime":205595.0,"EndTime":205595.0,"X":512.0,"Y":96.0}]},{"StartTime":205757.0,"Objects":[{"StartTime":205757.0,"EndTime":205757.0,"X":302.0,"Y":224.0}]},{"StartTime":205919.0,"Objects":[{"StartTime":205919.0,"EndTime":205919.0,"X":496.0,"Y":334.0}]},{"StartTime":206081.0,"Objects":[{"StartTime":206081.0,"EndTime":206081.0,"X":363.0,"Y":152.0}]},{"StartTime":206243.0,"Objects":[{"StartTime":206243.0,"EndTime":206243.0,"X":226.0,"Y":365.0}]},{"StartTime":206405.0,"Objects":[{"StartTime":206405.0,"EndTime":206405.0,"X":377.0,"Y":226.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":206693.0,"EndTime":206693.0,"X":208.3632,"Y":146.109634,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":206892.0,"Objects":[{"StartTime":206892.0,"EndTime":206892.0,"X":317.0,"Y":310.0}]},{"StartTime":207054.0,"Objects":[{"StartTime":207054.0,"EndTime":207054.0,"X":282.0,"Y":65.0}]},{"StartTime":207216.0,"Objects":[{"StartTime":207216.0,"EndTime":207216.0,"X":108.0,"Y":232.0}]},{"StartTime":207378.0,"Objects":[{"StartTime":207378.0,"EndTime":207378.0,"X":0.0,"Y":163.0}]},{"StartTime":207460.0,"Objects":[{"StartTime":207460.0,"EndTime":207460.0,"X":21.0,"Y":119.0}]},{"StartTime":207541.0,"Objects":[{"StartTime":207541.0,"EndTime":207541.0,"X":65.0,"Y":101.0}]},{"StartTime":207622.0,"Objects":[{"StartTime":207622.0,"EndTime":207622.0,"X":116.0,"Y":115.0}]},{"StartTime":207703.0,"Objects":[{"StartTime":207703.0,"EndTime":207703.0,"X":131.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":207829.0,"EndTime":207829.0,"X":113.029633,"Y":202.713181,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":208027.0,"Objects":[{"StartTime":208027.0,"EndTime":208027.0,"X":209.0,"Y":284.0}]},{"StartTime":208189.0,"Objects":[{"StartTime":208189.0,"EndTime":208189.0,"X":87.0,"Y":342.0}]},{"StartTime":208351.0,"Objects":[{"StartTime":208351.0,"EndTime":208351.0,"X":228.0,"Y":206.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":208477.0,"EndTime":208477.0,"X":295.507141,"Y":233.443161,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":208676.0,"Objects":[{"StartTime":208676.0,"EndTime":208676.0,"X":317.0,"Y":310.0}]},{"StartTime":208838.0,"Objects":[{"StartTime":208838.0,"EndTime":208838.0,"X":468.0,"Y":196.0}]},{"StartTime":208919.0,"Objects":[{"StartTime":208919.0,"EndTime":208919.0,"X":457.0,"Y":192.0}]},{"StartTime":209000.0,"Objects":[{"StartTime":209000.0,"EndTime":209000.0,"X":444.0,"Y":186.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":209126.0,"EndTime":209126.0,"X":451.721558,"Y":258.535278,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":209324.0,"Objects":[{"StartTime":209324.0,"EndTime":209324.0,"X":302.0,"Y":84.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":209450.0,"EndTime":209450.0,"X":286.32312,"Y":155.0472,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":209649.0,"Objects":[{"StartTime":209649.0,"EndTime":209649.0,"X":445.0,"Y":43.0}]},{"StartTime":209892.0,"Objects":[{"StartTime":209892.0,"EndTime":209892.0,"X":228.0,"Y":206.0}]},{"StartTime":210135.0,"Objects":[{"StartTime":210135.0,"EndTime":210135.0,"X":447.0,"Y":384.0}]},{"StartTime":210297.0,"Objects":[{"StartTime":210297.0,"EndTime":210297.0,"X":313.0,"Y":229.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":210504.0,"EndTime":210504.0,"X":172.0766,"Y":265.49353,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":210622.0,"Objects":[{"StartTime":210622.0,"EndTime":210622.0,"X":138.0,"Y":334.0}]},{"StartTime":210784.0,"Objects":[{"StartTime":210784.0,"EndTime":210784.0,"X":6.0,"Y":131.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":211072.0,"EndTime":211072.0,"X":112.5638,"Y":170.578735,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":211189.0,"Objects":[{"StartTime":211189.0,"EndTime":211189.0,"X":52.0,"Y":220.0}]},{"StartTime":211270.0,"Objects":[{"StartTime":211270.0,"EndTime":211270.0,"X":47.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":211477.0,"EndTime":211477.0,"X":171.609314,"Y":265.431152,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":211595.0,"Objects":[{"StartTime":211595.0,"EndTime":211595.0,"X":226.0,"Y":322.0}]},{"StartTime":211757.0,"Objects":[{"StartTime":211757.0,"EndTime":211757.0,"X":381.0,"Y":194.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212045.0,"EndTime":212045.0,"X":275.428528,"Y":97.02175,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212162.0,"Objects":[{"StartTime":212162.0,"EndTime":212162.0,"X":233.44014,"Y":157.44014}]},{"StartTime":212243.0,"Objects":[{"StartTime":212243.0,"EndTime":212243.0,"X":237.0,"Y":161.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212288.0,"EndTime":212288.0,"X":284.574951,"Y":174.99263,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212405.0,"Objects":[{"StartTime":212405.0,"EndTime":212405.0,"X":422.0,"Y":292.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212450.0,"EndTime":212450.0,"X":374.446442,"Y":306.065125,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212568.0,"Objects":[{"StartTime":212568.0,"EndTime":212568.0,"X":451.0,"Y":128.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212613.0,"EndTime":212613.0,"X":458.834747,"Y":176.967178,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212730.0,"Objects":[{"StartTime":212730.0,"EndTime":212730.0,"X":263.0,"Y":324.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212775.0,"EndTime":212775.0,"X":272.138855,"Y":275.259369,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212892.0,"Objects":[{"StartTime":212892.0,"EndTime":212892.0,"X":455.0,"Y":384.0}]},{"StartTime":213054.0,"Objects":[{"StartTime":213054.0,"EndTime":213054.0,"X":422.0,"Y":292.0}]},{"StartTime":213216.0,"Objects":[{"StartTime":213216.0,"EndTime":213216.0,"X":321.0,"Y":384.0}]},{"StartTime":213378.0,"Objects":[{"StartTime":213378.0,"EndTime":213378.0,"X":378.0,"Y":188.0}]},{"StartTime":213541.0,"Objects":[{"StartTime":213541.0,"EndTime":213541.0,"X":194.0,"Y":379.0}]},{"StartTime":213703.0,"Objects":[{"StartTime":213703.0,"EndTime":213703.0,"X":130.0,"Y":108.0}]},{"StartTime":213865.0,"Objects":[{"StartTime":213865.0,"EndTime":213865.0,"X":341.0,"Y":272.0}]},{"StartTime":214027.0,"Objects":[{"StartTime":214027.0,"EndTime":214027.0,"X":63.0,"Y":384.0}]},{"StartTime":214189.0,"Objects":[{"StartTime":214189.0,"EndTime":214189.0,"X":243.0,"Y":34.0}]},{"StartTime":214351.0,"Objects":[{"StartTime":214351.0,"EndTime":214351.0,"X":321.0,"Y":384.0}]},{"StartTime":215162.0,"Objects":[{"StartTime":215162.0,"EndTime":215162.0,"X":15.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215369.0,"EndTime":215369.0,"X":94.9599457,"Y":184.9499,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215487.0,"Objects":[{"StartTime":215487.0,"EndTime":215487.0,"X":172.0,"Y":178.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215775.0,"EndTime":215775.0,"X":352.33728,"Y":238.509,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215973.0,"Objects":[{"StartTime":215973.0,"EndTime":215973.0,"X":233.0,"Y":321.0}]},{"StartTime":216135.0,"Objects":[{"StartTime":216135.0,"EndTime":216135.0,"X":406.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":216261.0,"EndTime":216261.0,"X":429.166473,"Y":265.959167,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":216460.0,"Objects":[{"StartTime":216460.0,"EndTime":216460.0,"X":261.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":216667.0,"EndTime":216667.0,"X":384.301575,"Y":70.8233643,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":216784.0,"Objects":[{"StartTime":216784.0,"EndTime":216784.0,"X":461.0,"Y":67.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":217072.0,"EndTime":217072.0,"X":285.659058,"Y":-0.6762123,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":217270.0,"Objects":[{"StartTime":217270.0,"EndTime":217270.0,"X":406.0,"Y":180.0}]},{"StartTime":217432.0,"Objects":[{"StartTime":217432.0,"EndTime":217432.0,"X":277.0,"Y":7.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":217558.0,"EndTime":217558.0,"X":180.3599,"Y":29.3015652,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":217757.0,"Objects":[{"StartTime":217757.0,"EndTime":217757.0,"X":23.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":217964.0,"EndTime":217964.0,"X":148.637451,"Y":187.654114,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":218081.0,"Objects":[{"StartTime":218081.0,"EndTime":218081.0,"X":231.0,"Y":234.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":218369.0,"EndTime":218369.0,"X":104.144432,"Y":308.3843,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":218568.0,"Objects":[{"StartTime":218568.0,"EndTime":218568.0,"X":278.0,"Y":165.0}]},{"StartTime":218730.0,"Objects":[{"StartTime":218730.0,"EndTime":218730.0,"X":348.0,"Y":279.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":218856.0,"EndTime":218856.0,"X":436.208221,"Y":306.333,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":219054.0,"Objects":[{"StartTime":219054.0,"EndTime":219054.0,"X":299.0,"Y":68.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219180.0,"EndTime":219180.0,"X":277.9312,"Y":164.916351,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":219378.0,"Objects":[{"StartTime":219378.0,"EndTime":219378.0,"X":376.0,"Y":7.0}]},{"StartTime":219541.0,"Objects":[{"StartTime":219541.0,"EndTime":219541.0,"X":204.0,"Y":94.0}]},{"StartTime":219703.0,"Objects":[{"StartTime":219703.0,"EndTime":219703.0,"X":361.0,"Y":202.0}]},{"StartTime":219865.0,"Objects":[{"StartTime":219865.0,"EndTime":219865.0,"X":185.0,"Y":326.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219991.0,"EndTime":219991.0,"X":205.094421,"Y":228.876953,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":220189.0,"Objects":[{"StartTime":220189.0,"EndTime":220189.0,"X":389.0,"Y":313.0}]},{"StartTime":220271.0,"Objects":[{"StartTime":220271.0,"EndTime":220271.0,"X":388.0,"Y":356.0}]},{"StartTime":220352.0,"Objects":[{"StartTime":220352.0,"EndTime":220352.0,"X":354.0,"Y":384.0}]},{"StartTime":220433.0,"Objects":[{"StartTime":220433.0,"EndTime":220433.0,"X":313.0,"Y":384.0}]},{"StartTime":220514.0,"Objects":[{"StartTime":220514.0,"EndTime":220514.0,"X":285.0,"Y":353.0}]},{"StartTime":220676.0,"Objects":[{"StartTime":220676.0,"EndTime":220676.0,"X":205.0,"Y":228.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":220964.0,"EndTime":220964.0,"X":45.86247,"Y":183.3497,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":221162.0,"Objects":[{"StartTime":221162.0,"EndTime":221162.0,"X":202.0,"Y":91.0}]},{"StartTime":221324.0,"Objects":[{"StartTime":221324.0,"EndTime":221324.0,"X":44.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":221450.0,"EndTime":221450.0,"X":131.2635,"Y":30.0638027,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":221649.0,"Objects":[{"StartTime":221649.0,"EndTime":221649.0,"X":45.0,"Y":183.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":221775.0,"EndTime":221775.0,"X":25.2771187,"Y":280.18396,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":221892.0,"Objects":[{"StartTime":221892.0,"EndTime":221892.0,"X":74.44014,"Y":329.440155}]},{"StartTime":221973.0,"Objects":[{"StartTime":221973.0,"EndTime":221973.0,"X":78.0,"Y":333.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":222180.0,"EndTime":222180.0,"X":218.276413,"Y":372.293671,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":222297.0,"Objects":[{"StartTime":222297.0,"EndTime":222297.0,"X":285.0,"Y":341.0}]},{"StartTime":222460.0,"Objects":[{"StartTime":222460.0,"EndTime":222460.0,"X":184.0,"Y":211.0}]},{"StartTime":222622.0,"Objects":[{"StartTime":222622.0,"EndTime":222622.0,"X":306.440155,"Y":160.44014}]},{"StartTime":222784.0,"Objects":[{"StartTime":222784.0,"EndTime":222784.0,"X":163.0,"Y":325.0}]},{"StartTime":222946.0,"Objects":[{"StartTime":222946.0,"EndTime":222946.0,"X":310.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":223072.0,"EndTime":223072.0,"X":322.5219,"Y":65.61365,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":223189.0,"Objects":[{"StartTime":223189.0,"EndTime":223189.0,"X":264.440155,"Y":9.440141}]},{"StartTime":223270.0,"Objects":[{"StartTime":223270.0,"EndTime":223270.0,"X":268.0,"Y":13.0}]},{"StartTime":223432.0,"Objects":[{"StartTime":223432.0,"EndTime":223432.0,"X":406.0,"Y":106.0}]},{"StartTime":223595.0,"Objects":[{"StartTime":223595.0,"EndTime":223595.0,"X":184.0,"Y":211.0}]},{"StartTime":223757.0,"Objects":[{"StartTime":223757.0,"EndTime":223757.0,"X":292.0,"Y":88.0}]},{"StartTime":223919.0,"Objects":[{"StartTime":223919.0,"EndTime":223919.0,"X":361.0,"Y":307.0}]},{"StartTime":224081.0,"Objects":[{"StartTime":224081.0,"EndTime":224081.0,"X":206.88028,"Y":111.88028}]},{"StartTime":224162.0,"Objects":[{"StartTime":224162.0,"EndTime":224162.0,"X":210.44014,"Y":115.44014}]},{"StartTime":224243.0,"Objects":[{"StartTime":224243.0,"EndTime":224243.0,"X":214.0,"Y":119.0}]},{"StartTime":224405.0,"Objects":[{"StartTime":224405.0,"EndTime":224405.0,"X":125.44014,"Y":286.440155}]},{"StartTime":224730.0,"Objects":[{"StartTime":224730.0,"EndTime":224730.0,"X":129.0,"Y":290.0}]},{"StartTime":224892.0,"Objects":[{"StartTime":224892.0,"EndTime":224892.0,"X":86.0,"Y":152.0}]},{"StartTime":225054.0,"Objects":[{"StartTime":225054.0,"EndTime":225054.0,"X":155.0,"Y":177.0}]},{"StartTime":225216.0,"Objects":[{"StartTime":225216.0,"EndTime":225216.0,"X":31.0,"Y":270.0}]},{"StartTime":225378.0,"Objects":[{"StartTime":225378.0,"EndTime":225378.0,"X":186.0,"Y":353.0}]},{"StartTime":225541.0,"Objects":[{"StartTime":225541.0,"EndTime":225541.0,"X":112.0,"Y":377.0}]},{"StartTime":225865.0,"Objects":[{"StartTime":225865.0,"EndTime":225865.0,"X":410.0,"Y":158.0}]},{"StartTime":226027.0,"Objects":[{"StartTime":226027.0,"EndTime":226027.0,"X":350.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":226153.0,"EndTime":226153.0,"X":358.2194,"Y":258.07,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":226351.0,"Objects":[{"StartTime":226351.0,"EndTime":226351.0,"X":193.0,"Y":83.0}]},{"StartTime":226514.0,"Objects":[{"StartTime":226514.0,"EndTime":226514.0,"X":246.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":226640.0,"EndTime":226640.0,"X":235.239471,"Y":190.630341,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":226838.0,"Objects":[{"StartTime":226838.0,"EndTime":226838.0,"X":394.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":226964.0,"EndTime":226964.0,"X":340.226776,"Y":39.44654,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":227162.0,"Objects":[{"StartTime":227162.0,"EndTime":227162.0,"X":269.0,"Y":59.0}]},{"StartTime":227324.0,"Objects":[{"StartTime":227324.0,"EndTime":227324.0,"X":109.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":227450.0,"EndTime":227450.0,"X":162.537659,"Y":168.296478,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":227649.0,"Objects":[{"StartTime":227649.0,"EndTime":227649.0,"X":235.0,"Y":190.0}]},{"StartTime":227811.0,"Objects":[{"StartTime":227811.0,"EndTime":227811.0,"X":107.0,"Y":348.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":227973.0,"EndTime":227973.0,"X":98.98543,"Y":292.899841,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":228099.0,"EndTime":228099.0,"X":107.0,"Y":348.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":228297.0,"Objects":[{"StartTime":228297.0,"EndTime":228297.0,"X":176.0,"Y":384.0}]},{"StartTime":228460.0,"Objects":[{"StartTime":228460.0,"EndTime":228460.0,"X":321.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":228586.0,"EndTime":228586.0,"X":330.4079,"Y":252.12056,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":228784.0,"Objects":[{"StartTime":228784.0,"EndTime":228784.0,"X":271.0,"Y":203.0}]},{"StartTime":228946.0,"Objects":[{"StartTime":228946.0,"EndTime":228946.0,"X":437.0,"Y":70.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":229072.0,"EndTime":229072.0,"X":444.753723,"Y":125.137482,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":229270.0,"Objects":[{"StartTime":229270.0,"EndTime":229270.0,"X":394.0,"Y":174.0}]},{"StartTime":229432.0,"Objects":[{"StartTime":229432.0,"EndTime":229432.0,"X":291.0,"Y":42.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":229558.0,"EndTime":229558.0,"X":238.1773,"Y":24.3924389,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":229757.0,"Objects":[{"StartTime":229757.0,"EndTime":229757.0,"X":288.0,"Y":119.0}]},{"StartTime":229919.0,"Objects":[{"StartTime":229919.0,"EndTime":229919.0,"X":150.0,"Y":209.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230081.0,"EndTime":230081.0,"X":204.107239,"Y":195.859665,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230207.0,"EndTime":230207.0,"X":150.0,"Y":209.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":230405.0,"Objects":[{"StartTime":230405.0,"EndTime":230405.0,"X":88.0,"Y":167.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230531.0,"EndTime":230531.0,"X":98.91975,"Y":112.401268,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":230730.0,"Objects":[{"StartTime":230730.0,"EndTime":230730.0,"X":274.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230838.0,"EndTime":230838.0,"X":279.0154,"Y":321.7796,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230910.0,"EndTime":230910.0,"X":274.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":231054.0,"Objects":[{"StartTime":231054.0,"EndTime":231054.0,"X":314.0,"Y":217.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":231342.0,"EndTime":231342.0,"X":406.0158,"Y":249.631241,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":231541.0,"Objects":[{"StartTime":231541.0,"EndTime":231541.0,"X":512.0,"Y":130.0}]},{"StartTime":231703.0,"Objects":[{"StartTime":231703.0,"EndTime":231703.0,"X":452.0,"Y":88.0}]},{"StartTime":231865.0,"Objects":[{"StartTime":231865.0,"EndTime":231865.0,"X":406.0,"Y":143.0}]},{"StartTime":232027.0,"Objects":[{"StartTime":232027.0,"EndTime":232027.0,"X":280.0,"Y":54.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":232153.0,"EndTime":232153.0,"X":289.960327,"Y":-0.7818756,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":232351.0,"Objects":[{"StartTime":232351.0,"EndTime":232351.0,"X":348.0,"Y":89.0}]},{"StartTime":232514.0,"Objects":[{"StartTime":232514.0,"EndTime":232514.0,"X":186.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":232640.0,"EndTime":232640.0,"X":179.09375,"Y":119.749969,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":232838.0,"Objects":[{"StartTime":232838.0,"EndTime":232838.0,"X":120.0,"Y":222.0}]},{"StartTime":233000.0,"Objects":[{"StartTime":233000.0,"EndTime":233000.0,"X":224.0,"Y":364.0}]},{"StartTime":233162.0,"Objects":[{"StartTime":233162.0,"EndTime":233162.0,"X":157.0,"Y":342.0}]},{"StartTime":233324.0,"Objects":[{"StartTime":233324.0,"EndTime":233324.0,"X":293.0,"Y":248.0}]},{"StartTime":233487.0,"Objects":[{"StartTime":233487.0,"EndTime":233487.0,"X":384.0,"Y":221.0}]}]}
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923.osu b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923.osu
new file mode 100644
index 000000000000..49ac05b253f8
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/2593923.osu
@@ -0,0 +1,1213 @@
+osu file format v14
+
+[General]
+AudioLeadIn: 0
+PreviewTime: 175189
+Countdown: 0
+SampleSet: Soft
+StackLeniency: 0.9
+Mode: 0
+LetterboxInBreaks: 0
+WidescreenStoryboard: 1
+
+[Difficulty]
+HPDrainRate:6
+CircleSize:4.2
+OverallDifficulty:8.7
+ApproachRate:9.4
+SliderMultiplier:1.74
+SliderTickRate:1
+
+[Events]
+//Background and Video events
+//Break Periods
+2,178065,182352
+//Storyboard Layer 0 (Background)
+//Storyboard Layer 1 (Fail)
+//Storyboard Layer 2 (Pass)
+//Storyboard Layer 3 (Foreground)
+//Storyboard Layer 4 (Overlay)
+//Storyboard Sound Samples
+
+[TimingPoints]
+1433,324.324324324324,4,2,4,54,1,0
+1433,-135.135135135135,4,2,4,54,0,0
+6622,-135.135135135135,4,2,4,64,0,0
+10514,-135.135135135135,4,2,4,74,0,0
+11487,-227.272727272727,4,2,4,74,0,0
+11811,-87.719298245614,4,2,4,84,0,0
+21216,-135.135135135135,4,2,7,54,0,0
+22189,-135.135135135135,4,2,4,64,0,0
+32243,-69.4444444444444,4,2,4,74,0,0
+32568,-106.382978723404,4,2,4,74,0,0
+40676,-80.6451612903224,4,2,4,74,0,0
+43270,-156.25,4,2,4,74,0,0
+44081,-80.6451612903226,4,2,4,74,0,0
+45865,-156.25,4,2,4,74,0,0
+46676,-80.6451612903226,4,2,4,74,0,0
+48135,-119.047619047619,4,2,4,74,0,0
+56730,-80.6451612903226,4,2,4,74,0,0
+57865,-80.6451612903226,4,2,4,74,0,0
+58189,-227.272727272727,4,2,4,94,0,1
+58514,-87.719298245614,4,2,4,84,0,0
+68892,-87.719298245614,4,2,4,84,0,1
+74081,-119.047619047619,4,2,4,74,0,0
+76676,-87.719298245614,4,2,4,74,0,0
+81541,-69.4444444444444,4,2,4,74,0,0
+81865,-119.047619047619,4,2,4,74,0,0
+85757,-87.719298245614,4,2,4,74,0,0
+89324,-156.25,4,2,4,74,0,0
+92243,-119.047619047619,4,2,7,64,0,0
+96784,-119.047619047619,4,2,4,74,0,0
+100027,-96.1538461538461,4,2,4,74,0,0
+102297,-69.4444444444444,4,2,4,74,0,0
+102621,-106.382978723404,4,2,4,74,0,0
+110730,-80.6451612903224,4,2,4,74,0,0
+113324,-156.25,4,2,4,74,0,0
+114135,-80.6451612903226,4,2,4,74,0,0
+115919,-156.25,4,2,4,74,0,0
+116730,-80.6451612903226,4,2,4,74,0,0
+118189,-119.047619047619,4,2,4,74,0,0
+123378,-96.1538461538461,4,2,4,74,0,0
+126784,-80.6451612903226,4,2,4,74,0,0
+128243,-64.9350649350649,4,2,4,74,0,0
+128568,-80.6451612903226,4,2,4,90,0,1
+146730,-119.047619047619,4,2,4,80,0,0
+159703,-87.719298245614,4,2,4,80,0,0
+173973,-87.719298245614,4,2,4,90,0,0
+175270,-87.719298245614,4,2,4,84,0,0
+176081,-87.719298245614,4,2,4,84,0,0
+176405,-74.6268656716418,4,2,4,84,0,0
+177541,-227.272727272727,4,2,4,84,0,1
+177865,-227.272727272727,4,2,4,84,0,0
+182892,-227.272727272727,4,2,4,64,0,0
+183054,-156.25,4,2,4,64,0,0
+185649,-119.047619047619,4,2,4,74,0,0
+190838,-156.25,4,2,4,74,0,0
+191487,-74.6268656716418,4,2,4,90,0,1
+192135,-87.719298245614,4,2,4,84,0,0
+202514,-87.719298245614,4,2,4,84,0,1
+207703,-119.047619047619,4,2,4,74,0,0
+210297,-87.719298245614,4,2,4,74,0,0
+215162,-74.6268656716418,4,2,4,74,0,0
+215487,-87.719298245614,4,2,4,74,0,0
+224892,-156.25,4,2,4,54,0,0
+
+
+[Colours]
+Combo1 : 89,244,183
+Combo2 : 249,188,87
+Combo3 : 108,197,249
+Combo4 : 197,137,137
+
+[HitObjects]
+493,304,1433,6,0,L|482:368,2,64.3800015717774,2|0|0,0:0|0:0|0:0,0:0:0:0:
+442,244,1919,2,0,L|430:168,2,64.3800015717774,2|0|0,0:0|0:0|0:0,0:0:0:0:
+394,304,2405,6,0,P|366:322|324:321,1,64.3800015717774,2|0,0:0|0:0,0:0:0:0:
+277,272,2730,1,0,0:0:0:0:
+183,169,2892,6,0,L|198:89,1,64.3800015717774,2|0,0:0|0:0,0:0:0:0:
+257,66,3216,1,0,0:0:0:0:
+178,178,3378,6,0,B|132:188|132:188|113:212|113:212|43:228,1,128.760003143555,2|2,0:0|0:0,0:0:0:0:
+196,303,3865,1,0,3:2:0:0:
+53,214,4027,6,0,P|125:192|187:285,2,193.140004715332,2|0|8,3:2|3:2|0:1,0:0:0:0:
+194,105,5162,1,2,3:2:0:0:
+31,0,5324,6,0,P|70:46|150:31,1,128.760003143555,2|0,3:2|0:0,0:0:0:0:
+257,153,5811,1,0,3:2:0:0:
+311,30,5973,5,8,0:0:0:0:
+146,171,6135,1,0,3:2:0:0:
+320,103,6297,5,8,3:0:0:0:
+428,231,6460,1,8,3:0:0:0:
+469,166,6622,6,0,P|421:150|328:258,1,193.140004715332,6|0,3:2|3:2,0:0:0:0:
+234,379,7270,2,0,P|265:368|303:360,1,64.3800015717774,8|0,0:0|0:0,0:0:0:0:
+155,291,7595,1,0,0:0:0:0:
+334,244,7757,1,8,0:1:0:0:
+334,244,7838,1,8,0:1:0:0:
+334,244,7919,6,0,B|225:226|252:311|145:289,1,193.140004715332,2|0,3:2|0:0,0:0:0:0:
+43,93,8568,1,8,0:0:0:0:
+213,180,8730,1,0,3:2:0:0:
+50,278,8892,1,8,3:1:0:0:
+179,92,9054,1,0,3:2:0:0:
+302,322,9216,5,4,3:2:0:0:
+302,322,9541,5,10,0:1:0:0:
+213,180,9703,1,8,0:1:0:0:
+156,290,9865,5,8,0:1:0:0:
+276,88,10027,1,8,0:1:0:0:
+370,237,10189,5,8,0:0:0:0:
+179,92,10351,1,8,0:0:0:0:
+327,10,10514,5,10,0:0:0:0:
+239,267,10676,1,8,0:0:0:0:
+92,0,10838,5,8,0:0:0:0:
+360,142,11000,1,8,0:0:0:0:
+17,198,11162,5,4,3:2:0:0:
+327,10,11324,1,8,0:0:0:0:
+213,180,11487,6,0,P|204:155|207:111,1,57.4200017523194,6|0,0:2|0:0,0:0:0:0:
+179,92,11811,6,0,B|283:67|257:165|365:142,1,198.359997578613,4|8,3:1|0:0,0:0:0:0:
+161,247,12297,1,2,0:0:0:0:
+333,351,12460,2,0,P|285:369|230:378,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+359,234,12784,2,0,P|429:226|480:284,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+478,279,13108,6,0,P|469:327|466:383,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+262,177,13432,2,0,P|271:226|278:302,1,99.1799987893067,8|0,0:0|0:0,0:0:0:0:
+462,114,13757,1,0,3:2:0:0:
+330,16,13919,1,0,3:2:0:0:
+424,194,14081,1,8,0:0:0:0:
+500,26,14243,1,2,0:0:0:0:
+500,26,14324,1,2,0:0:0:0:
+500,26,14405,6,0,B|448:7|406:42|406:42|379:102|315:90,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+194,239,14892,1,2,0:0:0:0:
+145,179,15054,2,0,P|157:127|163:69,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+334,205,15378,2,0,P|340:274|354:364,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+280,384,15703,5,2,3:2:0:0:
+428,267,15865,1,2,0:0:0:0:
+267,152,16027,1,10,0:0:0:0:
+435,350,16189,1,2,0:2:0:0:
+512,117,16351,1,4,3:2:0:0:
+317,254,16514,5,8,0:0:0:0:
+274,268,16595,1,8,0:0:0:0:
+231,240,16676,1,8,0:0:0:0:
+225,184,16757,1,8,0:0:0:0:
+267,152,16838,2,0,L|331:173,1,49.5899993946533,0|0,3:2|0:0,0:0:0:0:
+163,356,17000,6,0,B|69:319|69:319|40:257|100:230,1,198.359997578613,6|8,3:2|0:0,0:0:0:0:
+267,152,17487,1,2,0:0:0:0:
+133,23,17649,2,0,L|152:133,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+355,312,17973,2,0,B|385:297|413:289|413:289|398:248|385:191,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+345,146,18297,6,0,B|235:134|269:232|151:208,1,198.359997578613,2|8,3:2|0:0,0:0:0:0:
+381,76,18784,1,0,0:0:0:0:
+234,23,18946,5,0,3:2:0:0:
+316,229,19108,1,0,3:2:0:0:
+456,47,19270,5,8,0:0:0:0:
+243,135,19432,1,8,0:1:0:0:
+247,124,19514,1,8,0:1:0:0:
+252,115,19595,6,0,B|285:125|285:125|294:133|294:133|359:149,1,99.1799987893067,6|2,3:2|0:0,0:0:0:0:
+477,348,19919,1,10,0:0:0:0:
+316,229,20081,1,2,0:0:0:0:
+490,131,20243,5,10,0:0:0:0:
+350,315,20405,1,0,3:2:0:0:
+331,326,20487,1,0,3:2:0:0:
+307,324,20568,1,0,3:2:0:0:
+153,176,20730,1,2,3:2:0:0:
+153,176,21054,5,2,0:0:0:0:
+216,241,21216,2,0,P|202:299|195:379,1,128.760003143555,0|2,3:0|0:0,0:0:0:0:
+69,222,21703,2,0,P|77:255|82:301,1,64.3800015717774,0|0,3:0|0:0,0:0:0:0:
+109,82,22189,6,0,P|71:40|-4:55,2,128.760003143555,4|2|2,3:2|3:2|3:2,0:0:0:0:
+172,127,23000,1,0,0:1:0:0:
+277,0,23162,1,0,3:2:0:0:
+209,33,23324,1,2,0:0:0:0:
+330,148,23487,5,2,3:2:0:0:
+379,92,23649,2,0,P|368:62|360:23,1,64.3800015717774,2|0,0:0|3:2,0:0:0:0:
+230,185,23973,2,0,P|222:250|210:320,1,128.760003143555,2|0,0:0|0:0,0:0:0:0:
+57,132,24460,2,0,P|64:163|68:201,1,64.3800015717774,2|0,3:2|0:0,0:0:0:0:
+0,365,24784,6,0,P|39:322|114:339,1,128.760003143555,4|2,3:2|3:2,0:0:0:0:
+352,146,25432,2,0,P|291:169|226:185,1,128.760003143555,2|0,3:2|3:2,0:0:0:0:
+346,306,25919,1,2,0:0:0:0:
+283,346,26081,5,2,3:2:0:0:
+352,229,26243,2,0,P|382:243|424:253,1,64.3800015717774,2|0,0:0|3:2,0:0:0:0:
+257,75,26568,2,0,P|215:127|234:188,1,128.760003143555,2|0,0:0|0:0,0:0:0:0:
+401,73,27054,2,0,L|387:-4,1,64.3800015717774,10|2,0:1|0:0,0:0:0:0:
+486,170,27378,5,12,0:0:0:0:
+299,75,27541,1,8,0:1:0:0:
+299,75,27622,1,8,0:1:0:0:
+299,75,27703,1,8,0:1:0:0:
+352,229,27865,5,8,0:0:0:0:
+488,91,28027,1,8,0:1:0:0:
+488,91,28108,1,8,0:1:0:0:
+488,91,28189,1,8,0:1:0:0:
+302,157,28351,5,10,0:0:0:0:
+492,249,28514,1,2,0:0:0:0:
+249,350,28676,5,8,3:2:0:0:
+359,238,28838,1,8,0:1:0:0:
+359,238,28919,1,8,0:1:0:0:
+359,238,29000,1,8,0:1:0:0:
+399,383,29162,5,2,3:2:0:0:
+224,247,29324,1,8,0:1:0:0:
+224,247,29405,1,8,0:1:0:0:
+224,247,29487,1,8,0:1:0:0:
+370,257,29649,5,0,3:2:0:0:
+159,384,29811,1,2,0:0:0:0:
+329,329,29973,5,8,0:0:0:0:
+217,278,30135,1,2,0:0:0:0:
+254,376,30297,5,0,3:2:0:0:
+340,232,30460,1,0,3:2:0:0:
+176,159,30622,5,8,0:0:0:0:
+329,329,30784,1,8,0:0:0:0:
+124,235,30946,5,8,0:0:0:0:
+390,102,31108,1,8,0:0:0:0:
+254,376,31270,5,4,3:2:0:0:
+176,36,31432,1,0,3:2:0:0:
+11,207,32081,5,10,0:1:0:0:
+9,195,32162,1,10,0:1:0:0:
+12,183,32243,2,0,B|48:137|107:154|107:154|127:207|190:209,1,187.920004587891,10|0,0:0|0:0,0:0:0:0:
+230,258,32568,6,0,L|245:364,1,81.7799987521363,4|0,3:2|0:0,0:0:0:0:
+412,228,32892,2,0,L|429:140,1,81.7799987521363,10|0,0:0|0:0,0:0:0:0:
+289,55,33216,1,2,3:2:0:0:
+307,126,33378,1,0,3:2:0:0:
+420,29,33541,1,8,0:0:0:0:
+356,0,33703,1,2,0:0:0:0:
+228,103,33865,5,2,3:2:0:0:
+169,156,34027,2,0,P|127:162|82:177,1,81.7799987521363,2|8,0:0|0:0,0:0:0:0:
+225,321,34351,2,0,P|277:362|346:354,1,122.669998128204,2|0,3:2|0:0,0:0:0:0:
+394,318,34676,1,0,3:2:0:0:
+456,156,34838,1,10,0:0:0:0:
+387,182,35000,1,0,0:0:0:0:
+491,363,35162,6,0,P|499:323|500:275,1,81.7799987521363,4|0,3:2|0:0,0:0:0:0:
+302,149,35487,2,0,P|304:187|316:237,1,81.7799987521363,8|0,0:0|0:0,0:0:0:0:
+456,63,35811,1,0,3:2:0:0:
+386,37,35973,1,0,3:2:0:0:
+456,156,36135,1,8,0:0:0:0:
+387,182,36297,1,2,0:0:0:0:
+456,63,36460,5,2,3:2:0:0:
+302,149,36622,2,0,P|259:145|225:106,1,81.7799987521363,2|8,0:0|0:0,0:0:0:0:
+127,34,36946,2,0,P|113:108|104:216,1,163.559997504273,2|0,3:2|3:2,0:0:0:0:
+229,33,37432,1,10,0:0:0:0:
+0,156,37595,1,8,0:0:0:0:
+0,156,37676,1,8,0:0:0:0:
+0,156,37757,6,0,B|91:134|91:134|126:164|101:204,1,163.559997504273,4|8,3:2|0:0,0:0:0:0:
+223,324,38243,2,0,P|186:309|134:297,1,81.7799987521363,0|0,0:0|3:2,0:0:0:0:
+261,217,38568,1,0,3:2:0:0:
+105,196,38730,5,8,0:0:0:0:
+159,384,38892,1,2,0:0:0:0:
+57,263,39054,6,0,P|52:304|43:350,1,81.7799987521363,0|0,3:2|0:0,0:0:0:0:
+185,183,39378,1,8,0:0:0:0:
+344,308,39541,2,0,P|330:225|327:135,1,163.559997504273,0|2,3:2|3:2,0:0:0:0:
+223,324,40027,5,8,0:0:0:0:
+436,193,40189,1,2,0:0:0:0:
+244,93,40351,5,2,3:2:0:0:
+421,288,40514,1,2,0:0:0:0:
+421,288,40595,1,2,0:0:0:0:
+421,288,40676,6,0,B|325:252|325:252|344:278|344:320,1,161.819993580139,14|0,0:0|0:0,0:0:0:0:
+103,145,41000,6,0,B|230:105|230:105|190:141|202:192,1,215.759991440186,12|8,0:0|0:0,0:0:0:0:
+418,20,41487,1,8,0:1:0:0:
+418,20,41568,1,8,0:1:0:0:
+418,20,41649,6,0,B|339:0|339:0|284:35|326:76,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+375,116,41973,1,8,0:0:0:0:
+181,32,42135,6,0,B|144:24|144:24|132:11|132:11|67:-3,1,107.879995720093,4|8,3:2|0:1,0:0:0:0:
+280,169,42460,1,0,3:2:0:0:
+78,332,42622,6,0,B|53:248|53:248|139:221,1,161.819993580139,12|0,0:0|0:0,0:0:0:0:
+189,264,42946,6,0,L|260:287,1,53.9399978600465,4|0,3:2|0:0,0:0:0:0:
+381,384,43108,1,8,0:0:0:0:
+444,339,43270,6,0,L|459:266,1,55.68,2|0,0:0|0:0,0:0:0:0:
+280,169,43595,1,2,3:2:0:0:
+401,169,43757,5,8,3:0:0:0:
+240,280,43919,1,8,3:0:0:0:
+401,169,44081,6,0,B|423:68|423:68|384:16|321:42,1,215.759991440186,6|2,3:2|3:2,0:0:0:0:
+455,284,44568,1,10,0:0:0:0:
+280,169,44730,1,0,3:2:0:0:
+446,58,44892,1,8,0:0:0:0:
+321,245,45054,1,0,3:2:0:0:
+321,245,45135,1,0,3:2:0:0:
+321,245,45216,5,8,0:2:0:0:
+224,19,45378,1,0,3:2:0:0:
+401,169,45541,5,4,3:2:0:0:
+144,285,45703,1,8,3:2:0:0:
+98,221,45865,6,0,L|110:160,1,55.68,2|8,0:0|3:0,0:0:0:0:
+127,95,46108,1,8,3:0:0:0:
+130,81,46189,1,2,3:2:0:0:
+0,173,46351,1,0,3:2:0:0:
+133,68,46514,5,8,0:0:0:0:
+273,240,46676,2,0,P|228:294|130:271,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+98,221,47000,1,2,3:2:0:0:
+278,94,47162,1,10,0:0:0:0:
+216,52,47324,1,0,3:2:0:0:
+325,319,47487,1,8,0:0:0:0:
+193,209,47649,5,8,0:0:0:0:
+195,195,47730,1,8,0:0:0:0:
+198,180,47811,1,8,0:0:0:0:
+356,70,47973,1,0,3:2:0:0:
+424,119,48135,6,0,L|439:201,1,73.0799977697755,4|8,3:2|0:1,0:0:0:0:
+452,263,48378,1,8,0:1:0:0:
+455,283,48460,1,2,3:2:0:0:
+338,197,48622,1,8,0:1:0:0:
+235,343,48784,2,0,L|253:255,2,73.0799977697755,2|8|10,3:2|0:1|0:0,0:0:0:0:
+56,207,49270,1,8,0:1:0:0:
+56,207,49351,1,8,0:1:0:0:
+56,207,49432,6,0,L|150:187,1,73.0799977697755,0|8,3:2|0:1,0:0:0:0:
+198,180,49676,1,8,0:1:0:0:
+222,175,49757,1,2,3:2:0:0:
+344,84,49919,1,8,0:1:0:0:
+239,6,50081,2,0,L|252:97,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+385,177,50405,1,10,0:0:0:0:
+473,75,50568,1,8,0:1:0:0:
+473,75,50649,1,8,0:1:0:0:
+473,75,50730,6,0,L|462:171,1,73.0799977697755,0|8,3:2|0:1,0:0:0:0:
+453,220,50973,1,8,0:1:0:0:
+451,236,51054,1,2,3:2:0:0:
+321,132,51216,1,8,0:1:0:0:
+218,280,51378,2,0,L|294:262,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+198,180,51703,1,10,0:0:0:0:
+297,272,51865,1,8,0:1:0:0:
+297,272,51946,1,8,0:1:0:0:
+297,272,52027,6,0,L|284:367,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+227,384,52270,1,8,0:1:0:0:
+227,384,52351,1,0,3:2:0:0:
+63,242,52514,1,10,0:0:0:0:
+63,242,52595,1,8,0:1:0:0:
+63,242,52676,5,8,3:1:0:0:
+91,196,52757,1,8,0:1:0:0:
+138,186,52838,1,8,0:1:0:0:
+186,209,52919,1,8,0:1:0:0:
+187,230,53000,5,10,3:2:0:0:
+234,278,53081,1,8,0:0:0:0:
+297,272,53162,1,8,0:0:0:0:
+330,217,53243,1,8,0:0:0:0:
+295,161,53324,5,4,3:2:0:0:
+295,161,53649,5,2,3:2:0:0:
+401,308,53811,1,2,0:0:0:0:
+187,230,53973,5,10,3:1:0:0:
+383,113,54135,1,8,0:1:0:0:
+268,345,54297,5,8,0:0:0:0:
+181,103,54460,1,8,0:1:0:0:
+353,192,54622,5,8,0:0:0:0:
+125,325,54784,1,8,0:0:0:0:
+253,53,54946,5,8,0:0:0:0:
+349,356,55108,1,8,0:0:0:0:
+107,207,55270,5,8,3:2:0:0:
+408,39,55432,1,8,0:0:0:0:
+93,84,55595,5,8,0:0:0:0:
+434,284,55757,1,8,0:0:0:0:
+189,384,55919,5,8,0:2:0:0:
+261,22,56081,1,6,3:2:0:0:
+261,22,56730,5,2,3:2:0:0:
+349,270,56892,1,8,0:0:0:0:
+403,210,57054,6,0,P|363:166|254:178,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+192,141,57378,1,0,3:2:0:0:
+0,284,57541,1,8,0:0:0:0:
+94,384,57703,5,2,0:0:0:0:
+11,180,57865,1,10,0:0:0:0:
+11,180,57946,1,8,0:0:0:0:
+11,180,58027,2,0,P|34:192|86:200,1,53.9399978600465,0|0,3:2|0:0,0:0:0:0:
+227,293,58189,6,0,P|204:311|162:313,1,57.4200017523194,4|0,3:2|0:0,0:0:0:0:
+117,261,58514,6,0,B|228:246|185:353|319:334,1,198.359997578613,6|8,3:1|0:0,0:0:0:0:
+403,210,59000,1,2,0:0:0:0:
+512,346,59162,6,0,P|466:323|411:315,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+292,168,59487,1,10,0:0:0:0:
+446,107,59649,1,2,0:0:0:0:
+446,107,59730,1,2,0:0:0:0:
+446,107,59811,6,0,P|388:179|280:158,1,198.359997578613,2|8,3:2|0:0,0:0:0:0:
+117,261,60297,1,0,0:0:0:0:
+38,79,60460,6,0,P|83:98|138:116,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+249,284,60784,1,8,0:0:0:0:
+51,366,60946,1,2,0:0:0:0:
+51,366,61027,1,2,0:0:0:0:
+51,366,61108,6,0,P|1:310|67:211,1,198.359997578613,2|8,3:2|0:0,0:0:0:0:
+189,366,61595,1,2,0:0:0:0:
+197,181,61757,5,2,3:2:0:0:
+25,290,61919,1,0,3:2:0:0:
+130,113,62081,5,10,0:0:0:0:
+255,290,62243,1,2,0:0:0:0:
+255,290,62324,1,2,0:0:0:0:
+255,290,62405,6,0,B|303:301|303:301|326:330|326:330|407:347,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+448,294,62730,1,8,0:0:0:0:
+266,384,62892,1,2,0:0:0:0:
+330,157,63054,5,6,3:2:0:0:
+464,369,63216,1,8,0:0:0:0:
+476,372,63297,1,8,0:1:0:0:
+486,376,63378,1,10,0:1:0:0:
+340,244,63541,5,8,0:0:0:0:
+340,244,63622,1,8,0:0:0:0:
+340,244,63703,2,0,B|236:226|264:317|146:304,1,198.359997578613,6|8,3:2|0:0,0:0:0:0:
+330,157,64189,1,0,0:0:0:0:
+191,35,64351,2,0,P|230:66|292:58,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+114,169,64676,1,8,0:0:0:0:
+276,284,64838,1,2,0:0:0:0:
+191,35,65000,6,0,L|205:148,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+69,328,65324,2,0,B|19:298|19:298|50:214,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+114,169,65649,1,0,3:2:0:0:
+276,284,65811,1,0,3:2:0:0:
+385,136,65973,2,0,P|333:150|277:177,1,99.1799987893067,10|0,0:0|0:0,0:0:0:0:
+426,382,66297,6,0,P|477:343|445:224,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+277,65,66784,1,2,3:2:0:0:
+466,140,66946,5,8,0:0:0:0:
+276,284,67108,1,0,3:2:0:0:
+370,44,67270,5,8,0:0:0:0:
+449,226,67432,1,0,3:2:0:0:
+218,127,67595,6,0,B|138:125|157:176|48:171,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+17,215,67919,1,8,0:0:0:0:
+0,184,68000,1,8,0:0:0:0:
+12,147,68081,1,8,0:0:0:0:
+182,268,68243,1,2,3:2:0:0:
+5,376,68405,1,0,3:2:0:0:
+182,268,68568,6,0,P|242:258|311:316,1,148.76999818396,10|0,0:0|0:0,0:0:0:0:
+352,379,68892,6,0,L|321:176,1,198.359997578613,6|8,3:1|0:0,0:0:0:0:
+452,288,69378,1,0,3:2:0:0:
+236,384,69541,5,8,0:0:0:0:
+428,187,69703,1,0,3:2:0:0:
+449,384,69865,5,10,0:0:0:0:
+237,183,70027,1,2,3:2:0:0:
+237,183,70108,1,2,3:2:0:0:
+237,183,70189,6,0,B|249:103|249:103|281:79|320:113,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+302,117,70514,2,0,B|267:127|267:127|254:140|254:140|186:157,1,99.1799987893067,8|0,0:0|0:0,0:0:0:0:
+335,2,70838,5,8,0:0:0:0:
+436,195,71000,1,0,3:2:0:0:
+436,195,71081,1,0,3:2:0:0:
+436,195,71162,1,8,0:0:0:0:
+311,106,71324,5,0,3:2:0:0:
+224,322,71487,2,0,P|174:336|96:233,1,198.359997578613,6|8,3:2|0:0,0:0:0:0:
+49,175,71973,1,2,0:0:0:0:
+177,84,72135,5,10,0:0:0:0:
+20,260,72297,1,0,3:2:0:0:
+86,94,72460,5,10,0:0:0:0:
+241,246,72622,1,0,3:2:0:0:
+80,332,72784,6,0,L|99:213,1,99.1799987893067,6|2,3:2|0:0,0:0:0:0:
+306,124,73108,1,8,0:0:0:0:
+154,169,73270,5,0,3:2:0:0:
+342,313,73432,1,4,3:2:0:0:
+215,354,73595,5,2,3:2:0:0:
+199,318,73676,1,8,0:0:0:0:
+214,277,73757,1,10,0:0:0:0:
+417,248,73919,5,8,0:0:0:0:
+428,270,74000,1,8,0:0:0:0:
+413,298,74081,2,0,P|375:303|336:315,1,73.0799977697755,6|0,3:2|0:0,0:0:0:0:
+464,175,74405,1,0,0:0:0:0:
+395,145,74568,1,0,3:2:0:0:
+498,35,74730,6,0,L|508:117,1,73.0799977697755,8|2,0:0|0:0,0:0:0:0:
+378,40,75054,1,10,0:1:0:0:
+286,149,75216,1,10,0:1:0:0:
+286,149,75297,1,8,0:1:0:0:
+286,149,75378,6,0,P|293:117|303:57,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+436,241,75703,2,0,P|401:252|363:267,1,73.0799977697755,0|2,3:2|0:0,0:0:0:0:
+241,384,76027,5,8,0:0:0:0:
+464,175,76270,5,2,0:0:0:0:
+210,32,76514,5,2,0:0:0:0:
+280,204,76676,6,0,B|300:87|300:87|276:124|228:132,1,198.359997578613,4|0,3:2|3:2,0:0:0:0:
+367,265,77162,2,0,B|406:255|436:276|436:276|462:321|522:321,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+509,247,77487,1,8,0:0:0:0:
+509,247,77568,1,8,0:0:0:0:
+509,247,77649,6,0,P|497:169|486:81,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+428,51,77973,1,0,3:2:0:0:
+280,204,78135,6,0,P|291:129|298:47,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+353,6,78460,1,10,0:0:0:0:
+175,118,78622,1,10,0:0:0:0:
+367,265,78784,1,8,0:0:0:0:
+301,135,78946,1,0,3:2:0:0:
+139,236,79108,1,8,0:1:0:0:
+139,236,79189,1,8,0:1:0:0:
+139,236,79270,6,0,B|182:250|182:250|203:287|203:287|272:307,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+330,335,79595,1,10,0:1:0:0:
+231,178,79757,1,2,0:0:0:0:
+391,241,79919,5,8,0:0:0:0:
+228,375,80081,1,8,0:1:0:0:
+311,114,80243,5,8,0:0:0:0:
+442,339,80405,1,8,0:0:0:0:
+386,52,80568,5,4,3:2:0:0:
+327,359,80730,1,4,3:2:0:0:
+62,133,81541,6,0,P|114:64|218:88,1,187.920004587891,4|0,3:2|0:0,0:0:0:0:
+256,133,81865,6,0,P|247:169|236:217,1,73.0799977697755,4|0,3:1|0:0,0:0:0:0:
+399,329,82189,2,0,P|394:293|391:236,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+203,313,82514,6,0,P|238:323|279:341,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+406,168,82838,2,0,P|371:178|330:197,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+209,56,83162,6,0,P|268:41|332:111,1,146.159995539551,2|2,3:2|3:2,0:0:0:0:
+239,204,83649,1,2,0:0:0:0:
+328,92,83811,2,0,P|362:82|409:58,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+507,193,84135,2,0,P|472:185|430:164,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+274,337,84460,6,0,B|346:308|346:308|405:324|381:362,1,146.159995539551,4|0,3:2|3:2,0:0:0:0:
+239,204,84946,1,2,0:0:0:0:
+186,260,85108,2,0,L|100:282,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+281,136,85432,2,0,L|365:156,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+161,5,85757,5,6,3:2:0:0:
+239,204,85919,1,2,0:0:0:0:
+273,44,86081,5,10,0:1:0:0:
+124,190,86243,2,0,B|226:178|199:272|321:253,1,198.359997578613,4|0,3:2|3:2,0:0:0:0:
+161,5,86730,1,8,0:0:0:0:
+138,37,86811,1,8,0:1:0:0:
+147,70,86892,1,0,3:2:0:0:
+352,152,87054,6,0,P|421:237|391:332,1,198.359997578613,2|0,3:2|3:2,0:0:0:0:
+239,204,87541,1,0,0:0:0:0:
+183,253,87703,2,0,P|194:300|201:363,1,99.1799987893067,0|0,3:2|0:0,0:0:0:0:
+307,256,88027,1,0,3:2:0:0:
+193,142,88189,5,8,0:0:0:0:
+307,256,88351,2,0,B|201:239|236:343|86:313,1,198.359997578613,2|0,3:2|3:2,0:0:0:0:
+323,165,88838,1,0,0:0:0:0:
+171,32,89000,2,0,P|206:60|274:60,1,99.1799987893067,0|8,3:2|0:0,0:0:0:0:
+166,153,89324,6,0,L|69:176,1,83.52,4|0,3:0|0:0,0:0:0:0:
+54,183,89649,5,4,3:2:0:0:
+282,51,89811,1,2,0:0:0:0:
+153,20,89973,5,10,0:0:0:0:
+339,174,90135,1,0,3:2:0:0:
+126,318,90297,1,0,3:2:0:0:
+238,125,90460,1,0,3:2:0:0:
+242,141,90541,1,0,3:2:0:0:
+244,158,90622,1,0,3:2:0:0:
+338,281,90784,6,0,B|374:293|374:293|388:309|388:309|454:328,1,111.36,4|0,3:2|3:2,0:0:0:0:
+481,138,91270,2,0,L|403:158,1,55.68,8|0,0:0|0:0,0:0:0:0:
+356,170,91514,1,8,3:0:0:0:
+339,174,91595,1,0,3:2:0:0:
+463,235,91757,1,8,3:0:0:0:
+373,95,91919,2,0,P|378:53|392:6,1,83.52,8|0,3:0|0:0,0:0:0:0:
+389,13,92243,6,0,P|354:57|267:49,1,146.159995539551,4|2,1:2|3:2,0:0:0:0:
+126,207,92892,2,0,P|160:196|206:186,1,73.0799977697755,2|0,3:2|0:3,0:3:0:0:
+75,40,93216,2,0,P|111:51|155:59,1,73.0799977697755,2|2,3:2|0:0,0:0:0:0:
+42,128,93541,5,2,1:2:0:0:
+126,207,93703,2,0,L|102:355,1,146.159995539551,2|2,0:0|0:0,0:0:0:0:
+260,235,94189,2,0,L|272:312,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+404,168,94514,1,2,3:2:0:0:
+329,138,94676,1,0,1:2:0:0:
+389,280,94838,6,0,B|467:265|433:222|519:208,1,146.159995539551,2|2,1:2|3:2,0:0:0:0:
+512,209,95487,6,0,P|477:201|434:180,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+306,51,95811,2,0,P|341:45|387:22,1,73.0799977697755,0|2,3:2|1:2,0:0:0:0:
+265,196,96135,5,2,1:2:0:0:
+169,81,96297,2,0,P|202:96|255:108,1,73.0799977697755,2|0,0:0|3:2,0:0:0:0:
+106,191,96622,1,2,1:2:0:0:
+220,333,96784,2,0,L|208:237,2,73.0799977697755,10|0|0,0:0|3:2|3:2,0:0:0:0:
+208,345,97432,5,4,3:2:0:0:
+373,258,97595,1,8,0:1:0:0:
+373,258,97676,1,8,0:1:0:0:
+373,258,97757,1,0,3:2:0:0:
+286,206,97919,5,8,0:0:0:0:
+404,345,98081,1,8,3:1:0:0:
+404,345,98162,1,8,0:1:0:0:
+404,345,98243,1,8,0:1:0:0:
+295,285,98405,5,10,0:0:0:0:
+455,191,98568,1,8,0:1:0:0:
+455,191,98649,1,8,0:1:0:0:
+455,191,98730,6,0,L|442:98,1,73.0799977697755,8|8,0:0|0:1,0:0:0:0:
+433,49,98973,1,8,0:1:0:0:
+430,33,99054,1,0,3:2:0:0:
+322,120,99216,1,8,0:1:0:0:
+236,48,99378,1,0,3:2:0:0:
+237,36,99460,1,8,0:1:0:0:
+239,20,99541,1,8,0:1:0:0:
+322,120,99703,5,8,3:2:0:0:
+166,190,99865,1,8,0:1:0:0:
+165,177,99946,1,8,0:1:0:0:
+163,166,100027,6,0,B|195:129|243:146|243:146|267:202|319:200,1,180.959998895508,4|8,3:2|0:1,0:0:0:0:
+136,71,100514,1,8,0:1:0:0:
+322,120,100676,5,10,0:0:0:0:
+119,280,100838,1,8,0:1:0:0:
+236,48,101000,5,8,0:0:0:0:
+346,315,101162,1,8,0:0:0:0:
+47,167,101324,5,4,3:2:0:0:
+384,47,101487,1,4,3:2:0:0:
+392,53,102135,5,8,0:1:0:0:
+392,53,102216,5,8,0:1:0:0:
+392,53,102297,6,0,B|325:31|325:31|270:44|248:110|311:129,1,187.920004587891,8|0,0:0|0:0,0:0:0:0:
+229,189,102622,6,0,B|322:178|287:244|401:227,1,163.559997504273,4|10,3:2|0:0,0:0:0:0:
+438,175,103108,1,0,0:0:0:0:
+285,287,103270,2,0,L|196:302,1,81.7799987521363,2|0,3:2|3:2,0:0:0:0:
+343,378,103595,1,8,0:0:0:0:
+363,307,103757,1,2,0:0:0:0:
+194,121,103919,5,2,3:2:0:0:
+229,189,104081,2,0,L|309:206,1,81.7799987521363,2|8,0:0|0:0,0:0:0:0:
+146,366,104405,2,0,P|108:332|134:259,1,122.669998128204,2|0,3:2|0:0,0:0:0:0:
+95,201,104730,1,0,3:2:0:0:
+272,122,104892,2,0,P|305:79|270:9,1,122.669998128204,8|0,0:0|0:0,0:0:0:0:
+214,1,105216,6,0,B|117:-5|149:53|50:41,1,163.559997504273,4|10,3:2|0:0,0:0:0:0:
+194,121,105703,1,0,0:0:0:0:
+95,201,105865,2,0,L|112:103,1,81.7799987521363,2|2,3:2|3:2,0:0:0:0:
+279,219,106189,2,0,L|295:356,1,122.669998128204,8|0,0:0|0:0,0:0:0:0:
+231,382,106514,6,0,P|200:355|210:313,1,81.7799987521363,2|0,3:2|0:0,0:0:0:0:
+369,185,106838,2,0,L|461:213,1,81.7799987521363,10|2,0:0|3:2,0:0:0:0:
+310,88,107162,1,2,0:0:0:0:
+300,16,107324,1,0,3:2:0:0:
+194,121,107487,1,8,0:0:0:0:
+378,195,107649,1,8,0:1:0:0:
+378,195,107730,1,8,0:1:0:0:
+378,195,107811,6,0,B|289:190|315:259|208:247,1,163.559997504273,2|8,3:2|0:0,0:0:0:0:
+122,87,108297,1,0,0:0:0:0:
+194,121,108460,1,0,3:2:0:0:
+48,214,108622,1,0,3:2:0:0:
+37,137,108784,1,10,0:0:0:0:
+144,208,108946,1,8,0:1:0:0:
+144,208,109027,1,8,0:1:0:0:
+144,208,109108,6,0,L|121:352,1,122.669998128204,0|0,3:2|0:0,0:0:0:0:
+58,361,109432,1,8,0:0:0:0:
+244,241,109595,6,0,P|327:236|374:308,1,163.559997504273,0|2,3:2|3:2,0:0:0:0:
+194,121,110081,1,10,0:0:0:0:
+354,43,110243,1,2,0:0:0:0:
+290,0,110405,5,0,3:2:0:0:
+402,132,110568,1,8,3:1:0:0:
+402,132,110649,1,8,0:1:0:0:
+402,132,110730,6,0,B|301:107|301:107|319:135|323:171,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+117,295,111054,2,0,B|157:241|217:263|217:263|246:327|317:322,1,215.759991440186,4|8,3:2|0:0,0:0:0:0:
+109,164,111541,1,8,0:1:0:0:
+109,164,111622,1,8,0:1:0:0:
+109,164,111703,5,2,3:2:0:0:
+279,95,111865,1,0,3:2:0:0:
+99,38,112027,5,8,0:0:0:0:
+216,244,112189,2,0,L|194:71,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+245,28,112514,1,0,3:2:0:0:
+23,186,112676,1,8,0:0:0:0:
+179,352,112838,1,8,3:1:0:0:
+159,363,112919,1,8,3:1:0:0:
+138,355,113000,6,0,L|153:288,1,53.9399978600465,0|0,3:2|0:0,0:0:0:0:
+331,171,113162,1,4,3:2:0:0:
+397,215,113324,6,0,L|408:278,1,55.68,2|0,0:0|0:0,0:0:0:0:
+252,149,113649,1,0,3:2:0:0:
+411,51,113811,1,8,3:0:0:0:
+347,16,113973,1,0,3:2:0:0:
+457,161,114135,6,0,B|382:174|382:174|349:227|349:227|265:242,1,215.759991440186,6|2,3:2|3:2,0:0:0:0:
+126,120,114622,1,10,0:0:0:0:
+267,55,114784,1,0,3:2:0:0:
+130,257,114946,5,10,0:0:0:0:
+179,36,115108,1,0,3:2:0:0:
+179,36,115189,1,0,3:2:0:0:
+179,36,115270,5,8,0:0:0:0:
+353,157,115432,1,0,3:2:0:0:
+130,257,115595,5,8,0:0:0:0:
+353,74,115757,1,12,0:0:0:0:
+259,0,115919,2,0,L|270:73,1,55.68,2|8,0:0|0:3,0:0:0:0:
+280,124,116162,1,8,0:3:0:0:
+283,135,116243,5,0,3:2:0:0:
+441,224,116405,1,0,3:2:0:0:
+353,74,116568,5,8,0:0:0:0:
+203,217,116730,6,0,B|264:204|281:151|281:151|268:218|308:262,1,215.759991440186,4|2,3:2|3:2,0:0:0:0:
+180,111,117216,2,0,L|62:85,1,107.879995720093,10|0,0:0|3:2,0:0:0:0:
+241,8,117541,1,10,0:0:0:0:
+76,228,117703,1,8,0:1:0:0:
+80,217,117784,1,8,0:1:0:0:
+85,205,117865,2,0,L|146:222,1,53.9399978600465,8|0,0:1|0:0,0:0:0:0:
+334,361,118027,1,8,0:1:0:0:
+328,344,118108,1,8,0:1:0:0:
+321,329,118189,6,0,L|234:345,1,73.0799977697755,4|8,3:2|0:1,0:0:0:0:
+180,358,118432,1,8,0:1:0:0:
+164,362,118514,1,2,3:2:0:0:
+301,253,118676,1,8,0:1:0:0:
+407,282,118838,6,0,L|506:306,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+321,172,119162,1,2,3:1:0:0:
+445,94,119324,1,8,0:1:0:0:
+431,98,119405,1,8,0:1:0:0:
+416,103,119487,5,0,3:2:0:0:
+316,12,119649,1,8,0:1:0:0:
+331,16,119730,1,8,0:1:0:0:
+342,22,119811,2,0,L|323:104,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+194,229,120135,1,10,3:1:0:0:
+150,214,120216,1,8,0:1:0:0:
+132,178,120297,1,8,0:1:0:0:
+143,139,120378,1,8,0:1:0:0:
+175,120,120460,5,10,3:1:0:0:
+331,273,120622,1,8,0:1:0:0:
+331,273,120703,1,8,0:1:0:0:
+331,273,120784,6,0,L|251:293,1,73.0799977697755,0|8,3:2|0:1,0:0:0:0:
+189,306,121027,1,8,0:1:0:0:
+172,311,121108,1,2,3:2:0:0:
+278,193,121270,1,8,0:0:0:0:
+175,120,121432,5,10,3:1:0:0:
+174,109,121514,1,8,0:1:0:0:
+173,98,121595,1,8,0:1:0:0:
+276,0,121757,2,0,L|262:81,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+315,126,122000,1,8,0:1:0:0:
+315,126,122081,5,10,3:1:0:0:
+177,210,122243,1,8,0:1:0:0:
+162,214,122324,1,8,0:1:0:0:
+150,217,122405,1,8,3:1:0:0:
+260,290,122568,1,10,0:0:0:0:
+312,208,122730,5,8,3:1:0:0:
+346,188,122811,1,8,0:1:0:0:
+384,199,122892,1,8,0:1:0:0:
+406,233,122973,1,8,0:1:0:0:
+391,250,123054,5,10,3:2:0:0:
+413,304,123135,1,8,0:0:0:0:
+474,312,123216,1,8,0:0:0:0:
+512,266,123297,1,8,0:0:0:0:
+512,251,123378,6,0,L|494:124,1,90.4799994477539,4|0,3:2|0:0,0:0:0:0:
+260,290,123703,5,10,0:0:0:0:
+324,73,123865,1,0,3:2:0:0:
+413,304,124027,5,10,0:0:0:0:
+222,147,124189,1,2,3:2:0:0:
+437,36,124351,1,10,0:0:0:0:
+346,188,124514,1,0,3:2:0:0:
+192,21,124676,6,0,L|85:-5,1,90.4799994477539,8|0,0:0|0:0,0:0:0:0:
+222,147,125000,5,10,0:0:0:0:
+22,215,125162,1,0,3:2:0:0:
+104,0,125324,5,8,0:0:0:0:
+240,244,125487,1,0,3:2:0:0:
+238,231,125568,1,0,3:2:0:0:
+235,218,125649,1,8,0:0:0:0:
+59,133,125811,1,8,0:1:0:0:
+62,122,125892,1,8,0:1:0:0:
+64,111,125973,5,4,3:2:0:0:
+22,215,126135,1,0,3:2:0:0:
+157,96,126297,5,0,3:2:0:0:
+104,270,126460,1,0,3:2:0:0:
+241,72,126622,5,0,3:2:0:0:
+198,320,126784,1,0,3:2:0:0:
+330,46,126946,5,10,0:0:0:0:
+294,371,127108,1,8,0:0:0:0:
+436,24,127270,5,8,3:2:0:0:
+128,184,127432,1,8,0:0:0:0:
+446,344,127595,1,8,0:0:0:0:
+266,0,127757,1,8,0:0:0:0:
+152,384,127919,1,8,0:0:0:0:
+512,170,128081,1,0,3:2:0:0:
+266,0,128243,6,0,L|280:152,1,133.979997342316,6|0,3:2|0:0,0:0:0:0:
+378,196,128487,5,2,0:0:0:0:
+396,176,128568,6,0,B|357:124|293:152|293:152|277:210|204:207,1,215.759991440186,6|8,3:1|0:0,0:0:0:0:
+365,56,129054,1,2,0:0:0:0:
+312,299,129216,5,0,3:2:0:0:
+196,119,129378,1,0,3:2:0:0:
+396,176,129541,1,8,0:0:0:0:
+208,302,129703,1,2,0:0:0:0:
+298,190,129865,6,0,B|410:171|384:285|519:260,1,215.759991440186,2|8,3:2|0:0,0:0:0:0:
+281,90,130351,1,2,0:0:0:0:
+484,174,130514,5,0,3:2:0:0:
+312,299,130676,1,0,3:2:0:0:
+504,380,130838,5,8,0:0:0:0:
+307,198,131000,1,2,0:0:0:0:
+307,198,131081,1,2,0:0:0:0:
+307,198,131162,6,0,B|264:187|228:210|228:210|207:260|137:254,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+110,300,131487,1,8,0:0:0:0:
+0,176,131649,1,2,0:0:0:0:
+144,107,131811,5,0,3:2:0:0:
+3,282,131973,1,0,3:2:0:0:
+212,186,132135,5,8,0:0:0:0:
+77,31,132297,1,2,0:0:0:0:
+212,186,132460,6,0,P|255:216|323:195,1,107.879995720093,2|2,3:2|0:0,0:0:0:0:
+455,384,132784,1,10,0:0:0:0:
+297,290,132946,1,2,0:0:0:0:
+430,145,133108,5,4,3:2:0:0:
+339,362,133270,1,0,3:2:0:0:
+512,239,133432,1,8,0:0:0:0:
+344,92,133595,1,8,0:0:0:0:
+344,92,133676,1,8,0:0:0:0:
+344,92,133757,6,0,L|367:257,1,161.819993580139,2|0,3:2|0:0,0:0:0:0:
+297,290,134081,1,10,0:0:0:0:
+430,145,134243,1,2,0:0:0:0:
+277,8,134405,2,0,P|241:52|262:114,1,107.879995720093,0|2,3:2|3:2,0:0:0:0:
+442,257,134730,1,8,0:0:0:0:
+344,92,134892,5,2,0:0:0:0:
+205,225,135054,2,0,P|151:234|87:254,1,107.879995720093,2|2,3:2|0:0,0:0:0:0:
+268,363,135378,1,10,0:0:0:0:
+91,241,135541,2,0,P|67:170|170:105,1,215.759991440186,2|2,0:0|3:2,0:0:0:0:
+331,242,136027,1,8,0:0:0:0:
+128,372,136189,1,2,0:0:0:0:
+223,299,136351,6,0,B|278:315|278:315|303:353|303:353|396:375,1,161.819993580139,4|0,3:2|0:0,0:0:0:0:
+433,383,136676,1,10,0:0:0:0:
+257,167,136838,1,0,3:2:0:0:
+491,120,137000,5,8,0:0:0:0:
+338,248,137162,1,0,3:2:0:0:
+338,248,137243,1,0,3:2:0:0:
+338,248,137324,1,8,0:0:0:0:
+198,103,137487,1,0,3:2:0:0:
+435,212,137649,5,10,0:0:0:0:
+208,351,137811,2,0,L|223:296,1,53.9399978600465,10|0,0:0|0:0,0:0:0:0:
+69,173,137973,2,0,L|85:251,2,53.9399978600465,10|8|10,0:0|0:0|0:1,0:0:0:0:
+208,50,138297,6,0,L|194:124,1,53.9399978600465,10|0,3:2|0:0,0:0:0:0:
+46,24,138460,2,0,P|70:12|105:2,1,53.9399978600465,8|0,3:0|0:0,0:0:0:0:
+260,205,138622,2,0,P|236:193|194:181,1,53.9399978600465,10|0,0:0|0:0,0:0:0:0:
+343,15,138784,2,0,P|356:46|347:88,1,53.9399978600465,2|0,0:0|0:0,0:0:0:0:
+210,184,138946,6,0,B|328:154|328:154|384:193|355:253,1,215.759991440186,6|10,3:1|0:0,0:0:0:0:
+512,353,139432,1,0,0:0:0:0:
+435,378,139595,2,0,L|458:259,1,107.879995720093,0|0,3:2|3:2,0:0:0:0:
+274,125,139919,2,0,B|287:182|287:182|269:223|269:223|282:288,1,161.819993580139,10|0,0:0|0:0,0:0:0:0:
+289,361,140243,6,0,B|310:330|349:326|349:326|206:293,1,215.759991440186,4|8,3:2|0:0,0:0:0:0:
+387,151,140730,1,2,0:0:0:0:
+187,95,140892,5,2,3:2:0:0:
+368,321,141054,1,2,3:2:0:0:
+287,41,141216,1,10,0:0:0:0:
+101,196,141378,1,2,0:0:0:0:
+308,124,141541,5,2,3:2:0:0:
+107,7,141703,1,2,3:2:0:0:
+226,219,141865,5,8,0:0:0:0:
+374,40,142027,2,0,P|440:36|504:166,1,215.759991440186,2|2,0:0|3:2,0:0:0:0:
+287,41,142514,2,0,P|235:31|168:15,1,107.879995720093,8|0,0:0|0:0,0:0:0:0:
+29,243,142838,6,0,B|78:249|106:205|92:210|120:161|186:179,1,161.819993580139,2|0,3:2|0:0,0:0:0:0:
+226,219,143162,1,8,0:0:0:0:
+364,348,143324,1,2,0:0:0:0:
+364,348,143405,1,2,0:0:0:0:
+364,348,143487,6,0,L|291:364,1,53.9399978600465,4|0,3:2|0:0,0:0:0:0:
+429,222,143649,2,0,L|493:240,1,53.9399978600465,0|0,3:2|0:0,0:0:0:0:
+344,142,143811,1,8,3:2:0:0:
+313,113,143892,1,8,0:0:0:0:
+311,72,143973,1,8,0:0:0:0:
+342,40,144054,1,8,0:0:0:0:
+403,74,144135,6,0,B|283:53|324:157|181:128,1,215.759991440186,4|8,3:2|0:0,0:0:0:0:
+365,267,144622,1,2,0:0:0:0:
+232,48,144784,1,10,0:0:0:0:
+106,218,144946,1,0,3:2:0:0:
+313,113,145108,1,8,0:0:0:0:
+107,0,145270,1,2,0:0:0:0:
+107,0,145351,1,2,0:0:0:0:
+107,0,145432,6,0,P|117:51|123:117,1,107.879995720093,4|0,3:2|3:2,0:0:0:0:
+325,27,145757,1,8,0:0:0:0:
+256,238,145919,1,2,3:2:0:0:
+149,107,146081,5,10,0:0:0:0:
+368,228,146243,1,0,3:2:0:0:
+120,384,146405,5,10,0:0:0:0:
+329,316,146568,1,0,3:2:0:0:
+149,107,146730,6,0,L|169:277,1,146.159995539551,6|2,3:2|0:0,0:0:0:0:
+113,306,147216,1,2,3:2:0:0:
+318,147,147378,5,8,0:0:0:0:
+149,71,147541,1,2,0:0:0:0:
+149,71,147703,1,2,0:0:0:0:
+246,15,147865,1,2,0:0:0:0:
+199,171,148027,6,0,P|163:179|113:197,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+256,101,148351,1,2,0:0:0:0:
+356,225,148514,1,0,3:2:0:0:
+424,185,148676,2,0,P|433:151|436:88,1,73.0799977697755,8|0,0:0|0:0,0:0:0:0:
+270,245,149000,2,0,P|274:288|288:326,1,73.0799977697755
+360,339,149324,6,0,B|275:331|301:385|187:375,1,146.159995539551,4|2,3:2|3:2,0:0:0:0:
+356,225,149811,1,2,3:2:0:0:
+168,96,149973,5,8,0:0:0:0:
+360,339,150216,5,2,0:0:0:0:
+242,25,150460,5,2,0:0:0:0:
+86,185,150622,6,0,P|49:183|16:146,2,73.0799977697755,2|0|2,3:2|0:0|0:0,0:0:0:0:
+140,240,151108,1,0,3:2:0:0:
+256,131,151270,2,0,L|355:108,1,73.0799977697755,10|0,0:0|0:0,0:0:0:0:
+399,95,151514,1,8,0:1:0:0:
+419,89,151595,1,2,3:2:0:0:
+319,36,151757,1,2,0:0:0:0:
+416,229,151919,5,6,3:2:0:0:
+489,32,152081,1,0,3:2:0:0:
+327,114,152243,5,0,3:2:0:0:
+331,126,152568,1,0,3:2:0:0:
+335,138,152892,1,2,3:2:0:0:
+488,256,153216,5,0,3:2:0:0:
+488,244,153541,1,0,3:2:0:0:
+489,228,153865,5,0,3:2:0:0:
+315,330,154027,1,8,0:0:0:0:
+426,384,154189,1,2,3:2:0:0:
+336,233,154351,1,2,0:0:0:0:
+336,233,154432,1,2,0:0:0:0:
+336,233,154514,5,4,3:2:0:0:
+137,361,154676,1,0,3:2:0:0:
+202,170,154838,5,0,3:2:0:0:
+205,190,155162,1,0,3:2:0:0:
+208,209,155487,1,0,3:2:0:0:
+80,122,155811,5,0,3:2:0:0:
+230,48,155973,1,0,3:2:0:0:
+61,0,156135,5,8,0:0:0:0:
+193,148,156297,1,8,0:1:0:0:
+217,158,156378,1,8,0:1:0:0:
+244,152,156460,1,2,3:2:0:0:
+120,246,156622,1,0,3:2:0:0:
+294,99,156784,1,8,3:1:0:0:
+318,82,156865,1,8,0:1:0:0:
+351,87,156946,1,8,0:1:0:0:
+428,207,157108,5,4,3:2:0:0:
+230,48,157270,1,0,3:2:0:0:
+120,246,157432,5,0,3:2:0:0:
+122,229,157757,1,0,3:2:0:0:
+124,213,158081,5,2,3:2:0:0:
+295,314,158243,1,10,0:0:0:0:
+122,384,158405,5,4,3:2:0:0:
+324,222,158568,1,0,3:2:0:0:
+428,368,158730,2,0,L|352:344,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+380,162,159054,5,8,3:0:0:0:
+242,215,159216,1,8,3:0:0:0:
+428,368,159378,6,0,L|450:246,1,109.619996654663,10|0,0:0|0:0,0:0:0:0:
+380,162,159703,6,0,B|379:125|363:88|363:88|385:53|435:69,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+484,116,160027,1,10,0:0:0:0:
+242,215,160189,6,0,B|196:192|139:188|139:188|98:137|156:99,1,198.359997578613,4|0,3:2|3:2,0:0:0:0:
+327,235,160676,1,8,0:0:0:0:
+175,377,160838,1,2,0:0:0:0:
+175,377,160919,1,2,0:0:0:0:
+175,377,161000,6,0,P|145:339|161:276,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+330,156,161324,1,8,0:0:0:0:
+471,341,161487,1,8,0:1:0:0:
+434,364,161568,1,8,0:1:0:0:
+399,355,161649,5,10,0:0:0:0:
+328,258,161811,1,0,3:2:0:0:
+474,149,161973,5,10,0:0:0:0:
+466,186,162054,1,8,0:0:0:0:
+458,219,162135,1,8,0:0:0:0:
+363,82,162297,6,0,B|306:61|268:101|268:101|247:159|186:148,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+139,96,162784,1,0,0:0:0:0:
+35,225,162946,5,2,0:0:0:0:
+60,152,163108,1,0,3:2:0:0:
+223,298,163270,1,8,0:0:0:0:
+210,223,163432,1,2,0:0:0:0:
+45,321,163595,6,0,P|91:334|146:360,1,99.1799987893067,0|0,3:2|0:0,0:0:0:0:
+287,246,163919,1,8,0:0:0:0:
+139,96,164081,1,2,0:0:0:0:
+287,246,164243,6,0,P|333:237|393:212,1,99.1799987893067,2|0,0:0|3:2,0:0:0:0:
+228,64,164568,2,0,P|167:119|184:185,1,148.76999818396,8|0,0:0|0:0,0:0:0:0:
+187,251,164892,5,4,3:2:0:0:
+362,95,165054,1,0,3:2:0:0:
+178,177,165216,5,8,0:0:0:0:
+393,331,165378,2,0,P|416:285|393:224,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+224,352,165703,2,0,P|174:360|108:380,1,99.1799987893067,2|8,3:2|0:0,0:0:0:0:
+38,139,166027,6,0,B|90:140|125:108|125:108|80:150|98:217,1,198.359997578613,2|2,3:2|3:2,0:0:0:0:
+224,352,166514,1,8,0:0:0:0:
+320,219,166676,1,2,0:0:0:0:
+320,219,166757,1,2,0:0:0:0:
+320,219,166838,2,0,L|337:325,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+208,168,167162,2,0,P|239:110|319:114,1,148.76999818396,8|8,0:0|0:1,0:0:0:0:
+387,85,167487,5,4,3:2:0:0:
+387,85,167811,6,0,P|393:133|403:185,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+247,0,168135,2,0,P|231:46|228:99,1,99.1799987893067,0|0,3:2|0:0,0:0:0:0:
+51,253,168460,2,0,P|86:198|169:220,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+184,282,168784,6,0,P|232:292|284:317,1,99.1799987893067,10|0,3:1|0:0,0:0:0:0:
+402,182,169108,2,0,P|354:191|293:217,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+414,367,169432,2,0,P|440:323|419:267,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+223,116,169757,2,0,P|230:165|234:241,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+488,67,170081,6,0,P|450:22|352:52,1,148.76999818396,10|0,3:1|0:0,0:0:0:0:
+319,92,170405,2,0,P|270:101|204:123,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+393,237,170730,2,0,P|439:248|503:272,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+308,384,171054,2,0,P|280:339|306:287,1,99.1799987893067,2|0,3:2|0:0,0:0:0:0:
+195,44,171378,6,0,L|173:230,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+230,247,171703,1,0,3:2:0:0:
+31,366,171865,2,0,B|7:268|7:268|99:234,1,198.359997578613,2|2,0:0|0:0,0:0:0:0:
+204,62,172351,6,0,B|147:52|147:52|124:22|124:22|52:13,1,148.76999818396,10|0,0:0|0:0,0:0:0:0:
+14,62,172676,5,4,3:2:0:0:
+161,175,172838,1,0,3:2:0:0:
+35,149,173000,5,0,3:2:0:0:
+204,62,173162,1,0,3:2:0:0:
+262,266,173324,5,8,3:1:0:0:
+124,91,173487,1,8,3:1:0:0:
+123,310,173649,5,8,3:1:0:0:
+265,107,173811,1,8,3:1:0:0:
+319,381,173973,5,8,3:2:0:0:
+161,175,174135,1,8,3:2:0:0:
+363,258,174297,1,8,3:2:0:0:
+155,384,174460,1,8,3:2:0:0:
+364,59,174622,5,8,0:0:0:0:
+410,341,174784,1,8,0:0:0:0:
+205,35,174946,1,8,0:0:0:0:
+123,310,175108,1,8,0:0:0:0:
+411,183,175270,5,4,3:2:0:0:
+80,49,175432,1,4,3:2:0:0:
+67,42,176081,5,0,3:2:0:0:
+231,249,176243,1,8,0:0:0:0:
+433,101,176405,6,0,B|406:83|394:47|394:47|373:160,1,174.869991728257,4|0,3:2|0:0,0:0:0:0:
+427,207,176730,1,0,3:2:0:0:
+281,95,176892,1,8,0:0:0:0:
+471,27,177054,1,2,0:0:0:0:
+273,219,177216,5,10,0:0:0:0:
+273,219,177297,1,8,0:0:0:0:
+273,219,177378,2,0,P|246:213|220:194,1,58.2899972427522,8|8,0:0|0:0,0:0:0:0:
+377,361,177541,6,0,P|407:355|441:327,1,57.4200017523194,6|0,3:2|0:0,0:0:0:0:
+465,274,177865,5,6,3:1:0:0:
+100,334,182892,5,0,3:2:0:0:
+72,268,183054,2,0,P|133:256|210:340,1,167.04,2|0,3:2|3:2,0:0:0:0:
+328,140,183703,2,0,L|210:168,1,111.36,10|0,0:0|0:0,0:0:0:0:
+349,304,184189,1,8,0:1:0:0:
+349,304,184270,1,8,0:1:0:0:
+349,304,184351,5,0,3:2:0:0:
+349,304,184838,5,0,3:2:0:0:
+219,165,185000,2,0,L|233:100,1,55.68,8|0,0:0|0:0,0:0:0:0:
+353,62,185324,1,2,0:0:0:0:
+121,275,185568,5,8,0:1:0:0:
+129,262,185649,2,0,L|210:247,1,73.0799977697755,4|8,3:1|0:1,0:0:0:0:
+272,234,185892,1,8,0:1:0:0:
+295,231,185973,1,2,3:2:0:0:
+219,165,186135,1,8,0:0:0:0:
+349,304,186297,2,0,L|333:383,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+468,214,186622,1,8,0:0:0:0:
+398,238,186784,1,8,0:1:0:0:
+432,55,186946,6,0,L|449:141,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+464,196,187189,1,8,0:1:0:0:
+468,214,187270,1,0,3:2:0:0:
+338,93,187432,1,8,0:0:0:0:
+219,165,187595,5,8,3:1:0:0:
+187,181,187676,1,8,0:1:0:0:
+157,164,187757,1,8,0:1:0:0:
+152,127,187838,1,8,0:1:0:0:
+177,105,187919,1,10,3:1:0:0:
+317,233,188081,1,8,0:1:0:0:
+317,233,188162,1,8,0:1:0:0:
+317,233,188243,6,0,L|293:356,1,109.619996654663,2|8,3:2|0:1,0:0:0:0:
+353,384,188568,1,2,3:2:0:0:
+216,275,188730,1,8,0:0:0:0:
+385,171,188892,6,0,P|393:206|401:270,1,73.0799977697755,2|8,3:2|0:1,0:0:0:0:
+194,34,189216,2,0,P|183:68|176:117,1,73.0799977697755,8|8,0:0|0:1,0:0:0:0:
+122,156,189460,1,8,0:1:0:0:
+122,156,189541,5,10,0:0:0:0:
+301,45,189703,1,8,0:0:0:0:
+301,45,189784,1,8,0:0:0:0:
+301,45,189865,1,8,0:0:0:0:
+385,171,190027,5,8,0:0:0:0:
+194,34,190189,1,8,3:2:0:0:
+194,34,190270,1,8,0:0:0:0:
+194,34,190351,6,0,L|204:98,1,36.5399988848877,8|0,0:0|0:0,0:0:0:0:
+42,248,190514,1,8,3:2:0:0:
+42,248,190595,1,8,0:0:0:0:
+42,248,190676,2,0,L|52:184,1,36.5399988848877,8|8,0:0|0:0,0:0:0:0:
+16,145,190838,6,0,P|87:131|151:217,1,167.04,2|0,3:2|3:2,0:0:0:0:
+296,345,191487,5,8,3:2:0:0:
+261,370,191568,1,8,0:0:0:0:
+221,354,191649,2,0,P|211:329|215:295,1,58.2899972427522,8|0,0:0|0:0,0:0:0:0:
+378,138,191811,5,4,3:2:0:0:
+343,113,191892,1,8,0:0:0:0:
+303,129,191973,2,0,P|293:154|297:188,1,58.2899972427522,8|0,0:0|0:0,0:0:0:0:
+352,270,192135,6,0,B|243:247|274:348|133:321,1,198.359997578613,6|8,3:1|0:0,0:0:0:0:
+295,184,192622,1,2,0:0:0:0:
+129,67,192784,2,0,P|174:101|225:92,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+87,223,193108,1,10,0:0:0:0:
+231,80,193270,1,2,0:0:0:0:
+231,80,193351,1,2,0:0:0:0:
+231,80,193432,6,0,P|282:32|373:53,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+414,88,193757,2,0,L|392:192,1,99.1799987893067,8|0,0:0|0:0,0:0:0:0:
+273,328,194081,1,0,3:2:0:0:
+486,204,194243,1,0,3:2:0:0:
+307,111,194405,1,8,0:0:0:0:
+431,324,194568,1,2,0:0:0:0:
+434,307,194649,1,2,0:0:0:0:
+437,293,194730,6,0,B|395:250|342:273|342:273|316:332|262:327,1,198.359997578613,2|8,3:2|0:0,0:0:0:0:
+119,181,195216,1,2,0:0:0:0:
+30,306,195378,2,0,P|76:292|138:282,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+231,143,195703,1,10,0:0:0:0:
+102,33,195865,1,2,0:0:0:0:
+102,33,195946,1,2,0:0:0:0:
+102,33,196027,6,0,P|148:48|209:58,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+89,175,196351,1,8,0:0:0:0:
+260,250,196514,1,2,0:0:0:0:
+97,370,196676,5,4,3:2:0:0:
+247,163,196838,1,8,0:0:0:0:
+247,163,196919,1,8,0:0:0:0:
+247,163,197000,2,0,L|312:179,1,49.5899993946533,0|0,3:2|0:0,0:0:0:0:
+473,339,197162,1,8,0:0:0:0:
+441,363,197243,1,8,0:0:0:0:
+403,349,197324,6,0,L|423:197,1,148.76999818396,6|0,3:2|0:0,0:0:0:0:
+472,140,197649,2,0,P|504:182|483:243,1,99.1799987893067,8|0,0:0|0:0,0:0:0:0:
+344,101,197973,1,2,3:2:0:0:
+470,38,198135,1,0,3:2:0:0:
+347,231,198297,1,8,0:0:0:0:
+208,9,198460,1,2,0:0:0:0:
+208,9,198541,1,2,0:0:0:0:
+208,9,198622,6,0,P|251:27|317:42,1,99.1799987893067,4|2,3:2|0:0,0:0:0:0:
+189,186,198946,2,0,B|102:182|137:235|14:229,1,148.76999818396,10|0,0:0|0:0,0:0:0:0:
+0,175,199270,1,2,3:2:0:0:
+192,352,199432,1,0,3:2:0:0:
+0,175,199595,2,0,P|13:126|25:60,1,99.1799987893067,10|0,0:0|0:0,0:0:0:0:
+244,262,199919,6,0,P|232:189|227:87,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+174,61,200243,1,8,0:0:0:0:
+49,228,200405,1,2,3:2:0:0:
+259,127,200568,5,8,0:0:0:0:
+86,2,200730,1,0,3:2:0:0:
+86,2,200811,1,0,3:2:0:0:
+86,2,200892,5,8,0:0:0:0:
+244,262,201054,1,0,3:2:0:0:
+23,124,201216,6,0,P|68:109|130:99,1,99.1799987893067,4|0,3:2|3:2,0:0:0:0:
+293,0,201541,1,8,0:0:0:0:
+447,147,201703,1,8,0:1:0:0:
+428,166,201784,1,8,0:1:0:0:
+397,165,201865,1,8,0:0:0:0:
+483,51,202027,1,0,3:2:0:0:
+380,149,202189,6,0,P|321:128|257:179,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+186,215,202514,6,0,B|288:193|266:293|408:270,1,198.359997578613,4|8,3:1|0:0,0:0:0:0:
+208,96,203000,1,0,3:2:0:0:
+261,329,203162,1,10,0:0:0:0:
+380,149,203324,1,0,3:2:0:0:
+186,215,203487,1,10,0:0:0:0:
+378,364,203649,1,0,3:2:0:0:
+279,239,203811,6,0,B|200:252|200:252|165:290|165:290|80:301,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+281,153,204297,1,2,0:0:0:0:
+110,46,204460,1,8,0:0:0:0:
+186,215,204622,1,0,3:2:0:0:
+315,72,204784,2,0,P|387:66|439:132,1,148.76999818396,10|2,0:0|0:0,0:0:0:0:
+512,176,205108,6,0,B|434:143|434:143|349:175|390:251,1,198.359997578613,6|8,3:2|0:0,0:0:0:0:
+512,96,205595,1,2,0:0:0:0:
+302,224,205757,5,8,0:0:0:0:
+496,334,205919,1,0,3:2:0:0:
+363,152,206081,1,10,0:0:0:0:
+226,365,206243,1,0,3:2:0:0:
+377,226,206405,6,0,B|315:233|279:184|296:182|266:125|194:150,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+317,310,206892,1,0,3:2:0:0:
+282,65,207054,1,4,3:2:0:0:
+108,232,207216,1,2,3:2:0:0:
+0,163,207378,5,10,0:0:0:0:
+21,119,207460,1,8,0:0:0:0:
+65,101,207541,1,10,0:0:0:0:
+116,115,207622,1,8,0:0:0:0:
+131,132,207703,6,0,P|119:172|110:229,1,73.0799977697755,2|0,3:2|0:0,0:0:0:0:
+209,284,208027,1,2,0:0:0:0:
+87,342,208189,5,0,3:2:0:0:
+228,206,208351,2,0,P|261:222|306:236,1,73.0799977697755,8|2,0:0|0:0,0:0:0:0:
+317,310,208676,1,2,0:0:0:0:
+468,196,208838,5,2,0:0:0:0:
+457,192,208919,1,2,0:0:0:0:
+444,186,209000,2,0,P|446:223|457:280,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+302,84,209324,2,0,P|291:120|286:170,1,73.0799977697755,0|0,3:2|0:0,0:0:0:0:
+445,43,209649,5,8,0:0:0:0:
+228,206,209892,5,2,0:0:0:0:
+447,384,210135,5,2,0:0:0:0:
+313,229,210297,6,0,B|231:226|256:272|164:265,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+138,334,210622,1,0,3:2:0:0:
+6,131,210784,6,0,B|116:94|116:94|148:155|89:189,1,198.359997578613,10|8,0:0|0:1,0:0:0:0:
+52,220,211189,1,8,0:1:0:0:
+47,207,211270,6,0,B|103:220|103:220|118:253|118:253|187:269,1,148.76999818396,4|0,3:2|0:0,0:0:0:0:
+226,322,211595,1,0,3:2:0:0:
+381,194,211757,6,0,B|361:84|361:84|269:98,1,198.359997578613,8|8,0:0|0:1,0:0:0:0:
+237,161,212162,1,8,0:1:0:0:
+237,161,212243,6,0,L|305:181,1,49.5899993946533,2|0,3:2|0:0,0:0:0:0:
+422,292,212405,2,0,L|351:313,1,49.5899993946533,0|0,3:2|0:0,0:0:0:0:
+451,128,212568,6,0,L|463:203,1,49.5899993946533,0|0,3:2|0:0,0:0:0:0:
+263,324,212730,2,0,L|275:260,1,49.5899993946533,0|0,3:2|0:0,0:0:0:0:
+455,384,212892,5,4,3:2:0:0:
+422,292,213054,1,0,3:2:0:0:
+321,384,213216,5,0,3:2:0:0:
+378,188,213378,1,0,3:2:0:0:
+194,379,213541,5,8,0:0:0:0:
+130,108,213703,1,8,0:0:0:0:
+341,272,213865,1,8,0:0:0:0:
+63,384,214027,1,8,0:0:0:0:
+243,34,214189,5,4,3:2:0:0:
+321,384,214351,1,4,3:2:0:0:
+15,145,215162,6,0,B|117:120|117:120|92:149|95:208,1,174.869991728257,6|0,3:2|0:0,0:0:0:0:
+172,178,215487,6,0,B|276:158|248:252|371:237,1,198.359997578613,4|8,3:1|0:0,0:0:0:0:
+233,321,215973,1,2,0:0:0:0:
+406,180,216135,2,0,P|437:224|420:278,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+261,148,216460,2,0,B|336:128|295:94|391:69,1,148.76999818396,8|2,0:0|0:0,0:0:0:0:
+461,67,216784,6,0,B|388:52|388:52|359:12|359:12|278:-2,1,198.359997578613,2|10,3:2|0:0,0:0:0:0:
+406,180,217270,1,2,0:0:0:0:
+277,7,217432,6,0,L|173:31,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+23,168,217757,2,0,B|55:139|97:145|97:145|115:179|162:192,1,148.76999818396,8|2,0:0|0:0,0:0:0:0:
+231,234,218081,6,0,B|163:209|163:209|64:266|123:343,1,198.359997578613,4|8,3:2|0:0,0:0:0:0:
+278,165,218568,1,0,0:0:0:0:
+348,279,218730,2,0,P|389:308|448:301,1,99.1799987893067,2|0,3:2|3:2,0:0:0:0:
+299,68,219054,2,0,L|274:183,1,99.1799987893067,8|0,0:0|0:0,0:0:0:0:
+376,7,219378,5,2,3:2:0:0:
+204,94,219541,1,2,0:0:0:0:
+361,202,219703,1,10,0:0:0:0:
+185,326,219865,2,0,L|209:210,1,99.1799987893067,2|4,0:0|3:2,0:0:0:0:
+389,313,220189,1,8,0:1:0:0:
+388,356,220271,1,8,0:1:0:0:
+354,384,220352,1,8,3:1:0:0:
+313,384,220433,1,8,0:1:0:0:
+285,353,220514,1,8,0:1:0:0:
+205,228,220676,6,0,P|150:165|31:201,1,198.359997578613,6|8,3:2|0:0,0:0:0:0:
+202,91,221162,1,2,0:0:0:0:
+44,0,221324,2,0,P|83:30|139:27,1,99.1799987893067,0|0,3:2|3:2,0:0:0:0:
+45,183,221649,6,0,P|35:236|21:298,1,99.1799987893067,8|2,0:0|0:0,0:0:0:0:
+78,333,221892,1,2,0:0:0:0:
+78,333,221973,2,0,B|159:326|131:378|246:372,1,148.76999818396,2|0,3:2|0:0,0:0:0:0:
+285,341,222297,5,8,0:0:0:0:
+184,211,222460,1,2,0:0:0:0:
+310,164,222622,5,0,3:2:0:0:
+163,325,222784,1,0,3:2:0:0:
+310,164,222946,2,0,L|324:54,1,99.1799987893067,8|8,0:0|0:1,0:0:0:0:
+268,13,223189,1,8,0:1:0:0:
+268,13,223270,5,4,3:2:0:0:
+406,106,223432,1,2,0:0:0:0:
+184,211,223595,1,8,0:0:0:0:
+292,88,223757,1,2,0:0:0:0:
+361,307,223919,5,10,0:0:0:0:
+214,119,224081,1,0,3:2:0:0:
+214,119,224162,1,0,3:2:0:0:
+214,119,224243,1,0,3:2:0:0:
+129,290,224405,5,4,3:2:0:0:
+129,290,224730,5,2,0:0:0:0:
+86,152,224892,1,8,3:0:0:0:
+155,177,225054,1,4,3:0:0:0:
+31,270,225216,1,0,3:0:0:0:
+186,353,225378,1,8,3:0:0:0:
+112,377,225541,1,4,3:0:0:0:
+410,158,225865,5,6,3:1:0:0:
+350,203,226027,2,0,L|360:270,1,55.68,2|0,0:0|0:0,0:0:0:0:
+193,83,226351,5,2,0:0:0:0:
+246,136,226514,2,0,L|233:202,1,55.68,2|0,0:0|0:0,0:0:0:0:
+394,25,226838,6,0,L|327:43,1,55.68,2|0,0:0|0:0,0:0:0:0:
+269,59,227162,1,2,0:0:0:0:
+109,153,227324,6,0,L|172:171,1,55.68,2|0,0:0|0:0,0:0:0:0:
+235,190,227649,1,2,0:0:0:0:
+107,348,227811,6,0,L|99:293,2,55.68,2|0|0,0:0|0:0|0:0,0:0:0:0:
+176,384,228297,1,2,0:0:0:0:
+321,307,228460,6,0,L|333:237,1,55.68,2|0,0:0|0:0,0:0:0:0:
+271,203,228784,1,2,0:0:0:0:
+437,70,228946,6,0,L|446:134,1,55.68,2|0,0:0|0:0,0:0:0:0:
+394,174,229270,1,2,0:0:0:0:
+291,42,229432,6,0,L|231:22,1,55.68,2|0,0:0|0:0,0:0:0:0:
+288,119,229757,1,2,0:0:0:0:
+150,209,229919,6,0,L|220:192,2,55.68,2|0|0,0:0|0:0|0:0,0:0:0:0:
+88,167,230405,2,0,L|100:107,1,55.68,2|0,0:0|0:0,0:0:0:0:
+274,285,230730,6,0,L|280:329,2,37.12,2|2|2,0:0|0:0|0:0,0:0:0:0:
+314,217,231054,6,0,P|362:210|409:260,1,111.36,2|0,0:0|0:0,0:0:0:0:
+512,130,231541,1,2,0:0:0:0:
+452,88,231703,1,2,0:0:0:0:
+406,143,231865,1,2,0:0:0:0:
+280,54,232027,6,0,L|292:-12,1,55.68,2|0,0:0|0:0,0:0:0:0:
+348,89,232351,1,2,0:0:0:0:
+186,175,232514,6,0,L|177:103,1,55.68,2|0,0:0|0:0,0:0:0:0:
+120,222,232838,1,2,0:0:0:0:
+224,364,233000,5,2,0:0:0:0:
+157,342,233162,1,2,0:0:0:0:
+293,248,233324,5,2,0:0:0:0:
+384,221,233487,1,2,0:0:0:0:
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165-expected-conversion.json b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165-expected-conversion.json
new file mode 100644
index 000000000000..0309bb90fdc6
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165-expected-conversion.json
@@ -0,0 +1 @@
+{"Mappings":[{"StartTime":6337.0,"Objects":[{"StartTime":6337.0,"EndTime":6337.0,"X":378.0,"Y":163.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":6559.0,"EndTime":6559.0,"X":467.160767,"Y":186.920609,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":6745.0,"EndTime":6745.0,"X":378.0,"Y":163.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7115.0,"Objects":[{"StartTime":7115.0,"EndTime":7115.0,"X":320.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7190.0,"EndTime":7190.0,"X":332.12677,"Y":360.507141,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7560.0,"Objects":[{"StartTime":7560.0,"EndTime":7560.0,"X":164.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7587.0,"EndTime":7587.0,"X":139.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7671.0,"Objects":[{"StartTime":7671.0,"EndTime":7671.0,"X":139.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7698.0,"EndTime":7698.0,"X":114.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7782.0,"Objects":[{"StartTime":7782.0,"EndTime":7782.0,"X":114.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7809.0,"EndTime":7809.0,"X":89.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":7893.0,"Objects":[{"StartTime":7893.0,"EndTime":7893.0,"X":89.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":7920.0,"EndTime":7920.0,"X":64.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8004.0,"Objects":[{"StartTime":8004.0,"EndTime":8004.0,"X":32.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8079.0,"EndTime":8079.0,"X":42.8465233,"Y":135.190643,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8226.0,"Objects":[{"StartTime":8226.0,"EndTime":8226.0,"X":144.0,"Y":128.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8301.0,"EndTime":8301.0,"X":154.846527,"Y":79.19064,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":8449.0,"Objects":[{"StartTime":8449.0,"EndTime":8449.0,"X":266.0,"Y":68.0}]},{"StartTime":8560.0,"Objects":[{"StartTime":8560.0,"EndTime":8560.0,"X":306.0,"Y":40.0}]},{"StartTime":8671.0,"Objects":[{"StartTime":8671.0,"EndTime":8671.0,"X":356.0,"Y":39.0}]},{"StartTime":8782.0,"Objects":[{"StartTime":8782.0,"EndTime":8782.0,"X":397.0,"Y":66.0}]},{"StartTime":8893.0,"Objects":[{"StartTime":8893.0,"EndTime":8893.0,"X":415.0,"Y":111.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":8968.0,"EndTime":8968.0,"X":439.476746,"Y":154.599182,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9115.0,"Objects":[{"StartTime":9115.0,"EndTime":9115.0,"X":429.0,"Y":263.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9190.0,"EndTime":9190.0,"X":454.28598,"Y":306.1349,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9337.0,"Objects":[{"StartTime":9337.0,"EndTime":9337.0,"X":328.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9364.0,"EndTime":9364.0,"X":315.596527,"Y":250.293915,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9449.0,"Objects":[{"StartTime":9449.0,"EndTime":9449.0,"X":315.0,"Y":250.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9476.0,"EndTime":9476.0,"X":302.3705,"Y":228.424637,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9560.0,"Objects":[{"StartTime":9560.0,"EndTime":9560.0,"X":303.0,"Y":228.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9587.0,"EndTime":9587.0,"X":290.506927,"Y":206.345367,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9671.0,"Objects":[{"StartTime":9671.0,"EndTime":9671.0,"X":290.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9698.0,"EndTime":9698.0,"X":277.506927,"Y":185.345367,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":9782.0,"Objects":[{"StartTime":9782.0,"EndTime":9782.0,"X":248.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":9857.0,"EndTime":9857.0,"X":248.0,"Y":102.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":10004.0,"Objects":[{"StartTime":10004.0,"EndTime":10004.0,"X":154.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":10079.0,"EndTime":10079.0,"X":154.0,"Y":86.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":10226.0,"Objects":[{"StartTime":10226.0,"EndTime":10226.0,"X":64.0,"Y":168.0}]},{"StartTime":10337.0,"Objects":[{"StartTime":10337.0,"EndTime":10337.0,"X":19.0,"Y":187.0}]},{"StartTime":10449.0,"Objects":[{"StartTime":10449.0,"EndTime":10449.0,"X":0.0,"Y":232.0}]},{"StartTime":10560.0,"Objects":[{"StartTime":10560.0,"EndTime":10560.0,"X":14.0,"Y":278.0}]},{"StartTime":10671.0,"Objects":[{"StartTime":10671.0,"EndTime":10671.0,"X":56.0,"Y":303.0}]},{"StartTime":10782.0,"Objects":[{"StartTime":10782.0,"EndTime":10782.0,"X":101.0,"Y":282.0}]},{"StartTime":10893.0,"Objects":[{"StartTime":10893.0,"EndTime":10893.0,"X":151.0,"Y":282.0}]},{"StartTime":11004.0,"Objects":[{"StartTime":11004.0,"EndTime":11004.0,"X":196.0,"Y":302.0}]},{"StartTime":11115.0,"Objects":[{"StartTime":11115.0,"EndTime":11115.0,"X":240.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11142.0,"EndTime":11142.0,"X":265.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11226.0,"Objects":[{"StartTime":11226.0,"EndTime":11226.0,"X":265.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11253.0,"EndTime":11253.0,"X":290.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11337.0,"Objects":[{"StartTime":11337.0,"EndTime":11337.0,"X":290.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11364.0,"EndTime":11364.0,"X":315.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11449.0,"Objects":[{"StartTime":11449.0,"EndTime":11449.0,"X":315.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11476.0,"EndTime":11476.0,"X":340.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11560.0,"Objects":[{"StartTime":11560.0,"EndTime":11560.0,"X":384.0,"Y":340.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11635.0,"EndTime":11635.0,"X":411.735016,"Y":298.3975,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":11782.0,"Objects":[{"StartTime":11782.0,"EndTime":11782.0,"X":376.0,"Y":196.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":11857.0,"EndTime":11857.0,"X":348.264984,"Y":237.602509,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12004.0,"Objects":[{"StartTime":12004.0,"EndTime":12004.0,"X":416.0,"Y":308.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12079.0,"EndTime":12079.0,"X":427.118,"Y":259.25177,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12226.0,"Objects":[{"StartTime":12226.0,"EndTime":12226.0,"X":359.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12301.0,"EndTime":12301.0,"X":346.87323,"Y":223.507126,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12449.0,"Objects":[{"StartTime":12449.0,"EndTime":12449.0,"X":440.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12524.0,"EndTime":12524.0,"X":434.009,"Y":210.360229,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12671.0,"Objects":[{"StartTime":12671.0,"EndTime":12671.0,"X":340.0,"Y":154.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12746.0,"EndTime":12746.0,"X":345.234253,"Y":203.725281,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":12893.0,"Objects":[{"StartTime":12893.0,"EndTime":12893.0,"X":432.0,"Y":124.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":12920.0,"EndTime":12920.0,"X":422.71524,"Y":100.788086,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13004.0,"Objects":[{"StartTime":13004.0,"EndTime":13004.0,"X":422.0,"Y":100.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13031.0,"EndTime":13031.0,"X":412.53418,"Y":76.86133,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13115.0,"Objects":[{"StartTime":13115.0,"EndTime":13115.0,"X":412.0,"Y":76.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13142.0,"EndTime":13142.0,"X":402.152,"Y":53.0213737,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13226.0,"Objects":[{"StartTime":13226.0,"EndTime":13226.0,"X":403.0,"Y":53.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13253.0,"EndTime":13253.0,"X":393.567566,"Y":29.8476925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13337.0,"Objects":[{"StartTime":13337.0,"EndTime":13337.0,"X":352.0,"Y":4.0}]},{"StartTime":13449.0,"Objects":[{"StartTime":13449.0,"EndTime":13449.0,"X":352.0,"Y":4.0}]},{"StartTime":13560.0,"Objects":[{"StartTime":13560.0,"EndTime":13560.0,"X":352.0,"Y":4.0}]},{"StartTime":13671.0,"Objects":[{"StartTime":13671.0,"EndTime":13671.0,"X":352.0,"Y":4.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13746.0,"EndTime":13746.0,"X":337.441925,"Y":51.8336945,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":13893.0,"Objects":[{"StartTime":13893.0,"EndTime":13893.0,"X":257.0,"Y":89.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":13968.0,"EndTime":13968.0,"X":242.441925,"Y":41.1663055,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17004.0,"Objects":[{"StartTime":17004.0,"EndTime":17004.0,"X":66.0,"Y":72.0}]},{"StartTime":17226.0,"Objects":[{"StartTime":17226.0,"EndTime":17226.0,"X":128.0,"Y":199.0}]},{"StartTime":17449.0,"Objects":[{"StartTime":17449.0,"EndTime":17449.0,"X":207.0,"Y":82.0}]},{"StartTime":17560.0,"Objects":[{"StartTime":17560.0,"EndTime":17560.0,"X":283.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17635.0,"EndTime":17635.0,"X":332.767517,"Y":155.183792,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":17782.0,"Objects":[{"StartTime":17782.0,"EndTime":17782.0,"X":487.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":17893.0,"EndTime":17893.0,"X":437.356171,"Y":107.04274,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18004.0,"EndTime":18004.0,"X":487.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18079.0,"EndTime":18079.0,"X":437.356171,"Y":107.04274,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18226.0,"Objects":[{"StartTime":18226.0,"EndTime":18226.0,"X":403.0,"Y":76.0}]},{"StartTime":18337.0,"Objects":[{"StartTime":18337.0,"EndTime":18337.0,"X":365.0,"Y":107.0}]},{"StartTime":18449.0,"Objects":[{"StartTime":18449.0,"EndTime":18449.0,"X":356.0,"Y":156.0}]},{"StartTime":18560.0,"Objects":[{"StartTime":18560.0,"EndTime":18560.0,"X":379.0,"Y":199.0}]},{"StartTime":18671.0,"Objects":[{"StartTime":18671.0,"EndTime":18671.0,"X":423.0,"Y":222.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":18746.0,"EndTime":18746.0,"X":472.643829,"Y":227.95726,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":18893.0,"Objects":[{"StartTime":18893.0,"EndTime":18893.0,"X":332.0,"Y":345.0}]},{"StartTime":19004.0,"Objects":[{"StartTime":19004.0,"EndTime":19004.0,"X":332.0,"Y":345.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19079.0,"EndTime":19079.0,"X":324.509735,"Y":295.56424,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19226.0,"Objects":[{"StartTime":19226.0,"EndTime":19226.0,"X":211.0,"Y":233.0}]},{"StartTime":19337.0,"Objects":[{"StartTime":19337.0,"EndTime":19337.0,"X":211.0,"Y":233.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19412.0,"EndTime":19412.0,"X":203.509735,"Y":282.43576,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19560.0,"Objects":[{"StartTime":19560.0,"EndTime":19560.0,"X":91.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19635.0,"EndTime":19635.0,"X":41.3058128,"Y":292.478424,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":19782.0,"Objects":[{"StartTime":19782.0,"EndTime":19782.0,"X":166.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":19857.0,"EndTime":19857.0,"X":174.567062,"Y":233.26059,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":20004.0,"Objects":[{"StartTime":20004.0,"EndTime":20004.0,"X":220.0,"Y":356.0}]},{"StartTime":20115.0,"Objects":[{"StartTime":20115.0,"EndTime":20115.0,"X":263.0,"Y":331.0}]},{"StartTime":20226.0,"Objects":[{"StartTime":20226.0,"EndTime":20226.0,"X":312.0,"Y":322.0}]},{"StartTime":20337.0,"Objects":[{"StartTime":20337.0,"EndTime":20337.0,"X":361.0,"Y":329.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20412.0,"EndTime":20412.0,"X":393.297119,"Y":367.1693,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":20560.0,"Objects":[{"StartTime":20560.0,"EndTime":20560.0,"X":457.0,"Y":201.0}]},{"StartTime":20671.0,"Objects":[{"StartTime":20671.0,"EndTime":20671.0,"X":457.0,"Y":201.0}]},{"StartTime":20782.0,"Objects":[{"StartTime":20782.0,"EndTime":20782.0,"X":457.0,"Y":201.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20893.0,"EndTime":20893.0,"X":459.171875,"Y":151.0472,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":20968.0,"EndTime":20968.0,"X":457.0,"Y":201.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21115.0,"Objects":[{"StartTime":21115.0,"EndTime":21115.0,"X":344.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21190.0,"EndTime":21190.0,"X":335.893219,"Y":184.550186,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":21337.0,"Objects":[{"StartTime":21337.0,"EndTime":21337.0,"X":214.0,"Y":70.0}]},{"StartTime":21449.0,"Objects":[{"StartTime":21449.0,"EndTime":21449.0,"X":263.0,"Y":76.0}]},{"StartTime":21560.0,"Objects":[{"StartTime":21560.0,"EndTime":21560.0,"X":313.0,"Y":82.0}]},{"StartTime":21671.0,"Objects":[{"StartTime":21671.0,"EndTime":21671.0,"X":362.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":21857.0,"EndTime":21857.0,"X":265.04364,"Y":112.483932,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22004.0,"Objects":[{"StartTime":22004.0,"EndTime":22004.0,"X":164.0,"Y":64.0}]},{"StartTime":22115.0,"Objects":[{"StartTime":22115.0,"EndTime":22115.0,"X":164.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":22190.0,"EndTime":22190.0,"X":114.386108,"Y":57.7982635,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":22337.0,"Objects":[{"StartTime":22337.0,"EndTime":22337.0,"X":21.0,"Y":221.0}]},{"StartTime":22449.0,"Objects":[{"StartTime":22449.0,"EndTime":22449.0,"X":69.0,"Y":229.0}]},{"StartTime":22560.0,"Objects":[{"StartTime":22560.0,"EndTime":22560.0,"X":114.0,"Y":208.0}]},{"StartTime":22671.0,"Objects":[{"StartTime":22671.0,"EndTime":22671.0,"X":139.0,"Y":166.0}]},{"StartTime":22782.0,"Objects":[{"StartTime":22782.0,"EndTime":22782.0,"X":145.0,"Y":226.0}]},{"StartTime":22893.0,"Objects":[{"StartTime":22893.0,"EndTime":22893.0,"X":150.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23079.0,"EndTime":23079.0,"X":258.789642,"Y":261.437683,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23226.0,"Objects":[{"StartTime":23226.0,"EndTime":23226.0,"X":384.0,"Y":243.0}]},{"StartTime":23337.0,"Objects":[{"StartTime":23337.0,"EndTime":23337.0,"X":384.0,"Y":243.0}]},{"StartTime":23449.0,"Objects":[{"StartTime":23449.0,"EndTime":23449.0,"X":384.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23560.0,"EndTime":23560.0,"X":388.9752,"Y":193.248138,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":23635.0,"EndTime":23635.0,"X":384.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":23782.0,"Objects":[{"StartTime":23782.0,"EndTime":23782.0,"X":334.0,"Y":331.0}]},{"StartTime":23893.0,"Objects":[{"StartTime":23893.0,"EndTime":23893.0,"X":285.0,"Y":319.0}]},{"StartTime":24004.0,"Objects":[{"StartTime":24004.0,"EndTime":24004.0,"X":236.0,"Y":325.0}]},{"StartTime":24115.0,"Objects":[{"StartTime":24115.0,"EndTime":24115.0,"X":191.0,"Y":346.0}]},{"StartTime":24226.0,"Objects":[{"StartTime":24226.0,"EndTime":24226.0,"X":155.0,"Y":381.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24412.0,"EndTime":24412.0,"X":55.3892822,"Y":372.1849,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":24560.0,"Objects":[{"StartTime":24560.0,"EndTime":24560.0,"X":148.0,"Y":254.0}]},{"StartTime":24671.0,"Objects":[{"StartTime":24671.0,"EndTime":24671.0,"X":148.0,"Y":254.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":24857.0,"EndTime":24857.0,"X":247.529541,"Y":244.311279,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25115.0,"Objects":[{"StartTime":25115.0,"EndTime":25115.0,"X":90.0,"Y":134.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25190.0,"EndTime":25190.0,"X":96.39857,"Y":183.5889,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25337.0,"Objects":[{"StartTime":25337.0,"EndTime":25337.0,"X":30.0,"Y":218.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25523.0,"EndTime":25523.0,"X":55.3264046,"Y":72.97656,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":25671.0,"Objects":[{"StartTime":25671.0,"EndTime":25671.0,"X":179.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":25857.0,"EndTime":25857.0,"X":275.556946,"Y":103.126785,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26004.0,"Objects":[{"StartTime":26004.0,"EndTime":26004.0,"X":349.0,"Y":47.0}]},{"StartTime":26115.0,"Objects":[{"StartTime":26115.0,"EndTime":26115.0,"X":349.0,"Y":47.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26301.0,"EndTime":26301.0,"X":328.957245,"Y":140.003632,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26449.0,"Objects":[{"StartTime":26449.0,"EndTime":26449.0,"X":411.0,"Y":158.0}]},{"StartTime":26560.0,"Objects":[{"StartTime":26560.0,"EndTime":26560.0,"X":411.0,"Y":158.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":26746.0,"EndTime":26746.0,"X":431.042755,"Y":64.99636,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":26893.0,"Objects":[{"StartTime":26893.0,"EndTime":26893.0,"X":351.0,"Y":96.0}]},{"StartTime":27115.0,"Objects":[{"StartTime":27115.0,"EndTime":27115.0,"X":384.0,"Y":255.0}]},{"StartTime":27226.0,"Objects":[{"StartTime":27226.0,"EndTime":27226.0,"X":384.0,"Y":255.0}]},{"StartTime":27337.0,"Objects":[{"StartTime":27337.0,"EndTime":27337.0,"X":384.0,"Y":255.0}]},{"StartTime":27449.0,"Objects":[{"StartTime":27449.0,"EndTime":27449.0,"X":384.0,"Y":255.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27560.0,"EndTime":27560.0,"X":433.843262,"Y":251.044189,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27635.0,"EndTime":27635.0,"X":384.0,"Y":255.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":27782.0,"Objects":[{"StartTime":27782.0,"EndTime":27782.0,"X":228.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":27857.0,"EndTime":27857.0,"X":186.890381,"Y":201.4605,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28004.0,"Objects":[{"StartTime":28004.0,"EndTime":28004.0,"X":279.0,"Y":342.0}]},{"StartTime":28115.0,"Objects":[{"StartTime":28115.0,"EndTime":28115.0,"X":279.0,"Y":342.0}]},{"StartTime":28226.0,"Objects":[{"StartTime":28226.0,"EndTime":28226.0,"X":279.0,"Y":342.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28301.0,"EndTime":28301.0,"X":279.81955,"Y":292.0067,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":28449.0,"Objects":[{"StartTime":28449.0,"EndTime":28449.0,"X":357.0,"Y":136.0}]},{"StartTime":28560.0,"Objects":[{"StartTime":28560.0,"EndTime":28560.0,"X":307.0,"Y":139.0}]},{"StartTime":28671.0,"Objects":[{"StartTime":28671.0,"EndTime":28671.0,"X":257.0,"Y":142.0}]},{"StartTime":28782.0,"Objects":[{"StartTime":28782.0,"EndTime":28782.0,"X":207.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28893.0,"EndTime":28893.0,"X":157.19812,"Y":149.4466,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":28968.0,"EndTime":28968.0,"X":207.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":29115.0,"Objects":[{"StartTime":29115.0,"EndTime":29115.0,"X":257.0,"Y":142.0}]},{"StartTime":29226.0,"Objects":[{"StartTime":29226.0,"EndTime":29226.0,"X":307.0,"Y":139.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":29412.0,"EndTime":29412.0,"X":404.7521,"Y":160.083786,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":29560.0,"Objects":[{"StartTime":29560.0,"EndTime":29560.0,"X":445.0,"Y":188.0}]},{"StartTime":29671.0,"Objects":[{"StartTime":29671.0,"EndTime":29671.0,"X":468.0,"Y":231.0}]},{"StartTime":29782.0,"Objects":[{"StartTime":29782.0,"EndTime":29782.0,"X":464.0,"Y":280.0}]},{"StartTime":29893.0,"Objects":[{"StartTime":29893.0,"EndTime":29893.0,"X":435.0,"Y":320.0}]},{"StartTime":30004.0,"Objects":[{"StartTime":30004.0,"EndTime":30004.0,"X":389.0,"Y":339.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30079.0,"EndTime":30079.0,"X":339.970978,"Y":329.194183,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30226.0,"Objects":[{"StartTime":30226.0,"EndTime":30226.0,"X":177.0,"Y":222.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30253.0,"EndTime":30253.0,"X":158.74321,"Y":204.921066,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30337.0,"Objects":[{"StartTime":30337.0,"EndTime":30337.0,"X":145.0,"Y":248.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30364.0,"EndTime":30364.0,"X":121.750984,"Y":238.808533,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30449.0,"Objects":[{"StartTime":30449.0,"EndTime":30449.0,"X":130.0,"Y":287.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30476.0,"EndTime":30476.0,"X":105.070015,"Y":288.869751,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30560.0,"Objects":[{"StartTime":30560.0,"EndTime":30560.0,"X":134.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30746.0,"EndTime":30746.0,"X":228.590485,"Y":343.960876,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":30893.0,"Objects":[{"StartTime":30893.0,"EndTime":30893.0,"X":294.0,"Y":251.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":30968.0,"EndTime":30968.0,"X":290.61792,"Y":201.114517,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":31115.0,"Objects":[{"StartTime":31115.0,"EndTime":31115.0,"X":226.0,"Y":74.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":31190.0,"EndTime":31190.0,"X":222.617935,"Y":123.885483,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":31337.0,"Objects":[{"StartTime":31337.0,"EndTime":31337.0,"X":359.0,"Y":150.0}]},{"StartTime":31782.0,"Objects":[{"StartTime":31782.0,"EndTime":31782.0,"X":359.0,"Y":150.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":31857.0,"EndTime":31857.0,"X":439.999084,"Y":129.902328,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32004.0,"Objects":[{"StartTime":32004.0,"EndTime":32004.0,"X":340.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32190.0,"EndTime":32190.0,"X":295.539337,"Y":65.57739,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32449.0,"Objects":[{"StartTime":32449.0,"EndTime":32449.0,"X":176.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":32635.0,"EndTime":32635.0,"X":21.1092339,"Y":143.401688,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":32893.0,"Objects":[{"StartTime":32893.0,"EndTime":32893.0,"X":139.0,"Y":383.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33079.0,"EndTime":33079.0,"X":103.72628,"Y":232.345047,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":33337.0,"Objects":[{"StartTime":33337.0,"EndTime":33337.0,"X":205.0,"Y":291.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33523.0,"EndTime":33523.0,"X":383.4717,"Y":314.406128,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":33782.0,"Objects":[{"StartTime":33782.0,"EndTime":33782.0,"X":506.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":33968.0,"EndTime":33968.0,"X":327.5283,"Y":199.593872,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34226.0,"Objects":[{"StartTime":34226.0,"EndTime":34226.0,"X":182.0,"Y":205.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34412.0,"EndTime":34412.0,"X":326.651245,"Y":199.355911,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":34671.0,"Objects":[{"StartTime":34671.0,"EndTime":34671.0,"X":76.0,"Y":191.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":34857.0,"EndTime":34857.0,"X":70.35591,"Y":46.3487358,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35115.0,"Objects":[{"StartTime":35115.0,"EndTime":35115.0,"X":182.0,"Y":205.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35190.0,"EndTime":35190.0,"X":158.54007,"Y":291.8886,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35337.0,"Objects":[{"StartTime":35337.0,"EndTime":35337.0,"X":257.0,"Y":361.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35412.0,"EndTime":35412.0,"X":280.45993,"Y":274.1114,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":35560.0,"Objects":[{"StartTime":35560.0,"EndTime":35560.0,"X":334.0,"Y":174.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":35746.0,"EndTime":35746.0,"X":399.559753,"Y":305.239624,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36004.0,"Objects":[{"StartTime":36004.0,"EndTime":36004.0,"X":447.0,"Y":191.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36190.0,"EndTime":36190.0,"X":505.1221,"Y":20.6420746,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36449.0,"Objects":[{"StartTime":36449.0,"EndTime":36449.0,"X":334.0,"Y":174.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":36635.0,"EndTime":36635.0,"X":189.812637,"Y":134.164047,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":36893.0,"Objects":[{"StartTime":36893.0,"EndTime":36893.0,"X":133.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37079.0,"EndTime":37079.0,"X":155.499313,"Y":203.5883,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37337.0,"Objects":[{"StartTime":37337.0,"EndTime":37337.0,"X":22.0,"Y":281.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37523.0,"EndTime":37523.0,"X":173.001678,"Y":318.749268,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":37782.0,"Objects":[{"StartTime":37782.0,"EndTime":37782.0,"X":306.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":37968.0,"EndTime":37968.0,"X":154.714111,"Y":203.211349,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38226.0,"Objects":[{"StartTime":38226.0,"EndTime":38226.0,"X":0.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38412.0,"EndTime":38412.0,"X":178.1909,"Y":66.54416,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38671.0,"Objects":[{"StartTime":38671.0,"EndTime":38671.0,"X":363.0,"Y":43.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38746.0,"EndTime":38746.0,"X":393.257751,"Y":124.443619,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":38893.0,"Objects":[{"StartTime":38893.0,"EndTime":38893.0,"X":306.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":38968.0,"EndTime":38968.0,"X":275.742249,"Y":158.556381,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":39115.0,"Objects":[{"StartTime":39115.0,"EndTime":39115.0,"X":421.0,"Y":293.0}]},{"StartTime":39226.0,"Objects":[{"StartTime":39226.0,"EndTime":39226.0,"X":368.0,"Y":278.0}]},{"StartTime":39337.0,"Objects":[{"StartTime":39337.0,"EndTime":39337.0,"X":313.0,"Y":273.0}]},{"StartTime":39449.0,"Objects":[{"StartTime":39449.0,"EndTime":39449.0,"X":259.0,"Y":284.0}]},{"StartTime":39560.0,"Objects":[{"StartTime":39560.0,"EndTime":39560.0,"X":214.0,"Y":316.0}]},{"StartTime":39671.0,"Objects":[{"StartTime":39671.0,"EndTime":39671.0,"X":166.0,"Y":343.0}]},{"StartTime":39782.0,"Objects":[{"StartTime":39782.0,"EndTime":39782.0,"X":112.0,"Y":332.0}]},{"StartTime":39893.0,"Objects":[{"StartTime":39893.0,"EndTime":39893.0,"X":76.0,"Y":289.0}]},{"StartTime":40004.0,"Objects":[{"StartTime":40004.0,"EndTime":40004.0,"X":68.0,"Y":234.0}]},{"StartTime":40115.0,"Objects":[{"StartTime":40115.0,"EndTime":40115.0,"X":94.0,"Y":185.0}]},{"StartTime":40226.0,"Objects":[{"StartTime":40226.0,"EndTime":40226.0,"X":136.0,"Y":149.0}]},{"StartTime":40337.0,"Objects":[{"StartTime":40337.0,"EndTime":40337.0,"X":190.0,"Y":147.0}]},{"StartTime":40449.0,"Objects":[{"StartTime":40449.0,"EndTime":40449.0,"X":241.0,"Y":167.0}]},{"StartTime":40560.0,"Objects":[{"StartTime":40560.0,"EndTime":40560.0,"X":261.0,"Y":217.0}]},{"StartTime":40671.0,"Objects":[{"StartTime":40671.0,"EndTime":40671.0,"X":240.0,"Y":267.0}]},{"StartTime":40782.0,"Objects":[{"StartTime":40782.0,"EndTime":40782.0,"X":188.0,"Y":285.0}]},{"StartTime":40893.0,"Objects":[{"StartTime":40893.0,"EndTime":40893.0,"X":135.0,"Y":268.0}]},{"StartTime":41004.0,"Objects":[{"StartTime":41004.0,"EndTime":41004.0,"X":114.0,"Y":216.0}]},{"StartTime":41115.0,"Objects":[{"StartTime":41115.0,"EndTime":41115.0,"X":137.0,"Y":166.0}]},{"StartTime":41226.0,"Objects":[{"StartTime":41226.0,"EndTime":41226.0,"X":190.0,"Y":147.0}]},{"StartTime":41337.0,"Objects":[{"StartTime":41337.0,"EndTime":41337.0,"X":241.0,"Y":167.0}]},{"StartTime":41449.0,"Objects":[{"StartTime":41449.0,"EndTime":41449.0,"X":295.0,"Y":170.0}]},{"StartTime":41560.0,"Objects":[{"StartTime":41560.0,"EndTime":41560.0,"X":348.0,"Y":157.0}]},{"StartTime":41671.0,"Objects":[{"StartTime":41671.0,"EndTime":41671.0,"X":390.0,"Y":121.0}]},{"StartTime":41782.0,"Objects":[{"StartTime":41782.0,"EndTime":41782.0,"X":394.0,"Y":66.0}]},{"StartTime":41893.0,"Objects":[{"StartTime":41893.0,"EndTime":41893.0,"X":364.0,"Y":18.0}]},{"StartTime":42004.0,"Objects":[{"StartTime":42004.0,"EndTime":42004.0,"X":316.0,"Y":0.0}]},{"StartTime":42115.0,"Objects":[{"StartTime":42115.0,"EndTime":42115.0,"X":262.0,"Y":11.0}]},{"StartTime":42226.0,"Objects":[{"StartTime":42226.0,"EndTime":42226.0,"X":214.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42301.0,"EndTime":42301.0,"X":125.114845,"Y":40.12194,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42449.0,"Objects":[{"StartTime":42449.0,"EndTime":42449.0,"X":2.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":42524.0,"EndTime":42524.0,"X":90.8851547,"Y":163.121948,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":42671.0,"Objects":[{"StartTime":42671.0,"EndTime":42671.0,"X":336.0,"Y":200.0}]},{"StartTime":42782.0,"Objects":[{"StartTime":42782.0,"EndTime":42782.0,"X":288.0,"Y":172.0}]},{"StartTime":42893.0,"Objects":[{"StartTime":42893.0,"EndTime":42893.0,"X":232.0,"Y":173.0}]},{"StartTime":43004.0,"Objects":[{"StartTime":43004.0,"EndTime":43004.0,"X":189.0,"Y":207.0}]},{"StartTime":43115.0,"Objects":[{"StartTime":43115.0,"EndTime":43115.0,"X":160.0,"Y":255.0}]},{"StartTime":43226.0,"Objects":[{"StartTime":43226.0,"EndTime":43226.0,"X":168.0,"Y":308.0}]},{"StartTime":43337.0,"Objects":[{"StartTime":43337.0,"EndTime":43337.0,"X":196.0,"Y":355.0}]},{"StartTime":43449.0,"Objects":[{"StartTime":43449.0,"EndTime":43449.0,"X":249.0,"Y":366.0}]},{"StartTime":43560.0,"Objects":[{"StartTime":43560.0,"EndTime":43560.0,"X":295.0,"Y":337.0}]},{"StartTime":43671.0,"Objects":[{"StartTime":43671.0,"EndTime":43671.0,"X":303.0,"Y":283.0}]},{"StartTime":43782.0,"Objects":[{"StartTime":43782.0,"EndTime":43782.0,"X":277.0,"Y":233.0}]},{"StartTime":43893.0,"Objects":[{"StartTime":43893.0,"EndTime":43893.0,"X":224.0,"Y":216.0}]},{"StartTime":44004.0,"Objects":[{"StartTime":44004.0,"EndTime":44004.0,"X":172.0,"Y":228.0}]},{"StartTime":44115.0,"Objects":[{"StartTime":44115.0,"EndTime":44115.0,"X":124.0,"Y":248.0}]},{"StartTime":44226.0,"Objects":[{"StartTime":44226.0,"EndTime":44226.0,"X":72.0,"Y":232.0}]},{"StartTime":44337.0,"Objects":[{"StartTime":44337.0,"EndTime":44337.0,"X":32.0,"Y":196.0}]},{"StartTime":44449.0,"Objects":[{"StartTime":44449.0,"EndTime":44449.0,"X":28.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44476.0,"EndTime":44476.0,"X":4.282917,"Y":136.0943,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44560.0,"Objects":[{"StartTime":44560.0,"EndTime":44560.0,"X":62.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44587.0,"EndTime":44587.0,"X":47.14022,"Y":75.8956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44671.0,"Objects":[{"StartTime":44671.0,"EndTime":44671.0,"X":119.0,"Y":77.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44698.0,"EndTime":44698.0,"X":119.0,"Y":52.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44782.0,"Objects":[{"StartTime":44782.0,"EndTime":44782.0,"X":175.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44809.0,"EndTime":44809.0,"X":189.276611,"Y":75.47737,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":44893.0,"Objects":[{"StartTime":44893.0,"EndTime":44893.0,"X":210.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":44920.0,"EndTime":44920.0,"X":233.624649,"Y":135.822235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45004.0,"Objects":[{"StartTime":45004.0,"EndTime":45004.0,"X":228.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45031.0,"EndTime":45031.0,"X":204.282913,"Y":207.9057,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45115.0,"Objects":[{"StartTime":45115.0,"EndTime":45115.0,"X":262.0,"Y":248.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45142.0,"EndTime":45142.0,"X":247.140228,"Y":268.1044,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45226.0,"Objects":[{"StartTime":45226.0,"EndTime":45226.0,"X":319.0,"Y":267.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45253.0,"EndTime":45253.0,"X":319.0,"Y":292.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45337.0,"Objects":[{"StartTime":45337.0,"EndTime":45337.0,"X":375.0,"Y":248.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45364.0,"EndTime":45364.0,"X":389.2766,"Y":268.522644,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45449.0,"Objects":[{"StartTime":45449.0,"EndTime":45449.0,"X":410.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45476.0,"EndTime":45476.0,"X":433.624664,"Y":208.177765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45560.0,"Objects":[{"StartTime":45560.0,"EndTime":45560.0,"X":410.0,"Y":141.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":45587.0,"EndTime":45587.0,"X":433.624664,"Y":132.822235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":45671.0,"Objects":[{"StartTime":45671.0,"EndTime":45671.0,"X":375.0,"Y":93.0}]},{"StartTime":46004.0,"Objects":[{"StartTime":46004.0,"EndTime":46004.0,"X":375.0,"Y":93.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46190.0,"EndTime":46190.0,"X":325.360229,"Y":87.0089951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46337.0,"Objects":[{"StartTime":46337.0,"EndTime":46337.0,"X":317.0,"Y":167.0}]},{"StartTime":46449.0,"Objects":[{"StartTime":46449.0,"EndTime":46449.0,"X":317.0,"Y":167.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":46635.0,"EndTime":46635.0,"X":167.871689,"Y":183.147659,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":46782.0,"Objects":[{"StartTime":46782.0,"EndTime":46782.0,"X":53.0,"Y":101.0}]},{"StartTime":46893.0,"Objects":[{"StartTime":46893.0,"EndTime":46893.0,"X":108.0,"Y":98.0}]},{"StartTime":47004.0,"Objects":[{"StartTime":47004.0,"EndTime":47004.0,"X":152.0,"Y":130.0}]},{"StartTime":47115.0,"Objects":[{"StartTime":47115.0,"EndTime":47115.0,"X":167.0,"Y":183.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":47190.0,"EndTime":47190.0,"X":161.719025,"Y":257.813843,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":47337.0,"Objects":[{"StartTime":47337.0,"EndTime":47337.0,"X":49.0,"Y":308.0}]},{"StartTime":47449.0,"Objects":[{"StartTime":47449.0,"EndTime":47449.0,"X":49.0,"Y":308.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":47524.0,"EndTime":47524.0,"X":45.39839,"Y":233.086517,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":47671.0,"Objects":[{"StartTime":47671.0,"EndTime":47671.0,"X":205.0,"Y":140.0}]},{"StartTime":47782.0,"Objects":[{"StartTime":47782.0,"EndTime":47782.0,"X":205.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":47857.0,"EndTime":47857.0,"X":208.601608,"Y":214.913483,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":48004.0,"Objects":[{"StartTime":48004.0,"EndTime":48004.0,"X":310.0,"Y":353.0}]},{"StartTime":48115.0,"Objects":[{"StartTime":48115.0,"EndTime":48115.0,"X":346.0,"Y":347.0}]},{"StartTime":48226.0,"Objects":[{"StartTime":48226.0,"EndTime":48226.0,"X":383.0,"Y":341.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":48412.0,"EndTime":48412.0,"X":429.122864,"Y":223.2328,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":48560.0,"Objects":[{"StartTime":48560.0,"EndTime":48560.0,"X":317.0,"Y":167.0}]},{"StartTime":48671.0,"Objects":[{"StartTime":48671.0,"EndTime":48671.0,"X":307.0,"Y":112.0}]},{"StartTime":48782.0,"Objects":[{"StartTime":48782.0,"EndTime":48782.0,"X":333.0,"Y":64.0}]},{"StartTime":48893.0,"Objects":[{"StartTime":48893.0,"EndTime":48893.0,"X":384.0,"Y":43.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":48968.0,"EndTime":48968.0,"X":458.365082,"Y":52.7382851,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49115.0,"Objects":[{"StartTime":49115.0,"EndTime":49115.0,"X":506.0,"Y":161.0}]},{"StartTime":49226.0,"Objects":[{"StartTime":49226.0,"EndTime":49226.0,"X":506.0,"Y":161.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":49301.0,"EndTime":49301.0,"X":431.634918,"Y":151.261719,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49449.0,"Objects":[{"StartTime":49449.0,"EndTime":49449.0,"X":268.0,"Y":121.0}]},{"StartTime":49560.0,"Objects":[{"StartTime":49560.0,"EndTime":49560.0,"X":268.0,"Y":121.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":49635.0,"EndTime":49635.0,"X":342.365082,"Y":111.261719,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":49782.0,"Objects":[{"StartTime":49782.0,"EndTime":49782.0,"X":263.0,"Y":263.0}]},{"StartTime":49893.0,"Objects":[{"StartTime":49893.0,"EndTime":49893.0,"X":228.0,"Y":247.0}]},{"StartTime":50004.0,"Objects":[{"StartTime":50004.0,"EndTime":50004.0,"X":193.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50190.0,"EndTime":50190.0,"X":64.17105,"Y":285.840179,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50337.0,"Objects":[{"StartTime":50337.0,"EndTime":50337.0,"X":121.0,"Y":164.0}]},{"StartTime":50449.0,"Objects":[{"StartTime":50449.0,"EndTime":50449.0,"X":120.0,"Y":109.0}]},{"StartTime":50560.0,"Objects":[{"StartTime":50560.0,"EndTime":50560.0,"X":91.0,"Y":62.0}]},{"StartTime":50671.0,"Objects":[{"StartTime":50671.0,"EndTime":50671.0,"X":42.0,"Y":37.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":50746.0,"EndTime":50746.0,"X":116.636856,"Y":29.628458,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":50893.0,"Objects":[{"StartTime":50893.0,"EndTime":50893.0,"X":242.0,"Y":84.0}]},{"StartTime":51004.0,"Objects":[{"StartTime":51004.0,"EndTime":51004.0,"X":242.0,"Y":84.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":51079.0,"EndTime":51079.0,"X":310.8907,"Y":113.649155,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":51226.0,"Objects":[{"StartTime":51226.0,"EndTime":51226.0,"X":341.0,"Y":245.0}]},{"StartTime":51337.0,"Objects":[{"StartTime":51337.0,"EndTime":51337.0,"X":341.0,"Y":245.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":51412.0,"EndTime":51412.0,"X":351.364716,"Y":319.280365,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":51560.0,"Objects":[{"StartTime":51560.0,"EndTime":51560.0,"X":163.0,"Y":192.0}]},{"StartTime":51671.0,"Objects":[{"StartTime":51671.0,"EndTime":51671.0,"X":198.0,"Y":181.0}]},{"StartTime":51782.0,"Objects":[{"StartTime":51782.0,"EndTime":51782.0,"X":233.0,"Y":170.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":51968.0,"EndTime":51968.0,"X":365.301575,"Y":207.308578,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52115.0,"Objects":[{"StartTime":52115.0,"EndTime":52115.0,"X":458.0,"Y":297.0}]},{"StartTime":52226.0,"Objects":[{"StartTime":52226.0,"EndTime":52226.0,"X":460.0,"Y":240.0}]},{"StartTime":52337.0,"Objects":[{"StartTime":52337.0,"EndTime":52337.0,"X":463.0,"Y":184.0}]},{"StartTime":52449.0,"Objects":[{"StartTime":52449.0,"EndTime":52449.0,"X":466.0,"Y":128.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52635.0,"EndTime":52635.0,"X":420.259766,"Y":144.350586,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":52782.0,"Objects":[{"StartTime":52782.0,"EndTime":52782.0,"X":272.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":52857.0,"EndTime":52857.0,"X":197.534241,"Y":180.0641,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":53004.0,"Objects":[{"StartTime":53004.0,"EndTime":53004.0,"X":338.0,"Y":25.0}]},{"StartTime":53115.0,"Objects":[{"StartTime":53115.0,"EndTime":53115.0,"X":338.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":53190.0,"EndTime":53190.0,"X":344.228424,"Y":99.74094,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":53337.0,"Objects":[{"StartTime":53337.0,"EndTime":53337.0,"X":179.0,"Y":225.0}]},{"StartTime":53449.0,"Objects":[{"StartTime":53449.0,"EndTime":53449.0,"X":175.0,"Y":187.0}]},{"StartTime":53560.0,"Objects":[{"StartTime":53560.0,"EndTime":53560.0,"X":172.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":53746.0,"EndTime":53746.0,"X":321.020142,"Y":166.117188,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":53893.0,"Objects":[{"StartTime":53893.0,"EndTime":53893.0,"X":296.0,"Y":293.0}]},{"StartTime":54004.0,"Objects":[{"StartTime":54004.0,"EndTime":54004.0,"X":259.0,"Y":334.0}]},{"StartTime":54115.0,"Objects":[{"StartTime":54115.0,"EndTime":54115.0,"X":209.0,"Y":357.0}]},{"StartTime":54226.0,"Objects":[{"StartTime":54226.0,"EndTime":54226.0,"X":154.0,"Y":358.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54301.0,"EndTime":54301.0,"X":79.53424,"Y":349.064117,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54449.0,"Objects":[{"StartTime":54449.0,"EndTime":54449.0,"X":179.0,"Y":225.0}]},{"StartTime":54560.0,"Objects":[{"StartTime":54560.0,"EndTime":54560.0,"X":179.0,"Y":225.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54635.0,"EndTime":54635.0,"X":253.565521,"Y":233.061142,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":54782.0,"Objects":[{"StartTime":54782.0,"EndTime":54782.0,"X":91.0,"Y":140.0}]},{"StartTime":54893.0,"Objects":[{"StartTime":54893.0,"EndTime":54893.0,"X":91.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":54968.0,"EndTime":54968.0,"X":16.4230576,"Y":147.95488,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":55115.0,"Objects":[{"StartTime":55115.0,"EndTime":55115.0,"X":191.0,"Y":43.0}]},{"StartTime":55226.0,"Objects":[{"StartTime":55226.0,"EndTime":55226.0,"X":195.0,"Y":80.0}]},{"StartTime":55337.0,"Objects":[{"StartTime":55337.0,"EndTime":55337.0,"X":199.0,"Y":117.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":55523.0,"EndTime":55523.0,"X":163.504578,"Y":187.945709,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":55671.0,"Objects":[{"StartTime":55671.0,"EndTime":55671.0,"X":289.0,"Y":165.0}]},{"StartTime":55782.0,"Objects":[{"StartTime":55782.0,"EndTime":55782.0,"X":344.0,"Y":159.0}]},{"StartTime":55893.0,"Objects":[{"StartTime":55893.0,"EndTime":55893.0,"X":399.0,"Y":154.0}]},{"StartTime":56004.0,"Objects":[{"StartTime":56004.0,"EndTime":56004.0,"X":454.0,"Y":149.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56079.0,"EndTime":56079.0,"X":460.084534,"Y":223.752777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56226.0,"Objects":[{"StartTime":56226.0,"EndTime":56226.0,"X":359.0,"Y":281.0}]},{"StartTime":56337.0,"Objects":[{"StartTime":56337.0,"EndTime":56337.0,"X":359.0,"Y":281.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56412.0,"EndTime":56412.0,"X":364.280975,"Y":355.813843,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56560.0,"Objects":[{"StartTime":56560.0,"EndTime":56560.0,"X":262.0,"Y":132.0}]},{"StartTime":56671.0,"Objects":[{"StartTime":56671.0,"EndTime":56671.0,"X":262.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":56746.0,"EndTime":56746.0,"X":267.280975,"Y":206.813843,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":56893.0,"Objects":[{"StartTime":56893.0,"EndTime":56893.0,"X":148.0,"Y":358.0}]},{"StartTime":57004.0,"Objects":[{"StartTime":57004.0,"EndTime":57004.0,"X":110.0,"Y":355.0}]},{"StartTime":57115.0,"Objects":[{"StartTime":57115.0,"EndTime":57115.0,"X":79.0,"Y":333.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57301.0,"EndTime":57301.0,"X":200.969864,"Y":306.864716,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":57449.0,"Objects":[{"StartTime":57449.0,"EndTime":57449.0,"X":329.0,"Y":327.0}]},{"StartTime":57560.0,"Objects":[{"StartTime":57560.0,"EndTime":57560.0,"X":359.0,"Y":281.0}]},{"StartTime":57671.0,"Objects":[{"StartTime":57671.0,"EndTime":57671.0,"X":364.0,"Y":226.0}]},{"StartTime":57782.0,"Objects":[{"StartTime":57782.0,"EndTime":57782.0,"X":343.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":57857.0,"EndTime":57857.0,"X":268.32077,"Y":181.929,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58004.0,"Objects":[{"StartTime":58004.0,"EndTime":58004.0,"X":342.0,"Y":20.0}]},{"StartTime":58115.0,"Objects":[{"StartTime":58115.0,"EndTime":58115.0,"X":342.0,"Y":20.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58190.0,"EndTime":58190.0,"X":384.690735,"Y":81.66441,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58337.0,"Objects":[{"StartTime":58337.0,"EndTime":58337.0,"X":210.0,"Y":97.0}]},{"StartTime":58449.0,"Objects":[{"StartTime":58449.0,"EndTime":58449.0,"X":210.0,"Y":97.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58524.0,"EndTime":58524.0,"X":240.894089,"Y":28.6585312,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58671.0,"Objects":[{"StartTime":58671.0,"EndTime":58671.0,"X":343.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58726.0,"EndTime":58726.0,"X":305.7774,"Y":176.959091,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58782.0,"EndTime":58782.0,"X":342.7744,"Y":175.011871,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58801.0,"EndTime":58801.0,"X":305.551819,"Y":176.970963,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":58893.0,"Objects":[{"StartTime":58893.0,"EndTime":58893.0,"X":209.0,"Y":209.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":58948.0,"EndTime":58948.0,"X":244.437592,"Y":220.55574,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59004.0,"EndTime":59004.0,"X":209.214767,"Y":209.070038,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59023.0,"EndTime":59023.0,"X":244.652374,"Y":220.625778,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59115.0,"Objects":[{"StartTime":59115.0,"EndTime":59115.0,"X":316.0,"Y":267.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59170.0,"EndTime":59170.0,"X":290.0395,"Y":293.747162,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59226.0,"EndTime":59226.0,"X":315.842651,"Y":267.1621,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59245.0,"EndTime":59245.0,"X":289.882172,"Y":293.909271,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59337.0,"Objects":[{"StartTime":59337.0,"EndTime":59337.0,"X":211.0,"Y":329.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59392.0,"EndTime":59392.0,"X":199.992722,"Y":293.388245,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59448.0,"EndTime":59448.0,"X":210.933289,"Y":328.78418,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59467.0,"EndTime":59467.0,"X":199.92601,"Y":293.1724,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59560.0,"Objects":[{"StartTime":59560.0,"EndTime":59560.0,"X":103.0,"Y":287.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59587.0,"EndTime":59587.0,"X":67.42438,"Y":275.141449,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59671.0,"Objects":[{"StartTime":59671.0,"EndTime":59671.0,"X":108.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59698.0,"EndTime":59698.0,"X":72.42438,"Y":228.141464,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59782.0,"Objects":[{"StartTime":59782.0,"EndTime":59782.0,"X":113.0,"Y":193.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":59809.0,"EndTime":59809.0,"X":77.42438,"Y":181.141464,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":59893.0,"Objects":[{"StartTime":59893.0,"EndTime":59893.0,"X":120.0,"Y":146.0}]},{"StartTime":60226.0,"Objects":[{"StartTime":60226.0,"EndTime":60226.0,"X":120.0,"Y":146.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":60412.0,"EndTime":60412.0,"X":130.32193,"Y":46.53414,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":60893.0,"Objects":[{"StartTime":60893.0,"EndTime":60893.0,"X":374.0,"Y":174.0}]},{"StartTime":61115.0,"Objects":[{"StartTime":61115.0,"EndTime":61115.0,"X":326.0,"Y":323.0}]},{"StartTime":61337.0,"Objects":[{"StartTime":61337.0,"EndTime":61337.0,"X":462.0,"Y":267.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":61412.0,"EndTime":61412.0,"X":512.0,"Y":267.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":61560.0,"Objects":[{"StartTime":61560.0,"EndTime":61560.0,"X":344.0,"Y":182.0}]},{"StartTime":61671.0,"Objects":[{"StartTime":61671.0,"EndTime":61671.0,"X":344.0,"Y":182.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":61746.0,"EndTime":61746.0,"X":302.261353,"Y":209.529739,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":61893.0,"Objects":[{"StartTime":61893.0,"EndTime":61893.0,"X":174.0,"Y":241.0}]},{"StartTime":62004.0,"Objects":[{"StartTime":62004.0,"EndTime":62004.0,"X":174.0,"Y":241.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62079.0,"EndTime":62079.0,"X":215.738632,"Y":268.529724,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":62226.0,"Objects":[{"StartTime":62226.0,"EndTime":62226.0,"X":66.0,"Y":161.0}]},{"StartTime":62449.0,"Objects":[{"StartTime":62449.0,"EndTime":62449.0,"X":104.0,"Y":326.0}]},{"StartTime":62671.0,"Objects":[{"StartTime":62671.0,"EndTime":62671.0,"X":269.0,"Y":288.0}]},{"StartTime":62893.0,"Objects":[{"StartTime":62893.0,"EndTime":62893.0,"X":231.0,"Y":122.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":62968.0,"EndTime":62968.0,"X":220.153473,"Y":73.19064,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63115.0,"Objects":[{"StartTime":63115.0,"EndTime":63115.0,"X":296.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63190.0,"EndTime":63190.0,"X":306.846527,"Y":48.8093529,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63337.0,"Objects":[{"StartTime":63337.0,"EndTime":63337.0,"X":373.0,"Y":120.0}]},{"StartTime":63449.0,"Objects":[{"StartTime":63449.0,"EndTime":63449.0,"X":373.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63635.0,"EndTime":63635.0,"X":465.0729,"Y":136.1981,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":63782.0,"Objects":[{"StartTime":63782.0,"EndTime":63782.0,"X":400.0,"Y":216.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":63968.0,"EndTime":63968.0,"X":301.005066,"Y":230.142136,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":64226.0,"Objects":[{"StartTime":64226.0,"EndTime":64226.0,"X":48.0,"Y":160.0}]},{"StartTime":64449.0,"Objects":[{"StartTime":64449.0,"EndTime":64449.0,"X":216.0,"Y":200.0}]},{"StartTime":64671.0,"Objects":[{"StartTime":64671.0,"EndTime":64671.0,"X":104.0,"Y":288.0}]},{"StartTime":64893.0,"Objects":[{"StartTime":64893.0,"EndTime":64893.0,"X":216.0,"Y":200.0}]},{"StartTime":65115.0,"Objects":[{"StartTime":65115.0,"EndTime":65115.0,"X":160.0,"Y":64.0}]},{"StartTime":65226.0,"Objects":[{"StartTime":65226.0,"EndTime":65226.0,"X":160.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65301.0,"EndTime":65301.0,"X":160.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65449.0,"Objects":[{"StartTime":65449.0,"EndTime":65449.0,"X":264.0,"Y":104.0}]},{"StartTime":65560.0,"Objects":[{"StartTime":65560.0,"EndTime":65560.0,"X":264.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":65635.0,"EndTime":65635.0,"X":264.0,"Y":154.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":65782.0,"Objects":[{"StartTime":65782.0,"EndTime":65782.0,"X":456.0,"Y":160.0}]},{"StartTime":66004.0,"Objects":[{"StartTime":66004.0,"EndTime":66004.0,"X":288.0,"Y":192.0}]},{"StartTime":66226.0,"Objects":[{"StartTime":66226.0,"EndTime":66226.0,"X":336.0,"Y":48.0}]},{"StartTime":66449.0,"Objects":[{"StartTime":66449.0,"EndTime":66449.0,"X":408.0,"Y":296.0}]},{"StartTime":66671.0,"Objects":[{"StartTime":66671.0,"EndTime":66671.0,"X":196.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":66857.0,"EndTime":66857.0,"X":199.142975,"Y":244.112289,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67004.0,"Objects":[{"StartTime":67004.0,"EndTime":67004.0,"X":288.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67079.0,"EndTime":67079.0,"X":335.8913,"Y":206.3674,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67226.0,"Objects":[{"StartTime":67226.0,"EndTime":67226.0,"X":297.0,"Y":308.0}]},{"StartTime":67337.0,"Objects":[{"StartTime":67337.0,"EndTime":67337.0,"X":297.0,"Y":308.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67412.0,"EndTime":67412.0,"X":249.108688,"Y":322.3674,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":67560.0,"Objects":[{"StartTime":67560.0,"EndTime":67560.0,"X":107.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":67746.0,"EndTime":67746.0,"X":198.869858,"Y":243.930862,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":68004.0,"Objects":[{"StartTime":68004.0,"EndTime":68004.0,"X":460.0,"Y":300.0}]},{"StartTime":68226.0,"Objects":[{"StartTime":68226.0,"EndTime":68226.0,"X":407.0,"Y":107.0}]},{"StartTime":68449.0,"Objects":[{"StartTime":68449.0,"EndTime":68449.0,"X":364.0,"Y":364.0}]},{"StartTime":68671.0,"Objects":[{"StartTime":68671.0,"EndTime":68671.0,"X":345.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":68857.0,"EndTime":68857.0,"X":482.955933,"Y":34.298172,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69115.0,"Objects":[{"StartTime":69115.0,"EndTime":69115.0,"X":167.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69301.0,"EndTime":69301.0,"X":29.044054,"Y":34.29817,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":69560.0,"Objects":[{"StartTime":69560.0,"EndTime":69560.0,"X":407.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":69746.0,"EndTime":69746.0,"X":460.866516,"Y":235.137,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70004.0,"Objects":[{"StartTime":70004.0,"EndTime":70004.0,"X":158.0,"Y":202.0}]},{"StartTime":70226.0,"Objects":[{"StartTime":70226.0,"EndTime":70226.0,"X":354.0,"Y":202.0}]},{"StartTime":70449.0,"Objects":[{"StartTime":70449.0,"EndTime":70449.0,"X":105.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":70635.0,"EndTime":70635.0,"X":49.8107719,"Y":234.398621,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":70893.0,"Objects":[{"StartTime":70893.0,"EndTime":70893.0,"X":364.0,"Y":281.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71079.0,"EndTime":71079.0,"X":492.137024,"Y":334.866516,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":71337.0,"Objects":[{"StartTime":71337.0,"EndTime":71337.0,"X":424.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":71781.0,"EndTime":71781.0,"X":256.21228,"Y":97.33865,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72225.0,"EndTime":72225.0,"X":154.641,"Y":186.241669,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72670.0,"EndTime":72670.0,"X":297.514374,"Y":348.106232,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":72856.0,"EndTime":72856.0,"X":161.609192,"Y":331.680847,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73337.0,"Objects":[{"StartTime":73337.0,"EndTime":73337.0,"X":161.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73364.0,"EndTime":73364.0,"X":186.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73449.0,"Objects":[{"StartTime":73449.0,"EndTime":73449.0,"X":186.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73476.0,"EndTime":73476.0,"X":211.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73560.0,"Objects":[{"StartTime":73560.0,"EndTime":73560.0,"X":211.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73587.0,"EndTime":73587.0,"X":236.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73671.0,"Objects":[{"StartTime":73671.0,"EndTime":73671.0,"X":236.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73698.0,"EndTime":73698.0,"X":261.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":73782.0,"Objects":[{"StartTime":73782.0,"EndTime":73782.0,"X":297.0,"Y":339.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":73857.0,"EndTime":73857.0,"X":346.751862,"Y":343.9752,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74004.0,"Objects":[{"StartTime":74004.0,"EndTime":74004.0,"X":321.0,"Y":181.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74079.0,"EndTime":74079.0,"X":316.4732,"Y":230.794662,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74226.0,"Objects":[{"StartTime":74226.0,"EndTime":74226.0,"X":184.0,"Y":116.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74301.0,"EndTime":74301.0,"X":179.4732,"Y":66.20534,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":74449.0,"Objects":[{"StartTime":74449.0,"EndTime":74449.0,"X":283.0,"Y":82.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":74635.0,"EndTime":74635.0,"X":377.3881,"Y":94.27898,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75115.0,"Objects":[{"StartTime":75115.0,"EndTime":75115.0,"X":150.0,"Y":188.0}]},{"StartTime":75337.0,"Objects":[{"StartTime":75337.0,"EndTime":75337.0,"X":127.0,"Y":46.0}]},{"StartTime":75560.0,"Objects":[{"StartTime":75560.0,"EndTime":75560.0,"X":157.0,"Y":218.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":75746.0,"EndTime":75746.0,"X":252.9821,"Y":201.569382,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":75893.0,"Objects":[{"StartTime":75893.0,"EndTime":75893.0,"X":322.0,"Y":283.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":76079.0,"EndTime":76079.0,"X":418.1396,"Y":269.035919,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":76226.0,"Objects":[{"StartTime":76226.0,"EndTime":76226.0,"X":439.0,"Y":170.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":76412.0,"EndTime":76412.0,"X":356.0464,"Y":190.903046,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":76671.0,"Objects":[{"StartTime":76671.0,"EndTime":76671.0,"X":219.0,"Y":92.0}]},{"StartTime":76893.0,"Objects":[{"StartTime":76893.0,"EndTime":76893.0,"X":371.0,"Y":22.0}]},{"StartTime":77115.0,"Objects":[{"StartTime":77115.0,"EndTime":77115.0,"X":356.0,"Y":191.0}]},{"StartTime":77337.0,"Objects":[{"StartTime":77337.0,"EndTime":77337.0,"X":194.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77523.0,"EndTime":77523.0,"X":94.5583954,"Y":81.89803,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":77671.0,"Objects":[{"StartTime":77671.0,"EndTime":77671.0,"X":15.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":77857.0,"EndTime":77857.0,"X":97.3508148,"Y":208.780609,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78004.0,"Objects":[{"StartTime":78004.0,"EndTime":78004.0,"X":26.0,"Y":302.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78079.0,"EndTime":78079.0,"X":20.9243164,"Y":252.258286,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78226.0,"Objects":[{"StartTime":78226.0,"EndTime":78226.0,"X":181.0,"Y":348.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":78412.0,"EndTime":78412.0,"X":276.906036,"Y":335.082367,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":78671.0,"Objects":[{"StartTime":78671.0,"EndTime":78671.0,"X":422.0,"Y":231.0}]},{"StartTime":78893.0,"Objects":[{"StartTime":78893.0,"EndTime":78893.0,"X":435.0,"Y":376.0}]},{"StartTime":79115.0,"Objects":[{"StartTime":79115.0,"EndTime":79115.0,"X":271.0,"Y":230.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79301.0,"EndTime":79301.0,"X":280.305237,"Y":130.433868,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79449.0,"Objects":[{"StartTime":79449.0,"EndTime":79449.0,"X":367.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79635.0,"EndTime":79635.0,"X":392.598328,"Y":147.861,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":79782.0,"Objects":[{"StartTime":79782.0,"EndTime":79782.0,"X":280.0,"Y":130.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":79857.0,"EndTime":79857.0,"X":230.414871,"Y":136.4277,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":80004.0,"Objects":[{"StartTime":80004.0,"EndTime":80004.0,"X":104.0,"Y":280.0}]},{"StartTime":80226.0,"Objects":[{"StartTime":80226.0,"EndTime":80226.0,"X":243.0,"Y":207.0}]},{"StartTime":80449.0,"Objects":[{"StartTime":80449.0,"EndTime":80449.0,"X":104.0,"Y":134.0}]},{"StartTime":80671.0,"Objects":[{"StartTime":80671.0,"EndTime":80671.0,"X":243.0,"Y":61.0}]},{"StartTime":80893.0,"Objects":[{"StartTime":80893.0,"EndTime":80893.0,"X":384.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":80968.0,"EndTime":80968.0,"X":335.600159,"Y":201.548111,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":81115.0,"Objects":[{"StartTime":81115.0,"EndTime":81115.0,"X":259.0,"Y":262.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":81190.0,"EndTime":81190.0,"X":210.492874,"Y":249.873215,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":81337.0,"Objects":[{"StartTime":81337.0,"EndTime":81337.0,"X":83.0,"Y":157.0}]},{"StartTime":81449.0,"Objects":[{"StartTime":81449.0,"EndTime":81449.0,"X":60.0,"Y":186.0}]},{"StartTime":81560.0,"Objects":[{"StartTime":81560.0,"EndTime":81560.0,"X":48.0,"Y":221.0}]},{"StartTime":81671.0,"Objects":[{"StartTime":81671.0,"EndTime":81671.0,"X":48.0,"Y":259.0}]},{"StartTime":81782.0,"Objects":[{"StartTime":81782.0,"EndTime":81782.0,"X":61.0,"Y":294.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":81968.0,"EndTime":81968.0,"X":152.567673,"Y":316.582672,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":82226.0,"Objects":[{"StartTime":82226.0,"EndTime":82226.0,"X":350.0,"Y":269.0}]},{"StartTime":82449.0,"Objects":[{"StartTime":82449.0,"EndTime":82449.0,"X":226.0,"Y":187.0}]},{"StartTime":82671.0,"Objects":[{"StartTime":82671.0,"EndTime":82671.0,"X":265.0,"Y":365.0}]},{"StartTime":82893.0,"Objects":[{"StartTime":82893.0,"EndTime":82893.0,"X":444.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83079.0,"EndTime":83079.0,"X":420.485352,"Y":85.56759,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":83337.0,"Objects":[{"StartTime":83337.0,"EndTime":83337.0,"X":211.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83523.0,"EndTime":83523.0,"X":135.939285,"Y":144.596344,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":83782.0,"Objects":[{"StartTime":83782.0,"EndTime":83782.0,"X":270.0,"Y":337.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":83968.0,"EndTime":83968.0,"X":285.4127,"Y":210.422119,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":84226.0,"Objects":[{"StartTime":84226.0,"EndTime":84226.0,"X":427.0,"Y":124.0}]},{"StartTime":84337.0,"Objects":[{"StartTime":84337.0,"EndTime":84337.0,"X":427.0,"Y":124.0}]},{"StartTime":84449.0,"Objects":[{"StartTime":84449.0,"EndTime":84449.0,"X":427.0,"Y":124.0}]},{"StartTime":84671.0,"Objects":[{"StartTime":84671.0,"EndTime":84671.0,"X":136.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":85079.0,"EndTime":85079.0,"X":235.2148,"Y":264.073,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":85337.0,"Objects":[{"StartTime":85337.0,"EndTime":85337.0,"X":235.0,"Y":99.0}]},{"StartTime":85449.0,"Objects":[{"StartTime":85449.0,"EndTime":85449.0,"X":278.0,"Y":92.0}]},{"StartTime":85560.0,"Objects":[{"StartTime":85560.0,"EndTime":85560.0,"X":319.0,"Y":109.0}]},{"StartTime":85782.0,"Objects":[{"StartTime":85782.0,"EndTime":85782.0,"X":174.0,"Y":43.0}]},{"StartTime":85893.0,"Objects":[{"StartTime":85893.0,"EndTime":85893.0,"X":129.0,"Y":35.0}]},{"StartTime":86004.0,"Objects":[{"StartTime":86004.0,"EndTime":86004.0,"X":86.0,"Y":47.0}]},{"StartTime":86115.0,"Objects":[{"StartTime":86115.0,"EndTime":86115.0,"X":52.0,"Y":75.0}]},{"StartTime":86226.0,"Objects":[{"StartTime":86226.0,"EndTime":86226.0,"X":32.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86281.0,"EndTime":86281.0,"X":35.0821877,"Y":139.6575,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86337.0,"EndTime":86337.0,"X":32.01868,"Y":115.149437,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86356.0,"EndTime":86356.0,"X":35.10087,"Y":139.806946,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86449.0,"Objects":[{"StartTime":86449.0,"EndTime":86449.0,"X":83.0,"Y":252.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86504.0,"EndTime":86504.0,"X":85.47261,"Y":227.273926,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86560.0,"EndTime":86560.0,"X":83.0149841,"Y":251.850143,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86579.0,"EndTime":86579.0,"X":85.4875946,"Y":227.124069,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":86671.0,"Objects":[{"StartTime":86671.0,"EndTime":86671.0,"X":174.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86782.0,"EndTime":86782.0,"X":223.892853,"Y":185.728333,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":86857.0,"EndTime":86857.0,"X":174.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87004.0,"Objects":[{"StartTime":87004.0,"EndTime":87004.0,"X":83.0,"Y":252.0}]},{"StartTime":87115.0,"Objects":[{"StartTime":87115.0,"EndTime":87115.0,"X":83.0,"Y":252.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87190.0,"EndTime":87190.0,"X":90.5399,"Y":301.428223,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87337.0,"Objects":[{"StartTime":87337.0,"EndTime":87337.0,"X":185.0,"Y":379.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87412.0,"EndTime":87412.0,"X":203.254379,"Y":332.451355,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87560.0,"Objects":[{"StartTime":87560.0,"EndTime":87560.0,"X":310.0,"Y":279.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87635.0,"EndTime":87635.0,"X":359.670441,"Y":284.7312,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":87782.0,"Objects":[{"StartTime":87782.0,"EndTime":87782.0,"X":490.0,"Y":357.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87837.0,"EndTime":87837.0,"X":492.549316,"Y":381.64325,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":87857.0,"EndTime":87857.0,"X":490.0,"Y":357.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88004.0,"Objects":[{"StartTime":88004.0,"EndTime":88004.0,"X":448.701019,"Y":200.701}]},{"StartTime":88060.0,"Objects":[{"StartTime":88060.0,"EndTime":88060.0,"X":452.3505,"Y":204.35051}]},{"StartTime":88115.0,"Objects":[{"StartTime":88115.0,"EndTime":88115.0,"X":456.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88190.0,"EndTime":88190.0,"X":465.805817,"Y":158.970963,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88337.0,"Objects":[{"StartTime":88337.0,"EndTime":88337.0,"X":352.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88412.0,"EndTime":88412.0,"X":367.8114,"Y":87.43416,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88560.0,"Objects":[{"StartTime":88560.0,"EndTime":88560.0,"X":256.0,"Y":136.0}]},{"StartTime":88671.0,"Objects":[{"StartTime":88671.0,"EndTime":88671.0,"X":256.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":88746.0,"EndTime":88746.0,"X":242.263947,"Y":87.9238,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":88893.0,"Objects":[{"StartTime":88893.0,"EndTime":88893.0,"X":48.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89079.0,"EndTime":89079.0,"X":203.680511,"Y":208.498886,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89226.0,"Objects":[{"StartTime":89226.0,"EndTime":89226.0,"X":328.0,"Y":336.0}]},{"StartTime":89337.0,"Objects":[{"StartTime":89337.0,"EndTime":89337.0,"X":424.0,"Y":328.0}]},{"StartTime":89449.0,"Objects":[{"StartTime":89449.0,"EndTime":89449.0,"X":472.0,"Y":248.0}]},{"StartTime":89560.0,"Objects":[{"StartTime":89560.0,"EndTime":89560.0,"X":488.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":89746.0,"EndTime":89746.0,"X":394.248352,"Y":41.7970772,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":89893.0,"Objects":[{"StartTime":89893.0,"EndTime":89893.0,"X":256.0,"Y":104.0}]},{"StartTime":90004.0,"Objects":[{"StartTime":90004.0,"EndTime":90004.0,"X":168.0,"Y":128.0}]},{"StartTime":90115.0,"Objects":[{"StartTime":90115.0,"EndTime":90115.0,"X":80.0,"Y":120.0}]},{"StartTime":90226.0,"Objects":[{"StartTime":90226.0,"EndTime":90226.0,"X":0.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90301.0,"EndTime":90301.0,"X":-5.43235159,"Y":172.040863,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90449.0,"Objects":[{"StartTime":90449.0,"EndTime":90449.0,"X":96.0,"Y":336.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90524.0,"EndTime":90524.0,"X":101.432358,"Y":251.959152,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90671.0,"Objects":[{"StartTime":90671.0,"EndTime":90671.0,"X":173.0,"Y":43.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90746.0,"EndTime":90746.0,"X":167.812271,"Y":126.927834,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":90893.0,"Objects":[{"StartTime":90893.0,"EndTime":90893.0,"X":256.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":90968.0,"EndTime":90968.0,"X":261.432373,"Y":211.959152,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":91115.0,"Objects":[{"StartTime":91115.0,"EndTime":91115.0,"X":336.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":91301.0,"EndTime":91301.0,"X":505.568,"Y":59.888,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":91449.0,"Objects":[{"StartTime":91449.0,"EndTime":91449.0,"X":432.0,"Y":120.0}]},{"StartTime":91560.0,"Objects":[{"StartTime":91560.0,"EndTime":91560.0,"X":392.0,"Y":200.0}]},{"StartTime":91671.0,"Objects":[{"StartTime":91671.0,"EndTime":91671.0,"X":432.0,"Y":288.0}]},{"StartTime":91782.0,"Objects":[{"StartTime":91782.0,"EndTime":91782.0,"X":496.0,"Y":360.0}]},{"StartTime":92004.0,"Objects":[{"StartTime":92004.0,"EndTime":92004.0,"X":256.0,"Y":296.0}]},{"StartTime":92226.0,"Objects":[{"StartTime":92226.0,"EndTime":92226.0,"X":16.0,"Y":360.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":92412.0,"EndTime":92412.0,"X":57.4499359,"Y":205.3707,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":92560.0,"Objects":[{"StartTime":92560.0,"EndTime":92560.0,"X":120.0,"Y":40.0}]},{"StartTime":92671.0,"Objects":[{"StartTime":92671.0,"EndTime":92671.0,"X":168.0,"Y":120.0}]},{"StartTime":92782.0,"Objects":[{"StartTime":92782.0,"EndTime":92782.0,"X":248.0,"Y":168.0}]},{"StartTime":92893.0,"Objects":[{"StartTime":92893.0,"EndTime":92893.0,"X":328.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93079.0,"EndTime":93079.0,"X":470.241516,"Y":176.420227,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93226.0,"Objects":[{"StartTime":93226.0,"EndTime":93226.0,"X":472.0,"Y":360.0}]},{"StartTime":93337.0,"Objects":[{"StartTime":93337.0,"EndTime":93337.0,"X":472.0,"Y":360.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93523.0,"EndTime":93523.0,"X":372.6112,"Y":243.111877,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":93671.0,"Objects":[{"StartTime":93671.0,"EndTime":93671.0,"X":328.0,"Y":120.0}]},{"StartTime":93782.0,"Objects":[{"StartTime":93782.0,"EndTime":93782.0,"X":328.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":93857.0,"EndTime":93857.0,"X":315.9792,"Y":35.8542938,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94004.0,"Objects":[{"StartTime":94004.0,"EndTime":94004.0,"X":93.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":94190.0,"EndTime":94190.0,"X":247.311935,"Y":167.253586,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":94337.0,"Objects":[{"StartTime":94337.0,"EndTime":94337.0,"X":448.0,"Y":288.0}]},{"StartTime":94449.0,"Objects":[{"StartTime":94449.0,"EndTime":94449.0,"X":360.0,"Y":264.0}]},{"StartTime":94560.0,"Objects":[{"StartTime":94560.0,"EndTime":94560.0,"X":272.0,"Y":288.0}]},{"StartTime":94671.0,"Objects":[{"StartTime":94671.0,"EndTime":94671.0,"X":216.0,"Y":360.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":94857.0,"EndTime":94857.0,"X":165.263092,"Y":227.525742,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95004.0,"Objects":[{"StartTime":95004.0,"EndTime":95004.0,"X":216.0,"Y":104.0}]},{"StartTime":95115.0,"Objects":[{"StartTime":95115.0,"EndTime":95115.0,"X":216.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95190.0,"EndTime":95190.0,"X":231.205261,"Y":20.3710556,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95337.0,"Objects":[{"StartTime":95337.0,"EndTime":95337.0,"X":368.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95412.0,"EndTime":95412.0,"X":448.936432,"Y":36.0525131,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95560.0,"Objects":[{"StartTime":95560.0,"EndTime":95560.0,"X":432.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95635.0,"EndTime":95635.0,"X":420.052521,"Y":143.063568,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":95782.0,"Objects":[{"StartTime":95782.0,"EndTime":95782.0,"X":320.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":95857.0,"EndTime":95857.0,"X":331.947479,"Y":360.936432,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":96004.0,"Objects":[{"StartTime":96004.0,"EndTime":96004.0,"X":32.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":96190.0,"EndTime":96190.0,"X":187.590439,"Y":208.254333,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":96337.0,"Objects":[{"StartTime":96337.0,"EndTime":96337.0,"X":320.0,"Y":280.0}]},{"StartTime":96449.0,"Objects":[{"StartTime":96449.0,"EndTime":96449.0,"X":408.0,"Y":312.0}]},{"StartTime":96560.0,"Objects":[{"StartTime":96560.0,"EndTime":96560.0,"X":496.0,"Y":280.0}]},{"StartTime":96671.0,"Objects":[{"StartTime":96671.0,"EndTime":96671.0,"X":496.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":96857.0,"EndTime":96857.0,"X":456.6245,"Y":114.62294,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97004.0,"Objects":[{"StartTime":97004.0,"EndTime":97004.0,"X":384.0,"Y":56.0}]},{"StartTime":97115.0,"Objects":[{"StartTime":97115.0,"EndTime":97115.0,"X":296.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97190.0,"EndTime":97190.0,"X":213.0328,"Y":22.5670681,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97337.0,"Objects":[{"StartTime":97337.0,"EndTime":97337.0,"X":104.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97412.0,"EndTime":97412.0,"X":186.9672,"Y":161.432938,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97560.0,"Objects":[{"StartTime":97560.0,"EndTime":97560.0,"X":456.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":97746.0,"EndTime":97746.0,"X":313.4922,"Y":206.126556,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":97893.0,"Objects":[{"StartTime":97893.0,"EndTime":97893.0,"X":264.0,"Y":288.0}]},{"StartTime":98004.0,"Objects":[{"StartTime":98004.0,"EndTime":98004.0,"X":176.0,"Y":264.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98079.0,"EndTime":98079.0,"X":91.38288,"Y":272.058777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98226.0,"Objects":[{"StartTime":98226.0,"EndTime":98226.0,"X":16.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98412.0,"EndTime":98412.0,"X":153.034653,"Y":108.397804,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":98560.0,"Objects":[{"StartTime":98560.0,"EndTime":98560.0,"X":328.0,"Y":56.0}]},{"StartTime":98671.0,"Objects":[{"StartTime":98671.0,"EndTime":98671.0,"X":416.0,"Y":32.0}]},{"StartTime":98782.0,"Objects":[{"StartTime":98782.0,"EndTime":98782.0,"X":480.0,"Y":104.0}]},{"StartTime":98893.0,"Objects":[{"StartTime":98893.0,"EndTime":98893.0,"X":456.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":98968.0,"EndTime":98968.0,"X":463.695526,"Y":276.65094,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99115.0,"Objects":[{"StartTime":99115.0,"EndTime":99115.0,"X":328.0,"Y":360.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99190.0,"EndTime":99190.0,"X":320.304474,"Y":275.34906,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99337.0,"Objects":[{"StartTime":99337.0,"EndTime":99337.0,"X":208.0,"Y":112.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":99412.0,"EndTime":99412.0,"X":215.695541,"Y":196.650925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":99560.0,"Objects":[{"StartTime":99560.0,"EndTime":99560.0,"X":64.0,"Y":320.0}]},{"StartTime":99671.0,"Objects":[{"StartTime":99671.0,"EndTime":99671.0,"X":136.0,"Y":264.0}]},{"StartTime":99782.0,"Objects":[{"StartTime":99782.0,"EndTime":99782.0,"X":232.0,"Y":256.0}]},{"StartTime":99893.0,"Objects":[{"StartTime":99893.0,"EndTime":99893.0,"X":320.0,"Y":280.0}]},{"StartTime":100004.0,"Objects":[{"StartTime":100004.0,"EndTime":100004.0,"X":384.0,"Y":344.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":100079.0,"EndTime":100079.0,"X":413.492859,"Y":264.728241,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":100226.0,"Objects":[{"StartTime":100226.0,"EndTime":100226.0,"X":360.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":100301.0,"EndTime":100301.0,"X":330.507141,"Y":151.271759,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":100449.0,"Objects":[{"StartTime":100449.0,"EndTime":100449.0,"X":240.0,"Y":312.0}]},{"StartTime":100560.0,"Objects":[{"StartTime":100560.0,"EndTime":100560.0,"X":152.0,"Y":344.0}]},{"StartTime":100671.0,"Objects":[{"StartTime":100671.0,"EndTime":100671.0,"X":64.0,"Y":320.0}]},{"StartTime":100782.0,"Objects":[{"StartTime":100782.0,"EndTime":100782.0,"X":8.0,"Y":248.0}]},{"StartTime":100893.0,"Objects":[{"StartTime":100893.0,"EndTime":100893.0,"X":16.0,"Y":152.0}]},{"StartTime":101004.0,"Objects":[{"StartTime":101004.0,"EndTime":101004.0,"X":88.0,"Y":88.0}]},{"StartTime":101115.0,"Objects":[{"StartTime":101115.0,"EndTime":101115.0,"X":184.0,"Y":80.0}]},{"StartTime":101226.0,"Objects":[{"StartTime":101226.0,"EndTime":101226.0,"X":272.0,"Y":120.0}]},{"StartTime":101337.0,"Objects":[{"StartTime":101337.0,"EndTime":101337.0,"X":356.0,"Y":176.0}]},{"StartTime":101449.0,"Objects":[{"StartTime":101449.0,"EndTime":101449.0,"X":456.0,"Y":164.0}]},{"StartTime":101560.0,"Objects":[{"StartTime":101560.0,"EndTime":101560.0,"X":392.0,"Y":88.0}]},{"StartTime":101671.0,"Objects":[{"StartTime":101671.0,"EndTime":101671.0,"X":348.0,"Y":184.0}]},{"StartTime":101782.0,"Objects":[{"StartTime":101782.0,"EndTime":101782.0,"X":448.0,"Y":172.0}]},{"StartTime":101893.0,"Objects":[{"StartTime":101893.0,"EndTime":101893.0,"X":384.0,"Y":96.0}]},{"StartTime":102004.0,"Objects":[{"StartTime":102004.0,"EndTime":102004.0,"X":340.0,"Y":192.0}]},{"StartTime":102115.0,"Objects":[{"StartTime":102115.0,"EndTime":102115.0,"X":440.0,"Y":180.0}]},{"StartTime":102226.0,"Objects":[{"StartTime":102226.0,"EndTime":102226.0,"X":376.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102301.0,"EndTime":102301.0,"X":296.361084,"Y":106.489342,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102449.0,"Objects":[{"StartTime":102449.0,"EndTime":102449.0,"X":344.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":102524.0,"EndTime":102524.0,"X":413.713257,"Y":230.646133,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":102671.0,"Objects":[{"StartTime":102671.0,"EndTime":102671.0,"X":169.0,"Y":239.0}]},{"StartTime":102782.0,"Objects":[{"StartTime":102782.0,"EndTime":102782.0,"X":80.0,"Y":210.0}]},{"StartTime":102893.0,"Objects":[{"StartTime":102893.0,"EndTime":102893.0,"X":80.0,"Y":117.0}]},{"StartTime":103004.0,"Objects":[{"StartTime":103004.0,"EndTime":103004.0,"X":169.0,"Y":88.0}]},{"StartTime":103115.0,"Objects":[{"StartTime":103115.0,"EndTime":103115.0,"X":224.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103301.0,"EndTime":103301.0,"X":391.5921,"Y":148.586258,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":103449.0,"Objects":[{"StartTime":103449.0,"EndTime":103449.0,"X":456.0,"Y":317.0}]},{"StartTime":103560.0,"Objects":[{"StartTime":103560.0,"EndTime":103560.0,"X":366.0,"Y":290.0}]},{"StartTime":103671.0,"Objects":[{"StartTime":103671.0,"EndTime":103671.0,"X":324.0,"Y":206.0}]},{"StartTime":103782.0,"Objects":[{"StartTime":103782.0,"EndTime":103782.0,"X":326.0,"Y":112.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103893.0,"EndTime":103893.0,"X":340.771759,"Y":28.293396,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":103968.0,"EndTime":103968.0,"X":326.0,"Y":112.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104115.0,"Objects":[{"StartTime":104115.0,"EndTime":104115.0,"X":314.0,"Y":203.0}]},{"StartTime":104226.0,"Objects":[{"StartTime":104226.0,"EndTime":104226.0,"X":242.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104301.0,"EndTime":104301.0,"X":183.429764,"Y":86.40027,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104449.0,"Objects":[{"StartTime":104449.0,"EndTime":104449.0,"X":398.0,"Y":167.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104524.0,"EndTime":104524.0,"X":472.303375,"Y":125.720352,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":104671.0,"Objects":[{"StartTime":104671.0,"EndTime":104671.0,"X":365.0,"Y":276.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104782.0,"EndTime":104782.0,"X":379.771759,"Y":359.7066,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":104857.0,"EndTime":104857.0,"X":365.0,"Y":276.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":105004.0,"Objects":[{"StartTime":105004.0,"EndTime":105004.0,"X":183.0,"Y":86.0}]},{"StartTime":105115.0,"Objects":[{"StartTime":105115.0,"EndTime":105115.0,"X":99.0,"Y":88.0}]},{"StartTime":105226.0,"Objects":[{"StartTime":105226.0,"EndTime":105226.0,"X":31.0,"Y":137.0}]},{"StartTime":105337.0,"Objects":[{"StartTime":105337.0,"EndTime":105337.0,"X":3.0,"Y":216.0}]},{"StartTime":105449.0,"Objects":[{"StartTime":105449.0,"EndTime":105449.0,"X":24.0,"Y":297.0}]},{"StartTime":105560.0,"Objects":[{"StartTime":105560.0,"EndTime":105560.0,"X":87.0,"Y":352.0}]},{"StartTime":105671.0,"Objects":[{"StartTime":105671.0,"EndTime":105671.0,"X":152.0,"Y":298.0}]},{"StartTime":105782.0,"Objects":[{"StartTime":105782.0,"EndTime":105782.0,"X":233.0,"Y":273.0}]},{"StartTime":105893.0,"Objects":[{"StartTime":105893.0,"EndTime":105893.0,"X":317.0,"Y":283.0}]},{"StartTime":106004.0,"Objects":[{"StartTime":106004.0,"EndTime":106004.0,"X":391.0,"Y":324.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106079.0,"EndTime":106079.0,"X":475.052948,"Y":311.346863,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106226.0,"Objects":[{"StartTime":106226.0,"EndTime":106226.0,"X":282.0,"Y":227.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106301.0,"EndTime":106301.0,"X":198.0845,"Y":213.46524,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106449.0,"Objects":[{"StartTime":106449.0,"EndTime":106449.0,"X":46.0,"Y":357.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":106524.0,"EndTime":106524.0,"X":129.892242,"Y":343.32193,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":106671.0,"Objects":[{"StartTime":106671.0,"EndTime":106671.0,"X":62.0,"Y":140.0}]},{"StartTime":106782.0,"Objects":[{"StartTime":106782.0,"EndTime":106782.0,"X":62.0,"Y":140.0}]},{"StartTime":106893.0,"Objects":[{"StartTime":106893.0,"EndTime":106893.0,"X":62.0,"Y":140.0}]},{"StartTime":107004.0,"Objects":[{"StartTime":107004.0,"EndTime":107004.0,"X":62.0,"Y":140.0}]},{"StartTime":107115.0,"Objects":[{"StartTime":107115.0,"EndTime":107115.0,"X":62.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":107301.0,"EndTime":107301.0,"X":230.55661,"Y":117.894211,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":107449.0,"Objects":[{"StartTime":107449.0,"EndTime":107449.0,"X":418.0,"Y":227.0}]},{"StartTime":107560.0,"Objects":[{"StartTime":107560.0,"EndTime":107560.0,"X":330.0,"Y":251.0}]},{"StartTime":107671.0,"Objects":[{"StartTime":107671.0,"EndTime":107671.0,"X":251.0,"Y":206.0}]},{"StartTime":107782.0,"Objects":[{"StartTime":107782.0,"EndTime":107782.0,"X":230.0,"Y":117.0}]},{"StartTime":107893.0,"Objects":[{"StartTime":107893.0,"EndTime":107893.0,"X":277.0,"Y":35.0}]},{"StartTime":108004.0,"Objects":[{"StartTime":108004.0,"EndTime":108004.0,"X":347.0,"Y":130.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108079.0,"EndTime":108079.0,"X":263.20224,"Y":144.245621,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108226.0,"Objects":[{"StartTime":108226.0,"EndTime":108226.0,"X":46.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108412.0,"EndTime":108412.0,"X":23.9974537,"Y":230.15947,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108560.0,"Objects":[{"StartTime":108560.0,"EndTime":108560.0,"X":215.0,"Y":312.0}]},{"StartTime":108671.0,"Objects":[{"StartTime":108671.0,"EndTime":108671.0,"X":215.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":108746.0,"EndTime":108746.0,"X":158.405411,"Y":253.670273,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":108893.0,"Objects":[{"StartTime":108893.0,"EndTime":108893.0,"X":62.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109079.0,"EndTime":109079.0,"X":224.426849,"Y":169.542343,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109226.0,"Objects":[{"StartTime":109226.0,"EndTime":109226.0,"X":371.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109337.0,"EndTime":109337.0,"X":375.612762,"Y":29.12526,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":109412.0,"EndTime":109412.0,"X":371.0,"Y":114.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":109560.0,"Objects":[{"StartTime":109560.0,"EndTime":109560.0,"X":312.0,"Y":190.0}]},{"StartTime":109671.0,"Objects":[{"StartTime":109671.0,"EndTime":109671.0,"X":389.0,"Y":239.0}]},{"StartTime":109782.0,"Objects":[{"StartTime":109782.0,"EndTime":109782.0,"X":308.0,"Y":283.0}]},{"StartTime":109893.0,"Objects":[{"StartTime":109893.0,"EndTime":109893.0,"X":386.0,"Y":333.0}]},{"StartTime":110004.0,"Objects":[{"StartTime":110004.0,"EndTime":110004.0,"X":305.0,"Y":377.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110079.0,"EndTime":110079.0,"X":231.754059,"Y":338.856445,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110226.0,"Objects":[{"StartTime":110226.0,"EndTime":110226.0,"X":77.0,"Y":199.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":110412.0,"EndTime":110412.0,"X":223.643723,"Y":169.366547,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":110560.0,"Objects":[{"StartTime":110560.0,"EndTime":110560.0,"X":417.0,"Y":221.0}]},{"StartTime":110671.0,"Objects":[{"StartTime":110671.0,"EndTime":110671.0,"X":444.0,"Y":135.0}]},{"StartTime":110782.0,"Objects":[{"StartTime":110782.0,"EndTime":110782.0,"X":389.0,"Y":64.0}]},{"StartTime":110893.0,"Objects":[{"StartTime":110893.0,"EndTime":110893.0,"X":299.0,"Y":68.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111079.0,"EndTime":111079.0,"X":158.284866,"Y":15.6295881,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111226.0,"Objects":[{"StartTime":111226.0,"EndTime":111226.0,"X":62.0,"Y":140.0}]},{"StartTime":111337.0,"Objects":[{"StartTime":111337.0,"EndTime":111337.0,"X":62.0,"Y":140.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111412.0,"EndTime":111412.0,"X":80.53252,"Y":222.955078,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111560.0,"Objects":[{"StartTime":111560.0,"EndTime":111560.0,"X":262.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111635.0,"EndTime":111635.0,"X":178.5487,"Y":279.848145,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":111782.0,"Objects":[{"StartTime":111782.0,"EndTime":111782.0,"X":349.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111893.0,"EndTime":111893.0,"X":340.050018,"Y":68.4725,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":111968.0,"EndTime":111968.0,"X":349.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":112115.0,"Objects":[{"StartTime":112115.0,"EndTime":112115.0,"X":236.0,"Y":329.0}]},{"StartTime":112226.0,"Objects":[{"StartTime":112226.0,"EndTime":112226.0,"X":292.0,"Y":267.0}]},{"StartTime":112337.0,"Objects":[{"StartTime":112337.0,"EndTime":112337.0,"X":375.0,"Y":253.0}]},{"StartTime":112449.0,"Objects":[{"StartTime":112449.0,"EndTime":112449.0,"X":449.0,"Y":291.0}]},{"StartTime":112560.0,"Objects":[{"StartTime":112560.0,"EndTime":112560.0,"X":378.0,"Y":336.0}]},{"StartTime":112671.0,"Objects":[{"StartTime":112671.0,"EndTime":112671.0,"X":375.0,"Y":253.0}]},{"StartTime":112782.0,"Objects":[{"StartTime":112782.0,"EndTime":112782.0,"X":372.0,"Y":170.0}]},{"StartTime":112893.0,"Objects":[{"StartTime":112893.0,"EndTime":112893.0,"X":369.0,"Y":87.0}]},{"StartTime":113004.0,"Objects":[{"StartTime":113004.0,"EndTime":113004.0,"X":442.0,"Y":125.0}]},{"StartTime":113115.0,"Objects":[{"StartTime":113115.0,"EndTime":113115.0,"X":348.0,"Y":178.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":113190.0,"EndTime":113190.0,"X":263.3711,"Y":170.06604,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":113337.0,"Objects":[{"StartTime":113337.0,"EndTime":113337.0,"X":80.0,"Y":269.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":113412.0,"EndTime":113412.0,"X":162.128845,"Y":264.339417,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":113560.0,"Objects":[{"StartTime":113560.0,"EndTime":113560.0,"X":105.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":113635.0,"EndTime":113635.0,"X":85.68204,"Y":97.64976,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":113782.0,"Objects":[{"StartTime":113782.0,"EndTime":113782.0,"X":260.0,"Y":255.0}]},{"StartTime":113893.0,"Objects":[{"StartTime":113893.0,"EndTime":113893.0,"X":261.0,"Y":212.0}]},{"StartTime":114004.0,"Objects":[{"StartTime":114004.0,"EndTime":114004.0,"X":262.0,"Y":170.0}]},{"StartTime":114226.0,"Objects":[{"StartTime":114226.0,"EndTime":114226.0,"X":414.0,"Y":61.0}]},{"StartTime":114337.0,"Objects":[{"StartTime":114337.0,"EndTime":114337.0,"X":340.0,"Y":101.0}]},{"StartTime":114449.0,"Objects":[{"StartTime":114449.0,"EndTime":114449.0,"X":256.0,"Y":109.0}]},{"StartTime":114560.0,"Objects":[{"StartTime":114560.0,"EndTime":114560.0,"X":176.0,"Y":81.0}]},{"StartTime":114671.0,"Objects":[{"StartTime":114671.0,"EndTime":114671.0,"X":105.0,"Y":18.0}]},{"StartTime":114782.0,"Objects":[{"StartTime":114782.0,"EndTime":114782.0,"X":84.0,"Y":118.0}]},{"StartTime":114893.0,"Objects":[{"StartTime":114893.0,"EndTime":114893.0,"X":63.0,"Y":218.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":114968.0,"EndTime":114968.0,"X":145.047943,"Y":235.7841,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":115115.0,"Objects":[{"StartTime":115115.0,"EndTime":115115.0,"X":369.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":115190.0,"EndTime":115190.0,"X":286.6682,"Y":330.003754,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":115337.0,"Objects":[{"StartTime":115337.0,"EndTime":115337.0,"X":256.0,"Y":109.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":115412.0,"EndTime":115412.0,"X":353.312866,"Y":115.327446,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":115560.0,"Objects":[{"StartTime":115560.0,"EndTime":115560.0,"X":488.0,"Y":273.0}]},{"StartTime":115671.0,"Objects":[{"StartTime":115671.0,"EndTime":115671.0,"X":488.0,"Y":273.0}]},{"StartTime":115782.0,"Objects":[{"StartTime":115782.0,"EndTime":115782.0,"X":488.0,"Y":273.0}]},{"StartTime":116004.0,"Objects":[{"StartTime":116004.0,"EndTime":116004.0,"X":429.0,"Y":83.0}]},{"StartTime":116115.0,"Objects":[{"StartTime":116115.0,"EndTime":116115.0,"X":429.0,"Y":83.0}]},{"StartTime":116226.0,"Objects":[{"StartTime":116226.0,"EndTime":116226.0,"X":429.0,"Y":83.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":116281.0,"EndTime":116281.0,"X":430.78653,"Y":50.84238,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":116301.0,"EndTime":116301.0,"X":429.0,"Y":83.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":116449.0,"Objects":[{"StartTime":116449.0,"EndTime":116449.0,"X":381.0,"Y":198.0}]},{"StartTime":116560.0,"Objects":[{"StartTime":116560.0,"EndTime":116560.0,"X":381.0,"Y":198.0}]},{"StartTime":116782.0,"Objects":[{"StartTime":116782.0,"EndTime":116782.0,"X":187.0,"Y":140.0}]},{"StartTime":117004.0,"Objects":[{"StartTime":117004.0,"EndTime":117004.0,"X":102.0,"Y":323.0}]},{"StartTime":117337.0,"Objects":[{"StartTime":117337.0,"EndTime":117337.0,"X":58.0,"Y":34.0}]},{"StartTime":128004.0,"Objects":[{"StartTime":128004.0,"EndTime":128004.0,"X":380.0,"Y":124.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128079.0,"EndTime":128079.0,"X":429.438324,"Y":121.441765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":128226.0,"Objects":[{"StartTime":128226.0,"EndTime":128226.0,"X":396.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128301.0,"EndTime":128301.0,"X":346.561676,"Y":258.558228,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":128449.0,"Objects":[{"StartTime":128449.0,"EndTime":128449.0,"X":104.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128524.0,"EndTime":128524.0,"X":113.805809,"Y":249.029037,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":128671.0,"Objects":[{"StartTime":128671.0,"EndTime":128671.0,"X":172.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":128746.0,"EndTime":128746.0,"X":162.1942,"Y":54.9709663,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":128893.0,"Objects":[{"StartTime":128893.0,"EndTime":128893.0,"X":272.0,"Y":184.0}]},{"StartTime":129004.0,"Objects":[{"StartTime":129004.0,"EndTime":129004.0,"X":280.0,"Y":208.0}]},{"StartTime":129115.0,"Objects":[{"StartTime":129115.0,"EndTime":129115.0,"X":280.0,"Y":232.0}]},{"StartTime":129226.0,"Objects":[{"StartTime":129226.0,"EndTime":129226.0,"X":272.0,"Y":256.0}]},{"StartTime":129337.0,"Objects":[{"StartTime":129337.0,"EndTime":129337.0,"X":264.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":129412.0,"EndTime":129412.0,"X":309.807861,"Y":300.040955,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":129560.0,"Objects":[{"StartTime":129560.0,"EndTime":129560.0,"X":464.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":129635.0,"EndTime":129635.0,"X":418.192139,"Y":239.959061,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":129782.0,"Objects":[{"StartTime":129782.0,"EndTime":129782.0,"X":317.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":129809.0,"EndTime":129809.0,"X":332.10965,"Y":93.08272,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":129893.0,"Objects":[{"StartTime":129893.0,"EndTime":129893.0,"X":286.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":129920.0,"EndTime":129920.0,"X":294.3205,"Y":72.42524,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130004.0,"Objects":[{"StartTime":130004.0,"EndTime":130004.0,"X":252.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130031.0,"EndTime":130031.0,"X":251.305817,"Y":67.00964,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130115.0,"Objects":[{"StartTime":130115.0,"EndTime":130115.0,"X":218.0,"Y":99.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130142.0,"EndTime":130142.0,"X":209.071564,"Y":75.6487045,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130226.0,"Objects":[{"StartTime":130226.0,"EndTime":130226.0,"X":189.0,"Y":117.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130253.0,"EndTime":130253.0,"X":172.0148,"Y":98.65598,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130337.0,"Objects":[{"StartTime":130337.0,"EndTime":130337.0,"X":167.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130364.0,"EndTime":130364.0,"X":144.9221,"Y":133.271118,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130449.0,"Objects":[{"StartTime":130449.0,"EndTime":130449.0,"X":156.0,"Y":178.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130476.0,"EndTime":130476.0,"X":131.251266,"Y":174.464462,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130560.0,"Objects":[{"StartTime":130560.0,"EndTime":130560.0,"X":158.0,"Y":212.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130587.0,"EndTime":130587.0,"X":133.595322,"Y":217.423264,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130671.0,"Objects":[{"StartTime":130671.0,"EndTime":130671.0,"X":171.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130698.0,"EndTime":130698.0,"X":149.992584,"Y":257.553162,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130782.0,"Objects":[{"StartTime":130782.0,"EndTime":130782.0,"X":194.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130809.0,"EndTime":130809.0,"X":178.890335,"Y":289.917267,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":130893.0,"Objects":[{"StartTime":130893.0,"EndTime":130893.0,"X":225.0,"Y":287.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":130920.0,"EndTime":130920.0,"X":216.6795,"Y":310.574768,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":131004.0,"Objects":[{"StartTime":131004.0,"EndTime":131004.0,"X":259.0,"Y":291.0}]},{"StartTime":131337.0,"Objects":[{"StartTime":131337.0,"EndTime":131337.0,"X":259.0,"Y":291.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":131523.0,"EndTime":131523.0,"X":352.95874,"Y":282.156,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":132004.0,"Objects":[{"StartTime":132004.0,"EndTime":132004.0,"X":456.0,"Y":68.0}]},{"StartTime":132226.0,"Objects":[{"StartTime":132226.0,"EndTime":132226.0,"X":340.0,"Y":184.0}]},{"StartTime":132449.0,"Objects":[{"StartTime":132449.0,"EndTime":132449.0,"X":284.0,"Y":20.0}]},{"StartTime":132671.0,"Objects":[{"StartTime":132671.0,"EndTime":132671.0,"X":156.0,"Y":160.0}]},{"StartTime":132782.0,"Objects":[{"StartTime":132782.0,"EndTime":132782.0,"X":156.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":132968.0,"EndTime":132968.0,"X":254.257935,"Y":159.456436,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":133115.0,"Objects":[{"StartTime":133115.0,"EndTime":133115.0,"X":92.0,"Y":235.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":133190.0,"EndTime":133190.0,"X":43.1906471,"Y":245.846527,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":133337.0,"Objects":[{"StartTime":133337.0,"EndTime":133337.0,"X":281.0,"Y":303.0}]},{"StartTime":133560.0,"Objects":[{"StartTime":133560.0,"EndTime":133560.0,"X":471.0,"Y":213.0}]},{"StartTime":133782.0,"Objects":[{"StartTime":133782.0,"EndTime":133782.0,"X":281.0,"Y":303.0}]},{"StartTime":134004.0,"Objects":[{"StartTime":134004.0,"EndTime":134004.0,"X":363.0,"Y":84.0}]},{"StartTime":134226.0,"Objects":[{"StartTime":134226.0,"EndTime":134226.0,"X":241.0,"Y":162.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":134301.0,"EndTime":134301.0,"X":227.544769,"Y":113.844452,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":134449.0,"Objects":[{"StartTime":134449.0,"EndTime":134449.0,"X":164.0,"Y":204.0}]},{"StartTime":134560.0,"Objects":[{"StartTime":134560.0,"EndTime":134560.0,"X":164.0,"Y":204.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":134746.0,"EndTime":134746.0,"X":67.36322,"Y":209.315872,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":134893.0,"Objects":[{"StartTime":134893.0,"EndTime":134893.0,"X":281.0,"Y":303.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":135079.0,"EndTime":135079.0,"X":377.63678,"Y":297.684143,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":135337.0,"Objects":[{"StartTime":135337.0,"EndTime":135337.0,"X":500.0,"Y":184.0}]},{"StartTime":135560.0,"Objects":[{"StartTime":135560.0,"EndTime":135560.0,"X":465.0,"Y":11.0}]},{"StartTime":135782.0,"Objects":[{"StartTime":135782.0,"EndTime":135782.0,"X":294.0,"Y":44.0}]},{"StartTime":136004.0,"Objects":[{"StartTime":136004.0,"EndTime":136004.0,"X":327.0,"Y":217.0}]},{"StartTime":136226.0,"Objects":[{"StartTime":136226.0,"EndTime":136226.0,"X":408.0,"Y":112.0}]},{"StartTime":136337.0,"Objects":[{"StartTime":136337.0,"EndTime":136337.0,"X":408.0,"Y":112.0}]},{"StartTime":136560.0,"Objects":[{"StartTime":136560.0,"EndTime":136560.0,"X":364.0,"Y":316.0}]},{"StartTime":136671.0,"Objects":[{"StartTime":136671.0,"EndTime":136671.0,"X":364.0,"Y":316.0}]},{"StartTime":136893.0,"Objects":[{"StartTime":136893.0,"EndTime":136893.0,"X":168.0,"Y":292.0}]},{"StartTime":137115.0,"Objects":[{"StartTime":137115.0,"EndTime":137115.0,"X":48.0,"Y":212.0}]},{"StartTime":137337.0,"Objects":[{"StartTime":137337.0,"EndTime":137337.0,"X":188.0,"Y":16.0}]},{"StartTime":137560.0,"Objects":[{"StartTime":137560.0,"EndTime":137560.0,"X":176.0,"Y":156.0}]},{"StartTime":137782.0,"Objects":[{"StartTime":137782.0,"EndTime":137782.0,"X":344.0,"Y":292.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":137968.0,"EndTime":137968.0,"X":439.6384,"Y":272.7788,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138115.0,"Objects":[{"StartTime":138115.0,"EndTime":138115.0,"X":388.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138301.0,"EndTime":138301.0,"X":404.404022,"Y":80.73015,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":138449.0,"Objects":[{"StartTime":138449.0,"EndTime":138449.0,"X":168.0,"Y":192.0}]},{"StartTime":138560.0,"Objects":[{"StartTime":138560.0,"EndTime":138560.0,"X":168.0,"Y":192.0}]},{"StartTime":138671.0,"Objects":[{"StartTime":138671.0,"EndTime":138671.0,"X":168.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":138857.0,"EndTime":138857.0,"X":267.4309,"Y":202.65332,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":139115.0,"Objects":[{"StartTime":139115.0,"EndTime":139115.0,"X":464.0,"Y":168.0}]},{"StartTime":139337.0,"Objects":[{"StartTime":139337.0,"EndTime":139337.0,"X":344.0,"Y":292.0}]},{"StartTime":139560.0,"Objects":[{"StartTime":139560.0,"EndTime":139560.0,"X":332.0,"Y":24.0}]},{"StartTime":139782.0,"Objects":[{"StartTime":139782.0,"EndTime":139782.0,"X":288.0,"Y":368.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":139968.0,"EndTime":139968.0,"X":384.317841,"Y":377.256653,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":140226.0,"Objects":[{"StartTime":140226.0,"EndTime":140226.0,"X":224.0,"Y":16.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":140412.0,"EndTime":140412.0,"X":127.682182,"Y":6.743342,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":140671.0,"Objects":[{"StartTime":140671.0,"EndTime":140671.0,"X":80.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":140857.0,"EndTime":140857.0,"X":70.74335,"Y":320.3178,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":141115.0,"Objects":[{"StartTime":141115.0,"EndTime":141115.0,"X":400.0,"Y":152.0}]},{"StartTime":141337.0,"Objects":[{"StartTime":141337.0,"EndTime":141337.0,"X":300.0,"Y":268.0}]},{"StartTime":141560.0,"Objects":[{"StartTime":141560.0,"EndTime":141560.0,"X":460.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":141746.0,"EndTime":141746.0,"X":367.40332,"Y":63.3521423,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":142004.0,"Objects":[{"StartTime":142004.0,"EndTime":142004.0,"X":332.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":142190.0,"EndTime":142190.0,"X":346.5494,"Y":322.9359,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":142449.0,"Objects":[{"StartTime":142449.0,"EndTime":142449.0,"X":184.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":142524.0,"EndTime":142524.0,"X":178.04274,"Y":38.35616,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":142671.0,"Objects":[{"StartTime":142671.0,"EndTime":142671.0,"X":204.0,"Y":136.0}]},{"StartTime":142782.0,"Objects":[{"StartTime":142782.0,"EndTime":142782.0,"X":212.0,"Y":184.0}]},{"StartTime":142893.0,"Objects":[{"StartTime":142893.0,"EndTime":142893.0,"X":196.0,"Y":232.0}]},{"StartTime":143004.0,"Objects":[{"StartTime":143004.0,"EndTime":143004.0,"X":152.0,"Y":256.0}]},{"StartTime":143115.0,"Objects":[{"StartTime":143115.0,"EndTime":143115.0,"X":104.0,"Y":236.0}]},{"StartTime":143226.0,"Objects":[{"StartTime":143226.0,"EndTime":143226.0,"X":56.0,"Y":252.0}]},{"StartTime":143337.0,"Objects":[{"StartTime":143337.0,"EndTime":143337.0,"X":32.0,"Y":296.0}]},{"StartTime":143449.0,"Objects":[{"StartTime":143449.0,"EndTime":143449.0,"X":52.0,"Y":340.0}]},{"StartTime":143560.0,"Objects":[{"StartTime":143560.0,"EndTime":143560.0,"X":92.0,"Y":372.0}]},{"StartTime":143671.0,"Objects":[{"StartTime":143671.0,"EndTime":143671.0,"X":140.0,"Y":352.0}]},{"StartTime":143782.0,"Objects":[{"StartTime":143782.0,"EndTime":143782.0,"X":188.0,"Y":336.0}]},{"StartTime":143893.0,"Objects":[{"StartTime":143893.0,"EndTime":143893.0,"X":236.0,"Y":348.0}]},{"StartTime":144004.0,"Objects":[{"StartTime":144004.0,"EndTime":144004.0,"X":280.0,"Y":368.0}]},{"StartTime":144449.0,"Objects":[{"StartTime":144449.0,"EndTime":144449.0,"X":448.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144476.0,"EndTime":144476.0,"X":424.591766,"Y":251.221909,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":144560.0,"Objects":[{"StartTime":144560.0,"EndTime":144560.0,"X":424.0,"Y":251.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144587.0,"EndTime":144587.0,"X":400.357849,"Y":242.873,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":144671.0,"Objects":[{"StartTime":144671.0,"EndTime":144671.0,"X":400.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144698.0,"EndTime":144698.0,"X":376.591766,"Y":234.221909,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":144782.0,"Objects":[{"StartTime":144782.0,"EndTime":144782.0,"X":377.0,"Y":234.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144809.0,"EndTime":144809.0,"X":353.365662,"Y":225.850235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":144893.0,"Objects":[{"StartTime":144893.0,"EndTime":144893.0,"X":316.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":144968.0,"EndTime":144968.0,"X":305.8368,"Y":151.497864,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":145115.0,"Objects":[{"StartTime":145115.0,"EndTime":145115.0,"X":404.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":145190.0,"EndTime":145190.0,"X":414.1632,"Y":88.50214,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":145337.0,"Objects":[{"StartTime":145337.0,"EndTime":145337.0,"X":252.0,"Y":264.0}]},{"StartTime":145449.0,"Objects":[{"StartTime":145449.0,"EndTime":145449.0,"X":252.0,"Y":264.0}]},{"StartTime":145560.0,"Objects":[{"StartTime":145560.0,"EndTime":145560.0,"X":252.0,"Y":264.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":145746.0,"EndTime":145746.0,"X":153.884521,"Y":264.3699,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":146226.0,"Objects":[{"StartTime":146226.0,"EndTime":146226.0,"X":34.0,"Y":77.0}]},{"StartTime":146449.0,"Objects":[{"StartTime":146449.0,"EndTime":146449.0,"X":54.0,"Y":230.0}]},{"StartTime":146671.0,"Objects":[{"StartTime":146671.0,"EndTime":146671.0,"X":28.0,"Y":27.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":146746.0,"EndTime":146746.0,"X":33.1014442,"Y":76.7390747,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":146893.0,"Objects":[{"StartTime":146893.0,"EndTime":146893.0,"X":54.0,"Y":230.0}]},{"StartTime":147004.0,"Objects":[{"StartTime":147004.0,"EndTime":147004.0,"X":54.0,"Y":230.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":147079.0,"EndTime":147079.0,"X":59.1014442,"Y":180.260925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":147226.0,"Objects":[{"StartTime":147226.0,"EndTime":147226.0,"X":234.0,"Y":135.0}]},{"StartTime":147337.0,"Objects":[{"StartTime":147337.0,"EndTime":147337.0,"X":234.0,"Y":135.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":147523.0,"EndTime":147523.0,"X":333.241241,"Y":147.29538,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":147782.0,"Objects":[{"StartTime":147782.0,"EndTime":147782.0,"X":156.0,"Y":190.0}]},{"StartTime":148004.0,"Objects":[{"StartTime":148004.0,"EndTime":148004.0,"X":333.0,"Y":147.0}]},{"StartTime":148226.0,"Objects":[{"StartTime":148226.0,"EndTime":148226.0,"X":133.0,"Y":120.0}]},{"StartTime":148449.0,"Objects":[{"StartTime":148449.0,"EndTime":148449.0,"X":358.0,"Y":65.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":148635.0,"EndTime":148635.0,"X":260.9272,"Y":89.01802,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":148782.0,"Objects":[{"StartTime":148782.0,"EndTime":148782.0,"X":333.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":148968.0,"EndTime":148968.0,"X":432.241241,"Y":159.29538,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149115.0,"Objects":[{"StartTime":149115.0,"EndTime":149115.0,"X":321.0,"Y":275.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":149190.0,"EndTime":149190.0,"X":306.130829,"Y":227.2621,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149337.0,"Objects":[{"StartTime":149337.0,"EndTime":149337.0,"X":462.0,"Y":165.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":149523.0,"EndTime":149523.0,"X":431.9714,"Y":260.384918,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":149782.0,"Objects":[{"StartTime":149782.0,"EndTime":149782.0,"X":393.0,"Y":83.0}]},{"StartTime":150004.0,"Objects":[{"StartTime":150004.0,"EndTime":150004.0,"X":431.0,"Y":260.0}]},{"StartTime":150226.0,"Objects":[{"StartTime":150226.0,"EndTime":150226.0,"X":221.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":150412.0,"EndTime":150412.0,"X":320.083,"Y":274.488678,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":150560.0,"Objects":[{"StartTime":150560.0,"EndTime":150560.0,"X":190.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":150635.0,"EndTime":150635.0,"X":175.130814,"Y":248.2621,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":150782.0,"Objects":[{"StartTime":150782.0,"EndTime":150782.0,"X":334.0,"Y":226.0}]},{"StartTime":150893.0,"Objects":[{"StartTime":150893.0,"EndTime":150893.0,"X":334.0,"Y":226.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":150968.0,"EndTime":150968.0,"X":319.130829,"Y":273.7379,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151115.0,"Objects":[{"StartTime":151115.0,"EndTime":151115.0,"X":238.0,"Y":135.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":151190.0,"EndTime":151190.0,"X":252.869186,"Y":182.7379,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151337.0,"Objects":[{"StartTime":151337.0,"EndTime":151337.0,"X":190.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":151412.0,"EndTime":151412.0,"X":204.869186,"Y":343.7379,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151560.0,"Objects":[{"StartTime":151560.0,"EndTime":151560.0,"X":118.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":151635.0,"EndTime":151635.0,"X":132.869186,"Y":119.7379,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":151782.0,"Objects":[{"StartTime":151782.0,"EndTime":151782.0,"X":24.0,"Y":221.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":151857.0,"EndTime":151857.0,"X":38.8691826,"Y":268.7379,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":152004.0,"Objects":[{"StartTime":152004.0,"EndTime":152004.0,"X":242.0,"Y":367.0}]},{"StartTime":152115.0,"Objects":[{"StartTime":152115.0,"EndTime":152115.0,"X":276.0,"Y":362.0}]},{"StartTime":152226.0,"Objects":[{"StartTime":152226.0,"EndTime":152226.0,"X":311.0,"Y":357.0}]},{"StartTime":152337.0,"Objects":[{"StartTime":152337.0,"EndTime":152337.0,"X":346.0,"Y":353.0}]},{"StartTime":152449.0,"Objects":[{"StartTime":152449.0,"EndTime":152449.0,"X":386.0,"Y":338.0}]},{"StartTime":152560.0,"Objects":[{"StartTime":152560.0,"EndTime":152560.0,"X":337.0,"Y":327.0}]},{"StartTime":152671.0,"Objects":[{"StartTime":152671.0,"EndTime":152671.0,"X":288.0,"Y":317.0}]},{"StartTime":152782.0,"Objects":[{"StartTime":152782.0,"EndTime":152782.0,"X":239.0,"Y":306.0}]},{"StartTime":152893.0,"Objects":[{"StartTime":152893.0,"EndTime":152893.0,"X":190.0,"Y":296.0}]},{"StartTime":153337.0,"Objects":[{"StartTime":153337.0,"EndTime":153337.0,"X":190.0,"Y":296.0}]},{"StartTime":153560.0,"Objects":[{"StartTime":153560.0,"EndTime":153560.0,"X":241.0,"Y":77.0}]},{"StartTime":153782.0,"Objects":[{"StartTime":153782.0,"EndTime":153782.0,"X":200.0,"Y":262.0}]},{"StartTime":154004.0,"Objects":[{"StartTime":154004.0,"EndTime":154004.0,"X":447.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":154190.0,"EndTime":154190.0,"X":348.433533,"Y":183.128265,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":154449.0,"Objects":[{"StartTime":154449.0,"EndTime":154449.0,"X":97.0,"Y":119.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":154524.0,"EndTime":154524.0,"X":146.362061,"Y":111.038376,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":154671.0,"Objects":[{"StartTime":154671.0,"EndTime":154671.0,"X":348.0,"Y":183.0}]},{"StartTime":154893.0,"Objects":[{"StartTime":154893.0,"EndTime":154893.0,"X":151.0,"Y":210.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":155079.0,"EndTime":155079.0,"X":145.955917,"Y":110.1273,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":155337.0,"Objects":[{"StartTime":155337.0,"EndTime":155337.0,"X":353.0,"Y":83.0}]},{"StartTime":155449.0,"Objects":[{"StartTime":155449.0,"EndTime":155449.0,"X":350.0,"Y":132.0}]},{"StartTime":155560.0,"Objects":[{"StartTime":155560.0,"EndTime":155560.0,"X":347.0,"Y":182.0}]},{"StartTime":155782.0,"Objects":[{"StartTime":155782.0,"EndTime":155782.0,"X":31.0,"Y":78.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":156190.0,"EndTime":156190.0,"X":144.98584,"Y":110.023438,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":156449.0,"Objects":[{"StartTime":156449.0,"EndTime":156449.0,"X":113.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":156524.0,"EndTime":156524.0,"X":111.040718,"Y":230.038391,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":156671.0,"Objects":[{"StartTime":156671.0,"EndTime":156671.0,"X":145.0,"Y":110.0}]},{"StartTime":156893.0,"Objects":[{"StartTime":156893.0,"EndTime":156893.0,"X":108.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":156968.0,"EndTime":156968.0,"X":58.4584923,"Y":305.244354,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":157115.0,"Objects":[{"StartTime":157115.0,"EndTime":157115.0,"X":211.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157190.0,"EndTime":157190.0,"X":260.5415,"Y":214.755661,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":157337.0,"Objects":[{"StartTime":157337.0,"EndTime":157337.0,"X":414.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157392.0,"EndTime":157392.0,"X":389.2185,"Y":289.835663,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157448.0,"EndTime":157448.0,"X":413.849823,"Y":288.011139,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157467.0,"EndTime":157467.0,"X":389.0683,"Y":289.8468,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":157560.0,"Objects":[{"StartTime":157560.0,"EndTime":157560.0,"X":290.0,"Y":340.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157615.0,"EndTime":157615.0,"X":314.7762,"Y":341.905884,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157671.0,"EndTime":157671.0,"X":290.150146,"Y":340.011536,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157690.0,"EndTime":157690.0,"X":314.926361,"Y":341.917419,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":157782.0,"Objects":[{"StartTime":157782.0,"EndTime":157782.0,"X":414.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":157857.0,"EndTime":157857.0,"X":419.1956,"Y":238.270676,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":158004.0,"Objects":[{"StartTime":158004.0,"EndTime":158004.0,"X":315.0,"Y":130.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158079.0,"EndTime":158079.0,"X":328.026154,"Y":178.273376,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":158226.0,"Objects":[{"StartTime":158226.0,"EndTime":158226.0,"X":492.0,"Y":100.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158301.0,"EndTime":158301.0,"X":442.4585,"Y":93.24434,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":158449.0,"Objects":[{"StartTime":158449.0,"EndTime":158449.0,"X":214.0,"Y":158.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158524.0,"EndTime":158524.0,"X":204.3489,"Y":108.940277,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":158671.0,"Objects":[{"StartTime":158671.0,"EndTime":158671.0,"X":342.0,"Y":13.0}]},{"StartTime":158782.0,"Objects":[{"StartTime":158782.0,"EndTime":158782.0,"X":342.0,"Y":13.0}]},{"StartTime":158893.0,"Objects":[{"StartTime":158893.0,"EndTime":158893.0,"X":342.0,"Y":13.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158948.0,"EndTime":158948.0,"X":339.757,"Y":37.673027,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":158968.0,"EndTime":158968.0,"X":342.0,"Y":13.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":159115.0,"Objects":[{"StartTime":159115.0,"EndTime":159115.0,"X":324.701019,"Y":148.701}]},{"StartTime":159171.0,"Objects":[{"StartTime":159171.0,"EndTime":159171.0,"X":328.3505,"Y":152.35051}]},{"StartTime":159226.0,"Objects":[{"StartTime":159226.0,"EndTime":159226.0,"X":332.0,"Y":156.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":159301.0,"EndTime":159301.0,"X":380.019165,"Y":166.010254,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":159449.0,"Objects":[{"StartTime":159449.0,"EndTime":159449.0,"X":456.0,"Y":260.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":159524.0,"EndTime":159524.0,"X":445.989746,"Y":308.019165,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":159671.0,"Objects":[{"StartTime":159671.0,"EndTime":159671.0,"X":340.0,"Y":368.0}]},{"StartTime":159782.0,"Objects":[{"StartTime":159782.0,"EndTime":159782.0,"X":340.0,"Y":368.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":159857.0,"EndTime":159857.0,"X":291.980835,"Y":357.989746,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":160004.0,"Objects":[{"StartTime":160004.0,"EndTime":160004.0,"X":44.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":160190.0,"EndTime":160190.0,"X":195.181229,"Y":229.801666,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":160337.0,"Objects":[{"StartTime":160337.0,"EndTime":160337.0,"X":324.0,"Y":28.0}]},{"StartTime":160449.0,"Objects":[{"StartTime":160449.0,"EndTime":160449.0,"X":264.0,"Y":100.0}]},{"StartTime":160560.0,"Objects":[{"StartTime":160560.0,"EndTime":160560.0,"X":312.0,"Y":180.0}]},{"StartTime":160671.0,"Objects":[{"StartTime":160671.0,"EndTime":160671.0,"X":404.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":160857.0,"EndTime":160857.0,"X":352.153137,"Y":316.6705,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":161004.0,"Objects":[{"StartTime":161004.0,"EndTime":161004.0,"X":184.0,"Y":328.0}]},{"StartTime":161115.0,"Objects":[{"StartTime":161115.0,"EndTime":161115.0,"X":96.0,"Y":352.0}]},{"StartTime":161226.0,"Objects":[{"StartTime":161226.0,"EndTime":161226.0,"X":32.0,"Y":280.0}]},{"StartTime":161337.0,"Objects":[{"StartTime":161337.0,"EndTime":161337.0,"X":56.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":161412.0,"EndTime":161412.0,"X":48.3044624,"Y":107.349075,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":161560.0,"Objects":[{"StartTime":161560.0,"EndTime":161560.0,"X":184.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":161746.0,"EndTime":161746.0,"X":321.449677,"Y":63.5203857,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":161893.0,"Objects":[{"StartTime":161893.0,"EndTime":161893.0,"X":476.0,"Y":176.0}]},{"StartTime":162004.0,"Objects":[{"StartTime":162004.0,"EndTime":162004.0,"X":384.0,"Y":196.0}]},{"StartTime":162115.0,"Objects":[{"StartTime":162115.0,"EndTime":162115.0,"X":356.0,"Y":280.0}]},{"StartTime":162226.0,"Objects":[{"StartTime":162226.0,"EndTime":162226.0,"X":416.0,"Y":352.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":162412.0,"EndTime":162412.0,"X":246.175339,"Y":359.7193,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":162560.0,"Objects":[{"StartTime":162560.0,"EndTime":162560.0,"X":64.0,"Y":312.0}]},{"StartTime":162671.0,"Objects":[{"StartTime":162671.0,"EndTime":162671.0,"X":128.0,"Y":244.0}]},{"StartTime":162782.0,"Objects":[{"StartTime":162782.0,"EndTime":162782.0,"X":152.0,"Y":156.0}]},{"StartTime":162893.0,"Objects":[{"StartTime":162893.0,"EndTime":162893.0,"X":96.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":162968.0,"EndTime":162968.0,"X":150.808136,"Y":18.1909065,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":163115.0,"Objects":[{"StartTime":163115.0,"EndTime":163115.0,"X":361.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":163190.0,"EndTime":163190.0,"X":415.8814,"Y":79.67221,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":163337.0,"Objects":[{"StartTime":163337.0,"EndTime":163337.0,"X":256.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":163412.0,"EndTime":163412.0,"X":256.0,"Y":139.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":163560.0,"Objects":[{"StartTime":163560.0,"EndTime":163560.0,"X":356.0,"Y":280.0}]},{"StartTime":163671.0,"Objects":[{"StartTime":163671.0,"EndTime":163671.0,"X":356.0,"Y":280.0}]},{"StartTime":163782.0,"Objects":[{"StartTime":163782.0,"EndTime":163782.0,"X":356.0,"Y":280.0}]},{"StartTime":163893.0,"Objects":[{"StartTime":163893.0,"EndTime":163893.0,"X":356.0,"Y":280.0}]},{"StartTime":164004.0,"Objects":[{"StartTime":164004.0,"EndTime":164004.0,"X":356.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":164190.0,"EndTime":164190.0,"X":216.722748,"Y":322.381317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":164337.0,"Objects":[{"StartTime":164337.0,"EndTime":164337.0,"X":124.0,"Y":344.0}]},{"StartTime":164449.0,"Objects":[{"StartTime":164449.0,"EndTime":164449.0,"X":92.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":164635.0,"EndTime":164635.0,"X":116.255264,"Y":109.43438,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":164782.0,"Objects":[{"StartTime":164782.0,"EndTime":164782.0,"X":180.0,"Y":184.0}]},{"StartTime":164893.0,"Objects":[{"StartTime":164893.0,"EndTime":164893.0,"X":180.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":164968.0,"EndTime":164968.0,"X":264.749634,"Y":177.4808,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":165115.0,"Objects":[{"StartTime":165115.0,"EndTime":165115.0,"X":500.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":165301.0,"EndTime":165301.0,"X":345.542877,"Y":109.4133,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":165449.0,"Objects":[{"StartTime":165449.0,"EndTime":165449.0,"X":320.0,"Y":236.0}]},{"StartTime":165560.0,"Objects":[{"StartTime":165560.0,"EndTime":165560.0,"X":320.0,"Y":236.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":165635.0,"EndTime":165635.0,"X":330.12735,"Y":320.394531,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":165782.0,"Objects":[{"StartTime":165782.0,"EndTime":165782.0,"X":432.0,"Y":156.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":165968.0,"EndTime":165968.0,"X":355.944641,"Y":21.43514,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166115.0,"Objects":[{"StartTime":166115.0,"EndTime":166115.0,"X":216.0,"Y":64.0}]},{"StartTime":166226.0,"Objects":[{"StartTime":166226.0,"EndTime":166226.0,"X":216.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166301.0,"EndTime":166301.0,"X":131.188263,"Y":69.65411,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166449.0,"Objects":[{"StartTime":166449.0,"EndTime":166449.0,"X":143.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166524.0,"EndTime":166524.0,"X":121.902931,"Y":286.720856,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166671.0,"Objects":[{"StartTime":166671.0,"EndTime":166671.0,"X":312.0,"Y":291.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166746.0,"EndTime":166746.0,"X":233.138763,"Y":269.922852,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":166893.0,"Objects":[{"StartTime":166893.0,"EndTime":166893.0,"X":379.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":166968.0,"EndTime":166968.0,"X":458.244446,"Y":204.810349,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":167115.0,"Objects":[{"StartTime":167115.0,"EndTime":167115.0,"X":456.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":167301.0,"EndTime":167301.0,"X":298.885925,"Y":68.90503,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":167449.0,"Objects":[{"StartTime":167449.0,"EndTime":167449.0,"X":112.0,"Y":148.0}]},{"StartTime":167560.0,"Objects":[{"StartTime":167560.0,"EndTime":167560.0,"X":160.0,"Y":228.0}]},{"StartTime":167671.0,"Objects":[{"StartTime":167671.0,"EndTime":167671.0,"X":248.0,"Y":256.0}]},{"StartTime":167782.0,"Objects":[{"StartTime":167782.0,"EndTime":167782.0,"X":336.0,"Y":228.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":167968.0,"EndTime":167968.0,"X":477.379944,"Y":264.4144,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168115.0,"Objects":[{"StartTime":168115.0,"EndTime":168115.0,"X":392.0,"Y":308.0}]},{"StartTime":168226.0,"Objects":[{"StartTime":168226.0,"EndTime":168226.0,"X":336.0,"Y":228.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168301.0,"EndTime":168301.0,"X":332.7332,"Y":143.0628,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168449.0,"Objects":[{"StartTime":168449.0,"EndTime":168449.0,"X":448.0,"Y":32.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168524.0,"EndTime":168524.0,"X":451.2668,"Y":116.937195,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":168671.0,"Objects":[{"StartTime":168671.0,"EndTime":168671.0,"X":392.0,"Y":308.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":168857.0,"EndTime":168857.0,"X":238.278824,"Y":295.8506,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169004.0,"Objects":[{"StartTime":169004.0,"EndTime":169004.0,"X":156.0,"Y":340.0}]},{"StartTime":169115.0,"Objects":[{"StartTime":169115.0,"EndTime":169115.0,"X":88.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":169190.0,"EndTime":169190.0,"X":117.84549,"Y":192.412018,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169337.0,"Objects":[{"StartTime":169337.0,"EndTime":169337.0,"X":88.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":169523.0,"EndTime":169523.0,"X":241.888382,"Y":84.10678,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":169671.0,"Objects":[{"StartTime":169671.0,"EndTime":169671.0,"X":416.0,"Y":28.0}]},{"StartTime":169782.0,"Objects":[{"StartTime":169782.0,"EndTime":169782.0,"X":360.0,"Y":104.0}]},{"StartTime":169893.0,"Objects":[{"StartTime":169893.0,"EndTime":169893.0,"X":352.0,"Y":196.0}]},{"StartTime":170004.0,"Objects":[{"StartTime":170004.0,"EndTime":170004.0,"X":396.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170079.0,"EndTime":170079.0,"X":421.4277,"Y":356.52002,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170226.0,"Objects":[{"StartTime":170226.0,"EndTime":170226.0,"X":272.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170301.0,"EndTime":170301.0,"X":246.572281,"Y":219.47998,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170449.0,"Objects":[{"StartTime":170449.0,"EndTime":170449.0,"X":68.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170524.0,"EndTime":170524.0,"X":150.606369,"Y":280.9753,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":170671.0,"Objects":[{"StartTime":170671.0,"EndTime":170671.0,"X":324.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":170857.0,"EndTime":170857.0,"X":216.197983,"Y":92.1464157,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171004.0,"Objects":[{"StartTime":171004.0,"EndTime":171004.0,"X":0.0,"Y":244.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171190.0,"EndTime":171190.0,"X":168.960251,"Y":262.773346,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171337.0,"Objects":[{"StartTime":171337.0,"EndTime":171337.0,"X":460.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171412.0,"EndTime":171412.0,"X":461.787476,"Y":324.6682,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171560.0,"Objects":[{"StartTime":171560.0,"EndTime":171560.0,"X":336.0,"Y":284.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171635.0,"EndTime":171635.0,"X":334.2125,"Y":199.331787,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":171782.0,"Objects":[{"StartTime":171782.0,"EndTime":171782.0,"X":388.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":171857.0,"EndTime":171857.0,"X":417.406158,"Y":117.402733,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172004.0,"Objects":[{"StartTime":172004.0,"EndTime":172004.0,"X":204.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172079.0,"EndTime":172079.0,"X":287.906921,"Y":88.144165,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172226.0,"Objects":[{"StartTime":172226.0,"EndTime":172226.0,"X":208.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172301.0,"EndTime":172301.0,"X":124.093079,"Y":183.855835,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172449.0,"Objects":[{"StartTime":172449.0,"EndTime":172449.0,"X":256.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172524.0,"EndTime":172524.0,"X":339.312347,"Y":63.6145,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172671.0,"Objects":[{"StartTime":172671.0,"EndTime":172671.0,"X":400.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172746.0,"EndTime":172746.0,"X":384.385468,"Y":275.312347,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":172893.0,"Objects":[{"StartTime":172893.0,"EndTime":172893.0,"X":256.0,"Y":336.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":172968.0,"EndTime":172968.0,"X":172.687653,"Y":320.3855,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":173115.0,"Objects":[{"StartTime":173115.0,"EndTime":173115.0,"X":112.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":173190.0,"EndTime":173190.0,"X":127.6145,"Y":108.687653,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":173337.0,"Objects":[{"StartTime":173337.0,"EndTime":173337.0,"X":400.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":173412.0,"EndTime":173412.0,"X":384.385468,"Y":275.312347,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":173560.0,"Objects":[{"StartTime":173560.0,"EndTime":173560.0,"X":256.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":173635.0,"EndTime":173635.0,"X":339.312347,"Y":63.6145,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":173782.0,"Objects":[{"StartTime":173782.0,"EndTime":173782.0,"X":172.0,"Y":320.0}]},{"StartTime":173893.0,"Objects":[{"StartTime":173893.0,"EndTime":173893.0,"X":117.0,"Y":245.0}]},{"StartTime":174004.0,"Objects":[{"StartTime":174004.0,"EndTime":174004.0,"X":116.0,"Y":153.0}]},{"StartTime":174115.0,"Objects":[{"StartTime":174115.0,"EndTime":174115.0,"X":169.0,"Y":78.0}]},{"StartTime":174226.0,"Objects":[{"StartTime":174226.0,"EndTime":174226.0,"X":256.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":174412.0,"EndTime":174412.0,"X":339.468872,"Y":164.666275,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":174560.0,"Objects":[{"StartTime":174560.0,"EndTime":174560.0,"X":168.0,"Y":268.0}]},{"StartTime":174671.0,"Objects":[{"StartTime":174671.0,"EndTime":174671.0,"X":238.0,"Y":207.0}]},{"StartTime":174782.0,"Objects":[{"StartTime":174782.0,"EndTime":174782.0,"X":329.0,"Y":194.0}]},{"StartTime":174893.0,"Objects":[{"StartTime":174893.0,"EndTime":174893.0,"X":413.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":175004.0,"EndTime":175004.0,"X":424.06662,"Y":316.27652,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":175079.0,"EndTime":175079.0,"X":413.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":175226.0,"Objects":[{"StartTime":175226.0,"EndTime":175226.0,"X":344.0,"Y":150.0}]},{"StartTime":175337.0,"Objects":[{"StartTime":175337.0,"EndTime":175337.0,"X":344.0,"Y":150.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":175412.0,"EndTime":175412.0,"X":260.536621,"Y":133.910675,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":175560.0,"Objects":[{"StartTime":175560.0,"EndTime":175560.0,"X":478.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":175635.0,"EndTime":175635.0,"X":468.068481,"Y":146.417816,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":175782.0,"Objects":[{"StartTime":175782.0,"EndTime":175782.0,"X":322.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":175968.0,"EndTime":175968.0,"X":170.064575,"Y":292.1422,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":176115.0,"Objects":[{"StartTime":176115.0,"EndTime":176115.0,"X":50.0,"Y":366.0}]},{"StartTime":176226.0,"Objects":[{"StartTime":176226.0,"EndTime":176226.0,"X":91.0,"Y":283.0}]},{"StartTime":176337.0,"Objects":[{"StartTime":176337.0,"EndTime":176337.0,"X":81.0,"Y":191.0}]},{"StartTime":176449.0,"Objects":[{"StartTime":176449.0,"EndTime":176449.0,"X":24.0,"Y":119.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":176635.0,"EndTime":176635.0,"X":175.935425,"Y":154.857788,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":176782.0,"Objects":[{"StartTime":176782.0,"EndTime":176782.0,"X":327.0,"Y":79.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":176968.0,"EndTime":176968.0,"X":306.514526,"Y":247.7612,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177115.0,"Objects":[{"StartTime":177115.0,"EndTime":177115.0,"X":125.0,"Y":323.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":177190.0,"EndTime":177190.0,"X":203.49823,"Y":298.039764,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177337.0,"Objects":[{"StartTime":177337.0,"EndTime":177337.0,"X":389.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":177412.0,"EndTime":177412.0,"X":306.045349,"Y":247.667252,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177560.0,"Objects":[{"StartTime":177560.0,"EndTime":177560.0,"X":180.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":177635.0,"EndTime":177635.0,"X":249.856644,"Y":116.309669,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":177782.0,"Objects":[{"StartTime":177782.0,"EndTime":177782.0,"X":66.0,"Y":257.0}]},{"StartTime":177893.0,"Objects":[{"StartTime":177893.0,"EndTime":177893.0,"X":64.0,"Y":235.0}]},{"StartTime":178004.0,"Objects":[{"StartTime":178004.0,"EndTime":178004.0,"X":63.0,"Y":214.0}]},{"StartTime":178115.0,"Objects":[{"StartTime":178115.0,"EndTime":178115.0,"X":62.0,"Y":193.0}]},{"StartTime":178226.0,"Objects":[{"StartTime":178226.0,"EndTime":178226.0,"X":61.0,"Y":172.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":178412.0,"EndTime":178412.0,"X":146.4032,"Y":243.470139,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":178560.0,"Objects":[{"StartTime":178560.0,"EndTime":178560.0,"X":4.0,"Y":96.0}]},{"StartTime":178671.0,"Objects":[{"StartTime":178671.0,"EndTime":178671.0,"X":81.0,"Y":61.0}]},{"StartTime":178782.0,"Objects":[{"StartTime":178782.0,"EndTime":178782.0,"X":164.0,"Y":73.0}]},{"StartTime":178893.0,"Objects":[{"StartTime":178893.0,"EndTime":178893.0,"X":227.0,"Y":128.0}]},{"StartTime":179004.0,"Objects":[{"StartTime":179004.0,"EndTime":179004.0,"X":251.0,"Y":209.0}]},{"StartTime":179115.0,"Objects":[{"StartTime":179115.0,"EndTime":179115.0,"X":228.0,"Y":289.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":179190.0,"EndTime":179190.0,"X":215.417068,"Y":207.655624,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":179337.0,"Objects":[{"StartTime":179337.0,"EndTime":179337.0,"X":401.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":179523.0,"EndTime":179523.0,"X":254.5407,"Y":108.325722,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":179671.0,"Objects":[{"StartTime":179671.0,"EndTime":179671.0,"X":93.0,"Y":212.0}]},{"StartTime":179782.0,"Objects":[{"StartTime":179782.0,"EndTime":179782.0,"X":93.0,"Y":212.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":179857.0,"EndTime":179857.0,"X":172.022354,"Y":235.615982,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":180004.0,"Objects":[{"StartTime":180004.0,"EndTime":180004.0,"X":334.0,"Y":366.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":180190.0,"EndTime":180190.0,"X":344.786163,"Y":196.393326,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":180337.0,"Objects":[{"StartTime":180337.0,"EndTime":180337.0,"X":311.0,"Y":33.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":180448.0,"EndTime":180448.0,"X":230.004761,"Y":19.62839,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":180523.0,"EndTime":180523.0,"X":311.0,"Y":33.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":180671.0,"Objects":[{"StartTime":180671.0,"EndTime":180671.0,"X":289.0,"Y":212.0}]},{"StartTime":180782.0,"Objects":[{"StartTime":180782.0,"EndTime":180782.0,"X":196.0,"Y":198.0}]},{"StartTime":180893.0,"Objects":[{"StartTime":180893.0,"EndTime":180893.0,"X":255.0,"Y":124.0}]},{"StartTime":181004.0,"Objects":[{"StartTime":181004.0,"EndTime":181004.0,"X":301.0,"Y":221.0}]},{"StartTime":181115.0,"Objects":[{"StartTime":181115.0,"EndTime":181115.0,"X":181.0,"Y":203.0}]},{"StartTime":181226.0,"Objects":[{"StartTime":181226.0,"EndTime":181226.0,"X":257.0,"Y":108.0}]},{"StartTime":181337.0,"Objects":[{"StartTime":181337.0,"EndTime":181337.0,"X":372.0,"Y":147.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":181523.0,"EndTime":181523.0,"X":375.6031,"Y":297.656464,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":181671.0,"Objects":[{"StartTime":181671.0,"EndTime":181671.0,"X":163.0,"Y":238.0}]},{"StartTime":181782.0,"Objects":[{"StartTime":181782.0,"EndTime":181782.0,"X":74.0,"Y":225.0}]},{"StartTime":181893.0,"Objects":[{"StartTime":181893.0,"EndTime":181893.0,"X":18.0,"Y":294.0}]},{"StartTime":182004.0,"Objects":[{"StartTime":182004.0,"EndTime":182004.0,"X":50.0,"Y":378.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":182190.0,"EndTime":182190.0,"X":210.439133,"Y":359.855164,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":182337.0,"Objects":[{"StartTime":182337.0,"EndTime":182337.0,"X":355.0,"Y":315.0}]},{"StartTime":182449.0,"Objects":[{"StartTime":182449.0,"EndTime":182449.0,"X":355.0,"Y":315.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":182524.0,"EndTime":182524.0,"X":349.108246,"Y":231.35257,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":182671.0,"Objects":[{"StartTime":182671.0,"EndTime":182671.0,"X":423.0,"Y":86.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":182746.0,"EndTime":182746.0,"X":428.891754,"Y":169.64743,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":182893.0,"Objects":[{"StartTime":182893.0,"EndTime":182893.0,"X":214.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183079.0,"EndTime":183079.0,"X":46.0509644,"Y":139.327148,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":183226.0,"Objects":[{"StartTime":183226.0,"EndTime":183226.0,"X":181.0,"Y":224.0}]},{"StartTime":183337.0,"Objects":[{"StartTime":183337.0,"EndTime":183337.0,"X":264.0,"Y":237.0}]},{"StartTime":183449.0,"Objects":[{"StartTime":183449.0,"EndTime":183449.0,"X":348.0,"Y":250.0}]},{"StartTime":183560.0,"Objects":[{"StartTime":183560.0,"EndTime":183560.0,"X":431.0,"Y":262.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183671.0,"EndTime":183671.0,"X":448.007324,"Y":343.90332,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":183746.0,"EndTime":183746.0,"X":431.0,"Y":262.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":183893.0,"Objects":[{"StartTime":183893.0,"EndTime":183893.0,"X":282.0,"Y":68.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":184079.0,"EndTime":184079.0,"X":216.012039,"Y":194.120026,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":184226.0,"Objects":[{"StartTime":184226.0,"EndTime":184226.0,"X":391.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":184301.0,"EndTime":184301.0,"X":307.156525,"Y":161.0261,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":184449.0,"Objects":[{"StartTime":184449.0,"EndTime":184449.0,"X":132.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":184524.0,"EndTime":184524.0,"X":185.825211,"Y":232.213623,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":184671.0,"Objects":[{"StartTime":184671.0,"EndTime":184671.0,"X":154.0,"Y":12.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":184746.0,"EndTime":184746.0,"X":183.291321,"Y":91.7936,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":184893.0,"Objects":[{"StartTime":184893.0,"EndTime":184893.0,"X":395.0,"Y":82.0}]},{"StartTime":185004.0,"Objects":[{"StartTime":185004.0,"EndTime":185004.0,"X":473.0,"Y":129.0}]},{"StartTime":185115.0,"Objects":[{"StartTime":185115.0,"EndTime":185115.0,"X":391.0,"Y":175.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":185190.0,"EndTime":185190.0,"X":307.55957,"Y":170.7346,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":185337.0,"Objects":[{"StartTime":185337.0,"EndTime":185337.0,"X":105.0,"Y":112.0}]},{"StartTime":185449.0,"Objects":[{"StartTime":185449.0,"EndTime":185449.0,"X":26.0,"Y":158.0}]},{"StartTime":185560.0,"Objects":[{"StartTime":185560.0,"EndTime":185560.0,"X":108.0,"Y":204.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":185635.0,"EndTime":185635.0,"X":191.442719,"Y":198.202209,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":185782.0,"Objects":[{"StartTime":185782.0,"EndTime":185782.0,"X":314.0,"Y":35.0}]},{"StartTime":185893.0,"Objects":[{"StartTime":185893.0,"EndTime":185893.0,"X":230.0,"Y":71.0}]},{"StartTime":186004.0,"Objects":[{"StartTime":186004.0,"EndTime":186004.0,"X":188.0,"Y":153.0}]},{"StartTime":186115.0,"Objects":[{"StartTime":186115.0,"EndTime":186115.0,"X":206.0,"Y":243.0}]},{"StartTime":186226.0,"Objects":[{"StartTime":186226.0,"EndTime":186226.0,"X":277.0,"Y":300.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":186301.0,"EndTime":186301.0,"X":359.753845,"Y":313.858582,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":186449.0,"Objects":[{"StartTime":186449.0,"EndTime":186449.0,"X":469.0,"Y":143.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":186524.0,"EndTime":186524.0,"X":388.1845,"Y":159.058762,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":186671.0,"Objects":[{"StartTime":186671.0,"EndTime":186671.0,"X":180.0,"Y":96.0}]},{"StartTime":186782.0,"Objects":[{"StartTime":186782.0,"EndTime":186782.0,"X":180.0,"Y":96.0}]},{"StartTime":186893.0,"Objects":[{"StartTime":186893.0,"EndTime":186893.0,"X":180.0,"Y":96.0}]},{"StartTime":187115.0,"Objects":[{"StartTime":187115.0,"EndTime":187115.0,"X":333.0,"Y":236.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":187190.0,"EndTime":187190.0,"X":343.066284,"Y":151.598175,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":187337.0,"Objects":[{"StartTime":187337.0,"EndTime":187337.0,"X":404.0,"Y":53.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":187392.0,"EndTime":187392.0,"X":398.1796,"Y":11.2869987,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":187412.0,"EndTime":187412.0,"X":404.0,"Y":53.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":187560.0,"Objects":[{"StartTime":187560.0,"EndTime":187560.0,"X":426.0,"Y":195.0}]},{"StartTime":187671.0,"Objects":[{"StartTime":187671.0,"EndTime":187671.0,"X":426.0,"Y":195.0}]},{"StartTime":187893.0,"Objects":[{"StartTime":187893.0,"EndTime":187893.0,"X":240.0,"Y":159.0}]},{"StartTime":188115.0,"Objects":[{"StartTime":188115.0,"EndTime":188115.0,"X":350.0,"Y":339.0}]},{"StartTime":188449.0,"Objects":[{"StartTime":188449.0,"EndTime":188449.0,"X":70.0,"Y":296.0}]},{"StartTime":195560.0,"Objects":[{"StartTime":195560.0,"EndTime":195560.0,"X":432.0,"Y":192.0}]},{"StartTime":195671.0,"Objects":[{"StartTime":195671.0,"EndTime":195671.0,"X":432.0,"Y":168.0}]},{"StartTime":195782.0,"Objects":[{"StartTime":195782.0,"EndTime":195782.0,"X":424.0,"Y":144.0}]},{"StartTime":195893.0,"Objects":[{"StartTime":195893.0,"EndTime":195893.0,"X":416.0,"Y":120.0}]},{"StartTime":196004.0,"Objects":[{"StartTime":196004.0,"EndTime":196004.0,"X":400.0,"Y":96.0}]},{"StartTime":196115.0,"Objects":[{"StartTime":196115.0,"EndTime":196115.0,"X":384.0,"Y":80.0}]},{"StartTime":196226.0,"Objects":[{"StartTime":196226.0,"EndTime":196226.0,"X":368.0,"Y":64.0}]},{"StartTime":196337.0,"Objects":[{"StartTime":196337.0,"EndTime":196337.0,"X":344.0,"Y":48.0}]},{"StartTime":196449.0,"Objects":[{"StartTime":196449.0,"EndTime":196449.0,"X":320.0,"Y":40.0}]},{"StartTime":196560.0,"Objects":[{"StartTime":196560.0,"EndTime":196560.0,"X":296.0,"Y":40.0}]},{"StartTime":196671.0,"Objects":[{"StartTime":196671.0,"EndTime":196671.0,"X":272.0,"Y":40.0}]},{"StartTime":196782.0,"Objects":[{"StartTime":196782.0,"EndTime":196782.0,"X":248.0,"Y":48.0}]},{"StartTime":196893.0,"Objects":[{"StartTime":196893.0,"EndTime":196893.0,"X":224.0,"Y":64.0}]},{"StartTime":197004.0,"Objects":[{"StartTime":197004.0,"EndTime":197004.0,"X":208.0,"Y":80.0}]},{"StartTime":197115.0,"Objects":[{"StartTime":197115.0,"EndTime":197115.0,"X":192.0,"Y":104.0}]},{"StartTime":197226.0,"Objects":[{"StartTime":197226.0,"EndTime":197226.0,"X":184.0,"Y":128.0}]},{"StartTime":197337.0,"Objects":[{"StartTime":197337.0,"EndTime":197337.0,"X":176.0,"Y":152.0}]},{"StartTime":197449.0,"Objects":[{"StartTime":197449.0,"EndTime":197449.0,"X":160.0,"Y":168.0}]},{"StartTime":197560.0,"Objects":[{"StartTime":197560.0,"EndTime":197560.0,"X":136.0,"Y":184.0}]},{"StartTime":197671.0,"Objects":[{"StartTime":197671.0,"EndTime":197671.0,"X":112.0,"Y":192.0}]},{"StartTime":197782.0,"Objects":[{"StartTime":197782.0,"EndTime":197782.0,"X":96.0,"Y":208.0}]},{"StartTime":197893.0,"Objects":[{"StartTime":197893.0,"EndTime":197893.0,"X":80.0,"Y":232.0}]},{"StartTime":198004.0,"Objects":[{"StartTime":198004.0,"EndTime":198004.0,"X":80.0,"Y":256.0}]},{"StartTime":198115.0,"Objects":[{"StartTime":198115.0,"EndTime":198115.0,"X":88.0,"Y":280.0}]},{"StartTime":198226.0,"Objects":[{"StartTime":198226.0,"EndTime":198226.0,"X":112.0,"Y":296.0}]},{"StartTime":198337.0,"Objects":[{"StartTime":198337.0,"EndTime":198337.0,"X":136.0,"Y":304.0}]},{"StartTime":198449.0,"Objects":[{"StartTime":198449.0,"EndTime":198449.0,"X":160.0,"Y":304.0}]},{"StartTime":198560.0,"Objects":[{"StartTime":198560.0,"EndTime":198560.0,"X":184.0,"Y":296.0}]},{"StartTime":198671.0,"Objects":[{"StartTime":198671.0,"EndTime":198671.0,"X":200.0,"Y":280.0}]},{"StartTime":198782.0,"Objects":[{"StartTime":198782.0,"EndTime":198782.0,"X":224.0,"Y":264.0}]},{"StartTime":198893.0,"Objects":[{"StartTime":198893.0,"EndTime":198893.0,"X":248.0,"Y":256.0}]},{"StartTime":199004.0,"Objects":[{"StartTime":199004.0,"EndTime":199004.0,"X":272.0,"Y":264.0}]},{"StartTime":199115.0,"Objects":[{"StartTime":199115.0,"EndTime":199115.0,"X":296.0,"Y":280.0}]},{"StartTime":199226.0,"Objects":[{"StartTime":199226.0,"EndTime":199226.0,"X":320.0,"Y":288.0}]},{"StartTime":199337.0,"Objects":[{"StartTime":199337.0,"EndTime":199337.0,"X":344.0,"Y":288.0}]},{"StartTime":199449.0,"Objects":[{"StartTime":199449.0,"EndTime":199449.0,"X":368.0,"Y":280.0}]},{"StartTime":199560.0,"Objects":[{"StartTime":199560.0,"EndTime":199560.0,"X":392.0,"Y":264.0}]},{"StartTime":199671.0,"Objects":[{"StartTime":199671.0,"EndTime":199671.0,"X":408.0,"Y":248.0}]},{"StartTime":199782.0,"Objects":[{"StartTime":199782.0,"EndTime":199782.0,"X":424.0,"Y":224.0}]},{"StartTime":199893.0,"Objects":[{"StartTime":199893.0,"EndTime":199893.0,"X":432.0,"Y":200.0}]},{"StartTime":200004.0,"Objects":[{"StartTime":200004.0,"EndTime":200004.0,"X":432.0,"Y":176.0}]},{"StartTime":200115.0,"Objects":[{"StartTime":200115.0,"EndTime":200115.0,"X":424.0,"Y":152.0}]},{"StartTime":200226.0,"Objects":[{"StartTime":200226.0,"EndTime":200226.0,"X":416.0,"Y":128.0}]},{"StartTime":200337.0,"Objects":[{"StartTime":200337.0,"EndTime":200337.0,"X":400.0,"Y":104.0}]},{"StartTime":200449.0,"Objects":[{"StartTime":200449.0,"EndTime":200449.0,"X":384.0,"Y":88.0}]},{"StartTime":200560.0,"Objects":[{"StartTime":200560.0,"EndTime":200560.0,"X":360.0,"Y":72.0}]},{"StartTime":200671.0,"Objects":[{"StartTime":200671.0,"EndTime":200671.0,"X":336.0,"Y":64.0}]},{"StartTime":200782.0,"Objects":[{"StartTime":200782.0,"EndTime":200782.0,"X":312.0,"Y":64.0}]},{"StartTime":200893.0,"Objects":[{"StartTime":200893.0,"EndTime":200893.0,"X":288.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":200920.0,"EndTime":200920.0,"X":283.0971,"Y":47.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201004.0,"Objects":[{"StartTime":201004.0,"EndTime":201004.0,"X":264.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201031.0,"EndTime":201031.0,"X":259.0971,"Y":55.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201115.0,"Objects":[{"StartTime":201115.0,"EndTime":201115.0,"X":240.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201142.0,"EndTime":201142.0,"X":235.097092,"Y":63.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201226.0,"Objects":[{"StartTime":201226.0,"EndTime":201226.0,"X":216.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201253.0,"EndTime":201253.0,"X":211.097092,"Y":71.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201337.0,"Objects":[{"StartTime":201337.0,"EndTime":201337.0,"X":192.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201364.0,"EndTime":201364.0,"X":187.097092,"Y":79.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201449.0,"Objects":[{"StartTime":201449.0,"EndTime":201449.0,"X":168.0,"Y":112.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201476.0,"EndTime":201476.0,"X":163.097092,"Y":87.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201560.0,"Objects":[{"StartTime":201560.0,"EndTime":201560.0,"X":144.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201587.0,"EndTime":201587.0,"X":139.097092,"Y":95.48548,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201671.0,"Objects":[{"StartTime":201671.0,"EndTime":201671.0,"X":120.0,"Y":128.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201698.0,"EndTime":201698.0,"X":115.0971,"Y":103.485489,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201782.0,"Objects":[{"StartTime":201782.0,"EndTime":201782.0,"X":96.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201809.0,"EndTime":201809.0,"X":84.33103,"Y":113.890381,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":201893.0,"Objects":[{"StartTime":201893.0,"EndTime":201893.0,"X":57.0,"Y":173.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":201920.0,"EndTime":201920.0,"X":36.010746,"Y":159.418716,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202004.0,"Objects":[{"StartTime":202004.0,"EndTime":202004.0,"X":41.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202031.0,"EndTime":202031.0,"X":16.03119,"Y":222.751556,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202115.0,"Objects":[{"StartTime":202115.0,"EndTime":202115.0,"X":53.0,"Y":277.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202142.0,"EndTime":202142.0,"X":30.6393185,"Y":288.180328,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202226.0,"Objects":[{"StartTime":202226.0,"EndTime":202226.0,"X":90.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202253.0,"EndTime":202253.0,"X":76.13249,"Y":336.80127,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202337.0,"Objects":[{"StartTime":202337.0,"EndTime":202337.0,"X":141.0,"Y":332.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202364.0,"EndTime":202364.0,"X":139.719635,"Y":356.9672,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202449.0,"Objects":[{"StartTime":202449.0,"EndTime":202449.0,"X":194.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202476.0,"EndTime":202476.0,"X":205.4337,"Y":342.2322,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202560.0,"Objects":[{"StartTime":202560.0,"EndTime":202560.0,"X":233.0,"Y":283.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202587.0,"EndTime":202587.0,"X":254.091537,"Y":296.421875,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":202671.0,"Objects":[{"StartTime":202671.0,"EndTime":202671.0,"X":249.0,"Y":231.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":202857.0,"EndTime":202857.0,"X":398.498627,"Y":218.746017,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":203115.0,"Objects":[{"StartTime":203115.0,"EndTime":203115.0,"X":496.0,"Y":104.0}]},{"StartTime":203337.0,"Objects":[{"StartTime":203337.0,"EndTime":203337.0,"X":400.0,"Y":328.0}]},{"StartTime":203449.0,"Objects":[{"StartTime":203449.0,"EndTime":203449.0,"X":400.0,"Y":328.0}]},{"StartTime":203560.0,"Objects":[{"StartTime":203560.0,"EndTime":203560.0,"X":400.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":203746.0,"EndTime":203746.0,"X":336.4116,"Y":258.334137,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":203893.0,"Objects":[{"StartTime":203893.0,"EndTime":203893.0,"X":296.0,"Y":104.0}]},{"StartTime":204004.0,"Objects":[{"StartTime":204004.0,"EndTime":204004.0,"X":296.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":204079.0,"EndTime":204079.0,"X":345.497467,"Y":111.071068,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":204226.0,"Objects":[{"StartTime":204226.0,"EndTime":204226.0,"X":160.0,"Y":168.0}]},{"StartTime":204337.0,"Objects":[{"StartTime":204337.0,"EndTime":204337.0,"X":160.0,"Y":168.0}]},{"StartTime":204449.0,"Objects":[{"StartTime":204449.0,"EndTime":204449.0,"X":160.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":204635.0,"EndTime":204635.0,"X":66.598465,"Y":180.720764,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":204893.0,"Objects":[{"StartTime":204893.0,"EndTime":204893.0,"X":136.0,"Y":320.0}]},{"StartTime":205115.0,"Objects":[{"StartTime":205115.0,"EndTime":205115.0,"X":304.0,"Y":224.0}]},{"StartTime":205226.0,"Objects":[{"StartTime":205226.0,"EndTime":205226.0,"X":328.0,"Y":224.0}]},{"StartTime":205337.0,"Objects":[{"StartTime":205337.0,"EndTime":205337.0,"X":352.0,"Y":224.0}]},{"StartTime":205560.0,"Objects":[{"StartTime":205560.0,"EndTime":205560.0,"X":464.0,"Y":144.0}]},{"StartTime":205671.0,"Objects":[{"StartTime":205671.0,"EndTime":205671.0,"X":464.0,"Y":144.0}]},{"StartTime":205782.0,"Objects":[{"StartTime":205782.0,"EndTime":205782.0,"X":464.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":205857.0,"EndTime":205857.0,"X":480.1552,"Y":98.39854,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":206004.0,"Objects":[{"StartTime":206004.0,"EndTime":206004.0,"X":400.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":206079.0,"EndTime":206079.0,"X":383.8448,"Y":365.601471,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":206226.0,"Objects":[{"StartTime":206226.0,"EndTime":206226.0,"X":304.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":206412.0,"EndTime":206412.0,"X":211.075516,"Y":206.428955,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":206671.0,"Objects":[{"StartTime":206671.0,"EndTime":206671.0,"X":24.0,"Y":296.0}]},{"StartTime":206893.0,"Objects":[{"StartTime":206893.0,"EndTime":206893.0,"X":160.0,"Y":104.0}]},{"StartTime":207115.0,"Objects":[{"StartTime":207115.0,"EndTime":207115.0,"X":248.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":207301.0,"EndTime":207301.0,"X":340.9245,"Y":321.571045,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":207782.0,"Objects":[{"StartTime":207782.0,"EndTime":207782.0,"X":340.0,"Y":321.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":207968.0,"EndTime":207968.0,"X":321.571136,"Y":222.712769,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":208226.0,"Objects":[{"StartTime":208226.0,"EndTime":208226.0,"X":376.0,"Y":72.0}]},{"StartTime":208449.0,"Objects":[{"StartTime":208449.0,"EndTime":208449.0,"X":144.0,"Y":152.0}]},{"StartTime":208671.0,"Objects":[{"StartTime":208671.0,"EndTime":208671.0,"X":256.0,"Y":336.0}]},{"StartTime":208893.0,"Objects":[{"StartTime":208893.0,"EndTime":208893.0,"X":272.0,"Y":40.0}]},{"StartTime":209115.0,"Objects":[{"StartTime":209115.0,"EndTime":209115.0,"X":112.0,"Y":304.0}]},{"StartTime":209337.0,"Objects":[{"StartTime":209337.0,"EndTime":209337.0,"X":440.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":209412.0,"EndTime":209412.0,"X":489.739655,"Y":225.6747,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":209560.0,"Objects":[{"StartTime":209560.0,"EndTime":209560.0,"X":440.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":209635.0,"EndTime":209635.0,"X":390.260345,"Y":318.325317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":209782.0,"Objects":[{"StartTime":209782.0,"EndTime":209782.0,"X":248.0,"Y":232.0}]},{"StartTime":209893.0,"Objects":[{"StartTime":209893.0,"EndTime":209893.0,"X":216.0,"Y":216.0}]},{"StartTime":210004.0,"Objects":[{"StartTime":210004.0,"EndTime":210004.0,"X":184.0,"Y":208.0}]},{"StartTime":210115.0,"Objects":[{"StartTime":210115.0,"EndTime":210115.0,"X":152.0,"Y":208.0}]},{"StartTime":210226.0,"Objects":[{"StartTime":210226.0,"EndTime":210226.0,"X":121.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":210301.0,"EndTime":210301.0,"X":114.463181,"Y":173.429138,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":210449.0,"Objects":[{"StartTime":210449.0,"EndTime":210449.0,"X":53.0,"Y":84.0}]},{"StartTime":210560.0,"Objects":[{"StartTime":210560.0,"EndTime":210560.0,"X":53.0,"Y":84.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":210746.0,"EndTime":210746.0,"X":149.715561,"Y":70.03106,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":210893.0,"Objects":[{"StartTime":210893.0,"EndTime":210893.0,"X":339.0,"Y":150.0}]},{"StartTime":211004.0,"Objects":[{"StartTime":211004.0,"EndTime":211004.0,"X":339.0,"Y":150.0}]},{"StartTime":211115.0,"Objects":[{"StartTime":211115.0,"EndTime":211115.0,"X":339.0,"Y":150.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":211301.0,"EndTime":211301.0,"X":239.215088,"Y":143.4448,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":211449.0,"Objects":[{"StartTime":211449.0,"EndTime":211449.0,"X":406.0,"Y":107.0}]},{"StartTime":211560.0,"Objects":[{"StartTime":211560.0,"EndTime":211560.0,"X":406.0,"Y":107.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":211857.0,"EndTime":211857.0,"X":400.23468,"Y":244.319275,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212004.0,"Objects":[{"StartTime":212004.0,"EndTime":212004.0,"X":461.0,"Y":315.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212079.0,"EndTime":212079.0,"X":510.76535,"Y":310.1617,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212226.0,"Objects":[{"StartTime":212226.0,"EndTime":212226.0,"X":308.0,"Y":351.0}]},{"StartTime":212337.0,"Objects":[{"StartTime":212337.0,"EndTime":212337.0,"X":308.0,"Y":351.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":212523.0,"EndTime":212523.0,"X":212.197952,"Y":335.321045,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":212671.0,"Objects":[{"StartTime":212671.0,"EndTime":212671.0,"X":64.0,"Y":352.0}]},{"StartTime":212782.0,"Objects":[{"StartTime":212782.0,"EndTime":212782.0,"X":64.0,"Y":352.0}]},{"StartTime":212893.0,"Objects":[{"StartTime":212893.0,"EndTime":212893.0,"X":64.0,"Y":352.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":213079.0,"EndTime":213079.0,"X":91.47211,"Y":255.8476,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":213226.0,"Objects":[{"StartTime":213226.0,"EndTime":213226.0,"X":56.0,"Y":96.0}]},{"StartTime":213337.0,"Objects":[{"StartTime":213337.0,"EndTime":213337.0,"X":56.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":213634.0,"EndTime":213634.0,"X":185.197464,"Y":125.872383,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":213782.0,"Objects":[{"StartTime":213782.0,"EndTime":213782.0,"X":232.0,"Y":104.0}]},{"StartTime":213893.0,"Objects":[{"StartTime":213893.0,"EndTime":213893.0,"X":280.0,"Y":80.0}]},{"StartTime":214004.0,"Objects":[{"StartTime":214004.0,"EndTime":214004.0,"X":328.0,"Y":72.0}]},{"StartTime":214115.0,"Objects":[{"StartTime":214115.0,"EndTime":214115.0,"X":376.0,"Y":80.0}]},{"StartTime":214226.0,"Objects":[{"StartTime":214226.0,"EndTime":214226.0,"X":416.0,"Y":104.0}]},{"StartTime":214337.0,"Objects":[{"StartTime":214337.0,"EndTime":214337.0,"X":448.0,"Y":144.0}]},{"StartTime":214449.0,"Objects":[{"StartTime":214449.0,"EndTime":214449.0,"X":456.0,"Y":192.0}]},{"StartTime":214560.0,"Objects":[{"StartTime":214560.0,"EndTime":214560.0,"X":448.0,"Y":240.0}]},{"StartTime":214671.0,"Objects":[{"StartTime":214671.0,"EndTime":214671.0,"X":416.0,"Y":280.0}]},{"StartTime":214782.0,"Objects":[{"StartTime":214782.0,"EndTime":214782.0,"X":376.0,"Y":304.0}]},{"StartTime":214893.0,"Objects":[{"StartTime":214893.0,"EndTime":214893.0,"X":328.0,"Y":312.0}]},{"StartTime":215004.0,"Objects":[{"StartTime":215004.0,"EndTime":215004.0,"X":280.0,"Y":304.0}]},{"StartTime":215115.0,"Objects":[{"StartTime":215115.0,"EndTime":215115.0,"X":240.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215142.0,"EndTime":215142.0,"X":215.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215226.0,"Objects":[{"StartTime":215226.0,"EndTime":215226.0,"X":215.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215253.0,"EndTime":215253.0,"X":190.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215337.0,"Objects":[{"StartTime":215337.0,"EndTime":215337.0,"X":190.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215364.0,"EndTime":215364.0,"X":165.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215449.0,"Objects":[{"StartTime":215449.0,"EndTime":215449.0,"X":165.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215476.0,"EndTime":215476.0,"X":140.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":215560.0,"Objects":[{"StartTime":215560.0,"EndTime":215560.0,"X":112.0,"Y":280.0}]},{"StartTime":215671.0,"Objects":[{"StartTime":215671.0,"EndTime":215671.0,"X":32.0,"Y":224.0}]},{"StartTime":215782.0,"Objects":[{"StartTime":215782.0,"EndTime":215782.0,"X":120.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215837.0,"EndTime":215837.0,"X":120.0,"Y":151.22522,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":215857.0,"EndTime":215857.0,"X":120.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":216115.0,"Objects":[{"StartTime":216115.0,"EndTime":216115.0,"X":240.0,"Y":64.0}]},{"StartTime":216337.0,"Objects":[{"StartTime":216337.0,"EndTime":216337.0,"X":344.0,"Y":224.0}]},{"StartTime":216560.0,"Objects":[{"StartTime":216560.0,"EndTime":216560.0,"X":448.0,"Y":32.0}]},{"StartTime":216893.0,"Objects":[{"StartTime":216893.0,"EndTime":216893.0,"X":145.0,"Y":84.0}]},{"StartTime":217115.0,"Objects":[{"StartTime":217115.0,"EndTime":217115.0,"X":198.0,"Y":332.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":217301.0,"EndTime":217301.0,"X":215.926071,"Y":213.346481,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":217449.0,"Objects":[{"StartTime":217449.0,"EndTime":217449.0,"X":308.0,"Y":165.0}]},{"StartTime":217560.0,"Objects":[{"StartTime":217560.0,"EndTime":217560.0,"X":308.0,"Y":165.0}]},{"StartTime":217782.0,"Objects":[{"StartTime":217782.0,"EndTime":217782.0,"X":81.0,"Y":244.0}]},{"StartTime":217893.0,"Objects":[{"StartTime":217893.0,"EndTime":217893.0,"X":76.0,"Y":214.0}]},{"StartTime":218004.0,"Objects":[{"StartTime":218004.0,"EndTime":218004.0,"X":72.0,"Y":184.0}]},{"StartTime":218115.0,"Objects":[{"StartTime":218115.0,"EndTime":218115.0,"X":67.0,"Y":155.0}]},{"StartTime":218226.0,"Objects":[{"StartTime":218226.0,"EndTime":218226.0,"X":63.0,"Y":125.0}]},{"StartTime":218449.0,"Objects":[{"StartTime":218449.0,"EndTime":218449.0,"X":200.0,"Y":49.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":218746.0,"EndTime":218746.0,"X":368.463257,"Y":79.80888,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":218893.0,"Objects":[{"StartTime":218893.0,"EndTime":218893.0,"X":422.0,"Y":36.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219190.0,"EndTime":219190.0,"X":352.063354,"Y":185.676758,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":219337.0,"Objects":[{"StartTime":219337.0,"EndTime":219337.0,"X":512.0,"Y":151.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219412.0,"EndTime":219412.0,"X":452.663818,"Y":142.099579,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":219560.0,"Objects":[{"StartTime":219560.0,"EndTime":219560.0,"X":318.0,"Y":194.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219615.0,"EndTime":219615.0,"X":288.526764,"Y":198.287018,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219671.0,"EndTime":219671.0,"X":317.892822,"Y":194.0156,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219726.0,"EndTime":219726.0,"X":288.4196,"Y":198.3026,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219782.0,"EndTime":219782.0,"X":317.785645,"Y":194.031174,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":219801.0,"EndTime":219801.0,"X":288.3124,"Y":198.318192,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":219893.0,"Objects":[{"StartTime":219893.0,"EndTime":219893.0,"X":424.0,"Y":218.0}]},{"StartTime":220004.0,"Objects":[{"StartTime":220004.0,"EndTime":220004.0,"X":426.0,"Y":247.0}]},{"StartTime":220115.0,"Objects":[{"StartTime":220115.0,"EndTime":220115.0,"X":429.0,"Y":276.0}]},{"StartTime":220226.0,"Objects":[{"StartTime":220226.0,"EndTime":220226.0,"X":432.0,"Y":305.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":220634.0,"EndTime":220634.0,"X":203.804153,"Y":317.883484,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":220893.0,"Objects":[{"StartTime":220893.0,"EndTime":220893.0,"X":97.0,"Y":166.0}]},{"StartTime":221115.0,"Objects":[{"StartTime":221115.0,"EndTime":221115.0,"X":269.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":221190.0,"EndTime":221190.0,"X":275.707672,"Y":155.376129,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":221337.0,"Objects":[{"StartTime":221337.0,"EndTime":221337.0,"X":159.0,"Y":41.0}]},{"StartTime":221449.0,"Objects":[{"StartTime":221449.0,"EndTime":221449.0,"X":163.0,"Y":78.0}]},{"StartTime":221560.0,"Objects":[{"StartTime":221560.0,"EndTime":221560.0,"X":167.0,"Y":115.0}]},{"StartTime":221671.0,"Objects":[{"StartTime":221671.0,"EndTime":221671.0,"X":171.0,"Y":152.0}]},{"StartTime":221782.0,"Objects":[{"StartTime":221782.0,"EndTime":221782.0,"X":176.0,"Y":189.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":221857.0,"EndTime":221857.0,"X":169.374115,"Y":248.633026,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":222004.0,"Objects":[{"StartTime":222004.0,"EndTime":222004.0,"X":24.0,"Y":352.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":222301.0,"EndTime":222301.0,"X":203.19368,"Y":334.9816,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":222449.0,"Objects":[{"StartTime":222449.0,"EndTime":222449.0,"X":346.0,"Y":297.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":222746.0,"EndTime":222746.0,"X":166.79744,"Y":280.075317,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":222893.0,"Objects":[{"StartTime":222893.0,"EndTime":222893.0,"X":68.0,"Y":237.0}]},{"StartTime":223004.0,"Objects":[{"StartTime":223004.0,"EndTime":223004.0,"X":103.0,"Y":233.0}]},{"StartTime":223115.0,"Objects":[{"StartTime":223115.0,"EndTime":223115.0,"X":139.0,"Y":230.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":223190.0,"EndTime":223190.0,"X":198.678772,"Y":236.2004,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":223337.0,"Objects":[{"StartTime":223337.0,"EndTime":223337.0,"X":377.0,"Y":324.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":223412.0,"EndTime":223412.0,"X":409.919373,"Y":273.837128,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":223560.0,"Objects":[{"StartTime":223560.0,"EndTime":223560.0,"X":278.0,"Y":145.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":223635.0,"EndTime":223635.0,"X":286.687958,"Y":204.367661,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":223782.0,"Objects":[{"StartTime":223782.0,"EndTime":223782.0,"X":452.0,"Y":83.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":223857.0,"EndTime":223857.0,"X":392.321228,"Y":89.20039,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":224004.0,"Objects":[{"StartTime":224004.0,"EndTime":224004.0,"X":186.0,"Y":134.0}]},{"StartTime":224115.0,"Objects":[{"StartTime":224115.0,"EndTime":224115.0,"X":146.0,"Y":131.0}]},{"StartTime":224226.0,"Objects":[{"StartTime":224226.0,"EndTime":224226.0,"X":109.0,"Y":116.0}]},{"StartTime":224337.0,"Objects":[{"StartTime":224337.0,"EndTime":224337.0,"X":77.0,"Y":92.0}]},{"StartTime":224449.0,"Objects":[{"StartTime":224449.0,"EndTime":224449.0,"X":15.0,"Y":29.0}]},{"StartTime":224560.0,"Objects":[{"StartTime":224560.0,"EndTime":224560.0,"X":11.0,"Y":78.0}]},{"StartTime":224671.0,"Objects":[{"StartTime":224671.0,"EndTime":224671.0,"X":8.0,"Y":128.0}]},{"StartTime":224782.0,"Objects":[{"StartTime":224782.0,"EndTime":224782.0,"X":4.0,"Y":178.0}]},{"StartTime":224893.0,"Objects":[{"StartTime":224893.0,"EndTime":224893.0,"X":89.0,"Y":198.0}]},{"StartTime":225004.0,"Objects":[{"StartTime":225004.0,"EndTime":225004.0,"X":96.0,"Y":237.0}]},{"StartTime":225115.0,"Objects":[{"StartTime":225115.0,"EndTime":225115.0,"X":103.0,"Y":276.0}]},{"StartTime":225226.0,"Objects":[{"StartTime":225226.0,"EndTime":225226.0,"X":111.0,"Y":315.0}]},{"StartTime":225337.0,"Objects":[{"StartTime":225337.0,"EndTime":225337.0,"X":206.0,"Y":281.0}]},{"StartTime":225449.0,"Objects":[{"StartTime":225449.0,"EndTime":225449.0,"X":245.0,"Y":287.0}]},{"StartTime":225560.0,"Objects":[{"StartTime":225560.0,"EndTime":225560.0,"X":285.0,"Y":293.0}]},{"StartTime":225671.0,"Objects":[{"StartTime":225671.0,"EndTime":225671.0,"X":324.0,"Y":299.0}]},{"StartTime":225782.0,"Objects":[{"StartTime":225782.0,"EndTime":225782.0,"X":408.0,"Y":249.0}]},{"StartTime":225893.0,"Objects":[{"StartTime":225893.0,"EndTime":225893.0,"X":373.0,"Y":213.0}]},{"StartTime":226004.0,"Objects":[{"StartTime":226004.0,"EndTime":226004.0,"X":326.0,"Y":200.0}]},{"StartTime":226115.0,"Objects":[{"StartTime":226115.0,"EndTime":226115.0,"X":278.0,"Y":213.0}]},{"StartTime":226226.0,"Objects":[{"StartTime":226226.0,"EndTime":226226.0,"X":206.0,"Y":281.0}]},{"StartTime":226337.0,"Objects":[{"StartTime":226337.0,"EndTime":226337.0,"X":182.0,"Y":237.0}]},{"StartTime":226449.0,"Objects":[{"StartTime":226449.0,"EndTime":226449.0,"X":182.0,"Y":188.0}]},{"StartTime":226560.0,"Objects":[{"StartTime":226560.0,"EndTime":226560.0,"X":207.0,"Y":144.0}]},{"StartTime":226671.0,"Objects":[{"StartTime":226671.0,"EndTime":226671.0,"X":306.0,"Y":164.0}]},{"StartTime":226782.0,"Objects":[{"StartTime":226782.0,"EndTime":226782.0,"X":354.0,"Y":156.0}]},{"StartTime":226893.0,"Objects":[{"StartTime":226893.0,"EndTime":226893.0,"X":392.0,"Y":124.0}]},{"StartTime":227004.0,"Objects":[{"StartTime":227004.0,"EndTime":227004.0,"X":407.0,"Y":77.0}]},{"StartTime":227115.0,"Objects":[{"StartTime":227115.0,"EndTime":227115.0,"X":301.0,"Y":55.0}]},{"StartTime":227226.0,"Objects":[{"StartTime":227226.0,"EndTime":227226.0,"X":303.0,"Y":109.0}]},{"StartTime":227337.0,"Objects":[{"StartTime":227337.0,"EndTime":227337.0,"X":306.0,"Y":164.0}]},{"StartTime":227449.0,"Objects":[{"StartTime":227449.0,"EndTime":227449.0,"X":308.0,"Y":219.0}]},{"StartTime":227560.0,"Objects":[{"StartTime":227560.0,"EndTime":227560.0,"X":360.0,"Y":304.0}]},{"StartTime":227671.0,"Objects":[{"StartTime":227671.0,"EndTime":227671.0,"X":301.0,"Y":297.0}]},{"StartTime":227782.0,"Objects":[{"StartTime":227782.0,"EndTime":227782.0,"X":246.0,"Y":321.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":227857.0,"EndTime":227857.0,"X":187.82814,"Y":324.502777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":228004.0,"Objects":[{"StartTime":228004.0,"EndTime":228004.0,"X":49.0,"Y":207.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":228079.0,"EndTime":228079.0,"X":54.65045,"Y":266.733337,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":228226.0,"Objects":[{"StartTime":228226.0,"EndTime":228226.0,"X":208.0,"Y":185.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":228301.0,"EndTime":228301.0,"X":213.650452,"Y":125.266663,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":228449.0,"Objects":[{"StartTime":228449.0,"EndTime":228449.0,"X":44.0,"Y":29.0}]},{"StartTime":228560.0,"Objects":[{"StartTime":228560.0,"EndTime":228560.0,"X":40.0,"Y":58.0}]},{"StartTime":228671.0,"Objects":[{"StartTime":228671.0,"EndTime":228671.0,"X":36.0,"Y":88.0}]},{"StartTime":228782.0,"Objects":[{"StartTime":228782.0,"EndTime":228782.0,"X":32.0,"Y":117.0}]},{"StartTime":228893.0,"Objects":[{"StartTime":228893.0,"EndTime":228893.0,"X":123.0,"Y":105.0}]},{"StartTime":229004.0,"Objects":[{"StartTime":229004.0,"EndTime":229004.0,"X":212.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":229031.0,"EndTime":229031.0,"X":239.085815,"Y":79.10199,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":229115.0,"Objects":[{"StartTime":229115.0,"EndTime":229115.0,"X":260.0,"Y":125.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":229142.0,"EndTime":229142.0,"X":289.9626,"Y":123.501869,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":229226.0,"Objects":[{"StartTime":229226.0,"EndTime":229226.0,"X":282.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":229253.0,"EndTime":229253.0,"X":310.3038,"Y":189.94458,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":229337.0,"Objects":[{"StartTime":229337.0,"EndTime":229337.0,"X":269.0,"Y":237.0}]},{"StartTime":229449.0,"Objects":[{"StartTime":229449.0,"EndTime":229449.0,"X":219.0,"Y":237.0}]},{"StartTime":229560.0,"Objects":[{"StartTime":229560.0,"EndTime":229560.0,"X":174.0,"Y":257.0}]},{"StartTime":229671.0,"Objects":[{"StartTime":229671.0,"EndTime":229671.0,"X":142.0,"Y":295.0}]},{"StartTime":229782.0,"Objects":[{"StartTime":229782.0,"EndTime":229782.0,"X":245.0,"Y":353.0}]},{"StartTime":229893.0,"Objects":[{"StartTime":229893.0,"EndTime":229893.0,"X":293.0,"Y":340.0}]},{"StartTime":230004.0,"Objects":[{"StartTime":230004.0,"EndTime":230004.0,"X":342.0,"Y":349.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":230031.0,"EndTime":230031.0,"X":369.574341,"Y":337.182434,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":230115.0,"Objects":[{"StartTime":230115.0,"EndTime":230115.0,"X":383.0,"Y":376.0}]},{"StartTime":230226.0,"Objects":[{"StartTime":230226.0,"EndTime":230226.0,"X":467.0,"Y":284.0}]},{"StartTime":230337.0,"Objects":[{"StartTime":230337.0,"EndTime":230337.0,"X":464.0,"Y":234.0}]},{"StartTime":230449.0,"Objects":[{"StartTime":230449.0,"EndTime":230449.0,"X":461.0,"Y":184.0}]},{"StartTime":230560.0,"Objects":[{"StartTime":230560.0,"EndTime":230560.0,"X":458.0,"Y":134.0}]},{"StartTime":230671.0,"Objects":[{"StartTime":230671.0,"EndTime":230671.0,"X":310.0,"Y":42.0}]},{"StartTime":230782.0,"Objects":[{"StartTime":230782.0,"EndTime":230782.0,"X":300.0,"Y":90.0}]},{"StartTime":230893.0,"Objects":[{"StartTime":230893.0,"EndTime":230893.0,"X":322.0,"Y":133.0}]},{"StartTime":231004.0,"Objects":[{"StartTime":231004.0,"EndTime":231004.0,"X":367.0,"Y":154.0}]},{"StartTime":231115.0,"Objects":[{"StartTime":231115.0,"EndTime":231115.0,"X":458.0,"Y":134.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":231412.0,"EndTime":231412.0,"X":463.8211,"Y":223.811554,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":231782.0,"Objects":[{"StartTime":231782.0,"EndTime":231782.0,"X":369.0,"Y":307.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":232190.0,"EndTime":232190.0,"X":256.358734,"Y":326.1779,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":232449.0,"Objects":[{"StartTime":232449.0,"EndTime":232449.0,"X":137.0,"Y":289.0}]},{"StartTime":232671.0,"Objects":[{"StartTime":232671.0,"EndTime":232671.0,"X":137.0,"Y":289.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":233079.0,"EndTime":233079.0,"X":137.642288,"Y":172.083252,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":233337.0,"Objects":[{"StartTime":233337.0,"EndTime":233337.0,"X":159.0,"Y":135.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":233745.0,"EndTime":233745.0,"X":273.471161,"Y":155.800812,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":234004.0,"Objects":[{"StartTime":234004.0,"EndTime":234004.0,"X":375.0,"Y":81.0}]},{"StartTime":234226.0,"Objects":[{"StartTime":234226.0,"EndTime":234226.0,"X":389.0,"Y":206.0}]},{"StartTime":234449.0,"Objects":[{"StartTime":234449.0,"EndTime":234449.0,"X":273.0,"Y":155.0}]},{"StartTime":235115.0,"Objects":[{"StartTime":235115.0,"EndTime":235115.0,"X":143.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":235559.0,"EndTime":235559.0,"X":31.683857,"Y":336.082733,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":235967.0,"EndTime":235967.0,"X":143.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":236226.0,"Objects":[{"StartTime":236226.0,"EndTime":236226.0,"X":253.0,"Y":363.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":236634.0,"EndTime":236634.0,"X":258.2222,"Y":244.874435,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":236893.0,"Objects":[{"StartTime":236893.0,"EndTime":236893.0,"X":303.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":237301.0,"EndTime":237301.0,"X":183.374,"Y":198.533188,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":237560.0,"Objects":[{"StartTime":237560.0,"EndTime":237560.0,"X":76.0,"Y":264.0}]},{"StartTime":237782.0,"Objects":[{"StartTime":237782.0,"EndTime":237782.0,"X":48.0,"Y":170.0}]},{"StartTime":238004.0,"Objects":[{"StartTime":238004.0,"EndTime":238004.0,"X":99.0,"Y":88.0}]},{"StartTime":238226.0,"Objects":[{"StartTime":238226.0,"EndTime":238226.0,"X":195.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":238523.0,"EndTime":238523.0,"X":282.5216,"Y":88.84021,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":238893.0,"Objects":[{"StartTime":238893.0,"EndTime":238893.0,"X":430.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":239301.0,"EndTime":239301.0,"X":448.539764,"Y":158.521881,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":239560.0,"Objects":[{"StartTime":239560.0,"EndTime":239560.0,"X":443.0,"Y":280.0}]},{"StartTime":239782.0,"Objects":[{"StartTime":239782.0,"EndTime":239782.0,"X":340.0,"Y":214.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":240190.0,"EndTime":240190.0,"X":341.869324,"Y":99.87049,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":240449.0,"Objects":[{"StartTime":240449.0,"EndTime":240449.0,"X":430.0,"Y":40.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":240857.0,"EndTime":240857.0,"X":311.672272,"Y":37.1086044,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":241115.0,"Objects":[{"StartTime":241115.0,"EndTime":241115.0,"X":195.0,"Y":72.0}]},{"StartTime":241337.0,"Objects":[{"StartTime":241337.0,"EndTime":241337.0,"X":181.0,"Y":191.0}]},{"StartTime":241560.0,"Objects":[{"StartTime":241560.0,"EndTime":241560.0,"X":291.0,"Y":143.0}]},{"StartTime":241782.0,"Objects":[{"StartTime":241782.0,"EndTime":241782.0,"X":195.0,"Y":72.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":242079.0,"EndTime":242079.0,"X":110.66143,"Y":93.17287,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":242449.0,"Objects":[{"StartTime":242449.0,"EndTime":242449.0,"X":90.0,"Y":271.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":242893.0,"EndTime":242893.0,"X":197.600739,"Y":311.753632,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":243301.0,"EndTime":243301.0,"X":289.959,"Y":243.180267,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":243449.0,"Objects":[{"StartTime":243449.0,"EndTime":243449.0,"X":289.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":243746.0,"EndTime":243746.0,"X":372.825134,"Y":264.0362,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":244004.0,"Objects":[{"StartTime":244004.0,"EndTime":244004.0,"X":465.0,"Y":186.0}]},{"StartTime":244226.0,"Objects":[{"StartTime":244226.0,"EndTime":244226.0,"X":409.0,"Y":80.0}]},{"StartTime":244337.0,"Objects":[{"StartTime":244337.0,"EndTime":244337.0,"X":379.0,"Y":82.0}]},{"StartTime":244449.0,"Objects":[{"StartTime":244449.0,"EndTime":244449.0,"X":349.0,"Y":84.0}]},{"StartTime":244560.0,"Objects":[{"StartTime":244560.0,"EndTime":244560.0,"X":321.0,"Y":87.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":244635.0,"EndTime":244635.0,"X":291.095551,"Y":89.39236,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":244782.0,"Objects":[{"StartTime":244782.0,"EndTime":244782.0,"X":160.0,"Y":48.0}]},{"StartTime":244893.0,"Objects":[{"StartTime":244893.0,"EndTime":244893.0,"X":152.0,"Y":72.0}]},{"StartTime":245004.0,"Objects":[{"StartTime":245004.0,"EndTime":245004.0,"X":144.0,"Y":96.0}]},{"StartTime":245115.0,"Objects":[{"StartTime":245115.0,"EndTime":245115.0,"X":136.0,"Y":120.0}]},{"StartTime":245226.0,"Objects":[{"StartTime":245226.0,"EndTime":245226.0,"X":128.0,"Y":144.0}]},{"StartTime":245337.0,"Objects":[{"StartTime":245337.0,"EndTime":245337.0,"X":72.0,"Y":184.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":245523.0,"EndTime":245523.0,"X":171.634659,"Y":192.540115,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":245671.0,"Objects":[{"StartTime":245671.0,"EndTime":245671.0,"X":208.0,"Y":232.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":245857.0,"EndTime":245857.0,"X":298.983429,"Y":217.017059,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":246004.0,"Objects":[{"StartTime":246004.0,"EndTime":246004.0,"X":320.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":246190.0,"EndTime":246190.0,"X":312.025482,"Y":76.3184738,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":246449.0,"Objects":[{"StartTime":246449.0,"EndTime":246449.0,"X":200.0,"Y":136.0}]},{"StartTime":246671.0,"Objects":[{"StartTime":246671.0,"EndTime":246671.0,"X":304.0,"Y":256.0}]},{"StartTime":246893.0,"Objects":[{"StartTime":246893.0,"EndTime":246893.0,"X":400.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":247079.0,"EndTime":247079.0,"X":499.827454,"Y":114.1278,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":247337.0,"Objects":[{"StartTime":247337.0,"EndTime":247337.0,"X":336.0,"Y":176.0}]},{"StartTime":247449.0,"Objects":[{"StartTime":247449.0,"EndTime":247449.0,"X":336.0,"Y":176.0}]},{"StartTime":247560.0,"Objects":[{"StartTime":247560.0,"EndTime":247560.0,"X":336.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":247746.0,"EndTime":247746.0,"X":244.131042,"Y":160.010208,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":248004.0,"Objects":[{"StartTime":248004.0,"EndTime":248004.0,"X":244.0,"Y":160.0}]},{"StartTime":248226.0,"Objects":[{"StartTime":248226.0,"EndTime":248226.0,"X":80.0,"Y":216.0}]},{"StartTime":248449.0,"Objects":[{"StartTime":248449.0,"EndTime":248449.0,"X":280.0,"Y":256.0}]},{"StartTime":248671.0,"Objects":[{"StartTime":248671.0,"EndTime":248671.0,"X":192.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":248857.0,"EndTime":248857.0,"X":192.0,"Y":180.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":249115.0,"Objects":[{"StartTime":249115.0,"EndTime":249115.0,"X":280.0,"Y":256.0}]},{"StartTime":249337.0,"Objects":[{"StartTime":249337.0,"EndTime":249337.0,"X":392.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":249523.0,"EndTime":249523.0,"X":394.638275,"Y":302.004852,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":249782.0,"Objects":[{"StartTime":249782.0,"EndTime":249782.0,"X":280.0,"Y":256.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":249968.0,"EndTime":249968.0,"X":180.172562,"Y":261.8722,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":250226.0,"Objects":[{"StartTime":250226.0,"EndTime":250226.0,"X":72.0,"Y":184.0}]},{"StartTime":250449.0,"Objects":[{"StartTime":250449.0,"EndTime":250449.0,"X":120.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":250635.0,"EndTime":250635.0,"X":186.695938,"Y":145.538834,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":250893.0,"Objects":[{"StartTime":250893.0,"EndTime":250893.0,"X":136.0,"Y":280.0}]},{"StartTime":251115.0,"Objects":[{"StartTime":251115.0,"EndTime":251115.0,"X":136.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":251523.0,"EndTime":251523.0,"X":335.862976,"Y":272.597656,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":251782.0,"Objects":[{"StartTime":251782.0,"EndTime":251782.0,"X":416.0,"Y":152.0}]},{"StartTime":252004.0,"Objects":[{"StartTime":252004.0,"EndTime":252004.0,"X":488.0,"Y":80.0}]},{"StartTime":252226.0,"Objects":[{"StartTime":252226.0,"EndTime":252226.0,"X":416.0,"Y":8.0}]},{"StartTime":252449.0,"Objects":[{"StartTime":252449.0,"EndTime":252449.0,"X":344.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":252635.0,"EndTime":252635.0,"X":244.25412,"Y":87.1247,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":252782.0,"Objects":[{"StartTime":252782.0,"EndTime":252782.0,"X":192.0,"Y":48.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":252968.0,"EndTime":252968.0,"X":204.3272,"Y":146.078491,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":253115.0,"Objects":[{"StartTime":253115.0,"EndTime":253115.0,"X":152.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":253301.0,"EndTime":253301.0,"X":251.315063,"Y":187.684128,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":253560.0,"Objects":[{"StartTime":253560.0,"EndTime":253560.0,"X":448.0,"Y":176.0}]},{"StartTime":253782.0,"Objects":[{"StartTime":253782.0,"EndTime":253782.0,"X":344.0,"Y":304.0}]},{"StartTime":254004.0,"Objects":[{"StartTime":254004.0,"EndTime":254004.0,"X":272.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":254190.0,"EndTime":254190.0,"X":272.0,"Y":52.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":254449.0,"Objects":[{"StartTime":254449.0,"EndTime":254449.0,"X":328.0,"Y":208.0}]},{"StartTime":254671.0,"Objects":[{"StartTime":254671.0,"EndTime":254671.0,"X":328.0,"Y":208.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":254857.0,"EndTime":254857.0,"X":229.762344,"Y":207.021118,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":255115.0,"Objects":[{"StartTime":255115.0,"EndTime":255115.0,"X":72.0,"Y":288.0}]},{"StartTime":255337.0,"Objects":[{"StartTime":255337.0,"EndTime":255337.0,"X":136.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":255412.0,"EndTime":255412.0,"X":118.443825,"Y":121.18354,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":255560.0,"Objects":[{"StartTime":255560.0,"EndTime":255560.0,"X":216.0,"Y":32.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":255635.0,"EndTime":255635.0,"X":229.736053,"Y":80.0762,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":255782.0,"Objects":[{"StartTime":255782.0,"EndTime":255782.0,"X":328.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":255857.0,"EndTime":255857.0,"X":347.088,"Y":113.786926,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256004.0,"Objects":[{"StartTime":256004.0,"EndTime":256004.0,"X":424.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256031.0,"EndTime":256031.0,"X":447.717072,"Y":231.9057,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256115.0,"Objects":[{"StartTime":256115.0,"EndTime":256115.0,"X":390.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256142.0,"EndTime":256142.0,"X":404.859772,"Y":292.1044,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256226.0,"Objects":[{"StartTime":256226.0,"EndTime":256226.0,"X":333.0,"Y":291.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256253.0,"EndTime":256253.0,"X":333.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256337.0,"Objects":[{"StartTime":256337.0,"EndTime":256337.0,"X":277.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256364.0,"EndTime":256364.0,"X":262.7234,"Y":292.522644,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256449.0,"Objects":[{"StartTime":256449.0,"EndTime":256449.0,"X":242.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256476.0,"EndTime":256476.0,"X":218.375351,"Y":232.177765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256560.0,"Objects":[{"StartTime":256560.0,"EndTime":256560.0,"X":224.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256587.0,"EndTime":256587.0,"X":247.717087,"Y":160.0943,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256671.0,"Objects":[{"StartTime":256671.0,"EndTime":256671.0,"X":190.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256698.0,"EndTime":256698.0,"X":204.859772,"Y":99.8956,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256782.0,"Objects":[{"StartTime":256782.0,"EndTime":256782.0,"X":133.0,"Y":101.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256809.0,"EndTime":256809.0,"X":133.0,"Y":76.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":256893.0,"Objects":[{"StartTime":256893.0,"EndTime":256893.0,"X":77.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":256920.0,"EndTime":256920.0,"X":62.72339,"Y":99.47737,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257004.0,"Objects":[{"StartTime":257004.0,"EndTime":257004.0,"X":42.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257031.0,"EndTime":257031.0,"X":18.375349,"Y":159.822235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257115.0,"Objects":[{"StartTime":257115.0,"EndTime":257115.0,"X":42.0,"Y":227.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257142.0,"EndTime":257142.0,"X":18.282917,"Y":234.9057,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257226.0,"Objects":[{"StartTime":257226.0,"EndTime":257226.0,"X":76.0,"Y":275.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257253.0,"EndTime":257253.0,"X":61.14022,"Y":295.1044,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257337.0,"Objects":[{"StartTime":257337.0,"EndTime":257337.0,"X":133.0,"Y":294.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257364.0,"EndTime":257364.0,"X":133.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257449.0,"Objects":[{"StartTime":257449.0,"EndTime":257449.0,"X":189.0,"Y":275.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257476.0,"EndTime":257476.0,"X":203.276611,"Y":295.522644,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257560.0,"Objects":[{"StartTime":257560.0,"EndTime":257560.0,"X":224.0,"Y":227.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257587.0,"EndTime":257587.0,"X":247.624649,"Y":235.177765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257671.0,"Objects":[{"StartTime":257671.0,"EndTime":257671.0,"X":224.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":257698.0,"EndTime":257698.0,"X":247.624649,"Y":159.822235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":257782.0,"Objects":[{"StartTime":257782.0,"EndTime":257782.0,"X":190.0,"Y":120.0}]},{"StartTime":257893.0,"Objects":[{"StartTime":257893.0,"EndTime":257893.0,"X":133.0,"Y":101.0}]},{"StartTime":258004.0,"Objects":[{"StartTime":258004.0,"EndTime":258004.0,"X":77.0,"Y":120.0}]},{"StartTime":258226.0,"Objects":[{"StartTime":258226.0,"EndTime":258226.0,"X":224.0,"Y":227.0}]},{"StartTime":258337.0,"Objects":[{"StartTime":258337.0,"EndTime":258337.0,"X":258.0,"Y":275.0}]},{"StartTime":258449.0,"Objects":[{"StartTime":258449.0,"EndTime":258449.0,"X":315.0,"Y":294.0}]},{"StartTime":258560.0,"Objects":[{"StartTime":258560.0,"EndTime":258560.0,"X":371.0,"Y":275.0}]},{"StartTime":258671.0,"Objects":[{"StartTime":258671.0,"EndTime":258671.0,"X":406.0,"Y":227.0}]},{"StartTime":258782.0,"Objects":[{"StartTime":258782.0,"EndTime":258782.0,"X":412.0,"Y":167.0}]},{"StartTime":258893.0,"Objects":[{"StartTime":258893.0,"EndTime":258893.0,"X":391.0,"Y":110.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":259004.0,"EndTime":259004.0,"X":341.4725,"Y":103.142349,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":259079.0,"EndTime":259079.0,"X":391.0,"Y":110.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":259226.0,"Objects":[{"StartTime":259226.0,"EndTime":259226.0,"X":315.0,"Y":194.0}]},{"StartTime":259337.0,"Objects":[{"StartTime":259337.0,"EndTime":259337.0,"X":315.0,"Y":194.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":259412.0,"EndTime":259412.0,"X":265.4725,"Y":200.857651,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":259560.0,"Objects":[{"StartTime":259560.0,"EndTime":259560.0,"X":88.0,"Y":95.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":259746.0,"EndTime":259746.0,"X":237.244583,"Y":76.19726,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":259893.0,"Objects":[{"StartTime":259893.0,"EndTime":259893.0,"X":362.0,"Y":269.0}]},{"StartTime":260004.0,"Objects":[{"StartTime":260004.0,"EndTime":260004.0,"X":272.0,"Y":288.0}]},{"StartTime":260115.0,"Objects":[{"StartTime":260115.0,"EndTime":260115.0,"X":194.0,"Y":241.0}]},{"StartTime":260226.0,"Objects":[{"StartTime":260226.0,"EndTime":260226.0,"X":171.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":260337.0,"EndTime":260337.0,"X":177.246231,"Y":68.22981,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":260412.0,"EndTime":260412.0,"X":171.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":260560.0,"Objects":[{"StartTime":260560.0,"EndTime":260560.0,"X":106.0,"Y":216.0}]},{"StartTime":260671.0,"Objects":[{"StartTime":260671.0,"EndTime":260671.0,"X":24.0,"Y":177.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":260746.0,"EndTime":260746.0,"X":29.0505848,"Y":261.849823,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":260893.0,"Objects":[{"StartTime":260893.0,"EndTime":260893.0,"X":165.0,"Y":349.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":260968.0,"EndTime":260968.0,"X":169.991379,"Y":264.146667,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":261115.0,"Objects":[{"StartTime":261115.0,"EndTime":261115.0,"X":394.0,"Y":84.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":261301.0,"EndTime":261301.0,"X":261.752472,"Y":137.17804,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":261449.0,"Objects":[{"StartTime":261449.0,"EndTime":261449.0,"X":394.0,"Y":84.0}]},{"StartTime":261560.0,"Objects":[{"StartTime":261560.0,"EndTime":261560.0,"X":425.0,"Y":169.0}]},{"StartTime":261671.0,"Objects":[{"StartTime":261671.0,"EndTime":261671.0,"X":388.0,"Y":252.0}]},{"StartTime":261782.0,"Objects":[{"StartTime":261782.0,"EndTime":261782.0,"X":303.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":261893.0,"EndTime":261893.0,"X":223.041077,"Y":263.3701,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":261968.0,"EndTime":261968.0,"X":303.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":262115.0,"Objects":[{"StartTime":262115.0,"EndTime":262115.0,"X":454.0,"Y":347.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":262301.0,"EndTime":262301.0,"X":462.396332,"Y":177.207474,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":262449.0,"Objects":[{"StartTime":262449.0,"EndTime":262449.0,"X":297.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":262524.0,"EndTime":262524.0,"X":309.2367,"Y":137.393311,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":262671.0,"Objects":[{"StartTime":262671.0,"EndTime":262671.0,"X":491.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":262746.0,"EndTime":262746.0,"X":410.68988,"Y":116.735062,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":262893.0,"Objects":[{"StartTime":262893.0,"EndTime":262893.0,"X":223.0,"Y":263.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":262968.0,"EndTime":262968.0,"X":216.6031,"Y":178.241058,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":263115.0,"Objects":[{"StartTime":263115.0,"EndTime":263115.0,"X":68.0,"Y":53.0}]},{"StartTime":263226.0,"Objects":[{"StartTime":263226.0,"EndTime":263226.0,"X":89.0,"Y":55.0}]},{"StartTime":263337.0,"Objects":[{"StartTime":263337.0,"EndTime":263337.0,"X":110.0,"Y":57.0}]},{"StartTime":263449.0,"Objects":[{"StartTime":263449.0,"EndTime":263449.0,"X":131.0,"Y":60.0}]},{"StartTime":263560.0,"Objects":[{"StartTime":263560.0,"EndTime":263560.0,"X":152.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":263746.0,"EndTime":263746.0,"X":283.057373,"Y":137.823868,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":263893.0,"Objects":[{"StartTime":263893.0,"EndTime":263893.0,"X":87.0,"Y":182.0}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"X":87.0,"Y":182.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":264190.0,"EndTime":264190.0,"X":45.0181046,"Y":329.32666,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":264337.0,"Objects":[{"StartTime":264337.0,"EndTime":264337.0,"X":269.0,"Y":306.0}]},{"StartTime":264449.0,"Objects":[{"StartTime":264449.0,"EndTime":264449.0,"X":269.0,"Y":306.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":264524.0,"EndTime":264524.0,"X":185.536621,"Y":289.910675,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":264671.0,"Objects":[{"StartTime":264671.0,"EndTime":264671.0,"X":283.0,"Y":137.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":264857.0,"EndTime":264857.0,"X":364.216919,"Y":176.3499,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":265004.0,"Objects":[{"StartTime":265004.0,"EndTime":265004.0,"X":165.0,"Y":193.0}]},{"StartTime":265115.0,"Objects":[{"StartTime":265115.0,"EndTime":265115.0,"X":165.0,"Y":193.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":265190.0,"EndTime":265190.0,"X":154.887192,"Y":110.947647,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":265337.0,"Objects":[{"StartTime":265337.0,"EndTime":265337.0,"X":299.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":265448.0,"EndTime":265448.0,"X":380.8016,"Y":271.549866,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":265523.0,"EndTime":265523.0,"X":299.0,"Y":286.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":265671.0,"Objects":[{"StartTime":265671.0,"EndTime":265671.0,"X":428.0,"Y":374.0}]},{"StartTime":265782.0,"Objects":[{"StartTime":265782.0,"EndTime":265782.0,"X":487.0,"Y":305.0}]},{"StartTime":265893.0,"Objects":[{"StartTime":265893.0,"EndTime":265893.0,"X":476.0,"Y":215.0}]},{"StartTime":266004.0,"Objects":[{"StartTime":266004.0,"EndTime":266004.0,"X":396.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":266079.0,"EndTime":266079.0,"X":311.5542,"Y":173.6905,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":266226.0,"Objects":[{"StartTime":266226.0,"EndTime":266226.0,"X":193.0,"Y":245.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":266301.0,"EndTime":266301.0,"X":108.582191,"Y":235.0685,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":266449.0,"Objects":[{"StartTime":266449.0,"EndTime":266449.0,"X":210.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":266524.0,"EndTime":266524.0,"X":291.8972,"Y":59.86789,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":266671.0,"Objects":[{"StartTime":266671.0,"EndTime":266671.0,"X":438.0,"Y":263.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":266857.0,"EndTime":266857.0,"X":334.252533,"Y":211.5238,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":267004.0,"Objects":[{"StartTime":267004.0,"EndTime":267004.0,"X":153.0,"Y":138.0}]},{"StartTime":267115.0,"Objects":[{"StartTime":267115.0,"EndTime":267115.0,"X":66.0,"Y":161.0}]},{"StartTime":267226.0,"Objects":[{"StartTime":267226.0,"EndTime":267226.0,"X":34.0,"Y":245.0}]},{"StartTime":267337.0,"Objects":[{"StartTime":267337.0,"EndTime":267337.0,"X":84.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":267523.0,"EndTime":267523.0,"X":253.51619,"Y":307.162628,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":267671.0,"Objects":[{"StartTime":267671.0,"EndTime":267671.0,"X":334.0,"Y":211.0}]},{"StartTime":267782.0,"Objects":[{"StartTime":267782.0,"EndTime":267782.0,"X":334.0,"Y":211.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":267857.0,"EndTime":267857.0,"X":333.140472,"Y":128.340088,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":268004.0,"Objects":[{"StartTime":268004.0,"EndTime":268004.0,"X":458.0,"Y":77.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":268079.0,"EndTime":268079.0,"X":458.859528,"Y":159.659912,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":268226.0,"Objects":[{"StartTime":268226.0,"EndTime":268226.0,"X":321.0,"Y":354.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":268412.0,"EndTime":268412.0,"X":169.8029,"Y":312.272034,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":268560.0,"Objects":[{"StartTime":268560.0,"EndTime":268560.0,"X":34.0,"Y":201.0}]},{"StartTime":268671.0,"Objects":[{"StartTime":268671.0,"EndTime":268671.0,"X":34.0,"Y":202.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":268746.0,"EndTime":268746.0,"X":118.7002,"Y":194.867355,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":268893.0,"Objects":[{"StartTime":268893.0,"EndTime":268893.0,"X":263.0,"Y":87.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":269079.0,"EndTime":269079.0,"X":129.963287,"Y":152.665192,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":269226.0,"Objects":[{"StartTime":269226.0,"EndTime":269226.0,"X":326.0,"Y":305.0}]},{"StartTime":269337.0,"Objects":[{"StartTime":269337.0,"EndTime":269337.0,"X":334.0,"Y":211.0}]},{"StartTime":269449.0,"Objects":[{"StartTime":269449.0,"EndTime":269449.0,"X":343.0,"Y":118.0}]},{"StartTime":269560.0,"Objects":[{"StartTime":269560.0,"EndTime":269560.0,"X":352.0,"Y":25.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":269635.0,"EndTime":269635.0,"X":362.0481,"Y":109.404,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":269782.0,"Objects":[{"StartTime":269782.0,"EndTime":269782.0,"X":223.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":269857.0,"EndTime":269857.0,"X":211.963272,"Y":260.280426,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":270004.0,"Objects":[{"StartTime":270004.0,"EndTime":270004.0,"X":446.0,"Y":266.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":270079.0,"EndTime":270079.0,"X":370.290771,"Y":233.114441,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":270226.0,"Objects":[{"StartTime":270226.0,"EndTime":270226.0,"X":113.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":270412.0,"EndTime":270412.0,"X":70.50296,"Y":137.697678,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":270560.0,"Objects":[{"StartTime":270560.0,"EndTime":270560.0,"X":165.0,"Y":55.0}]},{"StartTime":270671.0,"Objects":[{"StartTime":270671.0,"EndTime":270671.0,"X":232.0,"Y":116.0}]},{"StartTime":270782.0,"Objects":[{"StartTime":270782.0,"EndTime":270782.0,"X":323.0,"Y":130.0}]},{"StartTime":270893.0,"Objects":[{"StartTime":270893.0,"EndTime":270893.0,"X":407.0,"Y":90.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":270968.0,"EndTime":270968.0,"X":433.0655,"Y":169.055984,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":271115.0,"Objects":[{"StartTime":271115.0,"EndTime":271115.0,"X":317.0,"Y":319.0}]},{"StartTime":271226.0,"Objects":[{"StartTime":271226.0,"EndTime":271226.0,"X":317.0,"Y":225.0}]},{"StartTime":271337.0,"Objects":[{"StartTime":271337.0,"EndTime":271337.0,"X":406.0,"Y":196.0}]},{"StartTime":271449.0,"Objects":[{"StartTime":271449.0,"EndTime":271449.0,"X":460.0,"Y":272.0}]},{"StartTime":271560.0,"Objects":[{"StartTime":271560.0,"EndTime":271560.0,"X":406.0,"Y":348.0}]},{"StartTime":271671.0,"Objects":[{"StartTime":271671.0,"EndTime":271671.0,"X":317.0,"Y":319.0}]},{"StartTime":271782.0,"Objects":[{"StartTime":271782.0,"EndTime":271782.0,"X":224.0,"Y":303.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":271857.0,"EndTime":271857.0,"X":143.480118,"Y":319.5775,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":272004.0,"Objects":[{"StartTime":272004.0,"EndTime":272004.0,"X":43.0,"Y":164.0}]},{"StartTime":272115.0,"Objects":[{"StartTime":272115.0,"EndTime":272115.0,"X":127.0,"Y":124.0}]},{"StartTime":272226.0,"Objects":[{"StartTime":272226.0,"EndTime":272226.0,"X":117.0,"Y":217.0}]},{"StartTime":272337.0,"Objects":[{"StartTime":272337.0,"EndTime":272337.0,"X":43.0,"Y":164.0}]},{"StartTime":272449.0,"Objects":[{"StartTime":272449.0,"EndTime":272449.0,"X":77.0,"Y":48.0}]},{"StartTime":272560.0,"Objects":[{"StartTime":272560.0,"EndTime":272560.0,"X":157.0,"Y":138.0}]},{"StartTime":272671.0,"Objects":[{"StartTime":272671.0,"EndTime":272671.0,"X":43.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":272746.0,"EndTime":272746.0,"X":54.0161133,"Y":82.89177,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":272893.0,"Objects":[{"StartTime":272893.0,"EndTime":272893.0,"X":279.0,"Y":26.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":272968.0,"EndTime":272968.0,"X":363.774475,"Y":19.8120823,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":273115.0,"Objects":[{"StartTime":273115.0,"EndTime":273115.0,"X":504.0,"Y":120.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":273190.0,"EndTime":273190.0,"X":419.225525,"Y":126.18792,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":273337.0,"Objects":[{"StartTime":273337.0,"EndTime":273337.0,"X":176.0,"Y":120.0}]},{"StartTime":273449.0,"Objects":[{"StartTime":273449.0,"EndTime":273449.0,"X":216.0,"Y":208.0}]},{"StartTime":273560.0,"Objects":[{"StartTime":273560.0,"EndTime":273560.0,"X":184.0,"Y":296.0}]},{"StartTime":273671.0,"Objects":[{"StartTime":273671.0,"EndTime":273671.0,"X":112.0,"Y":352.0}]},{"StartTime":273782.0,"Objects":[{"StartTime":273782.0,"EndTime":273782.0,"X":16.0,"Y":344.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":273968.0,"EndTime":273968.0,"X":185.499268,"Y":330.9616,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":274115.0,"Objects":[{"StartTime":274115.0,"EndTime":274115.0,"X":464.0,"Y":288.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":274301.0,"EndTime":274301.0,"X":308.81308,"Y":276.728546,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":274449.0,"Objects":[{"StartTime":274449.0,"EndTime":274449.0,"X":105.0,"Y":186.0}]},{"StartTime":274560.0,"Objects":[{"StartTime":274560.0,"EndTime":274560.0,"X":143.0,"Y":95.0}]},{"StartTime":274671.0,"Objects":[{"StartTime":274671.0,"EndTime":274671.0,"X":233.0,"Y":58.0}]},{"StartTime":274782.0,"Objects":[{"StartTime":274782.0,"EndTime":274782.0,"X":324.0,"Y":95.0}]},{"StartTime":274893.0,"Objects":[{"StartTime":274893.0,"EndTime":274893.0,"X":361.0,"Y":186.0}]},{"StartTime":275004.0,"Objects":[{"StartTime":275004.0,"EndTime":275004.0,"X":324.0,"Y":276.0}]},{"StartTime":275115.0,"Objects":[{"StartTime":275115.0,"EndTime":275115.0,"X":233.0,"Y":314.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":275190.0,"EndTime":275190.0,"X":148.138428,"Y":318.849243,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":275337.0,"Objects":[{"StartTime":275337.0,"EndTime":275337.0,"X":0.0,"Y":216.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":275523.0,"EndTime":275523.0,"X":150.724564,"Y":185.118958,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":275671.0,"Objects":[{"StartTime":275671.0,"EndTime":275671.0,"X":324.0,"Y":276.0}]},{"StartTime":275782.0,"Objects":[{"StartTime":275782.0,"EndTime":275782.0,"X":392.0,"Y":336.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":275857.0,"EndTime":275857.0,"X":414.065216,"Y":257.376373,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":276004.0,"Objects":[{"StartTime":276004.0,"EndTime":276004.0,"X":320.0,"Y":155.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":276190.0,"EndTime":276190.0,"X":323.856537,"Y":275.96756,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":276337.0,"Objects":[{"StartTime":276337.0,"EndTime":276337.0,"X":424.0,"Y":368.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":276523.0,"EndTime":276523.0,"X":455.809052,"Y":201.002441,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":276671.0,"Objects":[{"StartTime":276671.0,"EndTime":276671.0,"X":360.0,"Y":24.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":276746.0,"EndTime":276746.0,"X":373.959381,"Y":100.147621,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":276893.0,"Objects":[{"StartTime":276893.0,"EndTime":276893.0,"X":232.0,"Y":112.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":276968.0,"EndTime":276968.0,"X":155.852371,"Y":125.959389,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":277115.0,"Objects":[{"StartTime":277115.0,"EndTime":277115.0,"X":200.0,"Y":296.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":277190.0,"EndTime":277190.0,"X":213.959381,"Y":219.852386,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":277337.0,"Objects":[{"StartTime":277337.0,"EndTime":277337.0,"X":360.0,"Y":144.0}]},{"StartTime":277449.0,"Objects":[{"StartTime":277449.0,"EndTime":277449.0,"X":360.0,"Y":144.0}]},{"StartTime":277560.0,"Objects":[{"StartTime":277560.0,"EndTime":277560.0,"X":360.0,"Y":144.0}]},{"StartTime":277671.0,"Objects":[{"StartTime":277671.0,"EndTime":277671.0,"X":360.0,"Y":144.0}]},{"StartTime":277782.0,"Objects":[{"StartTime":277782.0,"EndTime":277782.0,"X":360.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":277968.0,"EndTime":277968.0,"X":338.012329,"Y":312.572083,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":278115.0,"Objects":[{"StartTime":278115.0,"EndTime":278115.0,"X":256.0,"Y":352.0}]},{"StartTime":278226.0,"Objects":[{"StartTime":278226.0,"EndTime":278226.0,"X":168.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":278412.0,"EndTime":278412.0,"X":307.0137,"Y":274.775055,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":278560.0,"Objects":[{"StartTime":278560.0,"EndTime":278560.0,"X":184.0,"Y":352.0}]},{"StartTime":278671.0,"Objects":[{"StartTime":278671.0,"EndTime":278671.0,"X":184.0,"Y":352.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":278746.0,"EndTime":278746.0,"X":99.25037,"Y":358.5192,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":278893.0,"Objects":[{"StartTime":278893.0,"EndTime":278893.0,"X":307.0,"Y":274.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":279079.0,"EndTime":279079.0,"X":463.852173,"Y":278.797729,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":279226.0,"Objects":[{"StartTime":279226.0,"EndTime":279226.0,"X":504.0,"Y":136.0}]},{"StartTime":279337.0,"Objects":[{"StartTime":279337.0,"EndTime":279337.0,"X":504.0,"Y":137.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":279412.0,"EndTime":279412.0,"X":419.892517,"Y":124.714638,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":279560.0,"Objects":[{"StartTime":279560.0,"EndTime":279560.0,"X":232.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":279746.0,"EndTime":279746.0,"X":253.175323,"Y":199.085159,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":279893.0,"Objects":[{"StartTime":279893.0,"EndTime":279893.0,"X":488.0,"Y":264.0}]},{"StartTime":280004.0,"Objects":[{"StartTime":280004.0,"EndTime":280004.0,"X":400.0,"Y":232.0}]},{"StartTime":280115.0,"Objects":[{"StartTime":280115.0,"EndTime":280115.0,"X":312.0,"Y":256.0}]},{"StartTime":280226.0,"Objects":[{"StartTime":280226.0,"EndTime":280226.0,"X":248.0,"Y":320.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":280301.0,"EndTime":280301.0,"X":317.7344,"Y":353.346619,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":280449.0,"Objects":[{"StartTime":280449.0,"EndTime":280449.0,"X":120.0,"Y":280.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":280524.0,"EndTime":280524.0,"X":35.29361,"Y":272.941132,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":280671.0,"Objects":[{"StartTime":280671.0,"EndTime":280671.0,"X":216.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":280746.0,"EndTime":280746.0,"X":298.602722,"Y":192.804947,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":280893.0,"Objects":[{"StartTime":280893.0,"EndTime":280893.0,"X":160.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":281079.0,"EndTime":281079.0,"X":16.4957943,"Y":98.49811,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":281226.0,"Objects":[{"StartTime":281226.0,"EndTime":281226.0,"X":201.0,"Y":22.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":281412.0,"EndTime":281412.0,"X":215.117737,"Y":191.412781,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":281560.0,"Objects":[{"StartTime":281560.0,"EndTime":281560.0,"X":376.0,"Y":336.0}]},{"StartTime":281671.0,"Objects":[{"StartTime":281671.0,"EndTime":281671.0,"X":416.0,"Y":248.0}]},{"StartTime":281782.0,"Objects":[{"StartTime":281782.0,"EndTime":281782.0,"X":320.0,"Y":264.0}]},{"StartTime":281893.0,"Objects":[{"StartTime":281893.0,"EndTime":281893.0,"X":376.0,"Y":336.0}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282004.0,"X":416.0,"Y":248.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":282079.0,"EndTime":282079.0,"X":420.598755,"Y":163.365021,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":282226.0,"Objects":[{"StartTime":282226.0,"EndTime":282226.0,"X":312.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":282301.0,"EndTime":282301.0,"X":306.3983,"Y":140.4634,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":282449.0,"Objects":[{"StartTime":282449.0,"EndTime":282449.0,"X":200.0,"Y":256.0}]},{"StartTime":282560.0,"Objects":[{"StartTime":282560.0,"EndTime":282560.0,"X":185.0,"Y":163.0}]},{"StartTime":282671.0,"Objects":[{"StartTime":282671.0,"EndTime":282671.0,"X":92.0,"Y":148.0}]},{"StartTime":282782.0,"Objects":[{"StartTime":282782.0,"EndTime":282782.0,"X":51.0,"Y":231.0}]},{"StartTime":282893.0,"Objects":[{"StartTime":282893.0,"EndTime":282893.0,"X":116.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":282968.0,"EndTime":282968.0,"X":200.88652,"Y":302.3907,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":283115.0,"Objects":[{"StartTime":283115.0,"EndTime":283115.0,"X":448.0,"Y":264.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":283301.0,"EndTime":283301.0,"X":290.477661,"Y":254.583908,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":283449.0,"Objects":[{"StartTime":283449.0,"EndTime":283449.0,"X":368.0,"Y":328.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":283635.0,"EndTime":283635.0,"X":385.492859,"Y":158.90239,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":283782.0,"Objects":[{"StartTime":283782.0,"EndTime":283782.0,"X":288.0,"Y":32.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":283857.0,"EndTime":283857.0,"X":298.542938,"Y":116.34362,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284004.0,"Objects":[{"StartTime":284004.0,"EndTime":284004.0,"X":185.0,"Y":163.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284079.0,"EndTime":284079.0,"X":136.88089,"Y":92.9318161,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284226.0,"Objects":[{"StartTime":284226.0,"EndTime":284226.0,"X":51.0,"Y":231.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284301.0,"EndTime":284301.0,"X":132.353348,"Y":255.629913,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284449.0,"Objects":[{"StartTime":284449.0,"EndTime":284449.0,"X":360.0,"Y":336.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284476.0,"EndTime":284476.0,"X":401.231049,"Y":346.30777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284560.0,"Objects":[{"StartTime":284560.0,"EndTime":284560.0,"X":384.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284587.0,"EndTime":284587.0,"X":424.864777,"Y":315.675659,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284671.0,"Objects":[{"StartTime":284671.0,"EndTime":284671.0,"X":408.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284698.0,"EndTime":284698.0,"X":449.231049,"Y":282.30777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284782.0,"Objects":[{"StartTime":284782.0,"EndTime":284782.0,"X":432.0,"Y":240.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284809.0,"EndTime":284809.0,"X":473.231049,"Y":250.30777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":284893.0,"Objects":[{"StartTime":284893.0,"EndTime":284893.0,"X":376.0,"Y":160.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":284920.0,"EndTime":284920.0,"X":334.768951,"Y":170.30777,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285004.0,"Objects":[{"StartTime":285004.0,"EndTime":285004.0,"X":352.0,"Y":128.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285031.0,"EndTime":285031.0,"X":311.135223,"Y":139.675644,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285115.0,"Objects":[{"StartTime":285115.0,"EndTime":285115.0,"X":328.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285142.0,"EndTime":285142.0,"X":286.768951,"Y":106.307762,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285226.0,"Objects":[{"StartTime":285226.0,"EndTime":285226.0,"X":304.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285253.0,"EndTime":285253.0,"X":262.768951,"Y":74.30776,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285337.0,"Objects":[{"StartTime":285337.0,"EndTime":285337.0,"X":160.0,"Y":64.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285364.0,"EndTime":285364.0,"X":160.0,"Y":21.5,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285449.0,"Objects":[{"StartTime":285449.0,"EndTime":285449.0,"X":112.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285476.0,"EndTime":285476.0,"X":81.94796,"Y":57.94796,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285560.0,"Objects":[{"StartTime":285560.0,"EndTime":285560.0,"X":84.0,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285587.0,"EndTime":285587.0,"X":41.5,"Y":136.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285671.0,"Objects":[{"StartTime":285671.0,"EndTime":285671.0,"X":84.0,"Y":192.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285698.0,"EndTime":285698.0,"X":53.5699921,"Y":221.66925,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285782.0,"Objects":[{"StartTime":285782.0,"EndTime":285782.0,"X":176.0,"Y":292.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285809.0,"EndTime":285809.0,"X":176.0,"Y":334.5,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":285893.0,"Objects":[{"StartTime":285893.0,"EndTime":285893.0,"X":216.0,"Y":264.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":285920.0,"EndTime":285920.0,"X":246.052032,"Y":294.052032,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":286004.0,"Objects":[{"StartTime":286004.0,"EndTime":286004.0,"X":240.0,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":286031.0,"EndTime":286031.0,"X":282.5,"Y":224.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":286115.0,"Objects":[{"StartTime":286115.0,"EndTime":286115.0,"X":252.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":286142.0,"EndTime":286142.0,"X":281.66925,"Y":145.569992,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":286226.0,"Objects":[{"StartTime":286226.0,"EndTime":286226.0,"X":164.0,"Y":104.0}]},{"StartTime":286337.0,"Objects":[{"StartTime":286337.0,"EndTime":286337.0,"X":84.0,"Y":136.0}]},{"StartTime":286449.0,"Objects":[{"StartTime":286449.0,"EndTime":286449.0,"X":52.0,"Y":216.0}]},{"StartTime":286671.0,"Objects":[{"StartTime":286671.0,"EndTime":286671.0,"X":216.0,"Y":264.0}]},{"StartTime":286782.0,"Objects":[{"StartTime":286782.0,"EndTime":286782.0,"X":248.0,"Y":184.0}]},{"StartTime":286893.0,"Objects":[{"StartTime":286893.0,"EndTime":286893.0,"X":328.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":286948.0,"EndTime":286948.0,"X":328.0,"Y":109.882881,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":286968.0,"EndTime":286968.0,"X":328.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":287115.0,"Objects":[{"StartTime":287115.0,"EndTime":287115.0,"X":400.0,"Y":184.0}]},{"StartTime":287226.0,"Objects":[{"StartTime":287226.0,"EndTime":287226.0,"X":440.0,"Y":264.0}]},{"StartTime":287449.0,"Objects":[{"StartTime":287449.0,"EndTime":287449.0,"X":440.0,"Y":280.0}]},{"StartTime":287671.0,"Objects":[{"StartTime":287671.0,"EndTime":287671.0,"X":440.0,"Y":296.0}]},{"StartTime":288004.0,"Objects":[{"StartTime":288004.0,"EndTime":288004.0,"X":160.0,"Y":176.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":288190.0,"EndTime":288190.0,"X":308.9553,"Y":158.327332,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":288337.0,"Objects":[{"StartTime":288337.0,"EndTime":288337.0,"X":335.0,"Y":290.0}]},{"StartTime":288449.0,"Objects":[{"StartTime":288449.0,"EndTime":288449.0,"X":335.0,"Y":290.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":288524.0,"EndTime":288524.0,"X":260.534241,"Y":281.064117,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":288671.0,"Objects":[{"StartTime":288671.0,"EndTime":288671.0,"X":136.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":288746.0,"EndTime":288746.0,"X":117.603783,"Y":220.708862,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":288893.0,"Objects":[{"StartTime":288893.0,"EndTime":288893.0,"X":254.0,"Y":138.0}]},{"StartTime":289004.0,"Objects":[{"StartTime":289004.0,"EndTime":289004.0,"X":223.0,"Y":70.0}]},{"StartTime":289115.0,"Objects":[{"StartTime":289115.0,"EndTime":289115.0,"X":160.0,"Y":33.0}]},{"StartTime":289226.0,"Objects":[{"StartTime":289226.0,"EndTime":289226.0,"X":86.0,"Y":39.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":289301.0,"EndTime":289301.0,"X":33.20437,"Y":89.3222656,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":289449.0,"Objects":[{"StartTime":289449.0,"EndTime":289449.0,"X":117.0,"Y":220.0}]},{"StartTime":289560.0,"Objects":[{"StartTime":289560.0,"EndTime":289560.0,"X":117.0,"Y":220.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":289671.0,"EndTime":289671.0,"X":126.199661,"Y":294.433624,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":289746.0,"EndTime":289746.0,"X":117.0,"Y":220.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":289893.0,"Objects":[{"StartTime":289893.0,"EndTime":289893.0,"X":228.0,"Y":182.0}]},{"StartTime":290004.0,"Objects":[{"StartTime":290004.0,"EndTime":290004.0,"X":268.0,"Y":192.0}]},{"StartTime":290115.0,"Objects":[{"StartTime":290115.0,"EndTime":290115.0,"X":300.0,"Y":161.0}]},{"StartTime":290226.0,"Objects":[{"StartTime":290226.0,"EndTime":290226.0,"X":341.0,"Y":171.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":290301.0,"EndTime":290301.0,"X":413.869263,"Y":153.249786,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":290449.0,"Objects":[{"StartTime":290449.0,"EndTime":290449.0,"X":243.0,"Y":96.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":290524.0,"EndTime":290524.0,"X":315.869263,"Y":78.249794,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":290671.0,"Objects":[{"StartTime":290671.0,"EndTime":290671.0,"X":140.0,"Y":30.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":290746.0,"EndTime":290746.0,"X":67.23931,"Y":48.19017,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":290893.0,"Objects":[{"StartTime":290893.0,"EndTime":290893.0,"X":223.0,"Y":123.0}]},{"StartTime":291004.0,"Objects":[{"StartTime":291004.0,"EndTime":291004.0,"X":223.0,"Y":123.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":291079.0,"EndTime":291079.0,"X":150.239319,"Y":141.19017,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":291226.0,"Objects":[{"StartTime":291226.0,"EndTime":291226.0,"X":306.0,"Y":216.0}]},{"StartTime":291337.0,"Objects":[{"StartTime":291337.0,"EndTime":291337.0,"X":233.0,"Y":234.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":291412.0,"EndTime":291412.0,"X":160.239319,"Y":252.19017,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":291560.0,"Objects":[{"StartTime":291560.0,"EndTime":291560.0,"X":60.0,"Y":82.0}]},{"StartTime":291671.0,"Objects":[{"StartTime":291671.0,"EndTime":291671.0,"X":114.0,"Y":95.0}]},{"StartTime":291782.0,"Objects":[{"StartTime":291782.0,"EndTime":291782.0,"X":169.0,"Y":109.0}]},{"StartTime":291893.0,"Objects":[{"StartTime":291893.0,"EndTime":291893.0,"X":223.0,"Y":123.0}]},{"StartTime":292004.0,"Objects":[{"StartTime":292004.0,"EndTime":292004.0,"X":277.0,"Y":108.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":292079.0,"EndTime":292079.0,"X":348.8415,"Y":92.06539,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":292226.0,"Objects":[{"StartTime":292226.0,"EndTime":292226.0,"X":479.0,"Y":209.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":292301.0,"EndTime":292301.0,"X":500.194,"Y":279.897247,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":292449.0,"Objects":[{"StartTime":292449.0,"EndTime":292449.0,"X":285.0,"Y":299.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":292524.0,"EndTime":292524.0,"X":279.247772,"Y":373.779083,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":292671.0,"Objects":[{"StartTime":292671.0,"EndTime":292671.0,"X":407.0,"Y":190.0}]},{"StartTime":292782.0,"Objects":[{"StartTime":292782.0,"EndTime":292782.0,"X":407.0,"Y":190.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":292857.0,"EndTime":292857.0,"X":412.752228,"Y":264.779083,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":293004.0,"Objects":[{"StartTime":293004.0,"EndTime":293004.0,"X":253.0,"Y":128.0}]},{"StartTime":293115.0,"Objects":[{"StartTime":293115.0,"EndTime":293115.0,"X":248.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":293301.0,"EndTime":293301.0,"X":332.128082,"Y":159.941086,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":293449.0,"Objects":[{"StartTime":293449.0,"EndTime":293449.0,"X":482.0,"Y":90.0}]},{"StartTime":293560.0,"Objects":[{"StartTime":293560.0,"EndTime":293560.0,"X":487.0,"Y":164.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":293635.0,"EndTime":293635.0,"X":414.186737,"Y":146.021423,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":293782.0,"Objects":[{"StartTime":293782.0,"EndTime":293782.0,"X":248.0,"Y":203.0}]},{"StartTime":293893.0,"Objects":[{"StartTime":293893.0,"EndTime":293893.0,"X":196.0,"Y":180.0}]},{"StartTime":294004.0,"Objects":[{"StartTime":294004.0,"EndTime":294004.0,"X":140.0,"Y":180.0}]},{"StartTime":294115.0,"Objects":[{"StartTime":294115.0,"EndTime":294115.0,"X":89.0,"Y":202.0}]},{"StartTime":294226.0,"Objects":[{"StartTime":294226.0,"EndTime":294226.0,"X":51.0,"Y":243.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":294412.0,"EndTime":294412.0,"X":49.35009,"Y":164.435638,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":294560.0,"Objects":[{"StartTime":294560.0,"EndTime":294560.0,"X":92.0,"Y":319.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":294635.0,"EndTime":294635.0,"X":166.237274,"Y":309.999329,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":294782.0,"Objects":[{"StartTime":294782.0,"EndTime":294782.0,"X":317.0,"Y":351.0}]},{"StartTime":294893.0,"Objects":[{"StartTime":294893.0,"EndTime":294893.0,"X":399.0,"Y":338.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":294968.0,"EndTime":294968.0,"X":452.137421,"Y":286.427643,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":295115.0,"Objects":[{"StartTime":295115.0,"EndTime":295115.0,"X":281.0,"Y":104.0}]},{"StartTime":295226.0,"Objects":[{"StartTime":295226.0,"EndTime":295226.0,"X":247.0,"Y":147.0}]},{"StartTime":295337.0,"Objects":[{"StartTime":295337.0,"EndTime":295337.0,"X":248.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":295412.0,"EndTime":295412.0,"X":322.059174,"Y":206.941391,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":295560.0,"Objects":[{"StartTime":295560.0,"EndTime":295560.0,"X":281.0,"Y":104.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":295746.0,"EndTime":295746.0,"X":247.847549,"Y":202.258026,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":295893.0,"Objects":[{"StartTime":295893.0,"EndTime":295893.0,"X":301.0,"Y":78.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":295968.0,"EndTime":295968.0,"X":227.020447,"Y":65.6700745,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":296115.0,"Objects":[{"StartTime":296115.0,"EndTime":296115.0,"X":322.0,"Y":206.0}]},{"StartTime":296226.0,"Objects":[{"StartTime":296226.0,"EndTime":296226.0,"X":378.0,"Y":203.0}]},{"StartTime":296337.0,"Objects":[{"StartTime":296337.0,"EndTime":296337.0,"X":434.0,"Y":200.0}]},{"StartTime":296449.0,"Objects":[{"StartTime":296449.0,"EndTime":296449.0,"X":490.0,"Y":197.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":296524.0,"EndTime":296524.0,"X":481.9127,"Y":123.79538,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":296671.0,"Objects":[{"StartTime":296671.0,"EndTime":296671.0,"X":384.0,"Y":359.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":296746.0,"EndTime":296746.0,"X":446.2316,"Y":319.729828,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":296893.0,"Objects":[{"StartTime":296893.0,"EndTime":296893.0,"X":295.0,"Y":164.0}]},{"StartTime":297004.0,"Objects":[{"StartTime":297004.0,"EndTime":297004.0,"X":242.0,"Y":144.0}]},{"StartTime":297115.0,"Objects":[{"StartTime":297115.0,"EndTime":297115.0,"X":187.0,"Y":149.0}]},{"StartTime":297226.0,"Objects":[{"StartTime":297226.0,"EndTime":297226.0,"X":140.0,"Y":179.0}]},{"StartTime":297337.0,"Objects":[{"StartTime":297337.0,"EndTime":297337.0,"X":112.0,"Y":227.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":297412.0,"EndTime":297412.0,"X":104.972237,"Y":152.329987,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":297560.0,"Objects":[{"StartTime":297560.0,"EndTime":297560.0,"X":0.0,"Y":63.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":297635.0,"EndTime":297635.0,"X":72.19005,"Y":80.00728,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":297782.0,"Objects":[{"StartTime":297782.0,"EndTime":297782.0,"X":259.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":297893.0,"EndTime":297893.0,"X":186.83139,"Y":35.0842171,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":297968.0,"EndTime":297968.0,"X":259.0,"Y":18.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":298115.0,"Objects":[{"StartTime":298115.0,"EndTime":298115.0,"X":383.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":298226.0,"EndTime":298226.0,"X":418.150574,"Y":138.50589,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":298301.0,"EndTime":298301.0,"X":383.0,"Y":73.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":298449.0,"Objects":[{"StartTime":298449.0,"EndTime":298449.0,"X":242.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":298524.0,"EndTime":298524.0,"X":246.777512,"Y":218.847687,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":298671.0,"Objects":[{"StartTime":298671.0,"EndTime":298671.0,"X":409.0,"Y":298.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":298857.0,"EndTime":298857.0,"X":270.00058,"Y":329.671356,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":299115.0,"Objects":[{"StartTime":299115.0,"EndTime":299115.0,"X":47.0,"Y":287.0}]},{"StartTime":299226.0,"Objects":[{"StartTime":299226.0,"EndTime":299226.0,"X":11.0,"Y":243.0}]},{"StartTime":299337.0,"Objects":[{"StartTime":299337.0,"EndTime":299337.0,"X":0.0,"Y":189.0}]},{"StartTime":299449.0,"Objects":[{"StartTime":299449.0,"EndTime":299449.0,"X":13.0,"Y":135.0}]},{"StartTime":299560.0,"Objects":[{"StartTime":299560.0,"EndTime":299560.0,"X":49.0,"Y":92.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":299635.0,"EndTime":299635.0,"X":120.975449,"Y":88.04875,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":299782.0,"Objects":[{"StartTime":299782.0,"EndTime":299782.0,"X":244.0,"Y":186.0}]},{"StartTime":299893.0,"Objects":[{"StartTime":299893.0,"EndTime":299893.0,"X":244.0,"Y":186.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":299968.0,"EndTime":299968.0,"X":172.212662,"Y":189.046677,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":300115.0,"Objects":[{"StartTime":300115.0,"EndTime":300115.0,"X":363.0,"Y":223.0}]},{"StartTime":300226.0,"Objects":[{"StartTime":300226.0,"EndTime":300226.0,"X":363.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300301.0,"EndTime":300301.0,"X":358.369659,"Y":148.143066,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":300449.0,"Objects":[{"StartTime":300449.0,"EndTime":300449.0,"X":449.0,"Y":56.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300504.0,"EndTime":300504.0,"X":454.151123,"Y":19.08355,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300560.0,"EndTime":300560.0,"X":449.031219,"Y":55.7762642,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300579.0,"EndTime":300579.0,"X":454.182343,"Y":18.8598175,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":300671.0,"Objects":[{"StartTime":300671.0,"EndTime":300671.0,"X":403.0,"Y":162.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300726.0,"EndTime":300726.0,"X":405.425751,"Y":199.195084,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300782.0,"EndTime":300782.0,"X":403.0147,"Y":162.225418,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300801.0,"EndTime":300801.0,"X":405.44046,"Y":199.4205,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":300893.0,"Objects":[{"StartTime":300893.0,"EndTime":300893.0,"X":340.0,"Y":71.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":300948.0,"EndTime":300948.0,"X":302.878967,"Y":67.62537,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301004.0,"EndTime":301004.0,"X":339.775024,"Y":70.9795456,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301023.0,"EndTime":301023.0,"X":302.654,"Y":67.60491,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301115.0,"Objects":[{"StartTime":301115.0,"EndTime":301115.0,"X":254.0,"Y":153.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301170.0,"EndTime":301170.0,"X":216.878983,"Y":156.374649,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301226.0,"EndTime":301226.0,"X":253.775024,"Y":153.020447,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301245.0,"EndTime":301245.0,"X":216.654,"Y":156.3951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301337.0,"Objects":[{"StartTime":301337.0,"EndTime":301337.0,"X":120.0,"Y":88.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301364.0,"EndTime":301364.0,"X":90.89572,"Y":64.3527756,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301449.0,"Objects":[{"StartTime":301449.0,"EndTime":301449.0,"X":66.0,"Y":100.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301476.0,"EndTime":301476.0,"X":29.76619,"Y":90.33765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301560.0,"Objects":[{"StartTime":301560.0,"EndTime":301560.0,"X":30.0,"Y":141.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301587.0,"EndTime":301587.0,"X":-7.21042252,"Y":145.6513,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301671.0,"Objects":[{"StartTime":301671.0,"EndTime":301671.0,"X":23.0,"Y":196.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":301698.0,"EndTime":301698.0,"X":-10.5410194,"Y":212.770508,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":301782.0,"Objects":[{"StartTime":301782.0,"EndTime":301782.0,"X":50.0,"Y":245.0}]},{"StartTime":301893.0,"Objects":[{"StartTime":301893.0,"EndTime":301893.0,"X":100.0,"Y":226.0}]},{"StartTime":302004.0,"Objects":[{"StartTime":302004.0,"EndTime":302004.0,"X":146.0,"Y":250.0}]},{"StartTime":302115.0,"Objects":[{"StartTime":302115.0,"EndTime":302115.0,"X":159.0,"Y":300.0}]},{"StartTime":302226.0,"Objects":[{"StartTime":302226.0,"EndTime":302226.0,"X":136.0,"Y":344.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":302412.0,"EndTime":302412.0,"X":117.394791,"Y":195.158325,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":302560.0,"Objects":[{"StartTime":302560.0,"EndTime":302560.0,"X":192.0,"Y":80.0}]},{"StartTime":302671.0,"Objects":[{"StartTime":302671.0,"EndTime":302671.0,"X":192.0,"Y":80.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":302857.0,"EndTime":302857.0,"X":239.899292,"Y":201.07045,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":303004.0,"Objects":[{"StartTime":303004.0,"EndTime":303004.0,"X":146.0,"Y":250.0}]},{"StartTime":303115.0,"Objects":[{"StartTime":303115.0,"EndTime":303115.0,"X":72.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":303190.0,"EndTime":303190.0,"X":54.77756,"Y":232.478348,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":303337.0,"Objects":[{"StartTime":303337.0,"EndTime":303337.0,"X":106.0,"Y":129.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":303523.0,"EndTime":303523.0,"X":145.9509,"Y":250.0719,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":303671.0,"Objects":[{"StartTime":303671.0,"EndTime":303671.0,"X":72.0,"Y":152.0}]},{"StartTime":303782.0,"Objects":[{"StartTime":303782.0,"EndTime":303782.0,"X":72.0,"Y":152.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":303857.0,"EndTime":303857.0,"X":66.2477646,"Y":77.22091,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":304004.0,"Objects":[{"StartTime":304004.0,"EndTime":304004.0,"X":168.0,"Y":0.0}]},{"StartTime":304115.0,"Objects":[{"StartTime":304115.0,"EndTime":304115.0,"X":168.0,"Y":0.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":304190.0,"EndTime":304190.0,"X":173.752243,"Y":74.77909,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":304337.0,"Objects":[{"StartTime":304337.0,"EndTime":304337.0,"X":224.0,"Y":184.0}]},{"StartTime":304449.0,"Objects":[{"StartTime":304449.0,"EndTime":304449.0,"X":159.0,"Y":247.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":304635.0,"EndTime":304635.0,"X":291.3957,"Y":239.238037,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":304782.0,"Objects":[{"StartTime":304782.0,"EndTime":304782.0,"X":428.0,"Y":142.0}]},{"StartTime":304893.0,"Objects":[{"StartTime":304893.0,"EndTime":304893.0,"X":428.0,"Y":142.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":304968.0,"EndTime":304968.0,"X":353.110535,"Y":146.070084,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":305115.0,"Objects":[{"StartTime":305115.0,"EndTime":305115.0,"X":263.0,"Y":73.0}]},{"StartTime":305226.0,"Objects":[{"StartTime":305226.0,"EndTime":305226.0,"X":213.0,"Y":56.0}]},{"StartTime":305337.0,"Objects":[{"StartTime":305337.0,"EndTime":305337.0,"X":161.0,"Y":64.0}]},{"StartTime":305449.0,"Objects":[{"StartTime":305449.0,"EndTime":305449.0,"X":122.0,"Y":99.0}]},{"StartTime":305560.0,"Objects":[{"StartTime":305560.0,"EndTime":305560.0,"X":104.0,"Y":148.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":305635.0,"EndTime":305635.0,"X":121.072205,"Y":221.0311,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":305782.0,"Objects":[{"StartTime":305782.0,"EndTime":305782.0,"X":166.0,"Y":316.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":305968.0,"EndTime":305968.0,"X":21.8029289,"Y":327.180328,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":306115.0,"Objects":[{"StartTime":306115.0,"EndTime":306115.0,"X":309.0,"Y":200.0}]},{"StartTime":306226.0,"Objects":[{"StartTime":306226.0,"EndTime":306226.0,"X":309.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":306412.0,"EndTime":306412.0,"X":317.581451,"Y":338.349365,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":306560.0,"Objects":[{"StartTime":306560.0,"EndTime":306560.0,"X":243.0,"Y":278.0}]},{"StartTime":306671.0,"Objects":[{"StartTime":306671.0,"EndTime":306671.0,"X":309.0,"Y":200.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":306746.0,"EndTime":306746.0,"X":383.910919,"Y":196.34581,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":306893.0,"Objects":[{"StartTime":306893.0,"EndTime":306893.0,"X":500.0,"Y":99.0}]},{"StartTime":307004.0,"Objects":[{"StartTime":307004.0,"EndTime":307004.0,"X":447.0,"Y":92.0}]},{"StartTime":307115.0,"Objects":[{"StartTime":307115.0,"EndTime":307115.0,"X":397.0,"Y":75.0}]},{"StartTime":307226.0,"Objects":[{"StartTime":307226.0,"EndTime":307226.0,"X":344.0,"Y":69.0}]},{"StartTime":307337.0,"Objects":[{"StartTime":307337.0,"EndTime":307337.0,"X":296.0,"Y":47.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":307412.0,"EndTime":307412.0,"X":221.672577,"Y":36.9783249,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":307560.0,"Objects":[{"StartTime":307560.0,"EndTime":307560.0,"X":108.0,"Y":8.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":307746.0,"EndTime":307746.0,"X":109.323067,"Y":154.072922,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":307893.0,"Objects":[{"StartTime":307893.0,"EndTime":307893.0,"X":78.0,"Y":336.0}]},{"StartTime":308004.0,"Objects":[{"StartTime":308004.0,"EndTime":308004.0,"X":78.0,"Y":336.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":308190.0,"EndTime":308190.0,"X":24.1577778,"Y":213.150711,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":308337.0,"Objects":[{"StartTime":308337.0,"EndTime":308337.0,"X":194.0,"Y":174.0}]},{"StartTime":308449.0,"Objects":[{"StartTime":308449.0,"EndTime":308449.0,"X":194.0,"Y":174.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":308524.0,"EndTime":308524.0,"X":186.889313,"Y":248.66217,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":308671.0,"Objects":[{"StartTime":308671.0,"EndTime":308671.0,"X":288.0,"Y":113.0}]},{"StartTime":308782.0,"Objects":[{"StartTime":308782.0,"EndTime":308782.0,"X":323.0,"Y":74.0}]},{"StartTime":308893.0,"Objects":[{"StartTime":308893.0,"EndTime":308893.0,"X":373.0,"Y":59.0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"X":424.0,"Y":70.0}]},{"StartTime":309115.0,"Objects":[{"StartTime":309115.0,"EndTime":309115.0,"X":476.0,"Y":67.0}]},{"StartTime":309226.0,"Objects":[{"StartTime":309226.0,"EndTime":309226.0,"X":462.0,"Y":117.0}]},{"StartTime":309337.0,"Objects":[{"StartTime":309337.0,"EndTime":309337.0,"X":448.0,"Y":167.0}]},{"StartTime":309449.0,"Objects":[{"StartTime":309449.0,"EndTime":309449.0,"X":434.0,"Y":217.0}]},{"StartTime":309560.0,"Objects":[{"StartTime":309560.0,"EndTime":309560.0,"X":460.0,"Y":262.0}]},{"StartTime":309671.0,"Objects":[{"StartTime":309671.0,"EndTime":309671.0,"X":408.0,"Y":253.0}]},{"StartTime":309782.0,"Objects":[{"StartTime":309782.0,"EndTime":309782.0,"X":359.0,"Y":274.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":309857.0,"EndTime":309857.0,"X":348.925232,"Y":344.30542,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":310004.0,"Objects":[{"StartTime":310004.0,"EndTime":310004.0,"X":305.0,"Y":191.0}]},{"StartTime":310115.0,"Objects":[{"StartTime":310115.0,"EndTime":310115.0,"X":305.0,"Y":191.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":310301.0,"EndTime":310301.0,"X":325.611847,"Y":42.4228973,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":310449.0,"Objects":[{"StartTime":310449.0,"EndTime":310449.0,"X":216.0,"Y":296.0}]},{"StartTime":310560.0,"Objects":[{"StartTime":310560.0,"EndTime":310560.0,"X":165.0,"Y":310.0}]},{"StartTime":310671.0,"Objects":[{"StartTime":310671.0,"EndTime":310671.0,"X":118.0,"Y":290.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":310857.0,"EndTime":310857.0,"X":80.842,"Y":168.38945,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":311004.0,"Objects":[{"StartTime":311004.0,"EndTime":311004.0,"X":230.0,"Y":113.0}]},{"StartTime":311115.0,"Objects":[{"StartTime":311115.0,"EndTime":311115.0,"X":230.0,"Y":113.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":311412.0,"EndTime":311412.0,"X":5.562317,"Y":128.897675,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":311560.0,"Objects":[{"StartTime":311560.0,"EndTime":311560.0,"X":95.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":311635.0,"EndTime":311635.0,"X":149.100632,"Y":108.046616,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":311782.0,"Objects":[{"StartTime":311782.0,"EndTime":311782.0,"X":169.0,"Y":270.0}]},{"StartTime":311893.0,"Objects":[{"StartTime":311893.0,"EndTime":311893.0,"X":169.0,"Y":270.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":312079.0,"EndTime":312079.0,"X":306.0838,"Y":246.75618,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":312226.0,"Objects":[{"StartTime":312226.0,"EndTime":312226.0,"X":405.0,"Y":327.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":312301.0,"EndTime":312301.0,"X":479.9522,"Y":329.67688,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":312449.0,"Objects":[{"StartTime":312449.0,"EndTime":312449.0,"X":200.0,"Y":285.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":312635.0,"EndTime":312635.0,"X":59.225914,"Y":275.1619,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":312782.0,"Objects":[{"StartTime":312782.0,"EndTime":312782.0,"X":13.0,"Y":105.0}]},{"StartTime":312893.0,"Objects":[{"StartTime":312893.0,"EndTime":312893.0,"X":95.0,"Y":62.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":313190.0,"EndTime":313190.0,"X":319.3316,"Y":79.33034,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":313337.0,"Objects":[{"StartTime":313337.0,"EndTime":313337.0,"X":488.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":313412.0,"EndTime":313412.0,"X":475.216217,"Y":200.466019,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":313560.0,"Objects":[{"StartTime":313560.0,"EndTime":313560.0,"X":360.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":313635.0,"EndTime":313635.0,"X":372.7838,"Y":239.533966,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":313782.0,"Objects":[{"StartTime":313782.0,"EndTime":313782.0,"X":464.0,"Y":312.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":313857.0,"EndTime":313857.0,"X":450.9661,"Y":238.141235,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":314004.0,"Objects":[{"StartTime":314004.0,"EndTime":314004.0,"X":320.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":314079.0,"EndTime":314079.0,"X":333.0339,"Y":217.858765,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":314226.0,"Objects":[{"StartTime":314226.0,"EndTime":314226.0,"X":288.0,"Y":352.0}]},{"StartTime":314337.0,"Objects":[{"StartTime":314337.0,"EndTime":314337.0,"X":248.0,"Y":320.0}]},{"StartTime":314449.0,"Objects":[{"StartTime":314449.0,"EndTime":314449.0,"X":208.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":314476.0,"EndTime":314476.0,"X":170.5,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":314560.0,"Objects":[{"StartTime":314560.0,"EndTime":314560.0,"X":168.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":314587.0,"EndTime":314587.0,"X":130.876892,"Y":309.3033,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":314671.0,"Objects":[{"StartTime":314671.0,"EndTime":314671.0,"X":112.0,"Y":320.0}]},{"StartTime":314782.0,"Objects":[{"StartTime":314782.0,"EndTime":314782.0,"X":64.0,"Y":312.0}]},{"StartTime":314893.0,"Objects":[{"StartTime":314893.0,"EndTime":314893.0,"X":32.0,"Y":272.0}]},{"StartTime":315004.0,"Objects":[{"StartTime":315004.0,"EndTime":315004.0,"X":40.0,"Y":216.0}]},{"StartTime":315115.0,"Objects":[{"StartTime":315115.0,"EndTime":315115.0,"X":72.0,"Y":176.0}]},{"StartTime":315226.0,"Objects":[{"StartTime":315226.0,"EndTime":315226.0,"X":120.0,"Y":160.0}]},{"StartTime":315337.0,"Objects":[{"StartTime":315337.0,"EndTime":315337.0,"X":168.0,"Y":144.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":315364.0,"EndTime":315364.0,"X":203.575623,"Y":132.141464,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":315449.0,"Objects":[{"StartTime":315449.0,"EndTime":315449.0,"X":203.0,"Y":132.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":315476.0,"EndTime":315476.0,"X":238.6336,"Y":120.316849,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":315560.0,"Objects":[{"StartTime":315560.0,"EndTime":315560.0,"X":264.0,"Y":136.0}]},{"StartTime":315671.0,"Objects":[{"StartTime":315671.0,"EndTime":315671.0,"X":296.0,"Y":96.0}]},{"StartTime":315782.0,"Objects":[{"StartTime":315782.0,"EndTime":315782.0,"X":288.0,"Y":48.0}]},{"StartTime":315893.0,"Objects":[{"StartTime":315893.0,"EndTime":315893.0,"X":256.0,"Y":8.0}]},{"StartTime":316115.0,"Objects":[{"StartTime":316115.0,"EndTime":316115.0,"X":256.0,"Y":352.0}]},{"StartTime":316337.0,"Objects":[{"StartTime":316337.0,"EndTime":316337.0,"X":256.0,"Y":8.0}]},{"StartTime":316449.0,"Objects":[{"StartTime":316449.0,"EndTime":316449.0,"X":219.0,"Y":91.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":316635.0,"EndTime":316635.0,"X":314.382172,"Y":76.83485,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":316893.0,"Objects":[{"StartTime":316893.0,"EndTime":316893.0,"X":434.0,"Y":29.0}]},{"StartTime":317004.0,"Objects":[{"StartTime":317004.0,"EndTime":317004.0,"X":437.0,"Y":66.0}]},{"StartTime":317115.0,"Objects":[{"StartTime":317115.0,"EndTime":317115.0,"X":440.0,"Y":103.0}]},{"StartTime":317337.0,"Objects":[{"StartTime":317337.0,"EndTime":317337.0,"X":371.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":317448.0,"EndTime":317448.0,"X":321.970978,"Y":205.1942,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":317559.0,"EndTime":317559.0,"X":371.0,"Y":215.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":317634.0,"EndTime":317634.0,"X":321.970978,"Y":205.1942,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":317782.0,"Objects":[{"StartTime":317782.0,"EndTime":317782.0,"X":298.0,"Y":247.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":317893.0,"EndTime":317893.0,"X":248.790833,"Y":255.857651,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":318004.0,"EndTime":318004.0,"X":298.0,"Y":247.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":318079.0,"EndTime":318079.0,"X":248.790833,"Y":255.857651,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":318226.0,"Objects":[{"StartTime":318226.0,"EndTime":318226.0,"X":216.0,"Y":221.0}]},{"StartTime":318337.0,"Objects":[{"StartTime":318337.0,"EndTime":318337.0,"X":178.0,"Y":217.0}]},{"StartTime":318449.0,"Objects":[{"StartTime":318449.0,"EndTime":318449.0,"X":143.0,"Y":229.0}]},{"StartTime":318671.0,"Objects":[{"StartTime":318671.0,"EndTime":318671.0,"X":23.0,"Y":142.0}]},{"StartTime":318893.0,"Objects":[{"StartTime":318893.0,"EndTime":318893.0,"X":161.0,"Y":78.0}]},{"StartTime":319115.0,"Objects":[{"StartTime":319115.0,"EndTime":319115.0,"X":56.0,"Y":224.0}]},{"StartTime":319226.0,"Objects":[{"StartTime":319226.0,"EndTime":319226.0,"X":36.0,"Y":255.0}]},{"StartTime":319337.0,"Objects":[{"StartTime":319337.0,"EndTime":319337.0,"X":31.0,"Y":292.0}]},{"StartTime":319449.0,"Objects":[{"StartTime":319449.0,"EndTime":319449.0,"X":40.0,"Y":328.0}]},{"StartTime":319560.0,"Objects":[{"StartTime":319560.0,"EndTime":319560.0,"X":62.0,"Y":358.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":319635.0,"EndTime":319635.0,"X":110.935852,"Y":347.739258,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":319782.0,"Objects":[{"StartTime":319782.0,"EndTime":319782.0,"X":249.0,"Y":272.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":319968.0,"EndTime":319968.0,"X":347.724121,"Y":287.923248,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":320226.0,"Objects":[{"StartTime":320226.0,"EndTime":320226.0,"X":219.0,"Y":363.0}]},{"StartTime":320449.0,"Objects":[{"StartTime":320449.0,"EndTime":320449.0,"X":260.0,"Y":226.0}]},{"StartTime":320671.0,"Objects":[{"StartTime":320671.0,"EndTime":320671.0,"X":380.0,"Y":331.0}]},{"StartTime":320893.0,"Objects":[{"StartTime":320893.0,"EndTime":320893.0,"X":462.0,"Y":168.0}]},{"StartTime":321004.0,"Objects":[{"StartTime":321004.0,"EndTime":321004.0,"X":420.0,"Y":173.0}]},{"StartTime":321115.0,"Objects":[{"StartTime":321115.0,"EndTime":321115.0,"X":379.0,"Y":178.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":321190.0,"EndTime":321190.0,"X":330.541565,"Y":190.319946,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":321337.0,"Objects":[{"StartTime":321337.0,"EndTime":321337.0,"X":200.0,"Y":259.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":321412.0,"EndTime":321412.0,"X":248.45842,"Y":271.319946,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":321560.0,"Objects":[{"StartTime":321560.0,"EndTime":321560.0,"X":380.0,"Y":331.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":321746.0,"EndTime":321746.0,"X":386.820923,"Y":234.890335,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":322004.0,"Objects":[{"StartTime":322004.0,"EndTime":322004.0,"X":338.0,"Y":49.0}]},{"StartTime":322226.0,"Objects":[{"StartTime":322226.0,"EndTime":322226.0,"X":330.0,"Y":190.0}]},{"StartTime":322449.0,"Objects":[{"StartTime":322449.0,"EndTime":322449.0,"X":443.0,"Y":275.0}]},{"StartTime":322671.0,"Objects":[{"StartTime":322671.0,"EndTime":322671.0,"X":426.0,"Y":118.0}]},{"StartTime":322782.0,"Objects":[{"StartTime":322782.0,"EndTime":322782.0,"X":394.0,"Y":97.0}]},{"StartTime":322893.0,"Objects":[{"StartTime":322893.0,"EndTime":322893.0,"X":360.0,"Y":83.0}]},{"StartTime":323004.0,"Objects":[{"StartTime":323004.0,"EndTime":323004.0,"X":323.0,"Y":76.0}]},{"StartTime":323115.0,"Objects":[{"StartTime":323115.0,"EndTime":323115.0,"X":285.0,"Y":78.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":323190.0,"EndTime":323190.0,"X":236.110245,"Y":84.99362,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":323337.0,"Objects":[{"StartTime":323337.0,"EndTime":323337.0,"X":165.0,"Y":223.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":323412.0,"EndTime":323412.0,"X":191.980072,"Y":181.488983,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":323560.0,"Objects":[{"StartTime":323560.0,"EndTime":323560.0,"X":65.0,"Y":126.0}]},{"StartTime":323671.0,"Objects":[{"StartTime":323671.0,"EndTime":323671.0,"X":43.0,"Y":156.0}]},{"StartTime":323782.0,"Objects":[{"StartTime":323782.0,"EndTime":323782.0,"X":30.0,"Y":191.0}]},{"StartTime":323893.0,"Objects":[{"StartTime":323893.0,"EndTime":323893.0,"X":27.0,"Y":229.0}]},{"StartTime":324004.0,"Objects":[{"StartTime":324004.0,"EndTime":324004.0,"X":34.0,"Y":265.0}]},{"StartTime":324115.0,"Objects":[{"StartTime":324115.0,"EndTime":324115.0,"X":69.0,"Y":278.0}]},{"StartTime":324226.0,"Objects":[{"StartTime":324226.0,"EndTime":324226.0,"X":106.0,"Y":283.0}]},{"StartTime":324337.0,"Objects":[{"StartTime":324337.0,"EndTime":324337.0,"X":144.0,"Y":280.0}]},{"StartTime":324449.0,"Objects":[{"StartTime":324449.0,"EndTime":324449.0,"X":179.0,"Y":269.0}]},{"StartTime":324560.0,"Objects":[{"StartTime":324560.0,"EndTime":324560.0,"X":205.0,"Y":294.0}]},{"StartTime":324671.0,"Objects":[{"StartTime":324671.0,"EndTime":324671.0,"X":205.0,"Y":331.0}]},{"StartTime":324782.0,"Objects":[{"StartTime":324782.0,"EndTime":324782.0,"X":179.0,"Y":356.0}]},{"StartTime":324893.0,"Objects":[{"StartTime":324893.0,"EndTime":324893.0,"X":143.0,"Y":356.0}]},{"StartTime":325004.0,"Objects":[{"StartTime":325004.0,"EndTime":325004.0,"X":120.0,"Y":319.0}]},{"StartTime":325115.0,"Objects":[{"StartTime":325115.0,"EndTime":325115.0,"X":111.0,"Y":276.0}]},{"StartTime":325226.0,"Objects":[{"StartTime":325226.0,"EndTime":325226.0,"X":118.0,"Y":233.0}]},{"StartTime":325337.0,"Objects":[{"StartTime":325337.0,"EndTime":325337.0,"X":139.0,"Y":195.0}]},{"StartTime":325449.0,"Objects":[{"StartTime":325449.0,"EndTime":325449.0,"X":168.0,"Y":203.0}]},{"StartTime":325560.0,"Objects":[{"StartTime":325560.0,"EndTime":325560.0,"X":199.0,"Y":204.0}]},{"StartTime":325671.0,"Objects":[{"StartTime":325671.0,"EndTime":325671.0,"X":230.0,"Y":196.0}]},{"StartTime":325782.0,"Objects":[{"StartTime":325782.0,"EndTime":325782.0,"X":256.0,"Y":180.0}]},{"StartTime":325893.0,"Objects":[{"StartTime":325893.0,"EndTime":325893.0,"X":282.0,"Y":164.0}]},{"StartTime":326004.0,"Objects":[{"StartTime":326004.0,"EndTime":326004.0,"X":313.0,"Y":156.0}]},{"StartTime":326115.0,"Objects":[{"StartTime":326115.0,"EndTime":326115.0,"X":344.0,"Y":157.0}]},{"StartTime":326226.0,"Objects":[{"StartTime":326226.0,"EndTime":326226.0,"X":374.0,"Y":166.0}]},{"StartTime":326337.0,"Objects":[{"StartTime":326337.0,"EndTime":326337.0,"X":334.0,"Y":137.0}]},{"StartTime":326449.0,"Objects":[{"StartTime":326449.0,"EndTime":326449.0,"X":318.0,"Y":90.0}]},{"StartTime":326560.0,"Objects":[{"StartTime":326560.0,"EndTime":326560.0,"X":331.0,"Y":43.0}]},{"StartTime":326671.0,"Objects":[{"StartTime":326671.0,"EndTime":326671.0,"X":370.0,"Y":12.0}]},{"StartTime":326782.0,"Objects":[{"StartTime":326782.0,"EndTime":326782.0,"X":419.0,"Y":9.0}]},{"StartTime":326893.0,"Objects":[{"StartTime":326893.0,"EndTime":326893.0,"X":461.0,"Y":35.0}]},{"StartTime":327004.0,"Objects":[{"StartTime":327004.0,"EndTime":327004.0,"X":480.0,"Y":80.0}]},{"StartTime":327115.0,"Objects":[{"StartTime":327115.0,"EndTime":327115.0,"X":470.0,"Y":128.0}]},{"StartTime":327226.0,"Objects":[{"StartTime":327226.0,"EndTime":327226.0,"X":448.0,"Y":166.0}]},{"StartTime":327337.0,"Objects":[{"StartTime":327337.0,"EndTime":327337.0,"X":444.0,"Y":209.0}]},{"StartTime":327449.0,"Objects":[{"StartTime":327449.0,"EndTime":327449.0,"X":458.0,"Y":250.0}]},{"StartTime":327560.0,"Objects":[{"StartTime":327560.0,"EndTime":327560.0,"X":487.0,"Y":282.0}]},{"StartTime":327671.0,"Objects":[{"StartTime":327671.0,"EndTime":327671.0,"X":475.0,"Y":241.0}]},{"StartTime":327782.0,"Objects":[{"StartTime":327782.0,"EndTime":327782.0,"X":442.0,"Y":213.0}]},{"StartTime":327893.0,"Objects":[{"StartTime":327893.0,"EndTime":327893.0,"X":400.0,"Y":208.0}]},{"StartTime":328004.0,"Objects":[{"StartTime":328004.0,"EndTime":328004.0,"X":361.0,"Y":227.0}]},{"StartTime":328115.0,"Objects":[{"StartTime":328115.0,"EndTime":328115.0,"X":336.0,"Y":258.0}]},{"StartTime":328226.0,"Objects":[{"StartTime":328226.0,"EndTime":328226.0,"X":275.0,"Y":214.0}]},{"StartTime":328337.0,"Objects":[{"StartTime":328337.0,"EndTime":328337.0,"X":261.0,"Y":246.0}]},{"StartTime":328449.0,"Objects":[{"StartTime":328449.0,"EndTime":328449.0,"X":192.0,"Y":227.0}]},{"StartTime":328560.0,"Objects":[{"StartTime":328560.0,"EndTime":328560.0,"X":186.0,"Y":256.0}]},{"StartTime":328671.0,"Objects":[{"StartTime":328671.0,"EndTime":328671.0,"X":114.0,"Y":258.0}]},{"StartTime":328782.0,"Objects":[{"StartTime":328782.0,"EndTime":328782.0,"X":113.0,"Y":282.0}]},{"StartTime":328893.0,"Objects":[{"StartTime":328893.0,"EndTime":328893.0,"X":45.0,"Y":304.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":328948.0,"EndTime":328948.0,"X":24.0972271,"Y":317.4375,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329004.0,"EndTime":329004.0,"X":44.8733177,"Y":304.081451,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329023.0,"EndTime":329023.0,"X":23.9705372,"Y":317.518951,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":329115.0,"Objects":[{"StartTime":329115.0,"EndTime":329115.0,"X":25.0,"Y":203.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329170.0,"EndTime":329170.0,"X":0.34249115,"Y":206.082184,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329226.0,"EndTime":329226.0,"X":24.8505611,"Y":203.018677,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329245.0,"EndTime":329245.0,"X":0.1930542,"Y":206.100861,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":329337.0,"Objects":[{"StartTime":329337.0,"EndTime":329337.0,"X":69.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329392.0,"EndTime":329392.0,"X":45.28175,"Y":107.588043,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329448.0,"EndTime":329448.0,"X":68.8562546,"Y":114.955078,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329467.0,"EndTime":329467.0,"X":45.138,"Y":107.543121,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":329560.0,"Objects":[{"StartTime":329560.0,"EndTime":329560.0,"X":154.0,"Y":70.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329615.0,"EndTime":329615.0,"X":135.712555,"Y":53.17555,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329671.0,"EndTime":329671.0,"X":153.88916,"Y":69.89803,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329690.0,"EndTime":329690.0,"X":135.60173,"Y":53.0735855,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":329782.0,"Objects":[{"StartTime":329782.0,"EndTime":329782.0,"X":300.0,"Y":116.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329809.0,"EndTime":329809.0,"X":323.513855,"Y":107.508888,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":329893.0,"Objects":[{"StartTime":329893.0,"EndTime":329893.0,"X":282.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":329920.0,"EndTime":329920.0,"X":297.2108,"Y":187.840164,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":330004.0,"Objects":[{"StartTime":330004.0,"EndTime":330004.0,"X":228.0,"Y":168.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":330031.0,"EndTime":330031.0,"X":213.531326,"Y":188.38768,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":330115.0,"Objects":[{"StartTime":330115.0,"EndTime":330115.0,"X":211.0,"Y":115.0,"StackOffset":{"X":0.0,"Y":0.0}},{"StartTime":330142.0,"EndTime":330142.0,"X":187.036591,"Y":107.87574,"StackOffset":{"X":0.0,"Y":0.0}}]},{"StartTime":330226.0,"Objects":[{"StartTime":330226.0,"EndTime":330226.0,"X":256.0,"Y":83.0}]},{"StartTime":330337.0,"Objects":[{"StartTime":330337.0,"EndTime":330337.0,"X":256.0,"Y":133.0}]},{"StartTime":330449.0,"Objects":[{"StartTime":330449.0,"EndTime":330449.0,"X":256.0,"Y":183.0}]},{"StartTime":330560.0,"Objects":[{"StartTime":330560.0,"EndTime":330560.0,"X":256.0,"Y":233.0}]}]}
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165.osu b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165.osu
new file mode 100644
index 000000000000..7357bb1dafb2
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/Resources/Testing/Beatmaps/801165.osu
@@ -0,0 +1,1768 @@
+osu file format v14
+
+[General]
+AudioLeadIn: 0
+PreviewTime: 231110
+Countdown: 0
+SampleSet: Normal
+StackLeniency: 0.2
+Mode: 0
+LetterboxInBreaks: 0
+WidescreenStoryboard: 1
+
+[Difficulty]
+HPDrainRate:6
+CircleSize:4
+OverallDifficulty:8
+ApproachRate:9.3
+SliderMultiplier:2
+SliderTickRate:1
+
+[Events]
+//Background and Video events
+//Break Periods
+2,14204,16450
+2,117537,127450
+2,188649,195006
+//Storyboard Layer 0 (Background)
+//Storyboard Layer 1 (Fail)
+//Storyboard Layer 2 (Pass)
+//Storyboard Layer 3 (Foreground)
+//Storyboard Layer 4 (Overlay)
+//Storyboard Sound Samples
+
+[TimingPoints]
+5338,444.444444444444,4,2,0,50,1,0
+6338,-100,4,2,7,60,0,0
+7115,-100,4,2,7,50,0,0
+13671,-100,4,2,7,60,0,0
+17560,-100,4,2,8,60,0,0
+17782,-100,4,2,7,60,0,0
+18226,-100,4,2,8,60,0,0
+21114,-83.3333333333333,4,2,8,60,0,0
+21337,-100,4,2,8,60,0,0
+22893,-83.3333333333333,4,2,8,60,0,0
+23448,-100,4,2,8,60,0,0
+25337,-66.6666666666667,4,2,8,60,0,0
+25670,-100,4,2,8,60,0,0
+31559,-55.5555555555556,4,2,8,60,0,0
+44448,-100,4,2,8,50,0,0
+44893,-100,4,2,8,55,0,0
+45337,-100,4,2,7,60,0,0
+45670,-200,4,2,8,60,0,0
+46226,-66.6666666666667,4,2,8,65,0,0
+58670,-66.6666666666667,4,2,8,55,0,0
+59115,-66.6666666666667,4,2,8,60,0,0
+59559,-66.6666666666667,4,2,8,65,0,0
+60226,-100,4,2,8,60,0,0
+60893,-100,4,2,8,55,0,0
+68004,-66.6666666666667,4,2,8,65,0,0
+73337,-100,4,2,8,55,0,0
+73781,-100,4,2,8,55,0,0
+73893,-100,4,2,7,55,0,0
+74004,-100,4,2,8,55,0,0
+74115,-100,4,2,7,55,0,0
+74226,-100,4,2,8,55,0,0
+74337,-100,4,2,7,55,0,0
+74448,-100,4,2,8,55,0,0
+82893,-76.9230769230769,4,2,8,50,0,0
+85115,-76.9230769230769,4,2,0,50,0,0
+85337,-100,4,2,8,60,0,0
+85893,-100,4,2,7,60,0,0
+86226,-100,4,2,8,60,0,0
+88893,-58.8235294117647,4,1,8,70,0,1
+102226,-58.8235294117647,4,2,8,70,0,1
+103115,-58.8235294117647,4,1,8,70,0,1
+115337,-50,4,1,8,70,0,1
+115670,-50,4,2,7,70,0,1
+116004,-76.9230769230769,4,2,8,70,0,1
+116559,-76.9230769230769,4,2,7,60,0,1
+117337,-58.8235294117647,4,2,8,70,0,0
+128004,-100,4,2,8,65,0,0
+129781,-100,4,2,8,55,0,0
+130226,-100,4,2,8,60,0,0
+130670,-100,4,2,8,65,0,0
+131337,-100,4,2,8,60,0,0
+132004,-100,4,2,8,55,0,0
+145004,-100,4,2,7,55,0,0
+145115,-100,4,2,8,55,0,0
+145226,-100,4,2,7,55,0,0
+145337,-100,4,2,8,55,0,0
+145448,-100,4,2,7,55,0,0
+145559,-100,4,2,8,55,0,0
+156226,-100,4,2,0,50,0,0
+156448,-100,4,2,8,60,0,0
+157004,-100,4,2,7,60,0,0
+157337,-100,4,2,8,60,0,0
+160004,-58.8235294117647,4,1,8,70,0,1
+186781,-58.8235294117647,4,2,7,70,0,1
+187115,-58.8235294117647,4,1,8,70,0,1
+187670,-58.8235294117647,4,1,7,70,0,1
+188449,-58.8235294117647,4,2,8,70,0,0
+195559,-100,4,2,7,40,0,0
+195670,-100,4,2,8,40,0,0
+202670,-66.6666666666667,4,2,8,70,0,0
+203115,-100,4,2,8,60,0,0
+215559,-100,4,2,7,60,0,0
+216893,-83.3333333333333,4,2,8,60,0,0
+228115,-83.3333333333333,4,2,7,60,0,0
+228226,-83.3333333333333,4,2,8,60,0,0
+228337,-83.3333333333333,4,2,7,60,0,0
+228448,-83.3333333333333,4,2,8,60,0,0
+228781,-83.3333333333333,4,2,7,60,0,0
+228893,-83.3333333333333,4,2,8,60,0,0
+229893,-83.3333333333333,4,2,7,60,0,0
+230004,-83.3333333333333,4,2,8,60,0,0
+231115,-166.666666666667,4,2,8,60,0,0
+238226,-166.666666666667,4,2,7,60,0,0
+238893,-166.666666666667,4,2,8,60,0,0
+245004,-166.666666666667,4,2,7,60,0,0
+245115,-166.666666666667,4,2,8,60,0,0
+245337,-100,4,2,8,60,0,0
+257893,-100,4,2,7,60,0,0
+258226,-100,4,2,8,60,0,0
+258337,-100,4,2,7,60,0,0
+258448,-100,4,2,8,60,0,0
+258559,-100,4,2,7,60,0,0
+258670,-100,4,2,8,60,0,0
+259560,-58.8235294117647,4,1,8,70,0,1
+273448,-58.8235294117647,4,2,7,70,0,1
+273559,-58.8235294117647,4,1,8,70,0,1
+286337,-58.8235294117647,4,2,7,70,0,1
+286670,-58.8235294117647,4,2,8,70,0,1
+286781,-58.8235294117647,4,2,7,70,0,1
+286893,-58.8235294117647,4,2,8,70,0,1
+287226,-58.8235294117647,4,1,7,70,0,1
+288004,-66.6666666666667,4,2,8,65,0,0
+295559,-50,4,2,8,65,0,0
+295893,-66.6666666666667,4,2,8,65,0,0
+298448,-66.6666666666667,4,2,0,65,0,0
+298559,-66.6666666666667,4,2,8,65,0,0
+312670,-66.6666666666667,4,2,0,65,0,0
+312781,-66.6666666666667,4,2,8,65,0,0
+313448,-66.6666666666667,4,2,7,65,0,0
+313781,-66.6666666666667,4,2,8,65,0,0
+315337,-66.6666666666667,4,2,7,65,0,0
+315559,-66.6666666666667,4,2,8,65,0,0
+316448,-100,4,2,8,60,0,0
+330559,-100,4,2,7,60,0,0
+
+
+[Colours]
+Combo1 : 139,159,214
+Combo2 : 128,128,255
+Combo3 : 227,227,227
+
+[HitObjects]
+378,163,6337,6,4,P|427:159|468:188,2,100,8|8|8,3:2|3:2|3:2,0:0:0:0:
+320,312,7115,2,0,L|332:360,1,50,6|2,0:0|0:0,0:0:0:0:
+164,208,7560,6,0,L|132:208,1,25,10|0,0:0|0:0,0:0:0:0:
+139,208,7671,2,0,L|92:208,1,25,2|2,0:0|0:0,0:0:0:0:
+114,208,7782,2,0,L|84:208,1,25,2|2,0:0|0:0,0:0:0:0:
+89,208,7893,2,0,L|60:208,1,25,10|0,0:0|0:0,0:0:0:0:
+32,184,8004,6,0,L|48:112,1,50,2|10,0:0|0:0,0:0:0:0:
+144,128,8226,2,0,L|160:56,1,50,8|0,3:2|1:0,0:0:0:0:
+266,68,8449,5,2,0:0:0:0:
+306,40,8560,1,2,1:2:0:0:
+356,39,8671,1,8,3:2:0:0:
+397,66,8782,1,0,0:0:0:0:
+415,111,8893,6,0,L|447:168,1,50,2|10,3:2|0:0,0:0:0:0:
+429,263,9115,2,0,L|463:321,1,50,2|0,0:0|0:0,0:0:0:0:
+328,272,9337,6,0,L|312:244,1,25,2|2,0:0|0:0,0:0:0:0:
+315,250,9449,2,0,L|291:209,1,25,2|2,0:0|0:0,0:0:0:0:
+303,228,9560,2,0,L|288:202,1,25,2|2,0:0|0:0,0:0:0:0:
+290,207,9671,2,0,L|275:181,1,25,2|2,0:0|0:0,0:0:0:0:
+248,152,9782,6,0,L|248:88,1,50,2|10,0:0|0:0,0:0:0:0:
+154,136,10004,2,0,L|154:80,1,50,8|0,3:2|1:0,0:0:0:0:
+64,168,10226,5,2,0:0:0:0:
+19,187,10337,1,2,1:2:0:0:
+0,232,10449,1,8,3:2:0:0:
+14,278,10560,1,0,0:0:0:0:
+56,303,10671,5,2,3:2:0:0:
+101,282,10782,1,10,0:0:0:0:
+151,282,10893,1,2,0:0:0:0:
+196,302,11004,1,0,0:0:0:0:
+240,316,11115,6,0,L|272:316,1,25,10|0,0:0|0:0,0:0:0:0:
+265,316,11226,2,0,L|312:316,1,25,2|2,0:0|0:0,0:0:0:0:
+290,316,11337,2,0,L|320:316,1,25,2|2,0:0|0:0,0:0:0:0:
+315,316,11449,2,0,L|344:316,1,25,10|0,0:0|0:0,0:0:0:0:
+384,340,11560,6,0,L|416:292,1,50,2|10,0:0|0:0,0:0:0:0:
+376,196,11782,2,0,L|344:244,1,50,10|0,3:0|1:0,0:0:0:0:
+416,308,12004,6,0,L|429:251,1,50,2|2,0:0|1:2,0:0:0:0:
+359,175,12226,2,0,L|345:231,1,50,10|0,3:0|0:0,0:0:0:0:
+440,260,12449,6,0,L|433:202,1,50,2|10,3:2|0:0,0:0:0:0:
+340,154,12671,2,0,L|346:211,1,50,2|0,0:3|0:0,0:0:0:0:
+432,124,12893,6,0,L|420:94,1,25,10|0,0:0|0:0,0:0:0:0:
+422,100,13004,2,0,L|404:56,1,25,2|2,0:0|0:0,0:0:0:0:
+412,76,13115,2,0,L|400:48,1,25,2|2,0:0|0:0,0:0:0:0:
+403,53,13226,2,0,L|392:26,1,25,10|0,0:0|0:0,0:0:0:0:
+352,4,13337,5,2,0:0:0:0:
+352,4,13449,1,10,0:0:0:0:
+352,4,13560,1,8,3:2:0:0:
+352,4,13671,6,0,L|324:96,1,50,0|0,1:0|0:0,0:0:0:0:
+257,89,13893,2,0,L|229:-3,1,50,0|0,1:0|0:0,0:0:0:0:
+66,72,17004,5,8,3:2:0:0:
+128,199,17226,1,8,3:2:0:0:
+207,82,17449,1,8,3:2:0:0:
+283,160,17560,6,0,L|345:154,1,50,8|0,0:0|2:0,0:0:0:0:
+487,113,17782,6,0,L|437:107,3,50,4|0|0|0,0:2|0:0|0:0|0:0,0:0:0:0:
+403,76,18226,1,8,0:0:0:0:
+365,107,18337,1,0,0:0:0:0:
+356,156,18449,1,0,0:0:0:0:
+379,199,18560,1,0,0:0:0:0:
+423,222,18671,6,0,L|473:228,1,50,8|0,0:0|0:0,0:0:0:0:
+332,345,18893,1,0,0:0:0:0:
+332,345,19004,2,0,L|322:279,1,50,0|8,0:0|0:0,0:0:0:0:
+211,233,19226,1,0,0:0:0:0:
+211,233,19337,2,0,L|201:299,1,50
+91,298,19560,6,0,L|28:291,1,50,8|0,0:0|0:0,0:0:0:0:
+166,184,19782,2,0,L|178:253,1,50
+220,356,20004,1,8,0:0:0:0:
+263,331,20115,1,0,0:0:0:0:
+312,322,20226,1,0,0:0:0:0:
+361,329,20337,2,0,L|394:368,1,50,0|8,0:0|0:0,0:0:0:0:
+457,201,20560,5,0,0:0:0:0:
+457,201,20671,1,0,0:0:0:0:
+457,201,20782,2,0,L|460:132,2,50,2|8|0,0:0|0:0|0:0,0:0:0:0:
+344,244,21115,2,0,L|335:178,1,59.9999981689454,2|2,0:0|0:0,0:0:0:0:
+214,70,21337,5,8,3:2:0:0:
+263,76,21449,1,0,3:0:0:0:
+313,82,21560,1,0,3:0:0:0:
+362,88,21671,2,0,L|263:113,1,100,0|0,3:0|3:0,0:0:0:0:
+164,64,22004,1,0,3:0:0:0:
+164,64,22115,2,0,L|92:55,1,50,0|8,3:0|0:0,0:0:0:0:
+21,221,22337,5,0,3:0:0:0:
+69,229,22449,1,0,3:0:0:0:
+114,208,22560,1,0,3:0:0:0:
+139,166,22671,1,10,3:2:0:0:
+145,226,22782,1,2,3:2:0:0:
+150,286,22893,2,0,P|210:292|268:248,1,119.999996337891,2|8,3:2|0:0,0:0:0:0:
+384,243,23226,5,0,0:0:0:0:
+384,243,23337,1,0,0:0:0:0:
+384,243,23449,2,0,L|389:193,2,50,0|8|0,0:0|0:0|0:0,0:0:0:0:
+334,331,23782,1,0,0:0:0:0:
+285,319,23893,1,0,0:0:0:0:
+236,325,24004,1,10,0:2:0:0:
+191,346,24115,1,2,0:0:0:0:
+155,381,24226,6,0,L|42:371,1,100,2|10,0:0|0:2,0:0:0:0:
+148,254,24560,1,2,0:0:0:0:
+148,254,24671,2,0,L|261:243,1,100,2|8,0:0|0:0,0:0:0:0:
+90,134,25115,6,0,L|98:196,1,50
+30,218,25337,2,0,B|45:131|45:131|42:126|42:126|46:123|46:123|57:64,1,150.000005722046,2|2,1:0|0:0,0:0:0:0:
+179,120,25671,6,0,P|234:119|291:93,1,100
+349,47,26004,1,0,0:0:0:0:
+349,47,26115,2,0,P|325:96|342:165,1,100
+411,158,26449,1,0,0:0:0:0:
+411,158,26560,2,0,P|435:109|418:40,1,100
+351,96,26893,1,0,0:0:0:0:
+384,255,27115,5,8,0:0:0:0:
+384,255,27226,1,0,0:0:0:0:
+384,255,27337,1,0,0:0:0:0:
+384,255,27449,2,0,L|447:250,2,50,0|8|0,0:0|0:0|0:0,0:0:0:0:
+228,173,27782,6,0,L|176:209,1,50,2|2,0:0|0:0,0:0:0:0:
+279,342,28004,1,8,0:0:0:0:
+279,342,28115,1,0,0:0:0:0:
+279,342,28226,2,0,L|280:281,1,50,2|2,0:0|0:0,0:0:0:0:
+357,136,28449,5,8,3:2:0:0:
+307,139,28560,1,0,3:0:0:0:
+257,142,28671,1,0,3:0:0:0:
+207,145,28782,2,0,L|151:150,2,50,0|8|0,3:0|0:0|3:0,0:0:0:0:
+257,142,29115,5,0,3:0:0:0:
+307,139,29226,2,0,L|409:161,1,100,0|0,3:0|3:0,0:0:0:0:
+445,188,29560,1,0,3:0:0:0:
+468,231,29671,1,0,3:0:0:0:
+464,280,29782,1,10,3:2:0:0:
+435,320,29893,1,2,3:2:0:0:
+389,339,30004,2,0,L|329:327,1,50,10|0,3:2|0:0,0:0:0:0:
+177,222,30226,6,0,L|146:193,1,25,8|0,0:0|3:0,3:0:0:0:
+145,248,30337,2,0,L|102:231,1,25,8|0,0:0|3:0,0:0:0:0:
+130,287,30449,2,0,L|90:290,1,25,8|0,0:0|3:0,0:0:0:0:
+134,328,30560,2,0,B|174:349|174:349|239:343,1,100,8|0,1:2|3:0,0:0:0:0:
+294,251,30893,6,0,L|290:192,1,50,0|0,1:0|3:0,0:0:0:0:
+226,74,31115,2,0,L|222:133,1,50,4|0,0:1|3:0,0:0:0:0:
+359,150,31337,1,4,0:1:0:0:
+359,150,31782,6,0,P|408:124|464:148,1,89.9999972534181,0|0,1:0|1:0,0:0:0:0:
+340,240,32004,6,0,L|288:36,1,179.999994506836,12|0,0:0|0:0,0:0:0:0:
+176,132,32449,2,0,P|87:100|7:180,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+139,383,32893,2,0,P|83:316|104:232,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+205,291,33337,6,0,L|449:323,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+506,223,33782,2,0,L|262:191,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+182,205,34226,6,0,P|261:157|336:244,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+76,191,34671,2,0,P|28:112|115:37,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+182,205,35115,6,2,L|155:305,1,89.9999972534181,10|0,0:0|0:0,0:1:0:0:
+257,361,35337,2,2,L|284:261,1,89.9999972534181,2|0,0:0|0:0,0:1:0:0:
+334,174,35560,6,0,P|339:277|458:283,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+447,191,36004,2,0,L|505:21,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+334,174,36449,6,0,P|269:112|169:165,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+133,25,36893,2,0,L|165:279,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+22,281,37337,6,0,P|91:338|207:265,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+306,240,37782,2,0,P|239:184|155:203,1,179.999994506836,8|0,0:0|0:0,0:0:0:0:
+0,92,38226,2,0,L|266:54,1,179.999994506836,8|8,0:0|0:0,0:0:0:0:
+363,43,38671,6,2,P|386:76|392:133,1,89.9999972534181,10|0,0:0|0:0,0:1:0:0:
+306,240,38893,2,2,P|283:207|277:150,1,89.9999972534181,10|0,0:0|0:0,0:1:0:0:
+421,293,39115,5,8,3:2:0:0:
+368,278,39226,1,0,3:0:0:0:
+313,273,39337,1,2,3:3:0:0:
+259,284,39449,1,0,0:0:0:0:
+214,316,39560,1,8,3:2:0:0:
+166,343,39671,1,0,3:0:0:0:
+112,332,39782,1,2,3:3:0:0:
+76,289,39893,1,0,0:0:0:0:
+68,234,40004,1,10,3:2:0:0:
+94,185,40115,1,0,3:0:0:0:
+136,149,40226,1,0,3:0:0:0:
+190,147,40337,1,2,3:0:0:0:
+241,167,40449,1,8,0:0:0:0:
+261,217,40560,1,0,3:0:0:0:
+240,267,40671,1,2,3:0:0:0:
+188,285,40782,1,0,0:0:0:0:
+135,268,40893,5,8,3:2:0:0:
+114,216,41004,1,0,3:0:0:0:
+137,166,41115,1,2,3:0:0:0:
+190,147,41226,1,0,0:0:0:0:
+241,167,41337,1,8,3:2:0:0:
+295,170,41449,1,0,3:0:0:0:
+348,157,41560,1,2,3:0:0:0:
+390,121,41671,1,0,0:0:0:0:
+394,66,41782,1,10,3:2:0:0:
+364,18,41893,1,0,3:0:0:0:
+316,0,42004,1,0,3:0:0:0:
+262,11,42115,1,2,3:0:0:0:
+214,26,42226,6,2,L|107:43,1,89.9999972534181,8|2,0:0|3:0,0:1:0:0:
+2,149,42449,2,2,L|109:166,1,89.9999972534181,4|0,3:2|0:0,0:1:0:0:
+336,200,42671,5,12,3:2:0:0:
+288,172,42782,1,0,3:0:0:0:
+232,173,42893,1,0,3:0:0:0:
+189,207,43004,1,0,0:0:0:0:
+160,255,43115,1,10,3:0:0:0:
+168,308,43226,1,0,3:0:0:0:
+196,355,43337,1,2,3:0:0:0:
+249,366,43449,1,0,0:0:0:0:
+295,337,43560,1,8,3:2:0:0:
+303,283,43671,1,0,3:0:0:0:
+277,233,43782,1,0,3:0:0:0:
+224,216,43893,1,2,3:0:0:0:
+172,228,44004,1,8,0:0:0:0:
+124,248,44115,1,0,0:0:0:0:
+72,232,44226,1,2,3:0:0:0:
+32,196,44337,1,0,3:0:0:0:
+28,144,44449,6,0,L|1:135,1,25,8|0,0:0|0:0,0:0:0:0:
+62,96,44560,2,0,L|45:73,1,25
+119,77,44671,2,0,L|119:49,1,25,8|0,0:0|0:0,0:0:0:0:
+175,96,44782,2,0,L|191:73,1,25
+210,144,44893,2,0,L|236:135,1,25,8|0,0:0|0:0,0:0:0:0:
+228,200,45004,2,0,L|201:209,1,25,8|0,0:0|0:0,0:0:0:0:
+262,248,45115,2,0,L|245:271,1,25,8|0,0:0|0:0,0:0:0:0:
+319,267,45226,2,0,L|319:295,1,25,8|0,0:0|0:0,0:0:0:0:
+375,248,45337,2,8,L|391:271,1,25
+410,200,45449,2,8,L|436:209,1,25
+410,141,45560,2,8,L|436:132,1,25
+375,93,45671,5,12,0:3:0:0:
+375,93,46004,2,0,L|317:86,1,50,0|12,1:0|0:2,0:0:0:0:
+317,167,46337,5,0,0:0:0:0:
+317,167,46449,2,0,L|160:184,1,150.000005722046,2|8,0:0|0:0,0:0:0:0:
+53,101,46782,1,0,0:0:0:0:
+108,98,46893,1,0,1:0:0:0:
+152,130,47004,1,0,0:0:0:0:
+167,183,47115,6,2,L|161:268,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+49,308,47337,1,0,1:0:0:0:
+49,308,47449,2,2,L|44:204,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+205,140,47671,1,0,0:0:0:0:
+205,140,47782,2,2,L|210:244,1,75.0000028610231,2|0,1:2|0:0,0:1:0:0:
+310,353,48004,5,8,0:0:0:0:
+346,347,48115,1,0,0:0:0:0:
+383,341,48226,2,0,P|440:289|426:219,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+317,167,48560,1,0,0:0:0:0:
+307,112,48671,1,0,1:0:0:0:
+333,64,48782,1,0,0:0:0:0:
+384,43,48893,6,2,L|468:54,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+506,161,49115,1,0,1:0:0:0:
+506,161,49226,2,2,L|422:150,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+268,121,49449,1,0,0:0:0:0:
+268,121,49560,2,2,L|352:110,1,75.0000028610231,2|0,1:2|0:0,0:1:0:0:
+263,263,49782,5,8,0:0:0:0:
+228,247,49893,1,0,0:0:0:0:
+193,232,50004,2,0,P|128:234|53:312,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+121,164,50337,1,0,0:0:0:0:
+120,109,50449,1,0,1:0:0:0:
+91,62,50560,1,0,0:0:0:0:
+42,37,50671,6,2,L|123:29,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+242,84,50893,1,0,1:0:0:0:
+242,84,51004,2,2,L|321:118,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+341,245,51226,1,0,0:0:0:0:
+341,245,51337,2,2,L|353:331,1,75.0000028610231,2|0,1:2|0:0,0:1:0:0:
+163,192,51560,5,8,0:0:0:0:
+198,181,51671,1,0,0:0:0:0:
+233,170,51782,2,0,P|303:163|372:219,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+458,297,52115,1,0,0:0:0:0:
+460,240,52226,1,0,1:0:0:0:
+463,184,52337,1,0,0:0:0:0:
+466,128,52449,6,0,B|452:65|452:65|416:155,1,150.000005722046,10|2,0:2|1:2,0:0:0:0:
+272,189,52782,2,0,L|197:180,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+338,25,53004,1,2,0:0:0:0:
+338,25,53115,2,0,L|345:109,1,75.0000028610231,10|0,1:2|0:0,0:1:0:0:
+179,225,53337,5,8,0:0:0:0:
+175,187,53449,1,0,0:0:0:0:
+172,149,53560,2,0,L|320:166,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+296,293,53893,1,0,0:0:0:0:
+259,334,54004,1,0,1:0:0:0:
+209,357,54115,1,0,0:0:0:0:
+154,358,54226,6,2,L|79:349,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+179,225,54449,1,0,1:0:0:0:
+179,225,54560,2,2,L|253:233,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+91,140,54782,1,0,0:0:0:0:
+91,140,54893,2,2,L|16:148,1,75.0000028610231,2|0,1:2|0:0,0:1:0:0:
+191,43,55115,5,8,0:0:0:0:
+195,80,55226,1,0,0:0:0:0:
+199,117,55337,2,0,B|179:225|179:225|156:170,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+289,165,55671,1,0,0:0:0:0:
+344,159,55782,1,0,1:0:0:0:
+399,154,55893,1,0,0:0:0:0:
+454,149,56004,6,2,L|461:235,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+359,281,56226,1,0,1:0:0:0:
+359,281,56337,2,2,L|365:366,1,75.0000028610231,2|8,0:2|0:0,0:1:0:0:
+262,132,56560,1,0,0:0:0:0:
+262,132,56671,2,2,L|268:217,1,75.0000028610231,2|0,1:2|0:0,0:1:0:0:
+148,358,56893,5,12,0:2:0:0:
+110,355,57004,1,0,0:0:0:0:
+79,333,57115,2,0,P|134:285|209:317,1,150.000005722046,2|8,1:2|0:0,0:0:0:0:
+329,327,57449,1,0,0:0:0:0:
+359,281,57560,1,0,1:0:0:0:
+364,226,57671,1,0,0:0:0:0:
+343,175,57782,6,2,L|246:184,1,75.0000028610231,10|0,0:2|0:0,0:1:0:0:
+342,20,58004,1,0,1:0:0:0:
+342,20,58115,2,2,L|387:85,1,75.0000028610231,2|8,0:0|0:0,0:1:0:0:
+210,97,58337,1,0,0:0:0:0:
+210,97,58449,2,2,L|243:24,1,75.0000028610231,10|0,1:2|0:0,0:1:0:0:
+343,175,58671,6,0,L|305:177,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+209,209,58893,2,0,L|255:224,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+316,267,59115,2,0,L|283:301,3,37.5000014305115,8|0|8|0,0:0|0:0|0:0|0:0,0:0:0:0:
+211,329,59337,2,0,L|194:274,3,37.5000014305115,8|0|8|0,0:0|0:0|0:0|0:0,0:0:0:0:
+103,287,59560,6,0,L|67:275,1,37.5000014305115,0|0,1:0|3:0,0:0:0:0:
+108,240,59671,2,0,L|72:228,1,37.5000014305115,0|0,1:0|3:0,0:0:0:0:
+113,193,59782,2,0,L|77:181,1,37.5000014305115,0|0,1:0|3:0,0:0:0:0:
+120,146,59893,1,12,0:3:0:0:
+120,146,60226,6,0,L|131:40,1,100,0|12,1:0|0:2,0:0:0:0:
+374,174,60893,5,8,0:0:0:0:
+326,323,61115,1,0,3:0:0:0:
+462,267,61337,2,0,L|518:267,1,50,8|0,0:0|0:0,0:0:0:0:
+344,182,61560,5,0,0:0:0:0:
+344,182,61671,2,0,L|297:213,1,50,0|8,3:0|0:0,0:0:0:0:
+174,241,61893,1,0,0:0:0:0:
+174,241,62004,2,0,L|221:272,1,50,0|0,3:0|0:0,0:0:0:0:
+66,161,62226,5,8,0:0:0:0:
+104,326,62449,1,0,3:0:0:0:
+269,288,62671,1,8,0:0:0:0:
+231,122,62893,2,0,L|215:50,1,50,0|0,3:0|0:0,0:0:0:0:
+296,0,63115,2,0,L|312:72,1,50,8|0,0:0|0:0,0:0:0:0:
+373,120,63337,5,0,0:0:0:0:
+373,120,63449,2,0,P|413:112|477:152,1,100,0|0,3:0|3:0,0:0:0:0:
+400,216,63782,2,0,L|288:232,1,100,0|8,0:0|0:0,0:0:0:0:
+48,160,64226,5,0,3:0:0:0:
+216,200,64449,1,8,0:0:0:0:
+104,288,64671,1,0,3:0:0:0:
+216,200,64893,1,8,0:0:0:0:
+160,64,65115,5,0,0:0:0:0:
+160,64,65226,2,0,L|160:136,1,50,0|8,3:0|0:0,0:0:0:0:
+264,104,65449,1,0,0:0:0:0:
+264,104,65560,2,0,L|264:168,1,50,0|0,3:0|0:0,0:0:0:0:
+456,160,65782,5,8,0:0:0:0:
+288,192,66004,1,0,3:0:0:0:
+336,48,66226,1,8,0:0:0:0:
+408,296,66449,1,0,3:0:0:0:
+196,148,66671,6,0,P|188:215|221:271,1,100,8|8,0:0|0:0,0:0:0:0:
+288,192,67004,6,0,L|368:216,1,50,0|8,3:0|0:0,0:0:0:0:
+297,308,67226,1,0,3:0:0:0:
+297,308,67337,2,0,L|217:332,1,50,12|0,0:0|0:0,0:0:0:0:
+107,256,67560,6,0,P|150:234|199:244,1,100,14|0,0:0|0:0,0:0:0:0:
+460,300,68004,5,8,0:0:0:0:
+407,107,68226,1,0,3:0:0:0:
+364,364,68449,1,8,0:0:0:0:
+345,18,68671,6,0,P|417:2|505:66,1,150.000005722046,2|8,0:0|0:0,0:0:0:0:
+167,18,69115,2,0,P|95:2|7:66,1,150.000005722046,2|8,0:0|0:0,0:0:0:0:
+407,107,69560,6,0,P|456:161|445:269,1,150.000005722046,2|8,0:0|0:0,0:0:0:0:
+158,202,70004,1,0,0:0:0:0:
+354,202,70226,1,8,0:0:0:0:
+105,107,70449,2,0,P|55:161|66:269,1,150.000005722046,2|8,0:0|0:0,0:0:0:0:
+364,281,70893,6,0,P|418:330|526:319,1,150.000005722046,0|8,0:0|0:0,0:0:0:0:
+424,64,71337,6,0,B|434:73|434:73|467:145|424:213|284:257|262:111|277:26|173:-19|99:9|48:91|87:209|211:192|211:192|334:175|373:294|323:376|248:404|162:332,1,1050.00004005432,2|8,3:2|0:0,0:0:0:0:
+161,331,73337,6,0,L|201:331,1,25,8|0,0:0|3:0,0:0:0:0:
+186,331,73449,2,2,L|233:331,1,25,0|0,3:0|3:0,0:0:0:0:
+211,331,73560,2,2,L|257:331,1,25,8|0,0:0|3:0,0:0:0:0:
+236,331,73671,2,2,L|273:331,1,25,0|0,3:0|3:0,0:0:0:0:
+297,339,73782,6,0,L|377:347,1,50,8|8,0:0|0:0,0:0:0:0:
+321,181,74004,2,0,L|313:269,1,50,8|8,0:0|3:2,0:0:0:0:
+184,116,74226,2,0,L|176:28,1,50,0|8,0:0|3:2,0:0:0:0:
+283,82,74449,6,0,P|332:75|377:94,1,100,8|12,0:0|0:0,0:0:0:0:
+150,188,75115,5,8,0:0:0:0:
+127,46,75337,1,0,0:0:0:0:
+157,218,75560,2,0,P|211:199|262:204,1,100,8|0,0:0|0:0,0:0:0:0:
+322,283,75893,2,0,B|370:288|370:288|436:262,1,100,0|0,3:0|3:0,0:0:0:0:
+439,170,76226,2,0,P|392:159|356:191,1,100,0|8,3:0|0:0,0:0:0:0:
+219,92,76671,5,0,3:0:0:0:
+371,22,76893,1,8,0:0:0:0:
+356,191,77115,1,0,3:0:0:0:
+194,73,77337,2,0,P|144:75|94:82,1,100,8|0,0:0|0:0,0:0:0:0:
+15,164,77671,2,0,P|63:173|98:210,1,100,0|0,3:0|3:0,0:0:0:0:
+26,302,78004,2,0,L|21:253,1,50
+181,348,78226,6,0,B|221:330|221:330|276:335,1,100,8|0,0:0|3:0,0:0:0:0:
+422,231,78671,1,8,0:0:0:0:
+435,376,78893,1,0,3:0:0:0:
+271,230,79115,2,0,L|281:123,1,100,8|0,0:0|0:0,0:0:0:0:
+367,56,79449,2,0,P|393:101|389:159,1,100,0|0,3:0|3:0,0:0:0:0:
+280,130,79782,2,0,L|226:137,1,50,0|0,3:0|0:0,0:0:0:0:
+104,280,80004,5,8,0:0:0:0:
+243,207,80226,1,0,3:0:0:0:
+104,134,80449,1,8,0:0:0:0:
+243,61,80671,1,0,3:0:0:0:
+384,189,80893,6,0,L|330:203,1,50,8|0,0:0|0:0,0:0:0:0:
+259,262,81115,2,0,L|211:250,1,50,8|0,0:0|0:0,0:0:0:0:
+83,157,81337,1,8,1:2:0:0:
+60,186,81449,1,0,3:0:0:0:
+48,221,81560,1,8,1:2:0:0:
+48,259,81671,1,0,3:0:0:0:
+61,294,81782,6,0,P|116:293|162:329,1,100,10|0,1:2|0:0,0:0:0:0:
+350,269,82226,1,8,0:0:0:0:
+226,187,82449,1,0,3:0:0:0:
+265,365,82671,1,8,0:0:0:0:
+444,207,82893,2,0,P|449:142|420:85,1,129.999994049073,2|8,0:0|0:0,0:0:0:0:
+211,48,83337,6,0,P|159:84|136:144,1,129.999994049073,2|8,0:0|0:0,0:0:0:0:
+270,337,83782,2,0,B|297:279|256:269|288:205,1,129.999994049073,2|8,0:0|0:0,0:0:0:0:
+427,124,84226,1,0,3:0:0:0:
+427,124,84337,1,0,3:0:0:0:
+427,124,84449,1,8,0:0:0:0:
+136,144,84671,2,0,B|183:228|275:200|275:200|303:273|208:263,1,259.999988098145,2|4,0:0|0:1,0:0:0:0:
+235,99,85337,5,12,0:2:0:0:
+278,92,85449,1,0,0:0:0:0:
+319,109,85560,1,2,0:0:0:0:
+174,43,85782,1,10,0:2:0:0:
+129,35,85893,1,0,1:0:0:0:
+86,47,86004,1,0,3:0:0:0:
+52,75,86115,1,0,1:0:0:0:
+32,115,86226,6,0,L|37:155,3,25,10|0|0|0,0:2|3:0|3:0|3:0,0:0:0:0:
+83,252,86449,2,0,L|87:212,3,25,0|0|2|0,1:0|3:0|3:2|3:0,0:0:0:0:
+174,189,86671,6,0,L|235:185,2,50,8|0|8,0:0|3:0|0:0,0:0:0:0:
+83,252,87004,1,0,0:0:0:0:
+83,252,87115,6,0,L|92:311,1,50,12|2,1:2|3:2,0:0:0:0:
+185,379,87337,2,0,L|205:328,1,50,10|0,1:2|3:0,0:0:0:0:
+310,279,87560,2,0,L|362:285,1,50,8|8,1:2|1:2,0:0:0:0:
+490,357,87782,2,0,L|493:386,2,25,8|0|8,1:2|3:0|1:2,0:0:0:0:
+456,208,88004,5,0,1:0:0:0:
+456,208,88060,1,0,3:0:0:0:
+456,208,88115,2,0,L|472:128,1,50,8|0,1:2|0:0,0:0:0:0:
+352,40,88337,2,0,L|368:88,1,50,8|2,1:2|0:0,0:0:0:0:
+256,136,88560,1,8,1:2:0:0:
+256,136,88671,2,0,L|240:80,1,50
+48,184,88893,6,0,P|120:168|216:224,1,170.000003242493,12|0,0:2|0:0,0:0:0:0:
+328,336,89226,1,0,0:0:0:0:
+424,328,89337,1,8,0:2:0:0:
+472,248,89449,1,0,0:0:0:0:
+488,160,89560,6,0,P|440:56|352:48,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+256,104,89893,1,0,0:0:0:0:
+168,128,90004,1,0,0:0:0:0:
+80,120,90115,1,0,0:0:0:0:
+0,88,90226,6,0,P|-8:136|8:216,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+96,336,90449,2,0,P|104:288|88:208,1,85.0000016212464
+173,43,90671,6,0,P|165:85|168:128,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+256,296,90893,2,0,P|264:248|248:168,1,85.0000016212464
+336,72,91115,6,0,L|560:56,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+432,120,91449,1,2,0:2:0:0:
+392,200,91560,1,8,0:2:0:0:
+432,288,91671,1,0,0:0:0:0:
+496,360,91782,5,2,0:2:0:0:
+256,296,92004,1,10,0:2:0:0:
+16,360,92226,2,0,P|64:272|48:184,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+120,40,92560,5,0,0:0:0:0:
+168,120,92671,1,0,0:0:0:0:
+248,168,92782,1,0,0:0:0:0:
+328,120,92893,6,0,P|414:120|477:240,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+472,360,93226,1,0,0:0:0:0:
+472,360,93337,2,0,P|396:319|396:183,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+328,120,93671,5,0,0:0:0:0:
+328,120,93782,2,0,L|312:8,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+93,147,94004,6,0,P|174:128|248:168,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+448,288,94337,1,0,0:0:0:0:
+360,264,94449,1,2,0:2:0:0:
+272,288,94560,1,0,0:0:0:0:
+216,360,94671,6,0,P|152:304|168:224,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+216,104,95004,5,2,0:2:0:0:
+216,104,95115,2,0,L|232:16,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+368,48,95337,2,0,P|408:32|472:48,1,85.0000016212464
+432,224,95560,2,0,P|416:184|432:120,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+320,280,95782,2,0,P|336:320|320:384,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+32,232,96004,6,0,P|112:192|224:240,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+320,280,96337,1,0,0:0:0:0:
+408,312,96449,1,8,0:2:0:0:
+496,280,96560,1,0,0:0:0:0:
+496,280,96671,6,0,L|456:112,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+384,56,97004,1,0,0:0:0:0:
+296,24,97115,2,0,P|240:16|160:64,1,85.0000016212464
+104,160,97337,2,0,P|160:168|240:120,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+456,192,97560,6,0,P|384:160|304:248,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+264,288,97893,1,0,0:0:0:0:
+176,264,98004,2,0,L|8:280,1,85.0000016212464
+16,88,98226,6,0,P|64:136|168:56,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+328,56,98560,1,2,0:2:0:0:
+416,32,98671,1,8,0:2:0:0:
+480,104,98782,1,0,0:0:0:0:
+456,192,98893,6,0,L|464:280,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+328,360,99115,2,0,L|320:272,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+208,112,99337,2,0,L|216:200,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+64,320,99560,5,8,0:2:0:0:
+136,264,99671,1,0,0:0:0:0:
+232,256,99782,1,0,0:0:0:0:
+320,280,99893,1,0,0:0:0:0:
+384,344,100004,6,0,P|408:288|416:248,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+360,72,100226,2,0,P|336:128|328:168,1,85.0000016212464
+240,312,100449,5,8,0:2:0:0:
+152,344,100560,1,0,0:0:0:0:
+64,320,100671,1,0,0:0:0:0:
+8,248,100782,1,0,0:0:0:0:
+16,152,100893,1,8,0:2:0:0:
+88,88,101004,1,0,0:0:0:0:
+184,80,101115,1,0,0:0:0:0:
+272,120,101226,1,0,0:0:0:0:
+356,176,101337,5,10,0:2:0:0:
+456,164,101449,1,0,0:0:0:0:
+392,88,101560,1,2,0:2:0:0:
+348,184,101671,5,0,0:0:0:0:
+448,172,101782,1,10,0:2:0:0:
+384,96,101893,1,0,0:0:0:0:
+340,192,102004,5,10,0:2:0:0:
+440,180,102115,1,0,0:0:0:0:
+376,104,102226,2,0,P|329:93|290:112,1,85.0000016212464,10|8,1:2|1:2,0:0:0:0:
+344,192,102449,2,0,P|380:226|423:229,1,85.0000016212464,0|8,0:0|0:0,0:0:0:0:
+169,239,102671,5,2,1:2:0:0:
+80,210,102782,1,0,1:0:0:0:
+80,117,102893,1,8,1:2:0:0:
+169,88,103004,1,8,1:2:0:0:
+224,164,103115,6,0,P|315:166|404:144,1,170.000003242493,12|0,1:2|0:0,0:0:0:0:
+456,317,103449,1,0,0:0:0:0:
+366,290,103560,1,8,1:2:0:0:
+324,206,103671,1,2,0:2:0:0:
+326,112,103782,2,0,L|344:10,2,85.0000016212464,0|0|10,0:0|0:0|0:2,0:0:0:0:
+314,203,104115,5,0,0:0:0:0:
+242,148,104226,2,0,L|184:87,1,85.0000016212464
+398,167,104449,2,0,L|479:122,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+365,276,104671,2,0,L|383:378,2,85.0000016212464,0|0|8,0:0|0:0|0:2,0:0:0:0:
+183,86,105004,5,0,0:0:0:0:
+99,88,105115,1,0,0:0:0:0:
+31,137,105226,1,0,0:0:0:0:
+3,216,105337,1,10,0:2:0:0:
+24,297,105449,1,0,0:0:0:0:
+87,352,105560,1,0,0:0:0:0:
+152,298,105671,1,2,0:2:0:0:
+233,273,105782,1,8,0:2:0:0:
+317,283,105893,1,0,0:0:0:0:
+391,324,106004,6,0,L|484:310,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+282,227,106226,2,0,L|189:212,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+46,357,106449,2,0,L|138:342,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+62,140,106671,1,8,0:2:0:0:
+62,140,106782,1,0,0:0:0:0:
+62,140,106893,1,0,0:0:0:0:
+62,140,107004,1,0,0:0:0:0:
+62,140,107115,6,0,L|245:116,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+418,227,107449,1,0,0:0:0:0:
+330,251,107560,1,8,1:2:0:0:
+251,206,107671,1,0,0:0:0:0:
+230,117,107782,1,0,0:0:0:0:
+277,35,107893,1,0,0:0:0:0:
+347,130,108004,2,0,L|247:147,1,85.0000016212464,8|0,1:2|0:0,0:0:0:0:
+46,62,108226,6,0,P|30:145|24:230,1,170.000003242493,2|8,0:2|1:2,0:0:0:0:
+215,312,108560,1,0,0:0:0:0:
+215,312,108671,2,0,P|191:272|152:252,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+62,140,108893,2,0,P|146:173|234:167,1,170.000003242493,10|0,1:2|0:0,0:0:0:0:
+371,114,109226,2,0,L|376:22,2,85.0000016212464,2|8|0,0:2|1:2|0:0,0:0:0:0:
+312,190,109560,5,0,0:0:0:0:
+389,239,109671,1,0,0:0:0:0:
+308,283,109782,1,8,1:2:0:0:
+386,333,109893,1,0,0:0:0:0:
+305,377,110004,2,0,P|267:367|226:331,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+77,199,110226,6,0,P|152:149|227:172,1,170.000003242493,8|0,1:2|0:0,0:0:0:0:
+417,221,110560,1,0,0:0:0:0:
+444,135,110671,1,8,1:2:0:0:
+389,64,110782,1,0,0:0:0:0:
+299,68,110893,2,0,P|210:71|156:9,1,170.000003242493,0|8,0:0|1:2,0:0:0:0:
+62,140,111226,1,0,0:0:0:0:
+62,140,111337,2,0,L|83:234,1,85.0000016212464
+262,296,111560,2,0,L|169:278,1,85.0000016212464,8|0,1:2|0:0,0:0:0:0:
+349,153,111782,6,0,L|340:68,2,85.0000016212464,0|0|8,0:0|0:0|1:2,0:0:0:0:
+236,329,112115,1,0,0:0:0:0:
+292,267,112226,1,0,0:0:0:0:
+375,253,112337,1,0,0:0:0:0:
+449,291,112449,1,10,1:2:0:0:
+378,336,112560,5,2,0:2:0:0:
+375,253,112671,1,0,0:0:0:0:
+372,170,112782,1,2,0:2:0:0:
+369,87,112893,1,8,1:2:0:0:
+442,125,113004,1,0,0:0:0:0:
+348,178,113115,6,0,L|252:169,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+80,269,113337,2,0,P|120:276|175:256,1,85.0000016212464,10|0,1:2|0:0,0:0:0:0:
+105,18,113560,2,0,P|86:55|87:103,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+260,255,113782,5,12,1:2:0:0:
+261,212,113893,1,0,0:0:0:0:
+262,170,114004,1,2,0:2:0:0:
+414,61,114226,5,8,1:2:0:0:
+340,101,114337,1,0,0:0:0:0:
+256,109,114449,1,2,0:2:0:0:
+176,81,114560,1,0,0:0:0:0:
+105,18,114671,1,8,1:2:0:0:
+84,118,114782,1,0,0:0:0:0:
+63,218,114893,6,2,P|105:233|154:235,1,85.0000016212464,2|0,0:2|0:0,0:2:0:0:
+369,328,115115,2,2,P|325:320|276:336,1,85.0000016212464,10|0,1:2|0:0,0:2:0:0:
+256,109,115337,2,2,B|301:123|301:123|376:112,1,100,2|0,0:2|0:0,0:1:0:0:
+488,273,115560,5,8,1:2:0:0:
+488,273,115671,1,8,0:0:0:0:
+488,273,115782,1,8,0:0:0:0:
+429,83,116004,1,8,1:2:0:0:
+429,83,116115,1,0,3:0:0:0:
+429,83,116226,6,0,L|431:47,2,32.4999985122681,8|0|0,3:2|3:0|3:0,3:0:0:0:
+381,198,116449,1,8,1:2:0:0:
+381,198,116560,5,0,1:1:0:0:
+187,140,116782,1,0,1:1:0:0:
+102,323,117004,1,0,1:1:0:0:
+58,34,117337,5,12,0:0:0:0:
+380,124,128004,6,0,P|400:120|440:124,1,50,12|0,0:0|0:0,0:0:0:0:
+396,256,128226,2,0,P|376:260|336:256,1,50,2|0,1:2|0:0,0:0:0:0:
+104,200,128449,6,0,L|116:260,1,50,8|0,0:0|0:0,0:0:0:0:
+172,104,128671,2,0,L|160:44,1,50,0|0,1:0|0:0,0:0:0:0:
+272,184,128893,5,10,0:2:0:0:
+280,208,129004,1,0,0:0:0:0:
+280,232,129115,1,0,1:0:0:0:
+272,256,129226,1,2,0:2:0:0:
+264,280,129337,6,0,L|328:308,1,50,8|0,0:0|0:0,0:0:0:0:
+464,260,129560,2,0,L|400:232,1,50,10|0,1:2|0:0,0:0:0:0:
+317,113,129782,6,0,L|339:84,1,25,8|0,0:0|0:0,0:0:0:0:
+286,96,129893,2,0,L|298:62,1,25
+252,92,130004,2,0,L|251:56,1,25,8|0,0:0|0:0,0:0:0:0:
+218,99,130115,2,0,L|205:65,1,25
+189,117,130226,2,0,L|164:90,1,25,8|0,0:0|0:0,0:0:0:0:
+167,145,130337,2,0,L|135:128,1,25,8|0,0:0|0:0,0:0:0:0:
+156,178,130449,2,0,L|121:173,1,25,8|0,0:0|0:0,0:0:0:0:
+158,212,130560,2,0,L|122:220,1,25,8|0,0:0|0:0,0:0:0:0:
+171,244,130671,2,0,L|140:264,1,25,0|0,1:0|3:0,0:0:0:0:
+194,270,130782,2,0,L|172:299,1,25,0|0,1:0|3:0,0:0:0:0:
+225,287,130893,2,0,L|213:321,1,25,0|0,1:0|3:0,0:0:0:0:
+259,291,131004,5,12,0:3:0:0:
+259,291,131337,6,0,P|312:272|376:300,1,100,0|12,1:0|0:0,0:0:0:0:
+456,68,132004,5,8,0:0:0:0:
+340,184,132226,1,0,3:0:0:0:
+284,20,132449,1,8,0:0:0:0:
+156,160,132671,5,0,0:0:0:0:
+156,160,132782,2,0,P|216:152|256:160,1,100,0|0,3:0|0:0,0:0:0:0:
+92,235,133115,2,0,L|20:251,1,50,0|0,3:0|0:0,0:0:0:0:
+281,303,133337,5,8,0:0:0:0:
+471,213,133560,1,0,3:0:0:0:
+281,303,133782,1,8,0:0:0:0:
+363,84,134004,1,0,3:0:0:0:
+241,162,134226,6,0,L|222:94,1,50,8|0,0:0|0:0,0:0:0:0:
+164,204,134449,1,0,0:0:0:0:
+164,204,134560,2,0,P|112:196|51:220,1,100,0|0,3:0|3:0,0:0:0:0:
+281,303,134893,2,0,P|333:311|394:287,1,100,0|8,0:0|0:0,0:0:0:0:
+500,184,135337,5,0,3:0:0:0:
+465,11,135560,1,8,0:0:0:0:
+294,44,135782,1,0,3:0:0:0:
+327,217,136004,1,8,0:0:0:0:
+408,112,136226,5,0,0:0:0:0:
+408,112,136337,1,0,3:0:0:0:
+364,316,136560,1,0,0:0:0:0:
+364,316,136671,1,0,3:0:0:0:
+168,292,136893,5,8,0:0:0:0:
+48,212,137115,1,0,3:0:0:0:
+188,16,137337,1,8,0:0:0:0:
+176,156,137560,1,0,3:0:0:0:
+344,292,137782,6,0,P|408:288|464:252,1,100,8|0,0:0|0:0,0:0:0:0:
+388,176,138115,2,0,P|408:124|400:68,1,100,0|0,3:0|3:0,0:0:0:0:
+168,192,138449,1,0,0:0:0:0:
+168,192,138560,1,0,0:0:0:0:
+168,192,138671,2,0,L|280:204,1,100,10|0,0:0|3:0,0:0:0:0:
+464,168,139115,5,8,0:0:0:0:
+344,292,139337,1,0,3:0:0:0:
+332,24,139560,1,8,0:0:0:0:
+288,368,139782,6,0,P|344:384|404:368,1,100,2|8,0:0|0:0,0:0:0:0:
+224,16,140226,2,0,P|168:0|108:16,1,100,2|8,0:0|0:0,0:0:0:0:
+80,224,140671,2,0,P|64:280|80:340,1,100,2|8,0:0|0:0,0:0:0:0:
+400,152,141115,5,0,0:0:0:0:
+300,268,141337,1,8,0:0:0:0:
+460,80,141560,2,0,P|404:56|336:88,1,100,2|8,0:0|0:0,0:0:0:0:
+332,224,142004,2,0,L|352:360,1,100,0|8,0:0|0:0,0:0:0:0:
+184,88,142449,6,0,L|178:38,1,50
+204,136,142671,1,8,0:0:0:0:
+212,184,142782,1,0,3:0:0:0:
+196,232,142893,1,0,3:0:0:0:
+152,256,143004,1,0,0:0:0:0:
+104,236,143115,1,8,0:0:0:0:
+56,252,143226,1,0,3:0:0:0:
+32,296,143337,1,0,3:0:0:0:
+52,340,143449,1,0,3:0:0:0:
+92,372,143560,1,8,0:0:0:0:
+140,352,143671,1,0,3:0:0:0:
+188,336,143782,1,8,0:0:0:0:
+236,348,143893,1,0,3:0:0:0:
+280,368,144004,5,8,0:0:0:0:
+448,260,144449,6,0,L|416:248,1,25,8|0,0:0|3:0,0:0:0:0:
+424,251,144560,2,0,L|392:240,1,25,0|0,3:0|3:0,0:0:0:0:
+400,243,144671,2,0,L|360:228,1,25,8|0,0:0|3:0,0:0:0:0:
+377,234,144782,2,0,L|348:224,1,25,0|0,3:0|3:0,0:0:0:0:
+316,200,144893,6,0,P|308:176|308:132,1,50,8|8,0:0|0:0,0:0:0:0:
+404,40,145115,2,0,P|412:64|412:108,1,50,8|8,0:0|3:2,0:0:0:0:
+252,264,145337,5,8,0:0:0:0:
+252,264,145449,1,8,3:2:0:0:
+252,264,145560,2,0,P|196:256|136:272,1,100,8|12,0:0|0:0,0:0:0:0:
+34,77,146226,5,8,0:0:0:0:
+54,230,146449,1,0,3:0:0:0:
+28,27,146671,2,0,L|36:105,1,50,8|0,0:0|0:0,0:0:0:0:
+54,230,146893,1,0,0:0:0:0:
+54,230,147004,2,0,L|62:152,1,50,0|8,3:0|0:0,0:0:0:0:
+234,135,147226,1,0,0:0:0:0:
+234,135,147337,2,0,L|347:149,1,100,0|8,3:0|0:0,0:0:0:0:
+156,190,147782,5,0,3:0:0:0:
+333,147,148004,1,8,0:0:0:0:
+133,120,148226,1,0,3:0:0:0:
+358,65,148449,2,0,L|261:89,1,100,8|0,0:0|0:0,0:0:0:0:
+333,147,148782,2,0,L|446:161,1,100,0|0,3:0|3:0,0:0:0:0:
+321,275,149115,2,0,L|302:214,1,50,0|0,1:0|0:0,0:0:0:0:
+462,165,149337,6,0,L|428:273,1,100,8|0,0:0|3:0,0:0:0:0:
+393,83,149782,1,8,0:0:0:0:
+431,260,150004,1,0,3:0:0:0:
+221,288,150226,2,0,L|331:273,1,100,8|0,0:0|0:0,0:0:0:0:
+190,296,150560,2,0,L|171:235,1,50,0|8,3:0|0:0,0:0:0:0:
+334,226,150782,1,0,0:0:0:0:
+334,226,150893,2,0,L|315:287,1,50,0|0,3:0|0:0,0:0:0:0:
+238,135,151115,6,0,L|257:196,1,50,8|0,0:0|0:0,0:0:0:0:
+190,296,151337,2,0,L|209:357,1,50,0|0,3:0|0:0,0:0:0:0:
+118,72,151560,2,0,L|137:133,1,50,8|0,0:0|0:0,0:0:0:0:
+24,221,151782,2,0,L|43:282,1,50,0|0,3:0|0:0,0:0:0:0:
+242,367,152004,5,8,0:0:0:0:
+276,362,152115,1,0,3:0:0:0:
+311,357,152226,1,8,0:0:0:0:
+346,353,152337,1,0,3:0:0:0:
+386,338,152449,5,8,1:2:0:0:
+337,327,152560,1,0,3:0:0:0:
+288,317,152671,1,8,1:2:0:0:
+239,306,152782,1,0,3:0:0:0:
+190,296,152893,1,10,1:2:0:0:
+190,296,153337,5,8,0:0:0:0:
+241,77,153560,1,0,3:0:0:0:
+200,262,153782,1,8,0:0:0:0:
+447,200,154004,2,0,L|336:181,1,100,2|8,0:0|0:0,0:0:0:0:
+97,119,154449,2,0,L|159:109,1,50,2|0,0:0|0:0,0:0:0:0:
+348,183,154671,5,10,0:2:0:0:
+151,210,154893,2,0,L|146:111,1,100,2|8,0:0|0:0,0:0:0:0:
+353,83,155337,1,0,3:0:0:0:
+350,132,155449,1,0,3:0:0:0:
+347,182,155560,1,8,0:0:0:0:
+31,78,155782,2,0,B|174:62|174:62|145:110,1,200,2|4,0:0|0:1,0:0:0:0:
+113,280,156449,6,0,L|111:229,1,50,12|0,0:2|0:0,0:0:0:0:
+145,110,156671,1,2,0:0:0:0:
+108,312,156893,2,0,L|42:303,1,50,10|0,0:2|1:0,0:0:0:0:
+211,208,157115,2,0,L|277:217,1,50,0|0,3:0|1:0,0:0:0:0:
+414,288,157337,6,0,L|387:290,3,25,10|0|0|0,0:2|3:0|3:0|3:0,0:0:0:0:
+290,340,157560,2,0,L|316:342,3,25,0|0|2|0,1:0|3:0|3:2|3:0,0:0:0:0:
+414,288,157782,6,0,L|421:221,1,50,8|0,0:0|3:0,0:0:0:0:
+315,130,158004,2,0,L|332:193,1,50,8|0,0:0|3:0,0:0:0:0:
+492,100,158226,2,0,L|426:91,1,50,12|2,1:2|3:2,0:0:0:0:
+214,158,158449,2,0,L|202:97,1,50,10|0,1:2|3:0,0:0:0:0:
+342,13,158671,1,8,1:2:0:0:
+342,13,158782,1,8,1:2:0:0:
+342,13,158893,2,0,L|339:46,2,25,8|0|8,1:2|3:0|1:2,0:0:0:0:
+332,156,159115,5,0,1:0:0:0:
+332,156,159171,1,0,3:0:0:0:
+332,156,159226,2,0,P|352:156|380:166,1,50,8|0,1:2|0:0,0:0:0:0:
+456,260,159449,2,0,P|456:280|446:308,1,50,8|2,1:2|0:0,0:0:0:0:
+340,368,159671,1,8,1:2:0:0:
+340,368,159782,2,0,P|320:368|292:358,1,50
+44,272,160004,6,0,P|152:268|212:196,1,170.000003242493,12|0,0:2|0:0,0:0:0:0:
+324,28,160337,1,0,0:0:0:0:
+264,100,160449,1,8,0:2:0:0:
+312,180,160560,1,0,0:0:0:0:
+404,164,160671,6,0,P|400:248|348:320,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+184,328,161004,1,0,0:0:0:0:
+96,352,161115,1,0,0:0:0:0:
+32,280,161226,1,0,0:0:0:0:
+56,192,161337,6,0,L|48:104,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+184,24,161560,6,0,P|228:76|344:32,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+476,176,161893,1,0,0:0:0:0:
+384,196,162004,1,0,0:0:0:0:
+356,280,162115,1,0,0:0:0:0:
+416,352,162226,6,0,L|240:360,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+64,312,162560,1,2,2:0:0:0:
+128,244,162671,1,8,0:2:0:0:
+152,156,162782,1,0,0:0:0:0:
+96,80,162893,6,0,P|120:40|168:12,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+361,18,163115,2,0,P|395:43|416:80,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+256,224,163337,2,0,L|256:124,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+356,280,163560,5,8,0:2:0:0:
+356,280,163671,1,0,0:0:0:0:
+356,280,163782,1,0,0:0:0:0:
+356,280,163893,1,0,0:0:0:0:
+356,280,164004,2,0,P|268:268|212:348,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+124,344,164337,1,0,0:0:0:0:
+92,256,164449,2,0,P|140:180|96:92,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+180,184,164782,5,0,0:0:0:0:
+180,184,164893,2,0,L|284:176,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+500,88,165115,6,0,P|418:70|345:110,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+320,236,165449,1,0,0:0:0:0:
+320,236,165560,2,0,L|332:336,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+432,156,165782,6,0,P|408:56|320:16,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+216,64,166115,5,2,0:2:0:0:
+216,64,166226,2,0,L|126:70,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+143,208,166449,2,0,P|122:246|132:311,1,85.0000016212464
+312,291,166671,2,0,P|273:270|208:280,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+379,185,166893,2,0,P|417:205|482:195,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+456,64,167115,6,0,P|344:44|284:84,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+112,148,167449,1,0,0:0:0:0:
+160,228,167560,1,8,0:2:0:0:
+248,256,167671,1,0,0:0:0:0:
+336,228,167782,6,0,P|432:216|480:272,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+392,308,168115,5,0,0:0:0:0:
+336,228,168226,2,0,L|332:124,1,85.0000016212464
+448,32,168449,2,0,L|452:136,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+392,308,168671,6,0,P|324:272|216:320,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+156,340,169004,1,0,0:0:0:0:
+88,272,169115,2,0,L|124:176,1,85.0000016212464
+88,56,169337,6,0,P|188:100|284:44,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+416,28,169671,1,2,0:2:0:0:
+360,104,169782,1,8,0:2:0:0:
+352,196,169893,1,0,0:0:0:0:
+396,280,170004,6,0,P|400:328|432:364,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+272,296,170226,2,0,P|268:248|236:212,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+68,288,170449,2,0,P|116:276|168:288,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+324,148,170671,6,0,P|256:168|244:56,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+0,244,171004,2,0,L|180:264,1,170.000003242493
+460,240,171337,6,0,P|464:280|456:356,1,85.0000016212464
+336,284,171560,2,0,P|332:244|340:168,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+388,40,171782,2,0,P|412:80|416:132,1,85.0000016212464
+204,80,172004,2,0,P|252:80|308:96,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+208,192,172226,2,0,P|160:192|104:176,1,85.0000016212464
+256,48,172449,6,0,P|312:56|352:68,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+400,192,172671,2,0,P|392:248|380:288,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+256,336,172893,2,0,P|200:328|160:316,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+112,192,173115,2,0,P|120:136|132:96,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+400,192,173337,6,0,P|392:248|380:288,1,85.0000016212464,10|8,0:2|0:2,0:0:0:0:
+256,48,173560,2,0,P|312:56|352:68,1,85.0000016212464,0|8,0:0|0:2,0:0:0:0:
+172,320,173782,1,2,0:2:0:0:
+117,245,173893,1,0,0:0:0:0:
+116,153,174004,1,8,0:2:0:0:
+169,78,174115,1,8,0:2:0:0:
+256,48,174226,6,0,P|334:91|329:184,1,170.000003242493,12|0,0:2|0:0,0:0:0:0:
+168,268,174560,1,0,0:0:0:0:
+238,207,174671,1,8,0:2:0:0:
+329,194,174782,1,0,0:0:0:0:
+413,232,174893,2,0,L|426:331,2,85.0000016212464,0|0|8,0:0|0:0|0:2,0:0:0:0:
+344,150,175226,1,0,0:0:0:0:
+344,150,175337,2,0,L|261:134,1,85.0000016212464
+478,62,175560,2,0,L|466:164,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+322,328,175782,6,0,P|253:282|149:306,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+50,366,176115,1,0,0:0:0:0:
+91,283,176226,1,0,0:0:0:0:
+81,191,176337,1,0,0:0:0:0:
+24,119,176449,2,0,P|93:165|197:141,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+327,79,176782,2,0,L|306:252,1,170.000003242493,2|0,0:2|0:0,0:0:0:0:
+125,323,177115,6,0,P|161:302|203:298,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+389,256,177337,2,0,P|347:259|297:243,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+180,72,177560,2,0,P|221:88|261:137,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+66,257,177782,1,8,0:2:0:0:
+64,235,177893,1,0,0:0:0:0:
+63,214,178004,1,0,0:0:0:0:
+62,193,178115,1,0,0:0:0:0:
+61,172,178226,6,0,P|131:162|136:254,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+4,96,178560,1,0,0:0:0:0:
+81,61,178671,1,8,0:2:0:0:
+164,73,178782,1,0,0:0:0:0:
+227,128,178893,1,0,0:0:0:0:
+251,209,179004,1,0,0:0:0:0:
+228,289,179115,2,0,P|213:252|218:200,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+401,62,179337,6,0,P|337:115|250:106,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+93,212,179671,1,0,0:0:0:0:
+93,212,179782,2,0,P|143:218|184:248,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+334,366,180004,2,0,P|339:312|345:185,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+311,33,180337,2,0,P|265:16|223:22,2,85.0000016212464,2|8|0,2:0|0:2|0:0,0:0:0:0:
+289,212,180671,5,0,0:0:0:0:
+196,198,180782,1,0,0:0:0:0:
+255,124,180893,1,8,0:2:0:0:
+301,221,181004,5,0,0:0:0:0:
+181,203,181115,1,8,0:2:0:0:
+257,108,181226,1,0,0:0:0:0:
+372,147,181337,6,0,P|407:214|372:301,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+163,238,181671,1,0,0:0:0:0:
+74,225,181782,1,8,0:2:0:0:
+18,294,181893,1,0,0:0:0:0:
+50,378,182004,2,0,P|161:346|236:375,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+355,315,182337,1,0,0:0:0:0:
+355,315,182449,2,0,P|346:273|355:211,1,85.0000016212464
+423,86,182671,2,0,P|432:128|423:190,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+214,113,182893,6,0,L|29:142,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+181,224,183226,1,0,0:0:0:0:
+264,237,183337,1,0,0:0:0:0:
+348,250,183449,1,0,0:0:0:0:
+431,262,183560,2,0,P|446:302|448:344,2,85.0000016212464,10|2|0,0:2|0:2|0:0,0:0:0:0:
+282,68,183893,2,0,P|211:119|219:199,1,170.000003242493,2|0,0:2|0:0,0:0:0:0:
+391,175,184226,6,0,L|307:161,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+132,298,184449,2,0,L|186:232,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+154,12,184671,2,0,L|183:91,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+395,82,184893,5,12,0:2:0:0:
+473,129,185004,1,0,0:0:0:0:
+391,175,185115,2,0,P|341:179|286:160,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+105,112,185337,5,8,0:2:0:0:
+26,158,185449,1,0,0:0:0:0:
+108,204,185560,2,0,P|157:207|212:188,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+314,35,185782,5,8,0:2:0:0:
+230,71,185893,1,0,0:0:0:0:
+188,153,186004,1,2,0:2:0:0:
+206,243,186115,1,0,0:0:0:0:
+277,300,186226,2,0,P|319:313|381:310,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+469,143,186449,2,2,P|423:143|383:163,1,85.0000016212464,2|0,0:2|0:0,0:1:0:0:
+180,96,186671,5,8,0:2:0:0:
+180,96,186782,1,8,0:0:0:0:
+180,96,186893,1,8,0:0:0:0:
+333,236,187115,2,0,L|346:127,1,85.0000016212464,8|0,0:2|3:0,0:0:0:0:
+404,53,187337,2,0,L|398:10,2,42.5000008106232,8|0|0,3:2|3:0|3:0,0:0:0:0:
+426,195,187560,1,8,0:2:0:0:
+426,195,187671,5,0,0:0:0:0:
+240,159,187893,1,0,0:0:0:0:
+350,339,188115,1,0,0:0:0:0:
+70,296,188449,5,12,0:0:0:0:
+432,192,195560,5,4,0:0:0:0:
+432,168,195671,1,0,3:0:0:0:
+424,144,195782,1,0,3:0:0:0:
+416,120,195893,1,0,3:0:0:0:
+400,96,196004,1,0,3:0:0:0:
+384,80,196115,1,0,3:0:0:0:
+368,64,196226,1,0,3:0:0:0:
+344,48,196337,1,0,3:0:0:0:
+320,40,196449,1,0,3:0:0:0:
+296,40,196560,1,0,3:0:0:0:
+272,40,196671,1,0,3:0:0:0:
+248,48,196782,1,0,3:0:0:0:
+224,64,196893,1,0,3:0:0:0:
+208,80,197004,1,0,3:0:0:0:
+192,104,197115,1,2,3:2:0:0:
+184,128,197226,1,0,3:0:0:0:
+176,152,197337,5,0,3:0:0:0:
+160,168,197449,1,0,3:0:0:0:
+136,184,197560,1,0,3:0:0:0:
+112,192,197671,1,0,3:0:0:0:
+96,208,197782,1,0,3:0:0:0:
+80,232,197893,1,2,3:2:0:0:
+80,256,198004,1,0,3:0:0:0:
+88,280,198115,1,0,3:0:0:0:
+112,296,198226,1,2,3:2:0:0:
+136,304,198337,1,0,3:0:0:0:
+160,304,198449,1,0,3:0:0:0:
+184,296,198560,1,2,3:2:0:0:
+200,280,198671,1,0,3:0:0:0:
+224,264,198782,1,0,3:0:0:0:
+248,256,198893,1,2,3:2:0:0:
+272,264,199004,1,2,3:2:0:0:
+296,280,199115,5,0,3:0:0:0:
+320,288,199226,1,0,3:0:0:0:
+344,288,199337,1,2,3:2:0:0:
+368,280,199449,1,0,3:0:0:0:
+392,264,199560,1,0,3:0:0:0:
+408,248,199671,1,0,3:0:0:0:
+424,224,199782,1,0,3:0:0:0:
+432,200,199893,1,0,3:0:0:0:
+432,176,200004,1,0,3:0:0:0:
+424,152,200115,1,0,3:0:0:0:
+416,128,200226,1,2,3:2:0:0:
+400,104,200337,1,0,3:0:0:0:
+384,88,200449,1,0,3:0:0:0:
+360,72,200560,1,0,3:0:0:0:
+336,64,200671,1,2,3:2:0:0:
+312,64,200782,1,0,3:0:0:0:
+288,72,200893,6,2,L|280:32,1,25,0|0,3:0|3:0,0:1:0:0:
+264,80,201004,2,2,L|256:40,1,25,0|0,3:0|3:0,0:1:0:0:
+240,88,201115,2,0,L|232:48,1,25,0|0,3:0|3:0,0:0:0:0:
+216,96,201226,2,0,L|208:56,1,25,0|0,3:0|3:0,0:0:0:0:
+192,104,201337,2,2,L|184:64,1,25,8|0,3:2|3:0,0:1:0:0:
+168,112,201449,2,0,L|160:72,1,25,0|0,3:0|3:0,0:0:0:0:
+144,120,201560,2,0,L|136:80,1,25,8|0,3:2|3:0,0:0:0:0:
+120,128,201671,2,2,L|115:103,1,25,0|0,3:0|3:0,0:1:0:0:
+96,136,201782,6,0,L|77:100,1,25,8|0,3:2|3:0,0:0:0:0:
+57,173,201893,2,0,L|23:151,1,25,8|0,3:2|3:0,0:0:0:0:
+41,224,202004,2,2,L|1:222,1,25,0|0,3:0|3:0,0:1:0:0:
+53,277,202115,2,0,L|17:295,1,25,8|0,3:2|3:0,0:0:0:0:
+90,316,202226,2,0,L|68:349,1,25,8|0,3:2|3:0,0:0:0:0:
+141,332,202337,2,2,L|139:371,1,25,0|0,3:0|3:0,0:1:0:0:
+194,320,202449,2,0,L|212:355,1,25,8|0,3:2|3:0,0:0:0:0:
+233,283,202560,2,0,L|266:304,1,25,8|0,3:2|3:0,0:0:0:0:
+249,231,202671,6,0,L|432:216,1,150.000005722046,12|0,0:0|0:0,0:0:0:0:
+496,104,203115,5,8,0:0:0:0:
+400,328,203337,1,0,0:0:0:0:
+400,328,203449,1,0,0:0:0:0:
+400,328,203560,2,0,P|352:296|336:256,1,100,10|0,0:0|0:0,0:0:0:0:
+296,104,203893,5,0,0:0:0:0:
+296,104,204004,2,0,L|352:112,1,50,8|0,0:0|0:0,0:0:0:0:
+160,168,204226,1,0,0:0:0:0:
+160,168,204337,1,0,0:0:0:0:
+160,168,204449,2,0,P|112:160|56:192,1,100,10|2,0:0|0:0,0:0:0:0:
+136,320,204893,5,8,0:0:0:0:
+304,224,205115,1,0,0:0:0:0:
+328,224,205226,1,0,0:0:0:0:
+352,224,205337,1,10,0:0:0:0:
+464,144,205560,5,0,0:0:0:0:
+464,144,205671,1,0,0:0:0:0:
+464,144,205782,2,2,P|480:112|480:96,1,50,8|0,0:0|0:0,0:1:0:0:
+400,320,206004,2,2,P|384:352|384:368,1,50,0|0,3:0|0:0,0:1:0:0:
+304,224,206226,6,0,P|248:200|184:224,1,100,10|2,0:0|0:0,0:0:0:0:
+24,296,206671,1,8,0:0:0:0:
+160,104,206893,1,0,0:0:0:0:
+248,304,207115,2,0,P|304:328|368:304,1,100,10|0,0:0|0:0,0:0:0:0:
+340,321,207782,6,0,L|316:193,1,100,2|8,0:0|0:0,0:0:0:0:
+376,72,208226,1,2,0:0:0:0:
+144,152,208449,1,8,0:0:0:0:
+256,336,208671,1,0,0:0:0:0:
+272,40,208893,5,10,0:0:0:0:
+112,304,209115,1,8,0:0:0:0:
+440,224,209337,6,2,P|480:224|512:232,1,50,8|0,0:0|3:0,0:1:0:0:
+440,320,209560,2,2,P|400:320|368:312,1,50,8|0,0:0|3:0,0:1:0:0:
+248,232,209782,5,8,3:2:0:0:
+216,216,209893,1,0,3:0:0:0:
+184,208,210004,1,2,3:0:0:0:
+152,208,210115,1,0,0:0:0:0:
+121,223,210226,6,2,L|109:132,1,50,8|0,3:2|3:0,0:1:0:0:
+53,84,210449,1,2,3:0:0:0:
+53,84,210560,2,0,P|108:67|180:81,1,100,0|0,0:0|3:0,0:0:0:0:
+339,150,210893,1,0,3:0:0:0:
+339,150,211004,1,2,3:0:0:0:
+339,150,211115,2,0,L|202:141,1,100,8|2,0:0|3:0,0:0:0:0:
+406,107,211449,5,0,3:0:0:0:
+406,107,211560,2,0,P|380:155|400:244,1,150,8|0,0:2|0:0,0:0:0:0:
+461,315,212004,6,0,L|533:308,1,50,8|0,3:2|3:0,0:0:0:0:
+308,351,212226,1,2,3:0:0:0:
+308,351,212337,2,0,P|255:332|177:351,1,100,0|0,0:0|3:0,0:0:0:0:
+64,352,212671,1,0,3:0:0:0:
+64,352,212782,1,2,3:0:0:0:
+64,352,212893,2,0,L|96:240,1,100,8|4,0:0|3:2,0:0:0:0:
+56,96,213226,5,0,0:0:0:0:
+56,96,213337,2,0,P|113:140|185:126,1,150,12|0,0:0|0:0,0:0:0:0:
+232,104,213782,1,8,0:0:0:0:
+280,80,213893,1,0,0:0:0:0:
+328,72,214004,1,0,0:0:0:0:
+376,80,214115,1,0,0:0:0:0:
+416,104,214226,1,10,0:0:0:0:
+448,144,214337,1,0,0:0:0:0:
+456,192,214449,1,2,0:0:0:0:
+448,240,214560,1,0,0:0:0:0:
+416,280,214671,1,8,0:0:0:0:
+376,304,214782,1,0,0:0:0:0:
+328,312,214893,1,10,0:0:0:0:
+280,304,215004,1,0,0:0:0:0:
+240,280,215115,6,0,L|192:280,1,25,8|0,3:2|3:0,0:0:0:0:
+215,280,215226,2,0,L|176:280,1,25,0|0,3:0|3:0,0:0:0:0:
+190,280,215337,2,0,L|160:280,1,25,2|0,3:2|3:0,0:0:0:0:
+165,280,215449,2,0,L|120:280,1,25,0|0,3:0|3:0,0:0:0:0:
+112,280,215560,5,8,0:0:0:0:
+32,224,215671,1,8,0:0:0:0:
+120,176,215782,2,0,L|120:128,2,25,8|8|8,0:0|0:0|0:0,0:0:0:0:
+240,64,216115,5,0,1:0:0:0:
+344,224,216337,1,0,1:0:0:0:
+448,32,216560,1,0,1:0:0:0:
+145,84,216893,5,12,0:0:0:0:
+198,332,217115,2,0,L|219:193,1,119.999996337891,2|8,0:0|0:0,0:0:0:0:
+308,165,217449,1,0,0:0:0:0:
+308,165,217560,1,0,0:0:0:0:
+81,244,217782,1,8,0:0:0:0:
+76,214,217893,1,0,0:0:0:0:
+72,184,218004,1,2,0:0:0:0:
+67,155,218115,1,0,0:0:0:0:
+63,125,218226,1,8,0:0:0:0:
+200,49,218449,6,0,P|267:85|382:74,1,179.999994506836,2|0,0:0|0:0,0:0:0:0:
+422,36,218893,2,0,P|355:108|357:200,1,179.999994506836,2|0,0:0|0:0,0:0:0:0:
+512,151,219337,2,0,L|452:142,1,59.9999981689454,2|0,0:0|0:0,0:0:0:0:
+318,194,219560,6,2,L|263:202,5,29.9999990844727,8|0|0|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0,0:1:0:0:
+424,218,219893,1,0,0:0:0:0:
+426,247,220004,1,8,0:0:0:0:
+429,276,220115,1,0,0:0:0:0:
+432,305,220226,6,0,B|377:333|377:333|325:317|325:317|272:340|201:317,1,239.999992675781,2|0,0:0|0:0,0:0:0:0:
+97,166,220893,1,8,0:0:0:0:
+269,215,221115,2,0,L|278:135,1,59.9999981689454,2|0,0:0|0:0,0:0:0:0:
+159,41,221337,1,8,3:2:0:0:
+163,78,221449,1,0,3:0:0:0:
+167,115,221560,1,0,3:0:0:0:
+171,152,221671,1,2,3:2:0:0:
+176,189,221782,2,0,L|167:270,1,59.9999981689454,8|0,0:0|0:0,0:0:0:0:
+24,352,222004,6,0,L|203:335,1,179.999994506836,2|0,0:0|0:0,0:0:0:0:
+346,297,222449,2,0,L|166:280,1,179.999994506836,2|0,0:0|3:0,0:0:0:0:
+68,237,222893,1,2,3:2:0:0:
+103,233,223004,1,0,3:0:0:0:
+139,230,223115,6,2,L|216:238,1,59.9999981689454,8|0,0:0|0:0,0:1:0:0:
+377,324,223337,2,2,L|419:260,1,59.9999981689454,8|0,0:0|0:0,0:1:0:0:
+278,145,223560,2,0,L|290:227,1,59.9999981689454,8|0,0:0|0:0,0:0:0:0:
+452,83,223782,2,0,L|375:91,1,59.9999981689454,8|0,0:0|0:0,0:0:0:0:
+186,134,224004,5,8,3:2:0:0:
+146,131,224115,1,0,3:0:0:0:
+109,116,224226,1,2,3:0:0:0:
+77,92,224337,1,0,0:0:0:0:
+15,29,224449,5,8,3:2:0:0:
+11,78,224560,1,0,3:0:0:0:
+8,128,224671,1,2,3:0:0:0:
+4,178,224782,1,0,0:0:0:0:
+89,198,224893,5,8,3:2:0:0:
+96,237,225004,1,0,3:0:0:0:
+103,276,225115,1,0,3:0:0:0:
+111,315,225226,1,2,3:0:0:0:
+206,281,225337,5,8,0:0:0:0:
+245,287,225449,1,0,3:0:0:0:
+285,293,225560,1,2,3:0:0:0:
+324,299,225671,1,0,0:0:0:0:
+408,249,225782,5,8,3:2:0:0:
+373,213,225893,1,0,3:0:0:0:
+326,200,226004,1,0,3:0:0:0:
+278,213,226115,1,0,3:0:0:0:
+206,281,226226,5,8,3:2:0:0:
+182,237,226337,1,0,3:0:0:0:
+182,188,226449,1,0,3:0:0:0:
+207,144,226560,1,0,0:0:0:0:
+306,164,226671,5,8,3:2:0:0:
+354,156,226782,1,0,3:0:0:0:
+392,124,226893,1,0,3:0:0:0:
+407,77,227004,1,2,3:0:0:0:
+301,55,227115,5,8,0:0:0:0:
+303,109,227226,1,2,3:0:0:0:
+306,164,227337,1,0,3:0:0:0:
+308,219,227449,1,0,0:0:0:0:
+360,304,227560,5,8,3:2:0:0:
+301,297,227671,1,0,3:2:0:0:
+246,321,227782,2,0,P|216:329|176:319,1,59.9999981689454,2|0,3:2|0:0,0:0:0:0:
+49,207,228004,2,0,L|56:281,1,59.9999981689454,8|0,3:2|1:0,0:0:0:0:
+208,185,228226,2,0,L|215:111,1,59.9999981689454,2|0,3:2|1:0,0:0:0:0:
+44,29,228449,5,10,3:2:0:0:
+40,58,228560,1,0,3:0:0:0:
+36,88,228671,1,0,3:0:0:0:
+32,117,228782,1,8,0:0:0:0:
+123,105,228893,1,8,3:2:0:0:
+212,92,229004,6,0,L|254:72,1,29.9999990844727,0|0,3:0|3:0,3:0:0:0:
+260,125,229115,2,0,L|300:123,1,29.9999990844727,10|0,3:2|3:0,3:0:0:0:
+282,180,229226,2,0,L|319:193,1,29.9999990844727,0|0,3:0|3:0,3:0:0:0:
+269,237,229337,5,8,3:2:0:0:
+219,237,229449,1,0,3:0:0:0:
+174,257,229560,1,2,3:2:0:0:
+142,295,229671,1,0,0:0:0:0:
+245,353,229782,5,8,3:2:0:0:
+293,340,229893,1,8,3:2:0:0:
+342,349,230004,2,0,L|377:334,1,29.9999990844727,2|0,3:2|3:0,0:0:0:0:
+383,376,230115,1,0,3:0:0:0:
+467,284,230226,5,0,1:0:0:0:
+464,234,230337,1,8,1:2:0:0:
+461,184,230449,1,0,0:0:0:0:
+458,134,230560,1,8,1:2:0:0:
+310,42,230671,5,0,3:0:0:0:
+300,90,230782,1,8,1:2:0:0:
+322,133,230893,1,0,3:0:0:0:
+367,154,231004,1,0,0:0:0:0:
+458,134,231115,6,0,L|465:242,1,89.9999972534181,12|0,0:0|0:0,0:0:0:0:
+369,307,231782,2,0,P|310:301|248:334,1,119.999996337891
+137,289,232449,1,0,0:0:0:0:
+137,289,232671,2,0,B|124:242|124:242|140:160,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+159,135,233337,2,0,P|221:159|296:148,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+375,81,234004,1,2,0:0:0:0:
+389,206,234226,1,2,0:0:0:0:
+273,155,234449,1,2,0:0:0:0:
+143,320,235115,6,0,P|80:311|26:342,2,119.999996337891
+253,363,236226,2,0,B|274:307|240:278|261:239,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+303,208,236893,2,0,L|164:197,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+76,264,237560,1,0,0:0:0:0:
+48,170,237782,1,2,0:0:0:0:
+99,88,238004,1,10,0:0:0:0:
+195,72,238226,6,0,P|245:87|301:87,1,89.9999972534181,4|0,0:0|0:0,0:0:0:0:
+430,40,238893,2,0,P|441:102|450:172,1,119.999996337891
+443,280,239560,1,0,0:0:0:0:
+340,214,239782,2,0,P|325:155|343:98,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+430,40,240449,2,0,P|384:47|286:27,1,119.999996337891,2|0,0:0|0:0,0:0:0:0:
+195,72,241115,1,0,0:0:0:0:
+181,191,241337,1,0,0:0:0:0:
+291,143,241560,1,2,0:0:0:0:
+195,72,241782,6,0,P|143:75|97:107,1,89.9999972534181,2|0,0:0|0:0,0:0:0:0:
+90,271,242449,2,0,P|196:312|291:241,1,239.999992675781,2|2,0:0|0:0,0:0:0:0:
+289,243,243449,2,0,P|328:264|373:264,1,89.9999972534181,2|0,0:0|3:0,0:0:0:0:
+465,186,244004,1,0,3:0:0:0:
+409,80,244226,5,0,3:0:0:0:
+379,82,244337,1,0,3:0:0:0:
+349,84,244449,1,10,0:0:0:0:
+321,87,244560,2,0,L|271:91,1,29.9999990844727,8|0,1:2|0:0,0:0:0:0:
+160,48,244782,5,8,1:2:0:0:
+152,72,244893,1,10,0:0:0:0:
+144,96,245004,1,8,0:0:0:0:
+136,120,245115,1,8,0:0:0:0:
+128,144,245226,1,8,0:0:0:0:
+72,184,245337,6,0,L|212:196,1,100,12|0,0:0|0:0,0:0:0:0:
+208,232,245671,2,0,P|256:241|299:217,1,100
+320,176,246004,2,0,L|312:76,1,100,0|8,0:0|0:0,0:0:0:0:
+200,136,246449,5,0,0:0:0:0:
+304,256,246671,1,8,0:0:0:0:
+400,120,246893,2,0,L|536:112,1,100,2|8,0:0|0:0,0:0:0:0:
+336,176,247337,5,0,0:0:0:0:
+336,176,247449,1,0,0:0:0:0:
+336,176,247560,2,0,P|288:152|216:184,1,100,10|0,0:0|0:0,0:0:0:0:
+244,160,248004,1,8,0:0:0:0:
+80,216,248226,5,2,0:0:0:0:
+280,256,248449,1,10,0:0:0:0:
+192,80,248671,2,0,L|192:200,1,100,2|8,0:0|0:0,0:0:0:0:
+280,256,249115,1,0,0:0:0:0:
+392,208,249337,6,0,P|408:256|368:328,1,100,8|0,0:0|0:0,0:0:0:0:
+280,256,249782,2,0,L|144:264,1,100,8|0,0:0|0:0,0:0:0:0:
+72,184,250226,1,8,0:0:0:0:
+120,80,250449,2,0,P|161:99|185:179,1,100,2|8,0:0|0:0,0:0:0:0:
+136,280,250893,5,0,0:0:0:0:
+136,280,251115,2,0,L|352:272,1,200,10|8,0:0|0:0,0:0:0:0:
+416,152,251782,5,0,0:0:0:0:
+488,80,252004,1,10,0:0:0:0:
+416,8,252226,1,2,0:0:0:0:
+344,80,252449,6,0,L|232:88,1,100,10|0,0:0|0:0,0:0:0:0:
+192,48,252782,2,0,P|200:72|200:168,1,100
+152,176,253115,2,0,L|288:192,1,100,0|8,0:0|0:0,0:0:0:0:
+448,176,253560,5,0,0:0:0:0:
+344,304,253782,1,8,0:0:0:0:
+272,152,254004,2,0,L|272:16,1,100,2|8,0:0|0:0,0:0:0:0:
+328,208,254449,5,0,0:0:0:0:
+328,208,254671,2,0,P|264:200|208:216,1,100,10|0,0:0|0:0,0:0:0:0:
+72,288,255115,1,8,0:0:0:0:
+136,168,255337,6,0,L|112:104,1,50,2|0,0:0|0:0,0:0:0:0:
+216,32,255560,2,0,L|232:88,1,50,10|0,0:0|0:0,0:0:0:0:
+328,160,255782,2,0,L|347:114,1,50,2|0,0:0|0:0,0:0:0:0:
+424,224,256004,6,0,L|451:233,1,25,10|0,2:2|2:0,2:0:0:0:
+390,272,256115,2,0,L|407:295,1,25,0|0,2:0|2:0,2:0:0:0:
+333,291,256226,2,0,L|333:319,1,25,2|0,2:2|2:0,2:0:0:0:
+277,272,256337,2,0,L|261:295,1,25,0|0,2:0|2:0,2:0:0:0:
+242,224,256449,2,0,L|216:233,1,25,10|0,2:2|2:0,2:0:0:0:
+224,168,256560,2,0,L|251:159,1,25,0|0,2:0|2:0,2:0:0:0:
+190,120,256671,2,0,L|207:97,1,25,2|0,2:2|2:0,2:0:0:0:
+133,101,256782,2,0,L|133:73,1,25,0|0,2:0|2:0,2:0:0:0:
+77,120,256893,2,8,L|61:97,1,25,8|0,2:2|2:0,2:0:0:0:
+42,168,257004,2,8,L|16:159,1,25,8|0,2:2|2:0,2:0:0:0:
+42,227,257115,2,0,L|15:236,1,25,4|0,2:2|2:0,2:0:0:0:
+76,275,257226,2,0,L|59:298,1,25,0|0,2:0|2:0,2:0:0:0:
+133,294,257337,2,0,L|133:322,1,25,8|0,2:2|2:0,2:0:0:0:
+189,275,257449,2,8,L|205:298,1,25,0|0,2:0|2:0,2:0:0:0:
+224,227,257560,2,8,L|250:236,1,25,12|0,2:2|2:0,2:0:0:0:
+224,168,257671,2,8,L|250:159,1,25,0|0,2:0|2:0,2:0:0:0:
+190,120,257782,5,8,0:0:0:0:
+133,101,257893,1,8,0:0:0:0:
+77,120,258004,1,8,0:0:0:0:
+224,227,258226,1,8,0:0:0:0:
+258,275,258337,1,8,0:0:0:0:
+315,294,258449,1,8,0:0:0:0:
+371,275,258560,1,8,0:0:0:0:
+406,227,258671,1,8,0:0:0:0:
+412,167,258782,1,8,0:0:0:0:
+391,110,258893,6,0,L|326:101,2,50,0|12|8,0:0|0:3|0:0,0:0:0:0:
+315,194,259226,1,0,1:0:0:0:
+315,194,259337,2,0,L|250:203,1,50,8|8,0:0|0:0,0:0:0:0:
+88,95,259560,6,0,P|158:52|237:76,1,170.000003242493,12|0,0:2|0:0,0:0:0:0:
+362,269,259893,1,0,0:0:0:0:
+272,288,260004,1,8,0:2:0:0:
+194,241,260115,1,0,0:0:0:0:
+171,153,260226,2,0,L|178:58,2,85.0000016212464,0|0|8,0:0|0:0|0:2,0:0:0:0:
+106,216,260560,1,0,0:0:0:0:
+24,177,260671,2,0,L|29:261,1,85.0000016212464
+165,349,260893,2,0,L|170:264,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+394,84,261115,6,0,P|343:147|251:128,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+394,84,261449,1,0,0:0:0:0:
+425,169,261560,1,0,0:0:0:0:
+388,252,261671,1,0,0:0:0:0:
+303,285,261782,2,0,P|268:267|206:267,2,85.0000016212464,10|2|0,0:2|0:2|0:0,0:0:0:0:
+454,347,262115,2,0,L|463:165,1,170.000003242493,2|0,0:2|0:0,0:0:0:0:
+297,56,262449,6,0,P|294:98|309:137,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+491,104,262671,2,0,P|443:101|409:118,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+223,263,262893,2,0,L|215:157,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+68,53,263115,1,8,0:2:0:0:
+89,55,263226,1,0,0:0:0:0:
+110,57,263337,1,0,0:0:0:0:
+131,60,263449,1,0,0:0:0:0:
+152,62,263560,6,0,P|237:73|284:142,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+87,182,263893,1,0,0:0:0:0:
+87,182,264004,2,0,P|39:237|58:348,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+269,306,264337,1,0,0:0:0:0:
+269,306,264449,2,0,L|186:290,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+283,137,264671,6,0,B|406:160|406:160|360:178,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+165,193,265004,1,0,0:0:0:0:
+165,193,265115,2,0,B|150:152|150:152|155:110,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+299,286,265337,2,0,P|339:271|391:274,2,85.0000016212464,10|2|0,0:2|0:2|0:0,0:0:0:0:
+428,374,265671,1,2,0:2:0:0:
+487,305,265782,1,8,0:2:0:0:
+476,215,265893,1,0,0:0:0:0:
+396,164,266004,6,0,L|274:178,1,85.0000016212464
+193,245,266226,2,0,L|108:235,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+210,73,266449,2,0,P|253:58|306:64,1,85.0000016212464
+438,263,266671,6,0,B|387:245|392:181|392:181|370:212|323:212,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+153,138,267004,1,0,0:0:0:0:
+66,161,267115,1,8,0:2:0:0:
+34,245,267226,1,0,0:0:0:0:
+84,319,267337,2,0,P|168:311|263:307,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+334,211,267671,1,0,0:0:0:0:
+334,211,267782,2,0,P|325:170|336:122,1,85.0000016212464
+458,77,268004,2,0,P|467:118|456:166,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+321,354,268226,6,0,P|253:306|164:315,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+34,201,268560,1,0,0:0:0:0:
+34,202,268671,2,0,L|129:194,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+263,87,268893,2,0,P|177:90|129:157,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+326,305,269226,1,2,0:2:0:0:
+334,211,269337,1,8,0:2:0:0:
+343,118,269449,1,0,0:0:0:0:
+352,25,269560,6,0,L|362:109,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+223,176,269782,2,0,L|212:260,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+446,266,270004,2,0,P|408:240|357:234,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+113,288,270226,6,0,P|65:224|76:127,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+165,55,270560,1,0,0:0:0:0:
+232,116,270671,1,8,0:2:0:0:
+323,130,270782,1,0,0:0:0:0:
+407,90,270893,2,0,P|426:124|432:182,1,85.0000016212464
+317,319,271115,5,8,0:2:0:0:
+317,225,271226,1,0,0:0:0:0:
+406,196,271337,1,0,0:0:0:0:
+460,272,271449,1,0,0:0:0:0:
+406,348,271560,1,8,0:2:0:0:
+317,319,271671,1,0,0:0:0:0:
+224,303,271782,2,0,P|178:303|138:324,1,85.0000016212464
+43,164,272004,5,10,0:2:0:0:
+127,124,272115,1,0,0:0:0:0:
+117,217,272226,1,2,0:2:0:0:
+43,164,272337,5,0,0:0:0:0:
+77,48,272449,1,10,0:2:0:0:
+157,138,272560,1,0,0:0:0:0:
+43,164,272671,2,2,P|39:120|56:80,1,85.0000016212464,2|0,0:2|0:0,0:1:0:0:
+279,26,272893,6,0,L|416:16,1,85.0000016212464,10|8,0:2|0:2,0:0:0:0:
+504,120,273115,2,0,L|367:130,1,85.0000016212464,0|8,0:0|0:2,0:0:0:0:
+176,120,273337,5,10,0:2:0:0:
+216,208,273449,1,8,0:2:0:0:
+184,296,273560,1,8,0:2:0:0:
+112,352,273671,1,8,0:2:0:0:
+16,344,273782,6,0,L|224:328,1,170.000003242493,12|0,0:2|0:0,0:0:0:0:
+464,288,274115,2,0,P|392:312|288:248,1,170.000003242493
+105,186,274449,5,0,0:0:0:0:
+143,95,274560,1,0,0:0:0:0:
+233,58,274671,1,8,0:2:0:0:
+324,95,274782,1,0,3:0:0:0:
+361,186,274893,1,0,0:0:0:0:
+324,276,275004,1,0,0:0:0:0:
+233,314,275115,6,0,L|128:320,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+0,216,275337,2,0,P|96:168|192:232,1,170.000003242493,0|8,0:0|0:2,0:0:0:0:
+324,276,275671,1,0,0:0:0:0:
+392,336,275782,2,0,P|413:299|414:257,1,85.0000016212464
+320,155,276004,6,0,P|272:217|324:276,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+424,368,276337,2,0,L|456:200,1,170.000003242493,2|0,0:2|0:0,0:0:0:0:
+360,24,276671,6,0,P|352:64|408:112,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+232,112,276893,2,0,P|192:104|144:160,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+200,296,277115,2,0,P|192:256|248:208,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+360,144,277337,5,8,0:2:0:0:
+360,144,277449,1,0,0:0:0:0:
+360,144,277560,1,0,0:0:0:0:
+360,144,277671,1,0,0:0:0:0:
+360,144,277782,2,0,L|336:328,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+256,352,278115,1,0,0:0:0:0:
+168,328,278226,2,0,P|241:264|351:328,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+184,352,278560,5,0,0:0:0:0:
+184,352,278671,2,0,L|80:360,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+307,274,278893,2,0,P|400:304|480:264,1,170.000003242493,2|8,0:2|0:2,0:0:0:0:
+504,136,279226,5,0,0:0:0:0:
+504,137,279337,2,0,L|415:124,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+232,64,279560,2,0,P|200:136|256:200,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+488,264,279893,5,2,0:2:0:0:
+400,232,280004,1,8,0:2:0:0:
+312,256,280115,1,0,0:0:0:0:
+248,320,280226,6,0,P|280:352|336:344,1,85.0000016212464
+120,280,280449,2,0,L|24:272,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+216,192,280671,2,0,P|264:184|312:200,1,85.0000016212464
+160,104,280893,6,0,P|64:136|8:80,1,170.000003242493,8|0,0:2|0:0,0:0:0:0:
+201,22,281226,2,0,L|217:214,1,170.000003242493
+376,336,281560,5,0,0:0:0:0:
+416,248,281671,1,0,0:0:0:0:
+320,264,281782,1,8,0:2:0:0:
+376,336,281893,1,0,0:0:0:0:
+416,248,282004,6,0,P|421:207|416:128,1,85.0000016212464
+312,56,282226,2,0,P|306:96|312:176,1,85.0000016212464,8|0,0:2|0:0,0:0:0:0:
+200,256,282449,5,0,0:0:0:0:
+185,163,282560,1,0,0:0:0:0:
+92,148,282671,1,8,0:2:0:0:
+51,231,282782,1,0,0:0:0:0:
+116,298,282893,6,0,L|232:304,1,85.0000016212464
+448,264,283115,2,0,P|368:232|248:304,1,170.000003242493,10|0,0:2|0:0,0:0:0:0:
+368,328,283449,2,0,L|392:96,1,170.000003242493,2|0,0:2|0:0,0:0:0:0:
+288,32,283782,6,0,L|304:160,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+185,163,284004,2,0,L|128:80,1,85.0000016212464,10|0,0:2|0:0,0:0:0:0:
+51,231,284226,2,0,L|160:264,1,85.0000016212464,2|0,0:2|0:0,0:0:0:0:
+360,336,284449,6,0,L|424:352,1,42.5000008106232,10|0,3:2|3:0,0:0:0:0:
+384,304,284560,2,0,L|440:320,1,42.5000008106232,0|4,3:0|3:2,0:0:0:0:
+408,272,284671,2,0,L|472:288,1,42.5000008106232,2|0,3:2|3:0,0:0:0:0:
+432,240,284782,2,0,L|496:256,1,42.5000008106232,0|0,3:0|3:0,0:0:0:0:
+376,160,284893,6,0,L|312:176,1,42.5000008106232,10|0,3:2|3:0,0:0:0:0:
+352,128,285004,2,0,L|296:144,1,42.5000008106232,0|0,3:0|3:0,0:0:0:0:
+328,96,285115,2,0,L|264:112,1,42.5000008106232,2|0,3:2|3:0,0:0:0:0:
+304,64,285226,2,0,L|240:80,1,42.5000008106232,0|0,3:0|3:0,0:0:0:0:
+160,64,285337,6,0,L|160:8,1,42.5000008106232,8|0,3:2|3:0,0:0:0:0:
+112,88,285449,2,0,L|72:48,1,42.5000008106232,0|0,3:0|3:0,0:0:0:0:
+84,136,285560,2,2,L|28:136,1,42.5000008106232,4|0,3:2|2:0,0:1:0:0:
+84,192,285671,2,0,L|44:231,1,42.5000008106232,0|0,2:0|2:0,2:0:0:0:
+176,292,285782,6,0,L|176:348,1,42.5000008106232,8|0,2:2|2:0,2:0:0:0:
+216,264,285893,2,0,L|255:303,1,42.5000008106232,0|0,2:0|2:0,2:0:0:0:
+240,224,286004,2,2,L|296:224,1,42.5000008106232,2|0,2:2|2:0,2:1:0:0:
+252,176,286115,2,0,L|291:136,1,42.5000008106232,0|0,2:0|2:0,2:0:0:0:
+164,104,286226,5,8,0:2:0:0:
+84,136,286337,1,8,2:0:0:0:
+52,216,286449,1,8,2:0:0:0:
+216,264,286671,1,8,0:0:0:0:
+248,184,286782,1,8,0:0:0:0:
+328,152,286893,2,0,L|328:104,2,42.5000008106232,8|0|0,3:2|3:0|3:0,0:0:0:0:
+400,184,287115,1,8,0:0:0:0:
+440,264,287226,5,0,0:0:0:0:
+440,280,287449,1,4,0:3:0:0:
+440,296,287671,1,0,0:0:0:0:
+160,176,288004,6,0,L|337:155,1,150.000005722046,4|2,0:0|0:0,0:0:0:0:
+335,290,288337,1,0,0:0:0:0:
+335,290,288449,2,0,L|260:281,1,75.0000028610231,8|0,3:2|3:0,0:0:0:0:
+136,148,288671,2,0,L|115:231,1,75.0000028610231,2|0,3:0|0:0,0:0:0:0:
+254,138,288893,5,10,0:0:0:0:
+223,70,289004,1,0,0:0:0:0:
+160,33,289115,1,0,3:0:0:0:
+86,39,289226,2,0,P|53:60|30:98,1,75.0000028610231,0|8,3:0|0:0,0:0:0:0:
+117,220,289449,1,0,0:0:0:0:
+117,220,289560,2,0,L|128:309,2,75.0000028610231,2|0|8,3:0|3:0|3:2,0:0:0:0:
+228,182,289893,5,0,3:0:0:0:
+268,192,290004,1,2,3:0:0:0:
+300,161,290115,1,0,0:0:0:0:
+341,171,290226,2,0,L|419:152,1,75.0000028610231,10|0,3:2|3:0,0:0:0:0:
+243,96,290449,2,0,L|321:77,1,75.0000028610231,2|0,3:2|0:0,0:0:0:0:
+140,30,290671,6,0,L|56:51,1,75.0000028610231,10|0,3:2|3:0,0:0:0:0:
+223,123,290893,1,0,3:0:0:0:
+223,123,291004,2,0,L|139:144,1,75.0000028610231,2|8,0:2|3:2,0:0:0:0:
+306,216,291226,1,0,3:0:0:0:
+233,234,291337,2,0,L|149:255,1,75.0000028610231,2|2,3:2|3:2,0:0:0:0:
+60,82,291560,5,8,0:2:0:0:
+114,95,291671,1,0,3:0:0:0:
+169,109,291782,1,2,3:0:0:0:
+223,123,291893,1,0,0:0:0:0:
+277,108,292004,2,0,P|311:94|348:92,1,75.0000028610231,8|0,0:2|0:0,0:0:0:0:
+479,209,292226,2,0,P|495:244|499:299,1,75.0000028610231,2|0,3:0|3:0,0:0:0:0:
+285,299,292449,6,0,L|279:377,1,75.0000028610231,10|0,3:2|3:0,0:0:0:0:
+407,190,292671,1,0,3:0:0:0:
+407,190,292782,2,0,L|413:268,1,75.0000028610231,2|8,0:2|3:2,0:0:0:0:
+253,128,293004,1,0,3:0:0:0:
+248,203,293115,2,0,B|246:234|246:234|273:164|352:157,1,150.000005722046,2|8,3:2|0:2,0:0:0:0:
+482,90,293449,5,0,0:0:0:0:
+487,164,293560,2,0,L|406:144,1,75.0000028610231,2|0,0:3|0:0,0:0:0:0:
+248,203,293782,1,8,3:2:0:0:
+196,180,293893,1,0,3:0:0:0:
+140,180,294004,1,0,3:0:0:0:
+89,202,294115,1,0,3:0:0:0:
+51,243,294226,6,0,B|12:200|46:133|46:133|43:157|54:173,1,150.000005722046,10|2,0:2|1:2,0:0:0:0:
+92,319,294560,2,0,P|129:312|166:310,1,75.0000028610231,4|8,0:3|0:0,0:0:0:0:
+317,351,294782,1,2,0:0:0:0:
+399,338,294893,2,0,P|434:311|453:285,1,75.0000028610231,2|0,1:2|0:0,0:0:0:0:
+281,104,295115,5,8,0:0:0:0:
+247,147,295226,1,0,3:0:0:0:
+248,203,295337,2,0,P|290:210|334:204,1,75.0000028610231,2|0,3:0|0:0,0:0:0:0:
+281,104,295560,6,0,P|199:131|256:202,1,200,2|2,1:0|0:0,0:0:0:0:
+301,78,295893,6,0,L|199:61,1,75.0000028610231,0|8,0:0|0:0,0:0:0:0:
+322,206,296115,1,0,3:0:0:0:
+378,203,296226,1,2,3:0:0:0:
+434,200,296337,1,0,3:0:0:0:
+490,197,296449,2,0,P|492:159|482:124,1,75.0000028610231,8|0,0:0|0:0,0:0:0:0:
+384,359,296671,2,0,P|418:345|446:320,1,75.0000028610231,2|0,3:0|3:0,0:0:0:0:
+295,164,296893,5,8,3:2:0:0:
+242,144,297004,1,0,3:2:0:0:
+187,149,297115,1,0,3:2:0:0:
+140,179,297226,1,0,0:0:0:0:
+112,227,297337,2,0,L|104:142,1,75.0000028610231,8|0,0:0|0:0,0:0:0:0:
+0,63,297560,2,0,P|34:76|71:80,1,75.0000028610231,2|0,3:0|3:0,0:0:0:0:
+259,18,297782,6,0,P|221:22|187:35,2,75.0000028610231,10|0|0,0:0|3:0|0:0,0:0:0:0:
+383,73,298115,2,0,P|404:103|418:138,2,75.0000028610231,2|8|0,0:0|3:2|0:0,0:0:0:0:
+242,144,298449,2,0,L|248:238,1,75.0000028610231,4|2,0:1|0:0,0:0:0:0:
+409,298,298671,6,0,P|336:294|258:343,1,150.000005722046,12|0,0:0|3:0,0:0:0:0:
+47,287,299115,1,10,0:0:0:0:
+11,243,299226,1,0,3:0:0:0:
+0,189,299337,1,2,3:0:0:0:
+13,135,299449,1,0,0:0:0:0:
+49,92,299560,6,0,B|80:80|80:80|136:91,1,75.0000028610231,10|0,0:0|3:0,0:0:0:0:
+244,186,299782,1,0,3:0:0:0:
+244,186,299893,2,0,B|213:198|213:198|172:189,1,75.0000028610231,2|8,0:0|0:0,0:0:0:0:
+363,223,300115,1,0,0:0:0:0:
+363,223,300226,2,0,L|357:126,1,75.0000028610231,10|0,1:2|0:0,0:0:0:0:
+449,56,300449,6,0,L|455:13,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+403,162,300671,2,0,L|406:208,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+340,71,300893,2,0,L|296:67,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+254,153,301115,2,0,L|210:157,3,37.5000014305115,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+120,88,301337,6,0,L|88:62,1,37.5000014305115,10|0,0:0|0:0,0:0:0:0:
+66,100,301449,2,0,L|21:88,1,37.5000014305115,8|0,0:0|0:0,0:0:0:0:
+30,141,301560,2,0,L|-10:146,1,37.5000014305115,10|0,0:0|0:0,0:0:0:0:
+23,196,301671,2,0,L|-21:218,1,37.5000014305115,10|0,0:0|0:0,0:0:0:0:
+50,245,301782,1,8,0:0:0:0:
+100,226,301893,1,10,0:0:0:0:
+146,250,302004,1,10,0:0:0:0:
+159,300,302115,1,8,0:0:0:0:
+136,344,302226,6,0,L|112:152,1,150.000005722046,12|0,0:0|0:0,0:0:0:0:
+192,80,302560,1,0,0:0:0:0:
+192,80,302671,2,0,P|248:136|208:232,1,150.000005722046,8|2,3:2|3:0,0:0:0:0:
+146,250,303004,5,0,0:0:0:0:
+72,304,303115,2,0,P|56:264|56:224,1,75.0000028610231,10|0,0:0|0:0,0:0:0:0:
+106,129,303337,6,0,P|158:179|146:250,1,150.000005722046,0|8,3:0|0:0,0:0:0:0:
+72,152,303671,1,0,0:0:0:0:
+72,152,303782,2,0,L|64:48,1,75.0000028610231,2|0,3:0|3:0,0:0:0:0:
+168,0,304004,1,8,3:2:0:0:
+168,0,304115,2,0,L|176:104,1,75.0000028610231,0|2,3:0|3:0,0:0:0:0:
+224,184,304337,5,0,0:0:0:0:
+159,247,304449,2,0,P|228:273|310:179,1,150.000005722046,10|2,3:2|3:2,0:0:0:0:
+428,142,304782,1,0,0:0:0:0:
+428,142,304893,2,0,L|336:147,1,75.0000028610231,10|0,3:2|3:0,0:0:0:0:
+263,73,305115,5,0,3:0:0:0:
+213,56,305226,1,4,0:3:0:0:
+161,64,305337,1,8,3:2:0:0:
+122,99,305449,1,0,3:0:0:0:
+104,148,305560,2,0,L|122:225,1,75.0000028610231,2|2,3:2|3:2,0:0:0:0:
+166,316,305782,6,0,B|96:318|90:334|90:334|65:342|12:324,1,150.000005722046,8|2,0:0|3:0,0:0:0:0:
+309,200,306115,1,0,0:0:0:0:
+309,200,306226,2,0,P|336:253|307:351,1,150.000005722046,8|2,0:0|3:0,0:0:0:0:
+243,278,306560,5,0,3:0:0:0:
+309,200,306671,2,0,L|391:196,1,75.0000028610231,10|0,3:2|3:0,0:0:0:0:
+500,99,306893,5,0,3:0:0:0:
+447,92,307004,1,2,0:2:0:0:
+397,75,307115,1,8,3:2:0:0:
+344,69,307226,1,0,3:0:0:0:
+296,47,307337,2,0,L|207:35,1,75.0000028610231,2|0,3:2|0:0,0:0:0:0:
+108,8,307560,6,0,B|110:50|110:50|124:100|124:100|105:170,1,150.000005722046,8|2,0:0|3:0,0:0:0:0:
+78,336,307893,1,0,0:0:0:0:
+78,336,308004,2,0,P|31:298|55:174,1,150.000005722046,8|0,3:2|3:0,0:0:0:0:
+194,174,308337,1,0,3:0:0:0:
+194,174,308449,2,0,L|186:258,1,75.0000028610231,10|0,0:2|0:0,0:0:0:0:
+288,113,308671,5,2,1:2:0:0:
+323,74,308782,1,2,0:0:0:0:
+373,59,308893,1,8,0:0:0:0:
+424,70,309004,1,2,0:0:0:0:
+476,67,309115,5,2,1:2:0:0:
+462,117,309226,1,0,0:0:0:0:
+448,167,309337,1,8,0:0:0:0:
+434,217,309449,1,0,3:0:0:0:
+460,262,309560,5,2,3:0:0:0:
+408,253,309671,1,0,0:0:0:0:
+359,274,309782,2,0,P|343:319|405:383,1,75.0000028610231,2|0,1:0|0:0,0:0:0:0:
+305,191,310004,1,2,0:0:0:0:
+305,191,310115,2,0,L|329:18,1,150.000005722046,0|0,0:0|3:0,0:0:0:0:
+216,296,310449,5,2,3:0:0:0:
+165,310,310560,1,0,3:0:0:0:
+118,290,310671,2,0,P|80:264|128:141,1,150.000005722046,8|2,0:0|3:0,0:0:0:0:
+230,113,311004,5,0,0:0:0:0:
+230,113,311115,2,0,L|-10:130,1,225.000008583069,8|0,3:2|0:0,0:0:0:0:
+95,62,311560,6,0,P|132:80|151:116,1,75.0000028610231,8|0,0:0|0:0,0:0:0:0:
+169,270,311782,1,2,3:0:0:0:
+169,270,311893,2,0,P|248:233|338:273,1,150.000005722046,0|0,3:0|3:0,0:0:0:0:
+405,327,312226,6,0,L|489:330,1,75.0000028610231,0|4,3:0|0:3,0:0:0:0:
+200,285,312449,2,0,P|129:302|52:269,1,150.000005722046,8|4,0:0|0:1,0:0:0:0:
+13,105,312782,5,0,0:0:0:0:
+95,62,312893,2,0,L|328:80,1,225.000008583069,12|2,0:0|0:0,0:0:0:0:
+488,272,313337,6,0,P|480:208|432:168,1,75.0000028610231,8|0,0:0|1:0,0:0:0:0:
+360,168,313560,2,0,P|368:232|416:272,1,75.0000028610231,0|0,3:2|1:0,0:0:0:0:
+464,312,313782,6,0,L|440:176,1,75.0000028610231,8|0,3:2|3:0,0:0:0:0:
+320,144,314004,2,0,L|344:280,1,75.0000028610231,2|0,3:0|3:0,0:0:0:0:
+288,352,314226,5,8,0:0:0:0:
+248,320,314337,1,0,0:0:0:0:
+208,304,314449,2,0,L|144:304,1,37.5000014305115,0|0,3:0|3:0,0:0:0:0:
+168,304,314560,2,0,L|112:312,1,37.5000014305115,0|0,3:0|3:0,0:0:0:0:
+112,320,314671,5,8,3:2:0:0:
+64,312,314782,1,0,3:0:0:0:
+32,272,314893,1,8,3:2:0:0:
+40,216,315004,1,0,0:0:0:0:
+72,176,315115,5,8,0:0:0:0:
+120,160,315226,1,0,0:0:0:0:
+168,144,315337,2,0,L|216:128,1,37.5000014305115,8|8,0:0|0:0,0:0:0:0:
+203,132,315449,2,0,L|264:112,1,37.5000014305115,8|8,0:0|0:0,0:0:0:0:
+264,136,315560,5,8,0:0:0:0:
+296,96,315671,1,8,0:0:0:0:
+288,48,315782,1,8,0:0:0:0:
+256,8,315893,5,8,0:0:0:0:
+256,352,316115,1,4,0:1:0:0:
+256,8,316337,1,8,0:0:0:0:
+219,91,316449,6,0,P|270:95|322:71,1,100,12|0,0:0|0:0,0:0:0:0:
+434,29,316893,1,8,0:0:0:0:
+437,66,317004,1,0,0:0:0:0:
+440,103,317115,1,0,0:0:0:0:
+371,215,317337,2,0,L|321:205,3,50,10|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+298,247,317782,2,0,L|248:256,3,50,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+216,221,318226,5,8,0:0:0:0:
+178,217,318337,1,0,0:0:0:0:
+143,229,318449,1,2,0:0:0:0:
+23,142,318671,1,8,0:0:0:0:
+161,78,318893,1,2,0:0:0:0:
+56,224,319115,1,10,0:0:0:0:
+36,255,319226,1,0,0:0:0:0:
+31,292,319337,1,0,0:0:0:0:
+40,328,319449,1,4,0:3:0:0:
+62,358,319560,2,0,L|124:345,1,50,8|0,0:0|0:0,0:0:0:0:
+249,272,319782,6,0,L|373:292,1,100,0|8,0:0|0:0,0:0:0:0:
+219,363,320226,1,2,0:0:0:0:
+260,226,320449,1,8,0:0:0:0:
+380,331,320671,1,2,0:0:0:0:
+462,168,320893,1,10,0:0:0:0:
+420,173,321004,1,0,0:0:0:0:
+379,178,321115,2,0,L|320:193,1,50,2|0,0:0|0:0,0:0:0:0:
+200,259,321337,2,0,L|259:274,1,50,10|0,0:0|0:0,0:0:0:0:
+380,331,321560,6,0,P|395:283|381:223,1,100,2|8,0:0|0:0,0:0:0:0:
+338,49,322004,1,0,0:0:0:0:
+330,190,322226,1,8,0:0:0:0:
+443,275,322449,1,0,0:0:0:0:
+426,118,322671,1,8,0:0:0:0:
+394,97,322782,1,0,0:0:0:0:
+360,83,322893,1,0,0:0:0:0:
+323,76,323004,1,4,0:3:0:0:
+285,78,323115,2,0,P|261:78|223:92,1,50,8|0,0:0|0:0,0:0:0:0:
+165,223,323337,2,0,P|181:204|196:166,1,50
+65,126,323560,5,8,3:2:0:0:
+43,156,323671,1,0,3:0:0:0:
+30,191,323782,1,2,3:0:0:0:
+27,229,323893,1,0,0:0:0:0:
+34,265,324004,1,8,3:2:0:0:
+69,278,324115,1,0,3:0:0:0:
+106,283,324226,1,2,3:0:0:0:
+144,280,324337,1,0,0:0:0:0:
+179,269,324449,5,8,0:0:0:0:
+205,294,324560,1,0,0:0:0:0:
+205,331,324671,1,0,3:0:0:0:
+179,356,324782,1,2,3:0:0:0:
+143,356,324893,1,10,0:0:0:0:
+120,319,325004,1,0,3:0:0:0:
+111,276,325115,1,2,3:0:0:0:
+118,233,325226,1,0,0:0:0:0:
+139,195,325337,5,8,3:2:0:0:
+168,203,325449,1,0,3:0:0:0:
+199,204,325560,1,2,3:0:0:0:
+230,196,325671,1,0,0:0:0:0:
+256,180,325782,1,8,3:2:0:0:
+282,164,325893,1,0,3:0:0:0:
+313,156,326004,1,2,3:0:0:0:
+344,157,326115,1,0,0:0:0:0:
+374,166,326226,5,10,3:2:0:0:
+334,137,326337,1,0,3:2:0:0:
+318,90,326449,1,0,3:2:0:0:
+331,43,326560,1,6,3:3:0:0:
+370,12,326671,1,8,0:0:0:0:
+419,9,326782,1,2,3:0:0:0:
+461,35,326893,1,0,3:0:0:0:
+480,80,327004,1,0,3:0:0:0:
+470,128,327115,5,12,0:0:0:0:
+448,166,327226,1,0,3:0:0:0:
+444,209,327337,1,0,3:0:0:0:
+458,250,327449,1,0,0:0:0:0:
+487,282,327560,1,10,3:0:0:0:
+475,241,327671,1,0,3:0:0:0:
+442,213,327782,1,2,3:0:0:0:
+400,208,327893,1,0,0:0:0:0:
+361,227,328004,5,8,3:2:0:0:
+336,258,328115,1,0,3:0:0:0:
+275,214,328226,1,0,3:0:0:0:
+261,246,328337,1,2,3:0:0:0:
+192,227,328449,1,8,0:0:0:0:
+186,256,328560,1,0,3:0:0:0:
+114,258,328671,1,2,3:0:0:0:
+113,282,328782,1,0,0:0:0:0:
+45,304,328893,6,0,L|17:322,3,25,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+25,203,329115,2,0,L|-7:207,3,25,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+69,115,329337,2,0,L|37:105,3,25,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+154,70,329560,2,0,L|129:47,3,25,8|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0:
+300,116,329782,6,0,L|336:103,1,25,8|0,3:2|3:0,0:0:0:0:
+282,168,329893,2,0,L|305:198,1,25,8|0,3:2|0:0,0:0:0:0:
+228,168,330004,2,0,L|206:199,1,25,8|0,3:2|3:2,0:0:0:0:
+211,115,330115,2,0,L|174:104,1,25,12|0,3:0|3:0,0:0:0:0:
+256,83,330226,5,8,0:0:0:0:
+256,133,330337,1,8,0:0:0:0:
+256,183,330449,1,8,0:0:0:0:
+256,233,330560,1,4,0:0:0:0:
diff --git a/osu.Game.Rulesets.Osu.Tests/StackingTest.cs b/osu.Game.Rulesets.Osu.Tests/StackingTest.cs
index e370807bca33..6daf5c59c6aa 100644
--- a/osu.Game.Rulesets.Osu.Tests/StackingTest.cs
+++ b/osu.Game.Rulesets.Osu.Tests/StackingTest.cs
@@ -4,8 +4,8 @@
using System;
using System.IO;
using System.Linq;
-using System.Text;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Beatmaps;
using osu.Game.IO;
using osu.Game.Rulesets.Mods;
@@ -19,23 +19,9 @@ namespace osu.Game.Rulesets.Osu.Tests
public class StackingTest
{
[Test]
- public void TestStacking()
+ public void TestStackingEdgeCaseOne()
{
- using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(beatmap_data)))
- using (var reader = new LineBufferedReader(stream))
- {
- var beatmap = Decoder.GetDecoder(reader).Decode(reader);
- var converted = new TestWorkingBeatmap(beatmap).GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty());
-
- var objects = converted.HitObjects.ToList();
-
- // The last hitobject triggers the stacking
- for (int i = 0; i < objects.Count - 1; i++)
- Assert.AreEqual(0, ((OsuHitObject)objects[i]).StackHeight);
- }
- }
-
- private const string beatmap_data = @"
+ using (var stream = new MemoryStream(@"
osu file format v14
[General]
@@ -62,6 +48,65 @@ osu file format v14
311,185,218471,2,0,L|325:209,1,25
311,185,218671,2,0,L|304:212,1,25
311,185,240271,5,0,0:0:0:0:
-";
+"u8.ToArray()))
+ using (var reader = new LineBufferedReader(stream))
+ {
+ var beatmap = Decoder.GetDecoder(reader).Decode(reader);
+ var converted = new TestWorkingBeatmap(beatmap).GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty());
+
+ var objects = converted.HitObjects.ToList();
+
+ // The last hitobject triggers the stacking
+ for (int i = 0; i < objects.Count - 1; i++)
+ ClassicAssert.AreEqual(0, ((OsuHitObject)objects[i]).StackHeight);
+ }
+ }
+
+ [Test]
+ public void TestStackingEdgeCaseTwo()
+ {
+ using (var stream = new MemoryStream(@"
+osu file format v14
+// extracted from https://osu.ppy.sh/beatmapsets/365006#osu/801165
+
+[General]
+StackLeniency: 0.2
+
+[Difficulty]
+HPDrainRate:6
+CircleSize:4
+OverallDifficulty:8
+ApproachRate:9.3
+SliderMultiplier:2
+SliderTickRate:1
+
+[TimingPoints]
+5338,444.444444444444,4,2,0,50,1,0
+82893,-76.9230769230769,4,2,8,50,0,0
+85115,-76.9230769230769,4,2,0,50,0,0
+85337,-100,4,2,8,60,0,0
+85893,-100,4,2,7,60,0,0
+86226,-100,4,2,8,60,0,0
+88893,-58.8235294117647,4,1,8,70,0,1
+
+[HitObjects]
+427,124,84226,1,0,3:0:0:0:
+427,124,84337,1,0,3:0:0:0:
+427,124,84449,1,8,0:0:0:0:
+"u8.ToArray()))
+ using (var reader = new LineBufferedReader(stream))
+ {
+ var beatmap = Decoder.GetDecoder(reader).Decode(reader);
+ var converted = new TestWorkingBeatmap(beatmap).GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty());
+
+ var objects = converted.HitObjects.ToList();
+
+ Assert.That(objects, Has.Count.EqualTo(3));
+
+ // The last hitobject triggers the stacking
+ for (int i = 0; i < objects.Count - 1; i++)
+ ClassicAssert.AreEqual(0, ((OsuHitObject)objects[i]).StackHeight);
+ }
+ }
}
}
diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneAutoGeneration.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneAutoGeneration.cs
new file mode 100644
index 000000000000..e2c66af19f85
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneAutoGeneration.cs
@@ -0,0 +1,63 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System.Linq;
+using NUnit.Framework;
+using osu.Framework.Testing;
+using osu.Game.Rulesets.Osu.Beatmaps;
+using osu.Game.Rulesets.Osu.Objects;
+using osu.Game.Rulesets.Osu.Replays;
+using osu.Game.Rulesets.Replays;
+using osu.Game.Tests.Visual;
+
+namespace osu.Game.Rulesets.Osu.Tests
+{
+ [TestFixture]
+ [HeadlessTest]
+ public partial class TestSceneAutoGeneration : OsuTestScene
+ {
+ [TestCase(-1, true)]
+ [TestCase(0, false)]
+ [TestCase(1, false)]
+ public void TestAlternating(double offset, bool shouldAlternate)
+ {
+ const double first_object_time = 1000;
+ double secondObjectTime = first_object_time + AutoGenerator.KEY_UP_DELAY + OsuAutoGenerator.MIN_FRAME_SEPARATION_FOR_ALTERNATING + offset;
+
+ var beatmap = new OsuBeatmap();
+ beatmap.HitObjects.Add(new HitCircle { StartTime = first_object_time });
+ beatmap.HitObjects.Add(new HitCircle { StartTime = secondObjectTime });
+
+ var generated = new OsuAutoGenerator(beatmap, []).Generate();
+ var frames = generated.Frames.OfType().ToList();
+
+ Assert.That(frames.Exists(f => f.Time == first_object_time && f.Actions.SingleOrDefault() == OsuAction.LeftButton));
+ Assert.That(frames.Exists(f => f.Time == first_object_time + AutoGenerator.KEY_UP_DELAY && !f.Actions.Any()));
+
+ Assert.That(frames.Exists(f => f.Time == secondObjectTime && f.Actions.SingleOrDefault() == (shouldAlternate ? OsuAction.RightButton : OsuAction.LeftButton)));
+ Assert.That(frames.Exists(f => f.Time == secondObjectTime + AutoGenerator.KEY_UP_DELAY && !f.Actions.Any()));
+ }
+
+ [TestCase(300)]
+ [TestCase(600)]
+ [TestCase(1200)]
+ public void TestAlternatingSpecificBPM(double bpm)
+ {
+ const double first_object_time = 1000;
+ double secondObjectTime = first_object_time + 60000 / bpm;
+
+ var beatmap = new OsuBeatmap();
+ beatmap.HitObjects.Add(new HitCircle { StartTime = first_object_time });
+ beatmap.HitObjects.Add(new HitCircle { StartTime = secondObjectTime });
+
+ var generated = new OsuAutoGenerator(beatmap, []).Generate();
+ var frames = generated.Frames.OfType().ToList();
+
+ Assert.That(frames.Exists(f => f.Time == first_object_time && f.Actions.SingleOrDefault() == OsuAction.LeftButton));
+ Assert.That(frames.Exists(f => f.Time == first_object_time + AutoGenerator.KEY_UP_DELAY && !f.Actions.Any()));
+
+ Assert.That(frames.Exists(f => f.Time == secondObjectTime && f.Actions.SingleOrDefault() == OsuAction.RightButton));
+ Assert.That(frames.Exists(f => f.Time == secondObjectTime + AutoGenerator.KEY_UP_DELAY && !f.Actions.Any()));
+ }
+ }
+}
diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneGameplayCursorSizeChange.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneGameplayCursorSizeChange.cs
new file mode 100644
index 000000000000..c94e575032bb
--- /dev/null
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneGameplayCursorSizeChange.cs
@@ -0,0 +1,52 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using NUnit.Framework;
+using osu.Framework.Allocation;
+using osu.Framework.Testing;
+using osu.Game.Configuration;
+using osu.Game.Skinning;
+using osu.Game.Tests.Visual;
+using osuTK.Input;
+
+namespace osu.Game.Rulesets.Osu.Tests
+{
+ public partial class TestSceneGameplayCursorSizeChange : PlayerTestScene
+ {
+ private const float initial_cursor_size = 1f;
+ protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
+
+ [Resolved]
+ private SkinManager? skins { get; set; }
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ if (skins != null) skins.CurrentSkinInfo.Value = skins.DefaultClassicSkin.SkinInfo;
+ }
+
+ [SetUpSteps]
+ public override void SetUpSteps()
+ {
+ base.SetUpSteps();
+
+ AddStep("Set gameplay cursor size: 1", () => LocalConfig.SetValue(OsuSetting.GameplayCursorSize, initial_cursor_size));
+ AddStep("resume player", () => Player.GameplayClockContainer.Start());
+ AddUntilStep("clock running", () => Player.GameplayClockContainer.IsRunning);
+ }
+
+ [Test]
+ public void TestPausedChangeCursorSize()
+ {
+ AddStep("move cursor to center", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.Centre));
+ AddStep("move cursor to top left", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.TopLeft));
+ AddStep("move cursor to center", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.Centre));
+ AddStep("move cursor to top right", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.TopRight));
+ AddStep("press escape", () => InputManager.Key(Key.Escape));
+
+ AddSliderStep("cursor size", 0.1f, 2f, 1f, v => LocalConfig.SetValue(OsuSetting.GameplayCursorSize, v));
+ }
+
+ protected override TestPlayer CreatePlayer(Ruleset ruleset) => new TestPlayer(true, false);
+ }
+}
diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneShaking.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneShaking.cs
index 059951789987..51544b0c3822 100644
--- a/osu.Game.Rulesets.Osu.Tests/TestSceneShaking.cs
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneShaking.cs
@@ -33,7 +33,7 @@ protected override TestDrawableHitCircle CreateDrawableHitCircle(HitCircle circl
Debug.Assert(drawableHitObject.HitObject.HitWindows != null);
double delay = drawableHitObject.HitObject.StartTime - (drawableHitObject.HitObject.HitWindows.WindowFor(HitResult.Miss) + RNG.Next(0, 300)) - Time.Current;
- scheduledTasks.Add(Scheduler.AddDelayed(() => drawableHitObject.TriggerJudgement(), delay));
+ scheduledTasks.Add(Scheduler.AddDelayed(drawableHitObject.TriggerJudgement, delay));
return drawableHitObject;
}
diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneSmoke.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneSmoke.cs
index d5d3cbb146be..0e7d94cb9f3d 100644
--- a/osu.Game.Rulesets.Osu.Tests/TestSceneSmoke.cs
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneSmoke.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using NUnit.Framework;
using osu.Framework.Graphics;
using osu.Framework.Input.Events;
@@ -10,6 +11,7 @@
using osu.Framework.Logging;
using osu.Framework.Testing.Input;
using osu.Game.Rulesets.Osu.UI;
+using osu.Game.Skinning;
using osuTK;
namespace osu.Game.Rulesets.Osu.Tests
@@ -58,7 +60,7 @@ private void addStep(string stepName, double duration)
foreach (var smokeContainer in smokeContainers)
{
- if (smokeContainer.Children.Count != 0)
+ if (smokeContainer.Children.OfType().Any())
return false;
}
diff --git a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
index 6510568555bd..15dca424f32d 100644
--- a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
+++ b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj
@@ -1,10 +1,10 @@
-
-
-
-
+
+
+
+
WinExe
diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs
index e49d72ef33c8..0566b7f3341d 100644
--- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs
+++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs
@@ -91,7 +91,7 @@ private static void applyStacking(IBeatmap beatmap, List hitObject
continue;
double endTime = stackBaseObject.GetEndTime();
- double stackThreshold = objectN.TimePreempt * beatmap.StackLeniency;
+ float stackThreshold = calculateStackThreshold(beatmap, objectN);
if (objectN.StartTime - endTime > stackThreshold)
// We are no longer within stacking range of the next object.
@@ -136,7 +136,7 @@ private static void applyStacking(IBeatmap beatmap, List hitObject
OsuHitObject objectI = hitObjects[i];
if (objectI.StackHeight != 0 || objectI is Spinner) continue;
- double stackThreshold = objectI.TimePreempt * beatmap.StackLeniency;
+ float stackThreshold = calculateStackThreshold(beatmap, objectI);
/* If this object is a hitcircle, then we enter this "special" case.
* It either ends with a stack of hitcircles only, or a stack of hitcircles that are underneath a slider.
@@ -151,7 +151,10 @@ private static void applyStacking(IBeatmap beatmap, List hitObject
double endTime = objectN.GetEndTime();
- if (objectI.StartTime - endTime > stackThreshold)
+ // truncation to integer is required to match stable
+ // compare https://github.com/peppy/osu-stable-reference/blob/08e3dafd525934cf48880b08e91c24ce4ad8b761/osu!/GameplayElements/HitObjectManager.cs#L1725
+ // - both quantities being subtracted there are integers
+ if ((int)objectI.StartTime - (int)endTime > stackThreshold)
// We are no longer within stacking range of the previous object.
break;
@@ -232,7 +235,7 @@ private static void applyStackingOld(IBeatmap beatmap, List hitObj
for (int j = i + 1; j < hitObjects.Count; j++)
{
- double stackThreshold = hitObjects[i].TimePreempt * beatmap.StackLeniency;
+ float stackThreshold = calculateStackThreshold(beatmap, hitObjects[i]);
if (hitObjects[j].StartTime - stackThreshold > startTime)
break;
@@ -264,5 +267,17 @@ private static void applyStackingOld(IBeatmap beatmap, List hitObj
}
}
}
+
+ ///
+ /// Truncation of to , as well as keeping the result as , are both done
+ ///
+ /// for the purposes of stable compatibility
+ /// .
+ /// Note that for top-level objects is supposed to be integral anyway;
+ /// see using when calculating it.
+ /// Slider ticks and end circles are the exception to that, but they do not matter for stacking.
+ ///
+ private static float calculateStackThreshold(IBeatmap beatmap, OsuHitObject hitObject)
+ => (int)hitObject.TimePreempt * beatmap.StackLeniency;
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/AgilityEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/AgilityEvaluator.cs
new file mode 100644
index 000000000000..8e3c9d01bc98
--- /dev/null
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/AgilityEvaluator.cs
@@ -0,0 +1,42 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Objects;
+
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators.Aim
+{
+ public static class AgilityEvaluator
+ {
+ private const double distance_cap = OsuDifficultyHitObject.NORMALISED_DIAMETER * 1.2; // 1.25 circles distance between centers
+
+ ///
+ /// Evaluates the difficulty of fast aiming
+ ///
+ public static double EvaluateDifficultyOf(DifficultyHitObject current)
+ {
+ if (current.BaseObject is Spinner)
+ return 0;
+
+ var osuCurrObj = (OsuDifficultyHitObject)current;
+ var osuPrevObj = current.Index > 0 ? (OsuDifficultyHitObject)current.Previous(0) : null;
+
+ double travelDistance = osuPrevObj?.LazyTravelDistance ?? 0;
+ double distance = travelDistance + osuCurrObj.LazyJumpDistance;
+
+ double distanceScaled = Math.Min(distance, distance_cap) / distance_cap;
+
+ double strain = distanceScaled * 1000 / osuCurrObj.AdjustedDeltaTime;
+
+ strain *= Math.Pow(osuCurrObj.SmallCircleBonus, 1.5);
+
+ strain *= highBpmBonus(osuCurrObj.AdjustedDeltaTime);
+
+ return strain;
+ }
+
+ private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.2, ms / 1000));
+ }
+}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/FlowAimEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/FlowAimEvaluator.cs
new file mode 100644
index 000000000000..30f45a3226a5
--- /dev/null
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/FlowAimEvaluator.cs
@@ -0,0 +1,127 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Objects;
+using osuTK;
+
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators.Aim
+{
+ public static class FlowAimEvaluator
+ {
+ private const double velocity_change_multiplier = 0.52;
+
+ ///
+ /// Evaluates difficulty of "flow aim" - aiming pattern where player doesn't stop their cursor on every object and instead "flows" through them.
+ ///
+ public static double EvaluateDifficultyOf(DifficultyHitObject current, bool withSliderTravelDistance)
+ {
+ if (current.BaseObject is Spinner || current.Index <= 1 || current.Previous(0).BaseObject is Spinner)
+ return 0;
+
+ var osuCurrObj = (OsuDifficultyHitObject)current;
+ var osuLastObj = (OsuDifficultyHitObject)current.Previous(0);
+ var osuLastLastObj = (OsuDifficultyHitObject)current.Previous(1);
+
+ double currDistance = withSliderTravelDistance ? osuCurrObj.LazyJumpDistance : osuCurrObj.JumpDistance;
+ double prevDistance = withSliderTravelDistance ? osuLastObj.LazyJumpDistance : osuLastObj.JumpDistance;
+
+ double currVelocity = currDistance / osuCurrObj.AdjustedDeltaTime;
+
+ if (osuLastObj.BaseObject is Slider && withSliderTravelDistance)
+ {
+ // If the last object is a slider, then we extend the travel velocity through the slider into the current object.
+ double sliderDistance = osuLastObj.LazyTravelDistance + osuCurrObj.LazyJumpDistance;
+ currVelocity = Math.Max(currVelocity, sliderDistance / osuCurrObj.AdjustedDeltaTime);
+ }
+
+ double prevVelocity = prevDistance / osuLastObj.AdjustedDeltaTime;
+
+ double flowDifficulty = currVelocity;
+
+ // Apply high circle size bonus to the base velocity.
+ // We use reduced CS bonus here because the bonus was made for an evaluator with a different d/t scaling
+ flowDifficulty *= Math.Sqrt(osuCurrObj.SmallCircleBonus);
+
+ // Rhythm changes are harder to flow
+ flowDifficulty *= 1 + Math.Min(0.25,
+ Math.Pow((Math.Max(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime) - Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime)) / 50, 4));
+
+ if (osuCurrObj.Angle != null && osuLastObj.Angle != null)
+ {
+ double angleDifference = Math.Abs(osuCurrObj.Angle.Value - osuLastObj.Angle.Value);
+ double angleDifferenceAdjusted = Math.Sin(angleDifference / 2) * 180.0;
+ double angularVelocity = angleDifferenceAdjusted / (osuCurrObj.AdjustedDeltaTime * 0.1);
+
+ // Low angular velocity flow (angles are consistent) is easier to follow than erratic flow
+ flowDifficulty *= 0.8 + Math.Sqrt(angularVelocity / 270.0);
+ }
+
+ // If all three notes are overlapping - don't reward bonuses as you don't have to do additional movement
+ double overlappedNotesWeight = 1;
+
+ if (current.Index > 2)
+ {
+ double o1 = calculateOverlapFactor(osuCurrObj, osuLastObj);
+ double o2 = calculateOverlapFactor(osuCurrObj, osuLastLastObj);
+ double o3 = calculateOverlapFactor(osuLastObj, osuLastLastObj);
+
+ overlappedNotesWeight = 1 - o1 * o2 * o3;
+ }
+
+ if (osuCurrObj.Angle != null)
+ {
+ // Acute angles are also hard to flow
+ // We square root velocity to make acute angle switches in streams aren't having difficulty higher than snap
+ flowDifficulty += Math.Sqrt(currVelocity) *
+ SnapAimEvaluator.CalcAngleAcuteness(osuCurrObj.Angle.Value) *
+ overlappedNotesWeight;
+ }
+
+ if (Math.Max(prevVelocity, currVelocity) != 0)
+ {
+ if (withSliderTravelDistance)
+ {
+ currVelocity = currDistance / osuCurrObj.AdjustedDeltaTime;
+ }
+
+ // Scale with ratio of difference compared to 0.5 * max dist.
+ double distRatio = DifficultyCalculationUtils.Smoothstep(Math.Abs(prevVelocity - currVelocity) / Math.Max(prevVelocity, currVelocity), 0, 1);
+
+ // Reward for % distance up to 125 / strainTime for overlaps where velocity is still changing.
+ double overlapVelocityBuff = Math.Min(OsuDifficultyHitObject.NORMALISED_DIAMETER * 1.25 / Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime),
+ Math.Abs(prevVelocity - currVelocity));
+
+ flowDifficulty += overlapVelocityBuff *
+ distRatio *
+ overlappedNotesWeight *
+ velocity_change_multiplier;
+ }
+
+ if (osuCurrObj.BaseObject is Slider && withSliderTravelDistance)
+ {
+ // Include slider velocity to make velocity more consistent with snap
+ flowDifficulty += osuCurrObj.TravelDistance / osuCurrObj.TravelTime;
+ }
+
+ // Final velocity is being raised to a power because flow difficulty scales harder with both high distance and time, and we want to account for that
+ flowDifficulty = Math.Pow(flowDifficulty, 1.45);
+
+ // Reduce difficulty for low spacing since spacing below radius is always to be flowed
+ return flowDifficulty * DifficultyCalculationUtils.Smootherstep(currDistance, 0, OsuDifficultyHitObject.NORMALISED_RADIUS);
+ }
+
+ private static double calculateOverlapFactor(OsuDifficultyHitObject first, OsuDifficultyHitObject second)
+ {
+ var firstBase = (OsuHitObject)first.BaseObject;
+ var secondBase = (OsuHitObject)second.BaseObject;
+ double objectRadius = firstBase.Radius;
+
+ double distance = Vector2.Distance(firstBase.StackedPosition, secondBase.StackedPosition);
+ return Math.Clamp(1 - Math.Pow(Math.Max(distance - objectRadius, 0) / objectRadius, 2), 0, 1);
+ }
+ }
+}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/SnapAimEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/SnapAimEvaluator.cs
new file mode 100644
index 000000000000..a373df706cd5
--- /dev/null
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Aim/SnapAimEvaluator.cs
@@ -0,0 +1,209 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using osu.Framework.Extensions.ObjectExtensions;
+using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Objects;
+
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators.Aim
+{
+ public static class SnapAimEvaluator
+ {
+ private const double wide_angle_multiplier = 1.05;
+ private const double acute_angle_multiplier = 2.41;
+ private const double slider_multiplier = 1.5;
+ private const double velocity_change_multiplier = 0.9;
+ private const double wiggle_multiplier = 1.02; // WARNING: Increasing this multiplier beyond 1.02 reduces difficulty as distance increases. Refer to the desmos link above the wiggle bonus calculation
+ private const double maximum_repetition_nerf = 0.15;
+ private const double maximum_vector_influence = 0.5;
+
+ ///
+ /// Evaluates the difficulty of aiming the current object, based on:
+ ///
+ /// - cursor velocity to the current object,
+ /// - angle difficulty,
+ /// - sharp velocity increases,
+ /// - and slider difficulty.
+ ///
+ ///
+ public static double EvaluateDifficultyOf(DifficultyHitObject current, bool withSliderTravelDistance)
+ {
+ if (current.BaseObject is Spinner || current.Index <= 1 || current.Previous(0).BaseObject is Spinner)
+ return 0;
+
+ var osuCurrObj = (OsuDifficultyHitObject)current;
+ var osuLastObj = (OsuDifficultyHitObject)current.Previous(0);
+ var osuLast2Obj = (OsuDifficultyHitObject)current.Previous(2);
+
+ const int radius = OsuDifficultyHitObject.NORMALISED_RADIUS;
+ const int diameter = OsuDifficultyHitObject.NORMALISED_DIAMETER;
+
+ // Calculate the velocity to the current hitobject, which starts with a base distance / time assuming the last object is a hitcircle.
+ double currDistance = withSliderTravelDistance ? osuCurrObj.LazyJumpDistance : osuCurrObj.JumpDistance;
+ double currVelocity = currDistance / osuCurrObj.AdjustedDeltaTime;
+
+ // But if the last object is a slider, then we extend the travel velocity through the slider into the current object.
+ if (osuLastObj.BaseObject is Slider && withSliderTravelDistance)
+ {
+ double sliderDistance = osuLastObj.LazyTravelDistance + osuCurrObj.LazyJumpDistance;
+ currVelocity = Math.Max(currVelocity, sliderDistance / osuCurrObj.AdjustedDeltaTime);
+ }
+
+ double prevDistance = withSliderTravelDistance ? osuLastObj.LazyJumpDistance : osuLastObj.JumpDistance;
+ double prevVelocity = prevDistance / osuLastObj.AdjustedDeltaTime;
+
+ double aimStrain = currVelocity; // Start strain with regular velocity.
+
+ // Penalize angle repetition.
+ aimStrain *= vectorAngleRepetition(osuCurrObj, osuLastObj);
+
+ if (osuCurrObj.Angle != null && osuLastObj.Angle != null)
+ {
+ double currAngle = osuCurrObj.Angle.Value;
+ double lastAngle = osuLastObj.Angle.Value;
+
+ // Rewarding angles, take the smaller velocity as base.
+ double velocityInfluence = Math.Min(currVelocity, prevVelocity);
+
+ double acuteAngleBonus = 0;
+
+ if (Math.Max(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime) < 1.25 * Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime)) // If rhythms are the same.
+ {
+ acuteAngleBonus = CalcAngleAcuteness(currAngle);
+
+ // Penalize angle repetition. It is important to do it _before_ multiplying by anything because we compare raw acuteness here
+ acuteAngleBonus *= 0.08 + 0.92 * (1 - Math.Min(acuteAngleBonus, Math.Pow(CalcAngleAcuteness(lastAngle), 3)));
+
+ // Apply acute angle bonus for BPM above 300 1/2 and distance more than one diameter
+ acuteAngleBonus *= velocityInfluence * DifficultyCalculationUtils.Smootherstep(DifficultyCalculationUtils.MillisecondsToBPM(osuCurrObj.AdjustedDeltaTime, 2), 300, 400) *
+ DifficultyCalculationUtils.Smootherstep(currDistance, 0, diameter * 2);
+ }
+
+ double wideAngleBonus = calcAngleWideness(currAngle);
+
+ // Penalize angle repetition. It is important to do it _before_ multiplying by velocity because we compare raw wideness here
+ wideAngleBonus *= 0.25 + 0.75 * (1 - Math.Min(wideAngleBonus, Math.Pow(calcAngleWideness(lastAngle), 3)));
+
+ wideAngleBonus *= velocityInfluence;
+
+ if (osuLast2Obj != null)
+ {
+ // If objects just go back and forth through a middle point - don't give as much wide bonus
+ // Use Previous(2) and Previous(0) because angles calculation is done prevprev-prev-curr, so any object's angle's center point is always the previous object
+ var lastBaseObject = (OsuHitObject)osuLastObj.BaseObject;
+ var last2BaseObject = (OsuHitObject)osuLast2Obj.BaseObject;
+
+ float distance = (last2BaseObject.StackedPosition - lastBaseObject.StackedPosition).Length;
+
+ if (distance < 1)
+ {
+ wideAngleBonus *= 1 - 0.55 * (1 - distance);
+ }
+ }
+
+ // Add in acute angle bonus or wide angle bonus, whichever is larger.
+ aimStrain += Math.Max(acuteAngleBonus * acute_angle_multiplier, wideAngleBonus * wide_angle_multiplier);
+
+ // Apply wiggle bonus for jumps that are [radius, 3*diameter] in distance, with < 110 angle
+ // https://www.desmos.com/calculator/dp0v0nvowc
+ double wiggleBonus = velocityInfluence
+ * DifficultyCalculationUtils.Smootherstep(currDistance, radius, diameter)
+ * Math.Pow(DifficultyCalculationUtils.ReverseLerp(currDistance, diameter * 3, diameter), 1.8)
+ * DifficultyCalculationUtils.Smootherstep(currAngle, double.DegreesToRadians(110), double.DegreesToRadians(60))
+ * DifficultyCalculationUtils.Smootherstep(prevDistance, radius, diameter)
+ * Math.Pow(DifficultyCalculationUtils.ReverseLerp(prevDistance, diameter * 3, diameter), 1.8)
+ * DifficultyCalculationUtils.Smootherstep(lastAngle, double.DegreesToRadians(110), double.DegreesToRadians(60));
+
+ aimStrain += wiggleBonus * wiggle_multiplier;
+ }
+
+ if (Math.Max(prevVelocity, currVelocity) != 0)
+ {
+ if (withSliderTravelDistance)
+ {
+ // We want to use just the object jump without slider velocity when awarding differences
+ currVelocity = currDistance / osuCurrObj.AdjustedDeltaTime;
+ }
+
+ // Scale with ratio of difference compared to 0.5 * max dist.
+ double distRatio = DifficultyCalculationUtils.Smoothstep(Math.Abs(prevVelocity - currVelocity) / Math.Max(prevVelocity, currVelocity), 0, 1);
+
+ // Reward for % distance up to 125 / strainTime for overlaps where velocity is still changing.
+ double overlapVelocityBuff = Math.Min(diameter * 1.25 / Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime), Math.Abs(prevVelocity - currVelocity));
+
+ double velocityChangeBonus = overlapVelocityBuff * distRatio;
+
+ // Penalize for rhythm changes.
+ velocityChangeBonus *= Math.Pow(Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime) / Math.Max(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime), 2);
+
+ aimStrain += velocityChangeBonus * velocity_change_multiplier;
+ }
+
+ // Reward sliders based on velocity.
+ if (osuCurrObj.BaseObject is Slider && withSliderTravelDistance)
+ {
+ double sliderBonus = osuCurrObj.TravelDistance / osuCurrObj.TravelTime;
+ aimStrain += (sliderBonus < 1 ? sliderBonus : Math.Pow(sliderBonus, 0.75)) * slider_multiplier;
+ }
+
+ // Apply high circle size bonus
+ aimStrain *= osuCurrObj.SmallCircleBonus;
+
+ aimStrain *= highBpmBonus(osuCurrObj.AdjustedDeltaTime);
+
+ return aimStrain;
+ }
+
+ private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.03, Math.Pow(ms / 1000, 0.65)));
+
+ private static double vectorAngleRepetition(OsuDifficultyHitObject current, OsuDifficultyHitObject previous)
+ {
+ if (current.Angle == null || previous.Angle == null)
+ return 1;
+
+ const double note_limit = 6;
+
+ double constantAngleCount = 0;
+
+ for (int index = 0; index < note_limit; index++)
+ {
+ var loopObj = (OsuDifficultyHitObject)current.Previous(index);
+
+ if (loopObj.IsNull())
+ break;
+
+ // Only consider vectors in the same jump section, stopping to change rhythm ruins momentum
+ if (Math.Max(current.AdjustedDeltaTime, loopObj.AdjustedDeltaTime) > 1.1 * Math.Min(current.AdjustedDeltaTime, loopObj.AdjustedDeltaTime))
+ break;
+
+ if (loopObj.NormalisedVectorAngle.IsNotNull() && current.NormalisedVectorAngle.IsNotNull())
+ {
+ double angleDifference = Math.Abs(current.NormalisedVectorAngle.Value - loopObj.NormalisedVectorAngle.Value);
+ // Refer to this desmos for tuning, constants need to be precise so that values stay within the range of 0 and 1.
+ // https://www.desmos.com/calculator/a8jesv5sv2
+ constantAngleCount += Math.Cos(8 * Math.Min(double.DegreesToRadians(11.25), angleDifference));
+ }
+ }
+
+ double vectorRepetition = Math.Pow(Math.Min(0.5 / constantAngleCount, 1), 2);
+
+ double stackFactor = DifficultyCalculationUtils.Smootherstep(current.LazyJumpDistance, 0, OsuDifficultyHitObject.NORMALISED_DIAMETER);
+
+ double currAngle = current.Angle.Value;
+ double lastAngle = previous.Angle.Value;
+
+ double angleDifferenceAdjusted = Math.Cos(2 * Math.Min(double.DegreesToRadians(45), Math.Abs(currAngle - lastAngle) * stackFactor));
+
+ double baseNerf = 1 - maximum_repetition_nerf * CalcAngleAcuteness(lastAngle) * angleDifferenceAdjusted;
+
+ return Math.Pow(baseNerf + (1 - baseNerf) * vectorRepetition * maximum_vector_influence * stackFactor, 2);
+ }
+
+ private static double calcAngleWideness(double angle) => DifficultyCalculationUtils.Smoothstep(angle, double.DegreesToRadians(40), double.DegreesToRadians(140));
+
+ public static double CalcAngleAcuteness(double angle) => DifficultyCalculationUtils.Smoothstep(angle, double.DegreesToRadians(140), double.DegreesToRadians(40));
+ }
+}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs
deleted file mode 100644
index dcf8ac0fedbd..000000000000
--- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using System;
-using osu.Game.Rulesets.Difficulty.Preprocessing;
-using osu.Game.Rulesets.Difficulty.Utils;
-using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
-using osu.Game.Rulesets.Osu.Objects;
-
-namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
-{
- public static class AimEvaluator
- {
- private const double wide_angle_multiplier = 1.5;
- private const double acute_angle_multiplier = 2.55;
- private const double slider_multiplier = 1.35;
- private const double velocity_change_multiplier = 0.75;
- private const double wiggle_multiplier = 1.02;
-
- ///
- /// Evaluates the difficulty of aiming the current object, based on:
- ///
- /// - cursor velocity to the current object,
- /// - angle difficulty,
- /// - sharp velocity increases,
- /// - and slider difficulty.
- ///
- ///
- public static double EvaluateDifficultyOf(DifficultyHitObject current, bool withSliderTravelDistance)
- {
- if (current.BaseObject is Spinner || current.Index <= 1 || current.Previous(0).BaseObject is Spinner)
- return 0;
-
- var osuCurrObj = (OsuDifficultyHitObject)current;
- var osuLastObj = (OsuDifficultyHitObject)current.Previous(0);
- var osuLastLastObj = (OsuDifficultyHitObject)current.Previous(1);
- var osuLast2Obj = (OsuDifficultyHitObject)current.Previous(2);
-
- const int radius = OsuDifficultyHitObject.NORMALISED_RADIUS;
- const int diameter = OsuDifficultyHitObject.NORMALISED_DIAMETER;
-
- // Calculate the velocity to the current hitobject, which starts with a base distance / time assuming the last object is a hitcircle.
- double currVelocity = osuCurrObj.LazyJumpDistance / osuCurrObj.AdjustedDeltaTime;
-
- // But if the last object is a slider, then we extend the travel velocity through the slider into the current object.
- if (osuLastObj.BaseObject is Slider && withSliderTravelDistance)
- {
- double travelVelocity = osuLastObj.TravelDistance / osuLastObj.TravelTime; // calculate the slider velocity from slider head to slider end.
- double movementVelocity = osuCurrObj.MinimumJumpDistance / osuCurrObj.MinimumJumpTime; // calculate the movement velocity from slider end to current object
-
- currVelocity = Math.Max(currVelocity, movementVelocity + travelVelocity); // take the larger total combined velocity.
- }
-
- // As above, do the same for the previous hitobject.
- double prevVelocity = osuLastObj.LazyJumpDistance / osuLastObj.AdjustedDeltaTime;
-
- if (osuLastLastObj.BaseObject is Slider && withSliderTravelDistance)
- {
- double travelVelocity = osuLastLastObj.TravelDistance / osuLastLastObj.TravelTime;
- double movementVelocity = osuLastObj.MinimumJumpDistance / osuLastObj.MinimumJumpTime;
-
- prevVelocity = Math.Max(prevVelocity, movementVelocity + travelVelocity);
- }
-
- double wideAngleBonus = 0;
- double acuteAngleBonus = 0;
- double sliderBonus = 0;
- double velocityChangeBonus = 0;
- double wiggleBonus = 0;
-
- double aimStrain = currVelocity; // Start strain with regular velocity.
-
- if (osuCurrObj.Angle != null && osuLastObj.Angle != null)
- {
- double currAngle = osuCurrObj.Angle.Value;
- double lastAngle = osuLastObj.Angle.Value;
-
- // Rewarding angles, take the smaller velocity as base.
- double angleBonus = Math.Min(currVelocity, prevVelocity);
-
- if (Math.Max(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime) < 1.25 * Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime)) // If rhythms are the same.
- {
- acuteAngleBonus = calcAcuteAngleBonus(currAngle);
-
- // Penalize angle repetition.
- acuteAngleBonus *= 0.08 + 0.92 * (1 - Math.Min(acuteAngleBonus, Math.Pow(calcAcuteAngleBonus(lastAngle), 3)));
-
- // Apply acute angle bonus for BPM above 300 1/2 and distance more than one diameter
- acuteAngleBonus *= angleBonus *
- DifficultyCalculationUtils.Smootherstep(DifficultyCalculationUtils.MillisecondsToBPM(osuCurrObj.AdjustedDeltaTime, 2), 300, 400) *
- DifficultyCalculationUtils.Smootherstep(osuCurrObj.LazyJumpDistance, diameter, diameter * 2);
- }
-
- wideAngleBonus = calcWideAngleBonus(currAngle);
-
- // Penalize angle repetition.
- wideAngleBonus *= 1 - Math.Min(wideAngleBonus, Math.Pow(calcWideAngleBonus(lastAngle), 3));
-
- // Apply full wide angle bonus for distance more than one diameter
- wideAngleBonus *= angleBonus * DifficultyCalculationUtils.Smootherstep(osuCurrObj.LazyJumpDistance, 0, diameter);
-
- // Apply wiggle bonus for jumps that are [radius, 3*diameter] in distance, with < 110 angle
- // https://www.desmos.com/calculator/dp0v0nvowc
- wiggleBonus = angleBonus
- * DifficultyCalculationUtils.Smootherstep(osuCurrObj.LazyJumpDistance, radius, diameter)
- * Math.Pow(DifficultyCalculationUtils.ReverseLerp(osuCurrObj.LazyJumpDistance, diameter * 3, diameter), 1.8)
- * DifficultyCalculationUtils.Smootherstep(currAngle, double.DegreesToRadians(110), double.DegreesToRadians(60))
- * DifficultyCalculationUtils.Smootherstep(osuLastObj.LazyJumpDistance, radius, diameter)
- * Math.Pow(DifficultyCalculationUtils.ReverseLerp(osuLastObj.LazyJumpDistance, diameter * 3, diameter), 1.8)
- * DifficultyCalculationUtils.Smootherstep(lastAngle, double.DegreesToRadians(110), double.DegreesToRadians(60));
-
- if (osuLast2Obj != null)
- {
- // If objects just go back and forth through a middle point - don't give as much wide bonus
- // Use Previous(2) and Previous(0) because angles calculation is done prevprev-prev-curr, so any object's angle's center point is always the previous object
- var lastBaseObject = (OsuHitObject)osuLastObj.BaseObject;
- var last2BaseObject = (OsuHitObject)osuLast2Obj.BaseObject;
-
- float distance = (last2BaseObject.StackedPosition - lastBaseObject.StackedPosition).Length;
-
- if (distance < 1)
- {
- wideAngleBonus *= 1 - 0.35 * (1 - distance);
- }
- }
- }
-
- if (Math.Max(prevVelocity, currVelocity) != 0)
- {
- // We want to use the average velocity over the whole object when awarding differences, not the individual jump and slider path velocities.
- prevVelocity = (osuLastObj.LazyJumpDistance + osuLastLastObj.TravelDistance) / osuLastObj.AdjustedDeltaTime;
- currVelocity = (osuCurrObj.LazyJumpDistance + osuLastObj.TravelDistance) / osuCurrObj.AdjustedDeltaTime;
-
- // Scale with ratio of difference compared to 0.5 * max dist.
- double distRatio = DifficultyCalculationUtils.Smoothstep(Math.Abs(prevVelocity - currVelocity) / Math.Max(prevVelocity, currVelocity), 0, 1);
-
- // Reward for % distance up to 125 / strainTime for overlaps where velocity is still changing.
- double overlapVelocityBuff = Math.Min(diameter * 1.25 / Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime), Math.Abs(prevVelocity - currVelocity));
-
- velocityChangeBonus = overlapVelocityBuff * distRatio;
-
- // Penalize for rhythm changes.
- velocityChangeBonus *= Math.Pow(Math.Min(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime) / Math.Max(osuCurrObj.AdjustedDeltaTime, osuLastObj.AdjustedDeltaTime), 2);
- }
-
- if (osuLastObj.BaseObject is Slider)
- {
- // Reward sliders based on velocity.
- sliderBonus = osuLastObj.TravelDistance / osuLastObj.TravelTime;
- }
-
- aimStrain += wiggleBonus * wiggle_multiplier;
- aimStrain += velocityChangeBonus * velocity_change_multiplier;
-
- // Add in acute angle bonus or wide angle bonus, whichever is larger.
- aimStrain += Math.Max(acuteAngleBonus * acute_angle_multiplier, wideAngleBonus * wide_angle_multiplier);
-
- // Apply high circle size bonus
- aimStrain *= osuCurrObj.SmallCircleBonus;
-
- // Add in additional slider velocity bonus.
- if (withSliderTravelDistance)
- aimStrain += sliderBonus * slider_multiplier;
-
- return aimStrain;
- }
-
- private static double calcWideAngleBonus(double angle) => DifficultyCalculationUtils.Smoothstep(angle, double.DegreesToRadians(40), double.DegreesToRadians(140));
-
- private static double calcAcuteAngleBonus(double angle) => DifficultyCalculationUtils.Smoothstep(angle, double.DegreesToRadians(140), double.DegreesToRadians(40));
- }
-}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlashlightEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlashlightEvaluator.cs
index 55192df7af93..e828eba1cc61 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlashlightEvaluator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlashlightEvaluator.cs
@@ -2,8 +2,12 @@
// See the LICENCE file in the repository root for full licence text.
using System;
+using System.Collections.Generic;
+using System.Linq;
using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Osu.Objects;
namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
@@ -28,7 +32,7 @@ public static class FlashlightEvaluator
/// - and whether the hidden mod is enabled.
///
///
- public static double EvaluateDifficultyOf(DifficultyHitObject current, bool hidden)
+ public static double EvaluateDifficultyOf(DifficultyHitObject current, IReadOnlyList mods)
{
if (current.BaseObject is Spinner)
return 0;
@@ -66,7 +70,7 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current, bool hidd
double stackNerf = Math.Min(1.0, (currentObj.LazyJumpDistance / scalingFactor) / 25.0);
// Bonus based on how visible the object is.
- double opacityBonus = 1.0 + max_opacity_bonus * (1.0 - osuCurrent.OpacityAt(currentHitObject.StartTime, hidden));
+ double opacityBonus = 1.0 + max_opacity_bonus * (1.0 - osuCurrent.OpacityAt(currentHitObject.StartTime, mods.OfType().Any(m => !m.OnlyFadeApproachCircles.Value)));
result += stackNerf * opacityBonus * scalingFactor * jumpDistance / cumulativeStrainTime;
@@ -84,7 +88,7 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current, bool hidd
result = Math.Pow(smallDistNerf * result, 2.0);
// Additional bonus for Hidden due to there being no approach circles.
- if (hidden)
+ if (mods.OfType().Any())
result *= 1.0 + hidden_bonus;
// Nerf patterns with repeated angles.
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs
new file mode 100644
index 000000000000..fe6d49661b9c
--- /dev/null
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs
@@ -0,0 +1,272 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using System.Collections.Generic;
+using osu.Framework.Extensions.ObjectExtensions;
+using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Objects;
+
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
+{
+ public static class ReadingEvaluator
+ {
+ private const double reading_window_size = 3000; // 3 seconds
+ private const double distance_influence_threshold = OsuDifficultyHitObject.NORMALISED_DIAMETER * 1.5; // 1.5 circles distance between centers
+ private const double hidden_multiplier = 0.28;
+ private const double density_multiplier = 2.4;
+ private const double density_difficulty_base = 2.5;
+ private const double preempt_balancing_factor = 140000;
+ private const double preempt_starting_point = 500; // AR 9.66 in milliseconds
+ private const double minimum_angle_relevancy_time = 2000; // 2 seconds
+ private const double maximum_angle_relevancy_time = 200;
+
+ public static double EvaluateDifficultyOf(DifficultyHitObject current, bool hidden)
+ {
+ if (current.BaseObject is Spinner || current.Index == 0)
+ return 0;
+
+ var currObj = (OsuDifficultyHitObject)current;
+ var nextObj = (OsuDifficultyHitObject)current.Next(0);
+
+ double velocity = Math.Max(1, currObj.LazyJumpDistance / currObj.AdjustedDeltaTime); // Only allow velocity to buff
+
+ double currentVisibleObjectDensity = retrieveCurrentVisibleObjectDensity(currObj);
+ double pastObjectDifficultyInfluence = getPastObjectDifficultyInfluence(currObj);
+
+ double constantAngleNerfFactor = getConstantAngleNerfFactor(currObj);
+
+ double noteDensityDifficulty = calculateDensityDifficulty(nextObj, velocity, constantAngleNerfFactor, pastObjectDifficultyInfluence, currentVisibleObjectDensity);
+
+ double hiddenDifficulty = hidden
+ ? calculateHiddenDifficulty(currObj, pastObjectDifficultyInfluence, currentVisibleObjectDensity, velocity, constantAngleNerfFactor)
+ : 0;
+
+ double preemptDifficulty = calculatePreemptDifficulty(velocity, constantAngleNerfFactor, currObj.Preempt);
+
+ double difficulty = DifficultyCalculationUtils.Norm(1.5, preemptDifficulty, hiddenDifficulty, noteDensityDifficulty);
+
+ // Having less time to process information is harder
+ difficulty *= highBpmBonus(currObj.AdjustedDeltaTime);
+
+ return difficulty;
+ }
+
+ ///
+ /// Calculates the density difficulty of the current object and how hard it is to aim it because of it based on:
+ ///
+ /// - cursor velocity to the current object,
+ /// - how many times the current object's angle was repeated,
+ /// - density of objects visible when the current object appears,
+ /// - density of objects visible when the current object needs to be clicked,
+ /// ///
+ ///
+ private static double calculateDensityDifficulty(OsuDifficultyHitObject? nextObj, double velocity, double constantAngleNerfFactor,
+ double pastObjectDifficultyInfluence, double currentVisibleObjectDensity)
+ {
+ // Consider future densities too because it can make the path the cursor takes less clear
+ double futureObjectDifficultyInfluence = Math.Sqrt(currentVisibleObjectDensity);
+
+ if (nextObj != null)
+ {
+ // Reduce difficulty if movement to next object is small
+ futureObjectDifficultyInfluence *= DifficultyCalculationUtils.Smootherstep(nextObj.LazyJumpDistance, 15, distance_influence_threshold);
+ }
+
+ // Value higher note densities exponentially
+ double noteDensityDifficulty = Math.Pow(pastObjectDifficultyInfluence + futureObjectDifficultyInfluence, 1.7) * 0.4 * constantAngleNerfFactor * velocity;
+
+ // Award only denser than average maps.
+ noteDensityDifficulty = Math.Max(0, noteDensityDifficulty - density_difficulty_base);
+
+ // Apply a soft cap to general density reading to account for partial memorization
+ noteDensityDifficulty = Math.Pow(noteDensityDifficulty, 0.45) * density_multiplier;
+
+ return noteDensityDifficulty;
+ }
+
+ ///
+ /// Calculates the difficulty of aiming the current object when the approach rate is very high based on:
+ ///
+ /// - cursor velocity to the current object,
+ /// - how many times the current object's angle was repeated,
+ /// - how many milliseconds elapse between the approach circle appearing and touching the inner circle
+ ///
+ ///
+ private static double calculatePreemptDifficulty(double velocity, double constantAngleNerfFactor, double preempt)
+ {
+ // Arbitrary curve for the base value preempt difficulty should have as approach rate increases.
+ // https://www.desmos.com/calculator/c175335a71
+ double preemptDifficulty = Math.Pow((preempt_starting_point - preempt + Math.Abs(preempt - preempt_starting_point)) / 2, 2.5) / preempt_balancing_factor;
+
+ preemptDifficulty *= constantAngleNerfFactor * velocity;
+
+ return preemptDifficulty;
+ }
+
+ ///
+ /// Calculates the difficulty of aiming the current object when the hidden mod is active based on:
+ ///
+ /// - cursor velocity to the current object,
+ /// - time the current object spends invisible,
+ /// - density of objects visible when the current object appears,
+ /// - density of objects visible when the current object needs to be clicked,
+ /// - how many times the current object's angle was repeated,
+ /// - if the current object is perfectly stacked to the previous one
+ ///
+ ///
+ private static double calculateHiddenDifficulty(OsuDifficultyHitObject currObj, double pastObjectDifficultyInfluence, double currentVisibleObjectDensity, double velocity,
+ double constantAngleNerfFactor)
+ {
+ // Higher preempt means that time spent invisible is higher too, we want to reward that
+ double preemptFactor = Math.Pow(currObj.Preempt, 2.2) * 0.01;
+
+ // Account for both past and current densities
+ double densityFactor = Math.Pow(currentVisibleObjectDensity + pastObjectDifficultyInfluence, 3.3) * 3;
+
+ double hiddenDifficulty = (preemptFactor + densityFactor) * constantAngleNerfFactor * velocity * 0.01;
+
+ // Apply a soft cap to general HD reading to account for partial memorization
+ hiddenDifficulty = Math.Pow(hiddenDifficulty, 0.4) * hidden_multiplier;
+
+ var previousObj = (OsuDifficultyHitObject)currObj.Previous(0);
+
+ // Buff perfect stacks only if current note is completely invisible at the time you click the previous note.
+ if (currObj.LazyJumpDistance == 0 && currObj.OpacityAt(previousObj.BaseObject.StartTime, true) == 0 && previousObj.StartTime > currObj.StartTime - currObj.Preempt)
+ hiddenDifficulty += hidden_multiplier * 2500 / Math.Pow(currObj.AdjustedDeltaTime, 1.5); // Perfect stacks are harder the less time between notes
+
+ return hiddenDifficulty;
+ }
+
+ private static double getPastObjectDifficultyInfluence(OsuDifficultyHitObject currObj)
+ {
+ double pastObjectDifficultyInfluence = 0;
+
+ foreach (var loopObj in retrievePastVisibleObjects(currObj))
+ {
+ double loopDifficulty = currObj.OpacityAt(loopObj.BaseObject.StartTime, false);
+
+ // When aiming an object small distances mean previous objects may be cheesed, so it doesn't matter whether they were arranged confusingly.
+ loopDifficulty *= DifficultyCalculationUtils.Smootherstep(loopObj.LazyJumpDistance, 15, distance_influence_threshold);
+
+ // Account less for objects close to the max reading window
+ double timeBetweenCurrAndLoopObj = currObj.StartTime - loopObj.StartTime;
+ double timeNerfFactor = getTimeNerfFactor(timeBetweenCurrAndLoopObj);
+
+ loopDifficulty *= timeNerfFactor;
+ pastObjectDifficultyInfluence += loopDifficulty;
+ }
+
+ return pastObjectDifficultyInfluence;
+ }
+
+ // Returns a list of objects that are visible on screen at the point in time the current object becomes visible.
+ private static IEnumerable retrievePastVisibleObjects(OsuDifficultyHitObject current)
+ {
+ for (int i = 0; i < current.Index; i++)
+ {
+ OsuDifficultyHitObject hitObject = (OsuDifficultyHitObject)current.Previous(i);
+
+ if (hitObject.IsNull() ||
+ current.StartTime - hitObject.StartTime > reading_window_size ||
+ hitObject.StartTime < current.StartTime - current.Preempt) // Current object not visible at the time object needs to be clicked
+ break;
+
+ yield return hitObject;
+ }
+ }
+
+ // Returns the density of objects visible at the point in time the current object needs to be clicked capped by the reading window.
+ private static double retrieveCurrentVisibleObjectDensity(OsuDifficultyHitObject current)
+ {
+ double visibleObjectCount = 0;
+
+ OsuDifficultyHitObject? hitObject = (OsuDifficultyHitObject)current.Next(0);
+
+ while (hitObject != null)
+ {
+ if (hitObject.StartTime - current.StartTime > reading_window_size ||
+ current.StartTime < hitObject.StartTime - hitObject.Preempt) // Object not visible at the time current object needs to be clicked.
+ break;
+
+ double timeBetweenCurrAndLoopObj = hitObject.StartTime - current.StartTime;
+ double timeNerfFactor = getTimeNerfFactor(timeBetweenCurrAndLoopObj);
+
+ visibleObjectCount += hitObject.OpacityAt(current.BaseObject.StartTime, false) * timeNerfFactor;
+
+ hitObject = (OsuDifficultyHitObject?)hitObject.Next(0);
+ }
+
+ return visibleObjectCount;
+ }
+
+ // Returns a factor of how often the current object's angle has been repeated in a certain time frame.
+ // It does this by checking the difference in angle between current and past objects and sums them based on a range of similarity.
+ // https://www.desmos.com/calculator/eb057a4822
+ private static double getConstantAngleNerfFactor(OsuDifficultyHitObject current)
+ {
+ double constantAngleCount = 0;
+ int index = 0;
+ double currentTimeGap = 0;
+
+ OsuDifficultyHitObject loopObjPrev0 = current;
+ OsuDifficultyHitObject? loopObjPrev1 = null;
+ OsuDifficultyHitObject? loopObjPrev2 = null;
+
+ while (currentTimeGap < minimum_angle_relevancy_time)
+ {
+ var loopObj = (OsuDifficultyHitObject)current.Previous(index);
+
+ if (loopObj.IsNull())
+ break;
+
+ // Account less for objects that are close to the time limit.
+ double longIntervalFactor = 1 - DifficultyCalculationUtils.ReverseLerp(loopObj.AdjustedDeltaTime, maximum_angle_relevancy_time, minimum_angle_relevancy_time);
+
+ if (loopObj.Angle.IsNotNull() && current.Angle.IsNotNull())
+ {
+ double angleDifference = Math.Abs(current.Angle.Value - loopObj.Angle.Value);
+ double angleDifferenceAlternating = Math.PI;
+
+ if (loopObjPrev0.Angle != null && loopObjPrev1?.Angle != null && loopObjPrev2?.Angle != null)
+ {
+ angleDifferenceAlternating = Math.Abs(loopObjPrev1.Angle.Value - loopObj.Angle.Value);
+ angleDifferenceAlternating += Math.Abs(loopObjPrev2.Angle.Value - loopObjPrev0.Angle.Value);
+
+ double weight = 1.0;
+
+ // Be sure that one of the angles is very sharp, when other is wide
+ weight *= DifficultyCalculationUtils.ReverseLerp(Math.Min(loopObj.Angle.Value, loopObjPrev0.Angle.Value) * 180 / Math.PI, 20, 5);
+ weight *= DifficultyCalculationUtils.ReverseLerp(Math.Max(loopObj.Angle.Value, loopObjPrev0.Angle.Value) * 180 / Math.PI, 60, 120);
+
+ // Lerp between max angle difference and rescaled alternating difference, with more harsh scaling compared to normal difference
+ angleDifferenceAlternating = double.Lerp(Math.PI, 0.1 * angleDifferenceAlternating, weight);
+ }
+
+ double stackFactor = DifficultyCalculationUtils.Smootherstep(loopObj.LazyJumpDistance, 0, OsuDifficultyHitObject.NORMALISED_RADIUS);
+
+ constantAngleCount += Math.Cos(3 * Math.Min(double.DegreesToRadians(30), Math.Min(angleDifference, angleDifferenceAlternating) * stackFactor)) * longIntervalFactor;
+ }
+
+ currentTimeGap = current.StartTime - loopObj.StartTime;
+ index++;
+
+ loopObjPrev2 = loopObjPrev1;
+ loopObjPrev1 = loopObjPrev0;
+ loopObjPrev0 = loopObj;
+ }
+
+ return Math.Clamp(2 / constantAngleCount, 0.2, 1);
+ }
+
+ // Returns a nerfing factor for when objects are very distant in time, affecting reading less.
+ private static double getTimeNerfFactor(double deltaTime)
+ {
+ return Math.Clamp(2 - deltaTime / (reading_window_size / 2), 0, 1);
+ }
+
+ private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.8, ms / 1000));
+ }
+}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/RhythmEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/RhythmEvaluator.cs
similarity index 77%
rename from osu.Game.Rulesets.Osu/Difficulty/Evaluators/RhythmEvaluator.cs
rename to osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/RhythmEvaluator.cs
index 9349083951e1..e2ee41162b41 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/RhythmEvaluator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/RhythmEvaluator.cs
@@ -8,15 +8,16 @@
using osu.Game.Rulesets.Difficulty.Utils;
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
using osu.Game.Rulesets.Osu.Objects;
+using osu.Game.Rulesets.Scoring;
-namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators.Speed
{
public static class RhythmEvaluator
{
private const int history_time_max = 5 * 1000; // 5 seconds
private const int history_objects_max = 32;
- private const double rhythm_overall_multiplier = 1.0;
- private const double rhythm_ratio_multiplier = 15.0;
+ private const double rhythm_overall_multiplier = 0.8;
+ private const double rhythm_ratio_multiplier = 32.0;
///
/// Calculates a rhythm multiplier for the difficulty of the tap associated with historic data of the current .
@@ -26,11 +27,9 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
if (current.BaseObject is Spinner)
return 0;
- var currentOsuObject = (OsuDifficultyHitObject)current;
-
double rhythmComplexitySum = 0;
- double deltaDifferenceEpsilon = ((OsuDifficultyHitObject)current).HitWindowGreat * 0.3;
+ double deltaDifferenceEpsilon = ((OsuDifficultyHitObject)current).HitWindow(HitResult.Great) * 0.3;
var island = new Island(deltaDifferenceEpsilon);
var previousIsland = new Island(deltaDifferenceEpsilon);
@@ -57,6 +56,8 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
for (int i = rhythmStart; i > 0; i--)
{
OsuDifficultyHitObject currObj = (OsuDifficultyHitObject)current.Previous(i - 1);
+ if (currObj.BaseObject is Spinner)
+ continue;
// scales note 0 to 1 from history to now
double timeDecay = (history_time_max - (current.StartTime - currObj.StartTime)) / history_time_max;
@@ -64,7 +65,7 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
double currHistoricalDecay = Math.Min(noteDecay, timeDecay); // either we're limited by time or limited by object count.
- // Use custom cap value to ensure that that at this point delta time is actually zero
+ // Use custom cap value to ensure that at this point delta time is actually zero
double currDelta = Math.Max(currObj.DeltaTime, 1e-7);
double prevDelta = Math.Max(prevObj.DeltaTime, 1e-7);
double lastDelta = Math.Max(lastObj.DeltaTime, 1e-7);
@@ -73,17 +74,27 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
// this function is meant to reduce rhythm bonus for deltas that are multiples of each other (i.e 100 and 200)
double deltaDifference = Math.Max(prevDelta, currDelta) / Math.Min(prevDelta, currDelta);
- // Take only the fractional part of the value since we're only interested in punishing multiples
- double deltaDifferenceFraction = deltaDifference - Math.Truncate(deltaDifference);
-
- double currRatio = 1.0 + rhythm_ratio_multiplier * Math.Min(0.5, DifficultyCalculationUtils.SmoothstepBellCurve(deltaDifferenceFraction));
-
// reduce ratio bonus if delta difference is too big
double differenceMultiplier = Math.Clamp(2.0 - deltaDifference / 8.0, 0.0, 1.0);
double windowPenalty = Math.Min(1, Math.Max(0, Math.Abs(prevDelta - currDelta) - deltaDifferenceEpsilon) / deltaDifferenceEpsilon);
- double effectiveRatio = windowPenalty * currRatio * differenceMultiplier;
+ double effectiveRatio = getEffectiveRatio(deltaDifference) * windowPenalty * differenceMultiplier;
+
+ // if previous object is a slider it might be easier to tap since you don't have to do a whole tapping motion
+ // while a full deltatime might end up some weird ratio the "unpress->tap" motion might be simple
+ // for example a slider-circle-circle pattern should be evaluated as a regular triple and not as a single->double
+ if (prevObj.BaseObject is Slider)
+ {
+ double sliderLazyEndDelta = currObj.MinimumJumpTime;
+ double sliderLazyDeltaDifference = Math.Max(sliderLazyEndDelta, currDelta) / Math.Min(sliderLazyEndDelta, currDelta);
+
+ double sliderRealEndDelta = currObj.LastObjectEndDeltaTime;
+ double sliderRealDeltaDifference = Math.Max(sliderRealEndDelta, currDelta) / Math.Min(sliderRealEndDelta, currDelta);
+
+ double sliderEffectiveRatio = Math.Min(getEffectiveRatio(sliderLazyDeltaDifference), getEffectiveRatio(sliderRealDeltaDifference));
+ effectiveRatio = Math.Min(sliderEffectiveRatio, effectiveRatio);
+ }
if (firstDeltaSwitch)
{
@@ -96,12 +107,7 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
{
// bpm change is into slider, this is easy acc window
if (currObj.BaseObject is Slider)
- effectiveRatio *= 0.125;
-
- // bpm change was from a slider, this is easier typically than circle -> circle
- // unintentional side effect is that bursts with kicksliders at the ends might have lower difficulty than bursts without sliders
- if (prevObj.BaseObject is Slider)
- effectiveRatio *= 0.3;
+ effectiveRatio *= 0.5;
// repeated island polarity (2 -> 4, 3 -> 5)
if (island.IsSimilarPolarity(previousIsland))
@@ -176,10 +182,15 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current)
prevObj = currObj;
}
- double rhythmDifficulty = Math.Sqrt(4 + rhythmComplexitySum * rhythm_overall_multiplier) / 2.0; // produces multiplier that can be applied to strain. range [1, infinity) (not really though)
- rhythmDifficulty *= 1 - currentOsuObject.GetDoubletapness((OsuDifficultyHitObject)current.Next(0));
+ return Math.Sqrt(4 + rhythmComplexitySum * rhythm_overall_multiplier) / 2.0; // produces multiplier that can be applied to strain. range [1, infinity) (not really though);
+ }
+
+ private static double getEffectiveRatio(double deltaDifference)
+ {
+ // Take only the fractional part of the value since we're only interested in punishing multiples
+ double deltaDifferenceFraction = deltaDifference - Math.Truncate(deltaDifference);
- return rhythmDifficulty;
+ return 1.0 + rhythm_ratio_multiplier * Math.Min(0.5, DifficultyCalculationUtils.SmoothstepBellCurve(deltaDifferenceFraction));
}
private class Island : IEquatable
@@ -211,9 +222,12 @@ public void AddDelta(int delta)
public bool IsSimilarPolarity(Island other)
{
- // TODO: consider islands to be of similar polarity only if they're having the same average delta (we don't want to consider 3 singletaps similar to a triple)
- // naively adding delta check here breaks _a lot_ of maps because of the flawed ratio calculation
- return DeltaCount % 2 == other.DeltaCount % 2;
+ // single delta islands shouldn't be compared
+ if (DeltaCount <= 1 || other.DeltaCount <= 1)
+ return false;
+
+ return Math.Abs(Delta - other.Delta) < deltaDifferenceEpsilon &&
+ DeltaCount % 2 == other.DeltaCount % 2;
}
public bool Equals(Island? other)
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/SpeedEvaluator.cs
similarity index 58%
rename from osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedEvaluator.cs
rename to osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/SpeedEvaluator.cs
index a58c1d36853e..65aab9e4bd64 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedEvaluator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/Speed/SpeedEvaluator.cs
@@ -2,47 +2,39 @@
// See the LICENCE file in the repository root for full licence text.
using System;
-using System.Collections.Generic;
-using System.Linq;
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Difficulty.Utils;
-using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
-using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Osu.Objects;
+using osu.Game.Rulesets.Scoring;
-namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
+namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators.Speed
{
public static class SpeedEvaluator
{
- private const double single_spacing_threshold = OsuDifficultyHitObject.NORMALISED_DIAMETER * 1.25; // 1.25 circles distance between centers
private const double min_speed_bonus = 200; // 200 BPM 1/4th
private const double speed_balancing_factor = 40;
- private const double distance_multiplier = 0.8;
///
/// Evaluates the difficulty of tapping the current object, based on:
///
/// - time between pressing the previous and current object,
- /// - distance between those objects,
/// - and how easily they can be cheesed.
///
///
- public static double EvaluateDifficultyOf(DifficultyHitObject current, IReadOnlyList mods)
+ public static double EvaluateDifficultyOf(DifficultyHitObject current)
{
if (current.BaseObject is Spinner)
return 0;
- // derive strainTime for calculation
var osuCurrObj = (OsuDifficultyHitObject)current;
- var osuPrevObj = current.Index > 0 ? (OsuDifficultyHitObject)current.Previous(0) : null;
double strainTime = osuCurrObj.AdjustedDeltaTime;
double doubletapness = 1.0 - osuCurrObj.GetDoubletapness((OsuDifficultyHitObject?)osuCurrObj.Next(0));
// Cap deltatime to the OD 300 hitwindow.
// 0.93 is derived from making sure 260bpm OD8 streams aren't nerfed harshly, whilst 0.92 limits the effect of the cap.
- strainTime /= Math.Clamp((strainTime / osuCurrObj.HitWindowGreat) / 0.93, 0.92, 1);
+ strainTime /= Math.Clamp((strainTime / osuCurrObj.HitWindow(HitResult.Great)) / 0.93, 0.92, 1);
// speedBonus will be 0.0 for BPM < 200
double speedBonus = 0.0;
@@ -51,26 +43,15 @@ public static double EvaluateDifficultyOf(DifficultyHitObject current, IReadOnly
if (DifficultyCalculationUtils.MillisecondsToBPM(strainTime) > min_speed_bonus)
speedBonus = 0.75 * Math.Pow((DifficultyCalculationUtils.BPMToMilliseconds(min_speed_bonus) - strainTime) / speed_balancing_factor, 2);
- double travelDistance = osuPrevObj?.TravelDistance ?? 0;
- double distance = travelDistance + osuCurrObj.MinimumJumpDistance;
-
- // Cap distance at single_spacing_threshold
- distance = Math.Min(distance, single_spacing_threshold);
-
- // Max distance bonus is 1 * `distance_multiplier` at single_spacing_threshold
- double distanceBonus = Math.Pow(distance / single_spacing_threshold, 3.95) * distance_multiplier;
-
- // Apply reduced small circle bonus because flow aim difficulty on small circles doesn't scale as hard as jumps
- distanceBonus *= Math.Sqrt(osuCurrObj.SmallCircleBonus);
-
- if (mods.OfType().Any())
- distanceBonus = 0;
-
// Base difficulty with all bonuses
- double difficulty = (1 + speedBonus + distanceBonus) * 1000 / strainTime;
+ double difficulty = (1 + speedBonus) * 1000 / strainTime;
+
+ difficulty *= highBpmBonus(osuCurrObj.AdjustedDeltaTime);
// Apply penalty if there's doubletappable doubles
return difficulty * doubletapness;
}
+
+ private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.3, ms / 1000));
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
index 9cab45414266..8384093e5035 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
@@ -45,6 +45,12 @@ public class OsuDifficultyAttributes : DifficultyAttributes
[JsonProperty("flashlight_difficulty")]
public double FlashlightDifficulty { get; set; }
+ ///
+ /// The difficulty corresponding to the reading skill.
+ ///
+ [JsonProperty("reading_difficulty")]
+ public double ReadingDifficulty { get; set; }
+
///
/// Describes how much of is contributed to by hitcircles or sliders.
/// A value closer to 1.0 indicates most of is contributed by hitcircles.
@@ -54,9 +60,9 @@ public class OsuDifficultyAttributes : DifficultyAttributes
public double SliderFactor { get; set; }
///
- /// Describes how much of is contributed to by hitcircles or sliders
- /// A value closer to 0.0 indicates most of is contributed by hitcircles
- /// A value closer to Infinity indicates most of is contributed by sliders
+ /// Describes how much of the highest aim difficulties are hitcircles or sliders
+ /// A value closer to 0.0 indicates most of the highest aim difficulties are hitcircles
+ /// A value closer to Infinity indicates most of the highest aim difficulties are sliders
///
[JsonProperty("aim_top_weighted_slider_factor")]
public double AimTopWeightedSliderFactor { get; set; }
@@ -69,12 +75,21 @@ public class OsuDifficultyAttributes : DifficultyAttributes
[JsonProperty("speed_top_weighted_slider_factor")]
public double SpeedTopWeightedSliderFactor { get; set; }
- [JsonProperty("aim_difficult_strain_count")]
- public double AimDifficultStrainCount { get; set; }
+ [JsonProperty("aim_penalty_coefficient_a")]
+ public double AimMissPenaltyCoefficientA { get; set; }
+
+ [JsonProperty("aim_penalty_coefficient_b")]
+ public double AimMissPenaltyCoefficientB { get; set; }
+
+ [JsonProperty("aim_penalty_coefficient_c")]
+ public double AimMissPenaltyCoefficientC { get; set; }
[JsonProperty("speed_difficult_strain_count")]
public double SpeedDifficultStrainCount { get; set; }
+ [JsonProperty("reading_difficult_note_count")]
+ public double ReadingDifficultNoteCount { get; set; }
+
[JsonProperty("nested_score_per_object")]
public double NestedScorePerObject { get; set; }
@@ -84,11 +99,6 @@ public class OsuDifficultyAttributes : DifficultyAttributes
[JsonProperty("maximum_legacy_combo_score")]
public double MaximumLegacyComboScore { get; set; }
- ///
- /// The beatmap's drain rate. This doesn't scale with rate-adjusting mods.
- ///
- public double DrainRate { get; set; }
-
///
/// The number of hitcircles in the beatmap.
///
@@ -111,6 +121,7 @@ public class OsuDifficultyAttributes : DifficultyAttributes
yield return (ATTRIB_ID_AIM, AimDifficulty);
yield return (ATTRIB_ID_SPEED, SpeedDifficulty);
+ yield return (ATTRIB_ID_READING, ReadingDifficulty);
yield return (ATTRIB_ID_DIFFICULTY, StarRating);
if (ShouldSerializeFlashlightDifficulty())
@@ -118,7 +129,6 @@ public class OsuDifficultyAttributes : DifficultyAttributes
yield return (ATTRIB_ID_SLIDER_FACTOR, SliderFactor);
- yield return (ATTRIB_ID_AIM_DIFFICULT_STRAIN_COUNT, AimDifficultStrainCount);
yield return (ATTRIB_ID_SPEED_DIFFICULT_STRAIN_COUNT, SpeedDifficultStrainCount);
yield return (ATTRIB_ID_SPEED_NOTE_COUNT, SpeedNoteCount);
yield return (ATTRIB_ID_AIM_DIFFICULT_SLIDER_COUNT, AimDifficultSliderCount);
@@ -127,6 +137,7 @@ public class OsuDifficultyAttributes : DifficultyAttributes
yield return (ATTRIB_ID_NESTED_SCORE_PER_OBJECT, NestedScorePerObject);
yield return (ATTRIB_ID_LEGACY_SCORE_BASE_MULTIPLIER, LegacyScoreBaseMultiplier);
yield return (ATTRIB_ID_MAXIMUM_LEGACY_COMBO_SCORE, MaximumLegacyComboScore);
+ yield return (ATTRIB_ID_READING_DIFFICULT_NOTE_COUNT, ReadingDifficultNoteCount);
}
public override void FromDatabaseAttributes(IReadOnlyDictionary values, IBeatmapOnlineInfo onlineInfo)
@@ -135,10 +146,10 @@ public override void FromDatabaseAttributes(IReadOnlyDictionary val
AimDifficulty = values[ATTRIB_ID_AIM];
SpeedDifficulty = values[ATTRIB_ID_SPEED];
+ ReadingDifficulty = values[ATTRIB_ID_READING];
StarRating = values[ATTRIB_ID_DIFFICULTY];
FlashlightDifficulty = values.GetValueOrDefault(ATTRIB_ID_FLASHLIGHT);
SliderFactor = values[ATTRIB_ID_SLIDER_FACTOR];
- AimDifficultStrainCount = values[ATTRIB_ID_AIM_DIFFICULT_STRAIN_COUNT];
SpeedDifficultStrainCount = values[ATTRIB_ID_SPEED_DIFFICULT_STRAIN_COUNT];
SpeedNoteCount = values[ATTRIB_ID_SPEED_NOTE_COUNT];
AimDifficultSliderCount = values[ATTRIB_ID_AIM_DIFFICULT_SLIDER_COUNT];
@@ -147,7 +158,7 @@ public override void FromDatabaseAttributes(IReadOnlyDictionary val
NestedScorePerObject = values[ATTRIB_ID_NESTED_SCORE_PER_OBJECT];
LegacyScoreBaseMultiplier = values[ATTRIB_ID_LEGACY_SCORE_BASE_MULTIPLIER];
MaximumLegacyComboScore = values[ATTRIB_ID_MAXIMUM_LEGACY_COMBO_SCORE];
- DrainRate = onlineInfo.DrainRate;
+ ReadingDifficultNoteCount = values[ATTRIB_ID_READING_DIFFICULT_NOTE_COUNT];
HitCircleCount = onlineInfo.CircleCount;
SliderCount = onlineInfo.SliderCount;
SpinnerCount = onlineInfo.SpinnerCount;
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs
index 504fddbb711a..1d82b2f007b8 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs
@@ -8,6 +8,7 @@
using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Difficulty.Skills;
+using osu.Game.Rulesets.Difficulty.Utils;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
using osu.Game.Rulesets.Osu.Difficulty.Skills;
@@ -16,13 +17,12 @@
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Rulesets.Osu.Scoring;
using osu.Game.Rulesets.Scoring;
+using osu.Game.Utils;
namespace osu.Game.Rulesets.Osu.Difficulty
{
public class OsuDifficultyCalculator : DifficultyCalculator
{
- private const double star_rating_multiplier = 0.0265;
-
public override int Version => 20251020;
public OsuDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap)
@@ -46,7 +46,7 @@ public static double CalculateRateAdjustedOverallDifficulty(double overallDiffic
return (79.5 - hitWindowGreat) / 6;
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
if (beatmap.HitObjects.Count == 0)
return new OsuDifficultyAttributes { Mods = mods };
@@ -55,24 +55,30 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
var aimWithoutSliders = skills.OfType().Single(a => !a.IncludeSliders);
var speed = skills.OfType().Single();
var flashlight = skills.OfType().SingleOrDefault();
+ var reading = skills.OfType().Single();
- double speedNotes = speed.RelevantNoteCount();
+ double aimDifficultyValue = aim.DifficultyValue();
+ double aimNoSlidersDifficultyValue = aimWithoutSliders.DifficultyValue();
+ double speedDifficultyValue = speed.DifficultyValue();
+ double readingDifficultyValue = reading.DifficultyValue();
+
+ double[] aimMissPenaltyCoefficients = aim.GetMissPenaltyCoefficients();
+ double speedDifficultStrainCount = speed.CountTopWeightedObjectDifficulties(speedDifficultyValue);
+ double readingDifficultNoteCount = reading.CountTopWeightedObjectDifficulties(readingDifficultyValue);
- double aimDifficultStrainCount = aim.CountTopWeightedStrains();
- double speedDifficultStrainCount = speed.CountTopWeightedStrains();
+ double speedNotes = speed.RelevantNoteCount();
- double aimNoSlidersTopWeightedSliderCount = aimWithoutSliders.CountTopWeightedSliders();
- double aimNoSlidersDifficultStrainCount = aimWithoutSliders.CountTopWeightedStrains();
+ double aimNoSlidersTopWeightedSliderCount = aimWithoutSliders.CountTopWeightedSliders(aimNoSlidersDifficultyValue);
+ double aimNoSlidersDifficultStrainCount = aimWithoutSliders.CountTopWeightedStrains(aimNoSlidersDifficultyValue);
double aimTopWeightedSliderFactor = aimNoSlidersTopWeightedSliderCount / Math.Max(1, aimNoSlidersDifficultStrainCount - aimNoSlidersTopWeightedSliderCount);
- double speedTopWeightedSliderCount = speed.CountTopWeightedSliders();
+ double speedTopWeightedSliderCount = speed.CountTopWeightedSliders(speedDifficultyValue);
double speedTopWeightedSliderFactor = speedTopWeightedSliderCount / Math.Max(1, speedDifficultStrainCount - speedTopWeightedSliderCount);
double difficultSliders = aim.GetDifficultSliders();
- double approachRate = CalculateRateAdjustedApproachRate(beatmap.Difficulty.ApproachRate, clockRate);
- double overallDifficulty = CalculateRateAdjustedOverallDifficulty(beatmap.Difficulty.OverallDifficulty, clockRate);
+ double overallDifficulty = CalculateRateAdjustedOverallDifficulty(beatmap.Difficulty.OverallDifficulty, ModUtils.CalculateRateWithMods(mods));
int hitCircleCount = beatmap.HitObjects.Count(h => h is HitCircle);
int sliderCount = beatmap.HitObjects.Count(h => h is Slider);
@@ -80,19 +86,15 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
int totalHits = beatmap.HitObjects.Count;
- double drainRate = beatmap.Difficulty.DrainRate;
+ double sliderFactor = aimDifficultyValue > 0
+ ? OsuRatingCalculator.CalculateDifficultyRating(aimNoSlidersDifficultyValue) / OsuRatingCalculator.CalculateDifficultyRating(aimDifficultyValue)
+ : 1;
- double aimDifficultyValue = aim.DifficultyValue();
- double aimNoSlidersDifficultyValue = aimWithoutSliders.DifficultyValue();
- double speedDifficultyValue = speed.DifficultyValue();
-
- double mechanicalDifficultyRating = calculateMechanicalDifficultyRating(aimDifficultyValue, speedDifficultyValue);
- double sliderFactor = aimDifficultyValue > 0 ? OsuRatingCalculator.CalculateDifficultyRating(aimNoSlidersDifficultyValue) / OsuRatingCalculator.CalculateDifficultyRating(aimDifficultyValue) : 1;
-
- var osuRatingCalculator = new OsuRatingCalculator(mods, totalHits, approachRate, overallDifficulty, mechanicalDifficultyRating, sliderFactor);
+ var osuRatingCalculator = new OsuRatingCalculator(mods, totalHits, overallDifficulty);
double aimRating = osuRatingCalculator.ComputeAimRating(aimDifficultyValue);
double speedRating = osuRatingCalculator.ComputeSpeedRating(speedDifficultyValue);
+ double readingRating = osuRatingCalculator.ComputeReadingRating(readingDifficultyValue);
double flashlightRating = 0.0;
@@ -100,21 +102,18 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
flashlightRating = osuRatingCalculator.ComputeFlashlightRating(flashlight.DifficultyValue());
double sliderNestedScorePerObject = LegacyScoreUtils.CalculateNestedScorePerObject(beatmap, totalHits);
- double legacyScoreBaseMultiplier = LegacyScoreUtils.CalculateDifficultyPeppyStars(beatmap);
+ double legacyScoreBaseMultiplier = LegacyScoreUtils.CalculateDifficultyPeppyStars(WorkingBeatmap.Beatmap);
var simulator = new OsuLegacyScoreSimulator();
var scoreAttributes = simulator.Simulate(WorkingBeatmap, beatmap);
- double baseAimPerformance = OsuStrainSkill.DifficultyToPerformance(aimRating);
- double baseSpeedPerformance = OsuStrainSkill.DifficultyToPerformance(speedRating);
+ double baseAimPerformance = TimeSkill.DifficultyToPerformance(aimRating);
+ double baseSpeedPerformance = HarmonicSkill.DifficultyToPerformance(speedRating);
+ double baseReadingPerformance = HarmonicSkill.DifficultyToPerformance(readingRating);
double baseFlashlightPerformance = Flashlight.DifficultyToPerformance(flashlightRating);
+ double baseCognitionPerformance = SumCognitionDifficulty(baseReadingPerformance, baseFlashlightPerformance);
- double basePerformance =
- Math.Pow(
- Math.Pow(baseAimPerformance, 1.1) +
- Math.Pow(baseSpeedPerformance, 1.1) +
- Math.Pow(baseFlashlightPerformance, 1.1), 1.0 / 1.1
- );
+ double basePerformance = DifficultyCalculationUtils.Norm(OsuPerformanceCalculator.PERFORMANCE_NORM_EXPONENT, baseAimPerformance, baseSpeedPerformance, baseCognitionPerformance);
double starRating = calculateStarRating(basePerformance);
@@ -127,12 +126,15 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
SpeedDifficulty = speedRating,
SpeedNoteCount = speedNotes,
FlashlightDifficulty = flashlightRating,
+ ReadingDifficulty = readingRating,
SliderFactor = sliderFactor,
- AimDifficultStrainCount = aimDifficultStrainCount,
+ AimMissPenaltyCoefficientA = aimMissPenaltyCoefficients.ElementAtOrDefault(0),
+ AimMissPenaltyCoefficientB = aimMissPenaltyCoefficients.ElementAtOrDefault(1),
+ AimMissPenaltyCoefficientC = aimMissPenaltyCoefficients.ElementAtOrDefault(2),
SpeedDifficultStrainCount = speedDifficultStrainCount,
+ ReadingDifficultNoteCount = readingDifficultNoteCount,
AimTopWeightedSliderFactor = aimTopWeightedSliderFactor,
SpeedTopWeightedSliderFactor = speedTopWeightedSliderFactor,
- DrainRate = drainRate,
MaxCombo = beatmap.GetMaxCombo(),
HitCircleCount = hitCircleCount,
SliderCount = sliderCount,
@@ -145,28 +147,29 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
return attributes;
}
- private double calculateMechanicalDifficultyRating(double aimDifficultyValue, double speedDifficultyValue)
+ public static double SumCognitionDifficulty(double reading, double flashlight)
{
- double aimValue = OsuStrainSkill.DifficultyToPerformance(OsuRatingCalculator.CalculateDifficultyRating(aimDifficultyValue));
- double speedValue = OsuStrainSkill.DifficultyToPerformance(OsuRatingCalculator.CalculateDifficultyRating(speedDifficultyValue));
+ if (reading <= 0)
+ return flashlight;
- double totalValue = Math.Pow(Math.Pow(aimValue, 1.1) + Math.Pow(speedValue, 1.1), 1 / 1.1);
+ if (flashlight <= 0)
+ return reading;
- return calculateStarRating(totalValue);
+ // Nerf flashlight value in cognition sum when reading is greater than flashlight
+ return DifficultyCalculationUtils.Norm(OsuPerformanceCalculator.PERFORMANCE_NORM_EXPONENT, reading, flashlight * Math.Clamp(flashlight / reading, 0.25, 1.0));
}
private double calculateStarRating(double basePerformance)
{
- if (basePerformance <= 0.00001)
- return 0;
-
- return Math.Cbrt(OsuPerformanceCalculator.PERFORMANCE_BASE_MULTIPLIER) * star_rating_multiplier * (Math.Cbrt(100000 / Math.Pow(2, 1 / 1.1) * basePerformance) + 4);
+ return Math.Cbrt(basePerformance * OsuPerformanceCalculator.PERFORMANCE_BASE_MULTIPLIER);
}
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate)
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods)
{
List objects = new List();
+ double clockRate = ModUtils.CalculateRateWithMods(mods);
+
// The first jump is formed by the first two hitobjects of the map.
// If the map has less than two OsuHitObjects, the enumerator will not return anything.
for (int i = 1; i < beatmap.HitObjects.Count; i++)
@@ -177,13 +180,14 @@ protected override IEnumerable CreateDifficultyHitObjects(I
return objects;
}
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate)
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods)
{
var skills = new List
{
new Aim(mods, true),
new Aim(mods, false),
- new Speed(mods)
+ new Speed(mods),
+ new Reading(mods)
};
if (mods.Any(h => h is OsuModFlashlight))
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuLegacyScoreMissCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuLegacyScoreMissCalculator.cs
index 0d406ea72a60..8bde33d292c1 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuLegacyScoreMissCalculator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuLegacyScoreMissCalculator.cs
@@ -115,9 +115,13 @@ private double calculateMaximumComboBasedMissCount()
double missCount = 0;
+ // If sliders in the map are hard - it's likely for player to drop sliderends
+ // If map has easy sliders - it's more likely for player to sliderbreak
+ double likelyMissedSliderendPortion = 0.04 + 0.06 * Math.Pow(Math.Min(attributes.AimTopWeightedSliderFactor, 1), 2);
+
// Consider that full combo is maximum combo minus dropped slider tails since they don't contribute to combo but also don't break it
- // In classic scores we can't know the amount of dropped sliders so we estimate to 10% of all sliders on the map
- double fullComboThreshold = attributes.MaxCombo - 0.1 * attributes.SliderCount;
+ // In classic scores we can't know the amount of dropped sliders so we estimate it
+ double fullComboThreshold = attributes.MaxCombo - Math.Min(4 + likelyMissedSliderendPortion * attributes.SliderCount, attributes.SliderCount);
if (score.MaxCombo < fullComboThreshold)
missCount = Math.Pow(fullComboThreshold / Math.Max(1.0, score.MaxCombo), 2.5);
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs
index 8577eff11ff5..e4a64cd81d6b 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs
@@ -21,6 +21,9 @@ public class OsuPerformanceAttributes : PerformanceAttributes
[JsonProperty("flashlight")]
public double Flashlight { get; set; }
+ [JsonProperty("reading")]
+ public double Reading { get; set; }
+
[JsonProperty("effective_miss_count")]
public double EffectiveMissCount { get; set; }
@@ -48,6 +51,7 @@ public override IEnumerable GetAttributesForDisplay
yield return new PerformanceDisplayAttribute(nameof(Speed), "Speed", Speed);
yield return new PerformanceDisplayAttribute(nameof(Accuracy), "Accuracy", Accuracy);
yield return new PerformanceDisplayAttribute(nameof(Flashlight), "Flashlight Bonus", Flashlight);
+ yield return new PerformanceDisplayAttribute(nameof(Reading), "Reading", Reading);
}
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs
index 741ddb3d4fdd..6776fe1d06ee 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs
@@ -9,6 +9,7 @@
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Scoring;
using osu.Game.Rulesets.Difficulty;
+using osu.Game.Rulesets.Difficulty.Skills;
using osu.Game.Rulesets.Osu.Difficulty.Skills;
using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Scoring;
@@ -19,7 +20,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty
{
public class OsuPerformanceCalculator : PerformanceCalculator
{
- public const double PERFORMANCE_BASE_MULTIPLIER = 1.14; // This is being adjusted to keep the final pp value scaled around what it used to be when changing things.
+ public const double PERFORMANCE_BASE_MULTIPLIER = 1.12; // This is being adjusted to keep the final pp value scaled around what it used to be when changing things.
+ public const double PERFORMANCE_NORM_EXPONENT = 1.1;
private bool usingClassicSliderAccuracy;
private bool usingScoreV2;
@@ -50,14 +52,18 @@ public class OsuPerformanceCalculator : PerformanceCalculator
private double greatHitWindow;
private double okHitWindow;
private double mehHitWindow;
+
private double overallDifficulty;
private double approachRate;
+ private double drainRate;
private double? speedDeviation;
private double aimEstimatedSliderBreaks;
private double speedEstimatedSliderBreaks;
+ public static double DifficultyToPerformance(double difficulty) => 4.0 * Math.Pow(difficulty, 3.0);
+
public OsuPerformanceCalculator()
: base(new OsuRuleset())
{
@@ -95,11 +101,12 @@ protected override PerformanceAttributes CreatePerformanceAttributes(ScoreInfo s
approachRate = OsuDifficultyCalculator.CalculateRateAdjustedApproachRate(difficulty.ApproachRate, clockRate);
overallDifficulty = OsuDifficultyCalculator.CalculateRateAdjustedOverallDifficulty(difficulty.OverallDifficulty, clockRate);
+ drainRate = difficulty.DrainRate;
double comboBasedEstimatedMissCount = calculateComboBasedEstimatedMissCount(osuAttributes);
double? scoreBasedEstimatedMissCount = null;
- if (usingClassicSliderAccuracy && score.LegacyTotalScore != null)
+ if (usingClassicSliderAccuracy && !usingScoreV2 && score.LegacyTotalScore != null)
{
var legacyScoreMissCalculator = new OsuLegacyScoreMissCalculator(score, osuAttributes);
scoreBasedEstimatedMissCount = legacyScoreMissCalculator.Calculate();
@@ -140,15 +147,12 @@ protected override PerformanceAttributes CreatePerformanceAttributes(ScoreInfo s
double aimValue = computeAimValue(score, osuAttributes);
double speedValue = computeSpeedValue(score, osuAttributes);
double accuracyValue = computeAccuracyValue(score, osuAttributes);
+
+ double readingValue = computeReadingValue(osuAttributes);
double flashlightValue = computeFlashlightValue(score, osuAttributes);
+ double cognitionValue = OsuDifficultyCalculator.SumCognitionDifficulty(readingValue, flashlightValue);
- double totalValue =
- Math.Pow(
- Math.Pow(aimValue, 1.1) +
- Math.Pow(speedValue, 1.1) +
- Math.Pow(accuracyValue, 1.1) +
- Math.Pow(flashlightValue, 1.1), 1.0 / 1.1
- ) * multiplier;
+ double totalValue = DifficultyCalculationUtils.Norm(PERFORMANCE_NORM_EXPONENT, aimValue, speedValue, accuracyValue, cognitionValue) * multiplier;
return new OsuPerformanceAttributes
{
@@ -156,6 +160,7 @@ protected override PerformanceAttributes CreatePerformanceAttributes(ScoreInfo s
Speed = speedValue,
Accuracy = accuracyValue,
Flashlight = flashlightValue,
+ Reading = readingValue,
EffectiveMissCount = effectiveMissCount,
ComboBasedEstimatedMissCount = comboBasedEstimatedMissCount,
ScoreBasedEstimatedMissCount = scoreBasedEstimatedMissCount,
@@ -194,11 +199,7 @@ private double computeAimValue(ScoreInfo score, OsuDifficultyAttributes attribut
aimDifficulty *= sliderNerfFactor;
}
- double aimValue = OsuStrainSkill.DifficultyToPerformance(aimDifficulty);
-
- double lengthBonus = 0.95 + 0.4 * Math.Min(1.0, totalHits / 2000.0) +
- (totalHits > 2000 ? Math.Log10(totalHits / 2000.0) * 0.5 : 0.0);
- aimValue *= lengthBonus;
+ double aimValue = DifficultyToPerformance(aimDifficulty);
if (effectiveMissCount > 0)
{
@@ -206,15 +207,25 @@ private double computeAimValue(ScoreInfo score, OsuDifficultyAttributes attribut
double relevantMissCount = Math.Min(effectiveMissCount + aimEstimatedSliderBreaks, totalImperfectHits + countSliderTickMiss);
- aimValue *= calculateMissPenalty(relevantMissCount, attributes.AimDifficultStrainCount);
+ double[] coefficients =
+ [
+ attributes.AimMissPenaltyCoefficientA,
+ attributes.AimMissPenaltyCoefficientB,
+ attributes.AimMissPenaltyCoefficientC,
+ // We can derive the 4th coefficient from the first third, since at x = 1 our polynomial is equal to the sum of the coefficients,
+ // and the relevant miss count there is log(totalHits - 1) since our polynomial uses log miss counts.
+ Math.Log(totalHits + 1) - attributes.AimMissPenaltyCoefficientA - attributes.AimMissPenaltyCoefficientB - attributes.AimMissPenaltyCoefficientC
+ ];
+
+ aimValue *= calculatePolynomialMissPenalty(relevantMissCount, coefficients);
}
// TC bonuses are excluded when blinds is present as the increased visual difficulty is unimportant when notes cannot be seen.
if (score.Mods.Any(m => m is OsuModBlinds))
- aimValue *= 1.3 + (totalHits * (0.0016 / (1 + 2 * effectiveMissCount)) * Math.Pow(accuracy, 16)) * (1 - 0.003 * attributes.DrainRate * attributes.DrainRate);
+ aimValue *= 1.3 + (totalHits * (0.0016 / (1 + 2 * effectiveMissCount)) * Math.Pow(accuracy, 16)) * (1 - 0.003 * drainRate * drainRate);
else if (score.Mods.Any(m => m is OsuModTraceable))
{
- aimValue *= 1.0 + OsuRatingCalculator.CalculateVisibilityBonus(score.Mods, approachRate, sliderFactor: attributes.SliderFactor);
+ aimValue *= 1.0 + calculateTraceableBonus(attributes.SliderFactor);
}
aimValue *= accuracy;
@@ -227,11 +238,7 @@ private double computeSpeedValue(ScoreInfo score, OsuDifficultyAttributes attrib
if (score.Mods.Any(h => h is OsuModRelax) || speedDeviation == null)
return 0.0;
- double speedValue = OsuStrainSkill.DifficultyToPerformance(attributes.SpeedDifficulty);
-
- double lengthBonus = 0.95 + 0.4 * Math.Min(1.0, totalHits / 2000.0) +
- (totalHits > 2000 ? Math.Log10(totalHits / 2000.0) * 0.5 : 0.0);
- speedValue *= lengthBonus;
+ double speedValue = HarmonicSkill.DifficultyToPerformance(attributes.SpeedDifficulty);
if (effectiveMissCount > 0)
{
@@ -239,32 +246,27 @@ private double computeSpeedValue(ScoreInfo score, OsuDifficultyAttributes attrib
double relevantMissCount = Math.Min(effectiveMissCount + speedEstimatedSliderBreaks, totalImperfectHits + countSliderTickMiss);
- speedValue *= calculateMissPenalty(relevantMissCount, attributes.SpeedDifficultStrainCount);
+ speedValue *= calculateStrainCountMissPenalty(relevantMissCount, attributes.SpeedDifficultStrainCount);
}
- // TC bonuses are excluded when blinds is present as the increased visual difficulty is unimportant when notes cannot be seen.
if (score.Mods.Any(m => m is OsuModBlinds))
{
// Increasing the speed value by object count for Blinds isn't ideal, so the minimum buff is given.
speedValue *= 1.12;
}
- else if (score.Mods.Any(m => m is OsuModTraceable))
- {
- speedValue *= 1.0 + OsuRatingCalculator.CalculateVisibilityBonus(score.Mods, approachRate);
- }
double speedHighDeviationMultiplier = calculateSpeedHighDeviationNerf(attributes);
speedValue *= speedHighDeviationMultiplier;
- // Calculate accuracy assuming the worst case scenario
- double relevantTotalDiff = Math.Max(0, totalHits - attributes.SpeedNoteCount);
- double relevantCountGreat = Math.Max(0, countGreat - relevantTotalDiff);
- double relevantCountOk = Math.Max(0, countOk - Math.Max(0, relevantTotalDiff - countGreat));
- double relevantCountMeh = Math.Max(0, countMeh - Math.Max(0, relevantTotalDiff - countGreat - countOk));
- double relevantAccuracy = attributes.SpeedNoteCount == 0 ? 0 : (relevantCountGreat * 6.0 + relevantCountOk * 2.0 + relevantCountMeh) / (attributes.SpeedNoteCount * 6.0);
+ // An effective hit window is created based on the speed SR. The higher the speed difficulty, the shorter the hit window.
+ // For example, a speed SR of 4.0 leads to an effective hit window of 20ms, which is OD 10.
+ double effectiveHitWindow = 20 * Math.Pow(4 / attributes.SpeedDifficulty, 0.35);
- // Scale the speed value with accuracy and OD.
- speedValue *= Math.Pow((accuracy + relevantAccuracy) / 2.0, (14.5 - overallDifficulty) / 2);
+ // Find the proportion of 300s on speed notes assuming the hit window was the effective hit window.
+ double effectiveAccuracy = DifficultyCalculationUtils.Erf(effectiveHitWindow / (double)speedDeviation);
+
+ // Scale speed value by normalized accuracy.
+ speedValue *= Math.Pow(effectiveAccuracy, 2);
return speedValue;
}
@@ -294,12 +296,14 @@ private double computeAccuracyValue(ScoreInfo score, OsuDifficultyAttributes att
double accuracyValue = Math.Pow(1.52163, overallDifficulty) * Math.Pow(betterAccuracyPercentage, 24) * 2.83;
// Bonus for many hitcircles - it's harder to keep good accuracy up for longer.
- accuracyValue *= Math.Min(1.15, Math.Pow(amountHitObjectsWithAccuracy / 1000.0, 0.3));
+ accuracyValue *= amountHitObjectsWithAccuracy < 1000
+ ? Math.Pow(amountHitObjectsWithAccuracy / 1000.0, 0.3)
+ : Math.Pow(amountHitObjectsWithAccuracy / 1000.0, 0.1);
// Increasing the accuracy value by object count for Blinds isn't ideal, so the minimum buff is given.
if (score.Mods.Any(m => m is OsuModBlinds))
accuracyValue *= 1.14;
- else if (score.Mods.Any(m => m is OsuModHidden || m is OsuModTraceable))
+ else if (score.Mods.Any(m => m is OsuModTraceable))
{
// Decrease bonus for AR > 10
accuracyValue *= 1 + 0.08 * DifficultyCalculationUtils.ReverseLerp(approachRate, 11.5, 10);
@@ -330,6 +334,19 @@ private double computeFlashlightValue(ScoreInfo score, OsuDifficultyAttributes a
return flashlightValue;
}
+ private double computeReadingValue(OsuDifficultyAttributes attributes)
+ {
+ double readingValue = HarmonicSkill.DifficultyToPerformance(attributes.ReadingDifficulty);
+
+ if (effectiveMissCount > 0)
+ readingValue *= calculateStrainCountMissPenalty(effectiveMissCount + aimEstimatedSliderBreaks, attributes.ReadingDifficultNoteCount);
+
+ // Scale the reading value with accuracy _harshly_.
+ readingValue *= Math.Pow(accuracy, 3);
+
+ return readingValue;
+ }
+
private double calculateComboBasedEstimatedMissCount(OsuDifficultyAttributes attributes)
{
if (attributes.SliderCount <= 0)
@@ -339,9 +356,13 @@ private double calculateComboBasedEstimatedMissCount(OsuDifficultyAttributes att
if (usingClassicSliderAccuracy)
{
+ // If sliders in the map are hard - it's likely for player to drop sliderends
+ // If map has easy sliders - it's more likely for player to sliderbreak
+ double likelyMissedSliderendPortion = 0.04 + 0.06 * Math.Pow(Math.Min(attributes.AimTopWeightedSliderFactor, 1), 2);
+
// Consider that full combo is maximum combo minus dropped slider tails since they don't contribute to combo but also don't break it
- // In classic scores we can't know the amount of dropped sliders so we estimate to 10% of all sliders on the map
- double fullComboThreshold = attributes.MaxCombo - 0.1 * attributes.SliderCount;
+ // In classic scores we can't know the amount of dropped sliders so we estimate it
+ double fullComboThreshold = attributes.MaxCombo - Math.Min(4 + likelyMissedSliderendPortion * attributes.SliderCount, attributes.SliderCount);
if (scoreMaxCombo < fullComboThreshold)
missCount = fullComboThreshold / Math.Max(1.0, scoreMaxCombo);
@@ -470,7 +491,7 @@ private double calculateSpeedHighDeviationNerf(OsuDifficultyAttributes attribute
if (speedDeviation == null)
return 0;
- double speedValue = OsuStrainSkill.DifficultyToPerformance(attributes.SpeedDifficulty);
+ double speedValue = HarmonicSkill.DifficultyToPerformance(attributes.SpeedDifficulty);
// Decides a point where the PP value achieved compared to the speed deviation is assumed to be tapped improperly. Any PP above this point is considered "excess" speed difficulty.
// This is used to cause PP above the cutoff to scale logarithmically towards the original speed value thus nerfing the value.
@@ -489,10 +510,40 @@ private double calculateSpeedHighDeviationNerf(OsuDifficultyAttributes attribute
return adjustedSpeedValue / speedValue;
}
- // Miss penalty assumes that a player will miss on the hardest parts of a map,
- // so we use the amount of relatively difficult sections to adjust miss penalty
- // to make it more punishing on maps with lower amount of hard sections.
- private double calculateMissPenalty(double missCount, double difficultStrainCount) => 0.96 / ((missCount / (4 * Math.Pow(Math.Log(difficultStrainCount), 0.94))) + 1);
+ ///
+ /// Calculates a visibility bonus that is applicable to Traceable.
+ ///
+ private double calculateTraceableBonus(double sliderFactor = 1)
+ {
+ // We want to reward slider aim less, more so at lower AR
+ double highApproachRateSliderVisibilityFactor = 0.5 + (Math.Pow(sliderFactor, 6) / 2);
+ double lowApproachRateSliderVisibilityFactor = Math.Pow(sliderFactor, 6);
+
+ // Start from normal curve, rewarding lower AR up to AR7
+ double traceableBonus = 0.0275;
+ traceableBonus += 0.025 * (12.0 - Math.Max(approachRate, 7)) * highApproachRateSliderVisibilityFactor;
+
+ // For AR up to 0 - reduce reward for very low ARs when object is visible
+ if (approachRate < 7)
+ traceableBonus += 0.025 * (7.0 - Math.Max(approachRate, 0)) * lowApproachRateSliderVisibilityFactor;
+
+ // Starting from AR0 - cap values so they won't grow to infinity
+ if (approachRate < 0)
+ traceableBonus += 0.025 * (1 - Math.Pow(1.5, approachRate)) * lowApproachRateSliderVisibilityFactor;
+
+ return traceableBonus;
+ }
+
+ // Due to the unavailability of miss location in PP, the following formulas assume that a player will miss on the hardest parts of a map.
+
+ // With the curve fitted miss penalty, we use a pre-computed curve of skill levels for each miss count, raised to the power of 1.5 as
+ // the multiple of the exponents on star rating and PP. This power should be changed if either SR or PP begin to use a different exponent.
+ private double calculatePolynomialMissPenalty(double missCount, double[] coefficients) => Math.Pow(1 - PolynomialPenaltyUtils.GetPenaltyAt(coefficients, Math.Log(missCount + 1)), 1.89);
+
+ // With the strain count miss penalty, we use the amount of relatively difficult sections to adjust the miss penalty,
+ // to make it more punishing on maps with lower amount of hard sections. This formula is subject to balance.
+ private double calculateStrainCountMissPenalty(double missCount, double difficultStrainCount) => 0.93 / (missCount / (4 * Math.Log(difficultStrainCount)) + 1);
+
private double getComboScalingFactor(OsuDifficultyAttributes attributes) => attributes.MaxCombo <= 0 ? 1.0 : Math.Min(Math.Pow(scoreMaxCombo, 0.8) / Math.Pow(attributes.MaxCombo, 0.8), 1.0);
private int totalHits => countGreat + countOk + countMeh + countMiss;
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs
index 2a050c0920cf..9dc9b1afa430 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs
@@ -15,19 +15,13 @@ public class OsuRatingCalculator
private readonly Mod[] mods;
private readonly int totalHits;
- private readonly double approachRate;
private readonly double overallDifficulty;
- private readonly double mechanicalDifficultyRating;
- private readonly double sliderFactor;
- public OsuRatingCalculator(Mod[] mods, int totalHits, double approachRate, double overallDifficulty, double mechanicalDifficultyRating, double sliderFactor)
+ public OsuRatingCalculator(Mod[] mods, int totalHits, double overallDifficulty)
{
this.mods = mods;
this.totalHits = totalHits;
- this.approachRate = approachRate;
this.overallDifficulty = overallDifficulty;
- this.mechanicalDifficultyRating = mechanicalDifficultyRating;
- this.sliderFactor = sliderFactor;
}
public double ComputeAimRating(double aimDifficultyValue)
@@ -35,13 +29,7 @@ public double ComputeAimRating(double aimDifficultyValue)
if (mods.Any(m => m is OsuModAutopilot))
return 0;
- double aimRating = CalculateDifficultyRating(aimDifficultyValue);
-
- if (mods.Any(m => m is OsuModTouchDevice))
- aimRating = Math.Pow(aimRating, 0.8);
-
- if (mods.Any(m => m is OsuModRelax))
- aimRating *= 0.9;
+ double aimRating = Math.Pow(aimDifficultyValue, 0.63) * 0.02275;
if (mods.Any(m => m is OsuModMagnetised))
{
@@ -51,26 +39,6 @@ public double ComputeAimRating(double aimDifficultyValue)
double ratingMultiplier = 1.0;
- double approachRateLengthBonus = 0.95 + 0.4 * Math.Min(1.0, totalHits / 2000.0) +
- (totalHits > 2000 ? Math.Log10(totalHits / 2000.0) * 0.5 : 0.0);
-
- double approachRateFactor = 0.0;
- if (approachRate > 10.33)
- approachRateFactor = 0.3 * (approachRate - 10.33);
- else if (approachRate < 8.0)
- approachRateFactor = 0.05 * (8.0 - approachRate);
-
- if (mods.Any(h => h is OsuModRelax))
- approachRateFactor = 0.0;
-
- ratingMultiplier += approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR.
-
- if (mods.Any(m => m is OsuModHidden))
- {
- double visibilityFactor = calculateAimVisibilityFactor(approachRate);
- ratingMultiplier += CalculateVisibilityBonus(mods, approachRate, visibilityFactor, sliderFactor);
- }
-
// It is important to consider accuracy difficulty when scaling with accuracy.
ratingMultiplier *= 0.98 + Math.Pow(Math.Max(0, overallDifficulty), 2) / 2500;
@@ -94,29 +62,32 @@ public double ComputeSpeedRating(double speedDifficultyValue)
speedRating *= 1.0 - magnetisedStrength * 0.3;
}
- double ratingMultiplier = 1.0;
-
- double approachRateLengthBonus = 0.95 + 0.4 * Math.Min(1.0, totalHits / 2000.0) +
- (totalHits > 2000 ? Math.Log10(totalHits / 2000.0) * 0.5 : 0.0);
+ return speedRating;
+ }
- double approachRateFactor = 0.0;
- if (approachRate > 10.33)
- approachRateFactor = 0.3 * (approachRate - 10.33);
+ public double ComputeReadingRating(double readingDifficultyValue)
+ {
+ double readingRating = CalculateDifficultyRating(readingDifficultyValue);
- if (mods.Any(m => m is OsuModAutopilot))
- approachRateFactor = 0.0;
+ if (mods.Any(m => m is OsuModTouchDevice))
+ readingRating = Math.Pow(readingRating, 0.8);
- ratingMultiplier += approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR.
+ if (mods.Any(m => m is OsuModRelax))
+ readingRating *= 0.6;
+ else if (mods.Any(m => m is OsuModAutopilot))
+ readingRating *= 0.3;
- if (mods.Any(m => m is OsuModHidden))
+ if (mods.Any(m => m is OsuModMagnetised))
{
- double visibilityFactor = calculateSpeedVisibilityFactor(approachRate);
- ratingMultiplier += CalculateVisibilityBonus(mods, approachRate, visibilityFactor);
+ float magnetisedStrength = mods.OfType().First().AttractionStrength.Value;
+ readingRating *= 1.0 - magnetisedStrength;
}
- ratingMultiplier *= 0.95 + Math.Pow(Math.Max(0, overallDifficulty), 2) / 750;
+ double ratingMultiplier = 1.0;
+
+ ratingMultiplier *= 0.75 + Math.Pow(Math.Max(0, overallDifficulty), 2.2) / 800;
- return speedRating * Math.Cbrt(ratingMultiplier);
+ return readingRating * Math.Cbrt(ratingMultiplier);
}
public double ComputeFlashlightRating(double flashlightDifficultyValue)
@@ -158,56 +129,6 @@ public double ComputeFlashlightRating(double flashlightDifficultyValue)
return flashlightRating * Math.Sqrt(ratingMultiplier);
}
- private double calculateAimVisibilityFactor(double approachRate)
- {
- const double ar_factor_end_point = 11.5;
-
- double mechanicalDifficultyFactor = DifficultyCalculationUtils.ReverseLerp(mechanicalDifficultyRating, 5, 10);
- double arFactorStartingPoint = double.Lerp(9, 10.33, mechanicalDifficultyFactor);
-
- return DifficultyCalculationUtils.ReverseLerp(approachRate, ar_factor_end_point, arFactorStartingPoint);
- }
-
- private double calculateSpeedVisibilityFactor(double approachRate)
- {
- const double ar_factor_end_point = 11.5;
-
- double mechanicalDifficultyFactor = DifficultyCalculationUtils.ReverseLerp(mechanicalDifficultyRating, 5, 10);
- double arFactorStartingPoint = double.Lerp(10, 10.33, mechanicalDifficultyFactor);
-
- return DifficultyCalculationUtils.ReverseLerp(approachRate, ar_factor_end_point, arFactorStartingPoint);
- }
-
- ///
- /// Calculates a visibility bonus that is applicable to Hidden and Traceable.
- ///
- public static double CalculateVisibilityBonus(Mod[] mods, double approachRate, double visibilityFactor = 1, double sliderFactor = 1)
- {
- // NOTE: TC's effect is only noticeable in performance calculations until lazer mods are accounted for server-side.
- bool isAlwaysPartiallyVisible = mods.OfType().Any(m => m.OnlyFadeApproachCircles.Value) || mods.OfType().Any();
-
- // Start from normal curve, rewarding lower AR up to AR7
- // TC forcefully requires a lower reading bonus for now as it's post-applied in PP which makes it multiplicative with the regular AR bonuses
- // This means it has an advantage over HD, so we decrease the multiplier to compensate
- // This should be removed once we're able to apply TC bonuses in SR (depends on real-time difficulty calculations being possible)
- double readingBonus = (isAlwaysPartiallyVisible ? 0.025 : 0.04) * (12.0 - Math.Max(approachRate, 7));
-
- readingBonus *= visibilityFactor;
-
- // We want to reward slideraim on low AR less
- double sliderVisibilityFactor = Math.Pow(sliderFactor, 3);
-
- // For AR up to 0 - reduce reward for very low ARs when object is visible
- if (approachRate < 7)
- readingBonus += (isAlwaysPartiallyVisible ? 0.02 : 0.045) * (7.0 - Math.Max(approachRate, 0)) * sliderVisibilityFactor;
-
- // Starting from AR0 - cap values so they won't grow to infinity
- if (approachRate < 0)
- readingBonus += (isAlwaysPartiallyVisible ? 0.01 : 0.1) * (1 - Math.Pow(1.5, approachRate)) * sliderVisibilityFactor;
-
- return readingBonus;
- }
-
public static double CalculateDifficultyRating(double difficultyValue) => Math.Sqrt(difficultyValue) * difficulty_multiplier;
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs b/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs
index 5e9fc10ef877..221b2c637852 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs
@@ -35,6 +35,22 @@ public class OsuDifficultyHitObject : DifficultyHitObject
///
public readonly double AdjustedDeltaTime;
+ ///
+ /// Amount of time elapsed between lastDifficultyObject's and capped to a minimum of ms.
+ ///
+ public double LastObjectEndDeltaTime { get; private set; }
+
+ ///
+ /// Time (in ms) between the object first appearing and the time it needs to be clicked.
+ /// adjusted by clock rate.
+ ///
+ public readonly double Preempt;
+
+ ///
+ /// Normalised distance from the start position of the previous to the start position of this .
+ ///
+ public double JumpDistance { get; private set; }
+
///
/// Normalised distance from the "lazy" end position of the previous to the start position of this .
///
@@ -101,9 +117,10 @@ public class OsuDifficultyHitObject : DifficultyHitObject
public double? Angle { get; private set; }
///
- /// Retrieves the full hit window for a Great .
+ /// Angle of the vector created between current and current-1
+ /// normalised to consider symmetrical vectors in any axis to be the same angle.
///
- public double HitWindowGreat { get; private set; }
+ public double? NormalisedVectorAngle { get; private set; }
///
/// Selective bonus for maps with higher circle size.
@@ -121,17 +138,11 @@ public OsuDifficultyHitObject(HitObject hitObject, HitObject lastObject, double
// Capped to 25ms to prevent difficulty calculation breaking from simultaneous objects.
AdjustedDeltaTime = Math.Max(DeltaTime, MIN_DELTA_TIME);
+ LastObjectEndDeltaTime = lastDifficultyObject != null ? Math.Max(StartTime - lastDifficultyObject.EndTime, MIN_DELTA_TIME) : AdjustedDeltaTime;
- SmallCircleBonus = Math.Max(1.0, 1.0 + (30 - BaseObject.Radius) / 40);
+ SmallCircleBonus = Math.Max(1.0, 1.0 + (30 - BaseObject.Radius) / 70);
- if (BaseObject is Slider sliderObject)
- {
- HitWindowGreat = 2 * sliderObject.HeadCircle.HitWindows.WindowFor(HitResult.Great) / clockRate;
- }
- else
- {
- HitWindowGreat = 2 * BaseObject.HitWindows.WindowFor(HitResult.Great) / clockRate;
- }
+ Preempt = BaseObject.TimePreempt / clockRate;
computeSliderCursorPosition();
setDistances(clockRate);
@@ -148,7 +159,9 @@ public double OpacityAt(double time, bool hidden)
}
double fadeInStartTime = BaseObject.StartTime - BaseObject.TimePreempt;
- double fadeInDuration = BaseObject.TimeFadeIn;
+
+ // Equal to `OsuHitObject.TimeFadeIn` minus any adjustments from the HD mod.
+ double fadeInDuration = 400 * Math.Min(1, BaseObject.TimePreempt / OsuHitObject.PREEMPT_MIN);
if (hidden)
{
@@ -175,9 +188,12 @@ public double GetDoubletapness(OsuDifficultyHitObject? osuNextObj)
{
double currDeltaTime = Math.Max(1, DeltaTime);
double nextDeltaTime = Math.Max(1, osuNextObj.DeltaTime);
+
double deltaDifference = Math.Abs(nextDeltaTime - currDeltaTime);
+
double speedRatio = currDeltaTime / Math.Max(currDeltaTime, deltaDifference);
- double windowRatio = Math.Pow(Math.Min(1, currDeltaTime / HitWindowGreat), 2);
+ double windowRatio = Math.Pow(Math.Min(1, currDeltaTime / HitWindow(HitResult.Great)), 5);
+
return 1.0 - Math.Pow(speedRatio, 1 - windowRatio);
}
@@ -189,10 +205,12 @@ private void setDistances(double clockRate)
if (BaseObject is Slider currentSlider)
{
// Bonus for repeat sliders until a better per nested object strain system can be achieved.
- TravelDistance = LazyTravelDistance * Math.Pow(1 + currentSlider.RepeatCount / 2.5, 1.0 / 2.5);
+ TravelDistance = LazyTravelDistance * Math.Max(1, Math.Pow(currentSlider.RepeatCount, 0.3));
TravelTime = Math.Max(LazyTravelTime / clockRate, MIN_DELTA_TIME);
}
+ MinimumJumpTime = AdjustedDeltaTime;
+
// We don't need to calculate either angle or distance when one of the last->curr objects is a spinner
if (BaseObject is Spinner || LastObject is Spinner)
return;
@@ -202,8 +220,8 @@ private void setDistances(double clockRate)
Vector2 lastCursorPosition = lastDifficultyObject != null ? getEndCursorPosition(lastDifficultyObject) : LastObject.StackedPosition;
- LazyJumpDistance = (BaseObject.StackedPosition * scalingFactor - lastCursorPosition * scalingFactor).Length;
- MinimumJumpTime = AdjustedDeltaTime;
+ JumpDistance = (LastObject.StackedPosition - BaseObject.StackedPosition).Length * scalingFactor;
+ LazyJumpDistance = (BaseObject.StackedPosition - lastCursorPosition).Length * scalingFactor;
MinimumJumpDistance = LazyJumpDistance;
if (LastObject is Slider lastSlider && lastDifficultyObject != null)
@@ -239,15 +257,18 @@ private void setDistances(double clockRate)
if (lastLastDifficultyObject != null && lastLastDifficultyObject.BaseObject is not Spinner)
{
+ if (lastDifficultyObject!.BaseObject is Slider prevSlider && lastDifficultyObject.TravelDistance > 0)
+ lastCursorPosition = prevSlider.HeadCircle.StackedPosition;
+
Vector2 lastLastCursorPosition = getEndCursorPosition(lastLastDifficultyObject);
- Vector2 v1 = lastLastCursorPosition - LastObject.StackedPosition;
- Vector2 v2 = BaseObject.StackedPosition - lastCursorPosition;
+ double angle = calculateAngle(BaseObject.StackedPosition, lastCursorPosition, lastLastCursorPosition);
+ double sliderAngle = calculateSliderAngle(lastDifficultyObject!, lastLastCursorPosition);
- float dot = Vector2.Dot(v1, v2);
- float det = v1.X * v2.Y - v1.Y * v2.X;
+ Vector2 v = BaseObject.StackedPosition - lastCursorPosition;
+ NormalisedVectorAngle = Math.Atan2(Math.Abs(v.Y), Math.Abs(v.X));
- Angle = Math.Abs(Math.Atan2(det, dot));
+ Angle = Math.Min(angle, sliderAngle);
}
}
@@ -359,6 +380,30 @@ private void computeSliderCursorPosition()
}
}
+ private double calculateSliderAngle(OsuDifficultyHitObject lastDifficultyObject, Vector2 lastLastCursorPosition)
+ {
+ Vector2 lastCursorPosition = getEndCursorPosition(lastDifficultyObject);
+
+ if (lastDifficultyObject.BaseObject is Slider prevSlider && lastDifficultyObject.TravelDistance > 0)
+ {
+ OsuHitObject secondLastNestedObject = (OsuHitObject)prevSlider.NestedHitObjects[^2];
+ lastLastCursorPosition = secondLastNestedObject.StackedPosition;
+ }
+
+ return calculateAngle(BaseObject.StackedPosition, lastCursorPosition, lastLastCursorPosition);
+ }
+
+ private double calculateAngle(Vector2 currentPosition, Vector2 lastPosition, Vector2 lastLastPosition)
+ {
+ Vector2 v1 = lastLastPosition - lastPosition;
+ Vector2 v2 = currentPosition - lastPosition;
+
+ float dot = Vector2.Dot(v1, v2);
+ float det = v1.X * v2.Y - v1.Y * v2.X;
+
+ return Math.Abs(Math.Atan2(det, dot));
+ }
+
private Vector2 getEndCursorPosition(OsuDifficultyHitObject difficultyHitObject)
{
return difficultyHitObject.LazyEndPosition ?? difficultyHitObject.BaseObject.StackedPosition;
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs
index 5816d27a5e81..a9bad06d3f05 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs
@@ -5,9 +5,12 @@
using System.Collections.Generic;
using System.Linq;
using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Difficulty.Skills;
+using osu.Game.Rulesets.Difficulty.Utils;
using osu.Game.Rulesets.Mods;
-using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
-using osu.Game.Rulesets.Osu.Difficulty.Utils;
+using osu.Game.Rulesets.Osu.Difficulty.Evaluators.Aim;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Osu.Objects;
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
@@ -15,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
///
/// Represents the skill required to correctly aim at every object in the map with a uniform CircleSize and normalized distances.
///
- public class Aim : OsuStrainSkill
+ public class Aim : TimeSkill
{
public readonly bool IncludeSliders;
@@ -27,19 +30,45 @@ public Aim(Mod[] mods, bool includeSliders)
private double currentStrain;
- private double skillMultiplier => 26;
- private double strainDecayBase => 0.15;
+ private double skillMultiplierSnap => 355.0;
+ private double skillMultiplierAgility => 10.0;
+ private double skillMultiplierFlow => 1100;
+ private double skillMultiplierTotal => 1.05;
+ private double combinedSnapNormExponent => 1.2;
private readonly List sliderStrains = new List();
- private double strainDecay(double ms) => Math.Pow(strainDecayBase, ms / 1000);
+ protected override double HitProbability(double skill, double difficulty)
+ {
+ if (difficulty <= 0) return 1;
+ if (skill <= 0) return 0;
+
+ double baseDeviation = difficulty / skill;
+ // at what point does the player lose the ability to aim normally
+ // increasing this will like high misscount scores more than ringtone maps, and vice versa
+ const double limit_of_proportion = 0.727;
+ // how quickly does the player lose the ability to aim normally at the limit of proportion
+ // increasing this has a similar effect as increasing the limit of proportion, but it changes how significant the effect is across maps
+ const double breakdown_rate = 30;
+ double adjustedDeviation = baseDeviation + Math.Exp(breakdown_rate * (baseDeviation - limit_of_proportion));
+
+ return DifficultyCalculationUtils.Erf(1 / (Math.Sqrt(2) * adjustedDeviation));
+ }
- protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => currentStrain * strainDecay(time - current.Previous(0).StartTime);
+ private double strainDecay(double ms) => Math.Pow(0.2, ms / 1000);
protected override double StrainValueAt(DifficultyHitObject current)
{
- currentStrain *= strainDecay(current.DeltaTime);
- currentStrain += AimEvaluator.EvaluateDifficultyOf(current, IncludeSliders) * skillMultiplier;
+ double decay = strainDecay(((OsuDifficultyHitObject)current).AdjustedDeltaTime);
+
+ double snapDifficulty = SnapAimEvaluator.EvaluateDifficultyOf(current, IncludeSliders) * skillMultiplierSnap;
+ double agilityDifficulty = AgilityEvaluator.EvaluateDifficultyOf(current) * skillMultiplierAgility;
+ double flowDifficulty = FlowAimEvaluator.EvaluateDifficultyOf(current, IncludeSliders) * skillMultiplierFlow;
+
+ double totalDifficulty = calculateTotalValue(snapDifficulty, agilityDifficulty, flowDifficulty);
+
+ currentStrain *= decay;
+ currentStrain += totalDifficulty * (1 - decay);
if (current.BaseObject is Slider)
sliderStrains.Add(currentStrain);
@@ -47,6 +76,56 @@ protected override double StrainValueAt(DifficultyHitObject current)
return currentStrain;
}
+ private double calculateTotalValue(double snapDifficulty, double agilityDifficulty, double flowDifficulty)
+ {
+ // We compare flow to combined snap and agility because snap by itself doesn't have enough difficulty to be above flow on streams
+ // Agility on the other hand is supposed to measure the rate of cursor velocity changes while snapping
+ // So snapping every circle on a stream requires an enormous amount of agility at which point it's easier to flow
+ double combinedSnapDifficulty = DifficultyCalculationUtils.Norm(combinedSnapNormExponent, snapDifficulty, agilityDifficulty);
+
+ double pSnap = calculateSnapFlowProbability(flowDifficulty / combinedSnapDifficulty);
+ double pFlow = 1 - pSnap;
+
+ if (Mods.Any(m => m is OsuModTouchDevice))
+ {
+ // we don't adjust agility here since agility represents TD difficulty in a decent enough way
+ snapDifficulty = Math.Pow(snapDifficulty, 0.89);
+ combinedSnapDifficulty = DifficultyCalculationUtils.Norm(combinedSnapNormExponent, snapDifficulty, agilityDifficulty);
+ }
+
+ if (Mods.Any(m => m is OsuModRelax))
+ {
+ combinedSnapDifficulty *= 0.75;
+ flowDifficulty *= 0.6;
+ }
+
+ double totalDifficulty = combinedSnapDifficulty * pSnap + flowDifficulty * pFlow;
+
+ double totalStrain = totalDifficulty * skillMultiplierTotal;
+
+ return totalStrain;
+ }
+
+ // A function that turns the ratio of snap : flow into the probability of snapping/flowing
+ // It has the constraints:
+ // P(snap) + P(flow) = 1 (the object is always either snapped or flowed)
+ // P(snap) = f(snap/flow), P(flow) = f(flow/snap) (ie snap and flow are symmetric and reversible)
+ // Therefore: f(x) + f(1/x) = 1
+ // 0 <= f(x) <= 1 (cannot have negative or greater than 100% probability of snapping or flowing)
+ // This logistic function is a solution, which fits nicely with the general idea of interpolation and provides a tuneable constant
+ private static double calculateSnapFlowProbability(double ratio)
+ {
+ const double k = 7.27;
+
+ if (ratio == 0)
+ return 0;
+
+ if (double.IsNaN(ratio))
+ return 1;
+
+ return DifficultyCalculationUtils.Logistic(-k * Math.Log(ratio));
+ }
+
public double GetDifficultSliders()
{
if (sliderStrains.Count == 0)
@@ -60,6 +139,18 @@ public double GetDifficultSliders()
return sliderStrains.Sum(strain => 1.0 / (1.0 + Math.Exp(-(strain / maxSliderStrain * 12.0 - 6.0))));
}
- public double CountTopWeightedSliders() => OsuStrainUtils.CountTopWeightedSliders(sliderStrains, DifficultyValue());
+ public double CountTopWeightedSliders(double difficultyValue)
+ {
+ if (sliderStrains.Count == 0)
+ return 0;
+
+ double consistentTopStrain = difficultyValue * (1 - 0.9); // What would the top strain be if all strain values were identical
+
+ if (consistentTopStrain == 0)
+ return 0;
+
+ // Use a weighted sum of all strains. Constants are arbitrary and give nice values
+ return sliderStrains.Sum(s => DifficultyCalculationUtils.Logistic(s / consistentTopStrain, 0.88, 10, 1.1));
+ }
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs
index 6c839eac3fef..44c39cbb9cd0 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs
@@ -7,7 +7,6 @@
using osu.Game.Rulesets.Difficulty.Skills;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
-using osu.Game.Rulesets.Osu.Mods;
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
{
@@ -16,15 +15,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
///
public class Flashlight : StrainSkill
{
- private readonly bool hasHiddenMod;
-
public Flashlight(Mod[] mods)
: base(mods)
{
- hasHiddenMod = mods.Any(m => m is OsuModHidden);
}
- private double skillMultiplier => 0.05512;
+ private double skillMultiplier => 0.056;
private double strainDecayBase => 0.15;
private double currentStrain;
@@ -36,7 +32,7 @@ public Flashlight(Mod[] mods)
protected override double StrainValueAt(DifficultyHitObject current)
{
currentStrain *= strainDecay(current.DeltaTime);
- currentStrain += FlashlightEvaluator.EvaluateDifficultyOf(current, hasHiddenMod) * skillMultiplier;
+ currentStrain += FlashlightEvaluator.EvaluateDifficultyOf(current, Mods) * skillMultiplier;
return currentStrain;
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/OsuStrainSkill.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/OsuStrainSkill.cs
deleted file mode 100644
index 6823512cef12..000000000000
--- a/osu.Game.Rulesets.Osu/Difficulty/Skills/OsuStrainSkill.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using System;
-using System.Collections.Generic;
-using osu.Game.Rulesets.Difficulty.Skills;
-using osu.Game.Rulesets.Mods;
-using System.Linq;
-using osu.Framework.Utils;
-
-namespace osu.Game.Rulesets.Osu.Difficulty.Skills
-{
- public abstract class OsuStrainSkill : StrainSkill
- {
- ///
- /// The number of sections with the highest strains, which the peak strain reductions will apply to.
- /// This is done in order to decrease their impact on the overall difficulty of the map for this skill.
- ///
- protected virtual int ReducedSectionCount => 10;
-
- ///
- /// The baseline multiplier applied to the section with the biggest strain.
- ///
- protected virtual double ReducedStrainBaseline => 0.75;
-
- protected OsuStrainSkill(Mod[] mods)
- : base(mods)
- {
- }
-
- public override double DifficultyValue()
- {
- double difficulty = 0;
- double weight = 1;
-
- // Sections with 0 strain are excluded to avoid worst-case time complexity of the following sort (e.g. /b/2351871).
- // These sections will not contribute to the difficulty.
- var peaks = GetCurrentStrainPeaks().Where(p => p > 0);
-
- List strains = peaks.OrderDescending().ToList();
-
- // We are reducing the highest strains first to account for extreme difficulty spikes
- for (int i = 0; i < Math.Min(strains.Count, ReducedSectionCount); i++)
- {
- double scale = Math.Log10(Interpolation.Lerp(1, 10, Math.Clamp((float)i / ReducedSectionCount, 0, 1)));
- strains[i] *= Interpolation.Lerp(ReducedStrainBaseline, 1.0, scale);
- }
-
- // Difficulty is the weighted sum of the highest strains from every section.
- // We're sorting from highest to lowest strain.
- foreach (double strain in strains.OrderDescending())
- {
- difficulty += strain * weight;
- weight *= DecayWeight;
- }
-
- return difficulty;
- }
-
- public static double DifficultyToPerformance(double difficulty) => Math.Pow(5.0 * Math.Max(1.0, difficulty / 0.0675) - 4.0, 3.0) / 100000.0;
- }
-}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs
new file mode 100644
index 000000000000..414cf1f1f9b8
--- /dev/null
+++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs
@@ -0,0 +1,100 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using osu.Framework.Utils;
+using osu.Game.Rulesets.Difficulty.Preprocessing;
+using osu.Game.Rulesets.Difficulty.Skills;
+using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Mods;
+using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
+using osu.Game.Rulesets.Osu.Mods;
+
+namespace osu.Game.Rulesets.Osu.Difficulty.Skills
+{
+ public class Reading : HarmonicSkill
+ {
+ private readonly List objectList = new List();
+
+ private readonly bool hasHiddenMod;
+
+ public Reading(Mod[] mods)
+ : base(mods)
+ {
+ hasHiddenMod = mods.OfType().Any(m => !m.OnlyFadeApproachCircles.Value);
+ }
+
+ private double currentDifficulty;
+
+ private double skillMultiplier => 2.5;
+ private double strainDecayBase => 0.8;
+
+ private double strainDecay(double ms) => Math.Pow(strainDecayBase, ms / 1000);
+
+ protected override double ObjectDifficultyOf(DifficultyHitObject current)
+ {
+ objectList.Add(current);
+
+ double decay = strainDecay(current.DeltaTime);
+
+ currentDifficulty *= decay;
+
+ currentDifficulty += ReadingEvaluator.EvaluateDifficultyOf(current, hasHiddenMod) * (1 - decay) * skillMultiplier;
+
+ return currentDifficulty;
+ }
+
+ protected override void ApplyDifficultyTransformation(double[] difficulties)
+ {
+ const double reduced_difficulty_base_line = 0.0; // Assume the first seconds are completely memorised
+
+ int reducedNoteCount = calculateReducedNoteCount();
+
+ for (int i = 0; i < Math.Min(difficulties.Length, reducedNoteCount); i++)
+ {
+ double scale = Math.Log10(Interpolation.Lerp(1, 10, Math.Clamp((double)i / reducedNoteCount, 0, 1)));
+ difficulties[i] *= Interpolation.Lerp(reduced_difficulty_base_line, 1.0, scale);
+ }
+ }
+
+ private int calculateReducedNoteCount()
+ {
+ const double reduced_difficulty_duration = 60 * 1000;
+
+ if (objectList.Count == 0)
+ return 0;
+
+ double reducedDuration = objectList.First().StartTime + reduced_difficulty_duration;
+
+ int reducedNoteCount = 0;
+
+ foreach (var hitObject in objectList)
+ {
+ if (hitObject.StartTime > reducedDuration)
+ break;
+
+ reducedNoteCount++;
+ }
+
+ return reducedNoteCount;
+ }
+
+ public override double CountTopWeightedObjectDifficulties(double difficultyValue)
+ {
+ if (ObjectDifficulties.Count == 0)
+ return 0.0;
+
+ if (NoteWeightSum == 0)
+ return 0.0;
+
+ double consistentTopNote = difficultyValue / NoteWeightSum; // What would the top difficulty be if all object difficulties were identical
+
+ if (consistentTopNote == 0)
+ return 0;
+
+ return ObjectDifficulties.Sum(d => DifficultyCalculationUtils.Logistic(d / consistentTopNote, 1.15, 5, 1.1));
+ }
+ }
+}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs
index 8fe3df43470e..cdd01187030d 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs
@@ -5,28 +5,30 @@
using System.Collections.Generic;
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Mods;
-using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
-using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
using osu.Game.Rulesets.Osu.Objects;
using System.Linq;
-using osu.Game.Rulesets.Osu.Difficulty.Utils;
+using osu.Game.Rulesets.Difficulty.Skills;
+using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Osu.Difficulty.Evaluators.Speed;
+using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
{
///
/// Represents the skill required to press keys with regards to keeping up with the speed at which objects need to be hit.
///
- public class Speed : OsuStrainSkill
+ public class Speed : HarmonicSkill
{
- private double skillMultiplier => 1.47;
- private double strainDecayBase => 0.3;
-
- private double currentStrain;
- private double currentRhythm;
+ private double skillMultiplier => 1.16;
private readonly List sliderStrains = new List();
- protected override int ReducedSectionCount => 5;
+ private double currentDifficulty;
+
+ private double strainDecayBase => 0.3;
+
+ protected override double HarmonicScale => 20;
+ protected override double DecayExponent => 0.9;
public Speed(Mod[] mods)
: base(mods)
@@ -35,35 +37,51 @@ public Speed(Mod[] mods)
private double strainDecay(double ms) => Math.Pow(strainDecayBase, ms / 1000);
- protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => (currentStrain * currentRhythm) * strainDecay(time - current.Previous(0).StartTime);
-
- protected override double StrainValueAt(DifficultyHitObject current)
+ protected override double ObjectDifficultyOf(DifficultyHitObject current)
{
- currentStrain *= strainDecay(((OsuDifficultyHitObject)current).AdjustedDeltaTime);
- currentStrain += SpeedEvaluator.EvaluateDifficultyOf(current, Mods) * skillMultiplier;
+ double decay = strainDecay(((OsuDifficultyHitObject)current).AdjustedDeltaTime);
+
+ currentDifficulty *= decay;
+ currentDifficulty += SpeedEvaluator.EvaluateDifficultyOf(current) * (1 - decay) * skillMultiplier;
- currentRhythm = RhythmEvaluator.EvaluateDifficultyOf(current);
+ double currentRhythm = RhythmEvaluator.EvaluateDifficultyOf(current);
- double totalStrain = currentStrain * currentRhythm;
+ double totalDifficulty = currentDifficulty * currentRhythm;
if (current.BaseObject is Slider)
- sliderStrains.Add(totalStrain);
+ sliderStrains.Add(totalDifficulty);
- return totalStrain;
+ return totalDifficulty;
}
public double RelevantNoteCount()
{
- if (ObjectStrains.Count == 0)
+ if (ObjectDifficulties.Count == 0)
return 0;
- double maxStrain = ObjectStrains.Max();
+ double maxStrain = ObjectDifficulties.Max();
+
if (maxStrain == 0)
return 0;
- return ObjectStrains.Sum(strain => 1.0 / (1.0 + Math.Exp(-(strain / maxStrain * 12.0 - 6.0))));
+ return ObjectDifficulties.Sum(strain => 1.0 / (1.0 + Math.Exp(-(strain / maxStrain * 12.0 - 6.0))));
}
- public double CountTopWeightedSliders() => OsuStrainUtils.CountTopWeightedSliders(sliderStrains, DifficultyValue());
+ public double CountTopWeightedSliders(double difficultyValue)
+ {
+ if (sliderStrains.Count == 0)
+ return 0;
+
+ if (NoteWeightSum == 0)
+ return 0.0;
+
+ double consistentTopNote = difficultyValue / NoteWeightSum; // What would the top note be if all note values were identical
+
+ if (consistentTopNote == 0)
+ return 0;
+
+ // Use a weighted sum of all notes. Constants are arbitrary and give nice values
+ return sliderStrains.Sum(s => DifficultyCalculationUtils.Logistic(s / consistentTopNote, 0.88, 10, 1.1));
+ }
}
}
diff --git a/osu.Game.Rulesets.Osu/Difficulty/Utils/OsuStrainUtils.cs b/osu.Game.Rulesets.Osu/Difficulty/Utils/OsuStrainUtils.cs
deleted file mode 100644
index 8a78192ee4cf..000000000000
--- a/osu.Game.Rulesets.Osu/Difficulty/Utils/OsuStrainUtils.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using System.Collections.Generic;
-using System.Linq;
-using osu.Game.Rulesets.Difficulty.Utils;
-
-namespace osu.Game.Rulesets.Osu.Difficulty.Utils
-{
- public static class OsuStrainUtils
- {
- public static double CountTopWeightedSliders(IReadOnlyCollection sliderStrains, double difficultyValue)
- {
- if (sliderStrains.Count == 0)
- return 0;
-
- double consistentTopStrain = difficultyValue / 10; // What would the top strain be if all strain values were identical
-
- if (consistentTopStrain == 0)
- return 0;
-
- // Use a weighted sum of all strains. Constants are arbitrary and give nice values
- return sliderStrains.Sum(s => DifficultyCalculationUtils.Logistic(s / consistentTopStrain, 0.88, 10, 1.1));
- }
- }
-}
diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/GridPlacementBlueprint.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/GridPlacementBlueprint.cs
index f54dc2c85b88..07856f11e0af 100644
--- a/osu.Game.Rulesets.Osu/Edit/Blueprints/GridPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/GridPlacementBlueprint.cs
@@ -25,7 +25,7 @@ private void load(OsuGridToolboxGroup gridToolboxGroup)
{
this.gridToolboxGroup = gridToolboxGroup;
originalOrigin = gridToolboxGroup.StartPosition.Value;
- originalSpacing = gridToolboxGroup.Spacing.Value;
+ originalSpacing = gridToolboxGroup.GridLineSpacing.Value;
originalRotation = gridToolboxGroup.GridLinesRotation.Value;
}
@@ -67,7 +67,7 @@ protected override bool OnMouseDown(MouseDownEvent e)
{
// Reset the grid to the default values.
gridToolboxGroup.StartPosition.Value = gridToolboxGroup.StartPosition.Default;
- gridToolboxGroup.Spacing.Value = gridToolboxGroup.Spacing.Default;
+ gridToolboxGroup.GridLineSpacing.Value = gridToolboxGroup.GridLineSpacing.Default;
if (!gridToolboxGroup.GridLinesRotation.Disabled)
gridToolboxGroup.GridLinesRotation.Value = gridToolboxGroup.GridLinesRotation.Default;
EndPlacement(true);
@@ -112,7 +112,7 @@ public override SnapResult UpdateTimeAndPosition(Vector2 screenSpacePosition, do
// Default to the original spacing and rotation if the distance is too small.
if (Vector2.Distance(gridToolboxGroup.StartPosition.Value, pos) < 2)
{
- gridToolboxGroup.Spacing.Value = originalSpacing;
+ gridToolboxGroup.GridLineSpacing.Value = originalSpacing;
if (!gridToolboxGroup.GridLinesRotation.Disabled)
gridToolboxGroup.GridLinesRotation.Value = originalRotation;
}
@@ -134,7 +134,7 @@ protected override void PopOut()
private void resetGridState()
{
gridToolboxGroup.StartPosition.Value = originalOrigin;
- gridToolboxGroup.Spacing.Value = originalSpacing;
+ gridToolboxGroup.GridLineSpacing.Value = originalSpacing;
if (!gridToolboxGroup.GridLinesRotation.Disabled)
gridToolboxGroup.GridLinesRotation.Value = originalRotation;
}
diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/SliderPlacementBlueprint.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/SliderPlacementBlueprint.cs
index d934eb5a9e9f..b5b4c8c87d5c 100644
--- a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/SliderPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/SliderPlacementBlueprint.cs
@@ -58,7 +58,7 @@ public partial class SliderPlacementBlueprint : HitObjectPlacementBlueprint
private readonly IncrementalBSplineBuilder bSplineBuilder = new IncrementalBSplineBuilder { Degree = 4 };
- protected override bool IsValidForPlacement => HitObject.Path.HasValidLengthForPlacement;
+ protected override bool IsValidForPlacement => base.IsValidForPlacement && (PlacementActive == PlacementState.Waiting || HitObject.Path.HasValidLengthForPlacement);
public SliderPlacementBlueprint()
: base(new Slider())
diff --git a/osu.Game.Rulesets.Osu/Edit/FreehandSliderToolboxGroup.cs b/osu.Game.Rulesets.Osu/Edit/FreehandSliderToolboxGroup.cs
index f17118ba349d..6f8c58e1e45e 100644
--- a/osu.Game.Rulesets.Osu/Edit/FreehandSliderToolboxGroup.cs
+++ b/osu.Game.Rulesets.Osu/Edit/FreehandSliderToolboxGroup.cs
@@ -5,8 +5,10 @@
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
+using osu.Game.Graphics.Containers;
using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Edit;
+using osuTK;
namespace osu.Game.Rulesets.Osu.Edit
{
@@ -42,25 +44,31 @@ public FreehandSliderToolboxGroup()
private readonly BindableInt displayTolerance = new BindableInt(90)
{
MinValue = 5,
- MaxValue = 100
+ MaxValue = 100,
+ Precision = 1,
};
private readonly BindableInt displayCornerThreshold = new BindableInt(40)
{
MinValue = 5,
- MaxValue = 100
+ MaxValue = 100,
+ Precision = 1,
};
private readonly BindableInt displayCircleThreshold = new BindableInt(30)
{
MinValue = 0,
- MaxValue = 100
+ MaxValue = 100,
+ Precision = 1,
};
private ExpandableSlider toleranceSlider = null!;
private ExpandableSlider cornerThresholdSlider = null!;
private ExpandableSlider circleThresholdSlider = null!;
+ [Resolved]
+ private IExpandingContainer? expandingContainer { get; set; }
+
[BackgroundDependencyLoader]
private void load()
{
@@ -68,15 +76,18 @@ private void load()
{
toleranceSlider = new ExpandableSlider
{
- Current = displayTolerance
+ Current = displayTolerance,
+ ExpandedLabelText = "Control point spacing",
},
cornerThresholdSlider = new ExpandableSlider
{
- Current = displayCornerThreshold
+ Current = displayCornerThreshold,
+ ExpandedLabelText = "Corner bias",
},
circleThresholdSlider = new ExpandableSlider
{
- Current = displayCircleThreshold
+ Current = displayCircleThreshold,
+ ExpandedLabelText = "Perfect curve bias"
}
};
}
@@ -88,24 +99,18 @@ protected override void LoadComplete()
displayTolerance.BindValueChanged(tolerance =>
{
toleranceSlider.ContractedLabelText = $"C. P. S.: {tolerance.NewValue:N0}";
- toleranceSlider.ExpandedLabelText = $"Control Point Spacing: {tolerance.NewValue:N0}";
-
Tolerance.Value = displayToInternalTolerance(tolerance.NewValue);
}, true);
displayCornerThreshold.BindValueChanged(threshold =>
{
- cornerThresholdSlider.ContractedLabelText = $"C. T.: {threshold.NewValue:N0}";
- cornerThresholdSlider.ExpandedLabelText = $"Corner Threshold: {threshold.NewValue:N0}";
-
+ cornerThresholdSlider.ContractedLabelText = $"C. B.: {threshold.NewValue:N0}";
CornerThreshold.Value = displayToInternalCornerThreshold(threshold.NewValue);
}, true);
displayCircleThreshold.BindValueChanged(threshold =>
{
- circleThresholdSlider.ContractedLabelText = $"P. C. T.: {threshold.NewValue:N0}";
- circleThresholdSlider.ExpandedLabelText = $"Perfect Curve Threshold: {threshold.NewValue:N0}";
-
+ circleThresholdSlider.ContractedLabelText = $"P. C. B.: {threshold.NewValue:N0}";
CircleThreshold.Value = displayToInternalCircleThreshold(threshold.NewValue);
}, true);
@@ -119,6 +124,11 @@ protected override void LoadComplete()
displayCircleThreshold.Value = internalToDisplayCircleThreshold(threshold.NewValue)
);
+ expandingContainer?.Expanded.BindValueChanged(v =>
+ {
+ Spacing = v.NewValue ? new Vector2(5) : new Vector2(15);
+ }, true);
+
float displayToInternalTolerance(float v) => v / 50f;
int internalToDisplayTolerance(float v) => (int)Math.Round(v * 50f);
diff --git a/osu.Game.Rulesets.Osu/Edit/OsuGridToolboxGroup.cs b/osu.Game.Rulesets.Osu/Edit/OsuGridToolboxGroup.cs
index 991d42c7b4c3..5cc25630aaca 100644
--- a/osu.Game.Rulesets.Osu/Edit/OsuGridToolboxGroup.cs
+++ b/osu.Game.Rulesets.Osu/Edit/OsuGridToolboxGroup.cs
@@ -38,7 +38,7 @@ public partial class OsuGridToolboxGroup : EditorToolboxGroup, IKeyBindingHandle
{
MinValue = 0f,
MaxValue = OsuPlayfield.BASE_SIZE.X,
- Precision = 0.01f,
+ Precision = 0.1f,
};
///
@@ -48,17 +48,17 @@ public partial class OsuGridToolboxGroup : EditorToolboxGroup, IKeyBindingHandle
{
MinValue = 0f,
MaxValue = OsuPlayfield.BASE_SIZE.Y,
- Precision = 0.01f,
+ Precision = 0.1f,
};
///
/// The spacing between grid lines.
///
- public BindableFloat Spacing { get; } = new BindableFloat(4f)
+ public BindableFloat GridLineSpacing { get; } = new BindableFloat(4f)
{
MinValue = 4f,
MaxValue = 256f,
- Precision = 0.01f,
+ Precision = 0.1f,
};
///
@@ -68,7 +68,7 @@ public partial class OsuGridToolboxGroup : EditorToolboxGroup, IKeyBindingHandle
{
MinValue = -180f,
MaxValue = 180f,
- Precision = 0.01f,
+ Precision = 0.1f,
};
///
@@ -115,7 +115,7 @@ public void SetGridFromPoints(Vector2 point1, Vector2 point2)
float dist = Vector2.Distance(point1, point2);
while (dist >= max_automatic_spacing)
dist /= 2;
- Spacing.Value = dist;
+ GridLineSpacing.Value = dist;
}
[BackgroundDependencyLoader]
@@ -127,21 +127,25 @@ private void load()
{
Current = StartPositionX,
KeyboardStep = 1,
+ ExpandedLabelText = "X offset",
},
startPositionYSlider = new ExpandableSlider
{
Current = StartPositionY,
KeyboardStep = 1,
+ ExpandedLabelText = "Y offset",
},
spacingSlider = new ExpandableSlider
{
- Current = Spacing,
+ Current = GridLineSpacing,
KeyboardStep = 1,
+ ExpandedLabelText = "Spacing",
},
gridLinesRotationSlider = new ExpandableSlider
{
Current = GridLinesRotation,
KeyboardStep = 1,
+ ExpandedLabelText = "Rotation",
},
new FillFlowContainer
{
@@ -170,7 +174,7 @@ private void load()
},
};
- Spacing.Value = editorBeatmap.GridSize;
+ GridLineSpacing.Value = editorBeatmap.GridSize;
}
protected override void LoadComplete()
@@ -182,14 +186,12 @@ protected override void LoadComplete()
StartPositionX.BindValueChanged(x =>
{
startPositionXSlider.ContractedLabelText = $"X: {x.NewValue:#,0.##}";
- startPositionXSlider.ExpandedLabelText = $"X Offset: {x.NewValue:#,0.##}";
StartPosition.Value = new Vector2(x.NewValue, StartPosition.Value.Y);
}, true);
StartPositionY.BindValueChanged(y =>
{
startPositionYSlider.ContractedLabelText = $"Y: {y.NewValue:#,0.##}";
- startPositionYSlider.ExpandedLabelText = $"Y Offset: {y.NewValue:#,0.##}";
StartPosition.Value = new Vector2(StartPosition.Value.X, y.NewValue);
}, true);
@@ -199,10 +201,9 @@ protected override void LoadComplete()
StartPositionY.Value = pos.NewValue.Y;
});
- Spacing.BindValueChanged(spacing =>
+ GridLineSpacing.BindValueChanged(spacing =>
{
spacingSlider.ContractedLabelText = $"S: {spacing.NewValue:#,0.##}";
- spacingSlider.ExpandedLabelText = $"Spacing: {spacing.NewValue:#,0.##}";
SpacingVector.Value = new Vector2(spacing.NewValue);
editorBeatmap.GridSize = (int)spacing.NewValue;
}, true);
@@ -210,7 +211,6 @@ protected override void LoadComplete()
GridLinesRotation.BindValueChanged(rotation =>
{
gridLinesRotationSlider.ContractedLabelText = $"R: {rotation.NewValue:#,0.##}";
- gridLinesRotationSlider.ExpandedLabelText = $"Rotation: {rotation.NewValue:#,0.##}";
}, true);
GridType.BindValueChanged(v =>
@@ -239,6 +239,8 @@ protected override void LoadComplete()
{
gridTypeButtons.FadeTo(v.NewValue ? 1f : 0f, 500, Easing.OutQuint);
gridTypeButtons.BypassAutoSizeAxes = !v.NewValue ? Axes.Y : Axes.None;
+
+ Spacing = v.NewValue ? new Vector2(5) : new Vector2(15);
}, true);
}
@@ -252,7 +254,7 @@ public bool OnPressed(KeyBindingPressEvent e)
switch (e.Action)
{
case GlobalAction.EditorCycleGridSpacing:
- Spacing.Value = Spacing.Value * 2 >= max_automatic_spacing ? Spacing.Value / 8 : Spacing.Value * 2;
+ GridLineSpacing.Value = GridLineSpacing.Value * 2 >= max_automatic_spacing ? GridLineSpacing.Value / 8 : GridLineSpacing.Value * 2;
return true;
case GlobalAction.EditorCycleGridType:
diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs
index e4f8ee5b6d09..6ff762b82f06 100644
--- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs
+++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using JetBrains.Annotations;
@@ -142,7 +143,7 @@ private void updatePositionSnapGrid(ValueChangedEvent obj)
case PositionSnapGridType.Triangle:
var triangularPositionSnapGrid = new TriangularPositionSnapGrid();
- triangularPositionSnapGrid.Spacing.BindTo(OsuGridToolboxGroup.Spacing);
+ triangularPositionSnapGrid.Spacing.BindTo(OsuGridToolboxGroup.GridLineSpacing);
triangularPositionSnapGrid.GridLineRotation.BindTo(OsuGridToolboxGroup.GridLinesRotation);
positionSnapGrid = triangularPositionSnapGrid;
@@ -151,7 +152,7 @@ private void updatePositionSnapGrid(ValueChangedEvent obj)
case PositionSnapGridType.Circle:
var circularPositionSnapGrid = new CircularPositionSnapGrid();
- circularPositionSnapGrid.Spacing.BindTo(OsuGridToolboxGroup.Spacing);
+ circularPositionSnapGrid.Spacing.BindTo(OsuGridToolboxGroup.GridLineSpacing);
positionSnapGrid = circularPositionSnapGrid;
break;
@@ -171,7 +172,8 @@ protected override ComposeBlueprintContainer CreateBlueprintContainer()
=> new OsuBlueprintContainer(this);
public override string ConvertSelectionToString()
- => string.Join(',', selectedHitObjects.Cast().OrderBy(h => h.StartTime).Select(h => (h.IndexInCurrentCombo + 1).ToString()));
+ => string.Join(',', selectedHitObjects.Cast().OrderBy(h => h.StartTime)
+ .Select(h => (h.IndexInCurrentCombo + 1).ToString(CultureInfo.InvariantCulture)));
// 1,2,3,4 ...
private static readonly Regex selection_regex = new Regex(@"^\d+(,\d+)*$", RegexOptions.Compiled);
diff --git a/osu.Game.Rulesets.Osu/Edit/OsuSelectionScaleHandler.cs b/osu.Game.Rulesets.Osu/Edit/OsuSelectionScaleHandler.cs
index d5f313776989..17f32ea67d5d 100644
--- a/osu.Game.Rulesets.Osu/Edit/OsuSelectionScaleHandler.cs
+++ b/osu.Game.Rulesets.Osu/Edit/OsuSelectionScaleHandler.cs
@@ -7,6 +7,7 @@
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
+using osu.Framework.Extensions.ObjectExtensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Primitives;
using osu.Framework.Utils;
@@ -37,13 +38,16 @@ public partial class OsuSelectionScaleHandler : SelectionScaleHandler
[Resolved]
private IEditorChangeHandler? changeHandler { get; set; }
+ [Resolved]
+ private EditorBeatmap editorBeatmap { get; set; } = null!;
+
[Resolved(CanBeNull = true)]
private IDistanceSnapProvider? snapProvider { get; set; }
private BindableList selectedItems { get; } = new BindableList();
[BackgroundDependencyLoader]
- private void load(EditorBeatmap editorBeatmap)
+ private void load()
{
selectedItems.BindTo(editorBeatmap.SelectedHitObjects);
}
@@ -53,15 +57,22 @@ protected override void LoadComplete()
base.LoadComplete();
selectedItems.CollectionChanged += (_, __) => updateState();
+ editorBeatmap.HitObjectUpdated += hitObjectUpdated;
updateState();
}
+ private void hitObjectUpdated(HitObject hitObject)
+ {
+ if (selectedMovableObjects.Contains(hitObject))
+ updateState();
+ }
+
private void updateState()
{
var quad = GeometryUtils.GetSurroundingQuad(selectedMovableObjects);
- CanScaleX.Value = quad.Width > 0;
- CanScaleY.Value = quad.Height > 0;
+ CanScaleX.Value = Precision.DefinitelyBigger(quad.Width, 0);
+ CanScaleY.Value = Precision.DefinitelyBigger(quad.Height, 0);
CanScaleDiagonally.Value = CanScaleX.Value && CanScaleY.Value;
CanScaleFromPlayfieldOrigin.Value = selectedMovableObjects.Any();
IsScalingSlider.Value = selectedMovableObjects.Count() == 1 && selectedMovableObjects.First() is Slider;
@@ -339,5 +350,13 @@ public OriginalHitObjectState(OsuHitObject hitObject)
PathControlPointTypes = (hitObject as IHasPath)?.Path.ControlPoints.Select(p => p.Type).ToArray();
}
}
+
+ protected override void Dispose(bool isDisposing)
+ {
+ base.Dispose(isDisposing);
+
+ if (editorBeatmap.IsNotNull())
+ editorBeatmap.HitObjectUpdated -= hitObjectUpdated;
+ }
}
}
diff --git a/osu.Game.Rulesets.Osu/Edit/PolygonGenerationPopover.cs b/osu.Game.Rulesets.Osu/Edit/PolygonGenerationPopover.cs
index 046f57c0a5eb..fe5e0581ecd2 100644
--- a/osu.Game.Rulesets.Osu/Edit/PolygonGenerationPopover.cs
+++ b/osu.Game.Rulesets.Osu/Edit/PolygonGenerationPopover.cs
@@ -25,10 +25,10 @@ namespace osu.Game.Rulesets.Osu.Edit
{
public partial class PolygonGenerationPopover : OsuPopover
{
- private SliderWithTextBoxInput distanceSnapInput = null!;
- private SliderWithTextBoxInput offsetAngleInput = null!;
- private SliderWithTextBoxInput repeatCountInput = null!;
- private SliderWithTextBoxInput pointInput = null!;
+ private FormSliderBar distanceSnapInput { get; set; } = null!;
+ private FormSliderBar offsetAngleInput { get; set; } = null!;
+ private FormSliderBar repeatCountInput { get; set; } = null!;
+ private FormSliderBar pointInput { get; set; } = null!;
private RoundedButton commitButton = null!;
private readonly List insertedCircles = new List();
@@ -64,11 +64,12 @@ private void load()
{
Width = 220,
AutoSizeAxes = Axes.Y,
- Spacing = new Vector2(20),
+ Spacing = new Vector2(5),
Children = new Drawable[]
{
- distanceSnapInput = new SliderWithTextBoxInput("Distance snap:")
+ distanceSnapInput = new FormSliderBar
{
+ Caption = "Distance snap",
Current = new BindableNumber(1)
{
MinValue = 0.1,
@@ -76,37 +77,40 @@ private void load()
Precision = 0.1,
Value = ((OsuHitObjectComposer)composer).DistanceSnapProvider.DistanceSpacingMultiplier.Value,
},
- Instantaneous = true
+ TabbableContentContainer = this
},
- offsetAngleInput = new SliderWithTextBoxInput("Offset angle:")
+ offsetAngleInput = new FormSliderBar
{
+ Caption = "Offset angle",
Current = new BindableNumber
{
MinValue = 0,
MaxValue = 180,
Precision = 1
},
- Instantaneous = true
+ TabbableContentContainer = this
},
- repeatCountInput = new SliderWithTextBoxInput("Repeats:")
+ repeatCountInput = new FormSliderBar
{
+ Caption = "Repeats",
Current = new BindableNumber(1)
{
MinValue = 1,
MaxValue = 10,
Precision = 1
},
- Instantaneous = true
+ TabbableContentContainer = this
},
- pointInput = new SliderWithTextBoxInput("Vertices:")
+ pointInput = new FormSliderBar
{
+ Caption = "Vertices",
Current = new BindableNumber(3)
{
MinValue = 3,
MaxValue = 32,
Precision = 1,
},
- Instantaneous = true
+ TabbableContentContainer = this
},
commitButton = new RoundedButton
{
diff --git a/osu.Game.Rulesets.Osu/Edit/PreciseMovementPopover.cs b/osu.Game.Rulesets.Osu/Edit/PreciseMovementPopover.cs
index f3739ab445cc..caac51632b13 100644
--- a/osu.Game.Rulesets.Osu/Edit/PreciseMovementPopover.cs
+++ b/osu.Game.Rulesets.Osu/Edit/PreciseMovementPopover.cs
@@ -37,7 +37,7 @@ public partial class PreciseMovementPopover : OsuPopover
private BindableNumber xBindable = null!;
private BindableNumber yBindable = null!;
- private SliderWithTextBoxInput xInput = null!;
+ private FormSliderBar xInput { get; set; } = null!;
private OsuCheckbox relativeCheckbox = null!;
public PreciseMovementPopover()
@@ -52,31 +52,31 @@ private void load()
{
Width = 220,
AutoSizeAxes = Axes.Y,
- Spacing = new Vector2(20),
+ Spacing = new Vector2(5),
Children = new Drawable[]
{
- xInput = new SliderWithTextBoxInput("X:")
+ xInput = new FormSliderBar
{
+ Caption = "X",
Current = xBindable = new BindableNumber
{
Precision = 1,
},
- Instantaneous = true,
- TabbableContentContainer = this,
+ TabbableContentContainer = this
},
- new SliderWithTextBoxInput("Y:")
+ new FormSliderBar
{
+ Caption = "Y",
Current = yBindable = new BindableNumber
{
Precision = 1,
},
- Instantaneous = true,
- TabbableContentContainer = this,
+ TabbableContentContainer = this
},
relativeCheckbox = new OsuCheckbox(false)
{
RelativeSizeAxes = Axes.X,
- LabelText = "Relative movement",
+ LabelText = "Relative movement"
}
}
};
diff --git a/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs b/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs
index e2cde1a3258e..959963ed338c 100644
--- a/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs
+++ b/osu.Game.Rulesets.Osu/Edit/PreciseRotationPopover.cs
@@ -28,7 +28,7 @@ public partial class PreciseRotationPopover : OsuPopover
private readonly Bindable rotationInfo = new Bindable(new PreciseRotationInfo(0, EditorOrigin.GridCentre));
- private SliderWithTextBoxInput angleInput = null!;
+ private FormSliderBar angleInput { get; set; } = null!;
private EditorRadioButtonCollection rotationOrigin = null!;
private RadioButton gridCentreButton = null!;
@@ -54,11 +54,12 @@ private void load(OsuConfigManager config)
{
Width = 220,
AutoSizeAxes = Axes.Y,
- Spacing = new Vector2(20),
+ Spacing = new Vector2(5),
Children = new Drawable[]
{
- angleInput = new SliderWithTextBoxInput("Angle (degrees):")
+ angleInput = new FormSliderBar
{
+ Caption = "Angle (degrees)",
Current = new BindableNumber
{
MinValue = -360,
@@ -66,7 +67,7 @@ private void load(OsuConfigManager config)
Precision = 1
},
KeyboardStep = 1f,
- Instantaneous = true
+ TabbableContentContainer = this
},
rotationOrigin = new EditorRadioButtonCollection
{
diff --git a/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs b/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs
index ca4a99b9cd78..88bf92ecb532 100644
--- a/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs
+++ b/osu.Game.Rulesets.Osu/Edit/PreciseScalePopover.cs
@@ -32,7 +32,7 @@ public partial class PreciseScalePopover : OsuPopover
private readonly Bindable scaleInfo = new Bindable(new PreciseScaleInfo(1, EditorOrigin.GridCentre, true, true));
- private SliderWithTextBoxInput scaleInput = null!;
+ private FormSliderBar scaleInput { get; set; } = null!;
private BindableNumber scaleInputBindable = null!;
private EditorRadioButtonCollection scaleOrigin = null!;
@@ -66,11 +66,12 @@ private void load(EditorBeatmap editorBeatmap, OsuConfigManager config)
{
Width = 220,
AutoSizeAxes = Axes.Y,
- Spacing = new Vector2(20),
+ Spacing = new Vector2(5),
Children = new Drawable[]
{
- scaleInput = new SliderWithTextBoxInput("Scale:")
+ scaleInput = new FormSliderBar
{
+ Caption = "Scale",
Current = scaleInputBindable = new BindableNumber
{
MinValue = 0.05f,
@@ -80,7 +81,7 @@ private void load(EditorBeatmap editorBeatmap, OsuConfigManager config)
Default = 1,
},
KeyboardStep = 0.01f,
- Instantaneous = true
+ TabbableContentContainer = this
},
scaleOrigin = new EditorRadioButtonCollection
{
diff --git a/osu.Game.Rulesets.Osu/Mods/InputBlockingMod.cs b/osu.Game.Rulesets.Osu/Mods/InputBlockingMod.cs
index b56fdbdf74e7..34eb2be07743 100644
--- a/osu.Game.Rulesets.Osu/Mods/InputBlockingMod.cs
+++ b/osu.Game.Rulesets.Osu/Mods/InputBlockingMod.cs
@@ -67,6 +67,9 @@ public void Update(Playfield playfield)
{
if (LastAcceptedAction != null && nonGameplayPeriods.IsInAny(gameplayClock.CurrentTime))
LastAcceptedAction = null;
+
+ if (LastAcceptedAction != null && gameplayClock.IsRewinding)
+ LastAcceptedAction = null;
}
protected abstract bool CheckValidNewAction(OsuAction action);
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModAlternate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModAlternate.cs
index d01b56195473..f1a56fb1a24e 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModAlternate.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModAlternate.cs
@@ -16,6 +16,7 @@ public class OsuModAlternate : InputBlockingMod
public override LocalisableString Description => @"Don't use the same key twice in a row!";
public override IconUsage? Icon => OsuIcon.ModAlternate;
public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModSingleTap) }).ToArray();
+ public override bool Ranked => true;
protected override bool CheckValidNewAction(OsuAction action) => LastAcceptedAction != action;
}
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModBloom.cs b/osu.Game.Rulesets.Osu/Mods/OsuModBloom.cs
index 445fb8b37ad3..8947565992be 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModBloom.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModBloom.cs
@@ -39,7 +39,7 @@ public class OsuModBloom : Mod, IApplicableToScoreProcessor, IUpdatableByPlayfie
[SettingSource(
"Max size at combo",
"The combo count at which the cursor reaches its maximum size",
- SettingControlType = typeof(SettingsSlider>)
+ SettingControlType = typeof(SettingsSlider)
)]
public BindableInt MaxSizeComboCount { get; } = new BindableInt(50)
{
@@ -85,4 +85,12 @@ public void Update(Playfield playfield)
cursor.ModScaleAdjust.Value = (float)Interpolation.Lerp(cursor.ModScaleAdjust.Value, currentSize, Math.Clamp(cursor.Time.Elapsed / TRANSITION_DURATION, 0, 1));
}
}
+
+ public partial class MaxSizeComboSlider : RoundedSliderBar
+ {
+ public MaxSizeComboSlider()
+ {
+ KeyboardStep = 1;
+ }
+ }
}
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
index 0d6b02a7d14b..65ab6001c983 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModDifficultyAdjust.cs
@@ -1,7 +1,9 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using System;
using System.Collections.Generic;
+using System.Linq;
using osu.Framework.Bindables;
using osu.Framework.Localisation;
using osu.Game.Beatmaps;
@@ -71,6 +73,8 @@ string format(string acronym, DifficultyBindable bindable)
}
}
+ public override Type[] IncompatibleMods => base.IncompatibleMods.Append(typeof(OsuModTargetPractice)).ToArray();
+
protected override void ApplySettings(BeatmapDifficulty difficulty)
{
base.ApplySettings(difficulty);
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModFreezeFrame.cs b/osu.Game.Rulesets.Osu/Mods/OsuModFreezeFrame.cs
index e75ed24a7dc3..b89280212746 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModFreezeFrame.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModFreezeFrame.cs
@@ -27,8 +27,10 @@ public class OsuModFreezeFrame : Mod, IApplicableToDrawableHitObject, IApplicabl
public override LocalisableString Description => "Burn the notes into your memory.";
- //Alters the transforms of the approach circles, breaking the effects of these mods.
- public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModApproachDifferent), typeof(OsuModTransform), typeof(OsuModDepth) }).ToArray();
+ ///
+ /// Incompatible with all mods that directly modify or indirectly depend on , or alter the behaviour of approach circles.
+ ///
+ public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModApproachDifferent), typeof(OsuModTransform), typeof(OsuModDepth), typeof(OsuModHidden) }).ToArray();
public override ModType Type => ModType.Fun;
@@ -57,16 +59,25 @@ public void ApplyToBeatmap(IBeatmap beatmap)
void applyFadeInAdjustment(OsuHitObject osuObject)
{
- osuObject.TimePreempt += osuObject.StartTime - lastNewComboTime;
+ if (osuObject is not Spinner)
+ osuObject.TimePreempt += osuObject.StartTime - lastNewComboTime;
+
+ int repeatCount = 0;
foreach (var nested in osuObject.NestedHitObjects.OfType())
{
switch (nested)
{
- //Freezing the SliderTicks doesnt play well with snaking sliders
+ // Freezing the SliderTicks doesnt play well with snaking sliders
case SliderTick:
- //SliderRepeat wont layer correctly if preempt is changed.
+ break;
+
case SliderRepeat:
+ if (repeatCount > 2)
+ break;
+
+ applyFadeInAdjustment(nested);
+ repeatCount++;
break;
default:
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs
index 6dc0d5d5229f..c9b5fb29f776 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs
@@ -26,7 +26,7 @@ public class OsuModHidden : ModHidden, IHidesApproachCircles
public override LocalisableString Description => @"Play with no approach circles and fading circles/sliders.";
public override double ScoreMultiplier => UsesDefaultConfiguration ? 1.06 : 1;
- public override Type[] IncompatibleMods => new[] { typeof(IRequiresApproachCircles), typeof(OsuModSpinIn), typeof(OsuModDepth) };
+ public override Type[] IncompatibleMods => new[] { typeof(IRequiresApproachCircles), typeof(OsuModSpinIn), typeof(OsuModDepth), typeof(OsuModFreezeFrame) };
public const double FADE_IN_DURATION_MULTIPLIER = 0.4;
public const double FADE_OUT_DURATION_MULTIPLIER = 0.3;
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModSingleTap.cs b/osu.Game.Rulesets.Osu/Mods/OsuModSingleTap.cs
index 6d16598f8936..2fc646846dd8 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModSingleTap.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModSingleTap.cs
@@ -16,6 +16,7 @@ public class OsuModSingleTap : InputBlockingMod
public override IconUsage? Icon => OsuIcon.ModSingleTap;
public override LocalisableString Description => @"You must only use one key!";
public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAlternate) }).ToArray();
+ public override bool Ranked => true;
protected override bool CheckValidNewAction(OsuAction action) => LastAcceptedAction == null || LastAcceptedAction == action;
}
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModTargetPractice.cs b/osu.Game.Rulesets.Osu/Mods/OsuModTargetPractice.cs
index e82ec2fb104f..22dcd5079a08 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModTargetPractice.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModTargetPractice.cs
@@ -48,7 +48,8 @@ public class OsuModTargetPractice : ModWithVisibilityAdjustment, IApplicableToDr
typeof(OsuModSpunOut),
typeof(OsuModStrictTracking),
typeof(OsuModSuddenDeath),
- typeof(OsuModDepth)
+ typeof(OsuModDepth),
+ typeof(OsuModDifficultyAdjust),
}).ToArray();
[SettingSource("Seed", "Use a custom seed instead of a random one", SettingControlType = typeof(SettingsNumberBox))]
diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModTraceable.cs b/osu.Game.Rulesets.Osu/Mods/OsuModTraceable.cs
index b2a3da285c48..6e9afb493da1 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModTraceable.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModTraceable.cs
@@ -21,7 +21,7 @@ public class OsuModTraceable : ModWithVisibilityAdjustment, IRequiresApproachCir
public override string Name => "Traceable";
public override string Acronym => "TC";
public override IconUsage? Icon => OsuIcon.ModTraceable;
- public override ModType Type => ModType.Fun;
+ public override ModType Type => ModType.DifficultyIncrease;
public override LocalisableString Description => "Put your faith in the approach circles...";
public override double ScoreMultiplier => 1;
public override bool Ranked => true;
diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs
index 01309c68f62b..0a5365e652eb 100644
--- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs
+++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs
@@ -171,7 +171,7 @@ protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, I
{
base.ApplyDefaultsToSelf(controlPointInfo, difficulty);
- TimePreempt = (float)IBeatmapDifficultyInfo.DifficultyRange(difficulty.ApproachRate, PREEMPT_RANGE);
+ TimePreempt = IBeatmapDifficultyInfo.DifficultyRangeInt(difficulty.ApproachRate, PREEMPT_RANGE);
// Preempt time can go below 450ms. Normally, this is achieved via the DT mod which uniformly speeds up all animations game wide regardless of AR.
// This uniform speedup is hard to match 1:1, however we can at least make AR>10 (via mods) feel good by extending the upper linear function above.
diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs
index 49d945e0aa39..f0c4e7441063 100644
--- a/osu.Game.Rulesets.Osu/OsuRuleset.cs
+++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs
@@ -175,7 +175,7 @@ public override IEnumerable GetModsFor(ModType type)
new OsuModHardRock(),
new MultiMod(new OsuModSuddenDeath(), new OsuModPerfect()),
new MultiMod(new OsuModDoubleTime(), new OsuModNightcore()),
- new OsuModHidden(),
+ new MultiMod(new OsuModHidden(), new OsuModTraceable()),
new MultiMod(new OsuModFlashlight(), new OsuModBlinds()),
new OsuModStrictTracking(),
new OsuModAccuracyChallenge(),
@@ -209,7 +209,6 @@ public override IEnumerable GetModsFor(ModType type)
new OsuModSpinIn(),
new MultiMod(new OsuModGrow(), new OsuModDeflate()),
new MultiMod(new ModWindUp(), new ModWindDown()),
- new OsuModTraceable(),
new OsuModBarrelRoll(),
new OsuModApproachDifferent(),
new OsuModMuted(),
@@ -278,19 +277,24 @@ public override IEnumerable GetModsFor(ModType type)
public override IRulesetConfigManager CreateConfig(SettingsStore? settings) => new OsuRulesetConfigManager(settings, RulesetInfo);
- protected override IEnumerable GetValidHitResults()
+ public override IEnumerable GetValidHitResults()
{
return new[]
{
HitResult.Great,
HitResult.Ok,
HitResult.Meh,
+ HitResult.Miss,
HitResult.LargeTickHit,
+ HitResult.LargeTickMiss,
HitResult.SmallTickHit,
+ HitResult.SmallTickMiss,
HitResult.SliderTailHit,
HitResult.SmallBonus,
HitResult.LargeBonus,
+ HitResult.IgnoreHit,
+ HitResult.IgnoreMiss,
};
}
@@ -412,7 +416,8 @@ public override IEnumerable GetBeatmapAttributesForDisp
Description = "Affects how early objects appear on screen relative to their hit time.",
AdditionalMetrics =
[
- new RulesetBeatmapAttribute.AdditionalMetric("Approach time", LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRange(effectiveDifficulty.ApproachRate, OsuHitObject.PREEMPT_RANGE):#,0.##} ms"))
+ new RulesetBeatmapAttribute.AdditionalMetric("Approach time",
+ LocalisableString.Interpolate($@"{IBeatmapDifficultyInfo.DifficultyRangeInt(effectiveDifficulty.ApproachRate, OsuHitObject.PREEMPT_RANGE):#,0.##} ms"))
]
};
diff --git a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs
index d43e6092c22c..f08e8133230c 100644
--- a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs
+++ b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs
@@ -21,6 +21,8 @@ namespace osu.Game.Rulesets.Osu.Replays
{
public class OsuAutoGenerator : OsuAutoGeneratorBase
{
+ public const double MIN_FRAME_SEPARATION_FOR_ALTERNATING = 266;
+
public new OsuBeatmap Beatmap => (OsuBeatmap)base.Beatmap;
#region Parameters
@@ -245,7 +247,7 @@ private void moveToHitObject(OsuHitObject h, Vector2 targetPos, Easing easing)
double timeDifference = ApplyModsToTimeDelta(lastFrame.Time, h.StartTime);
OsuReplayFrame? lastLastFrame = Frames.Count >= 2 ? (OsuReplayFrame)Frames[^2] : null;
- if (timeDifference > 0)
+ if (timeDifference >= 0)
{
// If the last frame is a key-up frame and there has been no wait period, adjust the last frame's position such that it begins eased movement instantaneously.
if (lastLastFrame != null && lastFrame is OsuKeyUpReplayFrame && !hasWaited)
@@ -266,7 +268,7 @@ private void moveToHitObject(OsuHitObject h, Vector2 targetPos, Easing easing)
}
// Start alternating once the time separation is too small (faster than ~225BPM).
- if (timeDifference > 0 && timeDifference < 266)
+ if (timeDifference >= 0 && timeDifference < MIN_FRAME_SEPARATION_FOR_ALTERNATING)
buttonIndex++;
else
buttonIndex = 0;
diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs
index 7118b6f95e1b..219e754dccd7 100644
--- a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs
+++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs
@@ -103,6 +103,9 @@ public OsuLegacySkinTransformer(ISkin skin)
leaderboard.Origin = Anchor.BottomLeft;
leaderboard.Position = pos;
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
Children = new Drawable[]
diff --git a/osu.Game.Rulesets.Osu/Skinning/SmokeSegment.cs b/osu.Game.Rulesets.Osu/Skinning/SmokeSegment.cs
index f4fe42b8de5f..2962bce635cd 100644
--- a/osu.Game.Rulesets.Osu/Skinning/SmokeSegment.cs
+++ b/osu.Game.Rulesets.Osu/Skinning/SmokeSegment.cs
@@ -77,9 +77,14 @@ protected override void LoadComplete()
base.LoadComplete();
RelativeSizeAxes = Axes.Both;
+ }
- LifetimeStart = smokeStartTime = Time.Current;
-
+ public void StartDrawing(double time)
+ {
+ LifetimeStart = smokeStartTime = time;
+ LifetimeEnd = smokeEndTime = double.MaxValue;
+ SmokePoints.Clear();
+ lastPosition = null;
totalDistance = pointInterval;
}
diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
index 1c2d69fa00e4..8ddb599c2e42 100644
--- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
+++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs
@@ -49,6 +49,18 @@ public partial class CursorTrail : Drawable, IRequireHighFrequencyMousePosition
///
protected bool AllowPartRotation { get; set; }
+ private Vector2 cursorScale = Vector2.One;
+
+ public Vector2 CursorScale
+ {
+ get => cursorScale;
+ set
+ {
+ cursorScale = value;
+ Invalidate(Invalidation.DrawNode);
+ }
+ }
+
///
/// The trail part texture origin.
///
@@ -186,7 +198,7 @@ protected void AddTrail(Vector2 position)
float distance = diff.Length;
Vector2 direction = diff / distance;
- float interval = Texture.DisplayWidth / 2.5f * IntervalMultiplier;
+ float interval = Texture.DisplayWidth * CursorScale.X / 2.5f * IntervalMultiplier;
float stopAt = distance - (AvoidDrawingNearCursor ? interval : 0);
for (float d = interval; d < stopAt; d += interval)
@@ -233,6 +245,7 @@ private class TrailDrawNode : DrawNode
private float time;
private float fadeExponent;
private float angle;
+ private Vector2 cursorScale;
private readonly TrailPart[] parts = new TrailPart[max_sprites];
private Vector2 originPosition;
@@ -253,6 +266,7 @@ public override void ApplyState()
time = Source.time;
fadeExponent = Source.FadeExponent;
angle = Source.AllowPartRotation ? float.DegreesToRadians(Source.PartRotation) : 0;
+ cursorScale = Source.cursorScale;
originPosition = Vector2.Zero;
@@ -307,7 +321,9 @@ protected override void Draw(IRenderer renderer)
vertexBatch.Add(new TexturedTrailVertex
{
Position = rotateAround(
- new Vector2(part.Position.X - texture.DisplayWidth * originPosition.X * part.Scale.X, part.Position.Y + texture.DisplayHeight * (1 - originPosition.Y) * part.Scale.Y),
+ new Vector2(
+ part.Position.X - texture.DisplayWidth * originPosition.X * part.Scale.X * cursorScale.X,
+ part.Position.Y + texture.DisplayHeight * (1 - originPosition.Y) * part.Scale.Y * cursorScale.Y),
part.Position, sin, cos),
TexturePosition = textureRect.BottomLeft,
TextureRect = new Vector4(0, 0, 1, 1),
@@ -318,8 +334,10 @@ protected override void Draw(IRenderer renderer)
vertexBatch.Add(new TexturedTrailVertex
{
Position = rotateAround(
- new Vector2(part.Position.X + texture.DisplayWidth * (1 - originPosition.X) * part.Scale.X,
- part.Position.Y + texture.DisplayHeight * (1 - originPosition.Y) * part.Scale.Y), part.Position, sin, cos),
+ new Vector2(
+ part.Position.X + texture.DisplayWidth * (1 - originPosition.X) * part.Scale.X * cursorScale.X,
+ part.Position.Y + texture.DisplayHeight * (1 - originPosition.Y) * part.Scale.Y * cursorScale.Y),
+ part.Position, sin, cos),
TexturePosition = textureRect.BottomRight,
TextureRect = new Vector4(0, 0, 1, 1),
Colour = DrawColourInfo.Colour.BottomRight.Linear,
@@ -329,7 +347,9 @@ protected override void Draw(IRenderer renderer)
vertexBatch.Add(new TexturedTrailVertex
{
Position = rotateAround(
- new Vector2(part.Position.X + texture.DisplayWidth * (1 - originPosition.X) * part.Scale.X, part.Position.Y - texture.DisplayHeight * originPosition.Y * part.Scale.Y),
+ new Vector2(
+ part.Position.X + texture.DisplayWidth * (1 - originPosition.X) * part.Scale.X * cursorScale.X,
+ part.Position.Y - texture.DisplayHeight * originPosition.Y * part.Scale.Y * cursorScale.Y),
part.Position, sin, cos),
TexturePosition = textureRect.TopRight,
TextureRect = new Vector4(0, 0, 1, 1),
@@ -340,7 +360,9 @@ protected override void Draw(IRenderer renderer)
vertexBatch.Add(new TexturedTrailVertex
{
Position = rotateAround(
- new Vector2(part.Position.X - texture.DisplayWidth * originPosition.X * part.Scale.X, part.Position.Y - texture.DisplayHeight * originPosition.Y * part.Scale.Y),
+ new Vector2(
+ part.Position.X - texture.DisplayWidth * originPosition.X * part.Scale.X * cursorScale.X,
+ part.Position.Y - texture.DisplayHeight * originPosition.Y * part.Scale.Y * cursorScale.Y),
part.Position, sin, cos),
TexturePosition = textureRect.TopLeft,
TextureRect = new Vector4(0, 0, 1, 1),
diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
index 974d99d7c868..e04382d194d4 100644
--- a/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
+++ b/osu.Game.Rulesets.Osu/UI/Cursor/OsuCursorContainer.cs
@@ -64,8 +64,14 @@ protected override void LoadComplete()
var newScale = new Vector2(e.NewValue);
rippleVisualiser.CursorScale = newScale;
- cursorTrail.Scale = newScale;
+ updateTrailScale();
}, true);
+ cursorTrail.OnSkinChanged += updateTrailScale;
+ }
+
+ private void updateTrailScale()
+ {
+ if (cursorTrail.Drawable is CursorTrail trail) trail.CursorScale = new Vector2(ActiveCursor.CursorScale.Value);
}
private int downCount;
diff --git a/osu.Game.Rulesets.Osu/UI/OsuSettingsSubsection.cs b/osu.Game.Rulesets.Osu/UI/OsuSettingsSubsection.cs
index 0e410dbf57d6..2382fe6d95ba 100644
--- a/osu.Game.Rulesets.Osu/UI/OsuSettingsSubsection.cs
+++ b/osu.Game.Rulesets.Osu/UI/OsuSettingsSubsection.cs
@@ -3,7 +3,9 @@
using osu.Framework.Allocation;
using osu.Framework.Graphics;
+using osu.Framework.Graphics.UserInterface;
using osu.Framework.Localisation;
+using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Localisation;
using osu.Game.Overlays.Settings;
using osu.Game.Rulesets.Osu.Configuration;
@@ -27,32 +29,34 @@ private void load()
Children = new Drawable[]
{
- new SettingsCheckbox
+ new SettingsItemV2(new FormCheckBox
{
- LabelText = RulesetSettingsStrings.SnakingInSliders,
+ Caption = RulesetSettingsStrings.SnakingInSliders,
Current = config.GetBindable(OsuRulesetSetting.SnakingInSliders)
- },
- new SettingsCheckbox
+ }),
+ new SettingsItemV2(new FormCheckBox
{
- ClassicDefault = false,
- LabelText = RulesetSettingsStrings.SnakingOutSliders,
+ Caption = RulesetSettingsStrings.SnakingOutSliders,
Current = config.GetBindable(OsuRulesetSetting.SnakingOutSliders)
+ })
+ {
+ ApplyClassicDefault = c => ((IHasCurrentValue)c).Current.Value = false,
},
- new SettingsCheckbox
+ new SettingsItemV2(new FormCheckBox
{
- LabelText = RulesetSettingsStrings.CursorTrail,
+ Caption = RulesetSettingsStrings.CursorTrail,
Current = config.GetBindable(OsuRulesetSetting.ShowCursorTrail)
- },
- new SettingsCheckbox
+ }),
+ new SettingsItemV2(new FormCheckBox
{
- LabelText = RulesetSettingsStrings.CursorRipples,
+ Caption = RulesetSettingsStrings.CursorRipples,
Current = config.GetBindable(OsuRulesetSetting.ShowCursorRipples)
- },
- new SettingsEnumDropdown
+ }),
+ new SettingsItemV2(new FormEnumDropdown
{
- LabelText = RulesetSettingsStrings.PlayfieldBorderStyle,
+ Caption = RulesetSettingsStrings.PlayfieldBorderStyle,
Current = config.GetBindable(OsuRulesetSetting.PlayfieldBorderStyle),
- },
+ }),
};
}
}
diff --git a/osu.Game.Rulesets.Osu/UI/ReplayAnalysis/CursorPathContainer.cs b/osu.Game.Rulesets.Osu/UI/ReplayAnalysis/CursorPathContainer.cs
index 1951d467e230..76de6c472402 100644
--- a/osu.Game.Rulesets.Osu/UI/ReplayAnalysis/CursorPathContainer.cs
+++ b/osu.Game.Rulesets.Osu/UI/ReplayAnalysis/CursorPathContainer.cs
@@ -4,7 +4,6 @@
using System;
using System.Collections.Generic;
using osu.Framework.Allocation;
-using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics.Lines;
using osu.Framework.Graphics.Performance;
using osu.Game.Graphics;
@@ -12,7 +11,7 @@
namespace osu.Game.Rulesets.Osu.UI.ReplayAnalysis
{
- public partial class CursorPathContainer : Path
+ public partial class CursorPathContainer : SmoothPath
{
private readonly LifetimeEntryManager lifetimeManager = new LifetimeEntryManager();
private readonly SortedSet aliveEntries = new SortedSet(new AimLinePointComparator());
@@ -22,14 +21,13 @@ public CursorPathContainer()
lifetimeManager.EntryBecameAlive += entryBecameAlive;
lifetimeManager.EntryBecameDead += entryBecameDead;
- PathRadius = 0.5f;
+ PathRadius = 1f;
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
Colour = colours.Pink2;
- BackgroundColour = colours.Pink2.Opacity(0);
}
protected override void Update()
diff --git a/osu.Game.Rulesets.Osu/UI/SmokeContainer.cs b/osu.Game.Rulesets.Osu/UI/SmokeContainer.cs
index 389440ba2dc5..ff28444e82b6 100644
--- a/osu.Game.Rulesets.Osu/UI/SmokeContainer.cs
+++ b/osu.Game.Rulesets.Osu/UI/SmokeContainer.cs
@@ -1,9 +1,9 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
-using osu.Framework.Graphics;
+using osu.Framework.Allocation;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Pooling;
using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
@@ -19,17 +19,24 @@ namespace osu.Game.Rulesets.Osu.UI
///
public partial class SmokeContainer : Container, IRequireHighFrequencyMousePosition, IKeyBindingHandler
{
+ private DrawablePool segmentPool = null!;
private SmokeSkinnableDrawable? currentSegmentSkinnable;
private Vector2 lastMousePosition;
public override bool ReceivePositionalInputAt(Vector2 _) => true;
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ AddInternal(segmentPool = new DrawablePool(10));
+ }
+
public bool OnPressed(KeyBindingPressEvent e)
{
if (e.Action == OsuAction.Smoke)
{
- AddInternal(currentSegmentSkinnable = new SmokeSkinnableDrawable(new OsuSkinComponentLookup(OsuSkinComponents.CursorSmoke), _ => new DefaultSmokeSegment()));
+ AddInternal(currentSegmentSkinnable = segmentPool.Get(segment => segment.Segment?.StartDrawing(Time.Current)));
// Add initial position immediately.
addPosition();
@@ -59,17 +66,19 @@ protected override bool OnMouseMove(MouseMoveEvent e)
return base.OnMouseMove(e);
}
- private void addPosition() => (currentSegmentSkinnable?.Drawable as SmokeSegment)?.AddPosition(lastMousePosition, Time.Current);
+ private void addPosition() => currentSegmentSkinnable?.Segment?.AddPosition(lastMousePosition, Time.Current);
private partial class SmokeSkinnableDrawable : SkinnableDrawable
{
+ public SmokeSegment? Segment => Drawable as SmokeSegment;
+
public override bool RemoveWhenNotAlive => true;
public override double LifetimeStart => Drawable.LifetimeStart;
public override double LifetimeEnd => Drawable.LifetimeEnd;
- public SmokeSkinnableDrawable(ISkinComponentLookup lookup, Func? defaultImplementation = null, ConfineMode confineMode = ConfineMode.NoScaling)
- : base(lookup, defaultImplementation, confineMode)
+ public SmokeSkinnableDrawable()
+ : base(new OsuSkinComponentLookup(OsuSkinComponents.CursorSmoke), _ => new DefaultSmokeSegment())
{
}
}
diff --git a/osu.Game.Rulesets.Taiko.Tests.iOS/Info.plist b/osu.Game.Rulesets.Taiko.Tests.iOS/Info.plist
index 162ee75c229f..1ef6b69ff395 100644
--- a/osu.Game.Rulesets.Taiko.Tests.iOS/Info.plist
+++ b/osu.Game.Rulesets.Taiko.Tests.iOS/Info.plist
@@ -35,11 +35,9 @@
UIInterfaceOrientationLandscapeRight
UIInterfaceOrientationLandscapeLeft
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
UIApplicationSupportsIndirectInputEvents
CADisableMinimumFrameDurationOnPhone
-
\ No newline at end of file
+
diff --git a/osu.Game.Rulesets.Taiko.Tests/Editor/TestSceneTaikoEditorSaving.cs b/osu.Game.Rulesets.Taiko.Tests/Editor/TestSceneTaikoEditorSaving.cs
index fb05502158df..ca99ae296cf9 100644
--- a/osu.Game.Rulesets.Taiko.Tests/Editor/TestSceneTaikoEditorSaving.cs
+++ b/osu.Game.Rulesets.Taiko.Tests/Editor/TestSceneTaikoEditorSaving.cs
@@ -35,7 +35,7 @@ public void TestTaikoSliderMultiplierInExport(float? multiplier)
string export = LocalStorage.GetFiles("exports").First();
using (var stream = LocalStorage.GetStream(export))
- using (var zip = ZipArchive.Open(stream))
+ using (var zip = ZipArchive.OpenArchive(stream))
{
using (var osuStream = zip.Entries.First().OpenEntryStream())
using (var reader = new StreamReader(osuStream))
diff --git a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
index e498989a792f..facb0d0cfbce 100644
--- a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
+++ b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj
@@ -1,9 +1,9 @@
-
-
-
+
+
+
WinExe
diff --git a/osu.Game.Rulesets.Taiko/Difficulty/Evaluators/RhythmEvaluator.cs b/osu.Game.Rulesets.Taiko/Difficulty/Evaluators/RhythmEvaluator.cs
index 3b3aea07f314..9cbc5bf2de77 100644
--- a/osu.Game.Rulesets.Taiko/Difficulty/Evaluators/RhythmEvaluator.cs
+++ b/osu.Game.Rulesets.Taiko/Difficulty/Evaluators/RhythmEvaluator.cs
@@ -5,9 +5,11 @@
using System.Collections.Generic;
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Difficulty.Utils;
+using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Rhythm;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Rhythm.Data;
+using osu.Game.Rulesets.Taiko.Objects;
namespace osu.Game.Rulesets.Taiko.Difficulty.Evaluators
{
@@ -16,8 +18,11 @@ public class RhythmEvaluator
///
/// Evaluate the difficulty of a hitobject considering its interval change.
///
- public static double EvaluateDifficultyOf(DifficultyHitObject hitObject, double hitWindow)
+ public static double EvaluateDifficultyOf(DifficultyHitObject hitObject)
{
+ if (hitObject.BaseObject is not Hit)
+ return 0;
+
TaikoRhythmData rhythmData = ((TaikoDifficultyHitObject)hitObject).RhythmData;
double difficulty = 0.0d;
@@ -25,6 +30,8 @@ public static double EvaluateDifficultyOf(DifficultyHitObject hitObject, double
double samePattern = 0;
double intervalPenalty = 0;
+ double hitWindow = hitObject.HitWindow(HitResult.Great);
+
if (rhythmData.SameRhythmGroupedHitObjects?.FirstHitObject == hitObject) // Difficulty for SameRhythmGroupedHitObjects
{
sameRhythm += 10.0 * evaluateDifficultyOf(rhythmData.SameRhythmGroupedHitObjects, hitWindow);
@@ -56,8 +63,8 @@ private static double evaluateDifficultyOf(SameRhythmHitObjectGrouping sameRhyth
{
intervalDifficulty *= DifficultyCalculationUtils.Logistic(
durationDifference / hitWindow,
- midpointOffset: 0.7,
- multiplier: 1.0,
+ midpointOffset: 0.35,
+ multiplier: 2,
maxValue: 1);
}
}
@@ -65,8 +72,8 @@ private static double evaluateDifficultyOf(SameRhythmHitObjectGrouping sameRhyth
// Penalise patterns that can be hit within a single hit window.
intervalDifficulty *= DifficultyCalculationUtils.Logistic(
sameRhythmGroupedHitObjects.Duration / hitWindow,
- midpointOffset: 0.6,
- multiplier: 1,
+ midpointOffset: 0.3,
+ multiplier: 2,
maxValue: 1);
return Math.Pow(intervalDifficulty, 0.75);
diff --git a/osu.Game.Rulesets.Taiko/Difficulty/Preprocessing/TaikoDifficultyHitObject.cs b/osu.Game.Rulesets.Taiko/Difficulty/Preprocessing/TaikoDifficultyHitObject.cs
index f407e13ff1d6..f9bb38688d6f 100644
--- a/osu.Game.Rulesets.Taiko/Difficulty/Preprocessing/TaikoDifficultyHitObject.cs
+++ b/osu.Game.Rulesets.Taiko/Difficulty/Preprocessing/TaikoDifficultyHitObject.cs
@@ -7,10 +7,10 @@
using osu.Game.Rulesets.Difficulty.Preprocessing;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Taiko.Difficulty.Evaluators;
-using osu.Game.Rulesets.Taiko.Objects;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Colour;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Rhythm;
using osu.Game.Rulesets.Taiko.Difficulty.Utils;
+using osu.Game.Rulesets.Taiko.Objects;
namespace osu.Game.Rulesets.Taiko.Difficulty.Preprocessing
{
diff --git a/osu.Game.Rulesets.Taiko/Difficulty/Skills/Rhythm.cs b/osu.Game.Rulesets.Taiko/Difficulty/Skills/Rhythm.cs
index 45d0d0a5480f..e41f3ff5e975 100644
--- a/osu.Game.Rulesets.Taiko/Difficulty/Skills/Rhythm.cs
+++ b/osu.Game.Rulesets.Taiko/Difficulty/Skills/Rhythm.cs
@@ -17,17 +17,14 @@ public class Rhythm : StrainDecaySkill
protected override double SkillMultiplier => 1.0;
protected override double StrainDecayBase => 0.4;
- private readonly double greatHitWindow;
-
- public Rhythm(Mod[] mods, double greatHitWindow)
+ public Rhythm(Mod[] mods)
: base(mods)
{
- this.greatHitWindow = greatHitWindow;
}
protected override double StrainValueOf(DifficultyHitObject current)
{
- double difficulty = RhythmEvaluator.EvaluateDifficultyOf(current, greatHitWindow);
+ double difficulty = RhythmEvaluator.EvaluateDifficultyOf(current);
// To prevent abuse of exceedingly long intervals between awkward rhythms, we penalise its difficulty.
double staminaDifficulty = StaminaEvaluator.EvaluateDifficultyOf(current) - 0.5; // Remove base strain
diff --git a/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyCalculator.cs b/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyCalculator.cs
index edd26819f503..64af2861eca2 100644
--- a/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyCalculator.cs
+++ b/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyCalculator.cs
@@ -10,13 +10,12 @@
using osu.Game.Rulesets.Difficulty.Skills;
using osu.Game.Rulesets.Difficulty.Utils;
using osu.Game.Rulesets.Mods;
-using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Colour;
using osu.Game.Rulesets.Taiko.Difficulty.Preprocessing.Rhythm;
using osu.Game.Rulesets.Taiko.Difficulty.Skills;
using osu.Game.Rulesets.Taiko.Mods;
-using osu.Game.Rulesets.Taiko.Scoring;
+using osu.Game.Utils;
namespace osu.Game.Rulesets.Taiko.Difficulty
{
@@ -41,17 +40,14 @@ public TaikoDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap)
{
}
- protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clockRate)
+ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods)
{
- HitWindows hitWindows = new TaikoHitWindows();
- hitWindows.SetDifficulty(beatmap.Difficulty.OverallDifficulty);
-
isConvert = beatmap.BeatmapInfo.Ruleset.OnlineID == 0;
isRelax = mods.Any(h => h is TaikoModRelax);
return new Skill[]
{
- new Rhythm(mods, hitWindows.WindowFor(HitResult.Great) / clockRate),
+ new Rhythm(mods),
new Reading(mods),
new Colour(mods),
new Stamina(mods, false, isConvert),
@@ -67,13 +63,15 @@ protected override Skill[] CreateSkills(IBeatmap beatmap, Mod[] mods, double clo
new TaikoModHardRock(),
};
- protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, double clockRate)
+ protected override IEnumerable CreateDifficultyHitObjects(IBeatmap beatmap, Mod[] mods)
{
var difficultyHitObjects = new List();
var centreObjects = new List();
var rimObjects = new List();
var noteObjects = new List();
+ double clockRate = ModUtils.CalculateRateWithMods(mods);
+
// Generate TaikoDifficultyHitObjects from the beatmap's hit objects.
for (int i = 2; i < beatmap.HitObjects.Count; i++)
{
@@ -97,7 +95,7 @@ protected override IEnumerable CreateDifficultyHitObjects(I
return difficultyHitObjects;
}
- protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
+ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills)
{
if (beatmap.HitObjects.Count == 0)
return new TaikoDifficultyAttributes { Mods = mods };
@@ -108,14 +106,16 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat
var stamina = skills.OfType().Single(s => !s.SingleColourStamina);
var singleColourStamina = skills.OfType().Single(s => s.SingleColourStamina);
+ double staminaDifficultyValue = stamina.DifficultyValue();
+
double rhythmSkill = rhythm.DifficultyValue() * rhythm_skill_multiplier;
double readingSkill = reading.DifficultyValue() * reading_skill_multiplier;
double colourSkill = colour.DifficultyValue() * colour_skill_multiplier;
- double staminaSkill = stamina.DifficultyValue() * stamina_skill_multiplier;
+ double staminaSkill = staminaDifficultyValue * stamina_skill_multiplier;
double monoStaminaSkill = singleColourStamina.DifficultyValue() * stamina_skill_multiplier;
double monoStaminaFactor = staminaSkill == 0 ? 1 : Math.Pow(monoStaminaSkill / staminaSkill, 5);
- double staminaDifficultStrains = stamina.CountTopWeightedStrains();
+ double staminaDifficultStrains = stamina.CountTopWeightedStrains(staminaDifficultyValue);
// As we don't have pattern integration in osu!taiko, we apply the other two skills relative to rhythm.
patternMultiplier = Math.Pow(staminaSkill * colourSkill, 0.10);
@@ -184,10 +184,10 @@ private double combinedDifficultyValue(Rhythm rhythm, Reading reading, Colour co
}
List hitObjectStrainPeaks = combinePeaks(
- rhythm.GetObjectStrains().ToList(),
- reading.GetObjectStrains().ToList(),
- colour.GetObjectStrains().ToList(),
- stamina.GetObjectStrains().ToList()
+ rhythm.GetObjectDifficulties(),
+ reading.GetObjectDifficulties(),
+ colour.GetObjectDifficulties(),
+ stamina.GetObjectDifficulties()
);
if (hitObjectStrainPeaks.Count == 0)
@@ -209,7 +209,7 @@ private double combinedDifficultyValue(Rhythm rhythm, Reading reading, Colour co
///
/// Combines lists of peak strains from multiple skills into a list of single peak strains for each section.
///
- private List combinePeaks(List rhythmPeaks, List readingPeaks, List colourPeaks, List staminaPeaks)
+ private List combinePeaks(IReadOnlyList rhythmPeaks, IReadOnlyList readingPeaks, IReadOnlyList colourPeaks, IReadOnlyList staminaPeaks)
{
var combinedPeaks = new List();
diff --git a/osu.Game.Rulesets.Taiko/Edit/Blueprints/TaikoSpanPlacementBlueprint.cs b/osu.Game.Rulesets.Taiko/Edit/Blueprints/TaikoSpanPlacementBlueprint.cs
index 3d5c95e1e8b6..6073dc791204 100644
--- a/osu.Game.Rulesets.Taiko/Edit/Blueprints/TaikoSpanPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Taiko/Edit/Blueprints/TaikoSpanPlacementBlueprint.cs
@@ -28,7 +28,7 @@ public partial class TaikoSpanPlacementBlueprint : HitObjectPlacementBlueprint
[Resolved]
private TaikoHitObjectComposer? composer { get; set; }
- protected override bool IsValidForPlacement => Precision.DefinitelyBigger(spanPlacementObject.Duration, 0);
+ protected override bool IsValidForPlacement => base.IsValidForPlacement && (PlacementActive == PlacementState.Waiting || Precision.DefinitelyBigger(spanPlacementObject.Duration, 0));
public TaikoSpanPlacementBlueprint(HitObject hitObject)
: base(hitObject)
diff --git a/osu.Game.Rulesets.Taiko/Edit/Checks/CheckTaikoLowestDiffDrainTime.cs b/osu.Game.Rulesets.Taiko/Edit/Checks/CheckTaikoLowestDiffDrainTime.cs
index 8ef911c18e9f..30717d7ee90f 100644
--- a/osu.Game.Rulesets.Taiko/Edit/Checks/CheckTaikoLowestDiffDrainTime.cs
+++ b/osu.Game.Rulesets.Taiko/Edit/Checks/CheckTaikoLowestDiffDrainTime.cs
@@ -13,9 +13,9 @@ public class CheckTaikoLowestDiffDrainTime : CheckLowestDiffDrainTime
protected override IEnumerable<(DifficultyRating rating, double thresholdMs, string name)> GetThresholds()
{
// See lowest difficulty requirements in https://osu.ppy.sh/wiki/en/Ranking_criteria/osu%21taiko#general
- yield return (DifficultyRating.Hard, new TimeSpan(0, 3, 30).TotalMilliseconds, "Muzukashii");
- yield return (DifficultyRating.Insane, new TimeSpan(0, 4, 15).TotalMilliseconds, "Oni");
- yield return (DifficultyRating.Expert, new TimeSpan(0, 5, 0).TotalMilliseconds, "Inner Oni");
+ yield return (DifficultyRating.Hard, new TimeSpan(0, 2, 30).TotalMilliseconds, "Muzukashii");
+ yield return (DifficultyRating.Insane, new TimeSpan(0, 3, 15).TotalMilliseconds, "Oni");
+ yield return (DifficultyRating.Expert, new TimeSpan(0, 4, 0).TotalMilliseconds, "Inner Oni");
}
}
}
diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModSimplifiedRhythm.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModSimplifiedRhythm.cs
index 2132121cd248..dfaae8e99e7d 100644
--- a/osu.Game.Rulesets.Taiko/Mods/TaikoModSimplifiedRhythm.cs
+++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModSimplifiedRhythm.cs
@@ -122,6 +122,8 @@ void processPattern(int patternEndIndex)
}
}
}
+
+ taikoBeatmap.HitObjects.Sort((a, b) => a.StartTime.CompareTo(b.StartTime));
}
private int getSnapBetweenNotes(ControlPointInfo controlPointInfo, Hit currentNote, Hit nextNote)
diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModSingleTap.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModSingleTap.cs
index 43c870856597..4b6a9780a3d7 100644
--- a/osu.Game.Rulesets.Taiko/Mods/TaikoModSingleTap.cs
+++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModSingleTap.cs
@@ -29,6 +29,7 @@ public partial class TaikoModSingleTap : Mod, IApplicableToDrawableRuleset OsuIcon.ModSingleTap;
public override LocalisableString Description => @"One key for dons, one key for kats.";
+ public override bool Ranked => true;
public override double ScoreMultiplier => 1.0;
public override Type[] IncompatibleMods => new[] { typeof(ModAutoplay), typeof(ModRelax), typeof(TaikoModCinema) };
public override ModType Type => ModType.Conversion;
diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModSwap.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModSwap.cs
index f1feb8153a6b..9af3eedf9343 100644
--- a/osu.Game.Rulesets.Taiko/Mods/TaikoModSwap.cs
+++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModSwap.cs
@@ -22,6 +22,7 @@ public class TaikoModSwap : Mod, IApplicableToBeatmap
public override ModType Type => ModType.Conversion;
public override double ScoreMultiplier => 1;
public override Type[] IncompatibleMods => base.IncompatibleMods.Append(typeof(ModRandom)).ToArray();
+ public override bool Ranked => true;
public void ApplyToBeatmap(IBeatmap beatmap)
{
diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs
index 547d0afe4afd..f4dc1f18bdfc 100644
--- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs
+++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs
@@ -40,6 +40,7 @@ public partial class DrawableDrumRoll : DrawableTaikoStrongableHitObject new SkinnableDrawable(new TaikoSkinComponentLookup(TaikoSkinComponents.DrumRollBody),
_ => new ElongatedCirclePiece());
+ private SkinnableDrawable createHeadPiece() => new SkinnableDrawable(new TaikoSkinComponentLookup(TaikoSkinComponents.DrumRollHead), _ => Empty())
+ {
+ RelativeSizeAxes = Axes.Y,
+ Depth = -2,
+ };
+
public override bool OnPressed(KeyBindingPressEvent e) => false;
private void onNewResult(DrawableHitObject obj, JudgementResult result)
@@ -174,7 +187,23 @@ protected override void Update()
private void updateColour(double fadeDuration = 0)
{
Color4 newColour = Interpolation.ValueAt((float)rollingHits / rolling_hits_for_engaged_colour, colourIdle, colourEngaged, 0, 1);
- (MainPiece.Drawable as IHasAccentColour)?.FadeAccent(newColour, fadeDuration);
+
+ if (fadeDuration == 0)
+ {
+ // fade duration is 0 when calling via `RecreatePieces()`.
+ // in this case we want to apply the colour *without* using transforms.
+ // using transforms may result in the application of colour being undone via `DrawableHitObject.UpdateState()` clearing transforms.
+ if (MainPiece.Drawable is IHasAccentColour mainPieceWithAccentColour)
+ mainPieceWithAccentColour.AccentColour = newColour;
+
+ if (headPiece.Drawable is IHasAccentColour headPieceWithAccentColour)
+ headPieceWithAccentColour.AccentColour = newColour;
+ }
+ else
+ {
+ (MainPiece.Drawable as IHasAccentColour)?.FadeAccent(newColour, fadeDuration);
+ (headPiece.Drawable as IHasAccentColour)?.FadeAccent(newColour, fadeDuration);
+ }
}
public partial class StrongNestedHit : DrawableStrongNestedHit
diff --git a/osu.Game.Rulesets.Taiko/Skinning/Argon/TaikoArgonSkinTransformer.cs b/osu.Game.Rulesets.Taiko/Skinning/Argon/TaikoArgonSkinTransformer.cs
index b0a1c5d3f7f6..820af4ce54f8 100644
--- a/osu.Game.Rulesets.Taiko/Skinning/Argon/TaikoArgonSkinTransformer.cs
+++ b/osu.Game.Rulesets.Taiko/Skinning/Argon/TaikoArgonSkinTransformer.cs
@@ -51,6 +51,9 @@ public TaikoArgonSkinTransformer(ISkin skin)
spectatorList.Anchor = Anchor.BottomLeft;
spectatorList.Origin = Anchor.TopLeft;
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
RelativeSizeAxes = Axes.Both,
diff --git a/osu.Game.Rulesets.Taiko/Skinning/Default/TaikoTrianglesSkinTransformer.cs b/osu.Game.Rulesets.Taiko/Skinning/Default/TaikoTrianglesSkinTransformer.cs
index f6274178893e..1a73457c67e7 100644
--- a/osu.Game.Rulesets.Taiko/Skinning/Default/TaikoTrianglesSkinTransformer.cs
+++ b/osu.Game.Rulesets.Taiko/Skinning/Default/TaikoTrianglesSkinTransformer.cs
@@ -51,6 +51,9 @@ public TaikoTrianglesSkinTransformer(ISkin skin)
spectatorList.Origin = Anchor.TopLeft;
spectatorList.Position = new Vector2(320, -280);
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
RelativeSizeAxes = Axes.Both,
diff --git a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs
index 78be0ef64344..34339b185dbc 100644
--- a/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs
+++ b/osu.Game.Rulesets.Taiko/Skinning/Legacy/LegacyDrumRoll.cs
@@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@@ -21,14 +20,10 @@ public override Quad ScreenSpaceDrawQuad
{
get
{
- // the reason why this calculation is so involved is that the head & tail sprites have different sizes/radii.
- // therefore naively taking the SSDQs of them and making a quad out of them results in a trapezoid shape and not a box.
- var headCentre = headCircle.ScreenSpaceDrawQuad.Centre;
+ var headCentre = (body.ScreenSpaceDrawQuad.TopLeft + body.ScreenSpaceDrawQuad.BottomLeft) / 2;
var tailCentre = (tailCircle.ScreenSpaceDrawQuad.TopLeft + tailCircle.ScreenSpaceDrawQuad.BottomLeft) / 2;
- float headRadius = headCircle.ScreenSpaceDrawQuad.Height / 2;
- float tailRadius = tailCircle.ScreenSpaceDrawQuad.Height / 2;
- float radius = Math.Max(headRadius, tailRadius);
+ float radius = body.ScreenSpaceDrawQuad.Height / 2;
var rectangle = new RectangleF(headCentre.X, headCentre.Y, tailCentre.X - headCentre.X, 0).Inflate(radius);
return new Quad(rectangle.TopLeft, rectangle.TopRight, rectangle.BottomLeft, rectangle.BottomRight);
@@ -37,8 +32,6 @@ public override Quad ScreenSpaceDrawQuad
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => ScreenSpaceDrawQuad.Contains(screenSpacePos);
- private LegacyCirclePiece headCircle = null!;
-
private Sprite body = null!;
private Sprite tailCircle = null!;
@@ -66,10 +59,6 @@ private void load(ISkinSource skin, OsuColour colours)
RelativeSizeAxes = Axes.Both,
Texture = skin.GetTexture("taiko-roll-middle", WrapMode.ClampToEdge, WrapMode.ClampToEdge),
},
- headCircle = new LegacyCirclePiece
- {
- RelativeSizeAxes = Axes.Y,
- },
};
AccentColour = colours.YellowDark;
@@ -101,7 +90,6 @@ private void updateAccentColour()
{
var colour = LegacyColourCompatibility.DisallowZeroAlpha(accentColour);
- headCircle.AccentColour = colour;
body.Colour = colour;
tailCircle.Colour = colour;
}
diff --git a/osu.Game.Rulesets.Taiko/Skinning/Legacy/TaikoLegacySkinTransformer.cs b/osu.Game.Rulesets.Taiko/Skinning/Legacy/TaikoLegacySkinTransformer.cs
index b5c767c2befe..a985bd362e4e 100644
--- a/osu.Game.Rulesets.Taiko/Skinning/Legacy/TaikoLegacySkinTransformer.cs
+++ b/osu.Game.Rulesets.Taiko/Skinning/Legacy/TaikoLegacySkinTransformer.cs
@@ -79,6 +79,9 @@ public TaikoLegacySkinTransformer(ISkin skin)
spectatorList.Origin = Anchor.TopLeft;
spectatorList.Position = pos;
}
+
+ foreach (var d in container.OfType())
+ d.UsesFixedAnchor = true;
})
{
new LegacyDefaultComboCounter(),
@@ -103,6 +106,12 @@ public TaikoLegacySkinTransformer(ISkin skin)
{
switch (taikoComponent.Component)
{
+ case TaikoSkinComponents.DrumRollHead:
+ if (GetTexture("taiko-roll-middle") != null)
+ return new LegacyCirclePiece();
+
+ return null;
+
case TaikoSkinComponents.DrumRollBody:
if (GetTexture("taiko-roll-middle") != null)
return new LegacyDrumRoll();
diff --git a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs
index b25672f719bb..686d40ff37da 100644
--- a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs
+++ b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs
@@ -222,15 +222,18 @@ public override IEnumerable CreateEditorSetupSections() =>
public override RulesetSettingsSubsection CreateSettings() => new TaikoSettingsSubsection(this);
- protected override IEnumerable GetValidHitResults()
+ public override IEnumerable GetValidHitResults()
{
return new[]
{
HitResult.Great,
HitResult.Ok,
+ HitResult.Miss,
HitResult.SmallBonus,
HitResult.LargeBonus,
+ HitResult.IgnoreHit,
+ HitResult.IgnoreMiss,
};
}
diff --git a/osu.Game.Rulesets.Taiko/TaikoSettingsSubsection.cs b/osu.Game.Rulesets.Taiko/TaikoSettingsSubsection.cs
index 84dea474c545..58fb6a024661 100644
--- a/osu.Game.Rulesets.Taiko/TaikoSettingsSubsection.cs
+++ b/osu.Game.Rulesets.Taiko/TaikoSettingsSubsection.cs
@@ -4,6 +4,7 @@
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Localisation;
+using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Localisation;
using osu.Game.Overlays.Settings;
using osu.Game.Rulesets.Taiko.Configuration;
@@ -26,11 +27,11 @@ private void load()
Children = new Drawable[]
{
- new SettingsEnumDropdown
+ new SettingsItemV2(new FormEnumDropdown
{
- LabelText = RulesetSettingsStrings.TouchControlScheme,
+ Caption = RulesetSettingsStrings.TouchControlScheme,
Current = config.GetBindable(TaikoRulesetSetting.TouchControlScheme)
- }
+ })
};
}
}
diff --git a/osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs b/osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs
index 28133ffcb28e..31342b30c411 100644
--- a/osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs
+++ b/osu.Game.Rulesets.Taiko/TaikoSkinComponents.cs
@@ -8,6 +8,7 @@ public enum TaikoSkinComponents
InputDrum,
CentreHit,
RimHit,
+ DrumRollHead,
DrumRollBody,
DrumRollTick,
Swell,
diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs
index bdcb341fb4ef..db61f27cb2e3 100644
--- a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs
+++ b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs
@@ -194,7 +194,7 @@ private void load(OsuColour colours)
var hitWindows = new TaikoHitWindows();
- HitResult[] usableHitResults = Enum.GetValues().Where(r => hitWindows.IsHitResultAllowed(r)).ToArray();
+ HitResult[] usableHitResults = Enum.GetValues().Where(hitWindows.IsHitResultAllowed).ToArray();
AddInternal(judgementPooler = new JudgementPooler(usableHitResults));
diff --git a/osu.Game.Tests.iOS/Info.plist b/osu.Game.Tests.iOS/Info.plist
index d2d0583e46cb..e08b9bf6e66f 100644
--- a/osu.Game.Tests.iOS/Info.plist
+++ b/osu.Game.Tests.iOS/Info.plist
@@ -35,8 +35,31 @@
UIInterfaceOrientationLandscapeRight
UIInterfaceOrientationLandscapeLeft
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
+ CFBundleIcons~ipad
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ AppIcon60x60
+
+ CFBundleIconName
+ AppIcon
+
+
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ AppIcon60x60
+ AppIcon76x76
+
+ CFBundleIconName
+ AppIcon
+
+
UIApplicationSupportsIndirectInputEvents
CADisableMinimumFrameDurationOnPhone
diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs
index 916e1e757a94..51875a25d93e 100644
--- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs
@@ -6,6 +6,7 @@
using System.IO;
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Audio;
using osu.Game.Beatmaps;
using osu.Game.Beatmaps.Formats;
@@ -42,9 +43,9 @@ public void TestDecodeBeatmapVersion()
var decoder = Decoder.GetDecoder(stream);
var working = new TestWorkingBeatmap(decoder.Decode(stream));
- Assert.AreEqual(6, working.Beatmap.BeatmapVersion);
+ ClassicAssert.AreEqual(6, working.Beatmap.BeatmapVersion);
Assert.That(working.Beatmap.BeatmapInfo.Ruleset.Name, Is.Not.EqualTo("null placeholder ruleset"));
- Assert.AreEqual(6, working.GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty()).BeatmapVersion);
+ ClassicAssert.AreEqual(6, working.GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty()).BeatmapVersion);
}
}
@@ -59,10 +60,10 @@ public void TestPreviewPointWithOffsets(bool applyOffsets)
((LegacyBeatmapDecoder)decoder).ApplyOffsets = applyOffsets;
var working = new TestWorkingBeatmap(decoder.Decode(stream));
- Assert.AreEqual(4, working.Beatmap.BeatmapVersion);
- Assert.AreEqual(4, working.GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty()).BeatmapVersion);
+ ClassicAssert.AreEqual(4, working.Beatmap.BeatmapVersion);
+ ClassicAssert.AreEqual(4, working.GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty()).BeatmapVersion);
- Assert.AreEqual(-1, working.BeatmapInfo.Metadata.PreviewTime);
+ ClassicAssert.AreEqual(-1, working.BeatmapInfo.Metadata.PreviewTime);
}
}
@@ -78,17 +79,17 @@ public void TestDecodeBeatmapGeneral()
var beatmapInfo = beatmap.BeatmapInfo;
var metadata = beatmap.Metadata;
- Assert.AreEqual("03. Renatus - Soleily 192kbps.mp3", metadata.AudioFile);
- Assert.AreEqual(0, beatmap.AudioLeadIn);
- Assert.AreEqual(164471, metadata.PreviewTime);
- Assert.AreEqual(0.7f, beatmap.StackLeniency);
- Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
- Assert.IsFalse(beatmap.LetterboxInBreaks);
- Assert.IsFalse(beatmap.SpecialStyle);
- Assert.IsFalse(beatmap.WidescreenStoryboard);
- Assert.IsFalse(beatmap.SamplesMatchPlaybackRate);
- Assert.AreEqual(CountdownType.None, beatmap.Countdown);
- Assert.AreEqual(0, beatmap.CountdownOffset);
+ ClassicAssert.AreEqual("03. Renatus - Soleily 192kbps.mp3", metadata.AudioFile);
+ ClassicAssert.AreEqual(0, beatmap.AudioLeadIn);
+ ClassicAssert.AreEqual(164471, metadata.PreviewTime);
+ ClassicAssert.AreEqual(0.7f, beatmap.StackLeniency);
+ ClassicAssert.True(beatmapInfo.Ruleset.OnlineID == 0);
+ ClassicAssert.False(beatmap.LetterboxInBreaks);
+ ClassicAssert.False(beatmap.SpecialStyle);
+ ClassicAssert.False(beatmap.WidescreenStoryboard);
+ ClassicAssert.False(beatmap.SamplesMatchPlaybackRate);
+ ClassicAssert.AreEqual(CountdownType.None, beatmap.Countdown);
+ ClassicAssert.AreEqual(0, beatmap.CountdownOffset);
}
}
@@ -108,13 +109,13 @@ public void TestDecodeBeatmapEditor()
95901, 106450, 116999, 119637, 130186, 140735, 151285,
161834, 164471, 175020, 185570, 196119, 206669, 209306
};
- Assert.AreEqual(expectedBookmarks.Length, beatmap.Bookmarks.Length);
+ ClassicAssert.AreEqual(expectedBookmarks.Length, beatmap.Bookmarks.Length);
for (int i = 0; i < expectedBookmarks.Length; i++)
- Assert.AreEqual(expectedBookmarks[i], beatmap.Bookmarks[i]);
- Assert.AreEqual(1.8, beatmap.DistanceSpacing);
- Assert.AreEqual(4, beatmap.BeatmapInfo.BeatDivisor);
- Assert.AreEqual(4, beatmap.GridSize);
- Assert.AreEqual(2, beatmap.TimelineZoom);
+ ClassicAssert.AreEqual(expectedBookmarks[i], beatmap.Bookmarks[i]);
+ ClassicAssert.AreEqual(1.8, beatmap.DistanceSpacing);
+ ClassicAssert.AreEqual(4, beatmap.BeatmapInfo.BeatDivisor);
+ ClassicAssert.AreEqual(4, beatmap.GridSize);
+ ClassicAssert.AreEqual(2, beatmap.TimelineZoom);
}
}
@@ -130,16 +131,16 @@ public void TestDecodeBeatmapMetadata()
var beatmapInfo = beatmap.BeatmapInfo;
var metadata = beatmap.Metadata;
- Assert.AreEqual("Renatus", metadata.Title);
- Assert.AreEqual("Renatus", metadata.TitleUnicode);
- Assert.AreEqual("Soleily", metadata.Artist);
- Assert.AreEqual("Soleily", metadata.ArtistUnicode);
- Assert.AreEqual("Gamu", metadata.Author.Username);
- Assert.AreEqual("Insane", beatmapInfo.DifficultyName);
- Assert.AreEqual(string.Empty, metadata.Source);
- Assert.AreEqual("MBC7 Unisphere 地球ヤバイEP Chikyu Yabai", metadata.Tags);
- Assert.AreEqual(557821, beatmapInfo.OnlineID);
- Assert.AreEqual(241526, beatmapInfo.BeatmapSet?.OnlineID);
+ ClassicAssert.AreEqual("Renatus", metadata.Title);
+ ClassicAssert.AreEqual("Renatus", metadata.TitleUnicode);
+ ClassicAssert.AreEqual("Soleily", metadata.Artist);
+ ClassicAssert.AreEqual("Soleily", metadata.ArtistUnicode);
+ ClassicAssert.AreEqual("Gamu", metadata.Author.Username);
+ ClassicAssert.AreEqual("Insane", beatmapInfo.DifficultyName);
+ ClassicAssert.AreEqual(string.Empty, metadata.Source);
+ ClassicAssert.AreEqual("MBC7 Unisphere 地球ヤバイEP Chikyu Yabai", metadata.Tags);
+ ClassicAssert.AreEqual(557821, beatmapInfo.OnlineID);
+ ClassicAssert.AreEqual(241526, beatmapInfo.BeatmapSet?.OnlineID);
}
}
@@ -153,12 +154,12 @@ public void TestDecodeBeatmapDifficulty()
{
var difficulty = decoder.Decode(stream).Difficulty;
- Assert.AreEqual(6.5f, difficulty.DrainRate);
- Assert.AreEqual(4, difficulty.CircleSize);
- Assert.AreEqual(8, difficulty.OverallDifficulty);
- Assert.AreEqual(9, difficulty.ApproachRate);
- Assert.AreEqual(1.8, difficulty.SliderMultiplier);
- Assert.AreEqual(2, difficulty.SliderTickRate);
+ ClassicAssert.AreEqual(6.5f, difficulty.DrainRate);
+ ClassicAssert.AreEqual(4, difficulty.CircleSize);
+ ClassicAssert.AreEqual(8, difficulty.OverallDifficulty);
+ ClassicAssert.AreEqual(9, difficulty.ApproachRate);
+ ClassicAssert.AreEqual(1.8, difficulty.SliderMultiplier);
+ ClassicAssert.AreEqual(2, difficulty.SliderTickRate);
}
}
@@ -174,10 +175,10 @@ public void TestDecodeBeatmapEvents()
var metadata = beatmap.Metadata;
var breakPoint = beatmap.Breaks[0];
- Assert.AreEqual("machinetop_background.jpg", metadata.BackgroundFile);
- Assert.AreEqual(122474, breakPoint.StartTime);
- Assert.AreEqual(140135, breakPoint.EndTime);
- Assert.IsTrue(breakPoint.HasEffect);
+ ClassicAssert.AreEqual("machinetop_background.jpg", metadata.BackgroundFile);
+ ClassicAssert.AreEqual(122474, breakPoint.StartTime);
+ ClassicAssert.AreEqual(140135, breakPoint.EndTime);
+ ClassicAssert.True(breakPoint.HasEffect);
}
}
@@ -192,7 +193,7 @@ public void TestDecodeVideoWithLowercaseExtension()
var beatmap = decoder.Decode(stream);
var metadata = beatmap.Metadata;
- Assert.AreEqual("BG.jpg", metadata.BackgroundFile);
+ ClassicAssert.AreEqual("BG.jpg", metadata.BackgroundFile);
}
}
@@ -207,7 +208,7 @@ public void TestDecodeVideoWithUppercaseExtension()
var beatmap = decoder.Decode(stream);
var metadata = beatmap.Metadata;
- Assert.AreEqual("BG.jpg", metadata.BackgroundFile);
+ ClassicAssert.AreEqual("BG.jpg", metadata.BackgroundFile);
}
}
@@ -222,7 +223,7 @@ public void TestDecodeImageSpecifiedAsVideo()
var beatmap = decoder.Decode(stream);
var metadata = beatmap.Metadata;
- Assert.AreEqual("BG.jpg", metadata.BackgroundFile);
+ ClassicAssert.AreEqual("BG.jpg", metadata.BackgroundFile);
}
}
@@ -237,67 +238,67 @@ public void TestDecodeBeatmapTimingPoints()
var beatmap = decoder.Decode(stream);
var controlPoints = (LegacyControlPointInfo)beatmap.ControlPointInfo;
- Assert.AreEqual(4, controlPoints.TimingPoints.Count);
- Assert.AreEqual(5, controlPoints.DifficultyPoints.Count);
- Assert.AreEqual(34, controlPoints.SamplePoints.Count);
- Assert.AreEqual(8, controlPoints.EffectPoints.Count);
+ ClassicAssert.AreEqual(4, controlPoints.TimingPoints.Count);
+ ClassicAssert.AreEqual(5, controlPoints.DifficultyPoints.Count);
+ ClassicAssert.AreEqual(34, controlPoints.SamplePoints.Count);
+ ClassicAssert.AreEqual(8, controlPoints.EffectPoints.Count);
var timingPoint = controlPoints.TimingPointAt(0);
- Assert.AreEqual(956, timingPoint.Time);
- Assert.AreEqual(329.67032967033, timingPoint.BeatLength);
- Assert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
- Assert.IsFalse(timingPoint.OmitFirstBarLine);
+ ClassicAssert.AreEqual(956, timingPoint.Time);
+ ClassicAssert.AreEqual(329.67032967033, timingPoint.BeatLength);
+ ClassicAssert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
+ ClassicAssert.False(timingPoint.OmitFirstBarLine);
timingPoint = controlPoints.TimingPointAt(48428);
- Assert.AreEqual(956, timingPoint.Time);
- Assert.AreEqual(329.67032967033d, timingPoint.BeatLength);
- Assert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
- Assert.IsFalse(timingPoint.OmitFirstBarLine);
+ ClassicAssert.AreEqual(956, timingPoint.Time);
+ ClassicAssert.AreEqual(329.67032967033d, timingPoint.BeatLength);
+ ClassicAssert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
+ ClassicAssert.False(timingPoint.OmitFirstBarLine);
timingPoint = controlPoints.TimingPointAt(119637);
- Assert.AreEqual(119637, timingPoint.Time);
- Assert.AreEqual(659.340659340659, timingPoint.BeatLength);
- Assert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
- Assert.IsFalse(timingPoint.OmitFirstBarLine);
+ ClassicAssert.AreEqual(119637, timingPoint.Time);
+ ClassicAssert.AreEqual(659.340659340659, timingPoint.BeatLength);
+ ClassicAssert.AreEqual(TimeSignature.SimpleQuadruple, timingPoint.TimeSignature);
+ ClassicAssert.False(timingPoint.OmitFirstBarLine);
var difficultyPoint = controlPoints.DifficultyPointAt(0);
- Assert.AreEqual(0, difficultyPoint.Time);
- Assert.AreEqual(1.0, difficultyPoint.SliderVelocity);
+ ClassicAssert.AreEqual(0, difficultyPoint.Time);
+ ClassicAssert.AreEqual(1.0, difficultyPoint.SliderVelocity);
difficultyPoint = controlPoints.DifficultyPointAt(48428);
- Assert.AreEqual(0, difficultyPoint.Time);
- Assert.AreEqual(1.0, difficultyPoint.SliderVelocity);
+ ClassicAssert.AreEqual(0, difficultyPoint.Time);
+ ClassicAssert.AreEqual(1.0, difficultyPoint.SliderVelocity);
difficultyPoint = controlPoints.DifficultyPointAt(116999);
- Assert.AreEqual(116999, difficultyPoint.Time);
- Assert.AreEqual(0.75, difficultyPoint.SliderVelocity, 0.1);
+ ClassicAssert.AreEqual(116999, difficultyPoint.Time);
+ ClassicAssert.AreEqual(0.75, difficultyPoint.SliderVelocity, 0.1);
var soundPoint = controlPoints.SamplePointAt(0);
- Assert.AreEqual(956, soundPoint.Time);
- Assert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
- Assert.AreEqual(60, soundPoint.SampleVolume);
+ ClassicAssert.AreEqual(956, soundPoint.Time);
+ ClassicAssert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
+ ClassicAssert.AreEqual(60, soundPoint.SampleVolume);
soundPoint = controlPoints.SamplePointAt(53373);
- Assert.AreEqual(53373, soundPoint.Time);
- Assert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
- Assert.AreEqual(60, soundPoint.SampleVolume);
+ ClassicAssert.AreEqual(53373, soundPoint.Time);
+ ClassicAssert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
+ ClassicAssert.AreEqual(60, soundPoint.SampleVolume);
soundPoint = controlPoints.SamplePointAt(119637);
- Assert.AreEqual(119637, soundPoint.Time);
- Assert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
- Assert.AreEqual(80, soundPoint.SampleVolume);
+ ClassicAssert.AreEqual(119637, soundPoint.Time);
+ ClassicAssert.AreEqual(HitSampleInfo.BANK_SOFT, soundPoint.SampleBank);
+ ClassicAssert.AreEqual(80, soundPoint.SampleVolume);
var effectPoint = controlPoints.EffectPointAt(0);
- Assert.AreEqual(0, effectPoint.Time);
- Assert.IsFalse(effectPoint.KiaiMode);
+ ClassicAssert.AreEqual(0, effectPoint.Time);
+ ClassicAssert.False(effectPoint.KiaiMode);
effectPoint = controlPoints.EffectPointAt(53703);
- Assert.AreEqual(53703, effectPoint.Time);
- Assert.IsTrue(effectPoint.KiaiMode);
+ ClassicAssert.AreEqual(53703, effectPoint.Time);
+ ClassicAssert.True(effectPoint.KiaiMode);
effectPoint = controlPoints.EffectPointAt(116637);
- Assert.AreEqual(95901, effectPoint.Time);
- Assert.IsFalse(effectPoint.KiaiMode);
+ ClassicAssert.AreEqual(95901, effectPoint.Time);
+ ClassicAssert.False(effectPoint.KiaiMode);
}
}
@@ -397,9 +398,9 @@ public void TestDecodeBeatmapColours()
new Color4(255, 177, 140, 255),
new Color4(100, 100, 100, 255), // alpha is specified as 100, but should be ignored.
};
- Assert.AreEqual(expectedColors.Length, comboColors.Count);
+ ClassicAssert.AreEqual(expectedColors.Length, comboColors.Count);
for (int i = 0; i < expectedColors.Length; i++)
- Assert.AreEqual(expectedColors[i], comboColors[i]);
+ ClassicAssert.AreEqual(expectedColors[i], comboColors[i]);
}
}
@@ -426,9 +427,9 @@ public void TestComboColourCountIsLimitedToEight()
new Color4(100, 100, 100, 255),
new Color4(142, 199, 255, 255),
};
- Assert.AreEqual(expectedColors.Length, comboColors.Count);
+ ClassicAssert.AreEqual(expectedColors.Length, comboColors.Count);
for (int i = 0; i < expectedColors.Length; i++)
- Assert.AreEqual(expectedColors[i], comboColors[i]);
+ ClassicAssert.AreEqual(expectedColors[i], comboColors[i]);
}
}
@@ -464,12 +465,12 @@ public void TestDecodeBeatmapComboOffsetsOsu()
new OsuBeatmapProcessor(converted).PreProcess();
new OsuBeatmapProcessor(converted).PostProcess();
- Assert.AreEqual(1, ((IHasComboInformation)converted.HitObjects.ElementAt(0)).ComboIndexWithOffsets);
- Assert.AreEqual(2, ((IHasComboInformation)converted.HitObjects.ElementAt(2)).ComboIndexWithOffsets);
- Assert.AreEqual(3, ((IHasComboInformation)converted.HitObjects.ElementAt(4)).ComboIndexWithOffsets);
- Assert.AreEqual(4, ((IHasComboInformation)converted.HitObjects.ElementAt(6)).ComboIndexWithOffsets);
- Assert.AreEqual(8, ((IHasComboInformation)converted.HitObjects.ElementAt(8)).ComboIndexWithOffsets);
- Assert.AreEqual(9, ((IHasComboInformation)converted.HitObjects.ElementAt(11)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(1, ((IHasComboInformation)converted.HitObjects.ElementAt(0)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(2, ((IHasComboInformation)converted.HitObjects.ElementAt(2)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(3, ((IHasComboInformation)converted.HitObjects.ElementAt(4)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(4, ((IHasComboInformation)converted.HitObjects.ElementAt(6)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(8, ((IHasComboInformation)converted.HitObjects.ElementAt(8)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(9, ((IHasComboInformation)converted.HitObjects.ElementAt(11)).ComboIndexWithOffsets);
}
}
@@ -487,12 +488,12 @@ public void TestDecodeBeatmapComboOffsetsCatch()
new CatchBeatmapProcessor(converted).PreProcess();
new CatchBeatmapProcessor(converted).PostProcess();
- Assert.AreEqual(1, ((IHasComboInformation)converted.HitObjects.ElementAt(0)).ComboIndexWithOffsets);
- Assert.AreEqual(2, ((IHasComboInformation)converted.HitObjects.ElementAt(2)).ComboIndexWithOffsets);
- Assert.AreEqual(3, ((IHasComboInformation)converted.HitObjects.ElementAt(4)).ComboIndexWithOffsets);
- Assert.AreEqual(4, ((IHasComboInformation)converted.HitObjects.ElementAt(6)).ComboIndexWithOffsets);
- Assert.AreEqual(8, ((IHasComboInformation)converted.HitObjects.ElementAt(8)).ComboIndexWithOffsets);
- Assert.AreEqual(9, ((IHasComboInformation)converted.HitObjects.ElementAt(11)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(1, ((IHasComboInformation)converted.HitObjects.ElementAt(0)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(2, ((IHasComboInformation)converted.HitObjects.ElementAt(2)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(3, ((IHasComboInformation)converted.HitObjects.ElementAt(4)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(4, ((IHasComboInformation)converted.HitObjects.ElementAt(6)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(8, ((IHasComboInformation)converted.HitObjects.ElementAt(8)).ComboIndexWithOffsets);
+ ClassicAssert.AreEqual(9, ((IHasComboInformation)converted.HitObjects.ElementAt(11)).ComboIndexWithOffsets);
}
}
@@ -508,8 +509,8 @@ public void TestDecodeBeatmapHitObjectCoordinatesLegacy()
var positionData = hitObjects[0] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.AreEqual(new Vector2(256, 256), positionData!.Position);
+ ClassicAssert.NotNull(positionData);
+ ClassicAssert.AreEqual(new Vector2(256, 256), positionData!.Position);
}
}
@@ -525,8 +526,8 @@ public void TestDecodeBeatmapHitObjectCoordinatesLazer()
var positionData = hitObjects[0] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.AreEqual(new Vector2(256.99853f, 256.001f), positionData!.Position);
+ ClassicAssert.NotNull(positionData);
+ ClassicAssert.AreEqual(new Vector2(256.99853f, 256.001f), positionData!.Position);
}
}
@@ -543,18 +544,18 @@ public void TestDecodeBeatmapHitObjects()
var curveData = hitObjects[0] as IHasPathWithRepeats;
var positionData = hitObjects[0] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.IsNotNull(curveData);
- Assert.AreEqual(new Vector2(192, 168), positionData!.Position);
- Assert.AreEqual(956, hitObjects[0].StartTime);
- Assert.IsTrue(hitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
+ ClassicAssert.NotNull(positionData);
+ ClassicAssert.NotNull(curveData);
+ ClassicAssert.AreEqual(new Vector2(192, 168), positionData!.Position);
+ ClassicAssert.AreEqual(956, hitObjects[0].StartTime);
+ ClassicAssert.True(hitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
positionData = hitObjects[1] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.AreEqual(new Vector2(304, 56), positionData!.Position);
- Assert.AreEqual(1285, hitObjects[1].StartTime);
- Assert.IsTrue(hitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
+ ClassicAssert.NotNull(positionData);
+ ClassicAssert.AreEqual(new Vector2(304, 56), positionData!.Position);
+ ClassicAssert.AreEqual(1285, hitObjects[1].StartTime);
+ ClassicAssert.True(hitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
}
}
@@ -585,22 +586,22 @@ public void TestDecodeControlPointCustomSampleBank()
{
var hitObjects = decoder.Decode(stream).HitObjects;
- Assert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[3]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[3]).LookupNames.First());
// The fourth object is a slider.
// `Samples` of a slider are presumed to control the volume of sounds that last the entire duration of the slider
// (such as ticks, slider slide sounds, etc.)
// Thus, the point of query of control points used for `Samples` is just beyond the start time of the slider.
- Assert.AreEqual("Gameplay/soft-hitnormal11", getTestableSampleInfo(hitObjects[4]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/soft-hitnormal11", getTestableSampleInfo(hitObjects[4]).LookupNames.First());
// That said, the `NodeSamples` of the slider are responsible for the sounds of the slider's head / tail / repeats / large ticks etc.
// Therefore, they should be read at the time instant correspondent to the given node.
// This means that the tail should use bank 8 rather than 11.
- Assert.AreEqual("Gameplay/soft-hitnormal11", ((ConvertSlider)hitObjects[4]).NodeSamples[0][0].LookupNames.First());
- Assert.AreEqual("Gameplay/soft-hitnormal8", ((ConvertSlider)hitObjects[4]).NodeSamples[1][0].LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/soft-hitnormal11", ((ConvertSlider)hitObjects[4]).NodeSamples[0][0].LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/soft-hitnormal8", ((ConvertSlider)hitObjects[4]).NodeSamples[1][0].LookupNames.First());
}
static HitSampleInfo getTestableSampleInfo(HitObject hitObject) => hitObject.Samples[0];
@@ -616,9 +617,9 @@ public void TestDecodeHitObjectCustomSampleBank()
{
var hitObjects = decoder.Decode(stream).HitObjects;
- Assert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal3", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal3", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
}
static HitSampleInfo getTestableSampleInfo(HitObject hitObject) => hitObject.Samples[0];
@@ -634,11 +635,11 @@ public void TestDecodeHitObjectFileSamples()
{
var hitObjects = decoder.Decode(stream).HitObjects;
- Assert.AreEqual("hit_1.wav", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
- Assert.AreEqual("hit_2.wav", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
- Assert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
- Assert.AreEqual("hit_1.wav", getTestableSampleInfo(hitObjects[3]).LookupNames.First());
- Assert.AreEqual(70, getTestableSampleInfo(hitObjects[3]).Volume);
+ ClassicAssert.AreEqual("hit_1.wav", getTestableSampleInfo(hitObjects[0]).LookupNames.First());
+ ClassicAssert.AreEqual("hit_2.wav", getTestableSampleInfo(hitObjects[1]).LookupNames.First());
+ ClassicAssert.AreEqual("Gameplay/normal-hitnormal2", getTestableSampleInfo(hitObjects[2]).LookupNames.First());
+ ClassicAssert.AreEqual("hit_1.wav", getTestableSampleInfo(hitObjects[3]).LookupNames.First());
+ ClassicAssert.AreEqual(70, getTestableSampleInfo(hitObjects[3]).Volume);
}
static HitSampleInfo getTestableSampleInfo(HitObject hitObject) => hitObject.Samples[0];
@@ -656,35 +657,35 @@ public void TestDecodeSliderSamples()
var slider1 = (ConvertSlider)hitObjects[0];
- Assert.AreEqual(1, slider1.NodeSamples[0].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[0][0].Name);
- Assert.AreEqual(1, slider1.NodeSamples[1].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[1][0].Name);
- Assert.AreEqual(1, slider1.NodeSamples[2].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[2][0].Name);
+ ClassicAssert.AreEqual(1, slider1.NodeSamples[0].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[0][0].Name);
+ ClassicAssert.AreEqual(1, slider1.NodeSamples[1].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[1][0].Name);
+ ClassicAssert.AreEqual(1, slider1.NodeSamples[2].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider1.NodeSamples[2][0].Name);
var slider2 = (ConvertSlider)hitObjects[1];
- Assert.AreEqual(2, slider2.NodeSamples[0].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[0][0].Name);
- Assert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[0][1].Name);
- Assert.AreEqual(2, slider2.NodeSamples[1].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[1][0].Name);
- Assert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[1][1].Name);
- Assert.AreEqual(2, slider2.NodeSamples[2].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[2][0].Name);
- Assert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[2][1].Name);
+ ClassicAssert.AreEqual(2, slider2.NodeSamples[0].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[0][0].Name);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[0][1].Name);
+ ClassicAssert.AreEqual(2, slider2.NodeSamples[1].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[1][0].Name);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[1][1].Name);
+ ClassicAssert.AreEqual(2, slider2.NodeSamples[2].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider2.NodeSamples[2][0].Name);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_CLAP, slider2.NodeSamples[2][1].Name);
var slider3 = (ConvertSlider)hitObjects[2];
- Assert.AreEqual(2, slider3.NodeSamples[0].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[0][0].Name);
- Assert.AreEqual(HitSampleInfo.HIT_WHISTLE, slider3.NodeSamples[0][1].Name);
- Assert.AreEqual(1, slider3.NodeSamples[1].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[1][0].Name);
- Assert.AreEqual(2, slider3.NodeSamples[2].Count);
- Assert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[2][0].Name);
- Assert.AreEqual(HitSampleInfo.HIT_CLAP, slider3.NodeSamples[2][1].Name);
+ ClassicAssert.AreEqual(2, slider3.NodeSamples[0].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[0][0].Name);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_WHISTLE, slider3.NodeSamples[0][1].Name);
+ ClassicAssert.AreEqual(1, slider3.NodeSamples[1].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[1][0].Name);
+ ClassicAssert.AreEqual(2, slider3.NodeSamples[2].Count);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_NORMAL, slider3.NodeSamples[2][0].Name);
+ ClassicAssert.AreEqual(HitSampleInfo.HIT_CLAP, slider3.NodeSamples[2][1].Name);
}
}
@@ -698,7 +699,7 @@ public void TestDecodeHitObjectNullAdditionBank()
{
var hitObjects = decoder.Decode(stream).HitObjects;
- Assert.AreEqual(hitObjects[0].Samples[0].Bank, hitObjects[0].Samples[1].Bank);
+ ClassicAssert.AreEqual(hitObjects[0].Samples[0].Bank, hitObjects[0].Samples[1].Bank);
}
}
@@ -739,10 +740,10 @@ public void TestInvalidBankDefaultsToNormal()
static void assertObjectHasBanks(HitObject hitObject, string normalBank, string? additionsBank = null)
{
- Assert.AreEqual(normalBank, hitObject.Samples[0].Bank);
+ ClassicAssert.AreEqual(normalBank, hitObject.Samples[0].Bank);
if (additionsBank != null)
- Assert.AreEqual(additionsBank, hitObject.Samples[1].Bank);
+ ClassicAssert.AreEqual(additionsBank, hitObject.Samples[1].Bank);
}
}
@@ -756,11 +757,11 @@ public void TestFallbackDecoderForCorruptedHeader()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
Assert.DoesNotThrow(() => beatmap = decoder.Decode(stream));
- Assert.IsNotNull(beatmap);
- Assert.AreEqual("Beatmap with corrupted header", beatmap.Metadata.Title);
- Assert.AreEqual("Evil Hacker", beatmap.Metadata.Author.Username);
+ ClassicAssert.NotNull(beatmap);
+ ClassicAssert.AreEqual("Beatmap with corrupted header", beatmap.Metadata.Title);
+ ClassicAssert.AreEqual("Evil Hacker", beatmap.Metadata.Author.Username);
}
}
@@ -774,11 +775,11 @@ public void TestFallbackDecoderForMissingHeader()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
Assert.DoesNotThrow(() => beatmap = decoder.Decode(stream));
- Assert.IsNotNull(beatmap);
- Assert.AreEqual("Beatmap with no header", beatmap.Metadata.Title);
- Assert.AreEqual("Incredibly Evil Hacker", beatmap.Metadata.Author.Username);
+ ClassicAssert.NotNull(beatmap);
+ ClassicAssert.AreEqual("Beatmap with no header", beatmap.Metadata.Title);
+ ClassicAssert.AreEqual("Incredibly Evil Hacker", beatmap.Metadata.Author.Username);
}
}
@@ -792,11 +793,11 @@ public void TestDecodeFileWithEmptyLinesAtStart()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
Assert.DoesNotThrow(() => beatmap = decoder.Decode(stream));
- Assert.IsNotNull(beatmap);
- Assert.AreEqual("Empty lines at start", beatmap.Metadata.Title);
- Assert.AreEqual("Edge Case Hunter", beatmap.Metadata.Author.Username);
+ ClassicAssert.NotNull(beatmap);
+ ClassicAssert.AreEqual("Empty lines at start", beatmap.Metadata.Title);
+ ClassicAssert.AreEqual("Edge Case Hunter", beatmap.Metadata.Author.Username);
}
}
@@ -810,11 +811,11 @@ public void TestDecodeFileWithEmptyLinesAndNoHeader()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
Assert.DoesNotThrow(() => beatmap = decoder.Decode(stream));
- Assert.IsNotNull(beatmap);
- Assert.AreEqual("The dog ate the file header", beatmap.Metadata.Title);
- Assert.AreEqual("Why does this keep happening", beatmap.Metadata.Author.Username);
+ ClassicAssert.NotNull(beatmap);
+ ClassicAssert.AreEqual("The dog ate the file header", beatmap.Metadata.Title);
+ ClassicAssert.AreEqual("Why does this keep happening", beatmap.Metadata.Author.Username);
}
}
@@ -828,11 +829,11 @@ public void TestDecodeFileWithContentImmediatelyAfterHeader()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
Assert.DoesNotThrow(() => beatmap = decoder.Decode(stream));
- Assert.IsNotNull(beatmap);
- Assert.AreEqual("No empty line delimiting header from contents", beatmap.Metadata.Title);
- Assert.AreEqual("Edge Case Hunter", beatmap.Metadata.Author.Username);
+ ClassicAssert.NotNull(beatmap);
+ ClassicAssert.AreEqual("No empty line delimiting header from contents", beatmap.Metadata.Title);
+ ClassicAssert.AreEqual("Edge Case Hunter", beatmap.Metadata.Author.Username);
}
}
@@ -855,7 +856,7 @@ public void TestAllowFallbackDecoderOverwrite()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
}
Assert.DoesNotThrow(LegacyDifficultyCalculatorBeatmapDecoder.Register);
@@ -864,7 +865,7 @@ public void TestAllowFallbackDecoderOverwrite()
using (var stream = new LineBufferedReader(resStream))
{
Assert.DoesNotThrow(() => decoder = Decoder.GetDecoder(stream));
- Assert.IsInstanceOf(decoder);
+ ClassicAssert.IsInstanceOf(decoder);
}
}
diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapEncoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapEncoderTest.cs
index 35ce73389511..c18bb9e90229 100644
--- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapEncoderTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapEncoderTest.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Text;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.Audio.Track;
using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores;
@@ -100,7 +101,7 @@ static ControlPointInfo removeLegacyControlPointTypes(ControlPointInfo controlPo
{
// emulate non-legacy control points by cloning the non-legacy portion.
// the assertion is that the encoder can recreate this losslessly from hitobject data.
- Assert.IsInstanceOf(controlPointInfo);
+ ClassicAssert.IsInstanceOf(controlPointInfo);
var newControlPoints = new ControlPointInfo();
@@ -129,7 +130,7 @@ private void compareBeatmaps((IBeatmap beatmap, TestLegacySkin skin) expected, (
Assert.That(actual.beatmap.HitObjects.Serialize(), Is.EqualTo(expected.beatmap.HitObjects.Serialize()));
// Check skin.
- Assert.IsTrue(areComboColoursEqual(expected.skin.Configuration, actual.skin.Configuration));
+ ClassicAssert.True(areComboColoursEqual(expected.skin.Configuration, actual.skin.Configuration));
}
[Test]
diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyScoreDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyScoreDecoderTest.cs
index 2815c9cd8fb3..1292d25d6ace 100644
--- a/osu.Game.Tests/Beatmaps/Formats/LegacyScoreDecoderTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/LegacyScoreDecoderTest.cs
@@ -9,6 +9,7 @@
using System.IO;
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.Extensions;
using osu.Game.Beatmaps;
using osu.Game.Beatmaps.Formats;
@@ -58,18 +59,18 @@ public void TestDecodeManiaReplay()
{
var score = decoder.Parse(resourceStream);
- Assert.AreEqual(3, score.ScoreInfo.Ruleset.OnlineID);
+ ClassicAssert.AreEqual(3, score.ScoreInfo.Ruleset.OnlineID);
- Assert.AreEqual(2, score.ScoreInfo.Statistics[HitResult.Great]);
- Assert.AreEqual(1, score.ScoreInfo.Statistics[HitResult.Good]);
+ ClassicAssert.AreEqual(2, score.ScoreInfo.Statistics[HitResult.Great]);
+ ClassicAssert.AreEqual(1, score.ScoreInfo.Statistics[HitResult.Good]);
- Assert.AreEqual(829_931, score.ScoreInfo.LegacyTotalScore);
- Assert.AreEqual(3, score.ScoreInfo.MaxCombo);
+ ClassicAssert.AreEqual(829_931, score.ScoreInfo.LegacyTotalScore);
+ ClassicAssert.AreEqual(3, score.ScoreInfo.MaxCombo);
Assert.That(score.ScoreInfo.APIMods.Select(m => m.Acronym), Is.EquivalentTo(new[] { "CL", "9K", "DS" }));
Assert.That((2 * 300d + 1 * 200) / (3 * 305d), Is.EqualTo(score.ScoreInfo.Accuracy).Within(0.0001));
- Assert.AreEqual(ScoreRank.B, score.ScoreInfo.Rank);
+ ClassicAssert.AreEqual(ScoreRank.B, score.ScoreInfo.Rank);
Assert.That(score.Replay.Frames, Has.One.Matches(frame =>
frame.Time == 414 && frame.Actions.SequenceEqual(new[] { ManiaAction.Key1, ManiaAction.Key18 })));
@@ -85,10 +86,10 @@ public void TestDecodeTaikoReplay()
{
var score = decoder.Parse(resourceStream);
- Assert.AreEqual(1, score.ScoreInfo.Ruleset.OnlineID);
- Assert.AreEqual(4, score.ScoreInfo.Statistics[HitResult.Great]);
- Assert.AreEqual(2, score.ScoreInfo.Statistics[HitResult.LargeBonus]);
- Assert.AreEqual(4, score.ScoreInfo.MaxCombo);
+ ClassicAssert.AreEqual(1, score.ScoreInfo.Ruleset.OnlineID);
+ ClassicAssert.AreEqual(4, score.ScoreInfo.Statistics[HitResult.Great]);
+ ClassicAssert.AreEqual(2, score.ScoreInfo.Statistics[HitResult.LargeBonus]);
+ ClassicAssert.AreEqual(4, score.ScoreInfo.MaxCombo);
Assert.That(score.Replay.Frames, Is.Not.Empty);
}
diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs
index b10cce6a525e..9b76bd53ec24 100644
--- a/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs
@@ -3,6 +3,7 @@
using System.Linq;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osuTK;
using osu.Framework.Graphics;
using osu.Game.Beatmaps.Formats;
@@ -25,73 +26,73 @@ public void TestDecodeStoryboardEvents()
{
var storyboard = decoder.Decode(stream);
- Assert.IsTrue(storyboard.HasDrawable);
- Assert.AreEqual(6, storyboard.Layers.Count());
+ ClassicAssert.True(storyboard.HasDrawable);
+ ClassicAssert.AreEqual(6, storyboard.Layers.Count());
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.IsNotNull(background);
- Assert.AreEqual(16, background.Elements.Count);
- Assert.IsTrue(background.VisibleWhenFailing);
- Assert.IsTrue(background.VisibleWhenPassing);
- Assert.AreEqual("Background", background.Name);
+ ClassicAssert.NotNull(background);
+ ClassicAssert.AreEqual(16, background.Elements.Count);
+ ClassicAssert.True(background.VisibleWhenFailing);
+ ClassicAssert.True(background.VisibleWhenPassing);
+ ClassicAssert.AreEqual("Background", background.Name);
StoryboardLayer fail = storyboard.Layers.Single(l => l.Depth == 2);
- Assert.IsNotNull(fail);
- Assert.AreEqual(0, fail.Elements.Count);
- Assert.IsTrue(fail.VisibleWhenFailing);
- Assert.IsFalse(fail.VisibleWhenPassing);
- Assert.AreEqual("Fail", fail.Name);
+ ClassicAssert.NotNull(fail);
+ ClassicAssert.AreEqual(0, fail.Elements.Count);
+ ClassicAssert.True(fail.VisibleWhenFailing);
+ ClassicAssert.False(fail.VisibleWhenPassing);
+ ClassicAssert.AreEqual("Fail", fail.Name);
StoryboardLayer pass = storyboard.Layers.Single(l => l.Depth == 1);
- Assert.IsNotNull(pass);
- Assert.AreEqual(0, pass.Elements.Count);
- Assert.IsFalse(pass.VisibleWhenFailing);
- Assert.IsTrue(pass.VisibleWhenPassing);
- Assert.AreEqual("Pass", pass.Name);
+ ClassicAssert.NotNull(pass);
+ ClassicAssert.AreEqual(0, pass.Elements.Count);
+ ClassicAssert.False(pass.VisibleWhenFailing);
+ ClassicAssert.True(pass.VisibleWhenPassing);
+ ClassicAssert.AreEqual("Pass", pass.Name);
StoryboardLayer foreground = storyboard.Layers.Single(l => l.Depth == 0);
- Assert.IsNotNull(foreground);
- Assert.AreEqual(151, foreground.Elements.Count);
- Assert.IsTrue(foreground.VisibleWhenFailing);
- Assert.IsTrue(foreground.VisibleWhenPassing);
- Assert.AreEqual("Foreground", foreground.Name);
+ ClassicAssert.NotNull(foreground);
+ ClassicAssert.AreEqual(151, foreground.Elements.Count);
+ ClassicAssert.True(foreground.VisibleWhenFailing);
+ ClassicAssert.True(foreground.VisibleWhenPassing);
+ ClassicAssert.AreEqual("Foreground", foreground.Name);
StoryboardLayer overlay = storyboard.Layers.Single(l => l.Depth == int.MinValue);
- Assert.IsNotNull(overlay);
- Assert.IsEmpty(overlay.Elements);
- Assert.IsTrue(overlay.VisibleWhenFailing);
- Assert.IsTrue(overlay.VisibleWhenPassing);
- Assert.AreEqual("Overlay", overlay.Name);
+ ClassicAssert.NotNull(overlay);
+ ClassicAssert.IsEmpty(overlay.Elements);
+ ClassicAssert.True(overlay.VisibleWhenFailing);
+ ClassicAssert.True(overlay.VisibleWhenPassing);
+ ClassicAssert.AreEqual("Overlay", overlay.Name);
int spriteCount = background.Elements.Count(x => x.GetType() == typeof(StoryboardSprite));
int animationCount = background.Elements.Count(x => x.GetType() == typeof(StoryboardAnimation));
int sampleCount = background.Elements.Count(x => x.GetType() == typeof(StoryboardSampleInfo));
- Assert.AreEqual(15, spriteCount);
- Assert.AreEqual(1, animationCount);
- Assert.AreEqual(0, sampleCount);
- Assert.AreEqual(background.Elements.Count, spriteCount + animationCount + sampleCount);
+ ClassicAssert.AreEqual(15, spriteCount);
+ ClassicAssert.AreEqual(1, animationCount);
+ ClassicAssert.AreEqual(0, sampleCount);
+ ClassicAssert.AreEqual(background.Elements.Count, spriteCount + animationCount + sampleCount);
var sprite = background.Elements.ElementAt(0) as StoryboardSprite;
- Assert.NotNull(sprite);
- Assert.IsTrue(sprite!.HasCommands);
- Assert.AreEqual(new Vector2(320, 240), sprite.InitialPosition);
- Assert.IsTrue(sprite.IsDrawable);
- Assert.AreEqual(Anchor.Centre, sprite.Origin);
- Assert.AreEqual("SB/lyric/ja-21.png", sprite.Path);
+ ClassicAssert.NotNull(sprite);
+ ClassicAssert.True(sprite!.HasCommands);
+ ClassicAssert.AreEqual(new Vector2(320, 240), sprite.InitialPosition);
+ ClassicAssert.True(sprite.IsDrawable);
+ ClassicAssert.AreEqual(Anchor.Centre, sprite.Origin);
+ ClassicAssert.AreEqual("SB/lyric/ja-21.png", sprite.Path);
var animation = background.Elements.OfType().First();
- Assert.NotNull(animation);
- Assert.AreEqual(141175, animation.EndTime);
- Assert.AreEqual(10, animation.FrameCount);
- Assert.AreEqual(30, animation.FrameDelay);
- Assert.IsTrue(animation.HasCommands);
- Assert.AreEqual(new Vector2(320, 240), animation.InitialPosition);
- Assert.IsTrue(animation.IsDrawable);
- Assert.AreEqual(AnimationLoopType.LoopForever, animation.LoopType);
- Assert.AreEqual(Anchor.Centre, animation.Origin);
- Assert.AreEqual("SB/red jitter/red_0000.jpg", animation.Path);
- Assert.AreEqual(78993, animation.StartTime);
+ ClassicAssert.NotNull(animation);
+ ClassicAssert.AreEqual(141175, animation.EndTime);
+ ClassicAssert.AreEqual(10, animation.FrameCount);
+ ClassicAssert.AreEqual(30, animation.FrameDelay);
+ ClassicAssert.True(animation.HasCommands);
+ ClassicAssert.AreEqual(new Vector2(320, 240), animation.InitialPosition);
+ ClassicAssert.True(animation.IsDrawable);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopForever, animation.LoopType);
+ ClassicAssert.AreEqual(Anchor.Centre, animation.Origin);
+ ClassicAssert.AreEqual("SB/red jitter/red_0000.jpg", animation.Path);
+ ClassicAssert.AreEqual(78993, animation.StartTime);
}
}
@@ -106,13 +107,13 @@ public void TestLoopWithoutExplicitFadeOut()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(1, background.Elements.Count);
+ ClassicAssert.AreEqual(1, background.Elements.Count);
- Assert.AreEqual(2000, background.Elements[0].StartTime);
- Assert.AreEqual(2000, (background.Elements[0] as StoryboardAnimation)?.EarliestTransformTime);
+ ClassicAssert.AreEqual(2000, background.Elements[0].StartTime);
+ ClassicAssert.AreEqual(2000, (background.Elements[0] as StoryboardAnimation)?.EarliestTransformTime);
- Assert.AreEqual(3000, (background.Elements[0] as StoryboardAnimation)?.GetEndTime());
- Assert.AreEqual(12000, (background.Elements[0] as StoryboardAnimation)?.EndTimeForDisplay);
+ ClassicAssert.AreEqual(3000, (background.Elements[0] as StoryboardAnimation)?.GetEndTime());
+ ClassicAssert.AreEqual(12000, (background.Elements[0] as StoryboardAnimation)?.EndTimeForDisplay);
}
}
@@ -127,11 +128,11 @@ public void TestCorrectAnimationStartTime()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(1, background.Elements.Count);
+ ClassicAssert.AreEqual(1, background.Elements.Count);
- Assert.AreEqual(2000, background.Elements[0].StartTime);
+ ClassicAssert.AreEqual(2000, background.Elements[0].StartTime);
// This property should be used in DrawableStoryboardAnimation as a starting point for animation playback.
- Assert.AreEqual(1000, (background.Elements[0] as StoryboardAnimation)?.EarliestTransformTime);
+ ClassicAssert.AreEqual(1000, (background.Elements[0] as StoryboardAnimation)?.EarliestTransformTime);
}
}
@@ -146,10 +147,10 @@ public void TestNoopFadeTransformIsIgnoredForLifetime()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(2, background.Elements.Count);
+ ClassicAssert.AreEqual(2, background.Elements.Count);
- Assert.AreEqual(1500, background.Elements[0].StartTime);
- Assert.AreEqual(1500, background.Elements[1].StartTime);
+ ClassicAssert.AreEqual(1500, background.Elements[0].StartTime);
+ ClassicAssert.AreEqual(1500, background.Elements[1].StartTime);
}
}
@@ -164,12 +165,12 @@ public void TestOutOfOrderStartTimes()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(2, background.Elements.Count);
+ ClassicAssert.AreEqual(2, background.Elements.Count);
- Assert.AreEqual(1500, background.Elements[0].StartTime);
- Assert.AreEqual(1000, background.Elements[1].StartTime);
+ ClassicAssert.AreEqual(1500, background.Elements[0].StartTime);
+ ClassicAssert.AreEqual(1000, background.Elements[1].StartTime);
- Assert.AreEqual(1000, storyboard.EarliestEventTime);
+ ClassicAssert.AreEqual(1000, storyboard.EarliestEventTime);
}
}
@@ -184,12 +185,12 @@ public void TestEarliestStartTimeWithLoopAlphas()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(2, background.Elements.Count);
+ ClassicAssert.AreEqual(2, background.Elements.Count);
- Assert.AreEqual(1000, background.Elements[0].StartTime);
- Assert.AreEqual(1000, background.Elements[1].StartTime);
+ ClassicAssert.AreEqual(1000, background.Elements[0].StartTime);
+ ClassicAssert.AreEqual(1000, background.Elements[1].StartTime);
- Assert.AreEqual(1000, storyboard.EarliestEventTime);
+ ClassicAssert.AreEqual(1000, storyboard.EarliestEventTime);
}
}
@@ -204,7 +205,7 @@ public void TestDecodeVariableWithSuffix()
var storyboard = decoder.Decode(stream);
StoryboardLayer background = storyboard.Layers.Single(l => l.Depth == 3);
- Assert.AreEqual(3456, ((StoryboardSprite)background.Elements.Single()).InitialPosition.X);
+ ClassicAssert.AreEqual(3456, ((StoryboardSprite)background.Elements.Single()).InitialPosition.X);
}
}
@@ -221,7 +222,7 @@ public void TestDecodeVideoWithLowercaseExtension()
StoryboardLayer video = storyboard.Layers.Single(l => l.Name == "Video");
Assert.That(video.Elements.Count, Is.EqualTo(1));
- Assert.AreEqual("Video.avi", ((StoryboardVideo)video.Elements[0]).Path);
+ ClassicAssert.AreEqual("Video.avi", ((StoryboardVideo)video.Elements[0]).Path);
}
}
@@ -238,7 +239,7 @@ public void TestDecodeVideoWithUppercaseExtension()
StoryboardLayer video = storyboard.Layers.Single(l => l.Name == "Video");
Assert.That(video.Elements.Count, Is.EqualTo(1));
- Assert.AreEqual("Video.AVI", ((StoryboardVideo)video.Elements[0]).Path);
+ ClassicAssert.AreEqual("Video.AVI", ((StoryboardVideo)video.Elements[0]).Path);
}
}
@@ -268,12 +269,12 @@ public void TestDecodeOutOfRangeLoopAnimationType()
var storyboard = decoder.Decode(stream);
StoryboardLayer foreground = storyboard.Layers.Single(l => l.Depth == 0);
- Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[0]).LoopType);
- Assert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[1]).LoopType);
- Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[2]).LoopType);
- Assert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[3]).LoopType);
- Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[4]).LoopType);
- Assert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[5]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[0]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[1]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[2]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopOnce, ((StoryboardAnimation)foreground.Elements[3]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[4]).LoopType);
+ ClassicAssert.AreEqual(AnimationLoopType.LoopForever, ((StoryboardAnimation)foreground.Elements[5]).LoopType);
}
}
diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs
index c20cf7befd10..c0c330dba5b9 100644
--- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs
@@ -5,8 +5,8 @@
using System.IO;
using System.Linq;
-using DeepEqual.Syntax;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Audio;
using osu.Game.Beatmaps;
using osu.Game.Beatmaps.Formats;
@@ -15,7 +15,6 @@
using osu.Game.Rulesets.Objects.Types;
using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Osu.Beatmaps;
-using osu.Game.Rulesets.Scoring;
using osu.Game.Tests.Resources;
using osuTK;
@@ -33,17 +32,17 @@ public void TestDecodeMetadata()
{
var beatmap = decodeAsJson(normal);
var meta = beatmap.BeatmapInfo.Metadata;
- Assert.AreEqual(241526, beatmap.BeatmapInfo.BeatmapSet?.OnlineID);
- Assert.AreEqual("Soleily", meta.Artist);
- Assert.AreEqual("Soleily", meta.ArtistUnicode);
- Assert.AreEqual("03. Renatus - Soleily 192kbps.mp3", meta.AudioFile);
- Assert.AreEqual("Gamu", meta.Author.Username);
- Assert.AreEqual("machinetop_background.jpg", meta.BackgroundFile);
- Assert.AreEqual(164471, meta.PreviewTime);
- Assert.AreEqual(string.Empty, meta.Source);
- Assert.AreEqual("MBC7 Unisphere 地球ヤバイEP Chikyu Yabai", meta.Tags);
- Assert.AreEqual("Renatus", meta.Title);
- Assert.AreEqual("Renatus", meta.TitleUnicode);
+ ClassicAssert.AreEqual(241526, beatmap.BeatmapInfo.BeatmapSet?.OnlineID);
+ ClassicAssert.AreEqual("Soleily", meta.Artist);
+ ClassicAssert.AreEqual("Soleily", meta.ArtistUnicode);
+ ClassicAssert.AreEqual("03. Renatus - Soleily 192kbps.mp3", meta.AudioFile);
+ ClassicAssert.AreEqual("Gamu", meta.Author.Username);
+ ClassicAssert.AreEqual("machinetop_background.jpg", meta.BackgroundFile);
+ ClassicAssert.AreEqual(164471, meta.PreviewTime);
+ ClassicAssert.AreEqual(string.Empty, meta.Source);
+ ClassicAssert.AreEqual("MBC7 Unisphere 地球ヤバイEP Chikyu Yabai", meta.Tags);
+ ClassicAssert.AreEqual("Renatus", meta.Title);
+ ClassicAssert.AreEqual("Renatus", meta.TitleUnicode);
}
[Test]
@@ -51,14 +50,14 @@ public void TestDecodeGeneral()
{
var beatmap = decodeAsJson(normal);
var beatmapInfo = beatmap.BeatmapInfo;
- Assert.AreEqual(0, beatmap.AudioLeadIn);
- Assert.AreEqual(0.7f, beatmap.StackLeniency);
- Assert.AreEqual(false, beatmap.SpecialStyle);
- Assert.IsTrue(beatmapInfo.Ruleset.OnlineID == 0);
- Assert.AreEqual(false, beatmap.LetterboxInBreaks);
- Assert.AreEqual(false, beatmap.WidescreenStoryboard);
- Assert.AreEqual(CountdownType.None, beatmap.Countdown);
- Assert.AreEqual(0, beatmap.CountdownOffset);
+ ClassicAssert.AreEqual(0, beatmap.AudioLeadIn);
+ ClassicAssert.AreEqual(0.7f, beatmap.StackLeniency);
+ ClassicAssert.AreEqual(false, beatmap.SpecialStyle);
+ ClassicAssert.True(beatmapInfo.Ruleset.OnlineID == 0);
+ ClassicAssert.AreEqual(false, beatmap.LetterboxInBreaks);
+ ClassicAssert.AreEqual(false, beatmap.WidescreenStoryboard);
+ ClassicAssert.AreEqual(CountdownType.None, beatmap.Countdown);
+ ClassicAssert.AreEqual(0, beatmap.CountdownOffset);
}
[Test]
@@ -73,13 +72,13 @@ public void TestDecodeEditor()
95901, 106450, 116999, 119637, 130186, 140735, 151285,
161834, 164471, 175020, 185570, 196119, 206669, 209306
};
- Assert.AreEqual(expectedBookmarks.Length, beatmap.Bookmarks.Length);
+ ClassicAssert.AreEqual(expectedBookmarks.Length, beatmap.Bookmarks.Length);
for (int i = 0; i < expectedBookmarks.Length; i++)
- Assert.AreEqual(expectedBookmarks[i], beatmap.Bookmarks[i]);
- Assert.AreEqual(1.8, beatmap.DistanceSpacing);
- Assert.AreEqual(4, beatmapInfo.BeatDivisor);
- Assert.AreEqual(4, beatmap.GridSize);
- Assert.AreEqual(2, beatmap.TimelineZoom);
+ ClassicAssert.AreEqual(expectedBookmarks[i], beatmap.Bookmarks[i]);
+ ClassicAssert.AreEqual(1.8, beatmap.DistanceSpacing);
+ ClassicAssert.AreEqual(4, beatmapInfo.BeatDivisor);
+ ClassicAssert.AreEqual(4, beatmap.GridSize);
+ ClassicAssert.AreEqual(2, beatmap.TimelineZoom);
}
[Test]
@@ -87,12 +86,12 @@ public void TestDecodeDifficulty()
{
var beatmap = decodeAsJson(normal);
var difficulty = beatmap.Difficulty;
- Assert.AreEqual(6.5f, difficulty.DrainRate);
- Assert.AreEqual(4, difficulty.CircleSize);
- Assert.AreEqual(8, difficulty.OverallDifficulty);
- Assert.AreEqual(9, difficulty.ApproachRate);
- Assert.AreEqual(1.8, difficulty.SliderMultiplier);
- Assert.AreEqual(2, difficulty.SliderTickRate);
+ ClassicAssert.AreEqual(6.5f, difficulty.DrainRate);
+ ClassicAssert.AreEqual(4, difficulty.CircleSize);
+ ClassicAssert.AreEqual(8, difficulty.OverallDifficulty);
+ ClassicAssert.AreEqual(9, difficulty.ApproachRate);
+ ClassicAssert.AreEqual(1.8, difficulty.SliderMultiplier);
+ ClassicAssert.AreEqual(2, difficulty.SliderTickRate);
}
[Test]
@@ -112,19 +111,19 @@ public void TestDecodePostConverted()
var curveData = beatmap.HitObjects[0] as IHasPathWithRepeats;
var positionData = beatmap.HitObjects[0] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.IsNotNull(curveData);
- Assert.AreEqual(90, curveData.Path.Distance);
- Assert.AreEqual(new Vector2(192, 168), positionData.Position);
- Assert.AreEqual(956, beatmap.HitObjects[0].StartTime);
- Assert.IsTrue(beatmap.HitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
+ Assert.That(positionData, Is.Not.Null);
+ Assert.That(curveData, Is.Not.Null);
+ ClassicAssert.AreEqual(90, curveData.Path.Distance);
+ ClassicAssert.AreEqual(new Vector2(192, 168), positionData.Position);
+ ClassicAssert.AreEqual(956, beatmap.HitObjects[0].StartTime);
+ ClassicAssert.True(beatmap.HitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
positionData = beatmap.HitObjects[1] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.AreEqual(new Vector2(304, 56), positionData.Position);
- Assert.AreEqual(1285, beatmap.HitObjects[1].StartTime);
- Assert.IsTrue(beatmap.HitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
+ Assert.That(positionData, Is.Not.Null);
+ ClassicAssert.AreEqual(new Vector2(304, 56), positionData.Position);
+ ClassicAssert.AreEqual(1285, beatmap.HitObjects[1].StartTime);
+ ClassicAssert.True(beatmap.HitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
}
[Test]
@@ -135,35 +134,35 @@ public void TestDecodeHitObjects()
var curveData = beatmap.HitObjects[0] as IHasPathWithRepeats;
var positionData = beatmap.HitObjects[0] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.IsNotNull(curveData);
- Assert.AreEqual(90, curveData.Path.Distance);
- Assert.AreEqual(new Vector2(192, 168), positionData.Position);
- Assert.AreEqual(956, beatmap.HitObjects[0].StartTime);
- Assert.IsTrue(beatmap.HitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
+ Assert.That(positionData, Is.Not.Null);
+ Assert.That(curveData, Is.Not.Null);
+ ClassicAssert.AreEqual(90, curveData.Path.Distance);
+ ClassicAssert.AreEqual(new Vector2(192, 168), positionData.Position);
+ ClassicAssert.AreEqual(956, beatmap.HitObjects[0].StartTime);
+ ClassicAssert.True(beatmap.HitObjects[0].Samples.Any(s => s.Name == HitSampleInfo.HIT_NORMAL));
positionData = beatmap.HitObjects[1] as IHasPosition;
- Assert.IsNotNull(positionData);
- Assert.AreEqual(new Vector2(304, 56), positionData.Position);
- Assert.AreEqual(1285, beatmap.HitObjects[1].StartTime);
- Assert.IsTrue(beatmap.HitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
+ Assert.That(positionData, Is.Not.Null);
+ ClassicAssert.AreEqual(new Vector2(304, 56), positionData.Position);
+ ClassicAssert.AreEqual(1285, beatmap.HitObjects[1].StartTime);
+ ClassicAssert.True(beatmap.HitObjects[1].Samples.Any(s => s.Name == HitSampleInfo.HIT_CLAP));
}
- [TestCase(normal)]
- [TestCase(marathon)]
- [Ignore("temporarily disabled pending DeepEqual fix (https://github.com/jamesfoster/DeepEqual/pull/35)")]
- // Currently fails:
- // [TestCase(with_sb)]
- public void TestParity(string beatmap)
- {
- var legacy = decode(beatmap, out Beatmap json);
- json.WithDeepEqual(legacy)
- .IgnoreProperty(r => r.DeclaringType == typeof(HitWindows)
- // Todo: CustomSampleBank shouldn't exist going forward, we need a conversion mechanism
- || r.Name == nameof(LegacyDecoder.LegacySampleControlPoint.CustomSampleBank))
- .Assert();
- }
+ // [TestCase(normal)]
+ // [TestCase(marathon)]
+ // [Ignore("temporarily disabled pending DeepEqual fix (https://github.com/jamesfoster/DeepEqual/pull/35)")]
+ // // Currently fails:
+ // // [TestCase(with_sb)]
+ // public void TestParity(string beatmap)
+ // {
+ // var legacy = decode(beatmap, out Beatmap json);
+ // json.WithDeepEqual(legacy)
+ // .IgnoreProperty(r => r.DeclaringType == typeof(HitWindows)
+ // // Todo: CustomSampleBank shouldn't exist going forward, we need a conversion mechanism
+ // || r.Name == nameof(LegacyDecoder.LegacySampleControlPoint.CustomSampleBank))
+ // .Assert();
+ // }
[Test]
public void TestGetJsonDecoder()
@@ -187,7 +186,7 @@ public void TestGetJsonDecoder()
}
}
- Assert.IsInstanceOf(typeof(JsonBeatmapDecoder), decoder);
+ ClassicAssert.IsInstanceOf(typeof(JsonBeatmapDecoder), decoder);
}
///
diff --git a/osu.Game.Tests/Beatmaps/Formats/ParsingTest.cs b/osu.Game.Tests/Beatmaps/Formats/ParsingTest.cs
index 339063633ada..8aaa5dd3f342 100644
--- a/osu.Game.Tests/Beatmaps/Formats/ParsingTest.cs
+++ b/osu.Game.Tests/Beatmaps/Formats/ParsingTest.cs
@@ -6,6 +6,7 @@
using System;
using System.Globalization;
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Game.Beatmaps.Formats;
namespace osu.Game.Tests.Beatmaps.Formats
@@ -33,9 +34,9 @@ public void TestNaNHandling()
[TestCase(-10, 10)]
public void TestValidRanges(double input, double limit = Parsing.MAX_PARSE_VALUE)
{
- Assert.AreEqual(Parsing.ParseInt((input).ToString(CultureInfo.InvariantCulture), (int)limit), (int)input);
- Assert.AreEqual(Parsing.ParseFloat((input).ToString(CultureInfo.InvariantCulture), (float)limit), (float)input);
- Assert.AreEqual(Parsing.ParseDouble((input).ToString(CultureInfo.InvariantCulture), limit), input);
+ ClassicAssert.AreEqual(Parsing.ParseInt((input).ToString(CultureInfo.InvariantCulture), (int)limit), (int)input);
+ ClassicAssert.AreEqual(Parsing.ParseFloat((input).ToString(CultureInfo.InvariantCulture), (float)limit), (float)input);
+ ClassicAssert.AreEqual(Parsing.ParseDouble((input).ToString(CultureInfo.InvariantCulture), limit), input);
}
[TestCase(double.PositiveInfinity)]
diff --git a/osu.Game.Tests/Beatmaps/IO/BeatmapImportHelper.cs b/osu.Game.Tests/Beatmaps/IO/BeatmapImportHelper.cs
index 055832d7536b..6e3025e99f69 100644
--- a/osu.Game.Tests/Beatmaps/IO/BeatmapImportHelper.cs
+++ b/osu.Game.Tests/Beatmaps/IO/BeatmapImportHelper.cs
@@ -8,7 +8,7 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
-using NUnit.Framework;
+using NUnit.Framework.Legacy;
using osu.Framework.Allocation;
using osu.Game.Beatmaps;
using osu.Game.Database;
@@ -62,16 +62,16 @@ private static void ensureLoaded(OsuGameBase osu, int timeout = 60000)
// TODO: add back some extra checks outside of the realm ones?
// var set = queryBeatmapSets().First();
// foreach (BeatmapInfo b in set.Beatmaps)
- // Assert.IsTrue(set.Beatmaps.Any(c => c.OnlineID == b.OnlineID));
- // Assert.IsTrue(set.Beatmaps.Count > 0);
+ // ClassicAssert.True(set.Beatmaps.Any(c => c.OnlineID == b.OnlineID));
+ // ClassicAssert.True(set.Beatmaps.Count > 0);
// var beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 0))?.Beatmap;
- // Assert.IsTrue(beatmap?.HitObjects.Any() == true);
+ // ClassicAssert.True(beatmap?.HitObjects.Any() == true);
// beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 1))?.Beatmap;
- // Assert.IsTrue(beatmap?.HitObjects.Any() == true);
+ // ClassicAssert.True(beatmap?.HitObjects.Any() == true);
// beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 2))?.Beatmap;
- // Assert.IsTrue(beatmap?.HitObjects.Any() == true);
+ // ClassicAssert.True(beatmap?.HitObjects.Any() == true);
// beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 3))?.Beatmap;
- // Assert.IsTrue(beatmap?.HitObjects.Any() == true);
+ // ClassicAssert.True(beatmap?.HitObjects.Any() == true);
}
private static void waitForOrAssert(Func result, string failureMessage, int timeout = 60000)
@@ -81,7 +81,7 @@ private static void waitForOrAssert(Func