1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Add support for various traversal operations on Unicode strings

This commit is contained in:
Oliver James 2024-03-07 15:45:39 +01:00 committed by reuk
parent ade5461de3
commit 25e1431c47
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C
47 changed files with 7190 additions and 0 deletions

View file

@ -1961,6 +1961,18 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"
@ -4428,6 +4440,18 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"

View file

@ -2375,6 +2375,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -4184,6 +4211,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -650,6 +650,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -3127,6 +3130,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -7281,6 +7311,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2375,6 +2375,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -4184,6 +4211,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -650,6 +650,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -3127,6 +3130,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -7281,6 +7311,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2375,6 +2375,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -4184,6 +4211,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -650,6 +650,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -3127,6 +3130,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -7281,6 +7311,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1723,6 +1723,18 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"
@ -3872,6 +3884,18 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"

View file

@ -2068,6 +2068,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3655,6 +3682,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -560,6 +560,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2671,6 +2674,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6336,6 +6366,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1853,6 +1853,18 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"
@ -4155,6 +4167,18 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"

View file

@ -2202,6 +2202,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3888,6 +3915,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2878,6 +2881,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6771,6 +6801,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2202,6 +2202,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3888,6 +3915,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2878,6 +2881,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6771,6 +6801,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2202,6 +2202,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3888,6 +3915,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2878,6 +2881,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6771,6 +6801,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1742,6 +1742,18 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"
@ -3971,6 +3983,18 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/placement/juce_Justification.h"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"
"../../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"
"../../../../../modules/juce_graphics/unicode/juce_LineBreakTable.inl"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.cpp"
"../../../../../modules/juce_graphics/unicode/juce_Unicode.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBidi.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeGrapheme.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeLine.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeScript.h"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeTestData.cpp"
"../../../../../modules/juce_graphics/unicode/juce_UnicodeUtils.cpp"
"../../../../../modules/juce_graphics/juce_graphics.cpp"
"../../../../../modules/juce_graphics/juce_graphics.mm"
"../../../../../modules/juce_graphics/juce_graphics_Harfbuzz.cpp"

View file

@ -2089,6 +2089,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3753,6 +3780,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -569,6 +569,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2725,6 +2728,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6498,6 +6528,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1271,6 +1271,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2570,6 +2597,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -293,6 +293,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -1669,6 +1672,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -4476,6 +4506,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1271,6 +1271,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2570,6 +2597,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -293,6 +293,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -1669,6 +1672,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -4476,6 +4506,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -1271,6 +1271,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -2570,6 +2597,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -293,6 +293,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -1669,6 +1672,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -4476,6 +4506,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2210,6 +2210,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3984,6 +4011,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2899,6 +2902,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6885,6 +6915,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2210,6 +2210,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3984,6 +4011,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2899,6 +2902,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6885,6 +6915,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2210,6 +2210,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3984,6 +4011,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -602,6 +602,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2899,6 +2902,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6885,6 +6915,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -2088,6 +2088,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3729,6 +3756,9 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_Justification.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h"/>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityActions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\accessibility\enums\juce_AccessibilityEvent.h"/>

View file

@ -563,6 +563,9 @@
<Filter Include="JUCE Modules\juce_graphics\placement">
<UniqueIdentifier>{160D9882-0F68-278D-C5F9-8960FD7421D2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics\unicode">
<UniqueIdentifier>{A4846E15-C7B2-BB61-80BA-E284529F3AAA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_graphics">
<UniqueIdentifier>{4CED05DA-E0A2-E548-F753-1F2EF299A8E3}</UniqueIdentifier>
</Filter>
@ -2722,6 +2725,33 @@
<ClCompile Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.cpp">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBidi.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeBrackets.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeGrapheme.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeLine.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeTestData.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeUtils.cpp">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_graphics\juce_graphics.cpp">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClCompile>
@ -6465,6 +6495,15 @@
<ClInclude Include="..\..\..\..\modules\juce_graphics\placement\juce_RectanglePlacement.h">
<Filter>JUCE Modules\juce_graphics\placement</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_LineBreakTable.inl">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_Unicode.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\unicode\juce_UnicodeScript.h">
<Filter>JUCE Modules\juce_graphics\unicode</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_graphics\juce_graphics.h">
<Filter>JUCE Modules\juce_graphics</Filter>
</ClInclude>

View file

@ -121,6 +121,15 @@
//==============================================================================
#include "fonts/juce_FunctionPointerDestructor.h"
#include "unicode/juce_UnicodeScript.h"
#include "unicode/juce_Unicode.h"
#include "unicode/juce_UnicodeUtils.cpp"
#include "unicode/juce_UnicodeLine.cpp"
#include "unicode/juce_UnicodeScript.cpp"
#include "unicode/juce_UnicodeBrackets.cpp"
#include "unicode/juce_UnicodeBidi.cpp"
#include "unicode/juce_UnicodeGrapheme.cpp"
#include "unicode/juce_Unicode.cpp"
#include "colour/juce_Colour.cpp"
#include "colour/juce_ColourGradient.cpp"
#include "colour/juce_Colours.cpp"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,328 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
Array<Unicode::Codepoint> Unicode::performAnalysis (const String& string)
{
if (string.isEmpty())
return {};
thread_local std::unordered_map<String, Array<Unicode::Codepoint>> cache;
auto& result = cache[string];
if (! result.isEmpty())
return result;
auto analysisBuffer = [&str = std::as_const (string)]
{
std::vector<UnicodeAnalysisPoint> points;
const auto data = str.toUTF32();
const auto length = data.length();
points.reserve (length);
std::transform (data.getAddress(), data.getAddress() + length, std::back_inserter (points), [] (uint32_t cp)
{
UnicodeAnalysisPoint p;
p.character = cp;
p.data = getUnicodeDataForCodepoint (cp);
p.bidi.level = 0;
//#define JUCE_TR9_UPPERCASE_IS_RTL
#if defined (JUCE_TR9_UPPERCASE_IS_RTL)
if (cp >= 65 && cp <= 90)
p.data.bidi = BidiType::al;
#undef JUCE_TR9_UPPERCASE_IS_RTL
#endif
return p;
});
return points;
}();
struct ParagraphIterator
{
explicit ParagraphIterator (Span<UnicodeAnalysisPoint> Span) : data (Span) {}
std::optional<Range<int>> next()
{
const auto start = head;
auto end = start;
if ((size_t) start < data.size())
{
while ((size_t) end < data.size())
{
if (data[(size_t) end].character == 0x2029)
break;
end++;
}
head = end + 1;
return std::make_optional (Range<int> { start, end });
}
return nullopt;
}
Span<UnicodeAnalysisPoint> data;
int head = 0;
};
result.resize ((int) analysisBuffer.size());
for (size_t i = 0; i < analysisBuffer.size(); i++)
result.getReference ((int) i).codepoint = analysisBuffer[i].character;
tr24::analyseScripts (analysisBuffer, [&result] (int index, TextScript script)
{
result.getReference (index).script = script;
});
tr14::analyseLineBreaks (analysisBuffer, [&result] (int index, TextBreakType type)
{
result.getReference ((int) index).breaking = type;
});
ParagraphIterator iter { analysisBuffer };
while (auto range = iter.next())
{
const auto run = Span { analysisBuffer.data() + (size_t) range->getStart(), (size_t) range->getLength() };
const auto bidi = tr9::analyseBidiRun (run);
for (size_t i = 0; i < (size_t) range->getLength(); i++)
{
auto& point = result.getReference ((int) i + range->getStart());
point.direction = bidi.resolvedLevels[i] % 2 == 0 ? TextDirection::ltr : TextDirection::rtl;
point.logicalIndex = (size_t) range->getStart() + i;
point.visualIndex = (size_t) bidi.visualOrder[i];
}
}
return result;
}
// https://unicode-org.github.io/icu/userguide/transforms/bidi.html#logical-order-versus-visual-order
Array<Unicode::Codepoint> Unicode::convertLogicalToVisual (Span<const Unicode::Codepoint> codepoints)
{
Array<Unicode::Codepoint> visual;
visual.resize ((int) codepoints.size());
for (const auto& codepoint : codepoints)
visual.set ((int) codepoint.visualIndex, codepoint);
return visual;
}
bool UnicodeFunctions::isRenderableCharacter (juce_wchar character)
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
switch (getUnicodeDataForCodepoint ((uint32_t) character).bt)
{
case LineBreakType::cr:
case LineBreakType::lf:
case LineBreakType::bk:
case LineBreakType::nl:
case LineBreakType::sp:
case LineBreakType::zw:
case LineBreakType::zwj:
case LineBreakType::cm:
case LineBreakType::cb:
return false;
default: break;
}
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return true;
}
bool UnicodeFunctions::isBreakableWhitespace (juce_wchar character)
{
switch (character)
{
case 0x0020: case 0x1680: case 0x180E: case 0x2000:
case 0x2001: case 0x2002: case 0x2003: case 0x2004:
case 0x2005: case 0x2006: case 0x2007: case 0x2008:
case 0x2009: case 0x200A: case 0x200B: case 0x202F:
case 0x205F: case 0x3000:
return true;
default: break;
}
return false;
}
bool UnicodeFunctions::isEmoji (juce_wchar character)
{
return getEmojiType ((uint32_t) character) != EmojiType::no;
}
bool UnicodeFunctions::shouldVerticalGlyphRotate (juce_wchar character)
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
switch (getUnicodeDataForCodepoint ((uint32_t) character).vertical)
{
case VerticalTransformType::R:
case VerticalTransformType::Tr:
case VerticalTransformType::Tu: return true;
default: break;
}
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return false;
}
//#define JUCE_UNICODE_UNIT_TESTS
#if defined(JUCE_UNIT_TESTS) && defined(JUCE_UNICODE_UNIT_TESTS)
struct LineBreakTests : UnitTest
{
LineBreakTests() : UnitTest ("UnicodeLineBreakTests", UnitTestCategories::unicode)
{
}
void runTest()
{
static const auto data = []
{
using namespace generated;
MemoryInputStream mStream {tr14TestData, sizeof (tr14TestData), false};
GZIPDecompressorInputStream zStream {&mStream, false};
MemoryBlock data {tr14TestDataUncompressedSize, false};
zStream.read (data.getData(), data.getSize());
return std::move (data);
}();
MemoryInputStream stream {data, false};
int testCounter = 0;
while (! stream.isExhausted())
{
uint32_t input[256]{};
bool output[256]{};
const auto inputStringLength = (size_t) stream.readShort();
jassert (inputStringLength < std::size (input));
for (size_t i = 0; i < inputStringLength; i++)
input[i] = (uint32_t) stream.readInt();
for (size_t i = 0; i < inputStringLength + 1; i++)
output[i] = (bool) stream.readBool();
beginTest ("Test " + String (++testCounter));
expect (runTest (Span<const uint32_t> { input, inputStringLength },
Span<const bool> { output, inputStringLength + 1 }));
}
}
static bool runTest (Span<const uint32_t> input, Span<const bool> output)
{
UnicodeAnalysisPoint points[256]{};
bool result[256]{};
std::transform (input.begin(), input.end(), points, [] (uint32_t cp)
{
auto data = getUnicodePointForCodepoint (cp);
return UnicodeAnalysisPoint {cp, data};
});
const auto resultCount = tr14::analyseLineBreaks ({ points, input.size() }, [&result, output] (int index, TextBreakType type)
{
jassert (index <= output.size());
result[index] = type != TextBreakType::noBreak;
});
const auto s = std::equal (output.begin(), output.end(), std::begin (result)) &&
resultCount == output.size();
#if JUCE_DEBUG
if (! s)
{
String expected, actual;
DBG ("Test Failed:");
if (resultCount != output.size())
{
DBG ("\tIncorrect output size. Expected " << output.size() << " got " << resultCount);
jassertfalse;
}
for (size_t i = 0; i < output.size(); i++)
{
expected << (output[i] ? "True" : "False") << " ";
actual << (result[i] ? "True" : "False") << " ";
}
String inputString;
for (auto value : input)
inputString << String::formatted ("%04X ", value);
DBG ("\tInput: { " << inputString << "}");
DBG ("\tOutput: { " << actual << "}");
DBG ("\tExpected: { " << expected << "}");
DBG (tr14::debugString);
jassertfalse;
}
#endif
return s;
}
};
static LineBreakTests lineBreakTests;
#endif
}

View file

@ -0,0 +1,169 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
enum class TextBreakType { none, soft, hard };
enum class TextDirection { ltr, rtl };
struct Unicode
{
struct Codepoint
{
auto getLogicalIndex() const { return logicalIndex; }
auto getVisualIndex() const { return visualIndex; }
uint32_t codepoint;
// Index of the character in the source string
size_t logicalIndex;
size_t visualIndex;
// Breaking characteristics of this codepoint
TextBreakType breaking;
// Direction of this codepoint
TextDirection direction;
// Script class for this codepoint
TextScript script;
};
template <typename Value>
static auto prefix (Span<Value> v, size_t num)
{
return Span { v.data(), std::min (v.size(), num) };
}
template <typename Value>
static auto removePrefix (Span<Value> v, size_t num)
{
const auto increment = std::min (v.size(), num);
return Span { v.data() + increment, v.size() - increment };
}
static Array<Codepoint> performAnalysis (const String&);
static Array<Codepoint> convertLogicalToVisual (Span<const Codepoint>);
template <typename Traits>
struct Iterator
{
using ValueType = typename Traits::ValueType;
Iterator() = default;
explicit Iterator (Span<ValueType> s) : data (s) {}
std::optional<Span<ValueType>> next()
{
if (data.empty())
return {};
const auto breakpoint = std::find_if (data.begin(), data.end(), [&] (const auto& i)
{
return ! Traits::compare (i, data.front());
});
const auto lengthToBreak = (size_t) std::distance (data.begin(), breakpoint) + (Traits::includeBreakingIndex() ? 1 : 0);
const ScopeGuard scope { [&] { data = removePrefix (data, lengthToBreak); } };
return prefix (data, lengthToBreak);
}
private:
Span<ValueType> data;
};
struct BidiTraits
{
using ValueType = const Codepoint;
static bool compare (const Codepoint& t1, const Codepoint& t2)
{
return t1.direction == t2.direction;
}
static bool includeBreakingIndex() { return false; }
};
using BidiRunIterator = Iterator<BidiTraits>;
struct LineTraits
{
using ValueType = const Codepoint;
static bool compare (const Codepoint& t1, const Codepoint&)
{
return t1.breaking != TextBreakType::hard;
}
static bool includeBreakingIndex() { return true; }
};
using LineBreakIterator = Iterator<LineTraits>;
struct WordTraits
{
using ValueType = const Codepoint;
static bool compare (const Codepoint& t1, const Codepoint&)
{
return t1.breaking != TextBreakType::soft;
}
static bool includeBreakingIndex() { return false; }
};
using WordBreakIterator = Iterator<WordTraits>;
struct ScriptTraits
{
using ValueType = const Codepoint;
static bool compare (const Codepoint& t1, const Codepoint& t2)
{
return t1.script == t2.script;
}
static bool includeBreakingIndex() { return false; }
};
using ScriptRunIterator = Iterator<ScriptTraits>;
};
struct UnicodeFunctions
{
static bool isRenderableCharacter (juce_wchar character);
static bool isBreakableWhitespace (juce_wchar character);
static bool isEmoji (juce_wchar character);
static bool shouldVerticalGlyphRotate (juce_wchar character);
};
} // namespace juce

View file

