Full Code of EdCharbeneau/BlazorSize for AI

master 59af9c85463a cached
115 files
4.4 MB
1.2M tokens
137 symbols
1 requests
Download .txt
Showing preview only (4,622K chars total). Download the full file or copy to clipboard to get everything.
Repository: EdCharbeneau/BlazorSize
Branch: master
Commit: 59af9c85463a
Files: 115
Total size: 4.4 MB

Directory structure:
gitextract_m_q4b0tl/

├── .gitattributes
├── .gitignore
├── BlazorPro.BlazorSize.BlazorRepl/
│   ├── BlazorPro.BlazorSize.BlazorRepl.csproj
│   ├── BlazorReplMediaQueryService.cs
│   └── LICENSE.txt
├── BlazorPro.BlazorSize.Bunit/
│   ├── BlazorPro.BlazorSize.Bunit.csproj
│   ├── BunitExtensions.cs
│   └── FakeMediaQueryService.cs
├── BlazorSize/
│   ├── BlazorPro.BlazorSize.csproj
│   ├── Configuration/
│   │   ├── ResizeOptions.cs
│   │   └── ServiceCollectionExtensions.cs
│   ├── LICENSE.txt
│   ├── MediaQuery/
│   │   ├── Breakpoints.cs
│   │   ├── IMediaQueryService.cs
│   │   ├── MediaQuery.razor
│   │   ├── MediaQuery.razor.cs
│   │   ├── MediaQueryArgs.cs
│   │   ├── MediaQueryCache.cs
│   │   ├── MediaQueryList.razor
│   │   ├── MediaQueryList.razor.cs
│   │   └── MediaQueryService.cs
│   ├── Resize/
│   │   ├── BrowserWindowSize.cs
│   │   ├── IResizeListener.cs
│   │   └── ResizeListener.cs
│   ├── _Imports.razor
│   ├── jest.config.js
│   ├── package.json
│   ├── readme.md
│   ├── scripts/
│   │   ├── blazorSizeMedia.ts
│   │   ├── blazorSizeMediaModule.ts
│   │   ├── blazorSizeResize.ts
│   │   ├── blazorSizeResizeModule.ts
│   │   └── tests/
│   │       └── blazorSize.test.ts
│   ├── tsconfig.build.json
│   └── tsconfig.json
├── BlazorSize.UnitTesting/
│   ├── BlazorPro.BlazorSize.UnitTesting.csproj
│   ├── Bunit/
│   │   ├── BunitExtensions.cs
│   │   └── FakeMediaQueryService.cs
│   └── LICENSE.txt
├── BlazorSize.e2eTests/
│   ├── BlazorSize Adaptive Table and Template.imgstore
│   ├── BlazorSize Adaptive Table and Template.resx
│   ├── BlazorSize Adaptive Table and Template.tstest
│   ├── BlazorSize Adaptive Table and Template.tstest.cs
│   ├── BlazorSize Construct & Dispose.imgstore
│   ├── BlazorSize Construct & Dispose.resx
│   ├── BlazorSize Construct & Dispose.tstest
│   ├── BlazorSize Size Reverse.imgstore
│   ├── BlazorSize Size Reverse.resx
│   ├── BlazorSize Size Reverse.tstest
│   ├── BlazorSize Size Reverse.tstest.cs
│   ├── BlazorSize Size Tests.imgstore
│   ├── BlazorSize Size Tests.resx
│   ├── BlazorSize Size Tests.tstest
│   ├── BlazorSize Size Tests.tstest.cs
│   ├── BlazorSize Test Multicast Reverse.imgstore
│   ├── BlazorSize Test Multicast Reverse.resx
│   ├── BlazorSize Test Multicast Reverse.tstest
│   ├── BlazorSize Test Multicast Reverse.tstest.cs
│   ├── BlazorSize Test Multicast.imgstore
│   ├── BlazorSize Test Multicast.resx
│   ├── BlazorSize Test Multicast.tstest
│   ├── BlazorSize Test Multicast.tstest.cs
│   ├── BlazorSize.e2eTests.csproj
│   ├── Profiler Configurations/
│   │   ├── {1c6f74bd-1a14-4014-a8c9-02fdb3cb8302}.tsprofconfig
│   │   └── {d3bce0f5-b6f6-45aa-959a-5c1c1753902b}.tsprofconfig
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Settings.aiis
│   └── TestLists/
│       └── BlazorSize .NET Web App.aiilist
├── BlazorSize.sln
├── BlazorWebApp/
│   ├── BlazorWebApp/
│   │   ├── BlazorWebApp.csproj
│   │   ├── Components/
│   │   │   ├── App.razor
│   │   │   ├── Pages/
│   │   │   │   └── Error.razor
│   │   │   └── _Imports.razor
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── appsettings.Development.json
│   │   ├── appsettings.json
│   │   └── wwwroot/
│   │       └── app.css
│   └── BlazorWebApp.Client/
│       ├── BlazorWebApp.Client.csproj
│       ├── Layout/
│       │   ├── MainLayout.razor
│       │   ├── MainLayout.razor.css
│       │   ├── NavMenu.razor
│       │   └── NavMenu.razor.css
│       ├── Program.cs
│       ├── Routes.razor
│       ├── _Imports.razor
│       └── wwwroot/
│           ├── appsettings.Development.json
│           └── appsettings.json
├── PlaywrightTests/
│   ├── MediaQueryTests.cs
│   ├── PlaywrightTests.csproj
│   ├── ResizeTests.cs
│   └── TestHelpers.cs
├── TestComponents/
│   ├── Data/
│   │   └── IWeatherForecastService.cs
│   ├── Pages/
│   │   ├── Blank.razor
│   │   ├── Error.razor
│   │   ├── FetchData.razor
│   │   ├── Index.razor
│   │   ├── Multicast.razor
│   │   ├── NullableFlag.razor
│   │   ├── ScreenSize.razor
│   │   ├── ScreenSizeReporter.razor
│   │   └── Templates.razor
│   ├── TestComponents.csproj
│   ├── WeatherCards.razor
│   ├── WeatherForecast.cs
│   ├── WeatherGrid.razor
│   ├── _Imports.razor
│   └── wwwroot/
│       ├── fixture.html
│       └── fixture.js
├── bUnitCompatibilityTests/
│   ├── CompTest.cs
│   ├── Sample.razor
│   ├── _Imports.razor
│   └── bUnitCompatibilityTests.csproj
├── package.json
└── readme.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
/BlazorSize/scripts/tests/*.js
/BlazorSize/wwwroot/*.js
/BlazorSize.e2eTests/Pages.g.cs
/BlazorSize.e2eTests/Results
/BlazorSize.e2eTests/.ts/project.state
/BlazorSize.e2eTests/Profiler Configurations/{1f06cb7a-bdc7-4bbe-a956-ce0dcffbcd0f}.tsprofconfig


================================================
FILE: BlazorPro.BlazorSize.BlazorRepl/BlazorPro.BlazorSize.BlazorRepl.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <Version>6.1.0</Version>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <Authors>Ed Charbeneau</Authors>
    <Company>EdCharbeneau.com</Company>
    <Description>A replacement service only for use with Telerik REPL for Blazor and BlazorSize. This is for demos only and should not be used outside of Telerik REPL for Blazor.</Description>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
    <PackageProjectUrl>https://github.com/EdCharbeneau/BlazorSize</PackageProjectUrl>
    <PackageIcon>blazor-glove-128.jpg</PackageIcon>
    <PackageIconUrl />
    <RepositoryUrl>https://github.com/EdCharbeneau/BlazorSize</RepositoryUrl>
    <PackageTags>Blazor, JavaScript Interop</PackageTags>
    <PackageReleaseNotes>
      6.0.0 Added support for Telerik REPL for Blazor.
    </PackageReleaseNotes>
  </PropertyGroup>

  <ItemGroup>
    <!-- Package Logo -->
    <None Include="..\_resources\blazor-glove-128.jpg">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
    <!-- Package license file -->
    <None Include="LICENSE.txt">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\BlazorSize\BlazorPro.BlazorSize.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: BlazorPro.BlazorSize.BlazorRepl/BlazorReplMediaQueryService.cs
================================================
namespace BlazorPro.BlazorSize
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.JSInterop;
    using BlazorPro.BlazorSize;

    public class BlazorReplMediaQueryService : IAsyncDisposable, IMediaQueryService
    {
        private readonly Lazy<Task<IJSObjectReference>> moduleTask;

        public BlazorReplMediaQueryService(IJSRuntime jsRuntime)
        {
            moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
            "import", "https://edcharbeneau.com/javascript/blazorSizeMediaModule.js").AsTask());
        }

        // JavaScript uses this value for tracking MediaQueryList instances.
        private DotNetObjectReference<MediaQueryList> DotNetInstance { get; set; } = null!;
        private readonly List<MediaQueryCache> mediaQueries = new();
        public List<MediaQueryCache> MediaQueries => mediaQueries;

        private MediaQueryCache? GetMediaQueryFromCache(string byMedia) => mediaQueries?.Find(q => q.MediaRequested == byMedia);

        public void AddQuery(MediaQuery newMediaQuery)
        {
            var cache = GetMediaQueryFromCache(byMedia: newMediaQuery.Media);
            if (cache == null)
            {
                cache = new MediaQueryCache
                {
                    MediaRequested = newMediaQuery.Media,
                };
                mediaQueries.Add(cache);
            }
            cache.MediaQueries?.Add(newMediaQuery);
        }

        public async Task RemoveQuery(MediaQuery mediaQuery)
        {
            if (mediaQuery == null) return;

            MediaQueryCache? cache = GetMediaQueryFromCache(byMedia: mediaQuery.Media);

            if (cache == null || cache.MediaQueries == null) return;

            try
            {
                cache.MediaQueries.Remove(mediaQuery);
                if (cache.MediaQueries.Any()) return;
                mediaQueries.Remove(cache);
                IJSObjectReference module = await moduleTask.Value;
                await module.InvokeVoidAsync($"removeMediaQuery", DotNetInstance, mediaQuery.InternalMedia.Media);
            }
            catch (Exception)
            {
                //https://stackoverflow.com/questions/72488563/blazor-server-side-application-throwing-system-invalidoperationexception-javas
            }
        }

        public async Task Initialize(MediaQuery mediaQuery)
        {
            if (mediaQuery?.Media == null) return;
            var cache = GetMediaQueryFromCache(byMedia: mediaQuery.Media);
            if (cache == null) return;

            if (cache.Value == null)
            {
                // If we don't flag the cache as loading, duplicate requests will be sent async.
                // Duplicate requests = poor performance, esp with web sockets.
                if (!cache.Loading)
                {
                    cache.Loading = true;

                    var module = await moduleTask.Value;
                    var task = module.InvokeAsync<MediaQueryArgs>($"addMediaQueryToList", DotNetInstance, cache.MediaRequested);
                    cache.Value = await task;
                    cache.Loading = task.IsCompleted;
                    // When loading is complete dispatch an update to all subscribers.
                    if (cache.MediaQueries is null) return;
                    foreach (var item in cache.MediaQueries)
                    {
                        item.MediaQueryChanged(cache.Value);
                    }
                }
            }
            else
            {
                var module = await moduleTask.Value;
                var task = module.InvokeAsync<MediaQueryArgs>($"getMediaQueryArgs", cache.MediaRequested);
                cache.Value = await task;

                mediaQuery.MediaQueryChanged(cache.Value);
            }
        }

        public async Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNetObjectReference)
        {
            DotNetInstance = dotNetObjectReference;
            var module = await moduleTask.Value;
            await module.InvokeVoidAsync("addMediaQueryList", dotNetObjectReference);
        }

        public async ValueTask DisposeAsync()
        {
            if (DotNetInstance is not null)
            {
                var module = await moduleTask.Value;
                await module.InvokeVoidAsync("removeMediaQueryList", DotNetInstance);
                DotNetInstance.Dispose();
                GC.SuppressFinalize(this);
            }
        }
    }
}

================================================
FILE: BlazorPro.BlazorSize.BlazorRepl/LICENSE.txt
================================================
Copyright 2022 Ed Charbeneau

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

================================================
FILE: BlazorPro.BlazorSize.Bunit/BlazorPro.BlazorSize.Bunit.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="bunit.web" Version="1.1.5" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\BlazorSize\BlazorPro.BlazorSize.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: BlazorPro.BlazorSize.Bunit/BunitExtensions.cs
================================================
using BlazorPro.BlazorSize;
using Microsoft.Extensions.DependencyInjection;

namespace Bunit
{
    public static class BunitExtensions
        {
            public static FakeMediaQueryService AddBlazorSize(this TestContextBase testContext)
            {
                testContext.RenderTree.Add<MediaQueryList>();
                var mediaQueryServices = new FakeMediaQueryService(testContext);
                testContext.Services.AddSingleton<IMediaQueryService>(mediaQueryServices);
                return mediaQueryServices;
            }
        }
}


================================================
FILE: BlazorPro.BlazorSize.Bunit/FakeMediaQueryService.cs
================================================
using System.Collections.Generic;
using System.Threading.Tasks;
using BlazorPro.BlazorSize;
using Bunit;
using Microsoft.JSInterop;

namespace Bunit
{
    public class FakeMediaQueryService : IMediaQueryService
    {
        private readonly TestContextBase contextBase;
        private MediaQueryArgs? activeMediaQuery = null;

        public List<MediaQueryCache> MediaQueries { get; } = new();

        public FakeMediaQueryService(TestContextBase contextBase)
        {
            this.contextBase = contextBase;
        }

        public void AddQuery(MediaQuery newMediaQuery)
        {
            var mediaQueryCache = GetMediaQueryFromCache(newMediaQuery.Media);

            if (mediaQueryCache is null)
            {
                mediaQueryCache = new MediaQueryCache()
                {
                    MediaRequested = newMediaQuery.Media
                };
                MediaQueries.Add(mediaQueryCache);
            }

            mediaQueryCache.MediaQueries.Add(newMediaQuery);

            SetActiveMediaQuery(activeMediaQuery);
        }

        public Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNetObjectReference)
            => Task.CompletedTask;

        public Task Initialize(MediaQuery mediaQuery)
            => Task.CompletedTask;

        public Task RemoveQuery(MediaQuery mediaQuery)
        {
            var mediaQueryFromCache = GetMediaQueryFromCache(mediaQuery.Media);
            if (mediaQueryFromCache is null)
                return Task.CompletedTask;

            mediaQueryFromCache.MediaQueries.Remove(mediaQuery);

            if (mediaQueryFromCache.MediaQueries.Count == 0)
                MediaQueries.Remove(mediaQueryFromCache);

            return Task.CompletedTask;
        }

        public void SetActiveBreakPoint(string breakpoint)
            => SetActiveMediaQuery(new MediaQueryArgs
            {
                Matches = true,
                Media = breakpoint
            });

        public void SetActiveMediaQuery(MediaQueryArgs args)
        {
            if (args is null)
                return;

            activeMediaQuery = args;

            // cache must be compared by actual value, not RequestedMedia when invoked from JavaScript
            // DOM Media value my be different that the initally requested media query value.
            var cache = GetMediaQueryFromCache(args.Media);

            if (cache is null) return;

            // Dispatch events to all subscribers
            contextBase.Renderer.Dispatcher.InvokeAsync(() =>
            {
                foreach (var item in cache.MediaQueries)
                {
                    item.MediaQueryChanged(args);
                }
            });
        }

        private MediaQueryCache GetMediaQueryFromCache(string byMedia)
            => MediaQueries?.Find(q => q.MediaRequested == byMedia);
    }
}


================================================
FILE: BlazorSize/BlazorPro.BlazorSize.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
    <TargetFrameworks>net9.0</TargetFrameworks>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Nullable>enable</Nullable>
    <LangVersion>latest</LangVersion>
    <Version>9.0.0</Version>
    <Authors>Ed Charbeneau</Authors>
    <Company>EdCharbeneau.com</Company>
    <Description>A JavaScript interop for Blazor used to detect the browser's screen size and perform Media Query tests. BlazorSize uses the DOM API `matchMedia` to test screen size. BlazorSize was created to allow Blazor components to render adaptively.</Description>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
    <PackageProjectUrl>https://github.com/EdCharbeneau/BlazorSize</PackageProjectUrl>
	  <PackageReadmeFile>readme.md</PackageReadmeFile>
    <PackageIcon>blazor-glove-128.jpg</PackageIcon>
    <PackageIconUrl />
    <RepositoryUrl>https://github.com/EdCharbeneau/BlazorSize</RepositoryUrl>
    <PackageTags>Blazor, JavaScript Interop</PackageTags>
    <PackageReleaseNotes>
		9.0.0 Fixes issue with UnobservedTaskExceptions
		8.0.0 Adds support for .NET 8 interactive modes
		6.2.2 Fixes more codepaths that may result in Microsoft.JSInterop.JSDisconnectedException
		6.2.1 Fixed Microsoft.JSInterop.JSDisconnectedException
		6.2.0 Fixed bug where MediaQuery dispose was not always working correctly.
		6.1.2 Fixed casing on JS modules, fixes deployment issues on Linux. (regression)
		6.1.1 Replaced deprecated `addListener` method. Removed console log messages, again.
		6.1.0 Removed dependency for bUnit.Core. Breaking changes may occur in test projects. Removed console log messages.
		6.0.0 Fixed possible null issues. .NET 6 support. Moved APIs for bUnit to BlazorPro.BlazorSize.UnitTesting.
		5.0.0 Added support for bUnit. Removed support for .NET 3.x
		4.0.0 no release, aligning with .NET 5.0. Next version will no longer support .NET 3.x
		3.2.0
		Added service interfaces, IMediaQueryService, IResizeListener to support unit testing scenarios
		Added end-to-end testing on source for QA
		3.1.0
		Added .NET 5 module loading for BlazorSize Resize Listener.
		Fixed casing on JS modules, fixes deployment issues on Linux.
		3.0.0
		Added .NET 5 module loading for BlazorSize Media Queries.
		2.3.0
		Fixed additional regressions from 2.2.0, update recommended.
		2.2.0
		Fixed possible regressions, update recommended.
		Updated Blazor dependencies.
		2.1.1
		Fixed MSBuild including *.json files breaking NuGet pkg.
		2.0.0
		Added MediaQueryList &amp; MediaQuery components.
      1.2.2
      Fixes initalization issues with Client-Side Blazor
      1.2.0
      Full-release
    </PackageReleaseNotes>
    <AssemblyVersion>6.2.0.0</AssemblyVersion>
    <FileVersion>6.2.0.0</FileVersion>
    <PackageId>BlazorPro.BlazorSize</PackageId>
  </PropertyGroup>

  <!--<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">-->
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components" Version="9.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
  </ItemGroup>

  <!-- NuGet info -->
  <ItemGroup>
	  <None Include="readme.md" Pack="true" PackagePath="\"/>
    <!-- Package Logo -->
    <None Include="..\_resources\blazor-glove-128.jpg">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
    <!-- Package license file -->
    <None Include="LICENSE.txt">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
    <!-- Exclude -->
    <!-- /scripts/test/*.js is removed via rimraf in the testing phase -->
    <Content Include="*.ts">
      <Pack>False</Pack>
    </Content>
    <Content Update="*.json">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      <Pack>False</Pack>
    </Content>
  </ItemGroup>

  <!-- static resources _content/* -->
  <!-- / Nuget Info -->
</Project>


================================================
FILE: BlazorSize/Configuration/ResizeOptions.cs
================================================
namespace BlazorPro.BlazorSize
{
    public class ResizeOptions
    {
        /// <summary>
        /// Rate in milliseconds that the browsers `resize()` event should report a change.
        /// Setting this value too low can cause poor application performance.
        /// </summary>
        public int ReportRate { get; set; } = 300;

        /// <summary>
        /// Report resize events and media queries in the browser's console.
        /// </summary>
        public bool EnableLogging { get; set; } = false;

        /// <summary>
        /// Suppress the first OnResized that is invoked when a new event handler is added.
        /// </summary>
        public bool SuppressInitEvent { get; set; } = false;
    }
}


================================================
FILE: BlazorSize/Configuration/ServiceCollectionExtensions.cs
================================================
using Microsoft.Extensions.DependencyInjection;
using System;

namespace BlazorPro.BlazorSize
{
    public static class ServiceCollectionExtensions
    {
        /// <summary>
        /// Adds a BlazorSize.ResizeListener as a Scoped instance.
        /// </summary>
        /// <param name="resizeOptions">Defines settings for this instance.</param>
        /// <returns>Continues the IServiceCollection chain.</returns>
        public static IServiceCollection AddResizeListener(this IServiceCollection services,
            Action<ResizeOptions>? resizeOptions = null)
        {
            services.AddScoped<IResizeListener, ResizeListener>();
         
            if(resizeOptions is not null)
                services.Configure(resizeOptions);
            
            return services;
        }

        /// <summary>
        /// Adds a BlazorSize.MediaQueryService as a Scoped instance.
        /// </summary>
        /// <returns>Continues the IServiceCollection chain.</returns>
        public static IServiceCollection AddMediaQueryService(this IServiceCollection services)
        {
            services.AddScoped<IMediaQueryService, MediaQueryService>();
            return services;
        }

    }
}

================================================
FILE: BlazorSize/LICENSE.txt
================================================
Copyright 2019 Ed Charbeneau

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

================================================
FILE: BlazorSize/MediaQuery/Breakpoints.cs
================================================
namespace BlazorPro.BlazorSize
{
    public static class Breakpoints
    {
        /// @media(min-width: 576px) { ... }
        /// Small devices (landscape phones, 576px and up)
        public const string SmallUp = "(min-width: 576px)";

        /// @media(min-width: 768px) { ... }
        /// Medium devices (tablets, 768px and up)
        public const string MediumUp = "(min-width: 768px)";

        // Large devices (desktops, 992px and up)
        /// @media(min-width: 992px) { ... }
        public const string LargeUp = "(min-width: 992px)";

        /// Extra large devices (large desktops, 1200px and up)
        /// @media(min-width: 1200px) { ... }
        public const string XLargeUp = "(min-width: 1200px)";

        /// Extra small devices (portrait phones, less than 576px)
        /// @media(max-width: 575.98px) { ... }
        public const string XSmallDown = "(max-width: 575.98px)";

        /// Small devices (landscape phones, less than 768px)
        /// @media(max-width: 767.98px) { ... }
        public const string SmallDown = "(max-width: 767.98px)";

        /// Medium devices (tablets, less than 992px)
        /// @media(max-width: 991.98px) { ... }
        public const string MediumDown = "(max-width: 991.98px)";

        /// Large devices (desktops, less than 1200px)
        /// @media(max-width: 1199.98px) { ... }
        public const string LargeDown = "(max-width: 1199.98px)";


        /// Small devices (landscape phones, 576px and up)
        /// @media(min-width: 576px) and(max-width: 767.98px) { ... }
        public static string OnlySmall => Between(SmallDown, SmallUp);

        /// Medium devices (tablets, 768px and up)
        /// @media(min-width: 768px) and(max-width: 991.98px) { ... }
        public static string OnlyMedium => Between(MediumDown, MediumUp);

        /// Large devices (desktops, 992px and up)
        /// @media(min-width: 992px) and(max-width: 1199.98px) { ... }
        public static string OnlyLarge => Between(LargeDown, LargeUp);

        /// <summary>
        /// Combines two media queries with the `and` keyword.
        /// Values must include parenthesis.
        /// Ex: (max-width: 1199.98px) and (min-width: 992px)
        /// </summary>
        /// <param name="max"></param>
        /// <param name="min"></param>
        public static string Between(string max, string min) => $"{max} and {min}";
    }
}


================================================
FILE: BlazorSize/MediaQuery/IMediaQueryService.cs
================================================
using Microsoft.JSInterop;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public interface IMediaQueryService
    {
        List<MediaQueryCache> MediaQueries { get; }

        void AddQuery(MediaQuery newMediaQuery);
        Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNetObjectReference);

        Task Initialize(MediaQuery mediaQuery);
        Task RemoveQuery(MediaQuery mediaQuery);

    }
}

================================================
FILE: BlazorSize/MediaQuery/MediaQuery.razor
================================================
@namespace BlazorPro.BlazorSize
@if (InternalMedia.Matches)
{
    @Matched
}
else
{
    @Unmatched
}

================================================
FILE: BlazorSize/MediaQuery/MediaQuery.razor.cs
================================================
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public partial class MediaQuery : IAsyncDisposable
    {
        /// <summary>
        /// Media Query string, using standard media query syntax.
        /// Ex: "(max-width: 767.98px)"
        /// </summary>
        [Parameter] public string Media { get; set; } = "";

        /// <summary>
        /// The result of the specified Media property.
        /// Use the @bind-Media directive for automated binding.
        /// </summary>
        [Parameter] public bool Matches { get; set; }

        /// <summary>
        /// Handles the changed event when the media query's Matches property is changed.
        /// Use the @bind-Media directive for automated binding.
        /// </summary>
        [Parameter] public EventCallback<bool> MatchesChanged { get; set; }

        /// <summary>
        /// Optional template, shown only when the Matches value is true.
        /// Using a template will disable @bind-Matches for performance.
        /// </summary>
        [Parameter] public RenderFragment? Matched { get; set; }

        /// <summary>
        /// Optional template, shown only when the Matches value is false.
        /// Using a template will disable @bind-Matches for performance.
        /// </summary>
        [Parameter] public RenderFragment? Unmatched { get; set; }

        /// <summary>
        /// Gets the parent MediaQueryList container.
        /// </summary>
        [CascadingParameter] public MediaQueryList? MediaQueryList { get; set; }

        /// <summary>
        /// Set by the DOM, the InternalMedia represents the actual Media Query value held by the DOM.
        /// </summary>
        public MediaQueryArgs InternalMedia { get; private set; } = new MediaQueryArgs();

        protected override void OnInitialized()
        {
            if (MediaQueryList == null)
            {
                throw new NullReferenceException("MediaQueryList is null. The MediaQueryList component should be added to the root or MainLayout of your application. Or, set an interactive mode, BlazorSize requires an interactive rendermode.");
            }
            else
            {
                MediaQueryList.AddQuery(this);
            }
        }

        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            if (MediaQueryList == null) return;
            if (firstRender)
            {
                await MediaQueryList.Initialize(this);
            }
        }

        /// <summary>
        /// Used by the MediaQueryList. Invokes the full media query changed event.
        /// </summary>
        /// <param name="args">MediaQueryArgs</param>
        public void MediaQueryChanged(MediaQueryArgs args)
        {
            MatchesChanged.InvokeAsync(args.Matches);
            InternalMedia = args;
            if (Matched != null || Unmatched != null)
            {
                StateHasChanged();
            }
        }

        public async ValueTask DisposeAsync()
        {
            if (MediaQueryList == null) return;

            try
            {
                await MediaQueryList.RemoveQuery(this);
            }
            catch (JSDisconnectedException)
            {
                // Ignore 
                //https://github.com/EdCharbeneau/BlazorSize/issues/93
            }

        }
    }
}

================================================
FILE: BlazorSize/MediaQuery/MediaQueryArgs.cs
================================================
namespace BlazorPro.BlazorSize
{
    public class MediaQueryArgs
    {
        public string? Media { get; set; }
        public bool Matches { get; set; }
    }
}


================================================
FILE: BlazorSize/MediaQuery/MediaQueryCache.cs
================================================
using System.Collections.Generic;
namespace BlazorPro.BlazorSize
{
    public class MediaQueryCache
    {
        /// <summary>
        /// Initally requested (unmodified) media query.
        /// </summary>
        public string? MediaRequested { get; set; }

        /// <summary>
        /// Is this item already awating a JavaScript interop call.
        /// </summary>
        public bool Loading { get; set; }

        /// <summary>
        /// The actual value represented by the DOM. This may differ from the initially requested media query.
        /// </summary>
        public MediaQueryArgs? Value { get; set; }

        /// <summary>
        /// Media Queries that share a RequestedMedia value. Used to aggregate event handlers and minimize JS calls.
        /// </summary>
        // Nullable because Blazor's lifecycle sometimes GC's this object before the cleanup routines are finished.
        public List<MediaQuery>? MediaQueries { get; set; } = new List<MediaQuery>();
    }
}



================================================
FILE: BlazorSize/MediaQuery/MediaQueryList.razor
================================================
@namespace BlazorPro.BlazorSize
<CascadingValue Value="this">
    @ChildContent
</CascadingValue>

================================================
FILE: BlazorSize/MediaQuery/MediaQueryList.razor.cs
================================================
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public partial class MediaQueryList
    {
        // IMediaQueryService
        [Inject] public IMediaQueryService MqService { get; set; } = null!;

        /// <summary>
        /// Application content where Media Query components may exist.
        /// </summary>
        [Parameter] public RenderFragment? ChildContent { get; set; }

        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            if (firstRender)
            {
                await MqService.CreateMediaQueryList(DotNetObjectReference.Create(this));
                await base.OnAfterRenderAsync(firstRender);
            }

        }

        public void AddQuery(MediaQuery newMediaQuery) => MqService.AddQuery(newMediaQuery);
        public async Task RemoveQuery(MediaQuery mediaQuery) => await MqService.RemoveQuery(mediaQuery);
        public async Task Initialize(MediaQuery mediaQuery) => await MqService.Initialize(mediaQuery);
        /// <summary>
        /// Called by JavaScript when a media query changes in the dom.
        /// </summary>
        /// <param name="args"></param>
        [JSInvokable(nameof(MediaQueryList.MediaQueryChanged))]
        public void MediaQueryChanged(MediaQueryArgs args)
        {
            // cache must be compared by actual value, not RequestedMedia when invoked from JavaScript
            // DOM Media value my be different that the initally requested media query value.
            var cache = MqService.MediaQueries.Find(q => q.Value?.Media == args.Media);

            if (cache is null) return;

            // Dispatch events to all subscribers
            if (cache.MediaQueries is null) return;
            foreach (var item in cache.MediaQueries)
            {
                item.MediaQueryChanged(args);
            }
        }
    }
}

================================================
FILE: BlazorSize/MediaQuery/MediaQueryService.cs
================================================
using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public class MediaQueryService : IAsyncDisposable, IMediaQueryService
    {
        private readonly Lazy<Task<IJSObjectReference>> moduleTask;

        public MediaQueryService(IJSRuntime jsRuntime)
        {
            moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
            "import", "./_content/BlazorPro.BlazorSize/blazorSizeMediaModule.js").AsTask());
        }

        // JavaScript uses this value for tracking MediaQueryList instances.
        private DotNetObjectReference<MediaQueryList> DotNetInstance { get; set; } = null!;
        private readonly List<MediaQueryCache> mediaQueries = new();
        public List<MediaQueryCache> MediaQueries => mediaQueries;

        private MediaQueryCache? GetMediaQueryFromCache(string byMedia) => mediaQueries?.Find(q => q.MediaRequested == byMedia);

        public void AddQuery(MediaQuery newMediaQuery)
        {
            MediaQueryCache? cache = GetMediaQueryFromCache(byMedia: newMediaQuery.Media);
            if (cache is null)
            {
                cache = new MediaQueryCache
                {
                    MediaRequested = newMediaQuery.Media,
                };
                mediaQueries.Add(cache);
            }
            cache.MediaQueries?.Add(newMediaQuery);
        }

        public async Task RemoveQuery(MediaQuery mediaQuery)
        {
            if (mediaQuery is null) return;

            MediaQueryCache? cache = GetMediaQueryFromCache(byMedia: mediaQuery.Media);

            if (cache is null || cache.MediaQueries is null) return;

            try
            {
                cache.MediaQueries.Remove(mediaQuery);
                if (cache.MediaQueries.Any()) return;
                mediaQueries.Remove(cache);
                IJSObjectReference module = await moduleTask.Value;
                await module.InvokeVoidAsync($"removeMediaQuery", DotNetInstance, mediaQuery.InternalMedia.Media);
            }
            catch (Exception)
            {
                //https://github.com/EdCharbeneau/BlazorSize/issues/93
                //https://stackoverflow.com/questions/72488563/blazor-server-side-application-throwing-system-invalidoperationexception-javas
            }
        }

        public async Task Initialize(MediaQuery mediaQuery)
        {
            if (mediaQuery?.Media is null) return;
            var cache = GetMediaQueryFromCache(byMedia: mediaQuery.Media);
            if (cache is null) return;

            if (cache.Value is null)
            {
                // If we don't flag the cache as loading, duplicate requests will be sent async.
                // Duplicate requests = poor performance, esp with web sockets.
                if (!cache.Loading)
                {
                    cache.Loading = true;

                    var module = await moduleTask.Value;
                    var task = module.InvokeAsync<MediaQueryArgs>($"addMediaQueryToList", DotNetInstance, cache.MediaRequested);
                    cache.Value = await task;
                    cache.Loading = task.IsCompleted;
                    // When loading is complete dispatch an update to all subscribers.
                    cache.MediaQueries ??= new List<MediaQuery>();
                    foreach (var item in cache.MediaQueries)
                    {
                        item.MediaQueryChanged(cache.Value);
                    }
                }
            }
            else
            {
                var module = await moduleTask.Value;
                var task = module.InvokeAsync<MediaQueryArgs>($"getMediaQueryArgs", cache.MediaRequested);
                cache.Value = await task;

                mediaQuery.MediaQueryChanged(cache.Value);
            }
        }

        public async Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNetObjectReference)
        {
            DotNetInstance = dotNetObjectReference;
            var module = await moduleTask.Value;
            await module.InvokeVoidAsync("addMediaQueryList", dotNetObjectReference);
        }

        public async ValueTask DisposeAsync()
        {
            try
            {
                if (DotNetInstance is null) return;
                
                var module = await moduleTask.Value;
                await module.InvokeVoidAsync("removeMediaQueryList", DotNetInstance);
                DotNetInstance.Dispose();
                await module.DisposeAsync();
                GC.SuppressFinalize(this);
            }
            catch (Exception)
            {
                //https://github.com/EdCharbeneau/BlazorSize/issues/93
                //https://stackoverflow.com/questions/72488563/blazor-server-side-application-throwing-system-invalidoperationexception-javas
            }
        }

    }

}

================================================
FILE: BlazorSize/Resize/BrowserWindowSize.cs
================================================
using System;

namespace BlazorPro.BlazorSize
{
    public class BrowserWindowSize : EventArgs
    {
        public int Height { get; set; }
        public int Width { get; set; }
    }
}


================================================
FILE: BlazorSize/Resize/IResizeListener.cs
================================================
using System;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public interface IResizeListener
    {
        event EventHandler<BrowserWindowSize> OnResized;

        ValueTask<BrowserWindowSize> GetBrowserWindowSize();
        ValueTask<bool> MatchMedia(string mediaQuery);
    }
}

================================================
FILE: BlazorSize/Resize/ResizeListener.cs
================================================
using Microsoft.Extensions.Options;
using Microsoft.JSInterop;
using System;
using System.Threading.Tasks;

namespace BlazorPro.BlazorSize
{
    public class ResizeListener : IResizeListener, IAsyncDisposable
    {
        private readonly Lazy<Task<IJSObjectReference>> moduleTask;

        private readonly ResizeOptions options;

        private bool disposed;
        public ResizeListener(IJSRuntime jsRuntime, IOptions<ResizeOptions>? options = null)
        {
            this.options = options?.Value ?? new ResizeOptions();
            moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
                        "import", "./_content/BlazorPro.BlazorSize/blazorSizeResizeModule.js").AsTask());
        }

        private EventHandler<BrowserWindowSize>? onResized;

        /// <summary>
        /// Subscribe to the browsers resize() event.
        /// </summary>
        public event EventHandler<BrowserWindowSize>? OnResized
        {
            add => Subscribe(value);
            remove => Unsubscribe(value);
        }

        private void Unsubscribe(EventHandler<BrowserWindowSize>? value)
        {
            onResized -= value;
            if (onResized is null)
            {
                Cancel().ConfigureAwait(false);
            }
        }

        private void Subscribe(EventHandler<BrowserWindowSize>? value)
        {
            if (onResized is null)
            {
                Task.Run(async () => await Start());
            }
            onResized += value;
        }

        private async ValueTask Start()
        {
            var module = await moduleTask.Value;
            await module.InvokeVoidAsync("listenForResize", DotNetObjectReference.Create(this), options);
        }

        private async ValueTask Cancel()
        {
            var module = await moduleTask.Value;
            await module.InvokeVoidAsync("cancelListener");
        }

        /// <summary>
        /// Determine if the Document matches the provided media query.
        /// </summary>
        /// <param name="mediaQuery"></param>
        /// <returns>Returns true if matched.</returns>
        public async ValueTask<bool> MatchMedia(string mediaQuery)
        {
            var module = await moduleTask.Value;
            return await module.InvokeAsync<bool>("matchMedia", mediaQuery);
        }

        /// <summary>
        /// Get the current BrowserWindowSize, this includes the Height and Width of the document.
        /// </summary>
        /// <returns></returns>
        public async ValueTask<BrowserWindowSize> GetBrowserWindowSize()
        {
            var module = await moduleTask.Value;
            return await module.InvokeAsync<BrowserWindowSize>("getBrowserWindowSize");
        }

        /// <summary>
        /// Invoked by jsInterop, use the OnResized event handler to subscribe.
        /// </summary>
        /// <param name="browserWindowSize"></param>
        [JSInvokable]
        public void RaiseOnResized(BrowserWindowSize browserWindowSize) =>
            onResized?.Invoke(this, browserWindowSize);

        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    onResized = null;
                }
                disposed = true;
            }
        }

        public async ValueTask DisposeAsync()
        {
            try
            {


                if (moduleTask.IsValueCreated)
                {
                    var module = await moduleTask.Value;
                    await module.DisposeAsync();
                }
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            catch (Exception)
            {
                //https://stackoverflow.com/questions/72488563/blazor-server-side-application-throwing-system-invalidoperationexception-javas
            }
        }
    }
}

================================================
FILE: BlazorSize/_Imports.razor
================================================
@using Microsoft.AspNetCore.Components.Web


================================================
FILE: BlazorSize/jest.config.js
================================================
module.exports = {
    preset: 'ts-jest',
    testPathIgnorePatterns: [".d.ts", ".js"],
  testEnvironment: 'jsdom',
};

================================================
FILE: BlazorSize/package.json
================================================
{
  "name": "blazorsize",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "scripts": {
    "test": "tsc -p tsconfig.json && jest && npm run posttest",
    "posttest": "rimraf scripts/tests/*.js",
    "prebuild": "rimraf wwwroot",
    "build": "npm run prebuild && tsc -p tsconfig.build.json",
    "record": "npx playwright codegen --viewport-size=600,800"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/jest": "^29.2.5",
    "jest": "^29.3.1",
    "jest-environment-jsdom": "^29.3.1",
    "jest-matchmedia-mock": "^1.1.0",
    "node-notifier": "^10.0.1",
    "rimraf": "^3.0.2",
    "ts-jest": "^29.0.3",
    "typescript": "^4.9.4"
  }
}


================================================
FILE: BlazorSize/readme.md
================================================
BlazorSize is a JavaScript interop library for Blazor that is used to detect the Browser's current size, change in size, and test media queries.

BlazorSize was designed to allow Razor Components to implement adaptive rendering. Handle mobile/desktop rendering changes at runtime with ease and complement your apps CSS media queries with programmatic work flows.

[For documentation please refer to the Wiki section of this GitHub repo.](https://github.com/EdCharbeneau/BlazorSize/wiki)

<hr>

A component with similar functionality of BlazorSize can also be found in [Telerik UI for Blazor](https://demos.telerik.com/blazor-ui/mediaquery/overview?utm_source=EdCharbeneau&utm_medium=cpm&utm_campaign=blazor-github-sponsored-message). 

[![Telerik UI for Blazor, Increase productivity and cut costs in half. Try Now](https://github.com/EdCharbeneau/BlazorSize/blob/master/_sponsors/Telerik/Blazor-300x250.png?raw=true)]((https://www.telerik.com/campaigns/blazor/free-trial-1?utm_source=EdCharbeneau&utm_medium=cpm&utm_campaign=blazor-github-sponsored-message))

**If you’re already a Telerik customer there’s no need to use BlazorSize**, instead you may use the TelerikMediaQuery component. If you’re looking for a full component library of 100+ components, world class support, and rich documentation then [give Telerik UI for Blazor a try for free](https://www.telerik.com/campaigns/blazor/free-trial-1?utm_source=EdCharbeneau&utm_medium=cpm&utm_campaign=blazor-github-sponsored-message).


================================================
FILE: BlazorSize/scripts/blazorSizeMedia.ts
================================================
class MediaQueryListItem {
    constructor(id: number | string) {
        this.id = id;
        this.dotnetCallback = (args) => { };
        this.mediaQueries = [];
    }
    public id: number | string;
    public dotnetCallback: (ev: MediaQueryListEvent) => void;
    public mediaQueries: MediaQueryList[];
}

interface MediaQueryArgs {
    media: string;
    matches: boolean;
}

export class BlazorSizeMedia {
    mediaQueryLists: MediaQueryListItem[] = new Array<MediaQueryListItem>();

    //private toMediaQueryArgs = (mql: MediaQueryArgs) => ({ media: mql.media, matches: mql.matches });
    private getMediaQueryListById = (id: number | string) => {
        let mediaQueryList = this.mediaQueryLists.find(mql => mql.id === id)
        if (mediaQueryList === undefined) {
            throw new Error("dotnet reference was not found in the collection of media query lists");
        }
        return mediaQueryList;
    };

    getMediaQueryArgs(mediaQuery: string) {
        let mq = window.matchMedia(mediaQuery);
        return { matches: mq.matches, media: mq.media } as MediaQueryArgs;
    }

    addMediaQueryToList(dotnetMql: any, mediaQuery: string) {
        let mq = window.matchMedia(mediaQuery);
        let mediaQueryList = this.getMediaQueryListById(dotnetMql._id);
        //console.log(`[BlazorSize] MediaQuery Read - media: ${mq.media} matches: ${mq.matches}`);
        mq.addEventListener('change', mediaQueryList.dotnetCallback);
        mediaQueryList.mediaQueries.push(mq);
        return { matches: mq.matches, media: mq.media } as MediaQueryArgs;
    }

    callbackReference(dotnet: any) {
        return (ev: MediaQueryListEvent) => {
            //console.log(`[BlazorSize] MediaQuery Changed - media: ${ev.media} matches: ${ev.matches}`);
            dotnet.invokeMethodAsync("MediaQueryChanged", { matches: ev.matches, media: ev.media } as MediaQueryArgs);
        }
    }

    addMediaQueryList(dotnet: any) {
        let list = new MediaQueryListItem(dotnet._id);
        list.dotnetCallback = this.callbackReference(dotnet);
        this.mediaQueryLists.push(list);
    }

    removeMediaQuery(dotnetMql: any, mediaQuery: string) {
        let list = this.getMediaQueryListById(dotnetMql._id);
        let queries = list.mediaQueries;
        let toRemove = queries.find(q => q.media == mediaQuery);
        toRemove?.removeEventListener('change',list.dotnetCallback);
        list.mediaQueries = queries.filter(q => q.media !== toRemove?.media);
    }

    removeMediaQueryList(dotnetMql: any) {
        // Get the media query from the list
        let list = this.getMediaQueryListById(dotnetMql._id);
        // Remove all event handlers
        list.mediaQueries.forEach(q => q.removeEventListener('change', list.dotnetCallback));
        // Remove the item from the list
        this.mediaQueryLists = this.mediaQueryLists.filter(f => f.id !== dotnetMql._id);
    }
}

================================================
FILE: BlazorSize/scripts/blazorSizeMediaModule.ts
================================================
import { BlazorSizeMedia } from './blazorSizeMedia.js';

let instance = new BlazorSizeMedia();

// Uncomment to enable console inspection of the instance
// (window as any).bs_instance = instance;

// When MQL is created, it tracks a NET Ref 
export function addMediaQueryList(dotnet: any) {
    instance.addMediaQueryList(dotnet);
}

// OnDispose this method cleans the MQL instance
export function removeMediaQueryList(dotnetMql: any) {
    instance.removeMediaQueryList(dotnetMql);
}

// When MediaQuery instance is created track media query in JavaScript
export function addMediaQueryToList(dotnetMql: any, mediaQuery: string) {
    return instance.addMediaQueryToList(dotnetMql, mediaQuery);
}

// When MediaQuery instance is disposed remove media query in JavaScript
export function removeMediaQuery(dotnetMql: any, mediaQuery: string) {
    instance.removeMediaQuery(dotnetMql, mediaQuery);
}

// Get media query value for cache after app loads
export function getMediaQueryArgs(mediaQuery: string) {
    return instance.getMediaQueryArgs(mediaQuery);
}



================================================
FILE: BlazorSize/scripts/blazorSizeResize.ts
================================================
export class ResizeOptions {
    reportRate: number = 300;
    enableLogging: boolean = false;
    suppressInitEvent: boolean = false;
}

export class ResizeListener {

    private logger: (message: any) => void = (message: any) => { };
    private options: ResizeOptions = new ResizeOptions();
    private throttleResizeHandlerId: number = -1;
    private dotnet: any;

    private resizeHandler = () => {
        this.dotnet.invokeMethodAsync(
            'RaiseOnResized', {
            height: window.innerHeight,
            width: window.innerWidth
        });
        this.logger("[BlazorSize] RaiseOnResized invoked");
    }

    public listenForResize(dotnetRef: any, options: ResizeOptions) {
        this.options = options;
        this.dotnet = dotnetRef;
        this.logger = options.enableLogging ? console.log : (message: any) => { };
        this.logger(`[BlazorSize] Reporting resize events at rate of: ${this.options.reportRate}ms`);
        window.addEventListener("resize", this.throttleResizeHandler);
        if (!this.options.suppressInitEvent) {
            this.resizeHandler();
        }
    }

    private throttleResizeHandler = () => {
        clearTimeout(this.throttleResizeHandlerId);
        this.throttleResizeHandlerId = window.setTimeout(this.resizeHandler, this.options.reportRate);
    }



    public cancelListener() {
        window.removeEventListener("resize", this.throttleResizeHandler);
    }

    public matchMedia(query: string) {
        let m = window.matchMedia(query).matches;
        this.logger(`[BlazorSize] matchMedia "${query}": ${m}`);
        return m;
    }

    public getBrowserWindowSize() {
        return {
            height: window.innerHeight,
            width: window.innerWidth
        };
    }
}

================================================
FILE: BlazorSize/scripts/blazorSizeResizeModule.ts
================================================
import { ResizeListener, ResizeOptions } from './blazorSizeResize.js';

let instance = new ResizeListener();

export function listenForResize(dotnetRef: any, options: ResizeOptions) {
    instance.listenForResize(dotnetRef, options);
}

export function cancelListener() {
    instance.cancelListener();
}

export function matchMedia(query: string) {
    return instance.matchMedia(query);
}

export function getBrowserWindowSize() {
    return instance.getBrowserWindowSize();
}

================================================
FILE: BlazorSize/scripts/tests/blazorSize.test.ts
================================================
import { BlazorSizeMedia } from '../blazorSizeMedia';
import MatchMediaMock from 'jest-matchmedia-mock';
import MatchMedia from 'jest-matchmedia-mock';

let matchMedia: MatchMedia;

describe('Your testing module', () => {
    beforeAll(() => {
        matchMedia = new MatchMediaMock();
        const mediaQuery = '(min-width: 240px) and (max-width: 767px)';
        matchMedia.useMediaQuery(mediaQuery);
    });

    afterEach(() => {
        matchMedia.clear();
    });

    let fakeDotNetList = {
        _id: 1,
        invokeMethodAsync(method: string, callback: any) { }
    }

    let fakeDotNetQuery = {
        _id: 9,
    }


    test('Can crate', () => {
        let x = new BlazorSizeMedia();
        expect(x.mediaQueryLists).toHaveLength(0);
    })

    test('Can add MediaQueryList', () => {
        let x = new BlazorSizeMedia();
        x.addMediaQueryList(fakeDotNetList);
        expect(x.mediaQueryLists).toHaveLength(1);
    })

    test('Can add MediaQuery', () => {
        let x = new BlazorSizeMedia();
        let query = '(min-width: 240px) and (max-width: 767px)';
        x.addMediaQueryList(fakeDotNetList);
        let result = x.addMediaQueryToList(fakeDotNetList, query);
        expect(x.mediaQueryLists[0].mediaQueries.length).toBe(1);
        expect(result.media).toBe(query);
        expect(result.matches).toBe(true);
    })

    test('Can remove MediaQuery', () => {
        let x = new BlazorSizeMedia();
        let query = '(min-width: 240px) and (max-width: 767px)';
        x.addMediaQueryList(fakeDotNetList);
        let result = x.addMediaQueryToList(fakeDotNetList, query);
        x.removeMediaQuery(fakeDotNetList, query);
        expect(matchMedia.getListeners(query).length).toBe(0);
        expect(x.mediaQueryLists[0].mediaQueries.length).toBe(0);
    })

    test('Can remove MediaQueryList', () => {
        let x = new BlazorSizeMedia();
        let query = '(min-width: 240px) and (max-width: 767px)';
        x.addMediaQueryList(fakeDotNetList);
        let result = x.addMediaQueryToList(fakeDotNetList, query);
        x.removeMediaQueryList(fakeDotNetList);
        expect(matchMedia.getListeners(query).length).toBe(0);
        expect(x.mediaQueryLists.length).toBe(0);
    })

})

================================================
FILE: BlazorSize/tsconfig.build.json
================================================
{
  "compilerOptions": {
    "outDir": "./wwwroot",
    //"noImplicitAny": false,
    //"noEmitOnError": true,
    //"removeComments": true,
    //"sourceMap": false,
    "target": "ES6",
    "moduleResolution": "node",
    "lib": [ "ES2016", "DOM"]
  },
  "exclude": [
    "node_modules",
    "wwwroot",
    "**/*.test.ts"
  ]
}


