Removing some unnecessary commits from this PR.

Adding newline to fix diff.

Update tests.yml

Update tests.yml

See rive.make

Attempt using a pre-generate makefile.

Update tests.yml

Remove windows make

One more windows test.

Make with verbose.

Trying verbose ar.exe

Retry

Make without parallel

More debug

Trying to fix this wsl issue

Seeing which version of make we have on github actions

Use an instance of the artboard for SMI test

Attempt wsl

Attempt wsl

install unzip

Again..

try to get unzip

add to path instead of github_path with wsl

just move premake to bin

use correct filename for premake

use crlf

Back to crlf

space

Attempt using just powershell

premake with powershell

call msbuild

add msbuild to path

Proper msbuild config

more args

Build rive tests

use right solution name

Use any cpu for tests

remove the config and platform

Update tests for windows

LS right dir

look for exe

Tests!

Add “b” so windows reads in binary mode

More “rb” fixes

Final “rb” fix!
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 23d2b92..c3001c1 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -13,7 +13,6 @@
 
     steps:
       - uses: actions/checkout@v2
-
       - name: Install
         run: |
           wget https://github.com/premake/premake-core/releases/download/v5.0.0-alpha16/premake-5.0.0-alpha16-linux.tar.gz
@@ -23,6 +22,7 @@
 
       - name: Build
         run: |
+          ./build.sh clean
           ./build.sh
           ./build.sh release
 
@@ -35,35 +35,31 @@
     runs-on: windows-latest
     steps:
       - uses: actions/checkout@v2
+      - name: Add msbuild to PATH
+        uses: microsoft/setup-msbuild@v1.1
 
-      # Using wget from powershell take no time (using choco to install it takes 1-2 minutes)
-      - name: Download Premake5
+      - name: Download Premake
         shell: powershell
         run: |
           echo GITHUB_WORKSPACE is ${{ github.workspace }}
-          wget https://github.com/premake/premake-core/releases/download/v5.0.0-alpha16/premake-5.0.0-alpha16-windows.zip -OutFile ${{ github.workspace }}/premake-5.0.0-alpha16-windows.zip
+          wget https://github.com/premake/premake-core/releases/download/v5.0.0-beta1/premake-5.0.0-beta1-windows.zip -OutFile ${{ github.workspace }}\premake-5.0.0-beta1-windows.zip
+          Expand-Archive -LiteralPath ${{ github.workspace }}\premake-5.0.0-beta1-windows.zip -DestinationPath C:\
 
-      - name: Install
-        shell: bash # mingw
+      - name: Build rive.lib
+        shell: powershell
         run: |
-          unzip premake-5.0.0-alpha16-windows.zip
-          chmod a+x premake5.exe
-          mkdir -p $HOME/.local/bin
-          mv premake5.exe $HOME/.local/bin
-          echo "$HOME/.local/bin" >> $GITHUB_PATH
+          cd build
+          C:\premake5.exe vs2022
+          MSBuild rive.sln /property:Configuration=Debug /property:Platform=x64
+          cd ..
 
-      - name: Build
-        shell: bash #mingw
+      - name: Run rive tests
+        shell: powershell
         run: |
-          ./build.sh
-          ./build.sh release
-
-
-      # - name: Tests
-      #   shell: bash
-      #   run: |
-      #     cd dev
-      #     ./test.sh
+          cd dev/test
+          C:\premake5.exe vs2022
+          MSBuild rive_tests.sln
+          build\bin\debug\tests.exe
 
   build-macos:
     runs-on: macOS-latest
diff --git a/build.sh b/build.sh
index 50eb11c..dfc3e67 100755
--- a/build.sh
+++ b/build.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-set -e
+set -e 
 
 pushd build &>/dev/null
 
diff --git a/dev/test/premake5.lua b/dev/test/premake5.lua
index 5fcf6b5..c0d716b 100644
--- a/dev/test/premake5.lua
+++ b/dev/test/premake5.lua
@@ -13,6 +13,62 @@
     end
 }
 