@ -0,0 +1,692 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce::tr9
{
enum EmbeddingLevel
{
left = 0,
right = 1
};
static inline auto isOdd (int level) { return bool (level & 1); }
static inline auto computeLeastEven (int level) { return isOdd (level) ? level + 1 : level + 2; }
static inline auto computeLeastOdd (int level) { return isOdd (level) ? level + 2 : level + 1; }
static inline auto getEmbeddingDirection (int level) { return isOdd (level) ? BidiType::rtl : BidiType::ltr; }
struct Atom final : UnicodeAnalysisPoint
{
auto getCharacter() const { return character; }
auto getType() const { return data.bidi; }
auto getLevel() const { return bidi.level; }
bool isIsolate() const { return isIsolateInitiator() || isIsolateTerminator(); }
bool isIsolateInitiator() const { return any (getType(), BidiType::lri, BidiType::rli, BidiType::fsi); }
bool isIsolateTerminator() const { return any (getType(), BidiType::pdi); }
bool isStrong() const { return any (getType(), BidiType::rtl, BidiType::ltr, BidiType::al); }
bool isNeutral() const { return any (getType(), BidiType::b, BidiType::s, BidiType::ws, BidiType::on); }
bool isWeak() const { return any (getType(), BidiType::en, BidiType::es, BidiType::et, BidiType::an,
BidiType::cs, BidiType::nsm, BidiType::bn); }
operator BidiType() const { return getType(); }
bool operator== (BidiType other) const { return getType() == other; }
bool operator== (Atom other) const { return getType() == other.getType(); }
void setType (BidiType newType) { data.bidi = newType; }
void setLevel (uint16_t newLevel) { bidi.level = newLevel; }
static Atom make (BidiType type)
{
Atom a{};
a.data.bidi = type;
return a;
}
static Atom none()
{
return make (BidiType::none);
}
};
struct RunIterator
{
RunIterator (Span<Atom> span) : data (span) {}
std::optional<Range<int>> next()
{
if (data.size() <= head)
return {};
const auto start = head;
const auto currentLevel = data[start].getLevel();
const auto iter = std::find_if_not (data.begin() + start, data.end(),
[currentLevel] (const Atom& atom)
{
return atom.getLevel() != currentLevel;
});
const auto end = iter != data.end() ? (size_t) std::distance (data.begin(), iter) : data.size();
head = end + 1;
return Range { (int) start, (int) end };
}
private:
Span<Atom> data;
size_t head = 0;
};
template<typename T, int Capacity>
struct FixedStack
{
constexpr FixedStack() = default;
constexpr auto depth() const { return head; }
constexpr bool full() const { return head == Capacity; }
constexpr bool empty() const { return head == 0; }
constexpr void reset() { head = 0; }
void push (T val)
{
jassert (head < Capacity);
data[head++] = val;
}
T pop()
{
jassert (head > 0);
return data[--head];
}
constexpr T operator[] (int index) const { return data[index]; }
constexpr T& peek() { return data[head - 1]; }
constexpr auto begin() const { return data + 0; }
constexpr auto end() const { return data + head; }
private:
T data[(size_t) Capacity] {};
int head {};
JUCE_DECLARE_NON_COPYABLE (FixedStack)
JUCE_DECLARE_NON_MOVEABLE (FixedStack)
};
static inline int resolveParagraphEmbeddingLevel (const Span<Atom> buffer, Range<int> range = {})
{
range = range.isEmpty() ? Range<int> {0, (int) buffer.size()} : range;
auto seek = [buffer] (BidiType type, Range<int> seekRange) -> std::optional<int>
{
for (int i = seekRange.getStart(); i < seekRange.getEnd(); i++)
{
if (buffer[(size_t) i].getType() == type)
return std::make_optional (i);
}
return {};
};
for (int i = range.getStart(); i < range.getEnd(); i++)
{
const auto& atom = buffer[(size_t) i];
if (atom.isStrong())
{
return atom == BidiType::ltr ? EmbeddingLevel::left : EmbeddingLevel::right;
}
else if (atom.isIsolateInitiator())
{
// skip to past matching PDI or EOS
const auto end = seek (BidiType::pdi, { i, range.getEnd() });
i = end.has_value() ? *end + 1 : range.getEnd();
}
}
return EmbeddingLevel::left;
}
static inline void resolveNeutralTypes (Span<Atom> buffer, int embeddingLevel, Range<int> range)
{
range = range.isEmpty() ? Range<int> {0, (int) buffer.size()} : range;
// BD13:
const auto bracketRanges = [buffer, range]
{
struct Bracket
{
int position;
uint32_t character;
BracketType type;
};
FixedStack<Bracket, 64 - 1> stack;
std::vector<Range<int>> brackets;
for (int i = range.getStart(); i < range.getEnd(); i++)
{
const auto& curr = buffer[(size_t) i];
if (curr == BidiType::on)
{
const auto type = getBracketType (curr.getCharacter());
if (type == BracketType::open)
{
if (stack.full())
return brackets;
stack.push ({ i, curr.getCharacter(), BracketType::open });
}
else if (type == BracketType::close)
{
while (! stack.empty())
{
const auto head = stack.pop();
if (head.type == BracketType::open)
{
if (isMatchingBracketPair (head.character, curr.getCharacter()))
{
brackets.push_back ({ head.position, i });
break;
}
}
}
}
}
}
return brackets;
}();
// N0:
for (auto bracketRange : bracketRanges)
{
const auto dir = getEmbeddingDirection (embeddingLevel);
const auto span = Span { buffer.data() + bracketRange.getStart(), (size_t) bracketRange.getLength() };
const auto strong = std::find_if (span.begin(), span.end(), [] (const Atom& atom)
{
return atom.isStrong();
});
// TODO: refactor this
if (strong != span.end())
{
if (strong->getType() == dir)
{
// B:
buffer[(size_t) bracketRange.getStart()].setType (dir);
buffer[(size_t) bracketRange.getEnd()].setType (dir);
}
else
{
// C:
const auto strongContext = [&buf = std::as_const (buffer),
start = bracketRange.getStart(),
dir]
{
for (int i = start; i >= 0; i--)
{
if (buf[(size_t) i].isStrong())
return buf[(size_t) i].getType();
}
return dir;
}();
buffer[(size_t) bracketRange.getStart()].setType (strongContext);
buffer[(size_t) bracketRange.getEnd()].setType (strongContext);
}
}
}
// N1:
for (int i = range.getStart(); i < range.getEnd(); i++)
{
const auto curr = buffer[(size_t) i];
const auto prev = i > 0 ? buffer[(size_t) i - 1] : Atom::none(); // SOS type?
if (curr.isNeutral() || curr.isIsolate())
{
const auto endIndex = [buffer, start = i, end = range.getEnd()]
{
for (int j = start; j < end; j++)
{
const auto atom = buffer[(size_t) j];
if (! (atom.isNeutral() || atom.isIsolate()))
return j;
}
return end - 1;
}();
auto isNumber = [] (BidiType type) { return any (type, BidiType::an, BidiType::en); };
const auto start = isNumber (prev) ? BidiType::rtl : prev.getType();
const auto end = isNumber (buffer[(size_t) endIndex]) ? BidiType::rtl : buffer[(size_t) endIndex].getType();
const auto type = start == end ? start : getEmbeddingDirection (embeddingLevel);
std::for_each (buffer.begin() + i, buffer.begin() + endIndex, [type] (Atom& atom)
{
atom.setType (type);
});
i = endIndex;
}
}
}
static inline void resolveWeakTypes (Span<Atom> buffer, Range<int> range)
{
range = range.isEmpty() ? Range<int> { 0, static_cast<int> (buffer.size()) } : range;
for (int i = range.getStart(); i < range.getEnd(); i++)
{
auto& curr = buffer[(size_t) i];
const auto prev = i > 0 ? buffer[(size_t) i - 1] : Atom::none();
const auto next = i < range.getEnd() - 1 ? buffer[(size_t) i + 1] : Atom::none();
// W1:
if (curr == BidiType::nsm)
curr.setType (prev.isIsolate() ? BidiType::on : prev.getType());
// W2:
else if (curr == BidiType::en)
{
for (int j = i - 1; j >= 1; j--)
{
if (buffer[(size_t) j] == BidiType::al)
curr.setType (BidiType::al);
if (buffer[(size_t) j].isStrong())
break;
}
}
// W3:
else if (curr == BidiType::al)
curr.setType (BidiType::rtl);
// W4:
else if (curr == BidiType::es || curr == BidiType::cs)
{
if (prev == BidiType::en && next == BidiType::en)
{
curr.setType (BidiType::en);
}
else if (curr == BidiType::cs)
{
if (prev == BidiType::an && next == BidiType::an)
curr.setType (BidiType::an);
}
}
// W5:
else if (curr == BidiType::et)
{
//jassertfalse;
if (prev == BidiType::en || next == BidiType::en)
curr.setType (BidiType::en);
}
// W6
if (any (curr.getType(), BidiType::es, BidiType::cs))
curr.setType (BidiType::on);
// W7:
else if (curr == BidiType::en)
{
for (int j = i - 1; j >= 1; j--)
{
if (buffer[(size_t) j] == BidiType::ltr)
curr.setType (BidiType::ltr);
if (buffer[(size_t) j].isStrong())
break;
}
}
}
}
static inline void resolveImplicitTypes (Span<Atom> buffer, int embeddingLevel, Range<int> range)
{
range = range.isEmpty() ? Range<int> { 0, static_cast<int> (buffer.size()) } : range;
// I1, I2
// https://www.unicode.org/reports/tr9/#Resolving_Implicit_Levels
for (int i = range.getStart(); i < range.getEnd(); i++)
{
auto& curr = buffer[(size_t) i];
const auto level = (uint16_t) embeddingLevel;
const auto isEven = isOdd (level) == false;
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
switch (curr.getType())
{
case BidiType::ltr: curr.setLevel (isEven ? level : level + 1); break;
case BidiType::rtl: curr.setLevel (isEven ? level + 1 : level ); break;
case BidiType::an: curr.setLevel (isEven ? level + 2 : level + 1); break;
case BidiType::en: curr.setLevel (isEven ? level + 2 : level + 1); break;
default: break;
}
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
}
}
static inline void resolveExplicitLevels (Span<Atom> buffer, int embeddingLevel)
{
constexpr auto MAX_DEPTH = 126 - 1;
struct State
{
int embeddingLevel;
enum { Neutral, rtl, ltr } directionalOverride;
bool isolateStatus;
};
// X1
struct
{
int isolate = 0;
int embedded = 0;
} overflow {};
FixedStack<State, MAX_DEPTH> stack;
stack.push ({ embeddingLevel, State::Neutral, false });
auto getHead = [&stack] { return &stack.peek(); };
auto save = [&stack] { stack.push (stack.peek()); };
auto restore = [&stack] { stack.pop(); };
auto isValid = [&] (auto value) { return (value < MAX_DEPTH) && (overflow.isolate == 0 && overflow.embedded == 0); };
// X2-X6a
for (size_t i = 0; i < buffer.size(); i++)
{
auto& atom = buffer[i];
// X2-X3: Explicit embeddings
if (atom == BidiType::rle || atom == BidiType::lre)
{
auto* state = getHead();
state->embeddingLevel = atom == BidiType::rle ? computeLeastOdd (state->embeddingLevel)
: computeLeastEven (state->embeddingLevel);
if (isValid (state->embeddingLevel))
{
state->directionalOverride = State::Neutral;
state->isolateStatus = false;
save();
}
else if (overflow.isolate == 0)
{
overflow.embedded++;
}
}
// X4-X5: Explicit Overrides
else if (atom == BidiType::rlo || atom == BidiType::lro)
{
auto* state = getHead();
state->embeddingLevel = atom == BidiType::rlo ? computeLeastOdd (state->embeddingLevel)
: computeLeastEven (state->embeddingLevel);
if (isValid (state->embeddingLevel))
{
state->directionalOverride = atom == BidiType::rlo ? State::rtl : State::ltr;
state->isolateStatus = false;
save();
}
else if (overflow.isolate == 0)
{
overflow.embedded++;
}
}
// X5a-X5b: Isolates
else if (atom == BidiType::rli || atom == BidiType::lri)
{
auto* state = getHead();
state->embeddingLevel = atom == BidiType::rli ? computeLeastOdd (state->embeddingLevel)
: computeLeastEven (state->embeddingLevel);
if (state->directionalOverride == State::ltr)
atom.setType (BidiType::ltr);
else if (state->directionalOverride == State::rtl)
atom.setType (BidiType::rtl);
if (isValid (state->embeddingLevel))
{
state->directionalOverride = State::Neutral;
state->isolateStatus = true;
save();
}
else
{
overflow.isolate++;
}
}
// X5c
else if (atom == BidiType::fsi)
{
//auto pEmbedLevel = resolveParagraphEmbeddingLevel(buffer, { i + 1, (int) buffer.size() });
jassertfalse;
}
// X6a: Terminating Isolates
else if (atom == BidiType::pdi)
{
if (overflow.isolate > 0)
{
overflow.isolate--;
}
else
{
overflow.embedded = 0;
while (! getHead()->isolateStatus)
restore();
restore();
}
atom.setLevel ((uint16_t) getHead()->embeddingLevel);
}
// X7
else if (atom == BidiType::pdf)
{
if (overflow.isolate > 0)
{
// Maybe???
overflow.isolate--;
}
else if (overflow.embedded > 0)
{
overflow.embedded--;
}
else if (getHead()->isolateStatus == false && stack.depth() >= 2)
{
restore();
}
}
// X8
else if (atom == BidiType::b)
{
atom.setLevel ((uint16_t) getHead()->embeddingLevel);
overflow.embedded = 0;
overflow.isolate = 0;
stack.reset();
stack.push ({ embeddingLevel, State::Neutral, false });
}
// X6: Everything else
// ! (B | BN | RLE | LRE | RLO | LRO | PDF | RLI | LRI | FSI | PDI)
else
{
auto* head = getHead();
atom.setLevel ((uint16_t) head->embeddingLevel);
}
}
}
static inline std::vector<int> resolveReorderedIndices (const Span<Atom> buffer, int embeddingLevel, Range<int> range = {})
{
range = range.isEmpty() ? Range<int> { 0, static_cast<int> (buffer.size()) } : range;
std::vector<int> levels;
levels.resize ((size_t) range.getLength());
for (int i = range.getStart(); i < range.getEnd(); i++)
levels[(size_t) i] = buffer[(size_t) i].getLevel();
// L1:
for (int i = range.getStart(); i < range.getEnd(); i++)
{
auto curr = buffer[(size_t) i];
if (any<BidiType> (curr, BidiType::s, BidiType::b))
levels[(size_t) i] = embeddingLevel;
for (int j = i - 1; j >= 0; j--)
{
curr = buffer[(size_t) j];
if (! curr.isIsolate())
break;
levels[(size_t) j] = embeddingLevel;
}
}
// TODO: line breaks
// L2:
std::vector<int> reordered;
reordered.resize ((size_t) range.getLength());
std::iota (reordered.begin(), reordered.end(), 0);
const auto high = *std::max_element (levels.begin(), levels.end());
for (int level = high; level > 0; level--)
{
for (int i = 0; i < range.getLength(); i++)
{
const auto indexLevel = levels[(size_t) i];
if (level > 0 && (indexLevel >= level))
{
// Find the longest consecutive run of the current level and above
// 1111 = 4
// 1001 = 1
// 1123 = 4
const auto start = i;
const auto end = [start, levels, level]
{
auto e = (size_t) start + 1;
while (e < levels.size() && levels[e] >= level)
e++;
return e;
}();
std::reverse (reordered.begin() + start, reordered.begin() + (int) end);
i = (int) end;
}
}
}
return reordered;
}
struct BidiOutput
{
int embeddedingLevel = -1;
std::vector<int> resolvedLevels;
std::vector<int> visualOrder;
};
static BidiOutput analyseBidiRun (Span<UnicodeAnalysisPoint> buffer, std::optional<bool> rtlOverride = std::nullopt)
{
auto stream = Span {(Atom*) buffer.data(), buffer.size()};
// BD1
const auto baseLevel = rtlOverride.has_value() ? *rtlOverride ? 1 : 0
: resolveParagraphEmbeddingLevel (stream);
std::for_each (stream.begin(), stream.end(), [baseLevel] (Atom& atom)
{
atom.setLevel ((uint16_t) baseLevel);
});
resolveExplicitLevels (stream, baseLevel);
// X9 replace override characters
const auto pred = [] (auto atom) { return any (atom.getType(), BidiType::rle, BidiType::lre,
BidiType::lro, BidiType::rlo,
BidiType::pdf); };
std::replace_if (stream.begin(), stream.end(), pred, Atom::make (BidiType::bn));
//buffer.erase (remove_if (stream.begin(), stream.end(), pred), stream.end());
// W1-W7
resolveWeakTypes (stream, {});
// N0-N2
resolveNeutralTypes (stream, baseLevel, {});
// I1-I2
resolveImplicitTypes (stream, baseLevel, {});
BidiOutput output;
output.embeddedingLevel = baseLevel;
for (const auto& atom : stream)
output.resolvedLevels.push_back (atom.getLevel());
output.visualOrder = resolveReorderedIndices (stream, baseLevel, {});
return output;
}
} // namespace juce::tr9

View file