================================================
FILE: BlazorSize/tsconfig.json
================================================
{
  "compilerOptions": {
    "outDir": "./scripts/tests",
    "esModuleInterop": true,
    "skipLibCheck": true,
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    "lib": [ "ES2015", "DOM" ], /* Specify library files to be included in the compilation. */
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    //"outFile": "./blazorSize.js", /* Concatenate and emit output to single file. */
    //"outDir": "./wwwroot", /* Redirect output structure to the directory. */
    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true, /* Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* Enable strict null checks. */
    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
  }
}


================================================
FILE: BlazorSize.UnitTesting/BlazorPro.BlazorSize.UnitTesting.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <LangVersion>latest</LangVersion>
    <Version>6.0.0</Version>
    <Authors>Ed Charbeneau</Authors>
    <Company>EdCharbeneau.com</Company>
    <Description>A testing library to provide helper extensions for BlazorSize.</Description>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
    <PackageProjectUrl>https://github.com/EdCharbeneau/BlazorSize</PackageProjectUrl>
    <PackageIcon>blazor-glove-128.jpg</PackageIcon>
    <PackageIconUrl />
    <RepositoryUrl>https://github.com/EdCharbeneau/BlazorSize</RepositoryUrl>
    <PackageTags>Blazor, JavaScript Interop</PackageTags>
    <PackageReleaseNotes>
      6.0.0 Added support for bUnit.
    </PackageReleaseNotes>
  </PropertyGroup>

  <ItemGroup>
    <!-- Package Logo -->
    <None Include="..\_resources\blazor-glove-128.jpg">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
    <!-- Package license file -->
    <None Include="LICENSE.txt">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="bunit.core" Version="1.36.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\BlazorSize\BlazorPro.BlazorSize.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: BlazorSize.UnitTesting/Bunit/BunitExtensions.cs
