using System;
using System.Buffers;
using System.Buffers.Binary;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Numerics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.Unicode;
using System.Threading;
using FxResources.System.Text.Encodings.Web;
using Microsoft.CodeAnalysis;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: AssemblyMetadata("PreferInbox", "True")]
[assembly: AssemblyDefaultAlias("System.Text.Encodings.Web")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: CLSCompliant(true)]
[assembly: AssemblyMetadata("IsTrimmable", "True")]
[assembly: AssemblyMetadata("IsAotCompatible", "True")]
[assembly: DefaultDllImportSearchPaths(DllImportSearchPath.System32 | DllImportSearchPath.AssemblyDirectory)]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyDescription("Provides types for encoding and escaping strings for use in JavaScript, HyperText Markup Language (HTML), and uniform resource locators (URL).\r\n\r\nCommonly Used Types:\r\nSystem.Text.Encodings.Web.HtmlEncoder\r\nSystem.Text.Encodings.Web.UrlEncoder\r\nSystem.Text.Encodings.Web.JavaScriptEncoder")]
[assembly: AssemblyFileVersion("10.0.726.21808")]
[assembly: AssemblyInformationalVersion("10.0.7+b16286c2284fecf303dbc12a0bb152476d662e44")]
[assembly: AssemblyProduct("Microsoft® .NET")]
[assembly: AssemblyTitle("System.Text.Encodings.Web")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/dotnet/dotnet")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("10.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: System.Runtime.CompilerServices.NullablePublicOnly(false)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class IsReadOnlyAttribute : Attribute
{
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class IsByRefLikeAttribute : Attribute
{
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class NullablePublicOnlyAttribute : Attribute
{
public readonly bool IncludesInternals;
public NullablePublicOnlyAttribute(bool P_0)
{
IncludesInternals = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NativeIntegerAttribute : Attribute
{
public readonly bool[] TransformFlags;
public NativeIntegerAttribute()
{
TransformFlags = new bool[1] { true };
}
public NativeIntegerAttribute(bool[] P_0)
{
TransformFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
internal sealed class ScopedRefAttribute : Attribute
{
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class ExtensionMarkerAttribute : Attribute
{
public ExtensionMarkerAttribute(string name)
{
}
}
}
namespace FxResources.System.Text.Encodings.Web
{
internal static class SR
{
}
}
namespace System
{
internal static class HexConverter
{
public enum Casing : uint
{
Upper = 0u,
Lower = 8224u
}
private ref struct SpanCasingPair
{
public ReadOnlySpan<byte> Bytes { get; set; }
public Casing Casing { get; set; }
}
public static ReadOnlySpan<byte> CharToHexLookup => new byte[256]
{
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 255, 255,
255, 255, 255, 255, 255, 10, 11, 12, 13, 14,
15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 10, 11, 12,
13, 14, 15, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255
};
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void ToBytesBuffer(byte value, Span<byte> buffer, int startingIndex = 0, Casing casing = Casing.Upper)
{
uint num = (uint)(((value & 0xF0) << 4) + (value & 0xF) - 35209);
uint num2 = ((((0 - num) & 0x7070) >> 4) + num + 47545) | (uint)casing;
buffer[startingIndex + 1] = (byte)num2;
buffer[startingIndex] = (byte)(num2 >> 8);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void ToCharsBuffer(byte value, Span<char> buffer, int startingIndex = 0, Casing casing = Casing.Upper)
{
uint num = (uint)(((value & 0xF0) << 4) + (value & 0xF) - 35209);
uint num2 = ((((0 - num) & 0x7070) >> 4) + num + 47545) | (uint)casing;
buffer[startingIndex + 1] = (char)(num2 & 0xFFu);
buffer[startingIndex] = (char)(num2 >> 8);
}
public static void EncodeToUtf8(ReadOnlySpan<byte> source, Span<byte> utf8Destination, Casing casing = Casing.Upper)
{
for (int i = 0; i < source.Length; i++)
{
ToBytesBuffer(source[i], utf8Destination, i * 2, casing);
}
}
public static void EncodeToUtf16(ReadOnlySpan<byte> source, Span<char> destination, Casing casing = Casing.Upper)
{
for (int i = 0; i < source.Length; i++)
{
ToCharsBuffer(source[i], destination, i * 2, casing);
}
}
public static string ToString(ReadOnlySpan<byte> bytes, Casing casing = Casing.Upper)
{
Span<char> span = ((bytes.Length <= 16) ? stackalloc char[bytes.Length * 2] : new char[bytes.Length * 2].AsSpan());
Span<char> buffer = span;
int num = 0;
ReadOnlySpan<byte> readOnlySpan = bytes;
for (int i = 0; i < readOnlySpan.Length; i++)
{
ToCharsBuffer(readOnlySpan[i], buffer, num, casing);
num += 2;
}
return buffer.ToString();
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static char ToCharUpper(int value)
{
value &= 0xF;
value += 48;
if (value > 57)
{
value += 7;
}
return (char)value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static char ToCharLower(int value)
{
value &= 0xF;
value += 48;
if (value > 57)
{
value += 39;
}
return (char)value;
}
public static bool TryDecodeFromUtf8(ReadOnlySpan<byte> utf8Source, Span<byte> destination, out int bytesProcessed)
{
return TryDecodeFromUtf8_Scalar(utf8Source, destination, out bytesProcessed);
}
public static bool TryDecodeFromUtf16(ReadOnlySpan<char> source, Span<byte> destination, out int charsProcessed)
{
return TryDecodeFromUtf16_Scalar(source, destination, out charsProcessed);
}
private static bool TryDecodeFromUtf8_Scalar(ReadOnlySpan<byte> utf8Source, Span<byte> destination, out int bytesProcessed)
{
int num = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
while (num2 < destination.Length)
{
num3 = FromChar(utf8Source[num + 1]);
num4 = FromChar(utf8Source[num]);
if ((num3 | num4) == 255)
{
break;
}
destination[num2++] = (byte)((num4 << 4) | num3);
num += 2;
}
if (num3 == 255)
{
num++;
}
bytesProcessed = num;
return (num3 | num4) != 255;
}
private static bool TryDecodeFromUtf16_Scalar(ReadOnlySpan<char> source, Span<byte> destination, out int charsProcessed)
{
int num = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
while (num2 < destination.Length)
{
num3 = FromChar(source[num + 1]);
num4 = FromChar(source[num]);
if ((num3 | num4) == 255)
{
break;
}
destination[num2++] = (byte)((num4 << 4) | num3);
num += 2;
}
if (num3 == 255)
{
num++;
}
charsProcessed = num;
return (num3 | num4) != 255;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int FromChar(int c)
{
if (c < CharToHexLookup.Length)
{
return CharToHexLookup[c];
}
return 255;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int FromUpperChar(int c)
{
if (c <= 71)
{
return CharToHexLookup[c];
}
return 255;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int FromLowerChar(int c)
{
switch (c)
{
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
return c - 48;
case 97:
case 98:
case 99:
case 100:
case 101:
case 102:
return c - 97 + 10;
default:
return 255;
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsHexChar(int c)
{
if (IntPtr.Size == 8)
{
ulong num = (uint)(c - 48);
long num2 = -17875860044349952L << (int)num;
ulong num3 = num - 64;
return (long)((ulong)num2 & num3) < 0L;
}
return FromChar(c) != 255;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsHexUpperChar(int c)
{
if ((uint)(c - 48) > 9u)
{
return (uint)(c - 65) <= 5u;
}
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsHexLowerChar(int c)
{
if ((uint)(c - 48) > 9u)
{
return (uint)(c - 97) <= 5u;
}
return true;
}
}
internal static class ThrowHelper
{
[DoesNotReturn]
internal static void ThrowArgumentOutOfRangeException()
{
throw new ArgumentOutOfRangeException();
}
[DoesNotReturn]
internal static void ThrowArgumentException_DestinationTooShort()
{
throw new ArgumentException(System.SR.Argument_DestinationTooShort, "destination");
}
[DoesNotReturn]
internal static void ThrowArgumentException_CannotExtractScalar(System.ExceptionArgument argument)
{
throw GetArgumentException(System.ExceptionResource.Argument_CannotExtractScalar, argument);
}
[DoesNotReturn]
internal static void ThrowArgumentOutOfRange_IndexMustBeLessException()
{
throw GetArgumentOutOfRangeException(System.ExceptionArgument.index, System.ExceptionResource.ArgumentOutOfRange_IndexMustBeLess);
}
[DoesNotReturn]
internal static void ThrowArgumentNullException(System.ExceptionArgument argument)
{
throw new ArgumentNullException(GetArgumentName(argument));
}
[DoesNotReturn]
internal static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
{
throw new ArgumentOutOfRangeException(GetArgumentName(argument));
}
private static ArgumentOutOfRangeException GetArgumentOutOfRangeException(System.ExceptionArgument argument, System.ExceptionResource resource)
{
return new ArgumentOutOfRangeException(GetArgumentName(argument), GetResourceString(resource));
}
private static ArgumentException GetArgumentException(System.ExceptionResource resource, System.ExceptionArgument argument)
{
return new ArgumentException(GetResourceString(resource), GetArgumentName(argument));
}
private static string GetArgumentName(System.ExceptionArgument argument)
{
return argument switch
{
System.ExceptionArgument.ch => "ch",
System.ExceptionArgument.culture => "culture",
System.ExceptionArgument.index => "index",
System.ExceptionArgument.input => "input",
System.ExceptionArgument.value => "value",
_ => "",
};
}
private static string GetResourceString(System.ExceptionResource resource)
{
return resource switch
{
System.ExceptionResource.ArgumentOutOfRange_IndexMustBeLess => System.SR.ArgumentOutOfRange_IndexMustBeLess,
System.ExceptionResource.Argument_CannotExtractScalar => System.SR.Argument_CannotExtractScalar,
_ => "",
};
}
}
internal enum ExceptionArgument
{
ch,
culture,
index,
input,
value
}
internal enum ExceptionResource
{
Argument_CannotExtractScalar,
ArgumentOutOfRange_IndexMustBeLess
}
internal static class SR
{
private static readonly bool s_usingResourceKeys = GetUsingResourceKeysSwitchValue();
private static ResourceManager s_resourceManager;
internal static ResourceManager ResourceManager => s_resourceManager ?? (s_resourceManager = new ResourceManager(typeof(SR)));
internal static string ArgumentOutOfRange_IndexMustBeLess => GetResourceString("ArgumentOutOfRange_IndexMustBeLess");
internal static string Argument_CannotExtractScalar => GetResourceString("Argument_CannotExtractScalar");
internal static string Argument_DestinationTooShort => GetResourceString("Argument_DestinationTooShort");
internal static string Arg_MustBeRune => GetResourceString("Arg_MustBeRune");
internal static string TextEncoderDoesNotImplementMaxOutputCharsPerInputChar => GetResourceString("TextEncoderDoesNotImplementMaxOutputCharsPerInputChar");
private static bool GetUsingResourceKeysSwitchValue()
{
if (!AppContext.TryGetSwitch("System.Resources.UseSystemResourceKeys", out var isEnabled))
{
return false;
}
return isEnabled;
}
internal static bool UsingResourceKeys()
{
return s_usingResourceKeys;
}
private static string GetResourceString(string resourceKey)
{
if (UsingResourceKeys())
{
return resourceKey;
}
string result = null;
try
{
result = ResourceManager.GetString(resourceKey);
}
catch (MissingManifestResourceException)
{
}
return result;
}
private static string GetResourceString(string resourceKey, string defaultString)
{
string resourceString = GetResourceString(resourceKey);
if (!(resourceKey == resourceString) && resourceString != null)
{
return resourceString;
}
return defaultString;
}
internal static string Format(string resourceFormat, object p1)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1);
}
return string.Format(resourceFormat, p1);
}
internal static string Format(string resourceFormat, object p1, object p2)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2);
}
return string.Format(resourceFormat, p1, p2);
}
internal static string Format(string resourceFormat, object p1, object p2, object p3)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2, p3);
}
return string.Format(resourceFormat, p1, p2, p3);
}
internal static string Format(string resourceFormat, params object[] args)
{
if (args != null)
{
if (UsingResourceKeys())
{
return resourceFormat + ", " + string.Join(", ", args);
}
return string.Format(resourceFormat, args);
}
return resourceFormat;
}
internal static string Format(IFormatProvider provider, string resourceFormat, object p1)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1);
}
return string.Format(provider, resourceFormat, p1);
}
internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2);
}
return string.Format(provider, resourceFormat, p1, p2);
}
internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2, object p3)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2, p3);
}
return string.Format(provider, resourceFormat, p1, p2, p3);
}
internal static string Format(IFormatProvider provider, string resourceFormat, params object[] args)
{
if (args != null)
{
if (UsingResourceKeys())
{
return resourceFormat + ", " + string.Join(", ", args);
}
return string.Format(provider, resourceFormat, args);
}
return resourceFormat;
}
}
internal static class ExceptionPolyfills
{
[SpecialName]
public sealed class <G>$E6188BA5B951F1F7AA9135E0EBB76F2B
{
[SpecialName]
public static class <M>$96F0261AC622664B8B003966835C0332
{
}
[ExtensionMarker("<M>$96F0261AC622664B8B003966835C0332")]
public static void ThrowIfNull([NotNull] object argument, [CallerArgumentExpression("argument")] string paramName = null)
{
throw null;
}
}
[SpecialName]
public sealed class <G>$3F30F31B33543D5FB8E174FB4FD780B9
{
[SpecialName]
public static class <M>$1F10CFA08738E6D8AF61CBECC6763DBC
{
}
[ExtensionMarker("<M>$1F10CFA08738E6D8AF61CBECC6763DBC")]
public static void ThrowIf([DoesNotReturnIf(true)] bool condition, object instance)
{
throw null;
}
[ExtensionMarker("<M>$1F10CFA08738E6D8AF61CBECC6763DBC")]
public static void ThrowIf([DoesNotReturnIf(true)] bool condition, Type type)
{
throw null;
}
}
public static void ThrowIfNull([NotNull] object argument, [CallerArgumentExpression("argument")] string paramName = null)
{
if (argument == null)
{
ThrowArgumentNullException(paramName);
}
}
[DoesNotReturn]
private static void ThrowArgumentNullException(string paramName)
{
throw new ArgumentNullException(paramName);
}
public static void ThrowIf([DoesNotReturnIf(true)] bool condition, object instance)
{
if (condition)
{
ThrowObjectDisposedException(instance);
}
}
public static void ThrowIf([DoesNotReturnIf(true)] bool condition, Type type)
{
if (condition)
{
ThrowObjectDisposedException(type);
}
}
[DoesNotReturn]
private static void ThrowObjectDisposedException(object instance)
{
throw new ObjectDisposedException(instance?.GetType().FullName);
}
[DoesNotReturn]
private static void ThrowObjectDisposedException(Type type)
{
throw new ObjectDisposedException(type?.FullName);
}
}
}
namespace System.Diagnostics.CodeAnalysis
{
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)]
internal sealed class AllowNullAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)]
internal sealed class DisallowNullAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)]
internal sealed class MaybeNullAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)]
internal sealed class NotNullAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class MaybeNullWhenAttribute : Attribute
{
public bool ReturnValue { get; }
public MaybeNullWhenAttribute(bool returnValue)
{
ReturnValue = returnValue;
}
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class NotNullWhenAttribute : Attribute
{
public bool ReturnValue { get; }
public NotNullWhenAttribute(bool returnValue)
{
ReturnValue = returnValue;
}
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]
internal sealed class NotNullIfNotNullAttribute : Attribute
{
public string ParameterName { get; }
public NotNullIfNotNullAttribute(string parameterName)
{
ParameterName = parameterName;
}
}
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
internal sealed class DoesNotReturnAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class DoesNotReturnIfAttribute : Attribute
{
public bool ParameterValue { get; }
public DoesNotReturnIfAttribute(bool parameterValue)
{
ParameterValue = parameterValue;
}
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
internal sealed class MemberNotNullAttribute : Attribute
{
public string[] Members { get; }
public MemberNotNullAttribute(string member)
{
Members = new string[1] { member };
}
public MemberNotNullAttribute(params string[] members)
{
Members = members;
}
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
internal sealed class MemberNotNullWhenAttribute : Attribute
{
public bool ReturnValue { get; }
public string[] Members { get; }
public MemberNotNullWhenAttribute(bool returnValue, string member)
{
ReturnValue = returnValue;
Members = new string[1] { member };
}
public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
{
ReturnValue = returnValue;
Members = members;
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
internal sealed class CallerArgumentExpressionAttribute : Attribute
{
public string ParameterName { get; }
public CallerArgumentExpressionAttribute(string parameterName)
{
ParameterName = parameterName;
}
}
}
namespace System.Runtime.InteropServices
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
internal sealed class LibraryImportAttribute : Attribute
{
public string LibraryName { get; }
public string EntryPoint { get; set; }
public StringMarshalling StringMarshalling { get; set; }
public Type StringMarshallingCustomType { get; set; }
public bool SetLastError { get; set; }
public LibraryImportAttribute(string libraryName)
{
LibraryName = libraryName;
}
}
internal enum StringMarshalling
{
Custom,
Utf8,
Utf16
}
}
namespace System.Numerics
{
internal static class BitOperations
{
private static ReadOnlySpan<byte> Log2DeBruijn => new byte[32]
{
0, 9, 1, 10, 13, 21, 2, 29, 11, 14,
16, 18, 22, 25, 3, 30, 8, 12, 20, 28,
15, 17, 24, 7, 19, 27, 23, 6, 26, 5,
4, 31
};
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int Log2(uint value)
{
return Log2SoftwareFallback(value | 1u);
}
private static int Log2SoftwareFallback(uint value)
{
value |= value >> 1;
value |= value >> 2;
value |= value >> 4;
value |= value >> 8;
value |= value >> 16;
return Unsafe.AddByteOffset(ref MemoryMarshal.GetReference(Log2DeBruijn), (nint)(value * 130329821 >> 27));
}
}
}
namespace System.Text
{
internal static class UnicodeDebug
{
[Conditional("DEBUG")]
internal static void AssertIsBmpCodePoint(uint codePoint)
{
System.Text.UnicodeUtility.IsBmpCodePoint(codePoint);
}
[Conditional("DEBUG")]
internal static void AssertIsHighSurrogateCodePoint(uint codePoint)
{
System.Text.UnicodeUtility.IsHighSurrogateCodePoint(codePoint);
}
[Conditional("DEBUG")]
internal static void AssertIsLowSurrogateCodePoint(uint codePoint)
{
System.Text.UnicodeUtility.IsLowSurrogateCodePoint(codePoint);
}
[Conditional("DEBUG")]
internal static void AssertIsValidCodePoint(uint codePoint)
{
System.Text.UnicodeUtility.IsValidCodePoint(codePoint);
}
[Conditional("DEBUG")]
internal static void AssertIsValidScalar(uint scalarValue)
{
System.Text.UnicodeUtility.IsValidUnicodeScalar(scalarValue);
}
[Conditional("DEBUG")]
internal static void AssertIsValidSupplementaryPlaneScalar(uint scalarValue)
{
if (System.Text.UnicodeUtility.IsValidUnicodeScalar(scalarValue))
{
System.Text.UnicodeUtility.IsBmpCodePoint(scalarValue);
}
}
private static string ToHexString(uint codePoint)
{
return FormattableString.Invariant($"U+{codePoint:X4}");
}
}
internal static class UnicodeUtility
{
public const uint ReplacementChar = 65533u;
public static int GetPlane(uint codePoint)
{
return (int)(codePoint >> 16);
}
public static uint GetScalarFromUtf16SurrogatePair(uint highSurrogateCodePoint, uint lowSurrogateCodePoint)
{
return (highSurrogateCodePoint << 10) + lowSurrogateCodePoint - 56613888;
}
public static int GetUtf16SequenceLength(uint value)
{
value -= 65536;
value += 33554432;
value >>= 24;
return (int)value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void GetUtf16SurrogatesFromSupplementaryPlaneScalar(uint value, out char highSurrogateCodePoint, out char lowSurrogateCodePoint)
{
highSurrogateCodePoint = (char)(value + 56557568 >> 10);
lowSurrogateCodePoint = (char)((value & 0x3FF) + 56320);
}
public static int GetUtf8SequenceLength(uint value)
{
int num = (int)(value - 2048) >> 31;
value ^= 0xF800u;
value -= 63616;
value += 67108864;
value >>= 24;
return (int)value + num * 2;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsAsciiCodePoint(uint value)
{
return value <= 127;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsBmpCodePoint(uint value)
{
return value <= 65535;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsHighSurrogateCodePoint(uint value)
{
return IsInRangeInclusive(value, 55296u, 56319u);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsInRangeInclusive(uint value, uint lowerBound, uint upperBound)
{
return value - lowerBound <= upperBound - lowerBound;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsLowSurrogateCodePoint(uint value)
{
return IsInRangeInclusive(value, 56320u, 57343u);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsSurrogateCodePoint(uint value)
{
return IsInRangeInclusive(value, 55296u, 57343u);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsValidCodePoint(uint codePoint)
{
return codePoint <= 1114111;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsValidUnicodeScalar(uint value)
{
return ((value - 1114112) ^ 0xD800) >= 4293855232u;
}
}
internal ref struct ValueStringBuilder
{
private char[] _arrayToReturnToPool;
private Span<char> _chars;
private int _pos;
public int Length
{
get
{
return _pos;
}
set
{
_pos = value;
}
}
public int Capacity => _chars.Length;
public ref char this[int index] => ref _chars[index];
public Span<char> RawChars => _chars;
public ValueStringBuilder(Span<char> initialBuffer)
{
_arrayToReturnToPool = null;
_chars = initialBuffer;
_pos = 0;
}
public ValueStringBuilder(int initialCapacity)
{
_arrayToReturnToPool = ArrayPool<char>.Shared.Rent(initialCapacity);
_chars = _arrayToReturnToPool;
_pos = 0;
}
public void EnsureCapacity(int capacity)
{
if ((uint)capacity > (uint)_chars.Length)
{
Grow(capacity - _pos);
}
}
public ref char GetPinnableReference()
{
return ref MemoryMarshal.GetReference(_chars);
}
public ref char GetPinnableReference(bool terminate)
{
if (terminate)
{
EnsureCapacity(Length + 1);
_chars[Length] = '\0';
}
return ref MemoryMarshal.GetReference(_chars);
}
public override string ToString()
{
string result = _chars.Slice(0, _pos).ToString();
Dispose();
return result;
}
public ReadOnlySpan<char> AsSpan(bool terminate)
{
if (terminate)
{
EnsureCapacity(Length + 1);
_chars[Length] = '\0';
}
return _chars.Slice(0, _pos);
}
public ReadOnlySpan<char> AsSpan()
{
return _chars.Slice(0, _pos);
}
public ReadOnlySpan<char> AsSpan(int start)
{
return _chars.Slice(start, _pos - start);
}
public ReadOnlySpan<char> AsSpan(int start, int length)
{
return _chars.Slice(start, length);
}
public bool TryCopyTo(Span<char> destination, out int charsWritten)
{
if (_chars.Slice(0, _pos).TryCopyTo(destination))
{
charsWritten = _pos;
Dispose();
return true;
}
charsWritten = 0;
Dispose();
return false;
}
public void Insert(int index, char value, int count)
{
if (_pos > _chars.Length - count)
{
Grow(count);
}
int length = _pos - index;
_chars.Slice(index, length).CopyTo(_chars.Slice(index + count));
_chars.Slice(index, count).Fill(value);
_pos += count;
}
public void Insert(int index, string s)
{
if (s != null)
{
int length = s.Length;
if (_pos > _chars.Length - length)
{
Grow(length);
}
int length2 = _pos - index;
_chars.Slice(index, length2).CopyTo(_chars.Slice(index + length));
s.AsSpan().CopyTo(_chars.Slice(index));
_pos += length;
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Append(char c)
{
int pos = _pos;
Span<char> chars = _chars;
if ((uint)pos < (uint)chars.Length)
{
chars[pos] = c;
_pos = pos + 1;
}
else
{
GrowAndAppend(c);
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Append(string s)
{
if (s != null)
{
int pos = _pos;
if (s.Length == 1 && (uint)pos < (uint)_chars.Length)
{
_chars[pos] = s[0];
_pos = pos + 1;
}
else
{
AppendSlow(s);
}
}
}
private void AppendSlow(string s)
{
int pos = _pos;
if (pos > _chars.Length - s.Length)
{
Grow(s.Length);
}
s.AsSpan().CopyTo(_chars.Slice(pos));
_pos += s.Length;
}
public void Append(char c, int count)
{
if (_pos > _chars.Length - count)
{
Grow(count);
}
Span<char> span = _chars.Slice(_pos, count);
for (int i = 0; i < span.Length; i++)
{
span[i] = c;
}
_pos += count;
}
public void Append(scoped ReadOnlySpan<char> value)
{
if (_pos > _chars.Length - value.Length)
{
Grow(value.Length);
}
value.CopyTo(_chars.Slice(_pos));
_pos += value.Length;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span<char> AppendSpan(int length)
{
int pos = _pos;
if (pos > _chars.Length - length)
{
Grow(length);
}
_pos = pos + length;
return _chars.Slice(pos, length);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private void GrowAndAppend(char c)
{
Grow(1);
Append(c);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private void Grow(int additionalCapacityBeyondPos)
{
int minimumLength = (int)Math.Max((uint)(_pos + additionalCapacityBeyondPos), Math.Min((uint)(_chars.Length * 2), 2147483591u));
char[] array = ArrayPool<char>.Shared.Rent(minimumLength);
_chars.Slice(0, _pos).CopyTo(array);
char[] arrayToReturnToPool = _arrayToReturnToPool;
_chars = (_arrayToReturnToPool = array);
if (arrayToReturnToPool != null)
{
ArrayPool<char>.Shared.Return(arrayToReturnToPool);
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Dispose()
{
char[] arrayToReturnToPool = _arrayToReturnToPool;
this = default(System.Text.ValueStringBuilder);
if (arrayToReturnToPool != null)
{
ArrayPool<char>.Shared.Return(arrayToReturnToPool);
}
}
}
[DebuggerDisplay("{DebuggerDisplay,nq}")]
internal readonly struct Rune : IComparable, IComparable<Rune>, IEquatable<Rune>
{
internal const int MaxUtf16CharsPerRune = 2;
internal const int MaxUtf8BytesPerRune = 4;
private const char HighSurrogateStart = '\ud800';
private const char LowSurrogateStart = '\udc00';
private const int HighSurrogateRange = 1023;
private const byte IsWhiteSpaceFlag = 128;
private const byte IsLetterOrDigitFlag = 64;
private const byte UnicodeCategoryMask = 31;
private readonly uint _value;
private static ReadOnlySpan<byte> AsciiCharInfo => new byte[128]
{
14, 14, 14, 14, 14, 14, 14, 14, 14, 142,
142, 142, 142, 142, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 139, 24, 24, 24, 26, 24, 24, 24,
20, 21, 24, 25, 24, 19, 24, 24, 72, 72,
72, 72, 72, 72, 72, 72, 72, 72, 24, 24,
25, 25, 25, 24, 24, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 20, 24, 21, 27, 18, 27, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65, 65, 65, 20, 25, 21, 25, 14
};
private string DebuggerDisplay => FormattableString.Invariant(FormattableStringFactory.Create("U+{0:X4} '{1}'", _value, IsValid(_value) ? ToString() : "\ufffd"));
public bool IsAscii => System.Text.UnicodeUtility.IsAsciiCodePoint(_value);
public bool IsBmp => System.Text.UnicodeUtility.IsBmpCodePoint(_value);
public int Plane => System.Text.UnicodeUtility.GetPlane(_value);
public static Rune ReplacementChar => UnsafeCreate(65533u);
public int Utf16SequenceLength => System.Text.UnicodeUtility.GetUtf16SequenceLength(_value);
public int Utf8SequenceLength => System.Text.UnicodeUtility.GetUtf8SequenceLength(_value);
public int Value => (int)_value;
public Rune(char ch)
{
if (System.Text.UnicodeUtility.IsSurrogateCodePoint(ch))
{
System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument.ch);
}
_value = ch;
}
public Rune(char highSurrogate, char lowSurrogate)
: this((uint)char.ConvertToUtf32(highSurrogate, lowSurrogate), _: false)
{
}
public Rune(int value)
: this((uint)value)
{
}
[CLSCompliant(false)]
public Rune(uint value)
{
if (!System.Text.UnicodeUtility.IsValidUnicodeScalar(value))
{
System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument.value);
}
_value = value;
}
private Rune(uint scalarValue, bool _)
{
_value = scalarValue;
}
public static bool operator ==(Rune left, Rune right)
{
return left._value == right._value;
}
public static bool operator !=(Rune left, Rune right)
{
return left._value != right._value;
}
public static bool operator <(Rune left, Rune right)
{
return left._value < right._value;
}
public static bool operator <=(Rune left, Rune right)
{
return left._value <= right._value;
}
public static bool operator >(Rune left, Rune right)
{
return left._value > right._value;
}
public static bool operator >=(Rune left, Rune right)
{
return left._value >= right._value;
}
public static explicit operator Rune(char ch)
{
return new Rune(ch);
}
[CLSCompliant(false)]
public static explicit operator Rune(uint value)
{
return new Rune(value);
}
public static explicit operator Rune(int value)
{
return new Rune(value);
}
private static Rune ChangeCaseCultureAware(Rune rune, CultureInfo culture, bool toUpper)
{
Span<char> span = stackalloc char[2];
Span<char> destination = stackalloc char[2];
int length = rune.EncodeToUtf16(span);
span = span.Slice(0, length);
destination = destination.Slice(0, length);
if (toUpper)
{
MemoryExtensions.ToUpper(span, destination, culture);
}
else
{
MemoryExtensions.ToLower(span, destination, culture);
}
if (rune.IsBmp)
{
return UnsafeCreate(destination[0]);
}
return UnsafeCreate(System.Text.UnicodeUtility.GetScalarFromUtf16SurrogatePair(destination[0], destination[1]));
}
public int CompareTo(Rune other)
{
return Value - other.Value;
}
public static OperationStatus DecodeFromUtf16(ReadOnlySpan<char> source, out Rune result, out int charsConsumed)
{
if (!source.IsEmpty)
{
char c = source[0];
if (TryCreate(c, out result))
{
charsConsumed = 1;
return OperationStatus.Done;
}
if (source.Length > 1)
{
char lowSurrogate = source[1];
if (TryCreate(c, lowSurrogate, out result))
{
charsConsumed = 2;
return OperationStatus.Done;
}
}
else if (char.IsHighSurrogate(c))
{
goto IL_004c;
}
charsConsumed = 1;
result = ReplacementChar;
return OperationStatus.InvalidData;
}
goto IL_004c;
IL_004c:
charsConsumed = source.Length;
result = ReplacementChar;
return OperationStatus.NeedMoreData;
}
public static OperationStatus DecodeFromUtf8(ReadOnlySpan<byte> source, out Rune result, out int bytesConsumed)
{
int num = 0;
if (source.IsEmpty)
{
goto IL_0153;
}
uint num2 = source[0];
if (System.Text.UnicodeUtility.IsAsciiCodePoint(num2))
{
bytesConsumed = 1;
result = UnsafeCreate(num2);
return OperationStatus.Done;
}
num = 1;
if (System.Text.UnicodeUtility.IsInRangeInclusive(num2, 194u, 244u))
{
num2 = num2 - 194 << 6;
if (source.Length <= 1)
{
goto IL_0153;
}
int num3 = (sbyte)source[1];
if (num3 < -64)
{
num2 += (uint)num3;
num2 += 128;
num2 += 128;
if (num2 < 2048)
{
goto IL_0140;
}
if (System.Text.UnicodeUtility.IsInRangeInclusive(num2, 2080u, 3343u) && !System.Text.UnicodeUtility.IsInRangeInclusive(num2, 2912u, 2943u) && !System.Text.UnicodeUtility.IsInRangeInclusive(num2, 3072u, 3087u))
{
num = 2;
if (source.Length <= 2)
{
goto IL_0153;
}
num3 = (sbyte)source[2];
if (num3 < -64)
{
num2 <<= 6;
num2 += (uint)num3;
num2 += 128;
num2 -= 131072;
if (num2 > 65535)
{
num = 3;
if (source.Length <= 3)
{
goto IL_0153;
}
num3 = (sbyte)source[3];
if (num3 >= -64)
{
goto IL_0163;
}
num2 <<= 6;
num2 += (uint)num3;
num2 += 128;
num2 -= 4194304;
}
goto IL_0140;
}
}
}
}
goto IL_0163;
IL_0140:
bytesConsumed = num + 1;
result = UnsafeCreate(num2);
return OperationStatus.Done;
IL_0163:
bytesConsumed = num;
result = ReplacementChar;
return OperationStatus.InvalidData;
IL_0153:
bytesConsumed = num;
result = ReplacementChar;
return OperationStatus.NeedMoreData;
}
public static OperationStatus DecodeLastFromUtf16(ReadOnlySpan<char> source, out Rune result, out int charsConsumed)
{
int num = source.Length - 1;
if ((uint)num < (uint)source.Length)
{
char c = source[num];
if (TryCreate(c, out result))
{
charsConsumed = 1;
return OperationStatus.Done;
}
if (char.IsLowSurrogate(c))
{
num--;
if ((uint)num < (uint)source.Length && TryCreate(source[num], c, out result))
{
charsConsumed = 2;
return OperationStatus.Done;
}
charsConsumed = 1;
result = ReplacementChar;
return OperationStatus.InvalidData;
}
}
charsConsumed = -source.Length >>> 31;
result = ReplacementChar;
return OperationStatus.NeedMoreData;
}
public static OperationStatus DecodeLastFromUtf8(ReadOnlySpan<byte> source, out Rune value, out int bytesConsumed)
{
int num = source.Length - 1;
if ((uint)num < (uint)source.Length)
{
uint num2 = source[num];
if (System.Text.UnicodeUtility.IsAsciiCodePoint(num2))
{
bytesConsumed = 1;
value = UnsafeCreate(num2);
return OperationStatus.Done;
}
if (((byte)num2 & 0x40u) != 0)
{
return DecodeFromUtf8(source.Slice(num), out value, out bytesConsumed);
}
int num3 = 3;
OperationStatus result2;
Rune result;
int bytesConsumed2;
while (true)
{
if (num3 > 0)
{
num--;
if ((uint)num < (uint)source.Length)
{
if ((sbyte)source[num] < -64)
{
num3--;
continue;
}
source = source.Slice(num);
result2 = DecodeFromUtf8(source, out result, out bytesConsumed2);
if (bytesConsumed2 == source.Length)
{
break;
}
}
}
value = ReplacementChar;
bytesConsumed = 1;
return OperationStatus.InvalidData;
}
bytesConsumed = bytesConsumed2;
value = result;
return result2;
}
value = ReplacementChar;
bytesConsumed = 0;
return OperationStatus.NeedMoreData;
}
public int EncodeToUtf16(Span<char> destination)
{
if (!TryEncodeToUtf16(destination, out var charsWritten))
{
System.ThrowHelper.ThrowArgumentException_DestinationTooShort();
}
return charsWritten;
}
public int EncodeToUtf8(Span<byte> destination)
{
if (!TryEncodeToUtf8(destination, out var bytesWritten))
{
System.ThrowHelper.ThrowArgumentException_DestinationTooShort();
}
return bytesWritten;
}
public override bool Equals([NotNullWhen(true)] object obj)
{
if (obj is Rune other)
{
return Equals(other);
}
return false;
}
public bool Equals(Rune other)
{
return this == other;
}
public override int GetHashCode()
{
return Value;
}
public static bool IsValid(int value)
{
return IsValid((uint)value);
}
[CLSCompliant(false)]
public static bool IsValid(uint value)
{
return System.Text.UnicodeUtility.IsValidUnicodeScalar(value);
}
internal static int ReadFirstRuneFromUtf16Buffer(ReadOnlySpan<char> input)
{
if (input.IsEmpty)
{
return -1;
}
uint num = input[0];
if (System.Text.UnicodeUtility.IsSurrogateCodePoint(num))
{
if (!System.Text.UnicodeUtility.IsHighSurrogateCodePoint(num))
{
return -1;
}
if (input.Length <= 1)
{
return -1;
}
uint num2 = input[1];
if (!System.Text.UnicodeUtility.IsLowSurrogateCodePoint(num2))
{
return -1;
}
num = System.Text.UnicodeUtility.GetScalarFromUtf16SurrogatePair(num, num2);
}
return (int)num;
}
public override string ToString()
{
if (IsBmp)
{
return ((char)_value).ToString();
}
Span<char> span = stackalloc char[2];
System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar(_value, out span[0], out span[1]);
return span.ToString();
}
public static bool TryCreate(char ch, out Rune result)
{
if (!System.Text.UnicodeUtility.IsSurrogateCodePoint(ch))
{
result = UnsafeCreate(ch);
return true;
}
result = default(Rune);
return false;
}
public static bool TryCreate(char highSurrogate, char lowSurrogate, out Rune result)
{
uint num = (uint)(highSurrogate - 55296);
uint num2 = (uint)(lowSurrogate - 56320);
if ((num | num2) <= 1023)
{
result = UnsafeCreate((uint)((int)(num << 10) + (lowSurrogate - 56320) + 65536));
return true;
}
result = default(Rune);
return false;
}
public static bool TryCreate(int value, out Rune result)
{
return TryCreate((uint)value, out result);
}
[CLSCompliant(false)]
public static bool TryCreate(uint value, out Rune result)
{
if (System.Text.UnicodeUtility.IsValidUnicodeScalar(value))
{
result = UnsafeCreate(value);
return true;
}
result = default(Rune);
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool TryEncodeToUtf16(Span<char> destination, out int charsWritten)
{
return TryEncodeToUtf16(this, destination, out charsWritten);
}
private static bool TryEncodeToUtf16(Rune value, Span<char> destination, out int charsWritten)
{
if (!destination.IsEmpty)
{
if (value.IsBmp)
{
destination[0] = (char)value._value;
charsWritten = 1;
return true;
}
if (destination.Length > 1)
{
System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar(value._value, out destination[0], out destination[1]);
charsWritten = 2;
return true;
}
}
charsWritten = 0;
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool TryEncodeToUtf8(Span<byte> destination, out int bytesWritten)
{
return TryEncodeToUtf8(this, destination, out bytesWritten);
}
private static bool TryEncodeToUtf8(Rune value, Span<byte> destination, out int bytesWritten)
{
if (!destination.IsEmpty)
{
if (value.IsAscii)
{
destination[0] = (byte)value._value;
bytesWritten = 1;
return true;
}
if (destination.Length > 1)
{
if ((long)value.Value <= 2047L)
{
destination[0] = (byte)(value._value + 12288 >> 6);
destination[1] = (byte)((value._value & 0x3F) + 128);
bytesWritten = 2;
return true;
}
if (destination.Length > 2)
{
if ((long)value.Value <= 65535L)
{
destination[0] = (byte)(value._value + 917504 >> 12);
destination[1] = (byte)(((value._value & 0xFC0) >> 6) + 128);
destination[2] = (byte)((value._value & 0x3F) + 128);
bytesWritten = 3;
return true;
}
if (destination.Length > 3)
{
destination[0] = (byte)(value._value + 62914560 >> 18);
destination[1] = (byte)(((value._value & 0x3F000) >> 12) + 128);
destination[2] = (byte)(((value._value & 0xFC0) >> 6) + 128);
destination[3] = (byte)((value._value & 0x3F) + 128);
bytesWritten = 4;
return true;
}
}
}
}
bytesWritten = 0;
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static Rune UnsafeCreate(uint scalarValue)
{
return new Rune(scalarValue, _: false);
}
public static double GetNumericValue(Rune value)
{
if (value.IsAscii)
{
uint num = value._value - 48;
if (num > 9)
{
return -1.0;
}
return num;
}
if (value.IsBmp)
{
return CharUnicodeInfo.GetNumericValue((char)value._value);
}
return CharUnicodeInfo.GetNumericValue(value.ToString(), 0);
}
public static UnicodeCategory GetUnicodeCategory(Rune value)
{
if (value.IsAscii)
{
return (UnicodeCategory)(AsciiCharInfo[value.Value] & 0x1F);
}
return GetUnicodeCategoryNonAscii(value);
}
private static UnicodeCategory GetUnicodeCategoryNonAscii(Rune value)
{
if (value.IsBmp)
{
return CharUnicodeInfo.GetUnicodeCategory((char)value._value);
}
return CharUnicodeInfo.GetUnicodeCategory(value.ToString(), 0);
}
private static bool IsCategoryLetter(UnicodeCategory category)
{
return System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 0u, 4u);
}
private static bool IsCategoryLetterOrDecimalDigit(UnicodeCategory category)
{
if (!System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 0u, 4u))
{
return category == UnicodeCategory.DecimalDigitNumber;
}
return true;
}
private static bool IsCategoryNumber(UnicodeCategory category)
{
return System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 8u, 10u);
}
private static bool IsCategoryPunctuation(UnicodeCategory category)
{
return System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 18u, 24u);
}
private static bool IsCategorySeparator(UnicodeCategory category)
{
return System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 11u, 13u);
}
private static bool IsCategorySymbol(UnicodeCategory category)
{
return System.Text.UnicodeUtility.IsInRangeInclusive((uint)category, 25u, 28u);
}
public static bool IsControl(Rune value)
{
return ((value._value + 1) & 0xFFFFFF7Fu) <= 32;
}
public static bool IsDigit(Rune value)
{
if (value.IsAscii)
{
return System.Text.UnicodeUtility.IsInRangeInclusive(value._value, 48u, 57u);
}
return GetUnicodeCategoryNonAscii(value) == UnicodeCategory.DecimalDigitNumber;
}
public static bool IsLetter(Rune value)
{
if (value.IsAscii)
{
return ((value._value - 65) & 0xFFFFFFDFu) <= 25;
}
return IsCategoryLetter(GetUnicodeCategoryNonAscii(value));
}
public static bool IsLetterOrDigit(Rune value)
{
if (value.IsAscii)
{
return (AsciiCharInfo[value.Value] & 0x40) != 0;
}
return IsCategoryLetterOrDecimalDigit(GetUnicodeCategoryNonAscii(value));
}
public static bool IsLower(Rune value)
{
if (value.IsAscii)
{
return System.Text.UnicodeUtility.IsInRangeInclusive(value._value, 97u, 122u);
}
return GetUnicodeCategoryNonAscii(value) == UnicodeCategory.LowercaseLetter;
}
public static bool IsNumber(Rune value)
{
if (value.IsAscii)
{
return System.Text.UnicodeUtility.IsInRangeInclusive(value._value, 48u, 57u);
}
return IsCategoryNumber(GetUnicodeCategoryNonAscii(value));
}
public static bool IsPunctuation(Rune value)
{
return IsCategoryPunctuation(GetUnicodeCategory(value));
}
public static bool IsSeparator(Rune value)
{
return IsCategorySeparator(GetUnicodeCategory(value));
}
public static bool IsSymbol(Rune value)
{
return IsCategorySymbol(GetUnicodeCategory(value));
}
public static bool IsUpper(Rune value)
{
if (value.IsAscii)
{
return System.Text.UnicodeUtility.IsInRangeInclusive(value._value, 65u, 90u);
}
return GetUnicodeCategoryNonAscii(value) == UnicodeCategory.UppercaseLetter;
}
public static bool IsWhiteSpace(Rune value)
{
if (value.IsAscii)
{
return (AsciiCharInfo[value.Value] & 0x80) != 0;
}
if (value.IsBmp)
{
return char.IsWhiteSpace((char)value._value);
}
return false;
}
public static Rune ToLower(Rune value, CultureInfo culture)
{
if (culture == null)
{
System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.culture);
}
return ChangeCaseCultureAware(value, culture, toUpper: false);
}
public static Rune ToLowerInvariant(Rune value)
{
if (value.IsAscii)
{
return UnsafeCreate(System.Text.Unicode.Utf16Utility.ConvertAllAsciiCharsInUInt32ToLowercase(value._value));
}
return ChangeCaseCultureAware(value, CultureInfo.InvariantCulture, toUpper: false);
}
public static Rune ToUpper(Rune value, CultureInfo culture)
{
if (culture == null)
{
System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument.culture);
}
return ChangeCaseCultureAware(value, culture, toUpper: true);
}
public static Rune ToUpperInvariant(Rune value)
{
if (value.IsAscii)
{
return UnsafeCreate(System.Text.Unicode.Utf16Utility.ConvertAllAsciiCharsInUInt32ToUppercase(value._value));
}
return ChangeCaseCultureAware(value, CultureInfo.InvariantCulture, toUpper: true);
}
int IComparable.CompareTo(object obj)
{
if (obj == null)
{
return 1;
}
if (obj is Rune other)
{
return CompareTo(other);
}
throw new ArgumentException();
}
}
}
namespace System.Text.Unicode
{
internal static class UnicodeHelpers
{
internal const int UNICODE_LAST_CODEPOINT = 1114111;
private static ReadOnlySpan<byte> DefinedCharsBitmapSpan => new byte[8192]
{
0, 0, 0, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 127, 0, 0, 0, 0,
254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 252, 240, 215, 255, 255, 251, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 254, 255, 255, 255,
127, 254, 255, 255, 255, 255, 255, 231, 254, 255,
255, 255, 255, 255, 255, 0, 255, 255, 255, 135,
31, 0, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 191, 255, 255, 255, 255,
255, 255, 255, 231, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 3, 0, 255, 255,
255, 255, 255, 255, 255, 231, 255, 255, 255, 255,
255, 63, 255, 127, 255, 255, 255, 79, 255, 7,
255, 255, 255, 127, 131, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 239, 159, 249, 255, 255, 253,
197, 243, 159, 121, 128, 176, 207, 255, 255, 127,
238, 135, 249, 255, 255, 253, 109, 211, 135, 57,
2, 94, 192, 255, 127, 0, 238, 191, 251, 255,
255, 253, 237, 243, 191, 59, 1, 0, 207, 255,
3, 254, 238, 159, 249, 255, 255, 253, 237, 243,
159, 57, 224, 176, 207, 255, 255, 0, 236, 199,
61, 214, 24, 199, 255, 195, 199, 61, 129, 0,
192, 255, 255, 7, 255, 223, 253, 255, 255, 253,
255, 243, 223, 61, 96, 39, 207, 255, 128, 255,
255, 223, 253, 255, 255, 253, 239, 243, 223, 61,
96, 96, 207, 255, 14, 0, 255, 223, 253, 255,
255, 255, 255, 255, 223, 253, 240, 255, 207, 255,
255, 255, 238, 255, 127, 252, 255, 255, 251, 47,
127, 132, 95, 255, 192, 255, 28, 0, 254, 255,
255, 255, 255, 255, 255, 135, 255, 255, 255, 15,
0, 0, 0, 0, 214, 247, 255, 255, 175, 255,
255, 63, 95, 127, 255, 243, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 254,
255, 255, 255, 31, 254, 255, 255, 255, 255, 254,
255, 255, 255, 223, 255, 223, 255, 7, 0, 0,
0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 191, 32, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 61, 127, 61, 255, 255,
255, 255, 255, 61, 255, 255, 255, 255, 61, 127,
61, 255, 127, 255, 255, 255, 255, 255, 255, 255,
61, 255, 255, 255, 255, 255, 255, 255, 255, 231,
255, 255, 255, 31, 255, 255, 255, 3, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 63, 63,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
254, 255, 255, 31, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 1, 255, 255, 63, 128,
255, 255, 127, 0, 255, 255, 15, 0, 255, 223,
13, 0, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 63, 255, 3, 255, 3, 255, 255,
255, 3, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 1, 255, 255, 255, 255, 255, 7,
255, 255, 255, 255, 255, 255, 255, 255, 63, 0,
255, 255, 255, 127, 255, 15, 255, 15, 241, 255,
255, 255, 255, 63, 31, 0, 255, 255, 255, 255,
255, 15, 255, 255, 255, 3, 255, 199, 255, 255,
255, 255, 255, 255, 255, 207, 255, 255, 255, 255,
255, 255, 255, 127, 255, 255, 255, 159, 255, 3,
255, 3, 255, 63, 255, 255, 255, 127, 0, 0,
0, 0, 0, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 223, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 15, 240, 255, 255, 255, 255,
255, 255, 255, 248, 255, 227, 255, 255, 255, 255,
255, 255, 255, 7, 255, 255, 255, 255, 255, 231,
255, 0, 255, 255, 255, 255, 255, 7, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 63, 63, 255, 255, 255, 255,
63, 63, 255, 170, 255, 255, 255, 63, 255, 255,
255, 255, 255, 255, 223, 255, 223, 255, 207, 239,
255, 255, 220, 127, 0, 248, 255, 255, 255, 124,
255, 255, 255, 255, 255, 127, 223, 255, 243, 255,
255, 127, 255, 31, 255, 255, 255, 255, 1, 0,
255, 255, 255, 255, 1, 0, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 15, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 3, 0, 0,
255, 7, 0, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
207, 255, 255, 255, 191, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 15, 254,
255, 255, 255, 255, 191, 32, 255, 255, 255, 255,
255, 255, 255, 128, 1, 128, 255, 255, 127, 0,
127, 127, 127, 127, 127, 127, 127, 127, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 63, 0, 0, 0, 0, 255, 255,
255, 251, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 15, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
63, 0, 0, 0, 255, 255, 254, 255, 255, 255,
255, 255, 255, 255, 254, 255, 255, 255, 255, 255,
255, 255, 255, 255, 127, 254, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 224, 255,
255, 255, 255, 255, 254, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 127, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 63, 128, 255, 255,
255, 255, 255, 127, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 31, 255, 255, 255, 255,
255, 255, 127, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 15, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 0, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 63,
235, 31, 0, 0, 252, 255, 255, 255, 255, 255,
255, 31, 255, 3, 255, 255, 255, 255, 255, 255,
255, 0, 255, 255, 255, 255, 255, 255, 255, 255,
63, 192, 255, 3, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 15, 128,
255, 255, 255, 31, 255, 255, 255, 255, 255, 255,
255, 255, 255, 191, 255, 195, 255, 255, 255, 127,
255, 255, 255, 255, 255, 255, 127, 0, 255, 63,
255, 243, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 7, 0, 0, 248, 255, 255,
127, 0, 126, 126, 126, 0, 127, 127, 255, 255,
255, 255, 255, 255, 255, 15, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 63, 255, 3, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
15, 0, 255, 255, 127, 248, 255, 255, 255, 255,
255, 15, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 63, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 3, 0, 0,
0, 0, 127, 0, 248, 224, 255, 255, 127, 95,
219, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 7, 0, 248, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 252, 255, 255, 255, 255, 255,
255, 128, 0, 0, 0, 0, 255, 255, 255, 255,
255, 3, 255, 255, 255, 255, 255, 255, 247, 255,
127, 15, 223, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 31,
254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 127, 252, 252, 252, 28, 127, 127,
0, 62
};
internal static ReadOnlySpan<byte> GetDefinedBmpCodePointsBitmapLittleEndian()
{
return DefinedCharsBitmapSpan;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static void GetUtf16SurrogatePairFromAstralScalarValue(uint scalar, out char highSurrogate, out char lowSurrogate)
{
highSurrogate = (char)(scalar + 56557568 >> 10);
lowSurrogate = (char)((scalar & 0x3FF) + 56320);
}
internal static int GetUtf8RepresentationForScalarValue(uint scalar)
{
if (scalar <= 127)
{
return (byte)scalar;
}
if (scalar <= 2047)
{
byte b = (byte)(0xC0u | (scalar >> 6));
return ((byte)(0x80 | (scalar & 0x3F)) << 8) | b;
}
if (scalar <= 65535)
{
byte b2 = (byte)(0xE0u | (scalar >> 12));
byte b3 = (byte)(0x80u | ((scalar >> 6) & 0x3Fu));
return ((((byte)(0x80 | (scalar & 0x3F)) << 8) | b3) << 8) | b2;
}
byte b4 = (byte)(0xF0u | (scalar >> 18));
byte b5 = (byte)(0x80u | ((scalar >> 12) & 0x3Fu));
byte b6 = (byte)(0x80u | ((scalar >> 6) & 0x3Fu));
return ((((((byte)(0x80 | (scalar & 0x3F)) << 8) | b6) << 8) | b5) << 8) | b4;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool IsSupplementaryCodePoint(int scalar)
{
return (scalar & -65536) != 0;
}
}
public sealed class UnicodeRange
{
public int FirstCodePoint { get; }
public int Length { get; }
public UnicodeRange(int firstCodePoint, int length)
{
if (firstCodePoint < 0 || firstCodePoint > 65535)
{
throw new ArgumentOutOfRangeException("firstCodePoint");
}
if (length < 0 || (long)firstCodePoint + (long)length > 65536)
{
throw new ArgumentOutOfRangeException("length");
}
FirstCodePoint = firstCodePoint;
Length = length;
}
public static UnicodeRange Create(char firstCharacter, char lastCharacter)
{
if (lastCharacter < firstCharacter)
{
throw new ArgumentOutOfRangeException("lastCharacter");
}
return new UnicodeRange(firstCharacter, 1 + (lastCharacter - firstCharacter));
}
}
public static class UnicodeRanges
{
private static UnicodeRange _none;
private static UnicodeRange _all;
private static UnicodeRange _u0000;
private static UnicodeRange _u0080;
private static UnicodeRange _u0100;
private static UnicodeRange _u0180;
private static UnicodeRange _u0250;
private static UnicodeRange _u02B0;
private static UnicodeRange _u0300;
private static UnicodeRange _u0370;
private static UnicodeRange _u0400;
private static UnicodeRange _u0500;
private static UnicodeRange _u0530;
private static UnicodeRange _u0590;
private static UnicodeRange _u0600;
private static UnicodeRange _u0700;
private static UnicodeRange _u0750;
private static UnicodeRange _u0780;
private static UnicodeRange _u07C0;
private static UnicodeRange _u0800;
private static UnicodeRange _u0840;
private static UnicodeRange _u0860;
private static UnicodeRange _u0870;
private static UnicodeRange _u08A0;
private static UnicodeRange _u0900;
private static UnicodeRange _u0980;
private static UnicodeRange _u0A00;
private static UnicodeRange _u0A80;
private static UnicodeRange _u0B00;
private static UnicodeRange _u0B80;
private static UnicodeRange _u0C00;
private static UnicodeRange _u0C80;
private static UnicodeRange _u0D00;
private static UnicodeRange _u0D80;
private static UnicodeRange _u0E00;
private static UnicodeRange _u0E80;
private static UnicodeRange _u0F00;
private static UnicodeRange _u1000;
private static UnicodeRange _u10A0;
private static UnicodeRange _u1100;
private static UnicodeRange _u1200;
private static UnicodeRange _u1380;
private static UnicodeRange _u13A0;
private static UnicodeRange _u1400;
private static UnicodeRange _u1680;
private static UnicodeRange _u16A0;
private static UnicodeRange _u1700;
private static UnicodeRange _u1720;
private static UnicodeRange _u1740;
private static UnicodeRange _u1760;
private static UnicodeRange _u1780;
private static UnicodeRange _u1800;
private static UnicodeRange _u18B0;
private static UnicodeRange _u1900;
private static UnicodeRange _u1950;
private static UnicodeRange _u1980;
private static UnicodeRange _u19E0;
private static UnicodeRange _u1A00;
private static UnicodeRange _u1A20;
private static UnicodeRange _u1AB0;
private static UnicodeRange _u1B00;
private static UnicodeRange _u1B80;
private static UnicodeRange _u1BC0;
private static UnicodeRange _u1C00;
private static UnicodeRange _u1C50;
private static UnicodeRange _u1C80;
private static UnicodeRange _u1C90;
private static UnicodeRange _u1CC0;
private static UnicodeRange _u1CD0;
private static UnicodeRange _u1D00;
private static UnicodeRange _u1D80;
private static UnicodeRange _u1DC0;
private static UnicodeRange _u1E00;
private static UnicodeRange _u1F00;
private static UnicodeRange _u2000;
private static UnicodeRange _u2070;
private static UnicodeRange _u20A0;
private static UnicodeRange _u20D0;
private static UnicodeRange _u2100;
private static UnicodeRange _u2150;
private static UnicodeRange _u2190;
private static UnicodeRange _u2200;
private static UnicodeRange _u2300;
private static UnicodeRange _u2400;
private static UnicodeRange _u2440;
private static UnicodeRange _u2460;
private static UnicodeRange _u2500;
private static UnicodeRange _u2580;
private static UnicodeRange _u25A0;
private static UnicodeRange _u2600;
private static UnicodeRange _u2700;
private static UnicodeRange _u27C0;
private static UnicodeRange _u27F0;
private static UnicodeRange _u2800;
private static UnicodeRange _u2900;
private static UnicodeRange _u2980;
private static UnicodeRange _u2A00;
private static UnicodeRange _u2B00;
private static UnicodeRange _u2C00;
private static UnicodeRange _u2C60;
private static UnicodeRange _u2C80;
private static UnicodeRange _u2D00;
private static UnicodeRange _u2D30;
private static UnicodeRange _u2D80;
private static UnicodeRange _u2DE0;
private static UnicodeRange _u2E00;
private static UnicodeRange _u2E80;
private static UnicodeRange _u2F00;
private static UnicodeRange _u2FF0;
private static UnicodeRange _u3000;
private static UnicodeRange _u3040;
private static UnicodeRange _u30A0;
private static UnicodeRange _u3100;
private static UnicodeRange _u3130;
private static UnicodeRange _u3190;
private static UnicodeRange _u31A0;
private static UnicodeRange _u31C0;
private static UnicodeRange _u31F0;
private static UnicodeRange _u3200;
private static UnicodeRange _u3300;
private static UnicodeRange _u3400;
private static UnicodeRange _u4DC0;
private static UnicodeRange _u4E00;
private static UnicodeRange _uA000;
private static UnicodeRange _uA490;
private static UnicodeRange _uA4D0;
private static UnicodeRange _uA500;
private static UnicodeRange _uA640;
private static UnicodeRange _uA6A0;
private static UnicodeRange _uA700;
private static UnicodeRange _uA720;
private static UnicodeRange _uA800;
private static UnicodeRange _uA830;
private static UnicodeRange _uA840;
private static UnicodeRange _uA880;
private static UnicodeRange _uA8E0;
private static UnicodeRange _uA900;
private static UnicodeRange _uA930;
private static UnicodeRange _uA960;
private static UnicodeRange _uA980;
private static UnicodeRange _uA9E0;
private static UnicodeRange _uAA00;
private static UnicodeRange _uAA60;
priva