@ -0,0 +1,451 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
enum class BracketType
{
none,
open,
close
};
static inline BracketType getBracketType (uint32_t cp)
{
#define OPEN(code) case code: return BracketType::open
#define CLOSE(code) case code: return BracketType::close
switch (cp)
{
OPEN(0x0028);
CLOSE(0x0029);
OPEN(0x005B);
CLOSE(0x005D);
OPEN(0x007B);
CLOSE(0x007D);
OPEN(0x0F3A);
CLOSE(0x0F3B);
OPEN(0x0F3C);
CLOSE(0x0F3D);
OPEN(0x169B);
CLOSE(0x169C);
OPEN(0x2045);
CLOSE(0x2046);
OPEN(0x207D);
CLOSE(0x207E);
OPEN(0x208D);
CLOSE(0x208E);
OPEN(0x2308);
CLOSE(0x2309);
OPEN(0x230A);
CLOSE(0x230B);
OPEN(0x2329);
CLOSE(0x232A);
OPEN(0x2768);
CLOSE(0x2769);
OPEN(0x276A);
CLOSE(0x276B);
OPEN(0x276C);
CLOSE(0x276D);
OPEN(0x276E);
CLOSE(0x276F);
OPEN(0x2770);
CLOSE(0x2771);
OPEN(0x2772);
CLOSE(0x2773);
OPEN(0x2774);
CLOSE(0x2775);
OPEN(0x27C5);
CLOSE(0x27C6);
OPEN(0x27E6);
CLOSE(0x27E7);
OPEN(0x27E8);
CLOSE(0x27E9);
OPEN(0x27EA);
CLOSE(0x27EB);
OPEN(0x27EC);
CLOSE(0x27ED);
OPEN(0x27EE);
CLOSE(0x27EF);
OPEN(0x2983);
CLOSE(0x2984);
OPEN(0x2985);
CLOSE(0x2986);
OPEN(0x2987);
CLOSE(0x2988);
OPEN(0x2989);
CLOSE(0x298A);
OPEN(0x298B);
CLOSE(0x298C);
OPEN(0x298D);
CLOSE(0x298E);
OPEN(0x298F);
CLOSE(0x2990);
OPEN(0x2991);
CLOSE(0x2992);
OPEN(0x2993);
CLOSE(0x2994);
OPEN(0x2995);
CLOSE(0x2996);
OPEN(0x2997);
CLOSE(0x2998);
OPEN(0x29D8);
CLOSE(0x29D9);
OPEN(0x29DA);
CLOSE(0x29DB);
OPEN(0x29FC);
CLOSE(0x29FD);
OPEN(0x2E22);
CLOSE(0x2E23);
OPEN(0x2E24);
CLOSE(0x2E25);
OPEN(0x2E26);
CLOSE(0x2E27);
OPEN(0x2E28);
CLOSE(0x2E29);
OPEN(0x2E55);
CLOSE(0x2E56);
OPEN(0x2E57);
CLOSE(0x2E58);
OPEN(0x2E59);
CLOSE(0x2E5A);
OPEN(0x2E5B);
CLOSE(0x2E5C);
OPEN(0x3008);
CLOSE(0x3009);
OPEN(0x300A);
CLOSE(0x300B);
OPEN(0x300C);
CLOSE(0x300D);
OPEN(0x300E);
CLOSE(0x300F);
OPEN(0x3010);
CLOSE(0x3011);
OPEN(0x3014);
CLOSE(0x3015);
OPEN(0x3016);
CLOSE(0x3017);
OPEN(0x3018);
CLOSE(0x3019);
OPEN(0x301A);
CLOSE(0x301B);
OPEN(0xFE59);
CLOSE(0xFE5A);
OPEN(0xFE5B);
CLOSE(0xFE5C);
OPEN(0xFE5D);
CLOSE(0xFE5E);
OPEN(0xFF08);
CLOSE(0xFF09);
OPEN(0xFF3B);
CLOSE(0xFF3D);
OPEN(0xFF5B);
CLOSE(0xFF5D);
OPEN(0xFF5F);
CLOSE(0xFF60);
OPEN(0xFF62);
CLOSE(0xFF63);
}
#undef OPEN
#undef CLOSE
return BracketType::none;
}
static inline auto isMatchingBracketPair (uint32_t b1, uint32_t b2)
{
// TODO: remove duplicates
if (b1 == 0x0028 && b2 == 0x0029) return true;
if (b1 == 0x0029 && b2 == 0x0028) return true;
if (b1 == 0x0029 && b2 == 0x0028) return true;
if (b1 == 0x0028 && b2 == 0x0029) return true;
if (b1 == 0x005B && b2 == 0x005D) return true;
if (b1 == 0x005D && b2 == 0x005B) return true;
if (b1 == 0x005D && b2 == 0x005B) return true;
if (b1 == 0x005B && b2 == 0x005D) return true;
if (b1 == 0x007B && b2 == 0x007D) return true;
if (b1 == 0x007D && b2 == 0x007B) return true;
if (b1 == 0x007D && b2 == 0x007B) return true;
if (b1 == 0x007B && b2 == 0x007D) return true;
if (b1 == 0x0F3A && b2 == 0x0F3B) return true;
if (b1 == 0x0F3B && b2 == 0x0F3A) return true;
if (b1 == 0x0F3B && b2 == 0x0F3A) return true;
if (b1 == 0x0F3A && b2 == 0x0F3B) return true;
if (b1 == 0x0F3C && b2 == 0x0F3D) return true;
if (b1 == 0x0F3D && b2 == 0x0F3C) return true;
if (b1 == 0x0F3D && b2 == 0x0F3C) return true;
if (b1 == 0x0F3C && b2 == 0x0F3D) return true;
if (b1 == 0x169B && b2 == 0x169C) return true;
if (b1 == 0x169C && b2 == 0x169B) return true;
if (b1 == 0x169C && b2 == 0x169B) return true;
if (b1 == 0x169B && b2 == 0x169C) return true;
if (b1 == 0x2045 && b2 == 0x2046) return true;
if (b1 == 0x2046 && b2 == 0x2045) return true;
if (b1 == 0x2046 && b2 == 0x2045) return true;
if (b1 == 0x2045 && b2 == 0x2046) return true;
if (b1 == 0x207D && b2 == 0x207E) return true;
if (b1 == 0x207E && b2 == 0x207D) return true;
if (b1 == 0x207E && b2 == 0x207D) return true;
if (b1 == 0x207D && b2 == 0x207E) return true;
if (b1 == 0x208D && b2 == 0x208E) return true;
if (b1 == 0x208E && b2 == 0x208D) return true;
if (b1 == 0x208E && b2 == 0x208D) return true;
if (b1 == 0x208D && b2 == 0x208E) return true;
if (b1 == 0x2308 && b2 == 0x2309) return true;
if (b1 == 0x2309 && b2 == 0x2308) return true;
if (b1 == 0x2309 && b2 == 0x2308) return true;
if (b1 == 0x2308 && b2 == 0x2309) return true;
if (b1 == 0x230A && b2 == 0x230B) return true;
if (b1 == 0x230B && b2 == 0x230A) return true;
if (b1 == 0x230B && b2 == 0x230A) return true;
if (b1 == 0x230A && b2 == 0x230B) return true;
if (b1 == 0x2329 && b2 == 0x232A) return true;
if (b1 == 0x232A && b2 == 0x2329) return true;
if (b1 == 0x232A && b2 == 0x2329) return true;
if (b1 == 0x2329 && b2 == 0x232A) return true;
if (b1 == 0x2768 && b2 == 0x2769) return true;
if (b1 == 0x2769 && b2 == 0x2768) return true;
if (b1 == 0x2769 && b2 == 0x2768) return true;
if (b1 == 0x2768 && b2 == 0x2769) return true;
if (b1 == 0x276A && b2 == 0x276B) return true;
if (b1 == 0x276B && b2 == 0x276A) return true;
if (b1 == 0x276B && b2 == 0x276A) return true;
if (b1 == 0x276A && b2 == 0x276B) return true;
if (b1 == 0x276C && b2 == 0x276D) return true;
if (b1 == 0x276D && b2 == 0x276C) return true;
if (b1 == 0x276D && b2 == 0x276C) return true;
if (b1 == 0x276C && b2 == 0x276D) return true;
if (b1 == 0x276E && b2 == 0x276F) return true;
if (b1 == 0x276F && b2 == 0x276E) return true;
if (b1 == 0x276F && b2 == 0x276E) return true;
if (b1 == 0x276E && b2 == 0x276F) return true;
if (b1 == 0x2770 && b2 == 0x2771) return true;
if (b1 == 0x2771 && b2 == 0x2770) return true;
if (b1 == 0x2771 && b2 == 0x2770) return true;
if (b1 == 0x2770 && b2 == 0x2771) return true;
if (b1 == 0x2772 && b2 == 0x2773) return true;
if (b1 == 0x2773 && b2 == 0x2772) return true;
if (b1 == 0x2773 && b2 == 0x2772) return true;
if (b1 == 0x2772 && b2 == 0x2773) return true;
if (b1 == 0x2774 && b2 == 0x2775) return true;
if (b1 == 0x2775 && b2 == 0x2774) return true;
if (b1 == 0x2775 && b2 == 0x2774) return true;
if (b1 == 0x2774 && b2 == 0x2775) return true;
if (b1 == 0x27C5 && b2 == 0x27C6) return true;
if (b1 == 0x27C6 && b2 == 0x27C5) return true;
if (b1 == 0x27C6 && b2 == 0x27C5) return true;
if (b1 == 0x27C5 && b2 == 0x27C6) return true;
if (b1 == 0x27E6 && b2 == 0x27E7) return true;
if (b1 == 0x27E7 && b2 == 0x27E6) return true;
if (b1 == 0x27E7 && b2 == 0x27E6) return true;
if (b1 == 0x27E6 && b2 == 0x27E7) return true;
if (b1 == 0x27E8 && b2 == 0x27E9) return true;
if (b1 == 0x27E9 && b2 == 0x27E8) return true;
if (b1 == 0x27E9 && b2 == 0x27E8) return true;
if (b1 == 0x27E8 && b2 == 0x27E9) return true;
if (b1 == 0x27EA && b2 == 0x27EB) return true;
if (b1 == 0x27EB && b2 == 0x27EA) return true;
if (b1 == 0x27EB && b2 == 0x27EA) return true;
if (b1 == 0x27EA && b2 == 0x27EB) return true;
if (b1 == 0x27EC && b2 == 0x27ED) return true;
if (b1 == 0x27ED && b2 == 0x27EC) return true;
if (b1 == 0x27ED && b2 == 0x27EC) return true;
if (b1 == 0x27EC && b2 == 0x27ED) return true;
if (b1 == 0x27EE && b2 == 0x27EF) return true;
if (b1 == 0x27EF && b2 == 0x27EE) return true;
if (b1 == 0x27EF && b2 == 0x27EE) return true;
if (b1 == 0x27EE && b2 == 0x27EF) return true;
if (b1 == 0x2983 && b2 == 0x2984) return true;
if (b1 == 0x2984 && b2 == 0x2983) return true;
if (b1 == 0x2984 && b2 == 0x2983) return true;
if (b1 == 0x2983 && b2 == 0x2984) return true;
if (b1 == 0x2985 && b2 == 0x2986) return true;
if (b1 == 0x2986 && b2 == 0x2985) return true;
if (b1 == 0x2986 && b2 == 0x2985) return true;
if (b1 == 0x2985 && b2 == 0x2986) return true;
if (b1 == 0x2987 && b2 == 0x2988) return true;
if (b1 == 0x2988 && b2 == 0x2987) return true;
if (b1 == 0x2988 && b2 == 0x2987) return true;
if (b1 == 0x2987 && b2 == 0x2988) return true;
if (b1 == 0x2989 && b2 == 0x298A) return true;
if (b1 == 0x298A && b2 == 0x2989) return true;
if (b1 == 0x298A && b2 == 0x2989) return true;
if (b1 == 0x2989 && b2 == 0x298A) return true;
if (b1 == 0x298B && b2 == 0x298C) return true;
if (b1 == 0x298C && b2 == 0x298B) return true;
if (b1 == 0x298C && b2 == 0x298B) return true;
if (b1 == 0x298B && b2 == 0x298C) return true;
if (b1 == 0x298D && b2 == 0x2990) return true;
if (b1 == 0x2990 && b2 == 0x298D) return true;
if (b1 == 0x298E && b2 == 0x298F) return true;
if (b1 == 0x298F && b2 == 0x298E) return true;
if (b1 == 0x298F && b2 == 0x298E) return true;
if (b1 == 0x298E && b2 == 0x298F) return true;
if (b1 == 0x2990 && b2 == 0x298D) return true;
if (b1 == 0x298D && b2 == 0x2990) return true;
if (b1 == 0x2991 && b2 == 0x2992) return true;
if (b1 == 0x2992 && b2 == 0x2991) return true;
if (b1 == 0x2992 && b2 == 0x2991) return true;
if (b1 == 0x2991 && b2 == 0x2992) return true;
if (b1 == 0x2993 && b2 == 0x2994) return true;
if (b1 == 0x2994 && b2 == 0x2993) return true;
if (b1 == 0x2994 && b2 == 0x2993) return true;
if (b1 == 0x2993 && b2 == 0x2994) return true;
if (b1 == 0x2995 && b2 == 0x2996) return true;
if (b1 == 0x2996 && b2 == 0x2995) return true;
if (b1 == 0x2996 && b2 == 0x2995) return true;
if (b1 == 0x2995 && b2 == 0x2996) return true;
if (b1 == 0x2997 && b2 == 0x2998) return true;
if (b1 == 0x2998 && b2 == 0x2997) return true;
if (b1 == 0x2998 && b2 == 0x2997) return true;
if (b1 == 0x2997 && b2 == 0x2998) return true;
if (b1 == 0x29D8 && b2 == 0x29D9) return true;
if (b1 == 0x29D9 && b2 == 0x29D8) return true;
if (b1 == 0x29D9 && b2 == 0x29D8) return true;
if (b1 == 0x29D8 && b2 == 0x29D9) return true;
if (b1 == 0x29DA && b2 == 0x29DB) return true;
if (b1 == 0x29DB && b2 == 0x29DA) return true;
if (b1 == 0x29DB && b2 == 0x29DA) return true;
if (b1 == 0x29DA && b2 == 0x29DB) return true;
if (b1 == 0x29FC && b2 == 0x29FD) return true;
if (b1 == 0x29FD && b2 == 0x29FC) return true;
if (b1 == 0x29FD && b2 == 0x29FC) return true;
if (b1 == 0x29FC && b2 == 0x29FD) return true;
if (b1 == 0x2E22 && b2 == 0x2E23) return true;
if (b1 == 0x2E23 && b2 == 0x2E22) return true;
if (b1 == 0x2E23 && b2 == 0x2E22) return true;
if (b1 == 0x2E22 && b2 == 0x2E23) return true;
if (b1 == 0x2E24 && b2 == 0x2E25) return true;
if (b1 == 0x2E25 && b2 == 0x2E24) return true;
if (b1 == 0x2E25 && b2 == 0x2E24) return true;
if (b1 == 0x2E24 && b2 == 0x2E25) return true;
if (b1 == 0x2E26 && b2 == 0x2E27) return true;
if (b1 == 0x2E27 && b2 == 0x2E26) return true;
if (b1 == 0x2E27 && b2 == 0x2E26) return true;
if (b1 == 0x2E26 && b2 == 0x2E27) return true;
if (b1 == 0x2E28 && b2 == 0x2E29) return true;
if (b1 == 0x2E29 && b2 == 0x2E28) return true;
if (b1 == 0x2E29 && b2 == 0x2E28) return true;
if (b1 == 0x2E28 && b2 == 0x2E29) return true;
if (b1 == 0x2E55 && b2 == 0x2E56) return true;
if (b1 == 0x2E56 && b2 == 0x2E55) return true;
if (b1 == 0x2E56 && b2 == 0x2E55) return true;
if (b1 == 0x2E55 && b2 == 0x2E56) return true;
if (b1 == 0x2E57 && b2 == 0x2E58) return true;
if (b1 == 0x2E58 && b2 == 0x2E57) return true;
if (b1 == 0x2E58 && b2 == 0x2E57) return true;
if (b1 == 0x2E57 && b2 == 0x2E58) return true;
if (b1 == 0x2E59 && b2 == 0x2E5A) return true;
if (b1 == 0x2E5A && b2 == 0x2E59) return true;
if (b1 == 0x2E5A && b2 == 0x2E59) return true;
if (b1 == 0x2E59 && b2 == 0x2E5A) return true;
if (b1 == 0x2E5B && b2 == 0x2E5C) return true;
if (b1 == 0x2E5C && b2 == 0x2E5B) return true;
if (b1 == 0x2E5C && b2 == 0x2E5B) return true;
if (b1 == 0x2E5B && b2 == 0x2E5C) return true;
if (b1 == 0x3008 && b2 == 0x3009) return true;
if (b1 == 0x3009 && b2 == 0x3008) return true;
if (b1 == 0x3009 && b2 == 0x3008) return true;
if (b1 == 0x3008 && b2 == 0x3009) return true;
if (b1 == 0x300A && b2 == 0x300B) return true;
if (b1 == 0x300B && b2 == 0x300A) return true;
if (b1 == 0x300B && b2 == 0x300A) return true;
if (b1 == 0x300A && b2 == 0x300B) return true;
if (b1 == 0x300C && b2 == 0x300D) return true;
if (b1 == 0x300D && b2 == 0x300C) return true;
if (b1 == 0x300D && b2 == 0x300C) return true;
if (b1 == 0x300C && b2 == 0x300D) return true;
if (b1 == 0x300E && b2 == 0x300F) return true;
if (b1 == 0x300F && b2 == 0x300E) return true;
if (b1 == 0x300F && b2 == 0x300E) return true;
if (b1 == 0x300E && b2 == 0x300F) return true;
if (b1 == 0x3010 && b2 == 0x3011) return true;
if (b1 == 0x3011 && b2 == 0x3010) return true;
if (b1 == 0x3011 && b2 == 0x3010) return true;
if (b1 == 0x3010 && b2 == 0x3011) return true;
if (b1 == 0x3014 && b2 == 0x3015) return true;
if (b1 == 0x3015 && b2 == 0x3014) return true;
if (b1 == 0x3015 && b2 == 0x3014) return true;
if (b1 == 0x3014 && b2 == 0x3015) return true;
if (b1 == 0x3016 && b2 == 0x3017) return true;
if (b1 == 0x3017 && b2 == 0x3016) return true;
if (b1 == 0x3017 && b2 == 0x3016) return true;
if (b1 == 0x3016 && b2 == 0x3017) return true;
if (b1 == 0x3018 && b2 == 0x3019) return true;
if (b1 == 0x3019 && b2 == 0x3018) return true;
if (b1 == 0x3019 && b2 == 0x3018) return true;
if (b1 == 0x3018 && b2 == 0x3019) return true;
if (b1 == 0x301A && b2 == 0x301B) return true;
if (b1 == 0x301B && b2 == 0x301A) return true;
if (b1 == 0x301B && b2 == 0x301A) return true;
if (b1 == 0x301A && b2 == 0x301B) return true;
if (b1 == 0xFE59 && b2 == 0xFE5A) return true;
if (b1 == 0xFE5A && b2 == 0xFE59) return true;
if (b1 == 0xFE5A && b2 == 0xFE59) return true;
if (b1 == 0xFE59 && b2 == 0xFE5A) return true;
if (b1 == 0xFE5B && b2 == 0xFE5C) return true;
if (b1 == 0xFE5C && b2 == 0xFE5B) return true;
if (b1 == 0xFE5C && b2 == 0xFE5B) return true;
if (b1 == 0xFE5B && b2 == 0xFE5C) return true;
if (b1 == 0xFE5D && b2 == 0xFE5E) return true;
if (b1 == 0xFE5E && b2 == 0xFE5D) return true;
if (b1 == 0xFE5E && b2 == 0xFE5D) return true;
if (b1 == 0xFE5D && b2 == 0xFE5E) return true;
if (b1 == 0xFF08 && b2 == 0xFF09) return true;
if (b1 == 0xFF09 && b2 == 0xFF08) return true;
if (b1 == 0xFF09 && b2 == 0xFF08) return true;
if (b1 == 0xFF08 && b2 == 0xFF09) return true;
if (b1 == 0xFF3B && b2 == 0xFF3D) return true;
if (b1 == 0xFF3D && b2 == 0xFF3B) return true;
if (b1 == 0xFF3D && b2 == 0xFF3B) return true;
if (b1 == 0xFF3B && b2 == 0xFF3D) return true;
if (b1 == 0xFF5B && b2 == 0xFF5D) return true;
if (b1 == 0xFF5D && b2 == 0xFF5B) return true;
if (b1 == 0xFF5D && b2 == 0xFF5B) return true;
if (b1 == 0xFF5B && b2 == 0xFF5D) return true;
if (b1 == 0xFF5F && b2 == 0xFF60) return true;
if (b1 == 0xFF60 && b2 == 0xFF5F) return true;
if (b1 == 0xFF60 && b2 == 0xFF5F) return true;
if (b1 == 0xFF5F && b2 == 0xFF60) return true;
if (b1 == 0xFF62 && b2 == 0xFF63) return true;
if (b1 == 0xFF63 && b2 == 0xFF62) return true;
if (b1 == 0xFF63 && b2 == 0xFF62) return true;
if (b1 == 0xFF62 && b2 == 0xFF63) return true;
return false;
}
} // namespace juce

View file