================================================
using BlazorPro.BlazorSize;
using Microsoft.Extensions.DependencyInjection;

namespace Bunit
{
    public static class BunitExtensions
        {
            public static FakeMediaQueryService AddBlazorSize(this TestContextBase testContext)
            {
                testContext.RenderTree.Add<MediaQueryList>();
                var mediaQueryServices = new FakeMediaQueryService(testContext);
                testContext.Services.AddSingleton<IMediaQueryService>(mediaQueryServices);
                return mediaQueryServices;
            }
        }
}


================================================
FILE: BlazorSize.UnitTesting/Bunit/FakeMediaQueryService.cs
================================================
using BlazorPro.BlazorSize;
using Microsoft.JSInterop;

namespace Bunit
{
    public class FakeMediaQueryService : IMediaQueryService
    {
        private readonly TestContextBase contextBase;
        private MediaQueryArgs activeMediaQuery = null!;

        public List<MediaQueryCache> MediaQueries { get; } = new();

        public FakeMediaQueryService(TestContextBase contextBase)
        {
            this.contextBase = contextBase;
        }

        public void AddQuery(MediaQuery newMediaQuery)
        {
            var mediaQueryCache = GetMediaQueryFromCache(newMediaQuery.Media);

            if (mediaQueryCache is null)
            {
                mediaQueryCache = new MediaQueryCache()
                {
                    MediaRequested = newMediaQuery.Media
                };
                MediaQueries.Add(mediaQueryCache);
            }

            mediaQueryCache.MediaQueries.Add(newMediaQuery);

            SetActiveMediaQuery(activeMediaQuery);
        }

        public Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNetObjectReference)
            => Task.CompletedTask;

        public Task Initialize(MediaQuery mediaQuery)
            => Task.CompletedTask;

        public Task RemoveQuery(MediaQuery mediaQuery)
        {
            var mediaQueryFromCache = GetMediaQueryFromCache(mediaQuery.Media);
            if (mediaQueryFromCache is null)
                return Task.CompletedTask;

            mediaQueryFromCache.MediaQueries.Remove(mediaQuery);

            if (mediaQueryFromCache.MediaQueries.Count == 0)
                MediaQueries.Remove(mediaQueryFromCache);

            return Task.CompletedTask;
        }

        public void SetActiveBreakPoint(string breakpoint)
            => SetActiveMediaQuery(new MediaQueryArgs
            {
                Matches = true,
                Media = breakpoint
            });

        public void SetActiveMediaQuery(MediaQueryArgs args)
        {
            if (args.Media == null) return;

            activeMediaQuery = args;

            // cache must be compared by actual value, not RequestedMedia when invoked from JavaScript
            // DOM Media value my be different that the initally requested media query value.
            var cache = GetMediaQueryFromCache(args.Media);

            if (cache is null) return;

            // Dispatch events to all subscribers
            contextBase.Renderer.Dispatcher.InvokeAsync(() =>
            {
                foreach (var item in cache.MediaQueries)
                {
                    item.MediaQueryChanged(args);
                }
            });
        }

        private MediaQueryCache? GetMediaQueryFromCache(string byMedia)
            => MediaQueries?.Find(q => q.MediaRequested == byMedia);
    }
}


================================================
FILE: BlazorSize.UnitTesting/LICENSE.txt
================================================
Copyright 2019 Ed Charbeneau

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