+
+WINDOWS_CLANG_CL_SUPPRESSED_WARNINGS = {
+    "-Wno-c++98-compat",
+    "-Wno-c++98-compat-pedantic",
+    "-Wno-reserved-macro-identifier",
+    "-Wno-newline-eof",
+    "-Wno-old-style-cast",
+    "-Wno-unused-parameter",
+    "-Wno-float-equal",
+    "-Wno-implicit-float-conversion",
+    "-Wno-shadow",
+    "-Wno-sign-conversion",
+    "-Wno-inconsistent-missing-destructor-override",
+    "-Wno-nested-anon-types",
+    "-Wno-suggest-destructor-override",
+    "-Wno-non-virtual-dtor",
+    "-Wno-unknown-argument",
+    "-Wno-gnu-anonymous-struct",
+    "-Wno-extra-semi",
+    "-Wno-cast-qual",
+    "-Wno-ignored-qualifiers",
+    "-Wno-double-promotion",
+    "-Wno-tautological-unsigned-zero-compare",
+    "-Wno-unreachable-code-break",
+    "-Wno-global-constructors",
+    "-Wno-switch-enum",
+    "-Wno-shorten-64-to-32",
+    "-Wno-missing-prototypes",
+    "-Wno-implicit-int-conversion",
+    "-Wno-unused-macros",
+    "-Wno-deprecated-copy-with-user-provided-dtor",
+    "-Wno-missing-variable-declarations",
+    "-Wno-ctad-maybe-unsupported",
+    "-Wno-vla-extension",
+    "-Wno-float-conversion",
+    "-Wno-gnu-zero-variadic-macro-arguments",
+    "-Wno-undef",
+    "-Wno-documentation",
+    "-Wno-documentation-pedantic",
+    "-Wno-documentation-unknown-command",
+    "-Wno-suggest-override",
+    "-Wno-unused-exception-parameter",
+    "-Wno-cast-align",
+    "-Wno-deprecated-declarations",
+    "-Wno-shadow-field",
+    "-Wno-nonportable-system-include-path",
+    "-Wno-reserved-identifier",
+    "-Wno-thread-safety-negative",
+    "-Wno-exit-time-destructors",
+    "-Wno-unreachable-code",
+    "-Wno-zero-as-null-pointer-constant",
+    "-Wno-pedantic",
+    "-Wno-sign-compare",
+}
+
+
 workspace "rive_tests"
 configurations {"debug"}
 
@@ -20,6 +76,7 @@
 kind "ConsoleApp"
 language "C++"
 cppdialect "C++17"
+toolset "clang"
 targetdir "build/bin/%{cfg.buildcfg}"
 objdir "build/obj/%{cfg.buildcfg}"
 
@@ -37,137 +94,7 @@
 defines {"DEBUG"}
 symbols "On"
 