@ -0,0 +1,782 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma pack(push, 8)
struct UnicodeEntry
{
LineBreakType bt;
EastAsianWidthType asian;
BidiType bidi;
UnicodeTextScript script;
VerticalTransformType vertical;
EmojiType emoji;
};
#pragma pack(pop)
static const int uncompressedUnicodeDataSize = 6684666;
static const uint8_t compressedUnicodeData[] =
{
0x78,0x9c,0xec,0xdd,0x09,0x9b,0x23,0xdb,0x79,0x10,0xe0,0x23,0x75,0xab,0xaf,0xc6,0x33,0xd5,0xf6,0xf8,0x66,0x12,0xc7,0xd7,
0x63,0x4f,0xcf,0xcc,0x8d,0x93,0x21,0x09,0x4b,0x02,0x0e,0xc1,0x06,0x12,0xc2,0xbe,0xef,0xe0,0x6b,0x13,0x42,0x20,0x10,0x12,
0x1c,0x02,0x18,0x12,0xc2,0x12,0x42,0x48,0xec,0x10,0xb6,0xb0,0xef,0xfc,0x54,0x4a,0x55,0x2d,0xf5,0x51,0x95,0xaa,0x54,0x9b,
0xa4,0x23,0xf5,0xfb,0x3c,0x57,0xef,0xad,0xe7,0xd4,0xa9,0xaf,0xbe,0xfa,0xce,0xa9,0x52,0x95,0xd4,0xdd,0x33,0x0f,0x4f,0x42,
0xb8,0x99,0xf7,0x34,0x0b,0x4f,0x73,0x17,0xe1,0x63,0xb9,0xb3,0x62,0x79,0x16,0x9e,0xe5,0x5e,0x15,0x2d,0x7d,0xa3,0x75,0xf3,
0x63,0x35,0x57,0xfb,0x7d,0x6f,0xb6,0xda,0xef,0x8b,0x59,0x96,0xfb,0x61,0x61,0x98,0xdd,0x84,0x70,0xfd,0x76,0xe5,0xcd,0x9b,
0xc2,0x10,0xad,0x7d,0x5d,0xf8,0xc9,0xfb,0x9e,0x59,0xd1,0x73,0x91,0x2f,0x7f,0x30,0x7b,0x2f,0xf7,0xdb,0xa3,0xe5,0xef,0x2a,
0xbc,0x9b,0x5d,0xe5,0x7d,0x86,0x59,0xc6,0xf9,0xe0,0x61,0x5f,0x5b,0xbe,0xd8,0x6a,0xc9,0xcb,0x97,0xa8,0x65,0xc5,0xde,0x56,
0xeb,0x56,0xf1,0xf4,0x79,0xb6,0xe7,0x9f,0x15,0x3e,0x8f,0x72,0xee,0x32,0xeb,0x6e,0x0e,0x38,0x9f,0xa7,0xf1,0x3a,0xac,0xe6,
0xd8,0xeb,0x79,0xb6,0x99,0xed,0xe5,0xcc,0x7f,0x3b,0x7f,0x58,0x2e,0x8f,0xf7,0x69,0xde,0x67,0x56,0x98,0xb7,0x84,0x7c,0x79,
0xf1,0x74,0xbe,0xaa,0xcf,0x87,0xe1,0xa1,0x26,0xd9,0x7c,0x15,0x33,0xac,0x7a,0x2e,0xca,0x96,0x37,0xf3,0x75,0xb4,0xd5,0xb6,
0x57,0x45,0x9c,0x95,0xb7,0xf7,0x71,0xc2,0x7d,0xe4,0xaa,0x65,0xcf,0x87,0xf8,0x0f,0x7b,0x5f,0xfb,0x7a,0x1d,0xe1,0xd9,0x5e,
0xe7,0x1d,0xfa,0x8c,0xde,0xb6,0xcc,0xaa,0x53,0xff,0x79,0x83,0x5d,0x72,0x68,0xda,0xaa,0x29,0x4e,0x97,0x3e,0xf5,0xfc,0x9b,
0xe2,0x37,0xd5,0x64,0x4c,0x85,0xfb,0x8e,0x42,0xdf,0x7d,0x8d,0xcf,0xad,0x7d,0x8c,0x86,0x8d,0xf8,0xf8,0x6c,0xdb,0x67,0x51,
0x7b,0xb6,0x7d,0xb7,0xea,0x52,0x87,0x43,0x8f,0xfe,0x98,0xfa,0x93,0x7d,0xe7,0xdb,0xe1,0x96,0xc9,0xf3,0xf2,0x98,0xef,0xef,
0x64,0x58,0x3f,0x65,0x14,0x2d,0x9d,0x8d,0xb6,0x9a,0x67,0x95,0x96,0xf2,0xc9,0xe2,0x36,0xd4,0x9f,0x35,0xaa,0xed,0xdb,0x5b,
0x35,0xc4,0x6f,0x70,0xd7,0xb3,0x4c,0x75,0x6d,0xb9,0x7c,0xdb,0xe9,0xf9,0x65,0xcf,0x1e,0x7f,0x7a,0xf6,0x60,0xad,0x62,0xfb,
0xb3,0x1d,0xef,0x7c,0xbe,0x9c,0xf1,0x12,0xbd,0x3e,0x40,0xb4,0x2e,0x4e,0x7b,0x14,0xf9,0x99,0x70,0xbb,0xdb,0xfb,0x39,0x5c,
0x69,0x7f,0x57,0x9c,0x3b,0xef,0xd6,0x57,0x95,0x9d,0xdb,0x7e,0xb0,0x3e,0xcb,0x2a,0xfd,0xb7,0xb7,0xcd,0xa2,0xbd,0x84,0xda,
0x72,0x75,0x8f,0xf5,0xe5,0x2d,0xe7,0xc7,0xf0,0x7e,0xef,0xdd,0xb7,0x6a,0xac,0xed,0x69,0xf2,0xef,0xbd,0xaf,0xee,0xf9,0x1f,
0xcb,0x9f,0x39,0x80,0x1d,0xf6,0x5b,0x3d,0x0b,0x7a,0xf9,0x51,0x51,0xcf,0x8f,0x36,0xcb,0xd3,0x3a,0xe7,0x49,0x3d,0xf4,0xf8,
0x5e,0x9c,0xf3,0xb0,0x8c,0x9d,0x45,0x56,0xd6,0xa6,0x90,0x2d,0xc9,0xc3,0xb9,0xb9,0xa3,0xfb,0xea,0xa5,0x5b,0xb9,0x73,0x3e,
0x79,0x3e,0x29,0xfb,0x41,0x61,0x16,0xb2,0x5a,0xdd,0xb2,0xaf,0xae,0x7d,0x1b,0x6e,0x8a,0xb5,0xb3,0xe2,0xbb,0xda,0xe5,0x57,
0xb8,0x36,0x0b,0xb3,0xcd,0x72,0x88,0x96,0x9b,0x5a,0x5e,0x44,0x2d,0x65,0x3d,0xbb,0xfb,0xa9,0x62,0xdb,0x94,0xed,0x9b,0x79,
0x88,0xec,0x5b,0x8d,0xba,0x21,0x5c,0x5f,0xb5,0x5a,0xce,0xea,0xab,0x07,0xe7,0xb9,0x6f,0x56,0x3f,0xea,0xb3,0x71,0xd5,0xf2,
0x41,0xf1,0x73,0x08,0x1f,0x14,0xcb,0x71,0xff,0x7c,0xd4,0x46,0xfa,0x22,0xbf,0x79,0x5d,0x2d,0xcf,0xcb,0xe5,0xd8,0xb0,0xce,
0xe7,0xac,0x1d,0x79,0x14,0x95,0x7b,0xd4,0x61,0x0e,0x1e,0x9d,0xbb,0x62,0x9e,0x0c,0xb3,0x9c,0x3f,0x71,0x4b,0xd3,0xd1,0x9d,
0x7c,0x8c,0x78,0x61,0xbe,0xd8,0x9e,0x63,0x1d,0x8d,0xaf,0x87,0xdd,0xfa,0xef,0xde,0x4b,0x7b,0x84,0x78,0xab,0xbb,0x70,0x35,
0xd8,0x8e,0xd5,0xf8,0xd7,0x53,0xfb,0x6e,0x7d,0x4d,0xdb,0xb4,0xe4,0xc7,0x35,0xf9,0x5e,0x8e,0x63,0x99,0x79,0xca,0x96,0xd5,
0xae,0xd7,0x7c,0xe3,0xc9,0xcf,0xb5,0xc4,0xfd,0x77,0x97,0x6e,0x3e,0x4f,0x46,0x5a,0xc6,0x89,0x67,0xda,0x54,0xde,0x85,0xd9,
0xbf,0x1d,0x6a,0xb8,0x08,0xf3,0x0a,0x0f,0x70,0x3b,0x4e,0xb6,0xf1,0x83,0xc2,0x17,0xf7,0x2d,0xab,0xb5,0xf1,0xdd,0x7e,0xb9,
0xed,0xdb,0xa2,0xfd,0xed,0x3a,0xc2,0xbf,0x39,0xb5,0x79,0x56,0x3b,0x6d,0x5f,0xdb,0x6e,0xd3,0xb6,0x5d,0x62,0x6e,0x3f,0x1f,
0x1d,0xea,0xa8,0x37,0xf1,0x7f,0x3d,0x3d,0xf3,0x3a,0x54,0xac,0xd4,0xe4,0xd7,0x1f,0x96,0xa7,0xb9,0x5b,0x68,0xf2,0xe4,0xef,
0x0e,0x83,0x5d,0xe7,0xff,0xf0,0x34,0xdd,0xe5,0x7a,0xd8,0xf7,0xf9,0x2b,0x85,0x23,0x3d,0x95,0x63,0x9e,0x5b,0x0f,0x61,0xf9,
0x74,0x90,0x42,0x26,0xbd,0xfc,0x89,0xaa,0xe1,0x27,0x56,0xc7,0xc2,0xb1,0xc6,0xf5,0x2c,0x97,0xd7,0xed,0x75,0xeb,0xa3,0xd0,
0x6e,0x7b,0x9c,0x87,0x96,0x4d,0x26,0x4d,0x9f,0xfc,0x54,0x22,0x4f,0x71,0xbc,0x2b,0xb3,0xe2,0xf3,0xf0,0xd2,0xbb,0x62,0xed,
0x30,0x8f,0x30,0x52,0xbf,0x56,0xe4,0x5c,0x18,0x36,0x6e,0xbe,0x07,0xf9,0xb5,0x3e,0x56,0xbe,0x43,0xd9,0xdb,0x7e,0x2a,0xfb,
0x66,0x12,0xf7,0xdf,0xf5,0xb3,0x52,0xfb,0xab,0x51,0x56,0x78,0x5d,0xed,0xba,0xcb,0x9d,0x6e,0x47,0xa8,0x8e,0x4e,0xbd,0x3d,
0xde,0x4b,0xd3,0x4f,0x76,0x35,0x59,0x8f,0xdc,0x3e,0x9a,0xf5,0xe3,0x6d,0xca,0xfc,0xae,0x58,0x3b,0xcc,0x38,0xfe,0x9b,0x70,
0xb3,0xb1,0x7d,0xbc,0xde,0x44,0xcb,0x6f,0x6b,0xfd,0x77,0xd5,0x76,0xf9,0xcd,0x07,0xc3,0x37,0xa3,0x63,0xfc,0xe6,0x3e,0x5b,
0x2a,0xb6,0xb3,0x4f,0x97,0x98,0x87,0xb6,0x6f,0x26,0x4d,0x47,0xd4,0xa5,0x25,0xae,0xf0,0x66,0xa6,0x7d,0xb3,0xea,0x43,0xfd,
0x9b,0xe7,0xe7,0xee,0x3e,0xdb,0x63,0xb7,0x3b,0x42,0x7b,0xe4,0xf6,0xb1,0x6b,0x3a,0xc6,0xee,0xd1,0xee,0x8a,0xfe,0xc3,0x8c,
0x8f,0xab,0x9e,0x4f,0xdc,0xde,0xf7,0x7c,0xaf,0xd4,0xe7,0x1b,0x0f,0x86,0x6f,0x44,0x47,0xfa,0x8d,0xfe,0x36,0x6d,0x3b,0x26,
0xe6,0xb4,0xf6,0xcd,0xa4,0xde,0xbf,0x4b,0x84,0x7a,0x85,0xcb,0xf6,0xf9,0x0e,0x97,0x2d,0xb6,0x8f,0x51,0x3d,0x4e,0x65,0x26,
0x7f,0x63,0xdc,0xdc,0xd8,0x7b,0xa6,0x44,0xc7,0x55,0xcd,0x79,0x33,0xff,0xbf,0x31,0xd4,0x32,0x72,0x7e,0x0d,0xef,0x75,0x14,
0xf5,0x7c,0xf6,0xd6,0xf6,0x57,0x8b,0x1a,0x6e,0xdc,0xc4,0xf9,0xd5,0x3e,0x56,0x72,0xd8,0xdb,0x7e,0x2a,0xfb,0x66,0xd2,0x74,
0x44,0xdd,0xab,0x51,0x56,0x38,0x44,0x15,0xde,0xae,0xf9,0x72,0xa7,0x95,0xfb,0x93,0xca,0xe8,0xd4,0xdb,0xeb,0x5b,0xed,0xbd,
0xee,0x55,0x32,0x69,0x99,0x51,0x7b,0x8f,0xbd,0x29,0xf3,0xbb,0x62,0xed,0x30,0xc7,0xcc,0xc0,0x01,0xef,0x02,0x2f,0x8b,0x38,
0x2f,0xa3,0x63,0x7c,0xb9,0xcf,0x9d,0xb5,0xda,0xd9,0x67,0x58,0x84,0xb8,0xa5,0x69,0x6d,0xfb,0xb6,0x5d,0x72,0x6b,0xef,0x33,
0xcc,0xe6,0x3a,0xaf,0xd6,0xae,0x5d,0xbe,0xdc,0x6e,0xd9,0xd7,0xff,0xa1,0x4f,0xbd,0xbd,0x8c,0x56,0x3f,0x96,0x6e,0xa3,0xdf,
0xb5,0x67,0x5f,0xef,0x8a,0xc8,0xc3,0xdc,0x55,0xdb,0x6c,0xaf,0xf9,0xfb,0xc5,0x66,0x79,0xef,0x9c,0xff,0x95,0xe2,0xd8,0x6b,
0xae,0xda,0x43,0xb1,0xdc,0xdd,0x4d,0xcd,0x3b,0xb6,0x9f,0xca,0xe3,0xe4,0x53,0xaf,0x73,0x88,0x6a,0xbb,0x6d,0xbd,0xfe,0x0f,
0x11,0xea,0xfd,0x9b,0xda,0xe3,0xb5,0x1d,0xaf,0x78,0x95,0xad,0xda,0x8f,0xa2,0xa9,0xa5,0x7e,0x5c,0x95,0xf9,0xff,0x2b,0x43,
0xed,0x7e,0x2c,0xb7,0xf7,0x99,0x64,0x9d,0xbd,0xcf,0xfc,0x5f,0x15,0x39,0x17,0x86,0x8d,0xb7,0x85,0xa1,0xa7,0x9b,0x9a,0x74,
0x6c,0x3f,0x95,0xe3,0xf3,0xe9,0x12,0xa1,0x32,0xd3,0x36,0xed,0xf3,0xce,0x6e,0xae,0xcc,0x1d,0xda,0x97,0x1b,0xfb,0xcc,0xff,
0x6a,0xcc,0x76,0xdb,0x2b,0xd0,0x94,0xc3,0x5d,0xb1,0x76,0x98,0x4d,0xfb,0x9d,0xca,0x3c,0xdb,0x5f,0x7e,0x30,0x6c,0x0c,0x83,
0xdc,0x64,0xdb,0xb1,0xfd,0x31,0x18,0x57,0x78,0xdd,0x52,0x77,0xb9,0xd3,0xcd,0x2c,0xad,0xf4,0x6f,0x6a,0x8f,0xf7,0x12,0x57,
0x7e,0xe7,0x4c,0xae,0xe5,0x39,0xe5,0x91,0x56,0xe6,0xff,0x2f,0x0f,0x75,0x58,0x26,0x6f,0x7a,0xce,0xd8,0x3c,0xe7,0x2f,0x14,
0x15,0xd8,0xb8,0xa9,0xd2,0x17,0x8e,0xe5,0xce,0x31,0x3a,0xda,0xde,0xbb,0x67,0x38,0x7e,0xdb,0x61,0xc7,0xb8,0xf3,0xda,0xb5,
0xb3,0x7d,0x73,0x76,0x7c,0xa1,0xea,0xb2,0x62,0x3d,0xce,0xae,0xad,0xda,0xec,0x78,0xff,0xff,0x85,0xa1,0x36,0x1d,0x51,0x53,
0x4d,0x86,0xf9,0xf9,0x10,0xfe,0x25,0xdb,0x5c,0x36,0xb4,0xec,0xb7,0xa9,0xe6,0x6f,0x57,0x83,0x38,0x20,0x87,0xae,0x86,0x62,
0xab,0xbb,0x11,0x66,0x91,0xd3,0xde,0x75,0xa4,0x66,0x5e,0xe1,0x5f,0x5a,0x1b,0xb7,0xd4,0xd7,0xd6,0xed,0xd2,0xe7,0xf8,0xf6,
0x3d,0x8a,0x7d,0x2e,0x1b,0x5a,0xfa,0xfa,0x90,0x4f,0xdf,0xda,0xae,0x97,0xf7,0xef,0xa5,0x72,0xed,0xfd,0xa5,0xa1,0x76,0xc9,
0x33,0x85,0xd9,0x3b,0xc6,0xfc,0xf5,0x2f,0x8a,0xa7,0xdd,0x9d,0xd6,0xd7,0x5e,0xd7,0x5a,0xb2,0xa8,0xfd,0x45,0xab,0xd7,0x51,
0xcc,0x17,0xd1,0x72,0x6c,0xfe,0x5e,0xbc,0xb1,0xbe,0xb6,0xee,0xdd,0x08,0xbb,0xc4,0x6f,0x32,0x8b,0xb2,0x0d,0x0d,0xcb,0xaf,
0x43,0x96,0xfb,0xbc,0x30,0x5e,0x9e,0xdf,0xf7,0x19,0xb2,0xdf,0x78,0xd4,0x2e,0xcf,0xe6,0x7b,0xb9,0x87,0x59,0x31,0x95,0xf1,
0x08,0x76,0xef,0xd3,0x9e,0xff,0xf8,0xac,0x0e,0x77,0xbc,0x29,0x58,0x1e,0x5d,0x16,0x9d,0x41,0x5d,0x66,0x45,0xf7,0xab,0x41,
0xfd,0xec,0xa8,0x5f,0xa9,0x6e,0xb7,0xb7,0x0a,0xbb,0xbc,0x8e,0xae,0x57,0x29,0x5c,0xa5,0x0f,0x7a,0xe7,0xf3,0x63,0x7c,0x70,
0xd9,0x60,0xfb,0xda,0xf6,0x9e,0x4d,0xf1,0x57,0x2d,0x77,0x23,0xcc,0x22,0x43,0x83,0xe3,0x2a,0xd0,0xbd,0x4a,0xa7,0x1d,0x97,
0x69,0xf7,0xd2,0xb7,0x1a,0x6d,0x11,0xc6,0x8c,0x6f,0x97,0xf8,0xf9,0x28,0x7f,0xed,0xd2,0xdd,0x5c,0xd5,0xbf,0xb6,0xef,0x6a,
0x56,0xef,0x93,0x42,0xfe,0x27,0xb7,0xa5,0x0e,0x9f,0x59,0x84,0x2f,0xcf,0xc8,0x81,0x7e,0x2e,0xf0,0x9c,0xfc,0x2c,0x19,0x99,
0xbf,0x0b,0xbc,0x17,0x78,0x66,0x6e,0xee,0x6d,0x5a,0xd6,0xb6,0xf7,0x69,0x8f,0x79,0x88,0xf8,0x97,0xe4,0x63,0xab,0xcf,0x63,
0x98,0x6f,0x97,0x34,0x5e,0xa9,0x99,0xc2,0xf8,0x72,0xcc,0xd8,0x6d,0x3e,0x97,0x7e,0x6f,0xdb,0xb2,0x4f,0x96,0x40,0x9e,0x7d,
0x8f,0xe5,0x58,0xf3,0x2d,0x1b,0x6c,0xc7,0xef,0xef,0x7e,0x94,0x8f,0xdb,0xbe,0xf3,0x21,0xee,0x9f,0x85,0xec,0xc3,0xa2,0xfd,
0xc3,0x19,0x49,0x92,0x24,0x49,0x92,0x17,0x6b,0x16,0x9e,0xfd,0x62,0xf1,0xfc,0x9b,0xac,0xaf,0x43,0xf6,0x8b,0xc5,0x4f,0x0e,
0xff,0x62,0xc3,0xe7,0x3f,0xff,0x9c,0xe7,0x6c,0xfc,0x97,0x12,0xb3,0x89,0xc6,0xb4,0xd7,0xcf,0xff,0xff,0xb3,0x63,0x39,0x0f,
0xcb,0x9a,0xab,0xf6,0xc1,0xbf,0xb9,0x50,0x46,0xfe,0xa7,0xc7,0x32,0xcf,0x39,0x72,0xd5,0x12,0x8f,0xda,0xe0,0xa3,0xf8,0x27,
0xc7,0x32,0xcf,0x7c,0xe3,0x54,0x3f,0x3f,0x9c,0xbf,0x7e,0x61,0x3a,0x9b,0x62,0x6e,0xbe,0x7d,0xf8,0x85,0xb5,0x13,0xfe,0xfc,
0xf3,0xcf,0x71,0x88,0xcb,0xc8,0x7a,0x4b,0xbb,0xc3,0xf6,0xd5,0xb4,0xf7,0x21,0x66,0x45,0x9c,0xd2,0x57,0x51,0xe4,0xb2,0x25,
0x44,0xcb,0x6f,0xc3,0x4d,0x65,0xbf,0xf1,0xfc,0xb9,0x2b,0xda,0x87,0xd9,0xed,0xfc,0xca,0x7e,0x6e,0xa8,0x1d,0xe3,0x7f,0xef,
0xda,0x17,0xc5,0xbf,0x70,0x5d,0x9a,0x15,0x2d,0x59,0xf9,0x2f,0xdd,0x6f,0xf7,0xd9,0x58,0xb6,0xe4,0xe7,0x63,0xc5,0xeb,0xf0,
0x64,0xb3,0x9c,0x1f,0xe9,0x60,0x3b,0x5e,0x7f,0xbe,0x97,0xdc,0xb6,0xd7,0xfb,0x57,0x4b,0x9c,0x78,0x56,0xa7,0x70,0x5c,0x53,
0x19,0x1f,0xd1,0xde,0xfa,0x9c,0xfc,0x19,0x8d,0xed,0xae,0x46,0x6a,0xa8,0x39,0x3f,0x1f,0xce,0xd2,0xcd,0x3d,0xe1,0xcf,0x57,
0x0d,0x0d,0xb6,0xf5,0x69,0x9a,0xff,0xbb,0x22,0x34,0xc5,0x6f,0xda,0xd7,0xb2,0x25,0x7e,0xfe,0x1e,0xba,0x73,0xed,0x8b,0xa2,
0xbd,0xf4,0xae,0x88,0x39,0xcc,0xfc,0xbe,0xe5,0x1f,0x9f,0x9b,0x95,0xfb,0xf3,0x8e,0x3d,0x07,0xdf,0xff,0xff,0x06,0xcf,0xb3,
0x3e,0x5d,0xc6,0xf7,0xae,0xe8,0x39,0xcc,0xa6,0xbd,0x7c,0x3e,0x64,0xbf,0xb1,0x76,0xcc,0xfd,0x79,0x1a,0x86,0x7f,0x94,0x86,
0xf9,0x75,0x32,0x32,0x44,0xae,0x5a,0x2a,0xf7,0x24,0x9b,0xad,0xf2,0x31,0xfa,0x87,0x1c,0xeb,0xb2,0xb6,0xbc,0xdf,0xf5,0xb9,
0x50,0xdf,0xb6,0x1e,0xb9,0xbb,0xdd,0xb3,0x1d,0xe2,0xf6,0x3b,0xfb,0xaa,0xe5,0xae,0x88,0x39,0xcc,0x8e,0xd7,0x9f,0x83,0xc6,
0x3f,0xc4,0x7c,0xa8,0x54,0x69,0x76,0x9e,0x4e,0xf5,0x09,0xe1,0x65,0x9b,0xd7,0xea,0xeb,0xbb,0x0d,0x5f,0x2f,0xae,0xb1,0xdc,
0x69,0x5c,0xa5,0xe6,0x1a,0xd6,0xfb,0x84,0x56,0xab,0x7d,0xfa,0x66,0xb5,0xf3,0xfa,0xf3,0xf5,0xa1,0x66,0x91,0xa1,0xd6,0x52,
0x5f,0x3b,0xae,0x92,0xfd,0x1c,0xb6,0xaf,0x38,0xe7,0xcd,0xfc,0xff,0xd9,0x07,0xc3,0xcf,0x16,0x3d,0xcf,0xce,0xf9,0xbd,0xcb,
0x06,0x9b,0xfa,0xec,0xde,0x2a,0x8e,0x7c,0x37,0xc2,0x8e,0xf9,0xff,0x83,0x4b,0x37,0xaf,0x6a,0x61,0xbc,0x1c,0xb7,0x84,0xda,
0xda,0x7a,0xcf,0x6a,0xff,0xbe,0xd7,0xf9,0x96,0x0c,0xff,0xfe,0x25,0x3a,0xef,0xed,0xb2,0xa7,0xbb,0xb7,0xad,0x57,0x3e,0x2b,
0xfa,0x34,0x79,0x37,0xc2,0x9d,0xa3,0x5c,0xa9,0x43,0xde,0xf3,0xef,0x0d,0x35,0x5c,0xa8,0x59,0x64,0xde,0xf2,0x51,0x7f,0x7b,
0x9d,0x77,0x5f,0x7b,0xdc,0xee,0xad,0x46,0xaf,0x77,0xba,0x01,0xf7,0xb7,0x95,0xe7,0x82,0xd0,0xd0,0x3e,0xce,0x7e,0x31,0xc3,
0xba,0x1a,0x15,0xdb,0xd7,0xb6,0xf7,0xac,0xe7,0x10,0x3a,0xd4,0x27,0x7f,0x3d,0x7b,0x04,0xde,0xb6,0xfa,0x51,0x02,0x19,0x9e,
0x8b,0xed,0x95,0x9c,0x76,0xab,0x61,0x1a,0xcd,0x73,0xf1,0xf6,0xb8,0x9f,0x08,0x71,0xe7,0x3b,0x51,0x0a,0x33,0x81,0x24,0x79,
0x7c,0xdb,0xef,0xcd,0x8e,0x60,0xe5,0x79,0x64,0xf2,0xfe,0xe7,0xee,0x31,0xeb,0x13,0x6f,0xd5,0x65,0xf9,0x1c,0x7d,0x6c,0xf3,
0xe7,0xd0,0x95,0xec,0xb3,0x55,0x56,0x5b,0xce,0x6a,0xed,0xe3,0xe3,0xb7,0xc5,0x1c,0x36,0x07,0xd6,0x3d,0xbb,0xc6,0x1f,0x6a,
0x35,0x7e,0x7b,0x9e,0x7d,0xeb,0x73,0x5b,0x8b,0x9c,0xe5,0x6f,0x02,0xdd,0xbc,0x6e,0x68,0x7f,0x12,0x9e,0x14,0x9f,0x3b,0x3d,
0xc9,0x9f,0x26,0x3e,0xb6,0xf2,0x7a,0xfd,0x49,0xd4,0x6c,0xd5,0x67,0x9e,0x15,0xdb,0xde,0xff,0x4e,0xc1,0xa6,0xe5,0x59,0xe1,
0xd3,0x8d,0xab,0x9f,0x44,0x5d,0x2d,0x7f,0x38,0x7f,0xf0,0x75,0xd9,0xd2,0xda,0x5e,0x6e,0x7b,0x1f,0xa1,0x58,0x5b,0xc6,0xf9,
0xf4,0xbc,0x6a,0xb9,0xdf,0x59,0x91,0xf3,0x2c,0x7c,0xac,0xc8,0xf0,0xb6,0xf0,0x13,0x85,0x9f,0x2c,0xfc,0x78,0xe1,0xf3,0x22,
0xe7,0xf7,0x72,0xdf,0xcc,0x6f,0xf2,0xc8,0x6f,0x42,0x61,0xbe,0x1c,0xd6,0x86,0x72,0x39,0x2b,0x96,0x1f,0x0c,0x71,0xce,0x51,
0x86,0xaf,0xf2,0xe5,0xd9,0xe2,0x55,0xd9,0x27,0xca,0xb3,0xea,0xba,0x0e,0x1f,0x14,0x7b,0x2f,0x8f,0xf4,0x79,0x61,0x11,0x21,
0x76,0xb1,0x3b,0xc2,0xbe,0xc8,0x75,0xb3,0xda,0x72,0xdd,0x5d,0x6b,0x57,0x95,0x5c,0x16,0xa3,0x1f,0x1a,0x7c,0x97,0x3b,0xcb,
0xeb,0xf9,0x7e,0x51,0xd5,0x6f,0x29,0x7c,0x51,0xf8,0xad,0xe5,0x9c,0xd9,0x6b,0x08,0x57,0x9b,0x4f,0x29,0xe3,0x73,0xe1,0xe9,
0xfc,0x2a,0x5a,0xdb,0xe4,0x22,0xf2,0x61,0xe6,0x3c,0xbf,0x1f,0x97,0xf2,0xfe,0xe7,0x6a,0x13,0xad,0xee,0x98,0xf8,0x87,0xf8,
0x7c,0xb5,0xfe,0xf9,0x6d,0xf9,0xaf,0xc8,0x75,0xf1,0x4d,0xdc,0x72,0x5d,0xeb,0x33,0xef,0x1a,0x67,0x4f,0xe4,0x0e,0x6b,0xdf,
0x74,0xde,0x76,0xbc,0xd3,0x7f,0x66,0x32,0x6b,0x70,0x6b,0xed,0x75,0xb5,0x7d,0x9c,0x87,0xfb,0xf9,0x9f,0x87,0x2b,0x43,0xf1,
0xbb,0x00,0xa1,0xbc,0xa6,0xad,0x5b,0x9e,0xce,0xb7,0xd7,0xae,0x97,0xd7,0x7d,0xee,0x67,0x78,0xa3,0xbb,0xfa,0xe4,0xe7,0x5d,
0x65,0x8f,0x6f,0xb7,0xf6,0x92,0xed,0x89,0x59,0xcd,0xf9,0x21,0xcf,0xc2,0x45,0x1c,0xf9,0x7e,0x79,0x7e,0xff,0xde,0x5a,0x6d,
0x2f,0xce,0xa9,0xf5,0x75,0x20,0x8e,0x7f,0xd3,0x74,0x74,0xb5,0x9e,0x21,0xaa,0x4c,0xc5,0x45,0xb5,0xb6,0xbb,0x6d,0xbf,0x6e,
0xb7,0xc4,0xbf,0xa9,0x5e,0xd5,0xa3,0x7d,0x3d,0x0b,0xb5,0x3e,0x1b,0xa3,0x77,0xcc,0xa7,0xf5,0xb5,0x0d,0xb5,0x0d,0xf3,0xea,
0xb6,0xeb,0xb5,0xe1,0xd9,0x14,0xae,0x72,0xde,0xe5,0x21,0x62,0x8e,0x37,0xbe,0x63,0x09,0x9b,0xab,0xfd,0xae,0xdf,0xaf,0x79,
0x5a,0xb9,0xcf,0xd9,0x72,0xd1,0x6e,0xbf,0xf7,0xf7,0xde,0x2e,0x22,0xa7,0x8b,0x3c,0xdf,0x77,0x87,0x73,0x3a,0x9f,0xce,0x77,
0x2f,0x1f,0xc9,0x33,0xa9,0x49,0x53,0x65,0x9a,0xd6,0xb6,0xf7,0x8f,0x97,0xdf,0x16,0x77,0x4a,0xe5,0xfb,0x72,0x97,0x51,0x68,
0xda,0xd7,0xc3,0xd5,0x7e,0x5f,0x3e,0x4d,0x47,0xd7,0x64,0xf7,0xb9,0x11,0x3f,0x77,0xb4,0xd7,0xad,0x4b,0x6d,0x87,0x8d,0x57,
0x97,0xf6,0xbe,0x7d,0x86,0xe5,0xd3,0x36,0x52,0xdd,0xfa,0x1c,0xa2,0x56,0x87,0x38,0x96,0xc3,0x9d,0x7d,0x87,0x18,0xa9,0x13,
0x5c,0xe5,0x2e,0x22,0xb7,0x14,0xfc,0xf4,0xd1,0xf6,0xb5,0xef,0x0e,0x30,0x36,0x7e,0xc2,0x8d,0x97,0xbb,0x6c,0xbb,0xfd,0x34,
0xb1,0xdf,0x97,0x8b,0xd5,0xfd,0x7c,0x69,0x5b,0xcf,0xde,0xc7,0xb5,0x78,0x9d,0xc7,0x9c,0xdf,0x3c,0x2f,0xdc,0x1f,0x67,0xbf,
0xfb,0x9e,0x83,0x78,0x4a,0x87,0xcf,0xf6,0xa6,0xf9,0x33,0x51,0x9c,0x22,0xc3,0x2e,0x3d,0x4f,0x7d,0x2d,0x3a,0xed,0x35,0x67,
0x88,0x21,0x1a,0xa9,0xa9,0xf6,0x38,0xe1,0x71,0x95,0xd7,0xb4,0xba,0xa1,0xea,0xfd,0x35,0x30,0x44,0xee,0xbd,0x1e,0xee,0x88,
0x73,0x94,0x9a,0xa7,0xe3,0xae,0xb1,0x68,0x7a,0x42,0x3f,0xad,0xe3,0x8f,0xf7,0xb4,0xf9,0x57,0x9f,0x83,0x2e,0xdf,0xab,0x13,
0x19,0x1e,0x87,0x8b,0x04,0x72,0x38,0x96,0xe1,0x94,0x33,0xf9,0xe1,0xb3,0xdc,0x6e,0x9f,0x8d,0x30,0x65,0x9b,0xee,0x49,0x52,
0xc8,0xed,0x20,0x4e,0x74,0x2f,0x7a,0xcc,0x71,0xe9,0x3b,0x76,0x5d,0xf3,0xdf,0x9c,0xd1,0x3d,0xaf,0x27,0x7d,0xef,0x12,0xeb,
0xfb,0x8a,0xda,0x17,0xf5,0xf6,0x43,0x6c,0xdb,0x10,0x61,0x4f,0xff,0xf6,0xf8,0x53,0x39,0xed,0x7e,0x27,0xcd,0x79,0x3d,0xca,
0xd5,0x67,0x8d,0x9b,0xad,0x27,0x8b,0xc8,0xb2,0x7f,0x6d,0x74,0xb6,0xda,0x6b,0xf3,0xa7,0xbe,0x55,0x53,0x9f,0xad,0xcf,0x76,
0x9e,0x86,0x07,0xe3,0xbd,0xaf,0x96,0xc3,0xda,0xd5,0x99,0xb2,0x78,0x3f,0x5a,0x2e,0xdb,0x9b,0x72,0x38,0xad,0x4d,0xf5,0x6c,
0xaa,0x55,0x97,0xaa,0xee,0x18,0xc1,0x31,0x4e,0x74,0xa4,0xf5,0xb1,0x8e,0x5b,0xea,0xed,0x2f,0x5b,0xd7,0xf6,0xae,0xc6,0x98,
0x31,0xea,0x57,0x87,0x29,0xce,0xbe,0x78,0x04,0x27,0xad,0xf9,0xc0,0x98,0x5b,0xf3,0x21,0x1c,0xe3,0xbc,0x88,0xce,0xfa,0x72,
0x26,0x34,0x5d,0x7f,0x76,0xf4,0x6c,0x98,0x3f,0xb1,0xe5,0xda,0xd0,0xba,0xd5,0x7d,0xcb,0xa2,0x2d,0x42,0x7d,0x2f,0x4d,0x2d,
0xb1,0x5d,0xe6,0xed,0x56,0x84,0x86,0x1c,0x1a,0xb3,0xaa,0xd7,0x64,0xb1,0x3b,0x9f,0xf7,0x1b,0xe2,0xef,0xa8,0x67,0x53,0xfd,
0xab,0xf3,0xea,0x7e,0x3e,0xc7,0x6b,0xdf,0x5f,0x44,0x86,0x07,0x3b,0x9f,0x4d,0x4d,0xcb,0x5d,0xce,0xa6,0xee,0xed,0xdb,0xee,
0xff,0xf4,0xac,0xef,0x19,0xdd,0x67,0xdb,0x7e,0xef,0xe9,0xf5,0xf8,0xcd,0x7b,0x8c,0x8f,0xab,0xfd,0x18,0x77,0xbf,0x17,0xdc,
0x3c,0x6d,0xd8,0xea,0xc3,0x0e,0x96,0x3d,0x5f,0x3c,0xd8,0xf8,0xae,0xd7,0xf4,0xfd,0xd1,0x98,0xe5,0xee,0x77,0xbc,0x3b,0x0c,
0xa7,0x31,0x14,0x99,0xaf,0xea,0x1f,0x16,0x5b,0x86,0xc1,0xcf,0x02,0x63,0xb6,0x6d,0x76,0x6c,0x56,0xa3,0x22,0x57,0xbf,0x61,
0x3c,0x4f,0x5f,0xcf,0x8a,0xa3,0x98,0x75,0x5e,0x3e,0xea,0x51,0x87,0xbf,0x4b,0x92,0x7c,0x8c,0x9e,0xfe,0xfd,0xf1,0x6c,0x5d,
0x44,0xa6,0x90,0x0f,0x27,0x70,0xeb,0x29,0xa3,0xe1,0xae,0xec,0xd0,0xcb,0x29,0xd4,0xe1,0x71,0x7a,0xa9,0x23,0x72,0x49,0xc7,
0x42,0x92,0x3c,0x8a,0x8b,0x9a,0x23,0xa2,0x0d,0xf8,0xbc,0xbd,0xf6,0x49,0xf5,0xb1,0x4d,0x62,0x14,0x86,0xda,0x5a,0xb7,0xa7,
0x0f,0xdf,0x10,0x35,0xfc,0xdc,0xc2,0xc9,0xf3,0x6f,0xb0,0xfa,0x3b,0xec,0xe7,0x6c,0xf5,0x37,0xf1,0x4f,0x9d,0xcf,0x58,0x8f,
0x7f,0x86,0xf6,0x3d,0x97,0x53,0xc8,0xa4,0xfb,0x75,0xe6,0xb0,0xfb,0x0d,0x4f,0x03,0x39,0xdc,0x14,0xfe,0x86,0xe1,0x18,0x7f,
0x86,0x3c,0x94,0x59,0x07,0x77,0x6f,0x3b,0x0f,0xcb,0x8a,0xf1,0xda,0xf6,0xbf,0xea,0xf3,0xa2,0x88,0x9c,0xd5,0x2c,0xf7,0xf8,
0x62,0xab,0xe5,0xf4,0xff,0x42,0xc4,0xa1,0x8d,0xff,0xed,0x89,0x2e,0xff,0x5a,0x47,0xa5,0xe5,0xef,0x70,0x3a,0xfb,0xfc,0x65,
0xaa,0x55,0xff,0xac,0xe7,0x56,0xdd,0xcd,0xcf,0xa9,0x32,0xab,0xf7,0xd2,0x70,0xe8,0xdf,0xef,0xea,0x17,0x5f,0xff,0x69,0xfb,
0xe7,0xb3,0xe8,0xa3,0x73,0x36,0xfe,0x4b,0x95,0x53,0xd9,0xf4,0x37,0x24,0xbb,0xfc,0x6d,0xc9,0xd7,0xb5,0xf6,0x50,0x8b,0xdf,
0xd4,0xde,0xf7,0x5b,0xb6,0xa6,0x7c,0x5e,0xd4,0xb2,0x6a,0xfa,0x1b,0x98,0xed,0xcf,0xc2,0xcf,0x22,0xbb,0xfc,0x45,0xcd,0xd7,
0xad,0x59,0x75,0xa9,0xde,0xee,0x0c,0xb7,0x9f,0x31,0x5f,0x44,0x0e,0xab,0xd8,0xe1,0xfe,0x1a,0xe1,0xf1,0x7d,0xb9,0xc8,0xe6,
0xb3,0x44,0x2d,0x7f,0xc3,0x3a,0x85,0x4c,0x98,0x9a,0x53,0xfd,0xfe,0x7e,0x0a,0xc7,0x42,0x92,0xa7,0xf2,0xb4,0x7f,0x41,0x65,
0xef,0xf5,0x79,0x12,0x9b,0xe2,0x67,0x57,0xcf,0x72,0x57,0x7f,0x09,0xed,0xea,0xde,0x78,0xab,0x57,0x8b,0x50,0x54,0xa9,0xcc,
0x64,0xb5,0x1c,0xff,0xe5,0xb4,0xbe,0xcb,0x71,0xe4,0xbe,0xdb,0xbe,0xaa,0xb5,0x6c,0xc7,0xbc,0xcf,0xb3,0x97,0xf3,0x45,0xf1,
0x37,0xba,0x77,0x18,0xbe,0xbc,0x76,0x15,0x7f,0xbe,0xd8,0x54,0xa0,0xe2,0x7c,0x51,0x1f,0xa3,0xea,0x5e,0x5e,0xad,0x5d,0xf7,
0x59,0xdc,0xf7,0x0c,0x0f,0xe3,0xf2,0x89,0x45,0xb8,0x5e,0x55,0x3e,0x5c,0xf7,0x5f,0x4e,0xcd,0x94,0x73,0xeb,0x9b,0xff,0xb0,
0x9a,0xf7,0xed,0x59,0x1a,0x9f,0x95,0xf1,0x6c,0x7c,0x55,0x9c,0x95,0x6b,0x57,0x5b,0xbd,0x8a,0x22,0x94,0xe7,0x45,0x1e,0xe1,
0x79,0xb1,0xc7,0xe7,0xb3,0xde,0xcb,0xa9,0x99,0x72,0x6e,0x7d,0xf3,0x1f,0x56,0xf3,0xbe,0x3d,0xdb,0xfb,0xbf,0x2a,0xae,0x36,
0x79,0x9f,0xe2,0x2a,0x5a,0xb6,0x3c,0xac,0xdd,0xf7,0xee,0x13,0x7e,0xfa,0x92,0xbc,0xea,0xbd,0xd5,0xa6,0x0e,0x5f,0x26,0xfb,
0xb8,0x99,0x39,0x87,0x36,0x89,0x33,0x6b,0xb8,0xd3,0xdc,0xdf,0xa6,0xe6,0x54,0xf7,0xff,0xf1,0x15,0xfe,0x10,0xa6,0x70,0xa6,
0xf4,0x31,0xdb,0x78,0xb4,0xf3,0x2b,0x29,0xfb,0xfe,0x8d,0xc1,0xc3,0xcf,0xf6,0x14,0x66,0x45,0xbf,0x99,0xb3,0xf6,0xf4,0xa3,
0x59,0x73,0xd1,0xb0,0x7c,0x72,0x0f,0x38,0x7f,0x0e,0x9c,0xe1,0xe9,0x9f,0x08,0x92,0x35,0x94,0x4f,0x0d,0x64,0x64,0x02,0x57,
0x9b,0x89,0xaf,0x00,0xe5,0x3c,0x6f,0xf4,0xf4,0x99,0xf3,0xbc,0x3c,0xc4,0xfb,0xd7,0xa9,0x8e,0x62,0xc8,0x27,0xe7,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x6c,0x32,0x84,0x2c,0xf0,0x74,0xa6,0x30,0x07,0x48,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0xe4,0xd9,0xf9,0x53,0xa7,0xf3,0xd5,0x49,0xf7,0x4e,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0xb6,0xfb,0x2e,0x84,0xb0,0xed,0xcb,0x45,0xf6,0x53,0x9c,0xc2,0x7a,0x6d,0xbb,0x98,0xf3,0xd9,0xc0,0x2d,0xb3,0xc8,0xbc,
0xe5,0x6f,0x93,0x24,0x39,0xce,0x2c,0x64,0xb9,0x2f,0x0a,0xcb,0xe5,0x43,0xef,0xf1,0x6e,0x84,0x71,0x9c,0xd5,0xdd,0xc2,0x29,
0xcc,0x5f,0x1f,0x71,0x97,0xf3,0xb0,0xdc,0x69,0x08,0x59,0xcb,0xda,0x2e,0x96,0x11,0xd6,0x9e,0xfe,0x48,0xc7,0x54,0x26,0x6f,
0xf9,0x34,0x2f,0xd7,0x7c,0x94,0x37,0x96,0x2d,0x59,0xab,0xfd,0xaf,0x3f,0xd9,0x05,0x19,0x9e,0x91,0x87,0xf5,0x7e,0xa6,0xc5,
0x26,0x90,0xd5,0xe3,0x75,0xef,0xfd,0x55,0xa5,0x67,0x7d,0x79,0x58,0xe4,0x93,0xdc,0x2b,0x1e,0xa2,0x86,0x3f,0xb9,0x36,0x7f,
0x97,0xf9,0xc9,0xed,0x96,0xf6,0xf6,0x2e,0x6b,0x8f,0xef,0x7c,0xcb,0x65,0x64,0xd9,0x27,0xdb,0x69,0xd9,0x67,0x67,0xcd,0x7b,
0xf9,0x66,0xb5,0x70,0xff,0x5f,0xc7,0x31,0xfd,0x5b,0xec,0xef,0x6d,0xc8,0x36,0xbe,0x88,0xec,0x7b,0x4e,0xe5,0xb3,0xe2,0x6f,
0xae,0x0d,0xec,0xec,0xfc,0xe0,0x2e,0x37,0xf6,0x1d,0xd3,0xac,0x88,0x50,0x7a,0x37,0xc2,0x6e,0xf3,0x67,0xf9,0x13,0xc7,0x32,
0xdf,0xdf,0x60,0x6f,0x6b,0x2d,0x65,0xcc,0xfc,0x48,0xff,0xc6,0x50,0xc3,0x99,0x98,0x1f,0x69,0x2f,0xb3,0xf5,0x2c,0x2a,0x23,
0xfc,0xf5,0x34,0xcc,0x73,0x1b,0x6d,0xd8,0x38,0xc9,0xdd,0x48,0x1e,0xe7,0x33,0x8b,0xf0,0xe5,0xd9,0xd9,0x58,0xff,0x7e,0x30,
0xaf,0xcc,0x8f,0x87,0x8a,0xe1,0xc7,0x8b,0xa3,0xe3,0x4e,0xe3,0x2a,0xcd,0xb7,0x5a,0x76,0x57,0x72,0x57,0x9f,0x50,0xb1,0xcb,
0x7e,0xb3,0x9a,0x4d,0x3d,0xe3,0x3b,0xb7,0xbb,0xa2,0x65,0x98,0x2d,0x33,0x7f,0xb3,0xaf,0xcf,0x87,0xf0,0x63,0x6d,0x2e,0x5b,
0xd7,0xee,0xf7,0x6e,0x84,0xed,0x91,0x37,0xc7,0xf2,0xd7,0x1e,0x9f,0xf9,0x3c,0xec,0x60,0x88,0xdc,0xdf,0x3e,0xf8,0x2a,0xba,
0x33,0xb7,0xa1,0x47,0x14,0x2a,0x99,0xdc,0x15,0x2d,0xc3,0xac,0xe7,0x99,0xd5,0x1c,0x33,0xb7,0x8f,0x6b,0xe3,0x99,0xf8,0x57,
0xd9,0xe6,0xb2,0xb6,0xbc,0xac,0xb5,0xd7,0xd7,0x76,0x89,0x59,0x8f,0xbc,0x5a,0x4e,0xe1,0x93,0x96,0xd8,0xf6,0x63,0xc9,0x7b,
0xfc,0x95,0x71,0xce,0xef,0x5d,0x46,0x3e,0xb4,0x67,0x91,0xed,0xdb,0x8e,0xbc,0x97,0x7b,0x6f,0x9f,0xc7,0xec,0x3f,0x6d,0xe6,
0x71,0xfc,0x01,0xfd,0x4f,0xfe,0x09,0xe7,0xc9,0x1d,0x53,0x87,0xdb,0xb6,0xb5,0x0f,0xdf,0xdd,0xb4,0x8c,0xef,0x8f,0xf2,0xa2,
0x1d,0x79,0xfd,0x4c,0xcd,0xf9,0x96,0xd5,0xeb,0x79,0xd3,0x15,0xbe,0xe9,0x4a,0x7e,0x57,0xb4,0x0f,0xb3,0xcb,0xf5,0xf3,0x5b,
0x8b,0xe7,0xe2,0x6f,0x4b,0x5e,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,
0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,
0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,
0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,
0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,
0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,
0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,
0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,
0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,
0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,
0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,
0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,
0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,
0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,
0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,
0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,
0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,
0x53,0x56,0x9e,0xf2,0x4c,0x59,0x79,0xca,0x33,0x65,0xe5,0x29,0xcf,0x94,0x95,0xa7,0x3c,0x53,0x56,0x9e,0xd3,0xfa,0x2e,0x84,
0x30,0x85,0x9f,0x0b,0xab,0x68,0x29,0xd8,0x94,0xe1,0x67,0x8b,0xb5,0x6c,0xb7,0xa9,0x7a,0xdf,0x99,0x1b,0x48,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x64,0xd2,0xbe,0x9b,0x17,0xbf,0x0b,0x40,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x17,0xe7,0xcb,0x45,0x98,0x93,0x24,0x49,0x26,0x60,0x88,0x4c,0x21,0x1f,0x3e,0x4e,0xc3,0xa5,0x1b,0x42,
0x78,0x16,0x3a,0xf9,0x2e,0xff,0xdf,0x14,0xe6,0xaf,0xaf,0x36,0xdb,0xbe,0xed,0xa7,0xc2,0xec,0x2b,0xe1,0x66,0x1e,0x96,0x5f,
0x59,0x2f,0x0f,0x33,0x84,0xc5,0xc8,0x08,0x75,0xdf,0x85,0x59,0xe8,0xd3,0xa7,0xde,0xbf,0x4b,0x4b,0xff,0x23,0x9d,0x5f,0x91,
0xe7,0xe3,0xbb,0x30,0x0f,0x87,0x34,0x85,0x63,0x24,0x49,0x92,0x8f,0xcd,0xe7,0x21,0xcb,0xef,0x43,0x5e,0x17,0x86,0x90,0x5d,
0x1d,0xd6,0xd3,0x1f,0xef,0x63,0xd6,0x9d,0xe7,0xe1,0xea,0xb9,0xef,0x3e,0x3f,0x2b,0xfa,0x3f,0x09,0xe7,0xec,0x54,0x75,0x7b,
0x73,0xbf,0x5c,0xbd,0x3e,0xcc,0xe7,0xcb,0xd9,0x01,0xbd,0xfe,0x60,0x91,0x85,0xd9,0xcd,0xf3,0xc8,0x0f,0x22,0x5f,0x44,0xbe,
0x8e,0xfa,0x7c,0xba,0x70,0xf5,0x99,0xcf,0x3e,0xe7,0xa1,0xd8,0xd7,0xd4,0x7e,0xb4,0xf6,0x65,0x91,0x49,0x93,0x71,0xce,0x87,
0x58,0x6e,0xda,0xd7,0xaa,0x25,0x74,0xf2,0xf9,0xe2,0xbd,0x70,0x55,0x2c,0x5f,0xdd,0x2f,0x97,0x75,0x7b,0x55,0xc4,0x79,0x95,
0xb7,0x6c,0x8f,0x42,0xb9,0xd5,0x6a,0x5f,0xf3,0x62,0x5f,0xf3,0xc6,0xe5,0x97,0x8b,0x9b,0x5a,0x4d,0x16,0xf7,0xee,0xca,0xa4,
0xdc,0x6f,0xd9,0xf3,0x6d,0xb1,0xed,0x9b,0x28,0x42,0xd3,0xf8,0x76,0xb9,0x1a,0xa4,0x70,0x5d,0x22,0xd3,0x37,0x7e,0x7f,0x5c,
0xde,0xbf,0xcb,0xac,0x3e,0x57,0x7f,0x71,0xb5,0xba,0x3e,0xbc,0xbc,0x2a,0xce,0xe2,0xab,0xd5,0x59,0xf9,0xb6,0xf0,0x4d,0xe1,
0xba,0xbd,0xb8,0x0a,0x5d,0x15,0x57,0x80,0xc2,0x75,0xfb,0xea,0xac,0x7f,0x7e,0x55,0x5c,0x67,0xae,0x56,0xe7,0xfe,0x7a,0xf9,
0xbd,0x62,0xed,0xd5,0x60,0x5f,0xe5,0x11,0xe6,0xb9,0xeb,0x7d,0x85,0x2d,0xb7,0x73,0x0e,0xcf,0x52,0xf5,0x75,0x54,0xab,0xed,
0xba,0xc5,0xcb,0xa7,0xcf,0x73,0x7f,0xfe,0xf1,0xb8,0xcf,0xb7,0x66,0xc2,0xf3,0xeb,0xe2,0x5d,0xa3,0xf0,0x79,0xe4,0xab,0xc2,
0x97,0xd7,0xe1,0x79,0xb8,0xf9,0xc4,0x50,0x37,0x11,0x58,0xfa,0xaa,0xa8,0xc9,0xab,0x75,0x65,0xbe,0x7c,0x9e,0xd6,0xbf,0xdd,
0xeb,0xbb,0xd5,0xf1,0xfb,0xd7,0x73,0x7e,0x13,0x5d,0x2d,0xeb,0xe7,0xf5,0xdb,0x68,0xed,0xfd,0xfd,0x4c,0x71,0x46,0x74,0x71,
0xbd,0x97,0x27,0xc5,0xb6,0xfd,0x9c,0x17,0x9f,0x2d,0xc4,0x7e,0x3c,0xac,0xf2,0x79,0x3a,0xcf,0xee,0xfb,0x3c,0x3c,0x5f,0x84,
0xff,0x30,0x85,0x9b,0xef,0x76,0x27,0x89,0x76,0x08,0x4f,0x95,0x61,0x7d,0xbf,0x87,0xce,0xa4,0xf2,0x6d,0xfb,0x41,0xe3,0x9f,
0xbb,0xc7,0x9f,0x0f,0xe4,0x31,0x6d,0x9f,0xff,0xd9,0xbd,0xd9,0x66,0xb9,0xe5,0x4c,0xe1,0xc6,0xe9,0xea,0x93,0xdd,0xf2,0x72,
0x0c,0x1b,0xd7,0xb3,0x22,0x9b,0xd0,0x5d,0xb3,0x2e,0xbb,0x3d,0xfc,0xbb,0xe4,0xf9,0xda,0xff,0x7c,0xbc,0x64,0xcb,0xcf,0xb7,
0x53,0x18,0x17,0x32,0x05,0xf3,0xd7,0x5f,0x3e,0x1f,0x77,0xe6,0xff,0x97,0xb8,0xcf,0xc3,0xcd,0x9f,0xf2,0x8a,0x1a,0xc2,0x55,
0x48,0xdb,0x96,0xf9,0xff,0x3f,0x2f,0xd1,0xc1,0x57,0x83,0x7a,0xb4,0xbf,0x98,0xb6,0x7b,0x8f,0xe8,0x7f,0x5c,0xba,0xf9,0x39,
0xd8,0xe2,0xde,0xfa,0xfc,0x85,0x73,0xb3,0xcc,0x3c,0x5b,0xb7,0xfc,0xf7,0x4b,0xb4,0x65,0xbc,0x7a,0xc5,0xc9,0x46,0xec,0xeb,
0x31,0x98,0xbf,0xfe,0x3c,0x2f,0xda,0x3f,0xc7,0x56,0xff,0xec,0xb9,0x19,0x9f,0xbf,0x77,0x45,0xcb,0x30,0x3b,0x5e,0x1f,0xfe,
0xcc,0x25,0xea,0x78,0x37,0xc7,0xfb,0xa7,0x1f,0x93,0x03,0xde,0x1f,0xff,0x14,0xfb,0x3b,0xc9,0x9d,0x49,0x19,0xed,0x4f,0x8e,
0x73,0x13,0x6d,0x64,0x9c,0xa9,0xe2,0xd7,0xfb,0x4f,0x95,0xe1,0xb9,0x1c,0x29,0xd3,0x31,0x7f,0xfd,0x7b,0x92,0x24,0x39,0xd4,
0xf3,0x7d,0xff,0x3d,0xe6,0xfd,0x43,0x0a,0xf7,0x3c,0x95,0xfc,0x3b,0xfe,0xe5,0xab,0x2e,0x3d,0x2f,0xd5,0x31,0x15,0x48,0x61,
0x94,0xd9,0x3c,0xff,0x67,0x7f,0x62,0x9f,0xe5,0x5f,0x21,0x2b,0x8d,0x5b,0xba,0x6c,0xfb,0x18,0xac,0x57,0x23,0xae,0x58,0xbd,
0x6e,0x95,0xfe,0x7f,0xfc,0xd4,0x96,0xf9,0x64,0x43,0x23,0xfc,0xb1,0x33,0xf7,0x8f,0x9e,0xa7,0xf5,0x39,0xd6,0xee,0x71,0xf6,
0xf2,0xd8,0xcc,0xab,0xf4,0x47,0x8e,0x6b,0x7d,0xbf,0x23,0x33,0xfc,0xc3,0xe7,0x60,0xfd,0xb8,0xb2,0x90,0x95,0x6b,0xff,0x50,
0xaa,0xee,0x1d,0x97,0xbd,0x7d,0x78,0x84,0xf3,0xf7,0xff,0xcd,0xce,0xdb,0x3f,0x18,0x12,0xb2,0xa5,0xce,0x27,0xcf,0x27,0x85,
0xfa,0x24,0xe8,0x1f,0x28,0x7e,0x52,0xae,0x62,0x59,0xb1,0x7a,0x4b,0x93,0xf5,0x08,0xa5,0x65,0xfc,0xba,0x9b,0x11,0xe9,0xd8,
0x9e,0xb2,0xed,0x75,0x68,0xaf,0xd8,0xf8,0x3d,0xb6,0x9b,0x15,0xfd,0xbb,0xdb,0x37,0x7e,0xde,0xff,0xbf,0x9e,0xb9,0xff,0xed,
0x9c,0x4d,0xe1,0x3d,0x74,0xe4,0xfb,0xef,0xef,0xbf,0x5c,0xf3,0x73,0x7c,0xe3,0xb0,0x0a,0x64,0x1d,0xfc,0x74,0xe1,0xe0,0xfa,
0xff,0x08,0xc7,0xb9,0xeb,0xaa,0x9b,0xfd,0x48,0x37,0xf3,0x08,0xff,0xfb,0xd4,0x56,0xe6,0x43,0xdf,0x08,0xff,0xeb,0xb8,0xee,
0x9d,0xcf,0x7d,0x63,0xfe,0xbe,0x63,0xd9,0xeb,0xac,0x1c,0x19,0x61,0x58,0xfc,0xc3,0xed,0x91,0x69,0x9a,0x8f,0xf2,0x7f,0xe2,
0xb9,0x99,0xc2,0xcc,0xb9,0x0c,0xf3,0x7a,0xfe,0x47,0xf6,0x51,0xfd,0xcf,0xa5,0xfe,0xdd,0x62,0xce,0x7f,0xf8,0x12,0xcd,0x9f,
0xb9,0x76,0xda,0xf7,0x5f,0x0b,0xba,0x0b,0xd7,0x3f,0x3c,0xd4,0x6e,0x7b,0x39,0xfd,0x35,0x90,0x24,0xc9,0xbe,0x86,0x70,0x7d,
0x75,0x9e,0xae,0xf3,0x9f,0xfd,0xd0,0x63,0xb5,0xac,0x40,0x7e,0x5f,0xf4,0x43,0x6b,0xb3,0xa8,0xbd,0x5e,0x9f,0x14,0xe6,0x1b,
0xa7,0x3e,0x7f,0x67,0xff,0xe5,0x31,0xd9,0xbf,0x3e,0xf3,0xdf,0x7b,0x6a,0xf3,0x73,0x73,0xa4,0xc3,0xf6,0x7b,0xe8,0x7f,0x89,
0xb5,0xdb,0xbf,0xe2,0x34,0xfb,0xcf,0xc7,0x32,0xaf,0xd5,0x4e,0x9b,0xfa,0xa7,0x70,0xfe,0x1e,0xe1,0xfa,0xf0,0x7b,0xce,0xc1,
0x13,0xd6,0xe7,0x77,0xa7,0xe1,0xb0,0xfc,0xf3,0x73,0xec,0x4b,0xc5,0x3c,0xff,0xd2,0x7a,0x39,0x70,0x84,0xeb,0x4a,0x4e,0x6f,
0x56,0xc4,0xcf,0x3a,0xe4,0xd0,0xfc,0xbb,0x1e,0xd9,0x97,0x4e,0xe1,0x5d,0x91,0xd5,0x30,0xcb,0x63,0x6f,0xaa,0x70,0xfb,0xf1,
0xb6,0xbb,0x89,0xf3,0xc5,0x07,0xc3,0x17,0x8b,0x98,0xdc,0x38,0xdf,0xe1,0xb2,0xc1,0xdd,0x7d,0xea,0x31,0xb3,0x06,0xcb,0xfe,
0x23,0x7f,0x9b,0xef,0x8b,0xb5,0x96,0xdf,0x95,0x9e,0xdd,0x8f,0xe8,0xae,0xe8,0x3f,0xcc,0x8e,0x67,0xc1,0x0f,0x6e,0x9b,0xb7,
0x5e,0xa4,0xf5,0x23,0xdd,0xb6,0x4b,0x9f,0xaa,0x9b,0x31,0xfa,0xc1,0xa1,0x66,0x0d,0xae,0x73,0x7e,0xb0,0x6c,0x19,0x70,0x46,
0xfc,0xce,0xcb,0x32,0xaf,0xfc,0x66,0xf9,0x36,0x6a,0x1f,0xfc,0x2e,0xf0,0x03,0x0f,0x86,0x1f,0x28,0xa2,0xb1,0xc5,0xf9,0x0e,
0x97,0x83,0x7c,0x88,0xd0,0xb4,0xaf,0x2c,0x32,0x6e,0x69,0x8a,0x19,0x6a,0x59,0xdd,0x15,0xcb,0xc3,0x2c,0xa3,0xdd,0x36,0xe4,
0x53,0xba,0x39,0xcb,0xbe,0x70,0x0a,0xa7,0xf8,0xfd,0xdf,0xf0,0x3b,0x8e,0xe5,0xf1,0xf7,0xd8,0xdd,0xf9,0x0e,0x97,0x35,0xeb,
0x6b,0xab,0x3d,0xb3,0xa2,0x25,0x8b,0x22,0xd7,0x5b,0xca,0x9e,0x29,0xfc,0xf6,0x37,0xf3,0xd7,0x6f,0xef,0x66,0xdc,0xbf,0x7d,
0xdb,0xbe,0x91,0xfb,0x3a,0x3e,0x7e,0x16,0xc5,0xd9,0x5b,0x9f,0xef,0xe7,0x2e,0xf3,0xb3,0xb8,0x30,0xd4,0x5c,0xf6,0x72,0xef,
0xfd,0xff,0xf7,0x0f,0xb5,0xe3,0xfd,0xcf,0xf7,0x3d,0x18,0x36,0x6e,0x46,0xff,0xfb,0xfa,0x58,0x99,0x39,0x7b,0xdb,0x4f,0x65,
0xdf,0x4c,0x9a,0x8e,0xa8,0xcb,0x56,0x9b,0x7f,0x53,0x7e,0xd3,0x3e,0xdf,0xb2,0x5a,0xf9,0xfa,0x28,0xac,0xe3,0xec,0x6f,0xaf,
0xaf,0xad,0xd7,0xbf,0x79,0x26,0xec,0xef,0xd9,0x7e,0xbc,0xcd,0x19,0xc6,0x73,0xac,0xcd,0x7d,0xf3,0x73,0x7f,0x7f,0x92,0xdd,
0xcd,0x5f,0xbf,0x8d,0x43,0x9d,0xef,0x70,0xd9,0xd3,0xf6,0x6d,0x1f,0xda,0x9b,0x72,0xc8,0x1a,0x2c,0xd7,0xde,0x8d,0x30,0x8e,
0x16,0xcf,0x96,0xa6,0x7c,0x52,0x98,0xcf,0x03,0xe6,0xff,0x6f,0x65,0xb3,0xf3,0x1d,0x2e,0x3b,0x18,0x6a,0xcb,0xed,0x71,0xaa,
0x2d,0x4d,0xf9,0xf4,0x1d,0xdf,0xbb,0x62,0xab,0x61,0xa6,0x30,0x3f,0x49,0x1e,0xce,0xfc,0xf5,0x5b,0x66,0xdc,0xe1,0x7c,0x87,
0xcb,0x9d,0xae,0x2a,0xb9,0x76,0xd7,0x56,0xf5,0x6d,0xab,0x2d,0xb7,0x45,0x4b,0x16,0xf9,0x22,0xb2,0x9e,0x5b,0x76,0x30,0x9b,
0xab,0xb1,0xfb,0x78,0xcf,0xdd,0x9c,0xdf,0x1c,0xd8,0xe8,0x7c,0x87,0xcb,0x9e,0xd6,0xb7,0xad,0xc6,0xc9,0x8a,0x96,0xac,0xb6,
0xf7,0xf1,0xd7,0xb7,0xbb,0x22,0xce,0x30,0xbb,0xc4,0xbf,0x0d,0xd9,0xf7,0x4e,0xe7,0x49,0xae,0xff,0xdf,0xf3,0xb8,0xcd,0x67,
0x60,0x61,0x7d,0x39,0x6e,0x69,0xf7,0xa1,0x67,0x1c,0xb9,0xe3,0xfc,0xfc,0x9e,0xa1,0xa6,0x70,0xff,0x70,0xee,0x7e,0x3e,0x84,
0xef,0x4e,0xdb,0xed,0x6c,0x97,0xdf,0x5d,0x35,0xee,0x5f,0x5f,0xbb,0xec,0xb0,0x76,0xf9,0xdd,0xcd,0xf5,0xb9,0x2b,0xb6,0x1d,
0x66,0x9c,0x5b,0x56,0x73,0x4c,0x1d,0x48,0x72,0xbc,0xf9,0xeb,0x37,0xb1,0xb8,0x87,0xa9,0xb9,0x1c,0x64,0x75,0xdb,0x32,0x7e,
0x0a,0x63,0xcd,0xcb,0x33,0x7f,0xbd,0xe3,0xe9,0xbc,0x1b,0xe1,0xb0,0x3d,0x4e,0x3e,0x73,0xbe,0xab,0x9b,0x95,0x6d,0x77,0xb6,
0xf4,0x8d,0xd6,0xde,0x92,0x82,0xf3,0x0e,0x96,0x99,0xd7,0x5b,0xd6,0xed,0xcb,0xef,0x7a,0x30,0x6c,0x96,0xe3,0xf8,0xdb,0xfb,
0x5a,0xad,0xcd,0x8a,0xe5,0xd8,0x61,0xa3,0x7c,0x57,0x6c,0x3b,0xcc,0x14,0xae,0x6f,0xdc,0x7b,0x16,0x7f,0x67,0x1f,0xc7,0x6c,
0x7b,0xbe,0xce,0x77,0xb8,0xdc,0x69,0xe5,0xcc,0x8d,0xd6,0xb6,0xc5,0x29,0xf7,0x72,0x5b,0xdb,0x63,0x0a,0x33,0x64,0xef,0xfc,
0xf9,0x7c,0xf1,0xbd,0x46,0x07,0x43,0xe4,0x43,0x7b,0x19,0xe1,0xf1,0xd8,0xbd,0x56,0xed,0xfd,0x6f,0xa3,0x3e,0x59,0x83,0xb7,
0xb5,0x38,0xab,0x51,0xeb,0xf9,0xfd,0xce,0x77,0x14,0xdb,0x76,0x30,0x44,0x56,0xd7,0x96,0x71,0x18,0xdb,0xad,0xaa,0xdd,0xad,
0xc6,0xcc,0x8a,0x96,0xd8,0x72,0xbf,0xb7,0x35,0xe3,0x3e,0x7d,0x67,0xc8,0xde,0xf9,0xf3,0xe1,0x81,0x7d,0x1b,0x38,0xb1,0x29,
0xbc,0xb3,0x90,0x24,0x53,0x36,0x7f,0xbd,0xe9,0xef,0x98,0x6d,0xcf,0xc5,0xf9,0xbd,0xcb,0x8e,0x96,0x35,0xe9,0xd6,0xff,0x21,
0x7e,0xb9,0xaf,0xac,0xd5,0x31,0xe3,0x7b,0x57,0x44,0x18,0xe6,0xf1,0x6b,0x5e,0xcf,0x3f,0xbf,0xbf,0x7d,0x1d,0x56,0x3f,0x07,
0xf8,0xba,0xe8,0x73,0x76,0xc6,0xc7,0x92,0x8f,0xfe,0xeb,0x53,0xbb,0xce,0x24,0xf4,0xdc,0xb6,0xde,0xbf,0xda,0x92,0xc2,0xd5,
0x8c,0x03,0xae,0xff,0x77,0xdd,0xac,0xf7,0xef,0x1b,0xe1,0x7c,0xcd,0x67,0xf8,0x5e,0xeb,0xb5,0x8d,0xdb,0xeb,0x3d,0xbb,0xc4,
0x2c,0x8d,0x73,0x18,0x70,0xfd,0xbf,0x1b,0x6a,0xc7,0xf9,0xf3,0x6a,0x9f,0xf5,0x9e,0xdd,0xb7,0x4d,0xd9,0x79,0xab,0x9b,0x51,
0x7e,0xb5,0x76,0x73,0xed,0x8d,0x7a,0x2e,0x2b,0xcb,0x71,0x7d,0x3a,0x8e,0xef,0xab,0xa1,0xa6,0x70,0xfd,0x21,0x49,0xf2,0x1c,
0xcd,0x5f,0x9f,0x3b,0xae,0xf9,0x7d,0x42,0x64,0xd8,0x18,0xf7,0x49,0xa1,0x32,0x24,0xcf,0xdd,0xfc,0xf5,0xd9,0x03,0xc7,0x7f,
0x79,0x4a,0xb3,0x5e,0xbe,0x09,0x37,0x3b,0xed,0x1b,0x67,0x98,0xd3,0x56,0x3e,0x5b,0xd7,0xe1,0x33,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0xc9,0xe3,0x9a,0xc2,0xe7,0xff,0xbc,0x6c,0x43,0x02,0xf3,0x9c,0xac,0xbb,0xf9,0x96,0xea,0x33,0xcd,0x9a,0xff,0x24,
0x2f,0xcf,0x14,0xee,0x0d,0x48,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0xf2,0x92,0xcc,0x5f,0x1f,0x90,0xd3,0x39,0xf9,0xfc,0xfc,0xbf,0x33,0x92,0x24,0x49,0x92,0xe4,0xa3,0xf3,0x75,
0xcd,0xe7,0x35,0x53,0xc8,0xf3,0x10,0x36,0x1d,0x5d,0x5c,0x87,0xd7,0xad,0x3d,0x49,0x92,0xa7,0xb5,0xfe,0xce,0x95,0x42,0x56,
0x24,0xcf,0xc5,0xd5,0xf7,0x23,0xb3,0x9b,0xeb,0x62,0xb9,0x8b,0xf1,0x35,0xa7,0xdc,0xb6,0xab,0xa7,0xfe,0x8e,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x39,0xde,0xfc,0xf5,0x7f,0x66,0x24,0x49,0x92,0xe4,0x19,0xfb,0xba,0xf0,0x79,0x02,
0x99,0x90,0x53,0xb9,0x7a,0x5e,0xe3,0x21,0x3c,0xf5,0x33,0x38,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x8f,0xcd,0xfc,0xf5,0x69,0x92,0x24,0x49,0x92,0xe4,
0x50,0x7b,0x3d,0x7f,0x7d,0xfb,0x79,0x5a,0xe6,0x7f,0x57,0x2c,0x0f,0xb3,0xa9,0x26,0x59,0xb1,0x36,0x5b,0xef,0xeb,0x53,0xbc,
0x44,0x37,0xf3,0xe7,0x53,0x43,0xed,0x78,0x7e,0x7d,0xdb,0xb9,0x19,0xe7,0x3f,0x0f,0xcb,0x6f,0x6b,0x36,0xab,0xf5,0x1f,0xf0,
0xf9,0xcf,0xb7,0xb2,0xd9,0xbc,0xce,0x1d,0xcd,0x8a,0xfe,0xb1,0x63,0xf6,0x1b,0x47,0x18,0x33,0xbe,0x77,0x45,0x84,0x61,0xf6,
0x9d,0x21,0x29,0xcc,0xa8,0xd4,0x66,0x7b,0x0a,0x9f,0xf1,0x92,0x24,0x49,0x92,0x24,0xc9,0xd3,0x9a,0xbf,0x5e,0x90,0xc5,0x27,
0x7e,0x1b,0xe3,0xf6,0x14,0x66,0x29,0x2f,0xd5,0xfc,0xf5,0x2d,0x3c,0x67,0x9b,0x46,0x76,0x1e,0x96,0x9b,0x3e,0x73,0x4e,0x64,
0xf7,0x33,0xab,0xac,0x7f,0xdd,0xe3,0x8c,0x3e,0x8f,0xe3,0xab,0x45,0xf8,0xe4,0x6c,0xe5,0x27,0x56,0x66,0xf3,0x62,0x39,0xf7,
0x7a,0xb1,0x7c,0x7f,0x56,0xf4,0x19,0xe7,0xbc,0x88,0x56,0x3a,0x3e,0x5a,0xdd,0x97,0x45,0xfe,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x9e,
0x97,0xef,0x42,0x08,0x7d,0x4c,0x21,0x67,0x92,0x24,0x49,0x92,0x24,0x49,0x1e,0xce,0xb0,0x08,0xef,0x93,0x24,0x49,0x92,0x8f,
0xc9,0xbe,0xdf,0x99,0x5e,0x92,0xc3,0x9e,0x1a,0x52,0xc8,0x9c,0x9c,0xc6,0x40,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0xbc,0x09,0x8b,0xf0,0x7c,
0xb6,0xc3,0xd5,0xda,0x5d,0xed,0xdd,0xfb,0x97,0x2d,0x2f,0x8b,0xe5,0xdc,0x6b,0x92,0x24,0xcf,0xca,0xe7,0xdb,0x96,0xef,0x6b,
0x2c,0xfd,0x44,0x51,0xa5,0xd8,0xa3,0xed,0xf7,0xf9,0x2e,0xfb,0xc6,0xc9,0xc7,0xf4,0x13,0x24,0x49,0x92,0xec,0x6f,0xdb,0x5d,
0xd6,0xa9,0x3f,0xe3,0x22,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0xd6,0xcd,0x5f,0x1f,0x27,0x4f,0xe7,0x31,0xe7,0xe7,0x54,0xf1,0x8f,0x73,0x7e,0xd5,0xe3,0xcc,0xc3,0x72,0x63,0x76,0xdf,0xf2,
0x24,0xec,0x32,0x85,0x6b,0x0b,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x5e,0x92,
0xf3,0xb0,0x9c,0xcd,0xb8,0xe5,0xaa,0x32,0x6b,0x53,0xc8,0xa7,0x9e,0x55,0x77,0x03,0x79,0x86,0x0e,0x9b,0xed,0xbb,0x3d,0xf5,
0x35,0x36,0x65,0xc7,0x8c,0x11,0x49,0xf2,0xb4,0x8e,0x79,0x7f,0x4c,0x21,0xff,0xe3,0x57,0x29,0x85,0x7c,0x1e,0x83,0xf3,0x2d,
0xab,0x4f,0x34,0xfb,0xfa,0x37,0xf9,0xa4,0xa7,0xfd,0x9e,0xb3,0xb6,0xf3,0x19,0xb2,0xd5,0xb9,0x78,0x49,0xc7,0x72,0x6e,0x66,
0x1b,0xa7,0x7c,0xd2,0x19,0x72,0xfd,0xcf,0x6e,0x03,0x93,0x30,0x3f,0xfb,0x2a,0x96,0xed,0x29,0x3c,0x27,0x92,0xac,0xbb,0xe2,
0x14,0xef,0x20,0xef,0x26,0x32,0x7e,0x27,0xe2,0x63,0x76,0xe8,0xfc,0x49,0xd1,0x7e,0x47,0x71,0xea,0x6b,0x08,0x79,0x2a,0x03,
0x1f,0xb1,0xe6,0xc0,0x79,0x59,0x1f,0xaf,0xfa,0xb9,0xdc,0x74,0x76,0x77,0x39,0xeb,0xa7,0x9d,0x0f,0xf5,0xac,0xc6,0x1c,0x29,
0x4f,0x65,0x97,0x39,0x33,0x6c,0xbc,0x2e,0x7b,0x56,0x8c,0x3f,0xd7,0x9a,0xce,0xeb,0xcb,0xae,0x1b,0x49,0x92,0x1c,0xaf,0xe7,
0xfd,0x71,0x66,0x09,0xe4,0x70,0xa9,0xaa,0xed,0xe1,0x54,0xdb,0xc3,0xa9,0xb6,0x87,0x73,0x48,0x6d,0xe3,0xf7,0xb8,0xbb,0x70,
0xc5,0x8e,0xe6,0xf5,0xca,0x66,0x24,0x49,0x92,0x24,0x1f,0x85,0xf3,0xb0,0xe4,0x24,0xaa,0xf0,0xe1,0x6a,0xd8,0x5e,0xdb,0xc3,
0x9d,0x17,0x71,0x4b,0xd6,0x60,0xb9,0x76,0xf5,0xc9,0xc3,0x61,0x6c,0xaf,0x58,0x97,0x3e,0x63,0x4c,0xe1,0x67,0x14,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xd9,0xdd,0xfc,0xf5,0xec,0x3c,0x4d,0xa1,0x7a,0x24,0x79,0xbe,0xce,0xc3,0xf2,0x69,0x37,
0xfb,0xf6,0x1f,0xe3,0x54,0x19,0x76,0x89,0x90,0xc2,0x28,0x90,0xe4,0xf1,0xcd,0x5f,0x1f,0xe3,0xda,0x7a,0x7d,0xf2,0xf7,0x88,
0x8f,0x75,0x73,0xd8,0x5e,0xee,0x8a,0x96,0x61,0x76,0x19,0xd3,0x14,0xe6,0x18,0x49,0x92,0x8f,0xcd,0xfc,0xf5,0xe4,0xdc,0xcc,
0xef,0x67,0x9e,0x1c,0xb1,0x3e,0x4b,0x16,0x35,0xdf,0xe9,0x5d,0xb1,0x76,0x98,0xed,0x95,0x7f,0x1b,0x6e,0xf6,0xf6,0x21,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xc9,0xc7,0x63,0xfe,0x7a,0xaf,0x9b,0xed,0xfd,0xeb,0x6b,0xfb,0xc6,0xef,0xeb,0x3a,
0xfe,0xec,0x86,0x24,0xd3,0xf3,0x5d,0x98,0x85,0xb5,0xc3,0x22,0xcc,0xc3,0xb2,0xa3,0xf1,0xbe,0x1e,0x8f,0x79,0x95,0x16,0x4c,
0xcf,0x7c,0x4e,0x76,0xb4,0xec,0xdf,0x34,0xbe,0x77,0xc5,0xda,0x61,0x36,0xc5,0x7c,0x5d,0xac,0x7d,0xdd,0xda,0x87,0x24,0x49,
0x92,0x24,0x49,0x92,0xec,0xe6,0x3c,0xac,0x3e,0xe3,0xe2,0x61,0x7d,0xd3,0xb3,0xbd,0xf4,0xdd,0x04,0xa6,0x30,0xc7,0x1e,0xb3,
0xa7,0x9f,0x7b,0x8f,0xcd,0x29,0xce,0x1a,0xe7,0x17,0xc9,0xb1,0xe6,0x57,0xa4,0xab,0x5d,0x6e,0xde,0x17,0x76,0xae,0x4d,0xc7,
0x7a,0x9e,0x71,0x4b,0x7c,0x25,0x9c,0xea,0xb8,0xda,0x23,0x34,0xed,0xab,0xcb,0xb5,0xba,0xbd,0x67,0x97,0xf8,0xd3,0xd6,0x67,
0xd8,0x7e,0xdb,0xe3,0x8f,0x9f,0x69,0x63,0xa2,0x1d,0x73,0x26,0x1c,0x62,0x9e,0xb7,0xcf,0x8d,0xbe,0xb9,0xa5,0x93,0x3f,0x9b,
0x47,0x36,0xbb,0x5a,0xeb,0xfe,0x90,0x24,0x39,0x95,0x2f,0x43,0x16,0x66,0x8b,0x1d,0x2e,0x1a,0xda,0x2f,0xd6,0xd0,0x60,0x0a,
0xb9,0xf1,0xf2,0x6c,0x9a,0x6f,0x7d,0x3d,0x4e,0x86,0x87,0xde,0xcb,0x01,0x22,0x2f,0x0e,0x1c,0x3f,0x21,0x87,0xcf,0x9f,0xa7,
0xf9,0xc3,0xd9,0xec,0x66,0x94,0xab,0x1c,0xee,0xad,0xe7,0xf6,0x74,0x1e,0x8a,0x9e,0xe7,0xe4,0xea,0x17,0xe3,0x56,0x9e,0x6b,
0xfe,0xe7,0x62,0x51,0xe1,0xd8,0x1d,0x73,0xbb,0xe8,0x19,0x3b,0xd5,0xde,0x0f,0x11,0x73,0xed,0xa2,0x16,0xb9,0x6c,0x19,0xe6,
0x11,0x47,0x64,0xea,0xf7,0x26,0xae,0xfc,0x8e,0x95,0xd7,0x69,0xfa,0x72,0x11,0xae,0xaf,0x6e,0x72,0xc3,0xd5,0xe2,0xe5,0xe2,
0x00,0x15,0x58,0x14,0xf3,0x6a,0xb8,0xe3,0x23,0x4c,0xbb,0xf7,0xc5,0x20,0x6f,0x26,0xae,0x4f,0xbf,0xfa,0x1f,0x66,0x64,0xef,
0xe3,0x67,0xfb,0x4d,0xe0,0x1c,0x24,0xb9,0xc3,0x2e,0xe7,0x6f,0xfa,0x4e,0xfb,0xcc,0x38,0x6c,0xef,0x29,0xd4,0x81,0x93,0x8e,
0xd4,0xfb,0xc9,0xcc,0xd8,0x10,0x39,0xc1,0x8c,0x9d,0xc8,0x10,0xd9,0xa5,0x67,0x97,0x6a,0xc7,0xb6,0x8f,0xc5,0x7d,0xcf,0xf0,
0x60,0x8f,0xca,0x9c,0xf6,0x8a,0x31,0x7e,0xb6,0xb4,0xb7,0x47,0x7e,0xcb,0xca,0xeb,0x26,0x93,0x38,0x2b,0x1f,0xa7,0xb5,0x71,
0x6c,0x9f,0xf9,0x63,0x3c,0xed,0x91,0x8e,0xcf,0x7f,0xfc,0xf1,0xb6,0xd7,0xa1,0x29,0xc2,0x98,0x4a,0xd6,0xe3,0x1c,0xa2,0xb6,
0xa1,0xc3,0x72,0x97,0x0c,0xbb,0x44,0xee,0x12,0x93,0x49,0x5b,0x7b,0xa7,0x08,0x9d,0x3d,0x74,0x6e,0xdd,0x33,0x39,0x55,0xce,
0x93,0xe5,0x56,0xfd,0xdc,0xbb,0x8b,0x8b,0xba,0x7b,0xee,0x40,0x12,0xb8,0x3f,0xdc,0x33,0x03,0x47,0xd8,0x78,0xd7,0x17,0xf7,
0x99,0x74,0x8f,0x63,0xf2,0x6c,0xcf,0xf0,0x20,0x79,0x26,0x70,0xec,0x29,0xdb,0x74,0x4e,0xed,0x39,0xd7,0x92,0xb1,0x47,0xce,
0x29,0x9c,0xf5,0x1c,0x64,0xf7,0x3b,0xdb,0x26,0x07,0xbd,0xd7,0x9c,0x99,0x1f,0xd6,0x7c,0x55,0xb3,0x69,0xdb,0x14,0x46,0xf9,
0x10,0x73,0x26,0x85,0x99,0x39,0x59,0xb6,0x1d,0xae,0x87,0x8d,0xef,0xa1,0xed,0xd1,0x76,0xac,0xed,0xf9,0x69,0xf9,0xf8,0xeb,
0xf9,0x9e,0xbd,0x77,0x3e,0xae,0x4e,0x95,0xac,0xc6,0x4f,0xe1,0xfc,0x25,0xfb,0x3a,0xd5,0xf7,0x5f,0x29,0x1c,0x0b,0x4f,0x37,
0x8b,0xb2,0x86,0x6b,0xec,0xd1,0xbf,0x3f,0x6d,0x8f,0x7f,0xb0,0xef,0x7f,0x57,0x75,0x28,0x7e,0xbf,0x6c,0xa4,0xab,0x68,0x61,
0x51,0x77,0xaa,0xf8,0x6c,0xaf,0xf3,0x21,0xea,0x7f,0xe8,0xf8,0xe7,0xe8,0x31,0xeb,0x9f,0xc6,0x31,0x66,0x91,0xfd,0x8e,0x9d,
0xe9,0xbb,0x1a,0xf1,0x29,0xde,0x49,0xbb,0x7c,0x5f,0x3f,0xec,0xb9,0x72,0xfc,0x37,0x9b,0xe3,0x9f,0x4f,0x47,0x7d,0x0b,0x19,
0xd5,0x67,0xe0,0xf3,0x72,0x11,0x21,0x85,0xcf,0x16,0x52,0x36,0x85,0x6f,0xba,0x1f,0x9b,0xed,0xdf,0x98,0x1f,0x7f,0x5c,0xba,
0x7f,0x8f,0x7f,0xbe,0x3f,0x4d,0x31,0xad,0xc5,0xd5,0x9b,0x8f,0xce,0xe9,0x9e,0x22,0xb3,0x03,0xd8,0xf9,0xf9,0xba,0x9e,0xcf,
0xb4,0xfd,0xdb,0xb7,0xed,0x62,0x02,0xe7,0xf8,0xa8,0x63,0x3c,0x44,0xcc,0xd6,0xf8,0x3b,0xae,0xb7,0x63,0xe6,0xe7,0xe1,0x32,
0x1f,0x16,0xbf,0x67,0xfe,0x3d,0xde,0x95,0x06,0xd5,0x27,0x85,0xe7,0x4d,0xf2,0xf1,0xb8,0xfe,0x77,0x57,0x4f,0x9f,0xc9,0x65,
0x98,0xc2,0xbf,0x02,0x7c,0x38,0xef,0xc2,0xd5,0x60,0xbb,0xc4,0x4f,0xe1,0x33,0x28,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x39,0xde,0x77,0xe1,0x49,0xf1,0xf9,0xff,0xca,0x97,0x8b,0x30,0x9f,0x91,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0xf2,0x94,0x86,0x33,0x37,0x85,0x1a,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0xd6,0xf5,0xef,0x2f,
0x90,0xe4,0x21,0x74,0xfd,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0xc6,0x86,0x03,0x98,0xc2,0x71,0x91,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0xa7,0x32,0x90,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x76,0x36,0x85,0xbf,0x9e,0x44,0x92,0x24,0x49,0x92,0x4d,0xa6,0xf0,
0xdc,0x44,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x9e,0xc4,0x77,0xe1,0x49,0x08,0xf7,0xbe,0x3c,0xf5,
0x4f,0xf2,0x90,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x87,0xf6,0xe4,
0xff,0xa2,0x28,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0xe4,0x79,0xf9,0x2e,0x3c,0x09,0x61,0x63,0x20,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0xc9,0xc8,0x27,0x91,0x29,0xe4,0x43,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x32,0x1d,0x9f,0x44,0xa6,0x90,0x0f,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xc9,0x74,0x7c,0x12,0x99,0x42,0x3e,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xd3,0xf1,0x49,0x64,0x0a,0xf9,0x90,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0xe4,0xff,0x6f,0xef,0x8e,0x51,0x18,0x06,
0x62,0x28,0x0a,0xca,0x8b,0x09,0xd1,0xfd,0x2f,0x1c,0x30,0x98,0x88,0xa4,0x33,0x86,0xfc,0xc0,0x34,0x53,0xa8,0x7a,0x85,0xd0,
0x96,0x4b,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x73,0xec,0x61,0x42,0x0f,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xc9,0x1c,0x7b,0x98,0xd0,0x43,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x32,0xc7,0x1e,0x26,0xf4,0x90,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0xcc,0xb1,0x87,0x09,0x3d,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x73,0xec,0x61,0x42,0x0f,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xc9,0x1c,0xfb,0xc3,0xf5,0x35,0xf9,
0x17,0x8f,0xf2,0x9d,0xbc,0x66,0xc2,0x0e,0x93,0x3f,0xbb,0x9f,0xeb,0xb9,0x91,0x24,0xf3,0x4c,0x78,0x23,0x48,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x5e,0x35,0xe1,0x3f,0x02,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0xbc,0xcb,0x7e,0xbb,0xaa,0x36,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x3c,0xad,0xae,0x3a,0x4d,0xe8,0x21,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x99,0x63,0x75,0xd5,0xe3,0x05,0x08,
0xc2,0x7e,0x44,
};