================================================
FILE: BlazorSize.e2eTests/BlazorSize Adaptive Table and Template.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <data name="BlazorSize Adaptive Table and Template4f5o1vgy.4is" type="System.Resources.ResXNullRef, System.Windows.Forms">
    <value />
  </data>
  <data name="BlazorSize Adaptive Table and Template1qqp5b5b.amo" type="System.Resources.ResXNullRef, System.Windows.Forms">
    <value />
  </data>
  <data name="BlazorSize Adaptive Table and Template02odfyyd.oi1" type="System.Resources.ResXNullRef, System.Windows.Forms">
    <value />
  </data>
  <data name="BlazorSize Adaptive Table and Templatejqo1pp1o.rnh" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
        cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
        b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
        AQEBCQIAAAAAAAAAcVcBAHFXAQAAAAIAAQEBAQoPAgAAAAAAAgAC/9j/4AAQSkZJRgABAQEAYABgAAD/
        2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5
        PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
        MjIyMjIyMjIyMjIyMjIyMjL/wAARCAQlB4sDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAEC
        AwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS
        0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqD
        hIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo
        6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcF
        BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2
        Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan
        qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEA
        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
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQByNdS3+pH0rlq7FLXcqbnyMDjF
        AFlfuj6Vr6H4gu9Ba4NrHBILhAkizR7wQDkcfWsmihO2wNX0Z3kHxa8RQbQEsyirtVfKIAH5+1VdY+JW
        s61pVxp9zFarDOAGKIQeufWuNop3AKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFSzXM1wIxK5YRIETjov
        pUVFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVFc/8e7/SpaRlDoVPQigCkv3aWpBbMOA/6Uv2
        dv74/KgBJJ5ZVjWRyyxLsQHsMk4/Mmo6l+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/f
        H5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+
        zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAI
        qKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj
        8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ
        2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH
        5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+z
        t/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIq
        Kl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8
        qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2
        /vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5
        UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt
        /fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqK
        l+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8q
        AIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/
        vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5U
        fZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/
        fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl
        +zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qA
        IqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/vj8qAIqKl+zt/fH5UfZ2/v
        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
        eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v
        7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKK
        AF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j
        +dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8
        fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigB
        d7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/n
        Rvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH8
        6SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe
        394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b
        2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/Ok
        ooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/
        eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v
        7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKK
        AF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j
        +dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8
        fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigB
        d7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/n
        Rvb+8fzpKKAF3t/eP50b2/vH86SigBd7f3j+dG9v7x/OkooAXe394/nRvb+8fzpKKAF3t/eP50b2/vH8
        6SigDlK7lP8AVr9BXDV3Kf6tfoKAHVNa3U1ldw3Vu5jmhcOjjsR0NQ0UAd1Pr+r+ILeS+0zU7qG+jUvd
        WSyHD+rxDuOpK9u3HTnf+Er1/wD6C93/AN/DWSjvG4dGZWHRlOCKbQA53aWRpHYs7EsxPUk02iigAooo
        oAsjULwDAuZAB/tVciurmKIXF1cylT/q4w3L+/sKyqUknqSccUASXNxJd3DzynLseaioooAKKKKAN++i
        bUvDOn3luN5sENtcoOqDcWV/907iM+orCRHkdUjVmdjhVUZJNT2V/dadcC4s53hlAxuU9R3B9R7VpN4r
        1XafKa2t3IwZbe2SN/8AvpRmgB3iCNLC103STsNzaxs9yV7SO2dufUKFB981hUpJJJJyT1JpKACqk/8A
        rTVuqk/+tNAEVb2m5/4QzXv+u9p/OSsGrunavf6RK8lhdSQNIu19vRh7g8UAFzNYPp1nFb2ckV2m77RM
        0m4S5Py4XtgVo+MuPFFwD2ig/wDRKUn/AAmfiH/oJyf98L/hWPc3M95cyXNzK0s0rFndzksaAIq7D4fX
        Ulld63cw7fNi0mdkLDIBBXHFcfUkU80G/wAmV496lH2MRuU9QfUe1NO34gt0egR67qd94M03U7q+mkvr
        TWfKiuWb94qMgJG7riujt9R1yP40XdvPc3q20vnrbo7MEddhKhexGcYxXjnnzfZ/s/myeTu3+XuO3d0z
        jpn3qZ9Tv5ZYZZL65eSAYidpWJj/AN054/CiXvaf1sh30t/W56JpVx4o/wCEE1y4gF62rjUIjK7IxnVd
        hGRnkHoMjsatyX19ZXPhW/1LTbi/1sWs5uURP9IEWQI3Ix98ZJGRXGQ+KJY/Ct1aG8vP7Ulv0uFuBIc7
        QjKfnznPNYY1K/F4bwXtyLo9ZxK2/wD76zmh7/12JW33/mdj4uttXhudPvY9R1C8W6tpGiS+jxcQoCQy
        uDnjrg/lXLTf6HosUPSS6bzX/wBwcKPzyaqTX13czmee6nlmI2mSSQsxHpk806e8e4ulnkRMqFAQA7QB
        0H0pDNL/AI9ZNLsRw3mJNKP9piMD8B/Ou/1A38M/jS50FXOsLqYV2gGZktznJXv97GcV5XPcy3F29y5x
        I7bsrxg+1Pj1C9iu2u47y4S5bO6ZZWDnPXLZzTvpb+un+Q9j1KyQ3s3hBvFKBtVeefH2sYeSMKfK8zPO
        N/AzWRaR+M9a8S2tjrFxf29v9uDB54cpHIu4gIGGOxAA46VwFxdXF1OZ7meWaY9ZJHLMfxNTzatqVyIx
        PqF3KIiGj3zM2wjoRk8UutxHp3iWSa9+HepS3dtqymC+iEMmqSbnJyQSo2jaPbkVLrF/caZq/jy7tH2T
        pb2ux8ZKksgyPfnivK7jVdRu1Zbm/uplbG4STMwOOmcntTJL68lMxku53MwAlLSE+Zjpu9ce9JaMaZ6j
        pNwutr4LvtYdbm7aW7iSSfnzGUKYgxPX5jxmqdpceI7rTfEqeLRdmwjtHK/a0IVLjcNnl56HrwO1ebm4
        naGOFppDFGSUQscKT1IHbpU11qeoX0ax3d9c3EaHKrLMzhfoCactdhLoekzzanqnhN/sz6rorafp6mS2
        kjxaXCLj5lbs5yD0/GqfjS/1+5tvDMsM15NDJp0Em7lkafByTngt9a4KXVNQuLVbWa/upLdcYieZigx0
        4JxTf7RvfsyW32y48iNtyRea21T6gZwDSkru4LRFywa+gmMqaeLgu+CzwlsN3wR0NXp4FZdYtLYtLJvS
        QDO5jg/MPfGawUuriJWWOeVFb7wVyAaYjvG4eN2Rh0ZTgimB01iDDaWtjKNlxNFcbVbgjcAF/PFZyQy2
        ehXouI2jM0iIiuMEkZJNZTyPJIZHdmc8lmOTTpZ5Z2DTSvIQMAuxOKANFf8AkVn/AOvsf+g02Umy0eGI
        HEt03mv6hRwo/PJrO8x9nl7m2Zztzxmpbq6e7m81wq4UKFUcAAYAFAHSrO1xqmlx3MjyKbRZFVjnMm04
        ODxmq19eOtidw1EyrMpSa5QLsPOQDXPNI7FSzsdowuT0FPluJ58edNJJjpvYnH50dQOnuTcS+I7jzN7s
        sLNaCTlS+0fdzwaqabNqLarA195zBRJs84HrtOetYTTzOEDSuwj+5lidv09Kc11cO4d7iVmAwGLkkCgD
        VjuZb7Q7z7XK0giljKlv4cnBx6cVqwnUU8SRQxCQWCkbFUfu9mOD6VyIdwjIGYK3VQeDTxdXCoqLPKFU
        5VQ5wD7UAdDYrPbW6TRG7k86dwEt22hcH+I4NSvJcQz69BZtIpVlZEizwdwyQB7VzC3EyIyJNIqv95Qx
        AP1pVuJ1lMqzSCQ9XDHJ/GgDpdJSe3SwA+1yrO24iI7Y1+bB3cc++a57UFVNRuVUAKJWAA7c1GtzOiFE
        nkVCclQ5Az61GzFmLMSWJyST1oASiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigDlK7tEby1+U9B2rhK1R0Fa0qfPfUic+U6jY/90/lRsf+6fyr
        l6K2+reZHtfI6jY/90/lRsf+6fyrl6KPq3mHtfI6jY/90/lRsf8Aun8q5eij6t5h7XyOo2P/AHT+VGx/
        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
        f8+Vz/37b/CvriigD5H/ALGuv+fK5/79t/hR/Y11/wA+Vz/37b/CvriigD5H/sa6/wCfK5/79t/hR/Y1
        1/z5XP8A37b/AAr64ooA+CK1R90fSsqtUfdH0rqw3Uxq9BaKKK6jEKKkihlmJEUTyEdQik4pZLeeEAyw
        yRg9CykUDIqKc0boqsyMoYZUkdfpTaBBRRRQAUUUqqWYKoJJ6ACgBKKkkt54QDLDJGD0LKRTWjdVVmRg
        rfdJHB+lAxtFFFAgooqcWV2wBW1mIPIIjNAyCinyQywsFljeNiMgMpFMoAKKKKBBRRRQAUU5EeRwiKzM
        egUZJpvQ4NABRTkjeVwkaM7HoFGTSBWLbQpLZxjHNACUUrKyMVZSrA4II5FJQMKKciPI4RFLMegUZJpZ
        IpIm2yRsjejDBoAZRUht5hEJTDIIz0cqcfnUdABRRRQI+uPht/yTnQf+vVf5muprlvht/wAk50H/AK9V
        /ma6mvNn8TOuOwUUUVIwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPg
        itUfdH0rKrVH3R9K6cN1MavQWiiiusxPT/hAL423iwabMIb7+zf3EhcIFfPB3HgfjW9c2/io/D3xFJ4u
        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
        ep/99f8A169Aoo+rUuwf23j/APn5+C/yPP8A/hV6/wDQx6n/AN9f/Xo/4Vev/Qx6n/31/wDXr0Cij6tS
        7B/beP8A+fn4L/I828BW8uneNde01rye5jtkVVaViSeetek15/4V/wCSneKPoP5ivQKWGVoW83+ZWdSc
        sSpPdxi//JUFFFFdB5B8EVqj7o+lZVao6D6V1YbqZVegtFJRXUYi0UlFAC0UlFAC0UlFAC0UlFAC0UlF
        AC0UlFAC0UlFAC0UlFAC0UlFAC1cGq3w0c6SLhvsBmE5hwMeYBgN69CapUUgFopKKYE1r/x9w/8AXRf5
        1a1n/kJyfQfyqra/8fcP/XRf51a1n/kJyfQfyrkl/vUf8L/NHr0/+RTU/wCvkf8A0mRQopKK6zyBaKSi
        gBaKSigBaKSigD65+G3/ACTnQf8Ar1X+Zrqa5b4bf8k50H/r1X+Zrqa82XxM6lsFFFFSMKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooA8/8K/8AJTvFH0H8xXoFef8AhX/kp3ij6D+Yr0CsMP8A
        A/V/mernH+8R/wAEP/SUFFFFbnlHwRWuI3wPlPSsiujX7o+lduDgpXMKztYqeW/90/lR5b/3T+VXKK7v
        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
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHwBXRr90fSucro1+6PpXoYHeXy
        Oev0Fooor0DnCiipIIJbmdIII2klc7VRBkk0AR0V634b+Ecb2Lza9I6zyphIYm/1XuT3Pt0rivFngnUv
        C1wWkXz7JmxHcIOPo3oaxjiKcpcqZfs5WuczRRRWxAUVfv8ASp9OtrGeZ42W9h86MITkLkjnjrxS6lpF
        xpcdk8zxsLy3W4jCEnCnscjrS5kOzM+ijBzjFLg+hpiEoowfSigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooA+s/hx/yTvQv+vVf5muorl/hx/yTvQv+vVf5muorwqnxv1O+OyCiiioG
        ZniHVJdF8P32pw2v2p7WIy+Tv2bgOTzg9vaszwN4vj8aaCdSW1+yusrRvD5m/GOhzgdQfSugurdLuzmt
        pBlJY2Rge4IxXkHwXlfS9f8AEXhyU4aGTeoP+y20/wBKAPYLm4jtLWa4lIEcSF2J7ADNea+EvjDF4n8T
        Q6O+kfZBNu8ub7TvyRyBjaOuPWtr4r6v/ZHw+1Aq22W5xbp/wI8/pmvKtY0N/Buj+BvEMabJkIa4IHOS
        Q4B/AkU0I+iq4fW/iEdL8eWPha20v7XLchC8vn7PL3E9tpzgDPUV2kEyXFvHPGcpIodT6gjNeNeCl/4S
        X41a1rbDfDZb1jPbP3B+gNAz2misrXvEeleGrH7Xqt2lvGeFB5Zz6AdTXEJ8c/CjXPlGHUkjzjzjAu39
        Gz+lID0yiqWlavYa3YJfabdR3Fu/R0PQ+h9DUeta7pvh6wa91S7S3hHALdWPoB1JoA0aK8xm+OnhWOYo
        ltqkqZ/1iQqF/Vgf0rrvDPjTQ/FsTtpV3vkjGXhddrqPXHpQBd13X9N8N6Y9/qlwIYFOB3LH0A7mrlld
        x39jBdxAiOeNZFDdcEZFeL/GzxbY3UJ8NJBci8tp0leRlXyyNp6HOc8+ldl8OvHmmeJLWHSLS2vI7iyt
        EMjzIoRsYXghievtTsBa8KePD4n8R6tpJ037N/Z7FfN8/f5mGI6bRjp6muzrw34f6xYaF418YX+pXKW9
        vHI2WY9T5h4A7munX45eE2u/JMeorHnHnmBdn1+9u/Siwj0uiqunajaatYRX1jOk9tKMpIhyDVHxB4o0
        jwvZi51a8WFW4ROrv9AOTSGbFFeaQ/HLwpLciJ4tSiQnHnPAu39GJ/SvQNN1Oy1exjvdPuI7i2kGVkQ5
        B/8Ar0AW6K5bVPHukaP4rg8PXiXCXEsPnefhfKRcMeSWz/Ce1ZOn/F/wzqeuxaVbJftJNIIopfIGx2Jw
        Mc5/MUAd/TZJEiiaSRgqICzMegAp1cL8SfG1h4a0uTTbqC7ee/tpFieFVKqcY+bLA9+2aAOevfjlD/aE
        sGkeHrnUII2IMwl2ZHqAFPH1xXqOm3bX+l2t48JhaeJZDExyUyM4rwj4U+P9G8MacdKurK8e8u7oYlhj
        Qrg4AySwPH0r3DWte0zw9YG91S7S3hHALdWPoB1JpsRo0V5mfjn4U+0+X5GpGPOPO8hdv/oWf0rudD8Q
        aX4jsReaVdpcRZw2OCp9COoNIZp0VzfiPxtpvhjVNNsL2G5eTUH2RNEqlV5A+bLDHXtmsK4+MvhWDV/7
        PU3k/wA+zz4YQ0ec445yfwFAHoNFZ2ra7puh6ab/AFK6S2twOr9SfQDqT7Vwh+OfhQXPlCHUjHnHnCBd
        v/oWf0oA9MorN0TXtM8RWAvdLu0uIScEr1U+hHUGrN/qFppdlJeX1xHBbxDLySHAFAFmivNbn44+E4Lk
        xRx6jcIDjzYoV2/+PMD+ldf4c8WaN4qtWn0m7Euz78bDa6fUGgDborH8QeKdH8L2q3GrXiwB/uJjLv8A
        QDk1xB+OvhYTbPsuqFM/6zyU2/8Aoef0oA9PorI8PeJ9I8UWRutJu1mRTh1IwyH3B6VH4j8WaN4UtVn1
        a7EW/PlxqNzvj0AoA26K8zh+OfhSWfy3h1KFM4814F2/oxP6V3drrmn3+itq1lcLc2gRn3Rc5wMkfX2N
        AFa88U6VZeIbPQnuN2o3R+WFBkqME5b06VtV83X/AMQdLufixZ+KEtb0WUCBWjKL5hwpHA3Y7+te9eGv
        ENr4p0OHVrKKeKCUsFWdQGGDg5wSO3rTsBr0UUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPgCujX7o+lc5XRL90fSvQwO8
        vkc9foOopKK9A5xa6bwBdz23jTTlhkKCWUI+B1X0rmKu6TqUuj6tbahCiPJbvvVX6E++KUldNDR9Lanr
        2laM0a6jfQ2xkBKCQ43Y61zvxMvZbfwPNNay7fMdFJHO5T2ryHxV4wvfFsls95b28JtwwXyQec465J9K
        ua78QtR1/Ql0m4tLWOEFTvjDbvl6dTXnxwklyvrfU6XWV2cjRSUV6Jynd6tfaXa6D4cW+0YXzmwyrm5e
        PaN7cYWt6Z1a1jvNMthHfRaFG9nED5jRgv8AMVzySB3ryuW5nnSNJZpJFiXbGruSEHoPQVKuo3ySwyre
        3AkgXZE4lbMa+inPA+lYSo3W/V/qaKdvuX6HpWjTXcx0LUdWTOqbrtUaVcPJCIGI3DuN2RzWYfE2r/8A
        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
        n7GSm98cDa3zfoc0Aerab4b0fStOWwtNOtktwu0qYwd/+8T1/GuX0z4bR6J4+bxBpV4LWzdSHslTg5HI
        zngZwRXc29xDdW8dxBIskMihkdDkEHvXCy/EKab4lw+FtMtILu32/wCkXAc5jIBLdOOBj8aQyHxD4Fsr
        3xrF4m8QarAdNhUBbWf5VGBwMk4IzyRVvUPG/wAO7azNtcX2mywYx5MUPmj6YUGvPZbb/hYPxivtL1y7
        ljsrNpFhtg+3cFOMD69Sa9Mg+H/gnRIWun0eyVIly0t184AHc7iRTEebfCG6tG+JWsppW9NNmhd4kYY+
        UONvH41J8R5k0j4s6dquu2T3ejiNdibcrxnPB4JB5xTfhde22ofFzWru0VVt5opWiCjA271xgV6Fqniv
        w3feKf8AhD9XshJK/Q3USmInGRgnuexo6gQW/in4feK7A2H2mw8uRdvkTxeUVz6bgOfpWj4I8GWvg2wu
        ILPUJruG4cSfvMbQcY4x7Y/KsLV/gv4UvleS2WfT3xkNDJlR+DZ4rnvgve31vr2taCbxrzTrbJjkySoY
        NjK+gI5x7UAP1cD/AIaK0wYGPKX/ANAavZQAOgxXjWssF/aK0ssQMxqOf9xq9loYwooopAFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        AUUUUAfAFdEv3R9K52uiX7o+ld+B3kYV+gtFFFeic4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfWnw4/wCSd6F/16r/ADNdRXL/AA4/5J1o
        X/Xqv8zXUV4VT436ndHZBRRRUDCsTxd4dTxV4autIeUQmYApIV3bGByDituigDjvh94FXwPpt1btdrdz
        XEodpRHswoGAMZPv+ddjRRQB5trHwmi1Xx8viT7ekcBmjmktfJzuK4z82e+PSvSaKKAOX8YeA9H8ZQJ9
        uRorqIYiuYuHX2PqPY1xZ+DurvH9kk8aXraf08jY3T/vrH6V65RRcDnvCfg3SfB1g1tp0bGSQ5lnkOXk
        Pv6D2FZfjX4bad4wnivfPkstRiGFuIhncB0yPb1rtaKAPLofhPqtyot9a8Z6jeWQ/wCWCFlBHpyxq6vw
        rtdP8ZaZrmiXMdjBZIqtbGIv5nUE7s9SDXolFFwMLxb4XtPF2hSaZdu8YLB0kTqjDofeuc8DfDzUfB2q
        STy6+97aNCYltmjKheQQR8xHb0716BRQBxXhLwHJ4Z8SavqzagtwNQYsIxFt2ZYnrk5612NxF59tLFnG
        9CufTIqSigDjPh/4Gk8EW9/E9+t39qlDgrFs24HTqc1N4x+Huj+MlSW6D297GMJdQ/eA9CO4rraKAPJD
        8HdWnQWl140vZdPHHk7G6enLY/Su/wDC/hPSvCOm/Y9MiI3HMsrnLyH1J/pW5RRcDiNZ8Ayar8Q9P8Uj
        UVjS0VFNuYsltpY/ezx970rt6KKACqerWJ1PSLyxEgjNxC0QcjO3IxnFXKKAOV8A+D38FaHLpz3q3ZeY
        y71j2YyAMYyfSp/FvgrSPGNmsOoxFZo/9VcRnDp/iPY10dFAHkg+DuriP7IPGl6NO6eRtbp/31j9K7bw
        j4H0fwbbOmnxs9xKB5txKcu/t7D2FdLRQBxHjjwDJ4w1PSrxNRW1Fi24qYt+/kH1GOldvRRQBz3izwZp
        PjGxW31KIiSPPlTxnDxn29R7GuE/4U7q8cf2SHxpepp/TydjdP8AvrH6V65RQBy/g/wJpHgy3cWStLcy
        jEtzL99h6ewrT8QeHdN8T6W+n6nB5kLcqQcMjeqnsa1aKAPJf+FOanahrbTfGN7bWDdYdp6enDAfpXYe
        DvAOk+DYpGtd895LxLdS/eYeg9BXVUUXA8/8W/Cyy8Rat/bFjfTaZqXVpYhkMR0OMgg/Q1Rt/hNd3jIv
        iTxXqOqW6HPkbmVW+uWNenUUXA4LR/htHoHjxtf0y7igsXjMZsRCeAVA4bPqAelXvGfw80nxkY552ktb
        6IYS5h649CO9dfRQB5L/AMKh1uRPs1x43vXsenlBW6fi+P0rvPCnhDS/B+mmz02Nsud0sznLyH3/AMK3
        qKAOB8c/DKDxdqMOp2+oSWF/EoTzFXcGA6cZBBH1roPCGhXnhzQE0691JtQkR2YTspBwTnHJNb1FABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQB8AV0S/dH0rna6Jfuj6V34HeRhW6C0oUk8An6UldLokSLYCQKNzMcnFehJ2Rgl
        c5zy3/uN+VHlv/cb8q7Wio9oPlOK8t/7jflR5b/3G/Ku1oo9oHKcV5b/ANxvyo8t/wC435V2tFHtA5Ti
        vLf+435UeW/9xvyrtaKPaBynFeW/9xvyo8t/7jflXa0Ue0DlOK8t/wC435UeW/8Acb8q7Wij2gcpxXlv
        /cb8qPLf+435V2tFHtA5TivLf+435UeW/wDcb8q7Wij2gcpxXlv/AHG/Kjy3/uN+VdrRR7QOU4ry3/uN
        +VHlv/cb8q7Wij2gcpxXlv8A3G/Kjy3/ALjflXa0Ue0DlOK8t/7jflR5b/3G/Ku1oo9oHKcV5b/3G/Kj
        y3/uN+VdrRR7QOU4ry3/ALjflR5b/wBxvyrtaKPaBynFeW/9xvypCrL1Uj6iu2qG7iSW1kV1BG0mjnDl
        OOooorQR9afDj/knWhf9eq/zNdRXL/Dj/knehf8AXqv8zXUV4VT436nbHZBRRRUDCigkAc0m9f7w/OgB
        aKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKOlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR3xQAUUUUAFFFFABRSZGcZ5paACiikLAdSBQAtF
        JkYzniloAKKKKACiiigAoo74ooAKKOvSigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPgC
        uiX7o+lc7XRL90fSu/A7yMK3QWuo0b/kGR/U/wA65eun0b/kGR/U/wA67p7GUdzQoor0T4VadY6hc6mL
        2zt7kIkZUTRB9vJ6ZrCcuWLl2LSu7HndFeveKtLtbLxZoSaboVlcNIs2bXy0jSXC9+McdefSoNYupNI0
        57q98A6VDD93eHjOCenRKyVa6TS3LdOzseUUUpOWJxjJ6UlbmYUV0r+H9JtNOsLnUNZnhkvIfOWOOz3h
        RkjrvHp6Vlf2XLd3ssOjx3WoRJgh0tyGI91Gcc+9SpJjsZ9FbNh4a1C+s9SnWCdWsVBaPyWJZsgFfYgE
        n8KpLpOpPZm8XT7prUDJmELbAPrjFPmQWZTord1TwrqFgytb29zdW5gSZpkgbau4ZIJGRxWIiPI6pGrM
        7HAVRkk0KSewDaK25PDV5baHc6heRT20kMscawSwlS4bPOT9PSqcuiarBEssumXkcbkBXaBgCT0AOO9H
        MhFCitrVfDGo6bqkdgttcTyyRq6bIW+bKgkAd8ZwazbuwvNPkEd5azW8hGQs0ZUkfjQpJ7DK9FFFMQUU
        UUAFFFFABRRRQAUUUUAFFFFABUc//HvJ/un+VSVHP/x7yf7p/lQBxlFFFdBmfWnw4/5J3oX/AF6r/M11
        Fcv8OP8AknWhf9eq/wAzXUV4VT436nbHZBRRRUDKuo6bZ6tZPZX9ulxbSY3RyDIODkV59o/gjwxN408R
        Wsmi2jQW/wBn8mMrwmUycfU16XWNp2jTWfiXWNTeRGjvvJ2IM5XYu05oW4M5axfXo/EHiv8AsZbBY4rp
        XZrpWbefKX5QFIxwOpz16Veg8Qm/1DQb8afEZLnSri56EyKRsyinPQk+nYVtabos1le65O8qMuoTiWMD
        OVGwLz+VZmneFLuz/sXN5GrWGnzWjPGDnc+3DLkdtvehbfL9GJ/196KnhvxZqes3ttmfSLiGbPnW0DMl
        xacZ+YO3zYPBwBXQ+I9Yk0XTUlt4Vmup50treNzhS7nAyfQcn8Kw4/Cur3mq6dcatcaW39nyiVbq2tyt
        xPgEYYk4UHOSBnOK3fEOjHW9NWCOf7PcQzJcW823dskQ5BI7jqD9absNGTda1r/h+wvbzW7ayuYIod8U
        tnuTMhIAjKsSeSR8w4oGs+INKvNPOuRae9pfzCAfZA4aCRgSobcSGHGMjFJceGtW123u49f1GFVlt/Ji
        hsQwjRshvMIY/MwIGPTn1p8eg65qF5p51y/spLXT5RNGtrEytO4BCs+48YyTgd6P6/r+v1B7GMfF/ib+
        wrrXRa6abK0u3gaDDiSZVk2ZVs4X8Qc4PStZNd1uy1kWOqR2DC5s5bq3NurgxlMZV8n5vvDkYpP+ESuv
        +EKvdD+0Q+dcXMkyyc7QGm8wA8Z6cVb1nRpptUt9VEiCK0sLmFkOdzFwuCP++TUvT+vL/MfXT+tf8jFt
        PFPiSPQNP8RajbacNNnEfnQxBxKiuQN4JJGOc7cdO9aJ1jxBqt/qK6HHp6WthMbdjdhy08gALAbSNo5A
        yc1i+GtD1nWvBmiWd7f2h0cwwzMFibz3AwwjJztxnv1wK3JNB1zT7/UJNCvrKO21CXzpEuomZoZCAGZN
        p5zgHB71clZtf1/W5KKMfi/VtXutGt9Ht7SNr+1mllN0GbyHjYKRwRuGSRj6c0TeN7vStE1KTVIbX+0L
        K8Wy3IxSF2cAqxzkqMNk9elaGl+Ef7I1LSJYLgPBY2csDlx88juysW9OoP51Fe+DpL4axvukikur2K8t
        ZFXd5ToigbgevKnj0NLT+vX/ACDW/wDXb/Mo6T44km1ddNuNQ0jUJJoJJYZdPLAIyDJV1JPbvntTLTxT
        4lOh6Xr13b6aLC6kijlgjV/NAdgu8NnHU5xj8a2bPSdeluWm1O70+OMQvGkFlCQrswxuZm549BUf/CMX
        P/CFadofnxedatAWk52ny3DHHfnFHX7g1K/hptWbxt4oF1c272qTRgIqMGBMalcEsQBjrxyeeK0NZ1bU
        hrdtoujJai6kha4kmugzJGgIH3VIJJPvUlhpF9YeKdUvxLbvYahsdkIIlSRUCcdiuB9abrOjX8urW2sa
        RcW8V9DE0DJcqTHLGSDg7eQQRkGl2/r+tRvqclZ+Ibjw3H4pvtQit1vH1SKFV3kRF2jQBiTyF7+1aGle
        OZJdVGnXF/pF+81vJLDLp5bCMgztdST1HQ57VLH4Jv7iy1QajqULX11ex30E8UR2xSIF2jaTyARjryK0
        rPSNeluHl1O70+OMQPEkFlCQrswxudm549B60Pb5fp/mPr/XcwYPFvin+x9F1ea00xoNTdIFt13q6u4O
        1i2SMZHTH41ffxZqWjf21DrUVrNPYQRzwtaBkWTzCVVSGJwdwAz71ZHhW6Hhvw9pn2iHzNMuIJZH5w4Q
        HIH50/VPCX9r6jq8s86pBf2cVum0fPG6MWDenUj8qcrX07v7iY7K/l+f+RGNZ8QaVe6d/bkWnva38wgH
        2QOGgkYEqG3EhhxjIxWWvirxPLoeoa3Hb6Z9ksLidGiZX8yZI3IypzhTgd85I7VrR6DrmoXuntrl/ZSW
        2nyiaNbWJladwCFZ9x4xknA70sHhe5i8HapoxniM15JcMjjO1fMYkZ+maBrz/rf/AIBR1nxfewa0lhbX
        GmaerW6TRPqQbFyWz8qEEAYwM5z16Uy+udduvFfhWRXtLYTQSvLA2ZACAu7DK2DwflPb3rR1LQ9blxFb
        T6ZdWbwJE9tqMBdYyBgspHXPofSobfwle6XF4d/s+8gkfSxIkn2hCBIkn3tuOhHYdKFa/wDXmLUbomu+
        JNVtb6/+z2D29vNcQxW6BlklZGIU7mbao4wc+hPFVoPFmpweIdN069vNEuvt7tH5VkW8yBgpbLEsQw4x
        0FX4vCdwPB+paI96IpbuaeRZogflDuWAPT1wap2/hLVzfaNcTvo9tFptx5n2ext2QSDaVJJPfnpjHvQr
        XG+tvP8A4Bl6f4i1Lw7oet6hqU1nPu1aS3gHzIBIXwSzEnCAY+gBrQ0jxxJLrC6bPe6Vqck0EksLaYWG
        GQZKMpJ6joc1Yk8HXs9vqdnJeW6wS339oWUyxkyRS7t2HB4I7cds1fsNK197wz6lfWMCLE0aRafARlj/
        ABsW5yOwHFLp8v0/zB7/ANd/8jK8N+LdU1m9tczaRPFMcT2kLMlxacZ+YM3zEHg4ArqtYuby002Sawgi
        muAQAJpAiKCeWYnsBzXNJ4U1e81TTZ9WuNMcafMsq3VvblbmfHQMc4UHvjOa2fFWhy6/o4tIJ445EmSY
        LKpaOTac7HA6qe9NgtzCsPGVzDr0unaleaVeotnJd+bp24eXsxlWBZuoPBzWZrl/4h1Lw5p+oXcFiun3
        d5aypFFu82FTIpUsScNnjOAMZrYtvCWoS63b3+ovpqwLaTWj2llCY0VXxyCep49qgm8KeI5dNs9HOq2J
        02ymheNvKYTSpGwIVznAwB1HXA6UaafL8/8AhhPZ/wBdC7r+uazYXdz5Vzoun2sKgxm/cs9xxkkBWG0Z
        45zVKHxdrOry6BHpNrZxtqljJcu1xuYQlSozwRkckY9xyKnm8Kaomu6ld2k+mNHfvuM91bGS4g+UDahz
        gjjjOMe9YsWjatouveF9Msru1+2WmmXC7pEZo5QGTg4wR1B47iiPn/WjGTeJda1m58J65Yyta2+pafNC
        k7xBtkkbspVl5yue4JPQ+taVxqGq2eo6t5NtYTapbaVDMZFiYeadz5XG7OODgep71LP4QvLzQ9Zjur2F
        tV1RkkeVIyIkKEFEAznaMdevJrT03Sb6PXJtUv5LYyT2cUDpBuwGUsSRnt81HT+uwdP67orTeKRJeaUt
        l5bW1xavfXLspJSFV4xz1LEDn0NcxF8TJPIh1OS90U2kjrmwjkY3SIzYznOCwByVx+NdF4d8H/2RJqf2
        qdbiK4Bgt1A/1VvkkJ+bH9Kr2XhnX7K2t9Ki1KwTTbdlCXAtj9pMYPCc/LnHG79KNLi6HQa/qMul+G9Q
        1G2VGlt7d5Yw4JUkDIzjtXM3/i3VdH0ixuNSk0qK51N1Ftu3JHApXcxkJPzY9sZzXUa9p0mreH7/AE6J
        1SS5geJWfoCRjJrO1bw3Nfafpf2e4ii1DTCrQySJvjY7drKw64Ipf8Af/B/4BgQeP5vsetRfadLvryys
        GvIZ7IsYnxn5WUkkEHHfkGtCDX/EFtdaNNqcOn/YtVdYljgD+ZCxQsMsThh8p7CpJvD2t6jpWrw6he2K
        S3lo1tDBaxFYoyQfmJPzEnP6VfvtBmuodARZYx/ZtxHNJnPzhY2Ugfi1NWD/AIJyniLVte1zwRrWoW0F
        iNJeKWNIm3eeyKSpfdnaOhO3HTvVzU/GbWF/b6Pa32lWLw2kcss+osdpLDhVUEEnAyTnjin33hDXv7Ev
        tA03U7KLS7nzCjSxMZowxJKDBxtyTz1APSr914b1G31RdT0eax+0SW0dvcw3kbNG+z7rAryCMn60lsD/
        AK/Ay18dX9/pWmvpkdi95camdPlJLPDkKx3qQQSOAf096dqetahot9rE80Gny6jaaKlwZ44nAdvMfC4L
        Z28dOuSea1G8NajLHo7XWoRTz2eoG8mYR7FwVYbEA7DcOvpTdf8ACtzq93rE0VxCgvtLWyQPn5WDMcn2
        +an/AF+A42vr/Wv+RHBrniC21LR/7UhsPseqNsVIA/mQNsLjcScN0xwBVS48T+I59E1DxBplvpx02383
        yYZg5lkEZKl8ggDkH5cdB1rfvtFmu5dDZZYwNPmEkmc/MPLK8fnXn2qXj2Xh/WdE03W7FLZ3nSOylib7
        arsxzEqZ5BJOGx0NJ9bCXS/9bnp0GoD+wotRucKPswnk2jgfLuOK5X/hJvEUOiw+JLm10/8AsiQJI1sm
        /wA9IWIw27O0nBBIx+NdVa2QOhQ2FwuV+zLDIv8AwHBrmB4T1yTSofD1zqlo2iRbV3pCwuHiUgiM87Rw
        AMj8qb+J2EvhVytpOnXl78TNTvr02E62qReS3kvvjVlJXYS2AfXjn2ro/EF/qVmIFsDYQI5Pm3d8+I48
        dBtBBYn61LYaTJZ69qd+XQxXawqiDOV2KQc/nWd4k8O3mp6vYanZtYyvao6fZtQjLxHdj5xjowx196XZ
        DXcd4Q8RT67/AGlBcyWc0tjOIjPZE+VKCuQQCSR6Yya5vxbBpk/xDhXVNBudYiGmErDbweaUPmfeIyMD
        t+NdP4a0C90e+1W5vLm3nN9JHIPJjMYQhcFQvPHTHNQavo+vf8JQms6LLpoP2P7M6XokP8e7I20dV/XQ
        XR/11OStHto9J8Y21lbT6baLZbo9MuVKvH8pzIFOQFPsT0rpZ9U1az07To7WfSrG2FlG5utQfIdto+VU
        DA8DufWkfwpquoDVbzVb20bUL2xNlElvGywxLyc5OSSSaZL4S1OHV4b+0l0ydvskVswv4Gk8goMbosHv
        nkcdKOv3fqP+vyJtL1/WNf8ADCajY3Gl20sU0sdxJMjyQsEJG5MMCAevJqjY+LNfXw/Nqd9BZT/aLpLb
        TBDG8Xn7jgO25mwp5I9h71HL4L8QJoKaTb39hLC19Lc3IlDoLhGbcEIXoM5yB7Vr3Oia5rOlvZ6nLptq
        8Txy2ctirny5EORkNjjtgetP/gf8EWv9fgEes63pmr21hra2EovY5DbzWiuoV0XcUYMTnjPIPapfB+qa
        3remw6nqIsY7aeMmOKBGDghsZJLEYOOmPxpkOhaxfarb6hrl3Zs1pG6W0NnGwXc4wXYsc5xxgetafhvS
        5dF8O2WmzSJJJbptZkzg8k8Z+tIDJH/JVm/7A4/9GmnXv/JTNK/7Btx/6GlWNa0PUJtYt9a0a7ggv4YW
        gaO5jLRSxk5wcEEEHnIpuk6HqQ1t9b1y7t5r3yPs8MVrGViiTOTjcSSSf5ULp8/1/wAwl1+X6f5FX4cf
        8ign/X3c/wDo1q62ud0DRdS0HQYbCGW0klF28kjOG2+W8hYgY/iwfpXRUDe7CiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooA+AK6Jfuj6VztdEv3R9K78D9oxrdBa6fRv+QZH9T/OuYrqNG/5Bkf1P867
        p7GKL9dv8OfD9rr1xfrcz3UQiVCvkS7M5J6/lXEVq6J4j1Pw88z6bOsTTAB8xq2cdOo96wmm4tLctbnb
        eJvD2k6D4h0hZrrUmtZVlMjCUvIMDjbgevWoLtPBRt2E13rpXHAl3bc9uornJ/G2vXOp2uoS3aG5tQwh
        byVG3cMHjGDxTdW8aa7rdibO/ulkgLBioiVeR7gViqc7JNluUb6GCcbjjpnikooroMzt9W1g6dofh6MW
        Gn3O6xzuuYBIR8x4B9KsaDJHqPhS5ht7OWa6a982a3sZhA2wj5SODlQe30rgKKzdNW/rvcpPb+uh6VeP
        d3765aw2zQ3n9nQqYhcCR3KuMkkY+bb1+lQ6lb6zcajBqGj3awaWtiqrM7jyo1CYZWHPPUYx1rzuil7I
        fMemx3k5+IOi2/2h/IFlGuwMdpBjOeK5LwfLBb+K4GldY+JEjdzwrlSFJ/HFc/RTVOyaJuej2Wn6ra6A
        8Gs3DW/marblHlYOU5OWwcjHTrxxV6/inj0zxH5ljLAzQFkmnui7z4cfMFHAHuB3FeVUVLpX6/1p/kNM
        9Ue0uZtXvboGeZJdOh8iCGQK1yNqhgrHJGO+MGsHxwjLomg7rYW7L56tEJjKUOVIBYknPtXE0U1Ts07g
        npYKKKK1JCiiigAooooAKKKKACiiigAooooAKjn/AOPeT/dP8qkqOf8A495P9w/yoA4yiiityD60+HH/
        ACTrQv8Ar1X+ZrqK5f4cf8k70L/r1X+ZrqK8Op8b9TsjsgoooqBhRRRQAUUUUAFFFFABRRRQAUhAIIIy
        D1BpaKAGoiRoqRqqoowFUYAFOoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
        KACiiigAppjQyCQopkUYDY5A+tOooAKKKKACiiigAooooAKKKKACiiigAooooAKiNrbmcTmCIzDpIUG7
        8+tS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFAHwBXRL90fSudrol+6PpXfgd5GNboLXT6N/yDI/qf51zFbGl6pDbW/kzZGCSGAzXdNXRi
        jforP/tqy/56N/3yaP7asv8Ano3/AHyaysyrmhRWf/bVl/z0b/vk0f21Zf8APRv++TRZhc0KKz/7asv+
        ejf98mj+2rL/AJ6N/wB8mizC5oUVn/21Zf8APRv++TR/bVl/z0b/AL5NFmFzQorP/tqy/wCejf8AfJo/
        tqy/56N/3yaLMLmhRWf/AG1Zf89G/wC+TR/bVl/z0b/vk0WYXNCis/8Atqy/56N/3yaP7asv+ejf98mi
        zC5oUVn/ANtWX/PRv++TR/bVl/z0b/vk0WYXNCis/wDtqy/56N/3yaP7asv+ejf98mizC5oUVn/21Zf8
        9G/75NH9tWX/AD0b/vk0WYXNCis/+2rL/no3/fJo/tqy/wCejf8AfJoswuaFFZ/9tWX/AD0b/vk0f21Z
        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
        wYEMDg544HueKAOnopqOsiK6MGVhkMDkEVl+Jdci8OeHrzVJF3+SnyJn77nhV/EkUPQFqa1FcXrXjLUN
        KttHsINOjvfEOpRhhbIxSOPj5mJOTtH9Km0LWvFzayun+IPD8EUUiF1vbKQtEuP4WB7/AI/hTsK511Fc
        /wCGfEMusT6rY3kccV9pt0YZFjzhkPKOM+o/ka6CkMKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
        iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
        iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKqam1+mmXDaZHDJfBD5K
        TkhC3vjtQBbory238XfEO58R3WhJpOg/bLWJZpAZJNu09MHdXYReN/D39pR6TPrFmup8K8Ksdofuobpn
        PbOadhXOiorn9S8b+GtHu7i11DVobe4twpkjcNkbumOOfwzR/wAJx4Y+2WloNbtDNdgNAofO7PTnoM+h
        xS3GdBRWBqnjbw5ot3Pa6jqsNvPAFMkbq2Ru5GMDn8M1rafqNnqtlHeWFzHcW0gykkbZBoAs0UyWVIIZ
        JpGCxxqWYnsBya8+1Dx/qcHw9fxPb2drma88u1ikDYMRfaGbB6nBNAHolFchot34+m1SBdY07RYdPbPm
        vbyOXHynGAT64q/4V8Qy65Dfw3cUcN/p909tcRx528H5WGecEU7Bc6CiiikAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8AV0S/dH0rna6Jfuj6V3
        4HeRjV6C0UUV6BiFKAT0BNJXp3wdu7a1vNWNzcQwho49vmOFzy3rUVJckHLsNK7seZbWzjB/KjY390/l
        XtfjHUGk8aeHZdHvdP8AtKJPtknkBiXK/wAWD6Zx71V17xR4r0jSpLmW+8PXCEhCluWZ+fbNYqu2k0t/
        P/gGjppO1zx2ilJyST3pK6TMKK6650zw1pWmaTNfxapLPe2wnYwTxqq8kYAKE9vWquoeE5/7Ut4dG33l
        td24uYHfCkJ3354GD1PSo9ogtpc5uiuo0nwVfXPiC206/QQxTRtJ5iTIQygH7rZIPOBxnFU4PCWsXbTe
        RbRskUph3tPGqs3opLYY/TNHtIX3Hysw6K1bPw3q17NcxRWu1rZtsxmkWNUb0JYgZ9q008F3qaHqt5dp
        5NzZSIoiaVBkHlicn0xjHXtmh1IrdgotnL0Vu+GNEh1q7uvtDTGG1t2naO3AMkmP4Vz3qxc6Zoc8ET6e
        17DdC5SGSxu5E8x1buhwB7cihzSdhW0uc1RXRHwhqd1fTRWVvGqrM0SxTXkIkBBxg/MMn3AqCLwnrM11
        dW62qB7R/LmZp0VFb+7uJwT7A0KpF9R8rMSirF7ZXOnXklpdxNFPGcMjdqr1ad9UIKKKKBBRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFAH1p8OP+SdaF/16j+ZrqK5f4cf8k60L/r1H8zXUV4dT42dcdgoooqBhRRRQ
        B5p8Ur+DS9b8I6hdFhb298ZJGVSxCgDsKo6nrcHxG8UeG4NAguZLXT7wXd1dSQlEQLjC89zg/pXrNFNO
        35g9TwPxXql1e2PiizZotOdbkk6bb2GZLgAj97JJjp3zxW7r9zZ6d4j8B6zeQF7EWZSWVYd+WMYCg4HJ
        ya9fooi7A9b/ADPn29hisdZ8SafrlxqcEuoXbyQRW2nRzm6jY/LtdlyCB6EY+te4eH7T7B4e0+0zOfJt
        0T/SAPM4H8WOM/StKii+lg63CiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
        UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
        UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXjWl2F9qPwy8a2lgjtcyanO
        VRergMpIH1ANey0UB1R4j4Pj0/VvEWieRd6xNeaemXjGnQwR2/y4KyMApI7d6ox6dav8JfF901rG1z/a
        sgEhT5gA6Ywevc/nXvlFNu6BaM8rawtrH4heA1tLaOFTp8m7y0xn9339a5Kx1fRbPw/4p0+90mae/vby
        eO1kW23+Y5yFAbsQea+gawvDHhqPwzb3sUdy0/2q6e5JZNu0t2oer+/8XcSVvw/BGb4Z1GPQdH8N+HtV
        eRdUuLXCJsJ+6MkE9sD1qj8XEkPhG3dc+XHfwNL/ALu7/HFd7VHWdKt9c0e60y6BMNzGUYjqPQj3B5ob
        bfN53HFW0OG8ZJcaL400PxclpNdadBC1vciBNzRKc4fHpz+lbGh/EGx8S60llpGn389rsLSXrRbI4yOx
        3da6bTrV7LTba1kmM7wxLGZSuC+BjOKs0eQjgfDQZ/iv4slj/wBSsUCPjpvx/wDrrvqyNB0CLQxfOJmn
        uL25a5nlZcEk9Bj0A4Fa9LokPq2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHnmnI7fGPxIEyGbTIwp9+K810+wgOn/8
        I1q0+spqn2s7rK206JmY7siQSsA2O+S36V9G0ULS39dbg+v9dLHldtpttdfFPxT9rt0nMWmRhTKgPOwA
        n61yo062i+D+kXMdrGtw2rKTIE+b/WEdevQV79RTTtb5fncTV1/Xax4/qeraRovxh1q81qxe4thYwr5i
        weaIiQvUds9M1o+AdQg8LeDrvUtUinsrC+1R2s4TGSyI+Ao2joODXZWnhmO18ZX/AIiFyzSXlukBhKcL
        txzn8K3aS0X9d7je/wDXaxjeK0ln8G6ylvkyvYzBMdSdhrzLXwk37P2jqnKn7Op2+u7Br2VlDKVYZBGC
        KyvDuhR+HdOewgmaS2EzyQqy48pWOdvuASaF/l+APb7/AMTL8O+A9M8O6gL+0u9SllMZTbcXJdcHHbHX
        isrwYrN8RfHEyf6gzwJnsXCnNd/24rI8P6BDoFpcRpK081zcPczzMuC7scnj9KaevyFbSxr0UUUhhRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHwBX
        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
        4zf980fax/zxm/75osBYoqv9rH/PGb/vmj7WP+eM3/fNFgLFFV/tY/54zf8AfNH2sf8APGb/AL5osBYo
        qv8Aax/zxm/75o+1j/njN/3zRYCxRVf7WP8AnjN/3zR9rH/PGb/vmiwFiiq/2sf88Zv++aPtY/54zf8A
        fNFgLFFV/tY/54zf980fax/zxm/75osBYoqv9rH/ADxm/wC+aPtY/wCeM3/fNFgLFFV/tY/54zf980fa
        x/zxm/75osBYoqv9rH/PGb/vmj7WP+eM3/fNFgLFFV/tY/54zf8AfNH2sf8APGb/AL5osBYoqv8Aax/z
        xm/75o+1j/njN/3zRYCxRVf7WP8AnjN/3zR9rH/PGb/vmiwFiiq/2sf88Zv++aPtY/54zf8AfNFgLFFV
        /tY/54zf980fax/zxm/75osB8EV0K/dH0rnq6Ffuj6V34H7RlV6C0UUV3mIUUUUAFFFFABRRRQAUUUUA
        FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfWvw4/5J1oX/AF6r
        /M11Fcv8OP8AknWhf9eq/wAzXUV4lT42dS2CiiioGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
        RRQAUUUUAFFFFABRRRQB8AV0S/dH0rna6Ffuj6V34H7RlU6DqKSiu8yFopKKAFopKKAFopKKAFopKKAF
        opKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAPrX4cf8k6
        0L/r1X+ZrqK5f4cf8k60L/r1X+ZrqK8Sp8bOlbBRRRUDCiiigDH1rUdStprWz0qwW4ubkt+9mLLDCqjJ
        LkAnnoBUGi6/c3M+p2Oq28MF7poRpjA5aN0YEhlJAI+6eDVXxj4wt/DMdtbCW3S+vCVha5fbFGB1dz6D
        0HU1iW9zpEnhy+tdJ1mLVNU1OeOC7uY3BJeU7ScD7qhQ+B2AoWq0D1Ni+8ZNp3hWHVJbCaa7uIXmitoE
        J+Ucgsf4QBjJP4Vau/Ektv4c0y9jtllvtR8pIIN2FMjjPJ7KBk/hVnxHEkHgzVIoxhEsJVUegCGucvs2
        /hfwhqrIzW+nvBLcbRkrGYtpbHoNwNPTX1X6hra/qbukazqD6xNo+s21vDerCLiJ7Z2aOWPODjcAQQev
        1qq/iPVbkBNL02Od57uWGCWQssSJHwzyMAerAgAdaybvXLa+1+713TJRcWenaW8XnpyjzOwKop7ngdPU
        VY1bxDb+BfDmk6aZLdb+dBHGbh9kanGXdz6An6kml01/rX+vvDr/AF2LQ8Xz6fbaums2caXumrGxW1kL
        JMJOE2kgEEnjBqa017V7bVbSy12ytIRfKzWz2krPhlG4owYDnHcccGuamg0zUPBmrHSNUj1rVDLDd3s0
        TBmkKOrYAHQAKQBWndazp/iTxHoDaXcrcRWDyXd1IgOIV8sqA3oSW6deDT/r+v66C6E1z4q12y09tcud
        It4tHV/mieVhdKm7bvKldvvtznFXfFni5fDlr+4spru6IVsKh8uNS2Nzt0A9uprlj4x0DxVqAfU9bsrT
        RrebMNm0oEly6nhpPRc8he/BNdT4/wD+RI1D6R/+jFpPRXH1OlQ7kVvUZpaZF/qk/wB0U+gAooooAKKK
        KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
        KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
        KACiiigDK1zUb2xht49OsTd3dzKIkDErHHwSWdgDhRj8ay7fxNqFrc6jYatp8bX9pai7RbBmkWdCSMKC
        AQ2RjFWPF/iu28K6dFLKYzcXEnlW6SvsQt6s3ZR3rF0LXPD1hZaprU2vW2p6iIvPvpoGztQdEReygnAH
        cmhdQ7GhH4g1yyvdOGtadZxWuoyiGL7NMzSQuQSA4YAHpjjvXV151oPiHSPEmuWmpanrVibrcRp+mRTB
        vJJHVv70hH4CvRabEFFFFIYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVWvzeixlOnLbtd4/di4ZhHnPc
        qCenpVmkJCgk9ByaAOOtdb8VDxVbaPeWujOrIZrhrSWVjDH0BO5QMk9B7Grd14vCeLLDRLaymdJpXimu
        nQrGrKhbap/iPHPYUzwOpu7K+12TmbVLp5AT2iVika/QAfrTvEn/ACNfhT/r6m/9FNR2DudRRRRQAUUU
        UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
        UAFFFFABRRRQAUUUUAfAFdCv3R9K56uhX7o+ld+B3kZ1BaKKK7zIKt2Ol6hqbOthY3N0UALiGIvtz64q
        pXonwp13S9DutTbU7yO2WVIwhfPzYJz0+tTUk4xbQJanGSaBrMV1DayaVepcTZMUTQMGfHJwMZOKmPhX
        xCoJOh6kAOSTbP8A4V6L4t8SaZqnivQ59M8QRWohSYPeKm/ysrxwRznp+NUNd8SXtlpby2Pj0ahMSF8h
        bVVJB6nOKwVWbS039S+VXPMuhwaKCSTk96K6SAorttb8PadH4F0zUrKDZerFHJdkMx3q5YA4JwMFe3rV
        ifwfav4U0aG3jRNZurtI5pndsKHRnVSOQONvbNZ+1j+NgSul5nA0Vs2GgTXH2ydniMNjPHHMpJy+6QJ8
        vH+FdLq3hXS4bfX54JbeFrW+SKCJ3f5Vwfl6HJbtz27UOrFO39dP8wscDRXW3ng+Z7vUpmuNN0+2tJ1h
        k3SyFFJXI2kgsf50f8IuLDSNd+2xxzXEEMEtrNE5KsryAbl9QRkcij2sR8rvY5Kiukl8F30UUi/a7Jr2
        KHz3sVkJmVcZPGMZA5xnNU/DWkRazq3k3EjR2sMT3E7L1CIMnHv2queNm77CszHorrtNk8Pa7qcelf2K
        LEXLeXDcx3Du6MfulgTgjPXAFZGo+HrvTUtGmeL/AEqaWFQCcq0bBTnj1PbNCnd2ejCxkUV0Z8HXcU98
        t3e2VrBZz/Z3uJnYI8nouFJPHtSx+C77z75J7uzto7NEleaVzsZH+6ykA5Bpe0j3Hys5uiunfwtcXUmn
        wW32IK9s8z3SyPsKK7AyPuHHTsOmO9RDwdfS3Fmlnc2l3DdMypcQufLUqMsGyARgc9KPaR6sOVnO0Vqa
        now06COaPUrG9jdiv+jSElSPVWAP44xWXVJp7CsFFFFMAooooAKKKKACiiigAooooA+tPhx/yTrQv+vV
        f5muprlvhx/yTrQv+vVf5muprxKnxs6FsFFFFQMKKKKAGPHHJ99FbHTIzQsUafdjRfotPooAQgEYIyDR
        gbduBjpilooAaI0C7QihfQDih445PvorY6ZGadRQA1I0jzsRVz1wMULGi52ooz1wOtOooAi+zwf88Y/+
        +RUhAYYIBHoaWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAa8aSffRWx0yM00QRAECJAD1wo5qSigCMQQqQViQEdCF
        FSUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
        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
        CSxS6WPMZWPJaULnnhemcZq9balrlhqWo6LPLHqd8ll9rspCiwmTkrtfHAw2OeODS/r9Q/r9DraK4x7v
        xDoeoaOdR1SG+Go3AgltBbKnlEqSShHJAxznNS69r2tWfiLSbS2shDp016kEtzIwLS5UnCL2HHJOPanb
        Wwr6XOuooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiuG8W6/dWviS20y31qTTI1tGuJmishcu5LbVAXBPZjxQB3NFZX
        h24N1okE/wDao1Tfki6ESx7uem0cAjpWrQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
        RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFU9Ukv
        otLuH02BJ70J+5jdsKW9z6d6ALlFceLvXdE17SLW/wBUi1FNSdo3iFusbQkLu3KV6qOhznqKNe8TXsOv
        6fYaZs+zrexQX0xAPLgkRr74GSe3HrTtqkB2FFFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+AK6Ffuj6Vz1dCv3R
        9K7sFvIzmLRRRXoEBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQB9a/Dj/AJJ1oX/Xqv8AM11Fcv8ADj/knWhf9eq/zNdRXiVPjZstgoooqBhR
        RRQBynjTWdU0+O1s9Msb9zdEia7tLVpzboOuAONx6DP1rNtlhuvDb6LpWkavai4uI47ma+tWjeRXbMkh
        Y/eO0HJ9xXe0UIGZfiGB5fC+p29vEzu1nIkcaDJJ2EAAUzTIJY/B9nA8brMtgiNGVwwbYBjHrmteih6p
        ruNO1vI4mzsL1/AGg6O9rOjz+TFdKUIMcYO593pkDHPrUXi7VtQk1ddGTT9ZTShGGuLnT7N5Gmz/AMs1
        YcKMdT17V3dFD1EtEcRdRebpuh6ro+jXsMWk3J/0GS3MUpiKFG2oep5z74oS7vZdY1LxUuj36xW2ni2t
        bWSErNcNuLHCdQM4H5mu3oouB574Z1BrjWI7/WNJ12TV7j5BJLpzpBaKf4UJ6D1Y8mt/xVa3Fzd+H2gg
        klEOqRySFFJ2KFbk+g5HNdHRTvsK24UUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGZrGl3GqRxLb6ve6cUJJa12Zf2O5T
        WRcXl74f1VfP0q51K2a1SNb62txJcM4JyJNuOD1BAA611VFAHO+D9PurKwvZ7u3+zPfXkt0tsSMxKx4B
        xxnufrXRUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
        ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWdruoz6Vol1e21lNezxJmO3hQs0jE4
        AwOe/PtWjRQwPP8AwzdmbUTcahp2utrV4hQ3dxpzpDbDGdqZ4VR+veq2o+EPEFhZ6VbWuutcompJKxGn
        KWVjuJlc7ueTzn1r0mincBqBljUO25gAC2MZPrinUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD4AroV+6PpXPV0K
        /dH0ruwX2iJi0UUV3mYVraJ4a1bxG8yaXaidoQDIPMVcZ6feI9Kya734Z+JLLw7c6i95HcuJkQL5ERfG
        Cev51NRtRbjuC3MS48D+IbXVLTTZrALd3YYwp5yHdtGTznA49auN8M/FqIzNpYCqMn/SI/8A4quj8VeJ
        9J1/xLo0obVba3gWUSPDEUmGRxt/r7Vma5eWK6Yx0bVPFD3e4fLcu4Tb3rBVKjS6P08y+VXOCIwSD2pK
        O/NFdJAUV3mgaybnw9rc02maS0ljbRtCxsIs5LBcnjnioX8NJqktnNqF7HZX+pIrw29tY4iQHhdxUgLn
        HYHrWftLOzGldHE0V1kHhC0jsrWbVNVe0luLl7URJb+YQ6tjruHFJeeELW3i1FINW8+8011W5i8gqvLb
        flbPOD7Cn7WIWZylFdhd+DLKK+vNNtdZ8/U7aJpfJNvtVgBuIDbj82OcY/GrOraBZXmq26+cllEmmW8j
        JBCHklZh/CgxuOeSaXtYhys4aivQ9N8H2OnazGL+aWS3uNPmnhWa02upUEHchbgjqPWsi38I2bWtnNd6
        pLB9uY/ZQtoX+TOAz4Pyg/jQqsW/6/roFmcnRXXxeCPItJ59Uu54BFdNbN9mtTPtK4+ZsEbRzxXLXUSQ
        XcsUUyzRo5VZVBAceuDyKqM4y2CzIaKKKoQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfWvw4/5J
        1oX/AF6r/M11Fct8OP8AknWhf9eq/wAzXU14tT42bLYKKKKgYUUhzj5QCfc03Mn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBa
        jMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT
        +6v/AH1/9ajMn91f++v/AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AD6KZmT+6v/AH1/9ajMn91f++v/
        AK1AD6KZmT+6v/fX/wBajMn91f8Avr/61AHwHXQr90fSueroV+6PpXdgvtETFooorvICvS/hBqFjYXeq
        m9vLe2DpGFM0qpu5bpk15pRUzjzxce4HtHjDVornxl4fl0fWNMSaNJ/9IlmVoo8r/Fg8ZGQPeqmveJ/E
        elaW9z/wkfh+9yQhhtcM5z3xXkVFYrDpJLsVz63AnJJPeiiiugk2dI1eDT9H1qzlSRpL6BI4yoGFIbPP
        Nb9t41t3sbFLu81u2ltYhC0djMFjlC9DyRtOODgGuHoqJU1LcFodJc+I4Lm00uNkuDLa3klxKzsGLBmB
        HOck8d8VL/wkVrLqPiGQRTAarKDDkD5f3of5ufT0zXLUUezihtto9D8Q6vo+jeKtWu7WG7bVWRoQCV8l
        WZQC4PUnB6Y6mqy+NNOcTRMl/brLZW9v9pttolRo+oGT90/WuFoqVRjZJhzM7o+MtJF3pm2C/NvbWk9r
        K0hVpGEn8QOeTyeKba+MbMadZ2cl7rlqtlmOM2bqomjzkbhu4bHGRmuHoo9jH+v68wuzstP8VafDNJcS
        S6za3RuDIZrefzGmTjCybiASMdcVzmt6gmq61eX8cAgSeQusY/hH+NUKKpQSd0FwoooqxBRRRQAUUUUA
        FFFFABRRRQAUUUUAFFFFABRRRQB9afDj/knWhf8AXqv8zXU1y3w4/wCSdaF/16r/ADNdTXi1PjZqtgoo
        oqBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfAFdAv3R9K5+uhX7o+
        ld2C3kRMKKWiu8gSilooASilooASilooASilooASilooASilooASilooASilooASilooASilooASiloo
        ASilooASilooASilooASilooASilooA+tPhx/wAk60L/AK9V/ma6muW+HH/JOtC/69V/ma6mvFqfGzVb
        BRRRUDCiiigDH1rSrvVprWJdQltLFSzXK27mOSTj5QGHIGeTisHQNSewXxIy3s95pGn4NvPPIZG3BSZE
        DnlgCBzzySKt+NIfEN4lrZ6RZmezkJN7sulgdl7IGIOAe5HaoYrLVb/RY9Ik8PwaRZrNCrJHdrKGhDbn
        HAGPuge+6hbMGRaqniK28Ar9jvEhuFs5J7q6mLPIp2ltqD1ySMk8AVox2mo6x4Q0eKDUJLZpYYGuZwx8
        1k2gsFbsx9frWrrlpLfeH9Qs7dQZZ7aSNATgZKkCsHVrXxHbeC9O07RYFa9EUUNwwnVDGoUBtrHIzxgH
        tTvv8v1Dovn+hHoZaw8YX2m2WoXd5pkFqHuDczGbyJt3Ch255XkjPFFnp+peIdPhum1O4trK7uZbiVYp
        WWQxfdiRG/hXADHGOtM0+11uHw/eaTbeGotMDwMsc329Zi8jcFm4BJ5JyT2qXxRYa6NL0/StBtDLZKAl
        1sulgcxgYCKxBxnuRSAxn1i80nTfEaaZf3F3ZQSwW9pc3DmUpNIwVwGP3gu4HnvxWqbafwx4g0aKDUb6
        6h1JngmS7naUbwhZXGfu9DkDjmnDSNQ1fwrdaJJocGiIiobTZciZd6sGBO0DHIGfWpY7LXtW1fT73VdP
        t7SPTA7xxx3HmGeUrtB6DauM9eeaYdDJ16wv9D0uPUG1y+m8QzTqsEKTt5MzFv8AViLpt298Z4zmtH4g
        za7Boks2n3UVpaRKjTSLnznJcDav90c9etZumQeLLfU5dV1HwvFfai5KpM2poqwR54WNdp28dT1NdT4t
        0251fwxd2NoqtPLs2hmwOHBPP0FJ7B1NmPmJCf7op1NQFY1B6gAU6hgFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
        QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAZWuade6pD
        b21tfPZwmUG5eJisjIAflVh0ycc1i+G2kt/FWqabZ311e6Vbwpue4lMpinJOUDnk/LgkZOKt+Ml8QTab
        FbaBBvaWTFw6zrE6x9wrHOCemccUvhZL+0g+wzeHItJtIlyjJerMXbPOcAHPfJoQM6OiiigAooooAKKK
        KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
        KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
        KACiiigAooooAKKKKACiiigAooooAKqanFdz6ZcRWE6QXToVilcZCE98VbqnqsN7caXcRadcrbXjL+5l
        ZQwVvcenb8aGCOM0y4Sw8c2uk2GrX90RFJ/aC30zMpYY2mPf3znOzjFY/nGaW/1jVo/Ey2f22XdcW968
        UMEattX92GBI4ySB3rqDp+va7rGlT6pYW2nxabKZi8dx5rTPtK4XAG1ecnPtUN7ZeLrzTLvQZo7WeK4L
        p/arShSImPQxBfvAHHHFPVa9QOzRleNXRgysAVIPUU6oraBLW0ht487IkVFz6AYqWh76CV7ahRRRSGFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAfAFdCv3R9K56ugX7o+ld2C3kTIdRSUV3kC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0U
        lFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAC0UlFAH1r8OP+SdaF/16r/M
        11Nct8OP+SdaF/16r/M11NeLU+Nmq2CiiioAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigD4AroF+6PpXP10C/dH0ruwW8iZC0UUV3khXQ+FvB994tluY7Ga3iNuFLecWGc56YB9
        K56u9+GWs3mkXOotaaNdakZEQMID9zBPX61FRtQbjuBTvvhxqmn63p+lT3liJb4OY33tsXaMnJK1df4T
        6qkbOdV0khQTxM3/AMTWr4o1OfXvE+ipqPhS+2IsoFmz4af5exHpjP4VQ13QVutMaPTPAmo2NwGDec0j
        OAB14rnVSdld2+7v6lWVzzwjBI9DSUpGDg0ldRI/y5P7jflTSCDggg+4rv8Aw34m1t/DXiBn1O5LWtrH
        5BL/AOr+cDj8Ksr4SbVfsFxqqaxe3uoxLJJeRYMcIPC7sjLYGM8is3Us9QR5tRzjNd5ZeCrQWLPcW9/q
        FxHPJFcLYSoDAFOASjAls9e1VdWTTYfh9YpFb3Im+2zKruyg5GMlhj0xxnjmj2qvoOzOPCM33VJ+gpCr
        A4KkH0xXaaDqN5pfw91a5sLmS3mF7Cu+M4OCDmrVjcz+JvD0d1qUzPe2epQRR3YwJCjnlc98EZGabm7v
        TRNL77f5i6HAdDg0V6CnhOyvJtSuHj1HU5k1CeKVLWaMSxqr8OwIyxPJ4x0rLXSPD9lojajfjUnJvZLa
        OFCsbFQActkHBHce4pKqmOxyVFdteeE9L0eK71G9muptOBiFqkRVJJPMXcNxIIGB7VJaeD9Lu7mGeCa5
        ktbq0NxbWplRJncNtZNxG3I69OaPaxFY4Wiu6t/Bdtdavcxiy1eGG1tRNLayKpmZycBUIGCD64rN8T+G
        V0iwstQht7y2iuGaNre8x5iMvuAMgj2oVWLdgscvRRRWoBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH1r
        8OP+SdaF/wBeq/zNdTXLfDj/AJJ1oX/Xqv8AM11NeLU+NmiCiiioAQgkcHFN2v8A3/0p9FADNr/3/wBK
        Nr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9KNr/AN/9KfRQAza/9/8A
        Sja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf/Sja/wDf/Sn0UAM2v/f/
        AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A3/0o2v8A3/0p9FADNr/3
        /wBKNr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9KNr/AN/9KfRQAza/
        9/8ASja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf/Sja/wDf/Sn0UAM2
        v/f/AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A3/0o2v8A3/0p9FAD
        Nr/3/wBKNr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9KNr/AN/9KfRQ
        Aza/9/8ASja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf/Sja/wDf/Sn0
        UAM2v/f/AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A3/0o2v8A3/0p
        9FADNr/3/wBKNr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9KNr/AN/9
        KfRQAza/9/8ASja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf/Sja/wDf
        /Sn0UAM2v/f/AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A3/0o2v8A
        3/0p9FADNr/3/wBKNr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9KNr/
        AN/9KfRQAza/9/8ASja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf/Sja
        /wDf/Sn0UAM2v/f/AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A3/0o
        2v8A3/0p9FADNr/3/wBKNr/3/wBKfRQAza/9/wDSja/9/wDSn0UAM2v/AH/0o2v/AH/0p9FADNr/AN/9
        KNr/AN/9KfRQAza/9/8ASja/9/8ASn0UAM2v/f8A0o2v/f8A0p9FADNr/wB/9KNr/wB/9KfRQAza/wDf
        /Sja/wDf/Sn0UAM2v/f/AEo2v/f/AEp9FADNr/3/ANKNr/3/ANKfRQAza/8Af/Sja/8Af/Sn0UAM2v8A
        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
        0pLRyyqYiSWt/nOIjnnKjArp6bBBRRRSAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKZKrtC6xuEkKk
        KxGcH1xQA4OpcoGBYDJGeRTDPCJhCZYxKRkJuG78q4vwpYy6d458SRXF9PezG3tHeaYjJJ8zoBwB7CuS
        vPLfTdSuBpcs1ydQZk8SBfkjXf8Aez9/Cj5cAbeOtO2tgZ7LRTUYNGrBgwIBDDvTqQBRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQB8AV0C/dH0rn66Bfuj6V3YL7RMhaKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
        KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+tfhx/yTrQv+vVf5muprlvhx/yTrQv+vVf
        5muprxqnxs0CiiioAKKKKAOX8X+H9V19rJLO9tI7SFzJNb3UTOkzfw7grDIHXHrTk0bXr62S21i9054E
        uIZQlpbPHlUO4qdzHqQv5GumooWgPUp6tZNqWj3tirhGuIHiDEZC7gRn9azbjQLl/D+nWVrqDW15YLGY
        51BKsyLghlzyp54reooA5KTwtqd+15d6nqcD381qbOIwQlI4Y2PzkAkksfXNP8VeGtR1m20+0067tILK
        2IaS3uYmdJsD5Q21hkD0711VFAHNf2Hq2p6NeaZr13YPFKirCbG3aIxkHIPzMehAI+lNtdA1eXUre+1j
        Ura5kso3W0WGAou5hgu+ScnHpgcmunooA4TSfDPi7SJbiaLVNFluLly89xNZytI/PAJ8wcDoABium8R6
        S+uaDc6ckqxNNtw5GQMMD0/CtWijpYBFG1FX0GKWiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCvdWNnfKq3dpBcBTlRLGH
        x9M1hXfh6+ttXfUvD93a2kk0KQzQTwF42CZ2kBSCCMkeldLRQBlaBo39i2UqSXBuLm4me4uJiu0PIx5w
        Ow7AVq0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBkWmitb+JdU1VplZL2GGIRgcrs3Z
        59936Vht4Q1ZNNm0K31eBNDlLDa1uTcIjEkoGzjuRkjNdnRQAyGFLeCOGMYjjUIo9ABgU+iigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooA+AK6Bfuj6Vz9dAv3R9K7sFvITFoooruJCiiigAooooAKKKKACiiigAooooAKKKKAC
        iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD61+HH/JOtC/69V/ma6muW+HH/JO
        tC/69V/ma6mvGqfGywoooqACikI3DHP4Gm+WP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/
        AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0
        eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/
        vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8A
        fRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99Gg
        B9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTP
        LH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3
        n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDv
        o0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj
        +8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/
        APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0a
        AH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfR
        TPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/
        ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/+
        +jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NH
        lj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP
        /wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD3
        0aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9
        FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzy
        x/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/
        AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0
        eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/
        vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8A
        fRoAfRTPLH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99Gg
        B9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTP
        LH95/wDvo0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3
        n/76NHlj+8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDv
        o0eWP7z/APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj
        +8//AH0aAH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/
        APfRoAfRTPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0a
        AH0Uzyx/ef8A76NHlj+8/wD30aAH0Uzyx/ef/vo0eWP7z/8AfRoAfRTPLH95/wDvo0eWP7z/APfRoAfR
        TPLH95/++jR5Y/vP/wB9GgB9FM8sf3n/AO+jR5Y/vP8A99GgB9FM8sf3n/76NHlj+8//AH0aAH0Uzyx/
        ef8A76NHlj+8/wD30aAPgOugX7o+lc/XQL90fSu3B7sTFooorvEFFFFABRRRQAUUUUAFFFFABRRRQAUU
        UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH1r8OP8AknWhf9eq/wAzXU1y
        3w4/5J1oX/Xqv8zXU140/jZQUUUVABRRRQAUVS1PVtP0a2+06jdxW0RO0M56n0A6k/SjTdW0/WLX7Tp1
        3FcQg7SyHofQjqD9aALtFVF1OybTm1D7TGLNQxaYnCgKSCefoangniureO4hcPFKodGHcEZBoAkoqta6
        jZ3s1zFa3CSyWsnlTBTnY2M4PvzVa78QaTYQTzXV/DDHBL5MjMej4B2j1OD0FAGlRVCw1vTNUsnvLK+h
        mt4873DYCY67s9PxqLS/Emja1LJFp2oQ3EkYyyoeceoz1HuKANSisb/hLNA/tP8As7+1bb7Xv2bN3G7+
        7npn2zmtG9vrXTbVrq8nSCBMbnc4HJwKALFFICCAR0NLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
        UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
        UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVT1PVLLRrB73ULhbe
        2QgNI2cAk4HT3qppXijRdbE507UI5xAu6UgFQg9TkD0oA16Kx9P8VaFqt4bOx1O3nuACQit97HXbn734
        ZrYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqtFqFpPfXFlFcI9zbqrTRqclA2cZ+uD
        WfL4s0CHU/7Ok1W2W63bChbgN6E9AfbNAGzRWRrHijRdAlii1TUI7Z5lLRqwJLAdTwDV3TtSs9WsY72w
        nE9vJnbIoIBwcHrQBaooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooA+AK6Bfuj6Vz9dAv3R9K7cH1ExaKKK7xBRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9a/D
        j/knWhf9eq/zNdTXLfDf/knWhf8AXqv8zXU14s/iZQUUUVIBRRRQBk61/ZFiYdb1QqhsQ3lSMT8pbg4X
        ux6DjNc3btd2On+I/E01sbSTUlQWtqw+YYBSMsOzMWGR24ra8ReFY/EN3Y3L6nfWb2TFohblMbj/ABEM
        p5Hai28LsgVb3W9S1BUnjnVblo8BkJIHyoOMkH/gIoXmBm+I/DNk3gR7e5Eki6fYOUjEhCM4T7zAfeII
        yM+tRXniKPQvBGhwi5jtrm9toooppPuRDYCzn6DoO5xXXahZx6jp1zZSsyx3ETRMV6gMMHHvzRZWUVlp
        9tZpl47eJYlL4JIUYGffinff+u4dF/XY4PwNqmhWN14jg0++ilijkE4IbLSKsS7nJ75Ocn1rW0+20vTv
        D1hrut7Y54jJd+Y5PyvMSTgdzggDjPHFaknhmzki1aPzZlGqOGm2kDAChSF46EDn6mofEPhSLxBLYO2o
        3tn9hYvELYpjdjAJDKeQOlK4HJa1bXk3h/Xtdntms49UmtYltmGG8kSKpZx2Zgx47Cuh8QRJD4n8KGBQ
        rGaWA7Rj90YiSPpkLWhb+GQLC8stS1W/1W3uk2Mt2U+Uf7O1V/yKZYeFIrO7W6m1LUL2eKJord7mRW8h
        T124A54HJyeKegGHrVrZ31j/AMIVoFuDtdWuZRkraLu3Fix6yHsOvOTU3xH0a0uvDtxqM4kkmtlQQqZD
        sQ+YPm29N3OMmpLDwA+lwmGy8U63DGzmRlVofmYnJJPl5Jro9Y0qHW9Jm064eRIpdu5oyN3BB7j2pPYO
        pci/1Sf7op9Io2qFHYYpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
        AKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOd8W6ddarFptraXltbOt6kxM/JYICcKv8AEc4OPaqV
        u17JrN74V126XUba4svPWcIIX2FirIwXA+hGK3da0S21u3ijneWKSGQSwTwttkicdwazR4Ot/sOoRSaj
        fy3d/F5Mt88i+cE/ur8uFHXoO9AGc/k+JNc0u30iIDTdGn8yS8A+UsqlRFGe/Xk9OMV2tcvpHg+XR2tV
        h8R6u9tb4C2zmERkDsQIwcfjXUUxBRRRSGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
        UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
        UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFMlj82F49zLvUr
        uQ4Iz6H1p9FAHEeFdKtNH8c+I7SzRlj+zWjMXcszsfMyxJ5JNM123spdOn8F6DbLJcXBLXBOWS1Vm3NI
        7H+LngdfwrqYNHgt9av9USSXz72OON1JG1Qm7BHHX5jXPWfgB9PEws/FOtwCaRpZNrQ/MxOSSTHk099w
        80Pu9D1S68VyXVhrUFoIbGO2BWNZpVO4sSVbgA8fXFaXhTVrrVtMn+3CP7XaXUtpK8YwsjI2NwHbPpSa
        j4Wivb8X8Go31heGIQyzWrqDMo6bgQRn3xmtHStKtdG0+Oys0IiTJJY5ZmJyWY9yT3oEXaKKKQwooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigD4AroF+6PpXP10C/dH0rtwfUBaKKK7xBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
        UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9a/Dj/knWhf8AXqv8zXU1y3w4/wCSdaF/
        16r/ADNdTXiz+JjCiiipAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD
        4AroF+6PpXP1vr90fSu3B9QFoooruAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
        KKACiiigAooooAKKKKACiiigAooooAKKKKAPrb4b/wDJOtC/69V/ma6muW+G/wDyTrQv+vVf5muprxp/
        EwCiiipAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD4ArfX7o+lYFdA
        v3R9K7cH1AKKWiu4BKKWigBKKWigBKKWigBKKWigBKKWigBKKWigBKKWigBKKWigBKKWigBKKWigBKKW
        igBKKWigBKKWigBKKWigBKKWigBKKWigD61+G/8AyTrQv+vVf5muprlvhv8A8k60L/r1X+Zrqa8afxMA
        oooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
        KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+AK6Bfuj6Vz9b6/d
        H0rtwfUB1FJRXcMWikooAWikooAWikooAWikooAWikooAWikooAWikooAWikooAWikooAWikooAWikoo
        AWikooAWikooAWikooAWikooAWikooA+tvhv/wAk60L/AK9V/ma6muW+G/8AyTrQv+vVf5muprxp/ExB
        RRRUgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8AVvr90fSsCt9fuj
        6V24PqNC0UUV3AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFAH1t8N/wDknOhf9eq/zNdTXLfDf/knWhf9eq/zNdTXjT+JiCiiipAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
        gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD4ArfX7o+lYFb6/dH0rtwfUaFoooruG
        FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
        FFFFAH1t8N/+SdaF/wBeq/zNdTXLfDf/AJJ1oX/Xqv8AM11NeNP4mSFFFFSAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
        AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHwBW+v3R9KwK31+6PpXbg+o0LRRRXaUFFFFABRRRQA
        UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH1t8N/
        +SdaF/16r/M11Nct8N/+SdaF/wBeq/zNdTXjz+JkBRRRUgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQB8AVvL90fSsGt9fuj6V24PqNC0UUV2lBRRRQAUUUUAFFFFABRRRQAUUU
        UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9bfDf8A5JzoX/Xqv8zX
        U1y3w3/5JzoX/Xqv8zXU148/iZAUUUVIBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAfAFb6/dH0rArfX7o+ldmD6lRFoooruKCiiigAooooAKKKKACiiigAooooAKKKKACiiigA
        ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD62+G/wDyTnQv+vVf5muprlvhv/yTnQv+
        vVf5muprx5/EzMKKKKkAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
        iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPg
        Ct9fuj6VgVvL90fSuzB9SojqKKK7igooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooA+tvhv/wAk50L/AK9V/ma6muW+G/8AyTnQv+vVf5muprx5
        /EzNhRRRUgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
        RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8AVvr90fSsC
        t9fuj6V2YTqVEWiiiu4sKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo
        oooAKKKKACiiigAooooAKKKKAPrb4b/8k50L/r1X+Zrqa5b4b/8AJOdC/wCvVf5muprx5/EzJhRRRUgF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8AVvL90fSsGt5fuj6V2YTq
        XEdSUUV3FBS0lFABRRRQAtJRRQAUtJRQAUUUUALSUUUAFLSUUAFFFFAC0lFFABS0lFABRRRQAtJRRQAU
        tJRQAUUUUALSUUUAFLSUUAfW/wAN/wDknOhf9eq/zNdTXLfDf/knOhf9eq/zNdTXjz+JmTCiiipAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD4AreX7o+lYNby/dH0rswnUuA6
        ikortLFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFo
        pKKAFopKKAFopKKAFopKKAPrf4b/APJOdC/69V/ma6muW+G//JOdC/69V/ma6mvIn8TMnuFFFFSIKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
        ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD4AreX7o+lYNby/dH0rswnUuAt
        FFFdpYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
        BRRRQAUUUUAfW/w3/wCSc6F/16r/ADNdTXLfDf8A5JzoX/Xqv8zXU15E/iZk9woooqRBRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
        FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfAFby/dH0rBreX7o+ldmE6lwFooortNAoo
        ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
        ooA+t/hv/wAk50L/AK9V/ma6muW+G/8AyTnQv+vVf5mupryJ/EzF7hRRRUiCiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
        AooooAKKKKACiiigAooooAKKKKACiiigAooooA+AK3l+6PpWDW8v3R9K7MJ1NKYtFFFdpoFFFFABRRRQ
        AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH1v8A
        Df8A5JzoX/Xqv8zXU1y3w3/5JzoX/Xqv8zXU15E/iZg9woooqRBRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAfAFby/dH0rBreX7o+ldmE6mlMWiiiu00CiiigAooooAKKKKACii
        igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD63+G//JOdC/69
        V/ma6muW+G//ACTnQv8Ar1X+Zrqa8ifxMwe4UUUVIgooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
        KKKACiiigAooooAKKKKAPgCt5fuj6Vg1vL90fSuzCdTSmLRRRXYahRRRQAUUUUAFFFFABRRRQAUUUUAF
        FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9b/Df/AJJzoX/Xqv8AM11N
        ct8N/wDknOhf9eq/zNdTXkz+JnO9woooqRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
        FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