---[[
-
--- Recursively iterate through all files in a dir
-function dirtree(dir)
-
-    assert(dir and dir ~= "", "Provide a directory")
-    if string.sub(dir, -1) == "/" then
-        dir = string.sub(dir, 1, -2)
-    end
-
-    local function yieldtree(dir)
-        for entry in lfs.dir(dir) do
-            if entry ~= "." and entry ~= ".." then
-                entry = dir .. "/" .. entry
-                local attr = lfs.attributes(entry)
-                coroutine.yield(entry, attr)
-                if attr.mode == "directory" then
-                    yieldtree(entry)
-                end
-            end
-        end
-    end
-    return coroutine.wrap(function()
-        yieldtree(dir)
-    end)
-end
-
--- Get the file extension from a string
-function getFileExtension(path)
-    return path:match("^.+(%..+)$")
-end
-
--- Get file paths to all files ending in the given file extension in a given dir
--- This will recurse through subdirs
-function getFilesByExtension(extension, dir)
-    local function yieldfile(dir)
-        for filename, attr in dirtree(dir) do
-            if attr.mode == "file" and getFileExtension(filename) == extension then
-                coroutine.yield(filename)
-            end
-        end
-    end
-    return coroutine.wrap(function()
-        yieldfile(dir)
-    end)
-end
-
--- Build test executable for a cpp file
-local function test(filepath)
-
-    local filename = filepath:match("([^/]+)$")
-    local projectname = filename:match("^[^%.]+")
-    -- print("Filepath: " .. filepath)
-    -- print("Filename: " .. filename)
-    -- print("Projectname: " .. projectname)
-
-    project(projectname)
-    kind "ConsoleApp"
-    language "C++"
-    cppdialect "C++17"
-    targetdir "build/bin/%{cfg.buildcfg}"
-    objdir "build/obj/%{cfg.buildcfg}"
-    
-    buildoptions {
-        "-Wall", 
-        "-fno-exceptions", 
-        "-fno-rtti"
-    }
-
-    includedirs {
-        "./include",
-        "../../rive/include"
-    }
-
-    files {
-        "../../rive/src/**.cpp",
-        filepath
-    }
-
-    filter "configurations:debug"
-        defines { "DEBUG" }
-        symbols "On"
-end
-
--- Build all cpp test files in Rive's test directory
-for cppFile in getFilesByExtension(".cpp", "../../rive/test/") do
-    test(cppFile)
-end
-
--- Build test executable for a cpp file and link to the precompiled rive lib
-local function test_precompiled(filepath)
-
-    local filename = filepath:match("([^/]+)$") .. "_linked"
-    local projectname = filename:match("^[^%.]+") .. "_linked"
-    -- print("Filepath: " .. filepath)
-    -- print("Filename: " .. filename)
-    -- print("Projectname: " .. projectname)
-
-    project(projectname)
-    kind "ConsoleApp"
-    language "C++"
-    cppdialect "C++17"
-    targetdir "build/bin/%{cfg.buildcfg}"
-    objdir "build/obj/%{cfg.buildcfg}"
-    
-    buildoptions {
-        "-Wall", 
-        "-fno-exceptions", 
-        "-fno-rtti"
-    }
-
-    includedirs {
-        "./include",
-        "../../rive/include"
-    }
-
-    files { filepath }
-
-    links
-    {
-        "../../rive/build/bin/debug/librive.a"
-    }
-
-    filter "configurations:debug"
-        defines { "DEBUG" }
-        symbols "On"
-end
-
--- Build all cpp test files in Rive's test directory
-for cppFile in getFilesByExtension(".cpp", "../../rive/test/") do
-    test_precompiled(cppFile)
-end
-
---]]
+filter "system:windows"
+    architecture "x64"
+    defines {"_USE_MATH_DEFINES"}
+    buildoptions {WINDOWS_CLANG_CL_SUPPRESSED_WARNINGS}
\ No newline at end of file
diff --git a/include/rive/relative_local_asset_resolver.hpp b/include/rive/relative_local_asset_resolver.hpp
index 598a5b7..63a7edb 100644
--- a/include/rive/relative_local_asset_resolver.hpp
+++ b/include/rive/relative_local_asset_resolver.hpp
@@ -25,7 +25,7 @@
 
         void loadContents(FileAsset& asset) override {
             std::string filename = m_Path + asset.uniqueFilename();
-            FILE* fp = fopen(filename.c_str(), "r");
+            FILE* fp = fopen(filename.c_str(), "rb");
 
             fseek(fp, 0, SEEK_END);
             const size_t length = ftell(fp);
diff --git a/skia/dependencies/clean_dependencies.sh b/skia/dependencies/clean_dependencies.sh
deleted file mode 100755
index bc58623..0000000
--- a/skia/dependencies/clean_dependencies.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-rm -fR ./gl3w
-rm -fR ./glfw
-rm -fR ./glfw_build
-rm -fR ./imgui
-rm -fR ./skia
-rm -fR ./skia_rive_optimized
\ No newline at end of file
diff --git a/skia/dependencies/make_skia.sh b/skia/dependencies/make_skia.sh
index e634644..1dd2c01 100755
--- a/skia/dependencies/make_skia.sh
+++ b/skia/dependencies/make_skia.sh
@@ -4,9 +4,8 @@
 
 ./get_skia.sh
 
-build_skia_rive_optimized() {
 # use Rive optimized/stripped Skia for iOS static libs.
-pushd skia_rive_optimized
+cd skia_rive_optimized
 
 python tools/git-sync-deps
 bin/gn gen out/ios64 --type=static_library --args=" \
@@ -206,55 +205,11 @@
 xcrun -sdk iphoneos lipo -create -arch armv7 out/ios32/libskia.a out/ios64/libskia.a -output out/libskia_ios.a
 xcrun -sdk iphoneos lipo -create -arch x86_64 out/iossim_x64/libskia.a -arch i386 out/iossim_x86/libskia.a out/iossim_arm64/libskia.a -output out/libskia_ios_sim.a
 
-popd
-}
-
-build_skia() {
 # build regular/full skia
-pushd skia
-python tools/git-sync-deps
+cd ../skia
 
 # build static for host
-bin/gn gen out/static/debug --type=static_library --args=" \
-    extra_cflags=[\"-fno-rtti\", \"-DSK_DISABLE_SKPICTURE\", \"-DSK_DISABLE_TEXT\", \"-DRIVE_OPTIMIZED\", \"-DSK_DISABLE_LEGACY_SHADERCONTEXT\", \"-DSK_DISABLE_LOWP_RASTER_PIPELINE\", \"-DSK_FORCE_RASTER_PIPELINE_BLITTER\", \"-DSK_DISABLE_AAA\", \"-DSK_DISABLE_EFFECT_DESERIALIZATION\"] \
-
-    is_official_build=false \
-    skia_use_gl=true \
-    skia_use_zlib=true \
-    skia_enable_gpu=true \
-    skia_enable_fontmgr_empty=false \
-    skia_use_libpng_encode=true \
-    skia_use_libpng_decode=true \
-    skia_enable_skgpu_v1=true \
-
-    skia_use_dng_sdk=false \
-    skia_use_egl=false \
-    skia_use_expat=false \
-    skia_use_fontconfig=false \
-    skia_use_freetype=false \
-    skia_use_icu=false \
-    skia_use_libheif=false \
-    skia_use_system_libpng=false \
-    skia_use_libjpeg_turbo_encode=false \
-    skia_use_libjpeg_turbo_decode=false \
-    skia_use_libwebp_encode=false \
-    skia_use_libwebp_decode=false \
-    skia_use_lua=false \
-    skia_use_piex=false \
-    skia_use_vulkan=false \
-    skia_use_metal=false \
-    skia_use_angle=false \
-    skia_use_system_zlib=false \
-    skia_enable_spirv_validation=false \
-    skia_enable_pdf=false \
-    skia_enable_skottie=false \
-    skia_enable_tools=false \
-    skia_enable_skgpu_v2=false \
-    "
-ninja -C out/static/debug
-du -hs out/static/debug/libskia.a
-
-bin/gn gen out/static/release --type=static_library --args=" \
+bin/gn gen out/static --type=static_library --args=" \
     extra_cflags=[\"-fno-rtti\", \"-flto=full\", \"-DSK_DISABLE_SKPICTURE\", \"-DSK_DISABLE_TEXT\", \"-DRIVE_OPTIMIZED\", \"-DSK_DISABLE_LEGACY_SHADERCONTEXT\", \"-DSK_DISABLE_LOWP_RASTER_PIPELINE\", \"-DSK_FORCE_RASTER_PIPELINE_BLITTER\", \"-DSK_DISABLE_AAA\", \"-DSK_DISABLE_EFFECT_DESERIALIZATION\"] \
 
     is_official_build=true \
@@ -290,10 +245,7 @@
     skia_enable_tools=false \
     skia_enable_skgpu_v2=false \
     "
-ninja -C out/static/release
-du -hs out/static/release/libskia.a
-popd
-}
+ninja -C out/static
+du -hs out/static/libskia.a
 
-build_skia_rive_optimized
-build_skia
+cd ..
\ No newline at end of file
diff --git a/skia/viewer/build/premake5.lua b/skia/viewer/build/premake5.lua
index e8e08aa..1442293 100644
--- a/skia/viewer/build/premake5.lua
+++ b/skia/viewer/build/premake5.lua
@@ -23,7 +23,7 @@
 
 links {"Cocoa.framework", "IOKit.framework", "CoreVideo.framework", "rive", "skia", "rive_skia_renderer", "glfw3"}
 libdirs {"../../../build/%{cfg.system}/bin/%{cfg.buildcfg}", "../../dependencies/glfw_build/src",
-         "../../dependencies/skia/out/static/%{cfg.buildcfg}", "../../renderer/build/%{cfg.system}/bin/%{cfg.buildcfg}"}
+         "../../dependencies/skia/out/static", "../../renderer/build/%{cfg.system}/bin/%{cfg.buildcfg}"}
 
 files {"../src/**.cpp", "../../dependencies/gl3w/build/src/gl3w.c",
        "../../dependencies/imgui/backends/imgui_impl_glfw.cpp",
@@ -31,19 +31,16 @@
        "../../dependencies/imgui/imgui.cpp", "../../dependencies/imgui/imgui_tables.cpp",
        "../../dependencies/imgui/imgui_draw.cpp"}
 
-buildoptions {"-Wall", "-fno-exceptions", "-fno-rtti"}
-
+buildoptions {"-Wall", "-fno-exceptions", "-fno-rtti", "-flto=full", "-g"}
 filter "configurations:debug"
 defines {"DEBUG"}
 symbols "On"
-buildoptions {"-g"}
 
 filter "configurations:release"
 
 defines {"RELEASE"}
 defines {"NDEBUG"}
 optimize "On"
-buildoptions {"-flto=full"}
 
 -- Clean Function --
 newaction {
diff --git a/src/animation/state_machine_instance.cpp b/src/animation/state_machine_instance.cpp
index 5831ef2..2a5a80b 100644
--- a/src/animation/state_machine_instance.cpp
+++ b/src/animation/state_machine_instance.cpp
@@ -332,7 +332,7 @@
             HitShape* hitShape;
             auto itr = hitShapeLookup.find(id);
             if (itr == hitShapeLookup.end()) {
-                auto shape = artboard->resolve(id);
+                auto shape = m_ArtboardInstance->resolve(id);
                 if (shape != nullptr && shape->is<Shape>()) {
                     hitShapeLookup[id] = hitShape = new HitShape(shape->as<Shape>());
                     m_HitShapes.push_back(hitShape);
diff --git a/test/state_machine_event_test.cpp b/test/state_machine_event_test.cpp
index 5dbdffa..a849048 100644
--- a/test/state_machine_event_test.cpp
+++ b/test/state_machine_event_test.cpp
@@ -63,7 +63,7 @@
 TEST_CASE("hit testing via a state machine works", "[file]") {
     RiveFileReader reader("../../test/assets/bullet_man.riv");
 
-    auto artboard = reader.file()->artboard("Bullet Man");
+    auto artboard = reader.file()->artboard("Bullet Man")->instance();
     REQUIRE(artboard != nullptr);
     REQUIRE(artboard->stateMachineCount() == 1);