View file

@ -0,0 +1,62 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
static constexpr bool graphemeBreakTable[14][14] =
{
// Other cr lf Control Extend ri Prepend SpacingMark L V T LV LVT zwj
/*Other*/ { true, true, true, true, false, true, true, false, true, true, true, true, true, true },
/*cr*/ { true, true, false, true, true, true, true, true, true, true, true, true, true, true },
/*lf*/ { true, true, true, true, true, true, true, true, true, true, true, true, true, true },
/*Control*/ { true, true, true, true, true, true, true, true, true, true, true, true, true, true },
/*Extend*/ { true, true, true, true, false, true, true, false, true, true, true, true, true, true },
/*ri*/ { true, true, true, true, false, false, true, false, true, true, true, true, true, true },
/*Prepend*/ { false, true, true, true, false, false, false, false, false, false, false, false, false, false },
/*SpacingMark*/ { true, true, true, true, false, true, true, false, true, true, true, true, true, true },
/*L*/ { true, true, true, true, false, true, true, false, false, false, true, false, false, true },
/*V*/ { true, true, true, true, false, true, true, false, true, false, false, true, true, true },
/*T*/ { true, true, true, true, false, true, true, false, true, true, false, true, true, true },
/*LV*/ { true, true, true, true, false, true, true, false, true, false, false, true, true, true },
/*LVT*/ { true, true, true, true, false, true, true, false, true, true, false, true, true, true },
/*zwj*/ { true, true, true, true, false, true, true, false, true, true, true, true, true, true }
};
static inline bool isGraphemeBreak (GraphemeBreakType g1, GraphemeBreakType g2)
{
return graphemeBreakTable[(int) g1][(int) g2];
}
} // namespace juce