Download .txt
gitextract_m_q4b0tl/

├── .gitattributes
├── .gitignore
├── BlazorPro.BlazorSize.BlazorRepl/
│   ├── BlazorPro.BlazorSize.BlazorRepl.csproj
│   ├── BlazorReplMediaQueryService.cs
│   └── LICENSE.txt
├── BlazorPro.BlazorSize.Bunit/
│   ├── BlazorPro.BlazorSize.Bunit.csproj
│   ├── BunitExtensions.cs
│   └── FakeMediaQueryService.cs
├── BlazorSize/
│   ├── BlazorPro.BlazorSize.csproj
│   ├── Configuration/
│   │   ├── ResizeOptions.cs
│   │   └── ServiceCollectionExtensions.cs
│   ├── LICENSE.txt
│   ├── MediaQuery/
│   │   ├── Breakpoints.cs
│   │   ├── IMediaQueryService.cs
│   │   ├── MediaQuery.razor
│   │   ├── MediaQuery.razor.cs
│   │   ├── MediaQueryArgs.cs
│   │   ├── MediaQueryCache.cs
│   │   ├── MediaQueryList.razor
│   │   ├── MediaQueryList.razor.cs
│   │   └── MediaQueryService.cs
│   ├── Resize/
│   │   ├── BrowserWindowSize.cs
│   │   ├── IResizeListener.cs
│   │   └── ResizeListener.cs
│   ├── _Imports.razor
│   ├── jest.config.js
│   ├── package.json
│   ├── readme.md
│   ├── scripts/
│   │   ├── blazorSizeMedia.ts
│   │   ├── blazorSizeMediaModule.ts
│   │   ├── blazorSizeResize.ts
│   │   ├── blazorSizeResizeModule.ts
│   │   └── tests/
│   │       └── blazorSize.test.ts
│   ├── tsconfig.build.json
│   └── tsconfig.json
├── BlazorSize.UnitTesting/
│   ├── BlazorPro.BlazorSize.UnitTesting.csproj
│   ├── Bunit/
│   │   ├── BunitExtensions.cs
│   │   └── FakeMediaQueryService.cs
│   └── LICENSE.txt
├── BlazorSize.e2eTests/
│   ├── BlazorSize Adaptive Table and Template.imgstore
│   ├── BlazorSize Adaptive Table and Template.resx
│   ├── BlazorSize Adaptive Table and Template.tstest
│   ├── BlazorSize Adaptive Table and Template.tstest.cs
│   ├── BlazorSize Construct & Dispose.imgstore
│   ├── BlazorSize Construct & Dispose.resx
│   ├── BlazorSize Construct & Dispose.tstest
│   ├── BlazorSize Size Reverse.imgstore
│   ├── BlazorSize Size Reverse.resx
│   ├── BlazorSize Size Reverse.tstest
│   ├── BlazorSize Size Reverse.tstest.cs
│   ├── BlazorSize Size Tests.imgstore
│   ├── BlazorSize Size Tests.resx
│   ├── BlazorSize Size Tests.tstest
│   ├── BlazorSize Size Tests.tstest.cs
│   ├── BlazorSize Test Multicast Reverse.imgstore
│   ├── BlazorSize Test Multicast Reverse.resx
│   ├── BlazorSize Test Multicast Reverse.tstest
│   ├── BlazorSize Test Multicast Reverse.tstest.cs
│   ├── BlazorSize Test Multicast.imgstore
│   ├── BlazorSize Test Multicast.resx
│   ├── BlazorSize Test Multicast.tstest
│   ├── BlazorSize Test Multicast.tstest.cs
│   ├── BlazorSize.e2eTests.csproj
│   ├── Profiler Configurations/
│   │   ├── {1c6f74bd-1a14-4014-a8c9-02fdb3cb8302}.tsprofconfig
│   │   └── {d3bce0f5-b6f6-45aa-959a-5c1c1753902b}.tsprofconfig
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Settings.aiis
│   └── TestLists/
│       └── BlazorSize .NET Web App.aiilist
├── BlazorSize.sln
├── BlazorWebApp/
│   ├── BlazorWebApp/
│   │   ├── BlazorWebApp.csproj
│   │   ├── Components/
│   │   │   ├── App.razor
│   │   │   ├── Pages/
│   │   │   │   └── Error.razor
│   │   │   └── _Imports.razor
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── appsettings.Development.json
│   │   ├── appsettings.json
│   │   └── wwwroot/
│   │       └── app.css
│   └── BlazorWebApp.Client/
│       ├── BlazorWebApp.Client.csproj
│       ├── Layout/
│       │   ├── MainLayout.razor
│       │   ├── MainLayout.razor.css
│       │   ├── NavMenu.razor
│       │   └── NavMenu.razor.css
│       ├── Program.cs
│       ├── Routes.razor
│       ├── _Imports.razor
│       └── wwwroot/
│           ├── appsettings.Development.json
│           └── appsettings.json
├── PlaywrightTests/
│   ├── MediaQueryTests.cs
│   ├── PlaywrightTests.csproj
│   ├── ResizeTests.cs
│   └── TestHelpers.cs
├── TestComponents/
│   ├── Data/
│   │   └── IWeatherForecastService.cs
│   ├── Pages/
│   │   ├── Blank.razor
│   │   ├── Error.razor
│   │   ├── FetchData.razor
│   │   ├── Index.razor
│   │   ├── Multicast.razor
│   │   ├── NullableFlag.razor
│   │   ├── ScreenSize.razor
│   │   ├── ScreenSizeReporter.razor
│   │   └── Templates.razor
│   ├── TestComponents.csproj
│   ├── WeatherCards.razor
│   ├── WeatherForecast.cs
│   ├── WeatherGrid.razor
│   ├── _Imports.razor
│   └── wwwroot/
│       ├── fixture.html
│       └── fixture.js
├── bUnitCompatibilityTests/
│   ├── CompTest.cs
│   ├── Sample.razor
│   ├── _Imports.razor
│   └── bUnitCompatibilityTests.csproj
├── package.json
└── readme.md
Download .txt
SYMBOL INDEX (137 symbols across 34 files)