View file

@ -0,0 +1,291 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce::tr14
{
using EAWType = EastAsianWidthType;
using BreakClass = LineBreakType;
// This compiles down to the same machine code as an array matrix and
// gives us enum value compile time safety. This way we dont need to worry
// about the enum being modified and the table being out of sync.
template <size_t Size, typename ValueType, typename ResultType>
struct LookUpTable
{
inline constexpr void set (ValueType v1, ValueType v2, ResultType result)
{
cols[index (v1)][index (v2)] = result;
}
inline constexpr ResultType get (ValueType v1, ValueType v2) const
{
return cols[index (v1)][index (v2)];
}
private:
static inline constexpr size_t index (ValueType value)
{
return (size_t) value;
}
ResultType cols[Size][Size];
};
enum class BreakOppurtunity
{
direct,
indirect,
prohibited,
combinedProhibited,
combinedIndirect
};
struct BreakAtom final : public UnicodeAnalysisPoint
{
constexpr bool operator== (BreakClass type) const { return data.bt == type; }
constexpr bool operator== (EAWType type) const { return data.asian == type; }
constexpr auto getBreakClass() const { return data.bt; }
constexpr auto getEastAsianWidthType() const { return data.asian; }
};
static_assert (sizeof (BreakAtom) == sizeof (UnicodeAnalysisPoint), "BreakAtom - UnicodeAnalysisPoint size mismatch");
struct BreakPairTable final : LookUpTable<42, BreakClass, BreakOppurtunity>
{
BreakPairTable()
{
#include "juce_LineBreakTable.inl"
}
};
static inline BreakClass resolve (BreakClass bc, [[maybe_unused]] bool mnMc = false)
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
switch (bc)
{
case BreakClass::ai:
case BreakClass::sg:
case BreakClass::xx:
return BreakClass::al;
case BreakClass::sa:
return BreakClass::al;
case BreakClass::cj:
return BreakClass::ns;
default: break;
}
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return bc;
}
static inline BreakClass resolveSOT (BreakClass bc)
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
switch (bc)
{
case BreakClass::lf:
case BreakClass::nl:
return BreakClass::bk;
case BreakClass::sp:
return BreakClass::wj;
default: break;
}
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return bc;
}
static const BreakPairTable pairTable;
template <typename Callback>
size_t analyseLineBreaks (Span<const UnicodeAnalysisPoint> span, Callback&& callback)
{
uint32_t resultIndex = 0;
uint32_t regionalCounter = 0;
std::optional<BreakClass> lb9;
bool lb21a{};
const auto data = (const BreakAtom*) span.data();
const auto len = span.size();
const auto emit = [&] (auto op) { callback ((int) resultIndex++, op); };
#define step() i++; continue
for (size_t i = 0; i < len;)
{
const auto isSOT = i == 0;
const auto isEOT = i == len - 1;
const auto prev = isSOT ? resolveSOT (resolve (data[i].getBreakClass()))
: lb9.value_or (resolve (data[i].getBreakClass()));
const auto next = isEOT ? BreakClass::cm
: resolve (data[i + 1].getBreakClass());
lb9.reset();
if (prev == BreakClass::cr && next == BreakClass::lf)
{
emit (TextBreakType::none);
step();
}
// LB4
if (any (prev, BreakClass::bk, BreakClass::lf, BreakClass::nl))
{
emit (TextBreakType::hard);
step();
}
// LB6
if (any (next, BreakClass::bk, BreakClass::lf, BreakClass::nl))
{
emit (TextBreakType::none);
step();
}
// LB7
if (any (next, BreakClass::sp, BreakClass::zw))
{
emit (TextBreakType::none);
step();
}
// LB13
if (any (next, BreakClass::cl, BreakClass::cp, BreakClass::ex, BreakClass::is, BreakClass::sy))
{
emit (TextBreakType::none);
step();
}
// lb21a
if (lb21a && any (prev, BreakClass::hy, BreakClass::ba))
{
emit (TextBreakType::none);
step();
}
lb21a = prev == BreakClass::hl;
// LB30a
if (prev == BreakClass::ri)
{
regionalCounter++;
if (next == BreakClass::ri && regionalCounter % 2 == 0)
{
regionalCounter = 0;
emit (TextBreakType::soft);
step();
}
}
else
{
regionalCounter = 0;
}
const auto bt = pairTable.get (prev, next);
switch (bt)
{
case BreakOppurtunity::direct:
{
emit (TextBreakType::soft);
step();
} break;
case BreakOppurtunity::prohibited:
{
emit (TextBreakType::none);
step();
} break;
case BreakOppurtunity::indirect:
{
while (i < len)
{
emit (TextBreakType::none);
if (resolve (data[i].getBreakClass()) != BreakClass::sp)
break;
i++;
}
step();
} break;
case BreakOppurtunity::combinedIndirect:
{
lb9 = std::make_optional (prev);
while (i < len)
{
emit (TextBreakType::none);
if (! any (resolve (data[i].getBreakClass()), BreakClass::cm, BreakClass::zwj))
break;
i++;
}
step();
} break;
case BreakOppurtunity::combinedProhibited:
{
emit (TextBreakType::none);
step();
} break;
}
step();
}
//emit (TextBreakType::soft);
#undef emit
#undef step
return resultIndex;
}
}

View file

@ -0,0 +1,159 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
inline TextScript mapTextScript (UnicodeTextScript type)
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wswitch-enum")
#define CASE(in, out) case UnicodeTextScript::in: return TextScript::out
switch (type)
{
CASE (Common, common);
CASE (Emoji, emoji);
CASE (Arabic, arabic);
CASE (Armenian, armenian);
CASE (Bengali, bengali);
CASE (Bopomofo, bopomofo);
CASE (Cyrillic, cyrillic);
CASE (Devanagari, devanagari);
CASE (Ethiopic, ethiopic);
CASE (Georgian, georgian);
CASE (Greek, greek);
CASE (Gujarati, gujarati);
CASE (Gurmukhi, gurmukhi);
CASE (Hangul, hangul);
CASE (Han, han);
CASE (Hebrew, hebrew);
CASE (Hiragana, hiragana);
CASE (Katakana, katakana);
CASE (Kannada, kannada);
CASE (Khmer, khmer);
CASE (Lao, lao);
CASE (Latin, latin);
CASE (Malayalam, malayalam);
CASE (Myanmar, myanmar);
CASE (Oriya, oriya);
CASE (Sinhala, sinhala);
CASE (Tamil, tamil);
CASE (Telugu, telugu);
CASE (Thaana, thaana);
CASE (Thai, thai);
CASE (Tibetan, tibetan);
CASE (Adlam, adlam);
CASE (Balinese, balinese);
CASE (Bamum, bamum);
CASE (Batak, batak);
CASE (Chakma, chakma);
CASE (Cham, cham);
CASE (Cherokee, cherokee);
CASE (Javanese, javanese);
CASE (Kayah_Li, kayahLi);
CASE (Tai_Tham, taiTham);
CASE (Lepcha, lepcha);
CASE (Limbu, limbu);
CASE (Lisu, lisu);
CASE (Mandaic, mandaic);
CASE (Meetei_Mayek, meeteiMayek);
CASE (Newa, newa);
CASE (Nko, nko);
CASE (Ol_Chiki, olChiki);
CASE (Osage, osage);
CASE (Miao, miao);
CASE (Saurashtra, saurashtra);
CASE (Sundanese, sundanese);
CASE (Syloti_Nagri, sylotiNagri);
CASE (Syriac, syriac);
CASE (Tai_Le, taiLe);
CASE (New_Tai_Lue, newTaiLue);
CASE (Tai_Viet, taiViet);
CASE (Tifinagh, tifinagh);
CASE (Vai, vai);
CASE (Wancho, wancho);
CASE (Yi, yi);
CASE (Hanifi_Rohingya, hanifiRohingya);
CASE (Nyiakeng_Puachue_Hmong, nyiakengPuachueHmong);
CASE (Canadian_Aboriginal, canadianAboriginalSyllabics);
default: break;
}
#undef CASE
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
return TextScript::common;
}
// TR24
// https://www.unicode.org/reports/tr24/tr24-32.html
namespace tr24
{
template <typename Callback>
void inline analyseScripts (const Span<UnicodeAnalysisPoint> points, Callback&& callback)
{
bool once = false;
UnicodeTextScript previousBaseTextScript = UnicodeTextScript::Common;
for (size_t i = 0; i < points.size(); i++)
{
const auto& entry = points[i].data;
auto script = entry.script;
if (! std::exchange (once, true))
{
if (script == UnicodeTextScript::Inherited)
script = UnicodeTextScript::Common;
previousBaseTextScript = script;
}
if (script == UnicodeTextScript::Common && entry.emoji == EmojiType::extended)
script = UnicodeTextScript::Emoji;
// Last part is a hack..
if (script == UnicodeTextScript::Common || script == UnicodeTextScript::Inherited)
script = previousBaseTextScript;
callback ((int) i, mapTextScript (script));
previousBaseTextScript = script;
}
}
}
}