FILE: BlazorPro.BlazorSize.BlazorRepl/BlazorReplMediaQueryService.cs
  class BlazorReplMediaQueryService (line 11) | public class BlazorReplMediaQueryService : IAsyncDisposable, IMediaQuery...
    method BlazorReplMediaQueryService (line 15) | public BlazorReplMediaQueryService(IJSRuntime jsRuntime)
    method GetMediaQueryFromCache (line 26) | private MediaQueryCache? GetMediaQueryFromCache(string byMedia) => med...
    method AddQuery (line 28) | public void AddQuery(MediaQuery newMediaQuery)
    method RemoveQuery (line 42) | public async Task RemoveQuery(MediaQuery mediaQuery)
    method Initialize (line 64) | public async Task Initialize(MediaQuery mediaQuery)
    method CreateMediaQueryList (line 100) | public async Task CreateMediaQueryList(DotNetObjectReference<MediaQuer...
    method DisposeAsync (line 107) | public async ValueTask DisposeAsync()

FILE: BlazorPro.BlazorSize.Bunit/BunitExtensions.cs
  class BunitExtensions (line 6) | public static class BunitExtensions
    method AddBlazorSize (line 8) | public static FakeMediaQueryService AddBlazorSize(this TestContextBase...

FILE: BlazorPro.BlazorSize.Bunit/FakeMediaQueryService.cs
  class FakeMediaQueryService (line 9) | public class FakeMediaQueryService : IMediaQueryService
    method FakeMediaQueryService (line 16) | public FakeMediaQueryService(TestContextBase contextBase)
    method AddQuery (line 21) | public void AddQuery(MediaQuery newMediaQuery)
    method CreateMediaQueryList (line 39) | public Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList>...
    method Initialize (line 42) | public Task Initialize(MediaQuery mediaQuery)
    method RemoveQuery (line 45) | public Task RemoveQuery(MediaQuery mediaQuery)
    method SetActiveBreakPoint (line 59) | public void SetActiveBreakPoint(string breakpoint)
    method SetActiveMediaQuery (line 66) | public void SetActiveMediaQuery(MediaQueryArgs args)
    method GetMediaQueryFromCache (line 89) | private MediaQueryCache GetMediaQueryFromCache(string byMedia)

FILE: BlazorSize.UnitTesting/Bunit/BunitExtensions.cs
  class BunitExtensions (line 6) | public static class BunitExtensions
    method AddBlazorSize (line 8) | public static FakeMediaQueryService AddBlazorSize(this TestContextBase...

FILE: BlazorSize.UnitTesting/Bunit/FakeMediaQueryService.cs
  class FakeMediaQueryService (line 6) | public class FakeMediaQueryService : IMediaQueryService
    method FakeMediaQueryService (line 13) | public FakeMediaQueryService(TestContextBase contextBase)
    method AddQuery (line 18) | public void AddQuery(MediaQuery newMediaQuery)
    method CreateMediaQueryList (line 36) | public Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList>...
    method Initialize (line 39) | public Task Initialize(MediaQuery mediaQuery)
    method RemoveQuery (line 42) | public Task RemoveQuery(MediaQuery mediaQuery)
    method SetActiveBreakPoint (line 56) | public void SetActiveBreakPoint(string breakpoint)
    method SetActiveMediaQuery (line 63) | public void SetActiveMediaQuery(MediaQueryArgs args)
    method GetMediaQueryFromCache (line 85) | private MediaQueryCache? GetMediaQueryFromCache(string byMedia)

FILE: BlazorSize.e2eTests/BlazorSize Adaptive Table and Template.tstest.cs
  class BlazorSize_Adaptive_Table_and_Template (line 25) | public class BlazorSize_Adaptive_Table_and_Template : BaseWebAiiTest
    method OpenWin (line 52) | [CodedStep(@"Open Desktop")]
    method Resize_Mobile (line 59) | [CodedStep(@"Resize browser to small")]

FILE: BlazorSize.e2eTests/BlazorSize Size Reverse.tstest.cs
  class CanIResizeReverse (line 25) | public class CanIResizeReverse : BaseWebAiiTest
    method OpenWin_Mobile (line 52) | [CodedStep(@"Open Desktop")]
    method Resize_Tablet (line 58) | [CodedStep(@"Resize browser to tablet")]
    method Resize_Desktop (line 64) | [CodedStep(@"Resize browser to small")]

FILE: BlazorSize.e2eTests/BlazorSize Size Tests.tstest.cs
  class CanIResize (line 25) | public class CanIResize : BaseWebAiiTest
    method OpenWin (line 52) | [CodedStep(@"Open Desktop")]
    method Resize_Tablet (line 58) | [CodedStep(@"Resize browser to tablet")]
    method Resize_Mobile (line 64) | [CodedStep(@"Resize browser to small")]

FILE: BlazorSize.e2eTests/BlazorSize Test Multicast Reverse.tstest.cs
  class BlazorSize_Test_Consolidation_Reverse (line 25) | public class BlazorSize_Test_Consolidation_Reverse : BaseWebAiiTest
    method OpenWin_Mobile (line 52) | [CodedStep(@"Open Desktop")]
    method Resize_Tablet (line 59) | [CodedStep(@"Resize browser to tablet")]
    method Resize_Desktop (line 66) | [CodedStep(@"Resize browser to small")]

FILE: BlazorSize.e2eTests/BlazorSize Test Multicast.tstest.cs
  class BlazorSize_Test_Consolidation (line 25) | public class BlazorSize_Test_Consolidation : BaseWebAiiTest
    method OpenWin (line 52) | [CodedStep(@"Open Desktop")]
    method Resize_Tablet (line 59) | [CodedStep(@"Resize browser to tablet")]
    method Resize_Mobile (line 66) | [CodedStep(@"Resize browser to small")]

FILE: BlazorSize/Configuration/ResizeOptions.cs
  class ResizeOptions (line 3) | public class ResizeOptions

FILE: BlazorSize/Configuration/ServiceCollectionExtensions.cs
  class ServiceCollectionExtensions (line 6) | public static class ServiceCollectionExtensions
    method AddResizeListener (line 13) | public static IServiceCollection AddResizeListener(this IServiceCollec...
    method AddMediaQueryService (line 28) | public static IServiceCollection AddMediaQueryService(this IServiceCol...

FILE: BlazorSize/MediaQuery/Breakpoints.cs
  class Breakpoints (line 3) | public static class Breakpoints
    method Between (line 57) | public static string Between(string max, string min) => $"{max} and {m...

FILE: BlazorSize/MediaQuery/IMediaQueryService.cs
  type IMediaQueryService (line 7) | public interface IMediaQueryService
    method AddQuery (line 11) | void AddQuery(MediaQuery newMediaQuery);
    method CreateMediaQueryList (line 12) | Task CreateMediaQueryList(DotNetObjectReference<MediaQueryList> dotNet...
    method Initialize (line 14) | Task Initialize(MediaQuery mediaQuery);
    method RemoveQuery (line 15) | Task RemoveQuery(MediaQuery mediaQuery);

FILE: BlazorSize/MediaQuery/MediaQuery.razor.cs
  class MediaQuery (line 8) | public partial class MediaQuery : IAsyncDisposable
    method OnInitialized (line 50) | protected override void OnInitialized()
    method OnAfterRenderAsync (line 62) | protected override async Task OnAfterRenderAsync(bool firstRender)
    method MediaQueryChanged (line 75) | public void MediaQueryChanged(MediaQueryArgs args)
    method DisposeAsync (line 85) | public async ValueTask DisposeAsync()

FILE: BlazorSize/MediaQuery/MediaQueryArgs.cs
  class MediaQueryArgs (line 3) | public class MediaQueryArgs

FILE: BlazorSize/MediaQuery/MediaQueryCache.cs
  class MediaQueryCache (line 4) | public class MediaQueryCache

FILE: BlazorSize/MediaQuery/MediaQueryList.razor.cs
  class MediaQueryList (line 10) | public partial class MediaQueryList
    method OnAfterRenderAsync (line 20) | protected override async Task OnAfterRenderAsync(bool firstRender)
    method AddQuery (line 30) | public void AddQuery(MediaQuery newMediaQuery) => MqService.AddQuery(n...
    method RemoveQuery (line 31) | public async Task RemoveQuery(MediaQuery mediaQuery) => await MqServic...
    method Initialize (line 32) | public async Task Initialize(MediaQuery mediaQuery) => await MqService...
    method MediaQueryChanged (line 37) | [JSInvokable(nameof(MediaQueryList.MediaQueryChanged))]

FILE: BlazorSize/MediaQuery/MediaQueryService.cs
  class MediaQueryService (line 9) | public class MediaQueryService : IAsyncDisposable, IMediaQueryService
    method MediaQueryService (line 13) | public MediaQueryService(IJSRuntime jsRuntime)
    method GetMediaQueryFromCache (line 24) | private MediaQueryCache? GetMediaQueryFromCache(string byMedia) => med...
    method AddQuery (line 26) | public void AddQuery(MediaQuery newMediaQuery)
    method RemoveQuery (line 40) | public async Task RemoveQuery(MediaQuery mediaQuery)
    method Initialize (line 63) | public async Task Initialize(MediaQuery mediaQuery)
    method CreateMediaQueryList (line 99) | public async Task CreateMediaQueryList(DotNetObjectReference<MediaQuer...
    method DisposeAsync (line 106) | public async ValueTask DisposeAsync()

FILE: BlazorSize/Resize/BrowserWindowSize.cs
  class BrowserWindowSize (line 5) | public class BrowserWindowSize : EventArgs

FILE: BlazorSize/Resize/IResizeListener.cs
  type IResizeListener (line 6) | public interface IResizeListener
    method GetBrowserWindowSize (line 10) | ValueTask<BrowserWindowSize> GetBrowserWindowSize();
    method MatchMedia (line 11) | ValueTask<bool> MatchMedia(string mediaQuery);

FILE: BlazorSize/Resize/ResizeListener.cs
  class ResizeListener (line 8) | public class ResizeListener : IResizeListener, IAsyncDisposable
    method ResizeListener (line 15) | public ResizeListener(IJSRuntime jsRuntime, IOptions<ResizeOptions>? o...
    method Unsubscribe (line 33) | private void Unsubscribe(EventHandler<BrowserWindowSize>? value)
    method Subscribe (line 42) | private void Subscribe(EventHandler<BrowserWindowSize>? value)
    method Start (line 51) | private async ValueTask Start()
    method Cancel (line 57) | private async ValueTask Cancel()
    method MatchMedia (line 68) | public async ValueTask<bool> MatchMedia(string mediaQuery)
    method GetBrowserWindowSize (line 78) | public async ValueTask<BrowserWindowSize> GetBrowserWindowSize()
    method RaiseOnResized (line 88) | [JSInvokable]
    method Dispose (line 92) | protected virtual void Dispose(bool disposing)
    method DisposeAsync (line 104) | public async ValueTask DisposeAsync()

FILE: BlazorSize/scripts/blazorSizeMedia.ts
  class MediaQueryListItem (line 1) | class MediaQueryListItem {
    method constructor (line 2) | constructor(id: number | string) {
  type MediaQueryArgs (line 12) | interface MediaQueryArgs {
  class BlazorSizeMedia (line 17) | class BlazorSizeMedia {
    method getMediaQueryArgs (line 29) | getMediaQueryArgs(mediaQuery: string) {
    method addMediaQueryToList (line 34) | addMediaQueryToList(dotnetMql: any, mediaQuery: string) {
    method callbackReference (line 43) | callbackReference(dotnet: any) {
    method addMediaQueryList (line 50) | addMediaQueryList(dotnet: any) {
    method removeMediaQuery (line 56) | removeMediaQuery(dotnetMql: any, mediaQuery: string) {
    method removeMediaQueryList (line 64) | removeMediaQueryList(dotnetMql: any) {

FILE: BlazorSize/scripts/blazorSizeMediaModule.ts
  function addMediaQueryList (line 9) | function addMediaQueryList(dotnet: any) {
  function removeMediaQueryList (line 14) | function removeMediaQueryList(dotnetMql: any) {
  function addMediaQueryToList (line 19) | function addMediaQueryToList(dotnetMql: any, mediaQuery: string) {
  function removeMediaQuery (line 24) | function removeMediaQuery(dotnetMql: any, mediaQuery: string) {
  function getMediaQueryArgs (line 29) | function getMediaQueryArgs(mediaQuery: string) {

FILE: BlazorSize/scripts/blazorSizeResize.ts
  class ResizeOptions (line 1) | class ResizeOptions {
  class ResizeListener (line 7) | class ResizeListener {
    method listenForResize (line 23) | public listenForResize(dotnetRef: any, options: ResizeOptions) {
    method cancelListener (line 41) | public cancelListener() {
    method matchMedia (line 45) | public matchMedia(query: string) {
    method getBrowserWindowSize (line 51) | public getBrowserWindowSize() {

FILE: BlazorSize/scripts/blazorSizeResizeModule.ts
  function listenForResize (line 5) | function listenForResize(dotnetRef: any, options: ResizeOptions) {
  function cancelListener (line 9) | function cancelListener() {
  function matchMedia (line 13) | function matchMedia(query: string) {
  function getBrowserWindowSize (line 17) | function getBrowserWindowSize() {

FILE: BlazorSize/scripts/tests/blazorSize.test.ts
  method invokeMethodAsync (line 20) | invokeMethodAsync(method: string, callback: any) { }

FILE: PlaywrightTests/MediaQueryTests.cs
  class MediaQueryTests (line 5) | [Parallelizable(ParallelScope.Self)]
    method MyNewPlaywrightTest (line 9) | [Test]

FILE: PlaywrightTests/ResizeTests.cs
  class Tests (line 5) | [Parallelizable(ParallelScope.Self)]
    method IndexPageLoadsWithBlazorSizeAndDisplaysInitialPageSizeOf1920By1080 (line 9) | [Test]

FILE: PlaywrightTests/TestHelpers.cs
  class TestHelpers (line 9) | internal static class TestHelpers
    method GetUrl (line 12) | public static string GetUrl(string route) => string.Format(SUTUrlTempl...

FILE: TestComponents/Data/IWeatherForecastService.cs
  type IWeatherForecastService (line 7) | public interface IWeatherForecastService
    method GetForecastAsync (line 9) | Task<WeatherForecast[]> GetForecastAsync(DateTime startDate);
  class WeatherForecastService (line 12) | public class WeatherForecastService : IWeatherForecastService
    method GetForecastAsync (line 19) | public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)

FILE: TestComponents/WeatherForecast.cs
  class WeatherForecast (line 5) | public class WeatherForecast

FILE: TestComponents/wwwroot/fixture.js
  function openWin (line 3) | function openWin(page, w, h) {
  function resizeWin (line 7) | function resizeWin(w, h) {

FILE: bUnitCompatibilityTests/CompTest.cs
  class CompTest (line 7) | public class CompTest
    method Shows_Correct_Content_Based_On_MediaQuery (line 9) | [Fact]
Condensed preview — 115 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,689K chars).
[
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".gitignore",
    "chars": 5999,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "BlazorPro.BlazorSize.BlazorRepl/BlazorPro.BlazorSize.BlazorRepl.csproj",
    "chars": 1451,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Version>6.1.0</Version>\n    <TargetFramework>net9.0</TargetFr"
  },
  {
    "path": "BlazorPro.BlazorSize.BlazorRepl/BlazorReplMediaQueryService.cs",
    "chars": 4596,
    "preview": "namespace BlazorPro.BlazorSize\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    usi"
  },
  {
    "path": "BlazorPro.BlazorSize.BlazorRepl/LICENSE.txt",
    "chars": 549,
    "preview": "Copyright 2022 Ed Charbeneau\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file"
  },
  {
    "path": "BlazorPro.BlazorSize.Bunit/BlazorPro.BlazorSize.Bunit.csproj",
    "chars": 328,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n "
  },
  {
    "path": "BlazorPro.BlazorSize.Bunit/BunitExtensions.cs",
    "chars": 559,
    "preview": "using BlazorPro.BlazorSize;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Bunit\n{\n    public static class "
  },
  {
    "path": "BlazorPro.BlazorSize.Bunit/FakeMediaQueryService.cs",
    "chars": 2885,
    "preview": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing BlazorPro.BlazorSize;\nusing Bunit;\nusing Microsof"
  },
  {
    "path": "BlazorSize/BlazorPro.BlazorSize.csproj",
    "chars": 3965,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net9.0</TargetFrameworks>\n    <Generat"
  },
  {
    "path": "BlazorSize/Configuration/ResizeOptions.cs",
    "chars": 725,
    "preview": "namespace BlazorPro.BlazorSize\n{\n    public class ResizeOptions\n    {\n        /// <summary>\n        /// Rate in millise"
  },
  {
    "path": "BlazorSize/Configuration/ServiceCollectionExtensions.cs",
    "chars": 1217,
    "preview": "using Microsoft.Extensions.DependencyInjection;\nusing System;\n\nnamespace BlazorPro.BlazorSize\n{\n    public static class"
  },
  {
    "path": "BlazorSize/LICENSE.txt",
    "chars": 549,
    "preview": "Copyright 2019 Ed Charbeneau\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file"
  },
  {
    "path": "BlazorSize/MediaQuery/Breakpoints.cs",
    "chars": 2403,
    "preview": "namespace BlazorPro.BlazorSize\n{\n    public static class Breakpoints\n    {\n        /// @media(min-width: 576px) { ... }"
  },
  {
    "path": "BlazorSize/MediaQuery/IMediaQueryService.cs",
    "chars": 476,
    "preview": "using Microsoft.JSInterop;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace BlazorPro.BlazorS"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQuery.razor",
    "chars": 101,
    "preview": "@namespace BlazorPro.BlazorSize\n@if (InternalMedia.Matches)\n{\n    @Matched\n}\nelse\n{\n    @Unmatched\n}"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQuery.razor.cs",
    "chars": 3447,
    "preview": "using Microsoft.AspNetCore.Components;\nusing Microsoft.JSInterop;\nusing System;\nusing System.Threading.Tasks;\n\nnamespac"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQueryArgs.cs",
    "chars": 165,
    "preview": "namespace BlazorPro.BlazorSize\n{\n    public class MediaQueryArgs\n    {\n        public string? Media { get; set; }\n     "
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQueryCache.cs",
    "chars": 999,
    "preview": "using System.Collections.Generic;\nnamespace BlazorPro.BlazorSize\n{\n    public class MediaQueryCache\n    {\n        /// <"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQueryList.razor",
    "chars": 98,
    "preview": "@namespace BlazorPro.BlazorSize\n<CascadingValue Value=\"this\">\n    @ChildContent\n</CascadingValue>"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQueryList.razor.cs",
    "chars": 2006,
    "preview": "using Microsoft.AspNetCore.Components;\nusing Microsoft.JSInterop;\nusing System;\nusing System.Collections.Generic;\nusing"
  },
  {
    "path": "BlazorSize/MediaQuery/MediaQueryService.cs",
    "chars": 4947,
    "preview": "using Microsoft.JSInterop;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Ta"
  },
  {
    "path": "BlazorSize/Resize/BrowserWindowSize.cs",
    "chars": 189,
    "preview": "using System;\n\nnamespace BlazorPro.BlazorSize\n{\n    public class BrowserWindowSize : EventArgs\n    {\n        public int"
  },
  {
    "path": "BlazorSize/Resize/IResizeListener.cs",
    "chars": 303,
    "preview": "using System;\nusing System.Threading.Tasks;\n\nnamespace BlazorPro.BlazorSize\n{\n    public interface IResizeListener\n    "
  },
  {
    "path": "BlazorSize/Resize/ResizeListener.cs",
    "chars": 3940,
    "preview": "using Microsoft.Extensions.Options;\nusing Microsoft.JSInterop;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace B"
  },
  {
    "path": "BlazorSize/_Imports.razor",
    "chars": 44,
    "preview": "@using Microsoft.AspNetCore.Components.Web\n"
  },
  {
    "path": "BlazorSize/jest.config.js",
    "chars": 118,
    "preview": "module.exports = {\n    preset: 'ts-jest',\n    testPathIgnorePatterns: [\".d.ts\", \".js\"],\n  testEnvironment: 'jsdom',\n};"
  },
  {
    "path": "BlazorSize/package.json",
    "chars": 683,
    "preview": "{\n  \"name\": \"blazorsize\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"private\": true,\n  \"scripts\": {\n    \"test\": \"tsc "
  },
  {
    "path": "BlazorSize/readme.md",
    "chars": 1490,
    "preview": "BlazorSize is a JavaScript interop library for Blazor that is used to detect the Browser's current size, change in size,"
  },
  {
    "path": "BlazorSize/scripts/blazorSizeMedia.ts",
    "chars": 2910,
    "preview": "class MediaQueryListItem {\n    constructor(id: number | string) {\n        this.id = id;\n        this.dotnetCallback = ("
  },
  {
    "path": "BlazorSize/scripts/blazorSizeMediaModule.ts",
    "chars": 1063,
    "preview": "import { BlazorSizeMedia } from './blazorSizeMedia.js';\n\nlet instance = new BlazorSizeMedia();\n\n// Uncomment to enable "
  },
  {
    "path": "BlazorSize/scripts/blazorSizeResize.ts",
    "chars": 1769,
    "preview": "export class ResizeOptions {\n    reportRate: number = 300;\n    enableLogging: boolean = false;\n    suppressInitEvent: b"
  },
  {
    "path": "BlazorSize/scripts/blazorSizeResizeModule.ts",
    "chars": 479,
    "preview": "import { ResizeListener, ResizeOptions } from './blazorSizeResize.js';\n\nlet instance = new ResizeListener();\n\nexport fu"
  },
  {
    "path": "BlazorSize/scripts/tests/blazorSize.test.ts",
    "chars": 2244,
    "preview": "import { BlazorSizeMedia } from '../blazorSizeMedia';\nimport MatchMediaMock from 'jest-matchmedia-mock';\nimport MatchMe"
  },
  {
    "path": "BlazorSize/tsconfig.build.json",
    "chars": 330,
    "preview": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./wwwroot\",\n    //\"noImplicitAny\": false,\n    //\"noEmitOnError\": true,\n    //\"re"
  },
  {
    "path": "BlazorSize/tsconfig.json",
    "chars": 5861,
    "preview": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./scripts/tests\",\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    /* "
  },
  {
    "path": "BlazorSize.UnitTesting/BlazorPro.BlazorSize.UnitTesting.csproj",
    "chars": 1466,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <ImplicitUsings>"
  },
  {
    "path": "BlazorSize.UnitTesting/Bunit/BunitExtensions.cs",
    "chars": 559,
    "preview": "using BlazorPro.BlazorSize;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Bunit\n{\n    public static class "
  },
  {
    "path": "BlazorSize.UnitTesting/Bunit/FakeMediaQueryService.cs",
    "chars": 2799,
    "preview": "using BlazorPro.BlazorSize;\nusing Microsoft.JSInterop;\n\nnamespace Bunit\n{\n    public class FakeMediaQueryService : IMed"
  },
  {
    "path": "BlazorSize.UnitTesting/LICENSE.txt",
    "chars": 549,
    "preview": "Copyright 2019 Ed Charbeneau\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Adaptive Table and Template.resx",
    "chars": 911386,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Adaptive Table and Template.tstest",
    "chars": 57870,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Adaptive Table and Template.tstest.cs",
    "chars": 1821,
    "preview": "using Telerik.TestStudio.Translators.Common;\nusing Telerik.TestingFramework.Controls.TelerikUI.Blazor;\nusing Telerik.Tes"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Construct & Dispose.resx",
    "chars": 152353,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Construct & Dispose.tstest",
    "chars": 27185,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Reverse.resx",
    "chars": 757468,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Reverse.tstest",
    "chars": 70692,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Reverse.tstest.cs",
    "chars": 1945,
    "preview": "using Telerik.TestStudio.Translators.Common;\nusing Telerik.TestingFramework.Controls.TelerikUI.Blazor;\nusing Telerik.Tes"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Tests.resx",
    "chars": 757732,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Tests.tstest",
    "chars": 73610,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Size Tests.tstest.cs",
    "chars": 1930,
    "preview": "using Telerik.TestStudio.Translators.Common;\nusing Telerik.TestingFramework.Controls.TelerikUI.Blazor;\nusing Telerik.Tes"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast Reverse.resx",
    "chars": 755006,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast Reverse.tstest",
    "chars": 72275,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast Reverse.tstest.cs",
    "chars": 2037,
    "preview": "using Telerik.TestStudio.Translators.Common;\nusing Telerik.TestingFramework.Controls.TelerikUI.Blazor;\nusing Telerik.Tes"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast.resx",
    "chars": 754998,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast.tstest",
    "chars": 72233,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.ProjectModel.Test\",\n  \"__value\": {\n    \"DomStatesCounter\": {},\n    \"AppStartSkip\""
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize Test Multicast.tstest.cs",
    "chars": 2021,
    "preview": "using Telerik.TestStudio.Translators.Common;\nusing Telerik.TestingFramework.Controls.TelerikUI.Blazor;\nusing Telerik.Tes"
  },
  {
    "path": "BlazorSize.e2eTests/BlazorSize.e2eTests.csproj",
    "chars": 4810,
    "preview": "<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Prop"
  },
  {
    "path": "BlazorSize.e2eTests/Profiler Configurations/{1c6f74bd-1a14-4014-a8c9-02fdb3cb8302}.tsprofconfig",
    "chars": 918,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.Execution.Profiler.ProfilerMetadataConfigurationSet\",\n  \"__value\": {\n    \"_bFirst"
  },
  {
    "path": "BlazorSize.e2eTests/Profiler Configurations/{d3bce0f5-b6f6-45aa-959a-5c1c1753902b}.tsprofconfig",
    "chars": 918,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.Execution.Profiler.ProfilerMetadataConfigurationSet\",\n  \"__value\": {\n    \"_bFirst"
  },
  {
    "path": "BlazorSize.e2eTests/Properties/AssemblyInfo.cs",
    "chars": 1371,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "BlazorSize.e2eTests/Settings.aiis",
    "chars": 10140,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.UserSettings\",\n  \"__value\": {\n    \"UseHttpProxy\": false,\n    \"RecordjQueryInDescr"
  },
  {
    "path": "BlazorSize.e2eTests/TestLists/BlazorSize .NET Web App.aiilist",
    "chars": 3788,
    "preview": "{\n  \"__type\": \"ArtOfTest.WebAii.Design.Execution.TestList\",\n  \"__value\": {\n    \"TestListId\": \"f9449235-bf5e-4504-8109-14"
  },
  {
    "path": "BlazorSize.sln",
    "chars": 5746,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.3152"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/BlazorWebApp.csproj",
    "chars": 427,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <Nullable>ena"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/Components/App.razor",
    "chars": 581,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/Components/Pages/Error.razor",
    "chars": 1177,
    "preview": "@page \"/Error\"\n@using System.Diagnostics\n\n<PageTitle>Error</PageTitle>\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\""
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/Components/_Imports.razor",
    "chars": 411,
    "preview": "@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNet"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/Program.cs",
    "chars": 1171,
    "preview": "using BlazorWebApp.Client;\nusing BlazorWebApp.Components;\nusing BlazorPro.BlazorSize;\nusing TestComponents;\n\nvar builder"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/Properties/launchSettings.json",
    "chars": 1423,
    "preview": "{\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n    \"iisSettings\": {\n      \"windowsAuthentication\": fa"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/appsettings.Development.json",
    "chars": 119,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/appsettings.json",
    "chars": 142,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  "
  },
  {
    "path": "BlazorWebApp/BlazorWebApp/wwwroot/app.css",
    "chars": 2540,
    "preview": "html, body {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\na, .btn-link {\n    color: #006bb7;\n}\n\n."
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/BlazorWebApp.Client.csproj",
    "chars": 734,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n   "
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Layout/MainLayout.razor",
    "chars": 497,
    "preview": "@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <div class=\"sidebar\">\n        <NavMenu />\n    </div>\n\n    <main>\n"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Layout/MainLayout.razor.css",
    "chars": 1784,
    "preview": ".page {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\nmain {\n    flex: 1;\n}\n\n.sidebar {\n    "
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Layout/NavMenu.razor",
    "chars": 1659,
    "preview": "<div class=\"top-row ps-3 navbar navbar-dark\">\n    <div class=\"container-fluid\">\n        <a class=\"navbar-brand\" href=\"\""
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Layout/NavMenu.razor.css",
    "chars": 3309,
    "preview": ".navbar-toggler {\n    appearance: none;\n    cursor: pointer;\n    width: 3.5rem;\n    height: 2.5rem;\n    color: white;\n  "
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Program.cs",
    "chars": 360,
    "preview": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\nusing BlazorPro.BlazorSize;\nusing TestComponents;\n\nvar builde"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/Routes.razor",
    "chars": 389,
    "preview": "<MediaQueryList>\n    <Router AppAssembly=\"typeof(Program).Assembly\" AdditionalAssemblies=\"new[] { typeof(TestComponents"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/_Imports.razor",
    "chars": 387,
    "preview": "@using System.Net.Http\n@using System.Net.Http.Json\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNet"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/wwwroot/appsettings.Development.json",
    "chars": 119,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "BlazorWebApp/BlazorWebApp.Client/wwwroot/appsettings.json",
    "chars": 119,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "PlaywrightTests/MediaQueryTests.cs",
    "chars": 834,
    "preview": "using Microsoft.Playwright;\n\nnamespace PlaywrightTests;\n\n[Parallelizable(ParallelScope.Self)]\n[TestFixture]\npublic clas"
  },
  {
    "path": "PlaywrightTests/PlaywrightTests.csproj",
    "chars": 1116,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <LangVersion>lat"
  },
  {
    "path": "PlaywrightTests/ResizeTests.cs",
    "chars": 1294,
    "preview": "using Microsoft.Playwright;\n\nnamespace PlaywrightTests;\n\n[Parallelizable(ParallelScope.Self)]\n[TestFixture]\npublic clas"
  },
  {
    "path": "PlaywrightTests/TestHelpers.cs",
    "chars": 373,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "TestComponents/Data/IWeatherForecastService.cs",
    "chars": 921,
    "preview": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace TestComponents\n{\n    public interface IWeathe"
  },
  {
    "path": "TestComponents/Pages/Blank.razor",
    "chars": 43,
    "preview": "@page \"/blank\"\n<h3>Blank</h3>\n\n@code {\n\n}\n"
  },
  {
    "path": "TestComponents/Pages/Error.razor",
    "chars": 697,
    "preview": "@page \"/error\"\n\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your re"
  },
  {
    "path": "TestComponents/Pages/FetchData.razor",
    "chars": 733,
    "preview": "@inject IWeatherForecastService Forecasts\n@using TestComponents\n@page \"/fetchdata\"\n\n<h1>Weather forecast</h1>\n\n<p>This "
  },
  {
    "path": "TestComponents/Pages/Index.razor",
    "chars": 828,
    "preview": "@implements IDisposable\n@inject IResizeListener listener\n@page \"/\"\n\n<h3>Height: <span title=\"browserHeight\">@browser.He"
  },
  {
    "path": "TestComponents/Pages/Multicast.razor",
    "chars": 255,
    "preview": "@page \"/multicast\"\n<h3>Multicast</h3>\n<div class=\"row\">\n    <div class=\"col\">\n        <ScreenSizeReporter />\n    </div>"
  },
  {
    "path": "TestComponents/Pages/NullableFlag.razor",
    "chars": 351,
    "preview": "@page \"/nullable\"\n@if (IsSmall.HasValue)\n{\n    if (IsSmall.Value)\n    {\n        <h1>Small</h1>\n    }\n    else\n    {\n   "
  },
  {
    "path": "TestComponents/Pages/ScreenSize.razor",
    "chars": 48,
    "preview": "@page \"/size\"\n<ScreenSizeReporter/>\n\n@code {\n\n}"
  },
  {
    "path": "TestComponents/Pages/ScreenSizeReporter.razor",
    "chars": 599,
    "preview": "<h5>Device Size</h5>\n<ul class=\"list-group\">\n    <li class=\"list-group-item @Active(IsLarge)\">Large</li>\n    <li class="
  },
  {
    "path": "TestComponents/Pages/Templates.razor",
    "chars": 592,
    "preview": "@inject IWeatherForecastService Forecasts\n\n@using TestComponents\n@page \"/templates\"\n\n<h1>Weather forecast</h1>\n\n<p>This"
  },
  {
    "path": "TestComponents/TestComponents.csproj",
    "chars": 486,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n  </PropertyGr"
  },
  {
    "path": "TestComponents/WeatherCards.razor",
    "chars": 784,
    "preview": "@if (Data == null)\n{\n    <p><em>Loading...</em></p>\n}\nelse\n{\n    foreach (var t in Data.Select((x,i) => new { Forecast "
  },
  {
    "path": "TestComponents/WeatherForecast.cs",
    "chars": 329,
    "preview": "using System;\nusing System.Collections.Generic;\nnamespace TestComponents\n{\n    public class WeatherForecast\n    {\n     "
  },
  {
    "path": "TestComponents/WeatherGrid.razor",
    "chars": 777,
    "preview": "@if (Data == null)\n{\n    <p><em>Loading...</em></p>\n}\nelse\n{\n    <table id=\"table_0\" class=\"table\" data-testid=\"weather"
  },
  {
    "path": "TestComponents/_Imports.razor",
    "chars": 71,
    "preview": "@using Microsoft.AspNetCore.Components.Web\n@using BlazorPro.BlazorSize"
  },
  {
    "path": "TestComponents/wwwroot/fixture.html",
    "chars": 186,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title></title>\n    <script src=\"fixture.js\"></script>\n<"
  },
  {
    "path": "TestComponents/wwwroot/fixture.js",
    "chars": 178,
    "preview": "var myWindow;\n\nfunction openWin(page, w, h) {\n    myWindow = window.open(`/${page}`, \"\", `width=${w}, height=${h}`);\n}\n"
  },
  {
    "path": "bUnitCompatibilityTests/CompTest.cs",
    "chars": 744,
    "preview": "using BlazorPro.BlazorSize;\nusing Bunit;\nusing Xunit;\n\nnamespace bUnitCompatibilityTests\n{\n    public class CompTest\n  "
  },
  {
    "path": "bUnitCompatibilityTests/Sample.razor",
    "chars": 187,
    "preview": "@using BlazorPro.BlazorSize\n<MediaQuery Media=\"@Breakpoints.SmallDown\">\n    <Matched>\n        MATCHES\n    </Matched>\n  "
  },
  {
    "path": "bUnitCompatibilityTests/_Imports.razor",
    "chars": 237,
    "preview": "@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.JSInterop\n@usi"
  },
  {
    "path": "bUnitCompatibilityTests/bUnitCompatibilityTests.csproj",
    "chars": 1090,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n\n    <IsPackab"
  },
  {
    "path": "package.json",
    "chars": 65,
    "preview": "{\n  \"devDependencies\": {\n    \"@playwright/test\": \"^1.47.1\"\n  }\n}\n"
  },
  {
    "path": "readme.md",
    "chars": 1490,
    "preview": "BlazorSize is a JavaScript interop library for Blazor that is used to detect the Browser's current size, change in size,"
  }
]

// ... and 6 more files (download for full content)

About this extraction

This page contains the full source code of the EdCharbeneau/BlazorSize GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 115 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 137 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!