View file

@ -0,0 +1,114 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
// https://www.unicode.org/reports/tr31/#Table_Recommended_Scripts
enum class TextScript
{
// Recommend scripts
common,
arabic,
armenian,
bengali,
bopomofo,
cyrillic,
devanagari,
ethiopic,
georgian,
greek,
gujarati,
gurmukhi,
hangul,
han,
hebrew,
hiragana,
katakana,
kannada,
khmer,
lao,
latin,
malayalam,
myanmar,
oriya,
sinhala,
tamil,
telugu,
thaana,
thai,
tibetan,
// Limited use
adlam,
balinese,
bamum,
batak,
chakma,
canadianAboriginalSyllabics,
cham,
cherokee,
nyiakengPuachueHmong,
javanese,
kayahLi,
taiTham,
lepcha,
limbu,
lisu,
mandaic,
meeteiMayek,
newa,
nko,
olChiki,
osage,
miao,
hanifiRohingya,
saurashtra,
sundanese,
sylotiNagri,
syriac,
taiLe,
newTaiLue,
taiViet,
tifinagh,
vai,
wancho,
yi,
emoji,
scriptCount
};
} // namespace juce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,269 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
// This only make sense with integral/enum types.
// We use it for enums and std::pair<enum, enum>.
template <typename T, typename... TT>
static constexpr bool any (T b, TT... bs)
{
return ((b == bs) || ...);
}
// Order is important!!!!
enum class LineBreakType : uint8_t
{
al, bk, cm, cr, gl, lf, nl, sp, wj,
zw, zwj, ai, b2, ba, bb, cb, cj, cl, cp,
eb, em, ex, h2, h3, hl, hy, in, is, jl,
id, jt, jv, ns, nu, op, po, pr, qu, ri,
sa, sg, sy, xx, opw
};
// Order is important!!!!
enum class EastAsianWidthType : uint8_t
{
N,
narrow,
ambiguous,
full,
half,
wide
};
// Order is important!!!!
enum class BidiType : uint8_t
{
// Strong: Left to right
ltr,
// Strong: Right to left
rtl,
// Strong: Arabic Right to left
al,
// Weak: European number
en,
// Weak: Arabic umber
an,
// Weak: European number seperator
es,
// Weak: European number terminator
et,
// Weak: Common number seperator
cs,
// Weak: onspacing mark
nsm,
// Weak: Boundary
bn,
// eutral: Paragraph seperator
b,
// eutral: Segment seperator
s,
// eutral: Whitespace
ws,
// eutral: Other s
on,
// Explicit Formatting: LTR Embedding
lre,
// Explicit Formatting: LTR Override
lro,
// Explicit Formatting: RTL Embedding
rle,
// Explicit Formatting: RTL Overide
rlo,
// Explicit Formatting: Pop Directional Format
pdf,
// Explicit Formatting: LTR Isolate
lri,
// Explicit Formatting: RTL Isolate
rli,
// Explicit Formatting: First Strong Isolate
fsi,
// Explicit Formatting: Pop Directional Isolate
pdi,
none
};
enum class VerticalTransformType : uint8_t
{
R, U, Tr, Tu
};
// https://www.unicode.org/reports/tr51/tr51-21.html
enum class EmojiType : uint8_t
{
yes,
presentation,
modifier,
modifierBase,
component,
extended,
no
};
// This is an internal type
enum class UnicodeTextScript : uint8_t
{
Common, Inherited, Han, Arabic, Hiragana, Adlam, Mende_Kikakui, Ethiopic, Wancho,
Toto, Nyiakeng_Puachue_Hmong, Glagolitic, Latin, SignWriting, Greek, Duployan,
Nushu, Katakana, Tangut, Khitan_Small_Script, Miao, Medefaidrin, Pahawh_Hmong,
Bassa_Vah, Tangsa, Mro, Bamum, Cypro_Minoan, Cuneiform, Tamil, Lisu, Makasar,
Gunjala_Gondi, Masaram_Gondi, Marchen, Bhaiksuki, Pau_Cin_Hau, Canadian_Aboriginal,
Soyombo, Zanabazar_Square, Nandinagari, Dives_Akuru, Warang_Citi, Dogra, Ahom,
Takri, Mongolian, Modi, Siddham, Tirhuta, Newa, Grantha, Khudawadi, Multani,
Khojki, Sinhala, Sharada, Mahajani, Chakma, Sora_Sompeng, Kaithi, Brahmi, Elymaic,
Chorasmian, Sogdian, Yezidi, Hanifi_Rohingya, Psalter_Pahlavi, Avestan, Manichaean,
Kharoshthi, Meroitic_Cursive, Lydian, Phoenician, Hatran, Nabataean, Palmyrene,
Imperial_Aramaic, Cypriot, Vithkuqi, Caucasian_Albanian, Elbasan, Osage,
Osmanya, Shavian, Deseret, Ugaritic, Gothic, Carian, Lycian, Hangul, Cyrillic,
Hebrew, Armenian, Meetei_Mayek, Cherokee, Tai_Viet, Myanmar, Cham, Javanese, Rejang,
Kayah_Li, Devanagari, Saurashtra, Phags_Pa, Syloti_Nagri, Vai, Yi, Bopomofo,
Tifinagh, Georgian, Coptic, Braille, Sundanese, Ol_Chiki, Lepcha, Batak, Balinese,
Tai_Tham, Buginese, Khmer, Limbu, Tai_Le, Tagbanwa, Buhid, Hanunoo, Tagalog, Runic,
Ogham, Tibetan, Lao, Thai, Malayalam, Kannada, Telugu, Oriya, Gujarati, Gurmukhi,
Bengali, Syriac, Mandaic, Samaritan, Nko, Thaana,
Linear_A,
Linear_B,
New_Tai_Lue,
Old_Hungarian,
Old_Turkic,
Old_Uyghur,
Old_Sogdian,
Old_South_Arabian,
Old_North_Arabian,
Old_Persian,
Old_Permic,
Old_Italic,
Inscriptional_Pahlavi,
Inscriptional_Parthian,
Anatolian_Hieroglyphs,
Egyptian_Hieroglyphs,
Meroitic_Hieroglyphs,
Emoji
};
enum class GraphemeBreakType : uint8_t
{
other, cr, lf, control, extend, regionalIndicator, prepend, spacingMark,
l, v, t, lv, lvt, zwj
};
namespace generated
{
#include "juce_UnicodeData.cpp"
#ifdef JUCE_UNIT_TESTS
#include "juce_UnicodeTestData.cpp"
#endif
}
using UnicodeData = generated::UnicodeEntry;
struct UnicodeAnalysisPoint
{
uint32_t character;
UnicodeData data;
struct
{
uint16_t level;
} bidi;
};
static UnicodeData getUnicodeDataForCodepoint (uint32_t codepoint)
{
static const Array<UnicodeData> data = []
{
using namespace generated;
Array<UnicodeData> arr;
MemoryInputStream mStream {compressedUnicodeData, std::size (compressedUnicodeData), false};
GZIPDecompressorInputStream zStream {&mStream, false};
// TODO: error checking
arr.resize (uncompressedUnicodeDataSize / sizeof (UnicodeData));
zStream.read (arr.getRawDataPointer(), uncompressedUnicodeDataSize);
return arr;
}();
return data[(int) codepoint];
}
// https://www.unicode.org/Public/UCD/latest/ucd/Jamo.txt
static inline bool isJamoSymbol (uint32_t cp)
{
return ((cp >= 0x1100 && cp <= 0x1112) ||
(cp >= 0x1161 && cp <= 0x1175) ||
(cp >= 0x11A8 && cp <= 0x11C2));
}
static inline EmojiType getEmojiType (uint32_t cp)
{
return getUnicodeDataForCodepoint (cp).emoji;
}
} // namespace juce